Lines Matching refs:dst

61 	struct dst_entry *dst = skb_dst(skb);
62 struct net_device *dev = dst->dev;
108 nexthop = rt6_nexthop((struct rt6_info *)dst);
109 neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop);
111 neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false);
113 ret = dst_neigh_output(dst, neigh, skb);
119 IP6_INC_STATS(dev_net(dst->dev),
120 ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
161 struct dst_entry *dst = skb_dst(skb);
176 head_room += sizeof(struct ipv6hdr) + LL_RESERVED_SPACE(dst->dev);
206 hlimit = ip6_dst_hoplimit(dst);
222 mtu = dst_mtu(dst);
227 dst->dev, dst_output);
230 skb->dev = dst->dev;
324 static unsigned int ip6_dst_mtu_forward(const struct dst_entry *dst)
329 if (dst_metric_locked(dst, RTAX_MTU)) {
330 mtu = dst_metric_raw(dst, RTAX_MTU);
337 idev = __in6_dev_get(dst->dev);
365 struct dst_entry *dst = skb_dst(skb);
368 struct net *net = dev_net(dst->dev);
381 IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
411 skb->dev = dst->dev;
413 IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
427 IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
434 IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
438 dst = skb_dst(skb);
444 if (skb->dev == dst->dev && opt->srcrt == 0 && !skb_sec_path(skb)) {
454 rt = (struct rt6_info *) dst;
483 mtu = ip6_dst_mtu_forward(dst);
489 skb->dev = dst->dev;
491 IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
493 IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
499 if (skb_cow(skb, dst->dev->hard_header_len)) {
500 IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
511 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
512 IP6_ADD_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len);
513 return NF_HOOK(NFPROTO_IPV6, NF_INET_FORWARD, skb, skb->dev, dst->dev,
517 IP6_INC_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_INADDRERRORS);
656 dst_hold(&rt->dst);
684 IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
698 IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
706 IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
734 hroom = LL_RESERVED_SPACE(rt->dst.dev);
735 troom = rt->dst.dev->needed_tailroom;
845 struct dst_entry *dst,
851 if (!dst)
854 if (dst->ops->family != AF_INET6) {
855 dst_release(dst);
859 rt = (struct rt6_info *)dst;
881 (fl6->flowi6_oif && fl6->flowi6_oif != dst->dev->ifindex)) {
882 dst_release(dst);
883 dst = NULL;
887 return dst;
891 struct dst_entry **dst, struct flowi6 *fl6)
900 if (*dst == NULL)
901 *dst = ip6_route_output(net, sk, fl6);
903 if ((err = (*dst)->error))
907 struct rt6_info *rt = (struct rt6_info *) *dst;
917 * Here if the dst entry we've looked up
921 * dst entry and replace it instead with the
922 * dst entry of the nexthop router
924 rt = (struct rt6_info *) *dst;
926 n = __ipv6_neigh_lookup_noref(rt->dst.dev, rt6_nexthop(rt));
936 (*dst)->dev, 1);
944 * We need to get the dst entry for the
947 dst_release(*dst);
950 *dst = ip6_route_output(net, sk, &fl_gw6);
951 if ((err = (*dst)->error))
962 dst_release(*dst);
963 *dst = NULL;
970 * @dst: pointer to dst_entry * for result
977 int ip6_dst_lookup(struct sock *sk, struct dst_entry **dst, struct flowi6 *fl6)
979 *dst = NULL;
980 return ip6_dst_lookup_tail(sk, dst, fl6);
992 * It returns a valid dst pointer on success, or a pointer encoded
998 struct dst_entry *dst = NULL;
1001 err = ip6_dst_lookup_tail(sk, &dst, fl6);
1007 return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
1013 * @sk: socket which provides the dst cache and route info
1019 * It will take the socket dst lock when operating on the dst cache.
1022 * It returns a valid dst pointer on success, or a pointer encoded
1028 struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie);
1031 dst = ip6_sk_dst_check(sk, dst, fl6);
1033 err = ip6_dst_lookup_tail(sk, &dst, fl6);
1039 return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
1120 if (!(rt->dst.flags & DST_XFRM_TUNNEL)) {
1123 *mtu = orig_mtu - rt->dst.header_len;
1198 dst_hold(&rt->dst);
1199 cork->dst = &rt->dst;
1203 if (rt->dst.flags & DST_XFRM_TUNNEL)
1205 rt->dst.dev->mtu : dst_mtu(&rt->dst);
1208 rt->dst.dev->mtu : dst_mtu(rt->dst.path);
1214 if (dst_allfrag(rt->dst.path))
1220 dst_exthdrlen = rt->dst.header_len - rt->rt6i_nfheader_len;
1222 rt = (struct rt6_info *)cork->dst;
1232 hh_len = LL_RESERVED_SPACE(rt->dst.dev);
1244 (dst_allfrag(&rt->dst) ?
1299 (rt->dst.dev->features & NETIF_F_UFO)) {
1344 datalen = maxfraglen - fragheaderlen - rt->dst.trailer_len;
1346 !(rt->dst.dev->features&NETIF_F_SG))
1358 datalen += rt->dst.trailer_len;
1361 alloclen += rt->dst.trailer_len;
1448 if (!(rt->dst.dev->features&NETIF_F_SG)) {
1516 if (inet->cork.base.dst) {
1517 dst_release(inet->cork.base.dst);
1518 inet->cork.base.dst = NULL;
1534 struct rt6_info *rt = (struct rt6_info *)inet->cork.base.dst;
1582 skb_dst_set(skb, dst_clone(&rt->dst));