Lines Matching refs:dst
128 struct dst_entry *ipv4_dst_check(struct dst_entry *dst, u32 cookie);
129 static unsigned int ipv4_default_advmss(const struct dst_entry *dst);
131 unsigned int ipv4_mtu(const struct dst_entry *dst);
133 struct dst_entry *dst);
135 static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
138 static void ip_do_redirect(struct dst_entry *dst, struct sock *sk,
140 static void ipv4_dst_destroy(struct dst_entry *dst);
142 static u32 *ipv4_cow_metrics(struct dst_entry *dst, unsigned long old) in ipv4_cow_metrics() argument
148 static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst,
151 static void ipv4_confirm_neigh(const struct dst_entry *dst, const void *daddr);
314 struct ip_rt_acct *dst, *src; in rt_acct_proc_show() local
317 dst = kcalloc(256, sizeof(struct ip_rt_acct), GFP_KERNEL); in rt_acct_proc_show()
318 if (!dst) in rt_acct_proc_show()
324 dst[j].o_bytes += src[j].o_bytes; in rt_acct_proc_show()
325 dst[j].o_packets += src[j].o_packets; in rt_acct_proc_show()
326 dst[j].i_bytes += src[j].i_bytes; in rt_acct_proc_show()
327 dst[j].i_packets += src[j].i_packets; in rt_acct_proc_show()
331 seq_write(m, dst, 256 * sizeof(struct ip_rt_acct)); in rt_acct_proc_show()
332 kfree(dst); in rt_acct_proc_show()
400 res = rth->rt_genid != rt_genid_ipv4(dev_net_rcu(rth->dst.dev)); in rt_is_expired()
411 static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst, in ipv4_neigh_lookup() argument
415 const struct rtable *rt = container_of(dst, struct rtable, dst); in ipv4_neigh_lookup()
416 struct net_device *dev = dst_dev(dst); in ipv4_neigh_lookup()
440 static void ipv4_confirm_neigh(const struct dst_entry *dst, const void *daddr) in ipv4_confirm_neigh() argument
442 const struct rtable *rt = container_of(dst, struct rtable, dst); in ipv4_confirm_neigh()
443 struct net_device *dev = dst_dev(dst); in ipv4_confirm_neigh()
582 dst_dev_put(&rt->dst); in fnhe_flush_routes()
583 dst_release(&rt->dst); in fnhe_flush_routes()
588 dst_dev_put(&rt->dst); in fnhe_flush_routes()
589 dst_release(&rt->dst); in fnhe_flush_routes()
628 rt->dst.expires = fnhe->fnhe_expires; in fill_route_from_fnhe()
720 WRITE_ONCE(rt->dst.obsolete, DST_OBSOLETE_KILL); in update_or_create_fnhe()
728 WRITE_ONCE(rt->dst.obsolete, DST_OBSOLETE_KILL); in update_or_create_fnhe()
783 n = __ipv4_neigh_lookup(rt->dst.dev, (__force u32)new_gw); in __ip_do_redirect()
785 n = neigh_create(&arp_tbl, &new_gw, rt->dst.dev); in __ip_do_redirect()
800 WRITE_ONCE(rt->dst.obsolete, DST_OBSOLETE_KILL); in __ip_do_redirect()
823 static void ip_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb) in ip_do_redirect() argument
834 rt = dst_rtable(dst); in ip_do_redirect()
841 struct dst_entry *dst) in ipv4_negative_advice() argument
843 struct rtable *rt = dst_rtable(dst); in ipv4_negative_advice()
845 if ((READ_ONCE(dst->obsolete) > 0) || in ipv4_negative_advice()
847 READ_ONCE(rt->dst.expires)) in ipv4_negative_advice()
877 in_dev = __in_dev_get_rcu(rt->dst.dev); in ip_rt_send_redirect()
883 vif = l3mdev_master_ifindex_rcu(rt->dst.dev); in ip_rt_send_redirect()
885 net = dev_net(rt->dst.dev); in ip_rt_send_redirect()
956 net = dev_net(rt->dst.dev); in ip_error()
958 switch (rt->dst.error) { in ip_error()
972 switch (rt->dst.error) { in ip_error()
1015 struct dst_entry *dst = &rt->dst; in __ip_rt_update_pmtu() local
1021 if (ip_mtu_locked(dst)) in __ip_rt_update_pmtu()
1024 old_mtu = ipv4_mtu(dst); in __ip_rt_update_pmtu()
1029 net = dev_net_rcu(dst_dev(dst)); in __ip_rt_update_pmtu()
1036 time_before(jiffies, READ_ONCE(dst->expires) - in __ip_rt_update_pmtu()
1064 static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, in ip_rt_update_pmtu() argument
1068 struct rtable *rt = dst_rtable(dst); in ip_rt_update_pmtu()
1148 __ip_rt_update_pmtu(dst_rtable(xfrm_dst_path(&rt->dst)), &fl4, mtu); in ipv4_sk_update_pmtu()
1150 if (!dst_check(&rt->dst, 0)) { in ipv4_sk_update_pmtu()
1152 dst_release(&rt->dst); in ipv4_sk_update_pmtu()
1162 sk_dst_set(sk, &rt->dst); in ipv4_sk_update_pmtu()
1202 INDIRECT_CALLABLE_SCOPE struct dst_entry *ipv4_dst_check(struct dst_entry *dst, in ipv4_dst_check() argument
1205 struct rtable *rt = dst_rtable(dst); in ipv4_dst_check()
1215 if (READ_ONCE(dst->obsolete) != DST_OBSOLETE_FORCE_CHK || in ipv4_dst_check()
1218 return dst; in ipv4_dst_check()
1242 dev = skb->dev ? skb->dev : skb_rtable(skb)->dst.dev; in ipv4_send_dest_unreach()
1260 dst_set_expires(&rt->dst, 0); in ipv4_link_failure()
1295 .flowi4_oif = rt->dst.dev->ifindex, in ip_rt_get_source()
1301 if (fib_lookup(dev_net(rt->dst.dev), &fl4, &res, 0) == 0) in ip_rt_get_source()
1302 src = fib_result_prefsrc(dev_net(rt->dst.dev), &res); in ip_rt_get_source()
1304 src = inet_select_addr(rt->dst.dev, in ip_rt_get_source()
1315 if (!(rt->dst.tclassid & 0xFFFF)) in set_class_tag()
1316 rt->dst.tclassid |= tag & 0xFFFF; in set_class_tag()
1317 if (!(rt->dst.tclassid & 0xFFFF0000)) in set_class_tag()
1318 rt->dst.tclassid |= tag & 0xFFFF0000; in set_class_tag()
1322 static unsigned int ipv4_default_advmss(const struct dst_entry *dst) in ipv4_default_advmss() argument
1329 net = dev_net_rcu(dst_dev(dst)); in ipv4_default_advmss()
1330 advmss = max_t(unsigned int, ipv4_mtu(dst) - header_size, in ipv4_default_advmss()
1337 INDIRECT_CALLABLE_SCOPE unsigned int ipv4_mtu(const struct dst_entry *dst) in ipv4_mtu() argument
1339 return ip_dst_mtu_maybe_forward(dst, false); in ipv4_mtu()
1444 int genid = fnhe_genid(dev_net(rt->dst.dev)); in rt_bind_exception()
1468 dst_hold(&rt->dst); in rt_bind_exception()
1471 dst_dev_put(&orig->dst); in rt_bind_exception()
1472 dst_release(&orig->dst); in rt_bind_exception()
1499 dst_hold(&rt->dst); in rt_cache_route()
1504 dst_release(&orig->dst); in rt_cache_route()
1507 dst_release(&rt->dst); in rt_cache_route()
1525 rt->dst.rt_uncached_list = ul; in rt_add_uncached_list()
1528 list_add_tail(&rt->dst.rt_uncached, &ul->head); in rt_add_uncached_list()
1534 if (!list_empty(&rt->dst.rt_uncached)) { in rt_del_uncached_list()
1535 struct uncached_list *ul = rt->dst.rt_uncached_list; in rt_del_uncached_list()
1538 list_del_init(&rt->dst.rt_uncached); in rt_del_uncached_list()
1543 static void ipv4_dst_destroy(struct dst_entry *dst) in ipv4_dst_destroy() argument
1545 ip_dst_metrics_put(dst); in ipv4_dst_destroy()
1546 rt_del_uncached_list(dst_rtable(dst)); in ipv4_dst_destroy()
1561 list_for_each_entry_safe(rt, safe, &ul->head, dst.rt_uncached) { in rt_flush_dev()
1562 if (rt->dst.dev != dev) in rt_flush_dev()
1564 rt->dst.dev = blackhole_netdev; in rt_flush_dev()
1566 &rt->dst.dev_tracker, GFP_ATOMIC); in rt_flush_dev()
1567 list_del_init(&rt->dst.rt_uncached); in rt_flush_dev()
1576 READ_ONCE(rt->dst.obsolete) == DST_OBSOLETE_FORCE_CHK && in rt_cache_valid()
1601 ip_dst_init_metrics(&rt->dst, fi->fib_metrics); in rt_set_nexthop()
1608 rt->dst.tclassid = nh->nh_tclassid; in rt_set_nexthop()
1611 rt->dst.lwtstate = lwtstate_get(nhc->nhc_lwtstate); in rt_set_nexthop()
1660 rt->dst.output = ip_output; in rt_dst_alloc()
1662 rt->dst.input = ip_local_deliver; in rt_dst_alloc()
1674 rt->dst.flags); in rt_dst_clone()
1690 new_rt->dst.input = READ_ONCE(rt->dst.input); in rt_dst_clone()
1691 new_rt->dst.output = READ_ONCE(rt->dst.output); in rt_dst_clone()
1692 new_rt->dst.error = rt->dst.error; in rt_dst_clone()
1693 new_rt->dst.lastuse = jiffies; in rt_dst_clone()
1694 new_rt->dst.lwtstate = lwtstate_get(rt->dst.lwtstate); in rt_dst_clone()
1762 rth->dst.tclassid = itag; in ip_route_input_mc()
1764 rth->dst.output = ip_rt_bug; in ip_route_input_mc()
1769 rth->dst.input = ip_mr_input; in ip_route_input_mc()
1774 skb_dst_set(skb, &rth->dst); in ip_route_input_mc()
1873 skb_dst_set_noref(skb, &rth->dst); in __mkroute_input()
1888 rth->dst.input = ip_forward; in __mkroute_input()
1892 lwtunnel_set_redirect(&rth->dst); in __mkroute_input()
1893 skb_dst_set(skb, &rth->dst); in __mkroute_input()
1937 hash_keys->addrs.v4addrs.dst = key_iph->daddr; in ip_multipath_l3_keys()
1957 hash_keys.addrs.v4addrs.dst = keys.addrs.v4addrs.dst; in fib_multipath_custom_hash_outer()
1963 hash_keys.ports.dst = keys.ports.dst; in fib_multipath_custom_hash_outer()
1997 hash_keys.addrs.v4addrs.dst = keys.addrs.v4addrs.dst; in fib_multipath_custom_hash_inner()
2003 hash_keys.addrs.v6addrs.dst = keys.addrs.v6addrs.dst; in fib_multipath_custom_hash_inner()
2013 hash_keys.ports.dst = keys.ports.dst; in fib_multipath_custom_hash_inner()
2044 hash_keys.addrs.v4addrs.dst = fl4->daddr; in fib_multipath_custom_hash_fl4()
2054 hash_keys.ports.dst = fl4->fl4_dport; in fib_multipath_custom_hash_fl4()
2075 hash_keys.addrs.v4addrs.dst = fl4->daddr; in fib_multipath_hash()
2098 hash_keys.addrs.v4addrs.dst = flkeys->addrs.v4addrs.dst; in fib_multipath_hash()
2100 hash_keys.ports.dst = flkeys->ports.dst; in fib_multipath_hash()
2106 hash_keys.addrs.v4addrs.dst = fl4->daddr; in fib_multipath_hash()
2111 hash_keys.ports.dst = fl4->fl4_dport; in fib_multipath_hash()
2127 hash_keys.addrs.v4addrs.dst = keys.addrs.v4addrs.dst; in fib_multipath_hash()
2131 hash_keys.addrs.v6addrs.dst = keys.addrs.v6addrs.dst; in fib_multipath_hash()
2143 hash_keys.addrs.v4addrs.dst = fl4->daddr; in fib_multipath_hash()
2417 skb_dst_set_noref(skb, &rth->dst); in ip_route_input_slow()
2428 rth->dst.output= ip_rt_bug; in ip_route_input_slow()
2430 rth->dst.tclassid = itag; in ip_route_input_slow()
2436 rth->dst.input= ip_error; in ip_route_input_slow()
2437 rth->dst.error= -err; in ip_route_input_slow()
2444 rth->dst.lwtstate = lwtstate_get(nhc->nhc_lwtstate); in ip_route_input_slow()
2445 if (lwtunnel_input_redirect(rth->dst.lwtstate)) { in ip_route_input_slow()
2446 WARN_ON(rth->dst.input == lwtunnel_input); in ip_route_input_slow()
2447 rth->dst.lwtstate->orig_input = rth->dst.input; in ip_route_input_slow()
2448 rth->dst.input = lwtunnel_input; in ip_route_input_slow()
2454 skb_dst_set(skb, &rth->dst); in ip_route_input_slow()
2640 if (rt_cache_valid(rth) && dst_hold_safe(&rth->dst)) in __mkroute_output()
2657 rth->dst.output = ip_mc_output; in __mkroute_output()
2664 rth->dst.input = ip_mr_input; in __mkroute_output()
2665 rth->dst.output = ip_mr_output; in __mkroute_output()
2672 lwtunnel_set_redirect(&rth->dst); in __mkroute_output()
2890 struct dst_entry *new = &rt->dst; in ipv4_blackhole_route()
2917 return rt ? &rt->dst : ERR_PTR(-ENOMEM); in ipv4_blackhole_route()
2929 flp4->flowi4_oif = rt->dst.dev->ifindex; in ip_route_output_flow()
2930 rt = dst_rtable(xfrm_lookup_route(net, &rt->dst, in ip_route_output_flow()
2940 static int rt_fill_info(struct net *net, __be32 dst, __be32 src, in rt_fill_info() argument
2972 if (nla_put_in_addr(skb, RTA_DST, dst)) in rt_fill_info()
2979 if (rt->dst.dev && in rt_fill_info()
2980 nla_put_u32(skb, RTA_OIF, rt->dst.dev->ifindex)) in rt_fill_info()
2982 if (lwtunnel_fill_encap(skb, rt->dst.lwtstate, RTA_ENCAP, RTA_ENCAP_TYPE) < 0) in rt_fill_info()
2985 if (rt->dst.tclassid && in rt_fill_info()
2986 nla_put_u32(skb, RTA_FLOW, rt->dst.tclassid)) in rt_fill_info()
3013 expires = READ_ONCE(rt->dst.expires); in rt_fill_info()
3023 memcpy(metrics, dst_metrics_ptr(&rt->dst), sizeof(metrics)); in rt_fill_info()
3044 if (ipv4_is_multicast(dst) && in rt_fill_info()
3045 !ipv4_is_local_multicast(dst) && in rt_fill_info()
3063 error = rt->dst.error; in rt_fill_info()
3065 if (rtnl_put_cacheinfo(skb, &rt->dst, 0, expires, error) < 0) in rt_fill_info()
3151 static struct sk_buff *inet_rtm_getroute_build_skb(__be32 src, __be32 dst, in inet_rtm_getroute_build_skb() argument
3171 iph->daddr = dst; in inet_rtm_getroute_build_skb()
3197 src, dst, 0); in inet_rtm_getroute_build_skb()
3294 __be32 dst = 0; in inet_rtm_getroute() local
3308 dst = nla_get_in_addr_default(tb[RTA_DST], 0); in inet_rtm_getroute()
3330 skb = inet_rtm_getroute_build_skb(src, dst, ip_proto, sport, dport); in inet_rtm_getroute()
3334 fl4.daddr = dst; in inet_rtm_getroute()
3360 err = ip_route_input_rcu(skb, dst, src, dscp, dev, in inet_rtm_getroute()
3364 if (err == 0 && rt->dst.error) in inet_rtm_getroute()
3365 err = -rt->dst.error; in inet_rtm_getroute()
3374 skb_dst_set(skb, &rt->dst); in inet_rtm_getroute()
3403 fri.dst = res.prefix; in inet_rtm_getroute()
3432 err = rt_fill_info(net, dst, src, rt, table_id, res.dscp, &fl4, in inet_rtm_getroute()