Lines Matching refs:dst
62 struct dst_entry *dst = skb_dst(skb); in ip6_finish_output2() local
63 struct net_device *dev = dst->dev; in ip6_finish_output2()
108 nexthop = rt6_nexthop((struct rt6_info *)dst, &ipv6_hdr(skb)->daddr); in ip6_finish_output2()
109 neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop); in ip6_finish_output2()
111 neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false); in ip6_finish_output2()
113 ret = dst_neigh_output(dst, neigh, skb); in ip6_finish_output2()
119 IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES); in ip6_finish_output2()
163 struct dst_entry *dst = skb_dst(skb); in ip6_xmit() local
178 head_room += sizeof(struct ipv6hdr) + LL_RESERVED_SPACE(dst->dev); in ip6_xmit()
211 hlimit = ip6_dst_hoplimit(dst); in ip6_xmit()
227 mtu = dst_mtu(dst); in ip6_xmit()
235 net, (struct sock *)sk, skb, NULL, dst->dev, in ip6_xmit()
239 skb->dev = dst->dev; in ip6_xmit()
339 static unsigned int ip6_dst_mtu_forward(const struct dst_entry *dst) in ip6_dst_mtu_forward() argument
344 if (dst_metric_locked(dst, RTAX_MTU)) { in ip6_dst_mtu_forward()
345 mtu = dst_metric_raw(dst, RTAX_MTU); in ip6_dst_mtu_forward()
352 idev = __in6_dev_get(dst->dev); in ip6_dst_mtu_forward()
380 struct dst_entry *dst = skb_dst(skb); in ip6_forward() local
383 struct net *net = dev_net(dst->dev); in ip6_forward()
399 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
429 skb->dev = dst->dev; in ip6_forward()
431 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
445 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
452 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
456 dst = skb_dst(skb); in ip6_forward()
462 if (skb->dev == dst->dev && opt->srcrt == 0 && !skb_sec_path(skb)) { in ip6_forward()
472 rt = (struct rt6_info *) dst; in ip6_forward()
501 mtu = ip6_dst_mtu_forward(dst); in ip6_forward()
507 skb->dev = dst->dev; in ip6_forward()
509 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
511 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
517 if (skb_cow(skb, dst->dev->hard_header_len)) { in ip6_forward()
518 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
529 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS); in ip6_forward()
530 IP6_ADD_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len); in ip6_forward()
532 net, NULL, skb, skb->dev, dst->dev, in ip6_forward()
536 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_INADDRERRORS); in ip6_forward()
610 hroom = LL_RESERVED_SPACE(rt->dst.dev); in ip6_fragment()
672 dst_hold(&rt->dst); in ip6_fragment()
700 IP6_INC_STATS(net, ip6_dst_idev(&rt->dst), in ip6_fragment()
714 IP6_INC_STATS(net, ip6_dst_idev(&rt->dst), in ip6_fragment()
722 IP6_INC_STATS(net, ip6_dst_idev(&rt->dst), in ip6_fragment()
746 troom = rt->dst.dev->needed_tailroom; in ip6_fragment()
858 struct dst_entry *dst, in ip6_sk_dst_check() argument
864 if (!dst) in ip6_sk_dst_check()
867 if (dst->ops->family != AF_INET6) { in ip6_sk_dst_check()
868 dst_release(dst); in ip6_sk_dst_check()
872 rt = (struct rt6_info *)dst; in ip6_sk_dst_check()
895 (fl6->flowi6_oif && fl6->flowi6_oif != dst->dev->ifindex))) { in ip6_sk_dst_check()
896 dst_release(dst); in ip6_sk_dst_check()
897 dst = NULL; in ip6_sk_dst_check()
901 return dst; in ip6_sk_dst_check()
905 struct dst_entry **dst, struct flowi6 *fl6) in ip6_dst_lookup_tail() argument
923 if (ipv6_addr_any(&fl6->saddr) && (!*dst || !(*dst)->error)) { in ip6_dst_lookup_tail()
925 bool had_dst = *dst != NULL; in ip6_dst_lookup_tail()
928 *dst = ip6_route_output(net, sk, fl6); in ip6_dst_lookup_tail()
929 rt = (*dst)->error ? NULL : (struct rt6_info *)*dst; in ip6_dst_lookup_tail()
940 if (!had_dst && (*dst)->error) { in ip6_dst_lookup_tail()
941 dst_release(*dst); in ip6_dst_lookup_tail()
942 *dst = NULL; in ip6_dst_lookup_tail()
949 if (!*dst) in ip6_dst_lookup_tail()
950 *dst = ip6_route_output_flags(net, sk, fl6, flags); in ip6_dst_lookup_tail()
952 err = (*dst)->error; in ip6_dst_lookup_tail()
965 rt = (struct rt6_info *) *dst; in ip6_dst_lookup_tail()
967 n = __ipv6_neigh_lookup_noref(rt->dst.dev, in ip6_dst_lookup_tail()
978 (*dst)->dev, 1); in ip6_dst_lookup_tail()
989 dst_release(*dst); in ip6_dst_lookup_tail()
992 *dst = ip6_route_output(net, sk, &fl_gw6); in ip6_dst_lookup_tail()
993 err = (*dst)->error; in ip6_dst_lookup_tail()
1005 dst_release(*dst); in ip6_dst_lookup_tail()
1006 *dst = NULL; in ip6_dst_lookup_tail()
1020 int ip6_dst_lookup(struct net *net, struct sock *sk, struct dst_entry **dst, in ip6_dst_lookup() argument
1023 *dst = NULL; in ip6_dst_lookup()
1024 return ip6_dst_lookup_tail(net, sk, dst, fl6); in ip6_dst_lookup()
1042 struct dst_entry *dst = NULL; in ip6_dst_lookup_flow() local
1045 err = ip6_dst_lookup_tail(sock_net(sk), sk, &dst, fl6); in ip6_dst_lookup_flow()
1051 fl6->flowi6_oif = l3mdev_fib_oif(dst->dev); in ip6_dst_lookup_flow()
1053 return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); in ip6_dst_lookup_flow()
1074 struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie); in ip6_sk_dst_lookup_flow() local
1076 dst = ip6_sk_dst_check(sk, dst, fl6); in ip6_sk_dst_lookup_flow()
1077 if (!dst) in ip6_sk_dst_lookup_flow()
1078 dst = ip6_dst_lookup_flow(sk, fl6, final_dst); in ip6_sk_dst_lookup_flow()
1080 return dst; in ip6_sk_dst_lookup_flow()
1163 if (!(rt->dst.flags & DST_XFRM_TUNNEL)) { in ip6_append_data_mtu()
1166 *mtu = orig_mtu - rt->dst.header_len; in ip6_append_data_mtu()
1225 dst_hold(&rt->dst); in ip6_setup_cork()
1226 cork->base.dst = &rt->dst; in ip6_setup_cork()
1230 if (rt->dst.flags & DST_XFRM_TUNNEL) in ip6_setup_cork()
1232 rt->dst.dev->mtu : dst_mtu(&rt->dst); in ip6_setup_cork()
1235 rt->dst.dev->mtu : dst_mtu(rt->dst.path); in ip6_setup_cork()
1241 if (dst_allfrag(rt->dst.path)) in ip6_setup_cork()
1269 struct rt6_info *rt = (struct rt6_info *)cork->dst; in __ip6_append_data()
1277 dst_exthdrlen = rt->dst.header_len - rt->rt6i_nfheader_len; in __ip6_append_data()
1283 hh_len = LL_RESERVED_SPACE(rt->dst.dev); in __ip6_append_data()
1292 (dst_allfrag(&rt->dst) ? in __ip6_append_data()
1324 rt->dst.dev->features & NETIF_F_V6_CSUM) in __ip6_append_data()
1354 (rt->dst.dev->features & NETIF_F_UFO) && in __ip6_append_data()
1400 datalen = maxfraglen - fragheaderlen - rt->dst.trailer_len; in __ip6_append_data()
1402 !(rt->dst.dev->features&NETIF_F_SG)) in __ip6_append_data()
1414 datalen += rt->dst.trailer_len; in __ip6_append_data()
1417 alloclen += rt->dst.trailer_len; in __ip6_append_data()
1504 if (!(rt->dst.dev->features&NETIF_F_SG)) { in __ip6_append_data()
1608 if (cork->base.dst) { in ip6_cork_release()
1609 dst_release(cork->base.dst); in ip6_cork_release()
1610 cork->base.dst = NULL; in ip6_cork_release()
1628 struct rt6_info *rt = (struct rt6_info *)cork->base.dst; in __ip6_make_skb()
1676 skb_dst_set(skb, dst_clone(&rt->dst)); in __ip6_make_skb()