Lines Matching refs:dst
90 #include <net/dst.h>
137 static struct dst_entry *ipv4_dst_check(struct dst_entry *dst, u32 cookie);
138 static unsigned int ipv4_default_advmss(const struct dst_entry *dst);
139 static unsigned int ipv4_mtu(const struct dst_entry *dst);
141 struct dst_entry *dst);
143 static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
146 static void ip_do_redirect(struct dst_entry *dst, struct sock *sk,
148 static void ipv4_dst_destroy(struct dst_entry *dst);
150 static u32 *ipv4_cow_metrics(struct dst_entry *dst, unsigned long old)
156 static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst,
159 static void ipv4_confirm_neigh(const struct dst_entry *dst, const void *daddr);
343 struct ip_rt_acct *dst, *src;
346 dst = kcalloc(256, sizeof(struct ip_rt_acct), GFP_KERNEL);
347 if (!dst)
353 dst[j].o_bytes += src[j].o_bytes;
354 dst[j].o_packets += src[j].o_packets;
355 dst[j].i_bytes += src[j].i_bytes;
356 dst[j].i_packets += src[j].i_packets;
360 seq_write(m, dst, 256 * sizeof(struct ip_rt_acct));
361 kfree(dst);
426 return rth->rt_genid != rt_genid_ipv4(dev_net(rth->dst.dev));
434 static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst,
438 const struct rtable *rt = container_of(dst, struct rtable, dst);
439 struct net_device *dev = dst->dev;
463 static void ipv4_confirm_neigh(const struct dst_entry *dst, const void *daddr)
465 const struct rtable *rt = container_of(dst, struct rtable, dst);
466 struct net_device *dev = dst->dev;
612 dst_dev_put(&rt->dst);
613 dst_release(&rt->dst);
618 dst_dev_put(&rt->dst);
619 dst_release(&rt->dst);
658 rt->dst.expires = fnhe->fnhe_expires;
750 rt->dst.obsolete = DST_OBSOLETE_KILL;
757 rt->dst.obsolete = DST_OBSOLETE_KILL;
812 n = __ipv4_neigh_lookup(rt->dst.dev, (__force u32)new_gw);
814 n = neigh_create(&arp_tbl, &new_gw, rt->dst.dev);
829 rt->dst.obsolete = DST_OBSOLETE_KILL;
852 static void ip_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb)
863 rt = (struct rtable *) dst;
871 struct dst_entry *dst)
873 struct rtable *rt = (struct rtable *)dst;
875 if ((dst->obsolete > 0) ||
877 rt->dst.expires)
907 in_dev = __in_dev_get_rcu(rt->dst.dev);
913 vif = l3mdev_master_ifindex_rcu(rt->dst.dev);
916 net = dev_net(rt->dst.dev);
933 * set dst.rate_last to the last seen redirected packet.
987 net = dev_net(rt->dst.dev);
989 switch (rt->dst.error) {
1001 switch (rt->dst.error) {
1042 struct dst_entry *dst = &rt->dst;
1043 struct net *net = dev_net(dst->dev);
1048 if (ip_mtu_locked(dst))
1051 old_mtu = ipv4_mtu(dst);
1061 time_before(jiffies, dst->expires - ip_rt_mtu_expires / 2))
1076 static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
1080 struct rtable *rt = (struct rtable *) dst;
1163 __ip_rt_update_pmtu((struct rtable *)xfrm_dst_path(&rt->dst), &fl4, mtu);
1165 if (!dst_check(&rt->dst, 0)) {
1167 dst_release(&rt->dst);
1177 sk_dst_set(sk, &rt->dst);
1218 static struct dst_entry *ipv4_dst_check(struct dst_entry *dst, u32 cookie)
1220 struct rtable *rt = (struct rtable *) dst;
1230 if (dst->obsolete != DST_OBSOLETE_FORCE_CHK || rt_is_expired(rt))
1232 return dst;
1255 dev = skb->dev ? skb->dev : skb_rtable(skb)->dst.dev;
1273 dst_set_expires(&rt->dst, 0);
1308 .flowi4_oif = rt->dst.dev->ifindex,
1314 if (fib_lookup(dev_net(rt->dst.dev), &fl4, &res, 0) == 0)
1315 src = fib_result_prefsrc(dev_net(rt->dst.dev), &res);
1317 src = inet_select_addr(rt->dst.dev,
1328 if (!(rt->dst.tclassid & 0xFFFF))
1329 rt->dst.tclassid |= tag & 0xFFFF;
1330 if (!(rt->dst.tclassid & 0xFFFF0000))
1331 rt->dst.tclassid |= tag & 0xFFFF0000;
1335 static unsigned int ipv4_default_advmss(const struct dst_entry *dst)
1338 unsigned int advmss = max_t(unsigned int, ipv4_mtu(dst) - header_size,
1344 static unsigned int ipv4_mtu(const struct dst_entry *dst)
1346 const struct rtable *rt = (const struct rtable *)dst;
1349 if (!mtu || time_after_eq(jiffies, rt->dst.expires))
1350 mtu = dst_metric_raw(dst, RTAX_MTU);
1355 mtu = READ_ONCE(dst->dev->mtu);
1357 if (unlikely(ip_mtu_locked(dst))) {
1365 return mtu - lwtunnel_headroom(dst->lwtstate, mtu);
1469 int genid = fnhe_genid(dev_net(rt->dst.dev));
1493 dst_hold(&rt->dst);
1496 dst_dev_put(&orig->dst);
1497 dst_release(&orig->dst);
1521 /* hold dst before doing cmpxchg() to avoid race condition
1522 * on this dst
1524 dst_hold(&rt->dst);
1529 dst_release(&orig->dst);
1532 dst_release(&rt->dst);
1568 static void ipv4_dst_destroy(struct dst_entry *dst)
1570 struct rtable *rt = (struct rtable *)dst;
1572 ip_dst_metrics_put(dst);
1586 if (rt->dst.dev != dev)
1588 rt->dst.dev = blackhole_netdev;
1589 dev_hold(rt->dst.dev);
1599 rt->dst.obsolete == DST_OBSOLETE_FORCE_CHK &&
1624 ip_dst_init_metrics(&rt->dst, fi->fib_metrics);
1631 rt->dst.tclassid = nh->nh_tclassid;
1634 rt->dst.lwtstate = lwtstate_get(nhc->nhc_lwtstate);
1685 rt->dst.output = ip_output;
1687 rt->dst.input = ip_local_deliver;
1699 rt->dst.flags);
1716 new_rt->dst.input = rt->dst.input;
1717 new_rt->dst.output = rt->dst.output;
1718 new_rt->dst.error = rt->dst.error;
1719 new_rt->dst.lastuse = jiffies;
1720 new_rt->dst.lwtstate = lwtstate_get(rt->dst.lwtstate);
1785 rth->dst.tclassid = itag;
1787 rth->dst.output = ip_rt_bug;
1792 rth->dst.input = ip_mr_input;
1797 skb_dst_set(skb, &rth->dst);
1895 skb_dst_set_noref(skb, &rth->dst);
1910 rth->dst.input = ip_forward;
1914 lwtunnel_set_redirect(&rth->dst);
1915 skb_dst_set(skb, &rth->dst);
1959 hash_keys->addrs.v4addrs.dst = key_iph->daddr;
1978 hash_keys.addrs.v4addrs.dst = fl4->daddr;
2000 hash_keys.addrs.v4addrs.dst = flkeys->addrs.v4addrs.dst;
2002 hash_keys.ports.dst = flkeys->ports.dst;
2008 hash_keys.addrs.v4addrs.dst = fl4->daddr;
2010 hash_keys.ports.dst = fl4->fl4_dport;
2025 hash_keys.addrs.v4addrs.dst = keys.addrs.v4addrs.dst;
2029 hash_keys.addrs.v6addrs.dst = keys.addrs.v6addrs.dst;
2041 hash_keys.addrs.v4addrs.dst = fl4->daddr;
2284 skb_dst_set_noref(skb, &rth->dst);
2296 rth->dst.output= ip_rt_bug;
2298 rth->dst.tclassid = itag;
2304 rth->dst.input= ip_error;
2305 rth->dst.error= -err;
2312 rth->dst.lwtstate = lwtstate_get(nhc->nhc_lwtstate);
2313 if (lwtunnel_input_redirect(rth->dst.lwtstate)) {
2314 WARN_ON(rth->dst.input == lwtunnel_input);
2315 rth->dst.lwtstate->orig_input = rth->dst.input;
2316 rth->dst.input = lwtunnel_input;
2322 skb_dst_set(skb, &rth->dst);
2509 if (rt_cache_valid(rth) && dst_hold_safe(&rth->dst))
2527 rth->dst.output = ip_mc_output;
2534 rth->dst.input = ip_mr_input;
2535 rth->dst.output = ip_mc_output;
2542 lwtunnel_set_redirect(&rth->dst);
2762 struct dst_entry *new = &rt->dst;
2792 return rt ? &rt->dst : ERR_PTR(-ENOMEM);
2804 flp4->flowi4_oif = rt->dst.dev->ifindex;
2805 rt = (struct rtable *)xfrm_lookup_route(net, &rt->dst,
2838 fl4.daddr = info->key.u.ipv4.dst;
2848 if (rt->dst.dev == dev) { /* is this necessary? */
2855 dst_cache_set_ip4(dst_cache, &rt->dst, fl4.saddr);
2863 static int rt_fill_info(struct net *net, __be32 dst, __be32 src,
2895 if (nla_put_in_addr(skb, RTA_DST, dst))
2902 if (rt->dst.dev &&
2903 nla_put_u32(skb, RTA_OIF, rt->dst.dev->ifindex))
2906 if (rt->dst.tclassid &&
2907 nla_put_u32(skb, RTA_FLOW, rt->dst.tclassid))
2934 expires = rt->dst.expires;
2944 memcpy(metrics, dst_metrics_ptr(&rt->dst), sizeof(metrics));
2965 if (ipv4_is_multicast(dst) &&
2966 !ipv4_is_local_multicast(dst) &&
2984 error = rt->dst.error;
2986 if (rtnl_put_cacheinfo(skb, &rt->dst, 0, expires, error) < 0)
3072 static struct sk_buff *inet_rtm_getroute_build_skb(__be32 src, __be32 dst,
3092 iph->daddr = dst;
3118 src, dst, 0);
3215 __be32 dst = 0;
3228 dst = tb[RTA_DST] ? nla_get_in_addr(tb[RTA_DST]) : 0;
3249 skb = inet_rtm_getroute_build_skb(src, dst, ip_proto, sport, dport);
3253 fl4.daddr = dst;
3279 err = ip_route_input_rcu(skb, dst, src,
3284 if (err == 0 && rt->dst.error)
3285 err = -rt->dst.error;
3294 skb_dst_set(skb, &rt->dst);
3323 fri.dst = res.prefix;
3349 err = rt_fill_info(net, dst, src, rt, table_id, &fl4, skb,