Lines Matching refs:dst

61 	struct dst_entry *dst = skb_dst(skb);
62 struct net_device *dev = dst->dev;
90 IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTDISCARDS);
131 if (lwtunnel_xmit_redirect(dst->lwtstate)) {
139 nexthop = rt6_nexthop((struct rt6_info *)dst, &ipv6_hdr(skb)->daddr);
140 neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop);
142 neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false);
151 IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
275 struct dst_entry *dst = skb_dst(skb);
283 head_room = sizeof(struct ipv6hdr) + LL_RESERVED_SPACE(dst->dev);
322 hlimit = ip6_dst_hoplimit(dst);
338 mtu = dst_mtu(dst);
354 net, (struct sock *)sk, skb, NULL, dst->dev,
358 skb->dev = dst->dev;
460 struct dst_entry *dst = skb_dst(skb);
462 __IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
463 __IP6_ADD_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len);
496 struct dst_entry *dst = skb_dst(skb);
499 struct net *net = dev_net(dst->dev);
570 dst = skb_dst(skb);
576 if (IP6CB(skb)->iif == dst->dev->ifindex &&
587 rt = (struct rt6_info *) dst;
616 mtu = ip6_dst_mtu_forward(dst);
622 skb->dev = dst->dev;
625 __IP6_INC_STATS(net, ip6_dst_idev(dst),
631 if (skb_cow(skb, dst->dev->hard_header_len)) {
632 __IP6_INC_STATS(net, ip6_dst_idev(dst),
644 net, NULL, skb, skb->dev, dst->dev,
892 hroom = LL_RESERVED_SPACE(rt->dst.dev);
940 IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
952 IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
960 IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
980 ip6_frag_init(skb, hlen, mtu, rt->dst.dev->needed_tailroom,
981 LL_RESERVED_SPACE(rt->dst.dev), prevhdr, nexthdr, frag_id,
1034 struct dst_entry *dst,
1040 if (!dst)
1043 if (dst->ops->family != AF_INET6) {
1044 dst_release(dst);
1048 rt = (struct rt6_info *)dst;
1071 (fl6->flowi6_oif && fl6->flowi6_oif != dst->dev->ifindex))) {
1072 dst_release(dst);
1073 dst = NULL;
1077 return dst;
1081 struct dst_entry **dst, struct flowi6 *fl6)
1099 if (ipv6_addr_any(&fl6->saddr) && (!*dst || !(*dst)->error)) {
1102 bool had_dst = *dst != NULL;
1105 *dst = ip6_route_output(net, sk, fl6);
1106 rt = (*dst)->error ? NULL : (struct rt6_info *)*dst;
1122 if (!had_dst && (*dst)->error) {
1123 dst_release(*dst);
1124 *dst = NULL;
1131 if (!*dst)
1132 *dst = ip6_route_output_flags(net, sk, fl6, flags);
1134 err = (*dst)->error;
1140 * Here if the dst entry we've looked up
1144 * dst entry and replace it instead with the
1145 * dst entry of the nexthop router
1147 rt = (struct rt6_info *) *dst;
1149 n = __ipv6_neigh_lookup_noref(rt->dst.dev,
1160 (*dst)->dev, 1);
1168 * We need to get the dst entry for the
1171 dst_release(*dst);
1174 *dst = ip6_route_output(net, sk, &fl_gw6);
1175 err = (*dst)->error;
1190 dst_release(*dst);
1191 *dst = NULL;
1202 * @dst: pointer to dst_entry * for result
1209 int ip6_dst_lookup(struct net *net, struct sock *sk, struct dst_entry **dst,
1212 *dst = NULL;
1213 return ip6_dst_lookup_tail(net, sk, dst, fl6);
1226 * It returns a valid dst pointer on success, or a pointer encoded
1232 struct dst_entry *dst = NULL;
1235 err = ip6_dst_lookup_tail(net, sk, &dst, fl6);
1241 return xfrm_lookup_route(net, dst, flowi6_to_flowi(fl6), sk, 0);
1247 * @sk: socket which provides the dst cache and route info
1254 * It will take the socket dst lock when operating on the dst cache.
1257 * In addition, for a connected socket, cache the dst in the socket
1260 * It returns a valid dst pointer on success, or a pointer encoded
1267 struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie);
1269 dst = ip6_sk_dst_check(sk, dst, fl6);
1270 if (dst)
1271 return dst;
1273 dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_dst);
1274 if (connected && !IS_ERR(dst))
1275 ip6_sk_dst_store_flow(sk, dst_clone(dst), fl6);
1277 return dst;
1293 * It returns a valid dst pointer and stores src address to be used in
1306 struct dst_entry *dst = NULL;
1316 dst = dst_cache_get_ip6(dst_cache, saddr);
1317 if (dst)
1318 return dst;
1324 fl6.daddr = info->key.u.ipv6.dst;
1329 dst = ipv6_stub->ipv6_dst_lookup_flow(net, sock->sk, &fl6,
1331 if (IS_ERR(dst)) {
1335 if (dst->dev == dev) { /* is this necessary? */
1337 dst_release(dst);
1342 dst_cache_set_ip6(dst_cache, dst, &fl6.saddr);
1345 return dst;
1368 if (!(rt->dst.flags & DST_XFRM_TUNNEL)) {
1371 *mtu = orig_mtu - rt->dst.header_len;
1430 dst_hold(&rt->dst);
1431 cork->base.dst = &rt->dst;
1435 if (rt->dst.flags & DST_XFRM_TUNNEL)
1437 READ_ONCE(rt->dst.dev->mtu) : dst_mtu(&rt->dst);
1440 READ_ONCE(rt->dst.dev->mtu) : dst_mtu(xfrm_dst_path(&rt->dst));
1451 if (dst_allfrag(xfrm_dst_path(&rt->dst)))
1481 struct rt6_info *rt = (struct rt6_info *)cork->dst;
1491 dst_exthdrlen = rt->dst.header_len - rt->rt6i_nfheader_len;
1502 hh_len = LL_RESERVED_SPACE(rt->dst.dev);
1509 (dst_allfrag(&rt->dst) ?
1553 rt->dst.dev->features & (NETIF_F_IPV6_CSUM | NETIF_F_HW_CSUM))
1561 if (rt->dst.dev->features & NETIF_F_SG &&
1624 datalen = maxfraglen - fragheaderlen - rt->dst.trailer_len;
1630 alloc_extra += rt->dst.trailer_len;
1639 !(rt->dst.dev->features&NETIF_F_SG))
1643 !(rt->dst.dev->features & NETIF_F_SG)))
1656 datalen += rt->dst.trailer_len;
1746 if (!(rt->dst.dev->features&NETIF_F_SG) &&
1860 if (cork->base.dst) {
1861 dst_release(cork->base.dst);
1862 cork->base.dst = NULL;
1880 struct rt6_info *rt = (struct rt6_info *)cork->base.dst;
1930 skb_dst_set(skb, dst_clone(&rt->dst));
2027 cork->base.dst = NULL;