Lines Matching refs:dst
61 struct dst_entry *dst = skb_dst(skb); in ip6_finish_output2() local
62 struct net_device *dev = dst->dev; in ip6_finish_output2()
108 nexthop = rt6_nexthop((struct rt6_info *)dst); 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(dev_net(dst->dev), in ip6_finish_output2()
120 ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES); in ip6_finish_output2()
162 struct dst_entry *dst = skb_dst(skb); in ip6_xmit() local
177 head_room += sizeof(struct ipv6hdr) + LL_RESERVED_SPACE(dst->dev); in ip6_xmit()
207 hlimit = ip6_dst_hoplimit(dst); in ip6_xmit()
223 mtu = dst_mtu(dst); in ip6_xmit()
228 NULL, dst->dev, dst_output_sk); in ip6_xmit()
231 skb->dev = dst->dev; in ip6_xmit()
326 static unsigned int ip6_dst_mtu_forward(const struct dst_entry *dst) in ip6_dst_mtu_forward() argument
331 if (dst_metric_locked(dst, RTAX_MTU)) { in ip6_dst_mtu_forward()
332 mtu = dst_metric_raw(dst, RTAX_MTU); in ip6_dst_mtu_forward()
339 idev = __in6_dev_get(dst->dev); in ip6_dst_mtu_forward()
367 struct dst_entry *dst = skb_dst(skb); in ip6_forward() local
370 struct net *net = dev_net(dst->dev); in ip6_forward()
386 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
416 skb->dev = dst->dev; in ip6_forward()
418 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
432 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
439 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
443 dst = skb_dst(skb); in ip6_forward()
449 if (skb->dev == dst->dev && opt->srcrt == 0 && !skb_sec_path(skb)) { in ip6_forward()
459 rt = (struct rt6_info *) dst; in ip6_forward()
488 mtu = ip6_dst_mtu_forward(dst); in ip6_forward()
494 skb->dev = dst->dev; in ip6_forward()
496 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
498 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
504 if (skb_cow(skb, dst->dev->hard_header_len)) { in ip6_forward()
505 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), in ip6_forward()
516 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS); in ip6_forward()
517 IP6_ADD_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len); in ip6_forward()
519 skb->dev, dst->dev, in ip6_forward()
523 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_INADDRERRORS); in ip6_forward()
650 dst_hold(&rt->dst); in ip6_fragment()
678 IP6_INC_STATS(net, ip6_dst_idev(&rt->dst), in ip6_fragment()
692 IP6_INC_STATS(net, ip6_dst_idev(&rt->dst), in ip6_fragment()
700 IP6_INC_STATS(net, ip6_dst_idev(&rt->dst), in ip6_fragment()
728 hroom = LL_RESERVED_SPACE(rt->dst.dev); in ip6_fragment()
729 troom = rt->dst.dev->needed_tailroom; in ip6_fragment()
837 struct dst_entry *dst, in ip6_sk_dst_check() argument
843 if (!dst) in ip6_sk_dst_check()
846 if (dst->ops->family != AF_INET6) { in ip6_sk_dst_check()
847 dst_release(dst); in ip6_sk_dst_check()
851 rt = (struct rt6_info *)dst; in ip6_sk_dst_check()
873 (fl6->flowi6_oif && fl6->flowi6_oif != dst->dev->ifindex)) { in ip6_sk_dst_check()
874 dst_release(dst); in ip6_sk_dst_check()
875 dst = NULL; in ip6_sk_dst_check()
879 return dst; in ip6_sk_dst_check()
883 struct dst_entry **dst, struct flowi6 *fl6) in ip6_dst_lookup_tail() argument
902 if (ipv6_addr_any(&fl6->saddr) && (!*dst || !(*dst)->error)) { in ip6_dst_lookup_tail()
904 bool had_dst = *dst != NULL; in ip6_dst_lookup_tail()
907 *dst = ip6_route_output(net, sk, fl6); in ip6_dst_lookup_tail()
908 rt = (*dst)->error ? NULL : (struct rt6_info *)*dst; in ip6_dst_lookup_tail()
919 if (!had_dst && (*dst)->error) { in ip6_dst_lookup_tail()
920 dst_release(*dst); in ip6_dst_lookup_tail()
921 *dst = NULL; in ip6_dst_lookup_tail()
928 if (!*dst) in ip6_dst_lookup_tail()
929 *dst = ip6_route_output_flags(net, sk, fl6, flags); in ip6_dst_lookup_tail()
931 err = (*dst)->error; in ip6_dst_lookup_tail()
944 rt = (struct rt6_info *) *dst; in ip6_dst_lookup_tail()
946 n = __ipv6_neigh_lookup_noref(rt->dst.dev, rt6_nexthop(rt)); in ip6_dst_lookup_tail()
956 (*dst)->dev, 1); in ip6_dst_lookup_tail()
967 dst_release(*dst); in ip6_dst_lookup_tail()
970 *dst = ip6_route_output(net, sk, &fl_gw6); in ip6_dst_lookup_tail()
971 err = (*dst)->error; in ip6_dst_lookup_tail()
983 dst_release(*dst); in ip6_dst_lookup_tail()
984 *dst = NULL; in ip6_dst_lookup_tail()
998 int ip6_dst_lookup(struct sock *sk, struct dst_entry **dst, struct flowi6 *fl6) in ip6_dst_lookup() argument
1000 *dst = NULL; in ip6_dst_lookup()
1001 return ip6_dst_lookup_tail(sk, dst, fl6); in ip6_dst_lookup()
1019 struct dst_entry *dst = NULL; in ip6_dst_lookup_flow() local
1022 err = ip6_dst_lookup_tail(sk, &dst, fl6); in ip6_dst_lookup_flow()
1028 return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); in ip6_dst_lookup_flow()
1049 struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie); in ip6_sk_dst_lookup_flow() local
1052 dst = ip6_sk_dst_check(sk, dst, fl6); in ip6_sk_dst_lookup_flow()
1054 err = ip6_dst_lookup_tail(sk, &dst, fl6); in ip6_sk_dst_lookup_flow()
1060 return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); in ip6_sk_dst_lookup_flow()
1143 if (!(rt->dst.flags & DST_XFRM_TUNNEL)) { in ip6_append_data_mtu()
1146 *mtu = orig_mtu - rt->dst.header_len; in ip6_append_data_mtu()
1205 dst_hold(&rt->dst); in ip6_setup_cork()
1206 cork->base.dst = &rt->dst; in ip6_setup_cork()
1210 if (rt->dst.flags & DST_XFRM_TUNNEL) in ip6_setup_cork()
1212 rt->dst.dev->mtu : dst_mtu(&rt->dst); in ip6_setup_cork()
1215 rt->dst.dev->mtu : dst_mtu(rt->dst.path); in ip6_setup_cork()
1221 if (dst_allfrag(rt->dst.path)) in ip6_setup_cork()
1249 struct rt6_info *rt = (struct rt6_info *)cork->dst; in __ip6_append_data()
1256 dst_exthdrlen = rt->dst.header_len - rt->rt6i_nfheader_len; in __ip6_append_data()
1262 hh_len = LL_RESERVED_SPACE(rt->dst.dev); in __ip6_append_data()
1274 (dst_allfrag(&rt->dst) ? in __ip6_append_data()
1315 rt->dst.dev->features & NETIF_F_V6_CSUM && in __ip6_append_data()
1338 (rt->dst.dev->features & NETIF_F_UFO) && in __ip6_append_data()
1384 datalen = maxfraglen - fragheaderlen - rt->dst.trailer_len; in __ip6_append_data()
1386 !(rt->dst.dev->features&NETIF_F_SG)) in __ip6_append_data()
1398 datalen += rt->dst.trailer_len; in __ip6_append_data()
1401 alloclen += rt->dst.trailer_len; in __ip6_append_data()
1488 if (!(rt->dst.dev->features&NETIF_F_SG)) { in __ip6_append_data()
1592 if (cork->base.dst) { in ip6_cork_release()
1593 dst_release(cork->base.dst); in ip6_cork_release()
1594 cork->base.dst = NULL; in ip6_cork_release()
1612 struct rt6_info *rt = (struct rt6_info *)cork->base.dst; in __ip6_make_skb()
1660 skb_dst_set(skb, dst_clone(&rt->dst)); in __ip6_make_skb()