Lines Matching defs:dst

32 #include <net/dst.h>
165 static int stale_bundle(struct dst_entry *dst);
260 struct dst_entry *dst;
266 dst = afinfo->dst_lookup(net, tos, oif, saddr, daddr, mark);
270 return dst;
283 struct dst_entry *dst;
294 dst = __xfrm_dst_lookup(net, tos, oif, saddr, daddr, family, mark);
296 if (!IS_ERR(dst)) {
303 return dst;
1310 /* dir out => dst = remote, src = local */
1316 /* dir in/fwd => dst = local, src = remote */
2491 struct dst_entry *dst = &xdst->u.dst;
2493 memset(dst + 1, 0, sizeof(*xdst) - sizeof(*dst));
2502 static void xfrm_init_path(struct xfrm_dst *path, struct dst_entry *dst,
2505 if (dst->ops->family == AF_INET6) {
2506 struct rt6_info *rt = (struct rt6_info *)dst;
2516 xfrm_policy_get_afinfo(xdst->u.dst.ops->family);
2539 struct dst_entry *dst)
2561 dst_hold(dst);
2565 struct dst_entry *dst1 = &xdst->u.dst;
2569 dst_release(dst);
2580 xfrm_dst_set_child(xdst_prev, &xdst->u.dst);
2587 dst_release(dst);
2593 xdst->route = dst;
2594 dst_copy_metrics(dst1, dst);
2603 dst = xfrm_dst_lookup(xfrm[i], tos, fl->flowi_oif,
2605 err = PTR_ERR(dst);
2606 if (IS_ERR(dst))
2609 dst_hold(dst);
2635 xfrm_dst_set_child(xdst_prev, dst);
2636 xdst0->path = dst;
2639 dev = dst->dev;
2643 xfrm_init_path(xdst0, dst, nfheader_len);
2646 for (xdst_prev = xdst0; xdst_prev != (struct xfrm_dst *)dst;
2647 xdst_prev = (struct xfrm_dst *) xfrm_dst_child(&xdst_prev->u.dst)) {
2652 xdst_prev->u.dst.header_len = header_len;
2653 xdst_prev->u.dst.trailer_len = trailer_len;
2654 header_len -= xdst_prev->u.dst.xfrm->props.header_len;
2655 trailer_len -= xdst_prev->u.dst.xfrm->props.trailer_len;
2658 return &xdst0->u.dst;
2665 dst_release_immediate(&xdst0->u.dst);
2727 struct dst_entry *dst;
2741 dst = xfrm_bundle_create(pols[0], xfrm, bundle, err, fl, dst_orig);
2742 if (IS_ERR(dst)) {
2744 return ERR_CAST(dst);
2747 xdst = (struct xfrm_dst *)dst;
2760 struct dst_entry *dst;
2774 dst = skb_dst(skb);
2780 xfrm_decode_session(skb, &fl, dst->ops->family);
2784 dst_hold(xfrm_dst_path(dst));
2785 dst = xfrm_lookup(net, xfrm_dst_path(dst), &fl, sk, XFRM_LOOKUP_QUEUE);
2786 if (IS_ERR(dst))
2789 if (dst->flags & DST_XFRM_QUEUE) {
2790 dst_release(dst);
2801 dst_release(dst);
2820 dst = xfrm_lookup(net, xfrm_dst_path(skb_dst(skb)), &fl, skb->sk, 0);
2821 if (IS_ERR(dst)) {
2828 skb_dst_set(skb, dst);
2846 struct dst_entry *dst = skb_dst(skb);
2847 struct xfrm_dst *xdst = (struct xfrm_dst *) dst;
2893 struct dst_entry *dst;
2906 dst = xflo->dst_orig;
2907 dst1 = &xdst->u.dst;
2908 dst_hold(dst);
2909 xdst->route = dst;
2911 dst_copy_metrics(dst1, dst);
2920 dst_hold(dst);
2921 xfrm_dst_set_child(xdst, dst);
2922 xdst->path = dst;
2924 xfrm_init_path((struct xfrm_dst *)dst1, dst, 0);
2927 dev = dst->dev;
3040 struct dst_entry *dst, *route;
3045 dst = NULL;
3111 dst = &xdst->u.dst;
3154 dst_release(dst);
3155 dst = dst_orig;
3159 if (dst && dst->xfrm &&
3160 dst->xfrm->props.mode == XFRM_MODE_TUNNEL)
3161 dst->flags |= DST_XFRM_TUNNEL;
3162 return dst;
3171 dst = dst_orig;
3176 dst_release(dst);
3205 struct dst_entry *dst = xfrm_lookup(net, dst_orig, fl, sk,
3209 if (PTR_ERR(dst) == -EREMOTE)
3212 if (IS_ERR(dst))
3215 return dst;
3735 struct dst_entry *dst;
3749 dst = xfrm_lookup(net, skb_dst(skb), &fl, NULL, XFRM_LOOKUP_QUEUE);
3750 if (IS_ERR(dst)) {
3752 dst = NULL;
3754 skb_dst_set(skb, dst);
3761 static struct dst_entry *xfrm_dst_check(struct dst_entry *dst, u32 cookie)
3763 /* Code (such as __xfrm4_bundle_create()) sets dst->obsolete
3766 * because when a normal route referenced by an XFRM dst is
3772 * XFRM dst A --> IPv4 dst X
3774 * X is the "xdst->route" of A (X is also the "dst->path" of A
3779 * When a dst is removed from the fib tree, DST_OBSOLETE_DEAD will
3782 * this dst linked in it.
3784 if (dst->obsolete < 0 && !stale_bundle(dst))
3785 return dst;
3790 static int stale_bundle(struct dst_entry *dst)
3792 return !xfrm_bundle_ok((struct xfrm_dst *)dst);
3795 void xfrm_dst_ifdown(struct dst_entry *dst, struct net_device *dev)
3797 while ((dst = xfrm_dst_child(dst)) && dst->xfrm && dst->dev == dev) {
3798 dst->dev = dev_net(dev)->loopback_dev;
3799 dev_hold(dst->dev);
3807 /* Impossible. Such dst must be popped before reaches point of failure. */
3810 static void xfrm_negative_advice(struct sock *sk, struct dst_entry *dst)
3812 if (dst->obsolete)
3821 struct dst_entry *dst;
3823 dst = &xdst->u.dst;
3824 pmtu = dst_mtu(xfrm_dst_child(dst));
3827 pmtu = xfrm_state_mtu(dst->xfrm, pmtu);
3835 dst_metric_set(dst, RTAX_MTU, pmtu);
3846 struct dst_entry *dst = &first->u.dst;
3851 if (!dst_check(xfrm_dst_path(dst), ((struct xfrm_dst *)dst)->path_cookie) ||
3852 (dst->dev && !netif_running(dst->dev)))
3855 if (dst->flags & DST_XFRM_QUEUE)
3860 struct xfrm_dst *xdst = (struct xfrm_dst *)dst;
3862 if (dst->xfrm->km.state != XFRM_STATE_VALID)
3864 if (xdst->xfrm_genid != dst->xfrm->genid)
3872 mtu = dst_mtu(xfrm_dst_child(dst));
3886 dst = xfrm_dst_child(dst);
3887 } while (dst->xfrm);
3895 dst = &xdst->u.dst;
3897 mtu = xfrm_state_mtu(dst->xfrm, mtu);
3900 dst_metric_set(dst, RTAX_MTU, mtu);
3911 static unsigned int xfrm_default_advmss(const struct dst_entry *dst)
3913 return dst_metric_advmss(xfrm_dst_path(dst));
3916 static unsigned int xfrm_mtu(const struct dst_entry *dst)
3918 unsigned int mtu = dst_metric_raw(dst, RTAX_MTU);
3920 return mtu ? : dst_mtu(xfrm_dst_path(dst));
3923 static const void *xfrm_get_dst_nexthop(const struct dst_entry *dst,
3926 while (dst->xfrm) {
3927 const struct xfrm_state *xfrm = dst->xfrm;
3929 dst = xfrm_dst_child(dst);
3941 static struct neighbour *xfrm_neigh_lookup(const struct dst_entry *dst,
3945 const struct dst_entry *path = xfrm_dst_path(dst);
3948 daddr = xfrm_get_dst_nexthop(dst, daddr);
3952 static void xfrm_confirm_neigh(const struct dst_entry *dst, const void *daddr)
3954 const struct dst_entry *path = xfrm_dst_path(dst);
3956 daddr = xfrm_get_dst_nexthop(dst, daddr);
4243 audit_log_format(audit_buf, " dst=%pI4", &sel->daddr.a4);
4253 audit_log_format(audit_buf, " dst=%pI6", sel->daddr.a6);