Lines Matching refs:dst
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);
140 static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst);
142 static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
144 static void ip_do_redirect(struct dst_entry *dst, struct sock *sk,
146 static void ipv4_dst_destroy(struct dst_entry *dst);
148 static u32 *ipv4_cow_metrics(struct dst_entry *dst, unsigned long old) in ipv4_cow_metrics() argument
154 static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst,
340 struct ip_rt_acct *dst, *src; in rt_acct_proc_show() local
343 dst = kcalloc(256, sizeof(struct ip_rt_acct), GFP_KERNEL); in rt_acct_proc_show()
344 if (!dst) in rt_acct_proc_show()
350 dst[j].o_bytes += src[j].o_bytes; in rt_acct_proc_show()
351 dst[j].o_packets += src[j].o_packets; in rt_acct_proc_show()
352 dst[j].i_bytes += src[j].i_bytes; in rt_acct_proc_show()
353 dst[j].i_packets += src[j].i_packets; in rt_acct_proc_show()
357 seq_write(m, dst, 256 * sizeof(struct ip_rt_acct)); in rt_acct_proc_show()
358 kfree(dst); in rt_acct_proc_show()
435 return rth->rt_genid != rt_genid_ipv4(dev_net(rth->dst.dev)); in rt_is_expired()
443 static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst, in ipv4_neigh_lookup() argument
447 struct net_device *dev = dst->dev; in ipv4_neigh_lookup()
452 rt = (const struct rtable *) dst; in ipv4_neigh_lookup()
564 call_rcu(&rt->dst.rcu_head, dst_rcu_free); in rt_free()
612 rt->dst.expires = fnhe->fnhe_expires; in fill_route_from_fnhe()
688 rt->dst.obsolete = DST_OBSOLETE_KILL; in update_or_create_fnhe()
695 rt->dst.obsolete = DST_OBSOLETE_KILL; in update_or_create_fnhe()
750 n = ipv4_neigh_lookup(&rt->dst, NULL, &new_gw); in __ip_do_redirect()
762 rt->dst.obsolete = DST_OBSOLETE_KILL; in __ip_do_redirect()
785 static void ip_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb) in ip_do_redirect() argument
795 rt = (struct rtable *) dst; in ip_do_redirect()
801 static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst) in ipv4_negative_advice() argument
803 struct rtable *rt = (struct rtable *)dst; in ipv4_negative_advice()
804 struct dst_entry *ret = dst; in ipv4_negative_advice()
807 if (dst->obsolete > 0) { in ipv4_negative_advice()
811 rt->dst.expires) { in ipv4_negative_advice()
845 in_dev = __in_dev_get_rcu(rt->dst.dev); in ip_rt_send_redirect()
851 vif = l3mdev_master_ifindex_rcu(rt->dst.dev); in ip_rt_send_redirect()
854 net = dev_net(rt->dst.dev); in ip_rt_send_redirect()
914 net = dev_net(rt->dst.dev); in ip_error()
916 switch (rt->dst.error) { in ip_error()
928 switch (rt->dst.error) { in ip_error()
969 struct dst_entry *dst = &rt->dst; in __ip_rt_update_pmtu() local
972 if (dst_metric_locked(dst, RTAX_MTU)) in __ip_rt_update_pmtu()
975 if (ipv4_mtu(dst) < mtu) in __ip_rt_update_pmtu()
982 time_before(jiffies, dst->expires - ip_rt_mtu_expires / 2)) in __ip_rt_update_pmtu()
986 if (fib_lookup(dev_net(dst->dev), fl4, &res, 0) == 0) { in __ip_rt_update_pmtu()
995 static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, in ip_rt_update_pmtu() argument
998 struct rtable *rt = (struct rtable *) dst; in ip_rt_update_pmtu()
1074 __ip_rt_update_pmtu((struct rtable *) rt->dst.path, &fl4, mtu); in ipv4_sk_update_pmtu()
1076 if (!dst_check(&rt->dst, 0)) { in ipv4_sk_update_pmtu()
1078 dst_release(&rt->dst); in ipv4_sk_update_pmtu()
1088 sk_dst_set(sk, &rt->dst); in ipv4_sk_update_pmtu()
1128 static struct dst_entry *ipv4_dst_check(struct dst_entry *dst, u32 cookie) in ipv4_dst_check() argument
1130 struct rtable *rt = (struct rtable *) dst; in ipv4_dst_check()
1140 if (dst->obsolete != DST_OBSOLETE_FORCE_CHK || rt_is_expired(rt)) in ipv4_dst_check()
1142 return dst; in ipv4_dst_check()
1153 dst_set_expires(&rt->dst, 0); in ipv4_link_failure()
1192 fl4.flowi4_oif = rt->dst.dev->ifindex; in ip_rt_get_source()
1197 if (fib_lookup(dev_net(rt->dst.dev), &fl4, &res, 0) == 0) in ip_rt_get_source()
1198 src = FIB_RES_PREFSRC(dev_net(rt->dst.dev), res); in ip_rt_get_source()
1200 src = inet_select_addr(rt->dst.dev, in ip_rt_get_source()
1211 if (!(rt->dst.tclassid & 0xFFFF)) in set_class_tag()
1212 rt->dst.tclassid |= tag & 0xFFFF; in set_class_tag()
1213 if (!(rt->dst.tclassid & 0xFFFF0000)) in set_class_tag()
1214 rt->dst.tclassid |= tag & 0xFFFF0000; in set_class_tag()
1218 static unsigned int ipv4_default_advmss(const struct dst_entry *dst) in ipv4_default_advmss() argument
1220 unsigned int advmss = dst_metric_raw(dst, RTAX_ADVMSS); in ipv4_default_advmss()
1223 advmss = max_t(unsigned int, dst->dev->mtu - 40, in ipv4_default_advmss()
1231 static unsigned int ipv4_mtu(const struct dst_entry *dst) in ipv4_mtu() argument
1233 const struct rtable *rt = (const struct rtable *) dst; in ipv4_mtu()
1236 if (!mtu || time_after_eq(jiffies, rt->dst.expires)) in ipv4_mtu()
1237 mtu = dst_metric_raw(dst, RTAX_MTU); in ipv4_mtu()
1242 mtu = dst->dev->mtu; in ipv4_mtu()
1244 if (unlikely(dst_metric_locked(dst, RTAX_MTU))) { in ipv4_mtu()
1281 int genid = fnhe_genid(dev_net(rt->dst.dev)); in rt_bind_exception()
1301 if (!(rt->dst.flags & DST_NOCACHE)) { in rt_bind_exception()
1355 static void ipv4_dst_destroy(struct dst_entry *dst) in ipv4_dst_destroy() argument
1357 struct rtable *rt = (struct rtable *) dst; in ipv4_dst_destroy()
1379 if (rt->dst.dev != dev) in rt_flush_dev()
1381 rt->dst.dev = net->loopback_dev; in rt_flush_dev()
1382 dev_hold(rt->dst.dev); in rt_flush_dev()
1392 rt->dst.obsolete == DST_OBSOLETE_FORCE_CHK && in rt_cache_valid()
1410 dst_init_metrics(&rt->dst, fi->fib_metrics, true); in rt_set_nexthop()
1412 rt->dst.tclassid = nh->nh_tclassid; in rt_set_nexthop()
1414 rt->dst.lwtstate = lwtstate_get(nh->nh_lwtstate); in rt_set_nexthop()
1417 else if (!(rt->dst.flags & DST_NOCACHE)) in rt_set_nexthop()
1425 rt->dst.flags |= DST_NOCACHE; in rt_set_nexthop()
1464 rt->dst.output = ip_output; in rt_dst_alloc()
1466 rt->dst.input = ip_local_deliver; in rt_dst_alloc()
1512 rth->dst.tclassid = itag; in ip_route_input_mc()
1514 rth->dst.output = ip_rt_bug; in ip_route_input_mc()
1519 rth->dst.input = ip_mr_input; in ip_route_input_mc()
1523 skb_dst_set(skb, &rth->dst); in ip_route_input_mc()
1645 if (rth && rth->dst.expires && in __mkroute_input()
1646 time_after(jiffies, rth->dst.expires)) { in __mkroute_input()
1658 skb_dst_set_noref(skb, &rth->dst); in __mkroute_input()
1676 rth->dst.input = ip_forward; in __mkroute_input()
1679 if (lwtunnel_output_redirect(rth->dst.lwtstate)) { in __mkroute_input()
1680 rth->dst.lwtstate->orig_output = rth->dst.output; in __mkroute_input()
1681 rth->dst.output = lwtunnel_output; in __mkroute_input()
1683 if (lwtunnel_input_redirect(rth->dst.lwtstate)) { in __mkroute_input()
1684 rth->dst.lwtstate->orig_input = rth->dst.input; in __mkroute_input()
1685 rth->dst.input = lwtunnel_input; in __mkroute_input()
1687 skb_dst_set(skb, &rth->dst); in __mkroute_input()
1886 skb_dst_set_noref(skb, &rth->dst); in ip_route_input_slow()
1899 rth->dst.output= ip_rt_bug; in ip_route_input_slow()
1901 rth->dst.tclassid = itag; in ip_route_input_slow()
1909 rth->dst.input= ip_error; in ip_route_input_slow()
1910 rth->dst.error= -err; in ip_route_input_slow()
1915 rth->dst.flags |= DST_NOCACHE; in ip_route_input_slow()
1919 skb_dst_set(skb, &rth->dst); in ip_route_input_slow()
2072 if (rth && rth->dst.expires && in __mkroute_output()
2073 time_after(jiffies, rth->dst.expires)) { in __mkroute_output()
2093 dst_hold(&rth->dst); in __mkroute_output()
2115 rth->dst.output = ip_mc_output; in __mkroute_output()
2122 rth->dst.input = ip_mr_input; in __mkroute_output()
2123 rth->dst.output = ip_mc_output; in __mkroute_output()
2130 if (lwtunnel_output_redirect(rth->dst.lwtstate)) in __mkroute_output()
2131 rth->dst.output = lwtunnel_output; in __mkroute_output()
2319 static struct dst_entry *ipv4_blackhole_dst_check(struct dst_entry *dst, u32 cookie) in ipv4_blackhole_dst_check() argument
2324 static unsigned int ipv4_blackhole_mtu(const struct dst_entry *dst) in ipv4_blackhole_mtu() argument
2326 unsigned int mtu = dst_metric_raw(dst, RTAX_MTU); in ipv4_blackhole_mtu()
2328 return mtu ? : dst->dev->mtu; in ipv4_blackhole_mtu()
2331 static void ipv4_rt_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk, in ipv4_rt_blackhole_update_pmtu() argument
2336 static void ipv4_rt_blackhole_redirect(struct dst_entry *dst, struct sock *sk, in ipv4_rt_blackhole_redirect() argument
2341 static u32 *ipv4_rt_blackhole_cow_metrics(struct dst_entry *dst, in ipv4_rt_blackhole_cow_metrics() argument
2365 struct dst_entry *new = &rt->dst; in ipv4_blackhole_route()
2371 new->dev = ort->dst.dev; in ipv4_blackhole_route()
2391 return rt ? &rt->dst : ERR_PTR(-ENOMEM); in ipv4_blackhole_route()
2403 rt = (struct rtable *)xfrm_lookup_route(net, &rt->dst, in ip_route_output_flow()
2411 static int rt_fill_info(struct net *net, __be32 dst, __be32 src, u32 table_id, in rt_fill_info() argument
2443 if (nla_put_in_addr(skb, RTA_DST, dst)) in rt_fill_info()
2450 if (rt->dst.dev && in rt_fill_info()
2451 nla_put_u32(skb, RTA_OIF, rt->dst.dev->ifindex)) in rt_fill_info()
2454 if (rt->dst.tclassid && in rt_fill_info()
2455 nla_put_u32(skb, RTA_FLOW, rt->dst.tclassid)) in rt_fill_info()
2467 expires = rt->dst.expires; in rt_fill_info()
2477 memcpy(metrics, dst_metrics_ptr(&rt->dst), sizeof(metrics)); in rt_fill_info()
2487 error = rt->dst.error; in rt_fill_info()
2491 if (ipv4_is_multicast(dst) && !ipv4_is_local_multicast(dst) && in rt_fill_info()
2513 if (rtnl_put_cacheinfo(skb, &rt->dst, 0, expires, error) < 0) in rt_fill_info()
2531 __be32 dst = 0; in inet_rtm_getroute() local
2562 dst = tb[RTA_DST] ? nla_get_in_addr(tb[RTA_DST]) : 0; in inet_rtm_getroute()
2567 fl4.daddr = dst; in inet_rtm_getroute()
2589 err = ip_route_input(skb, dst, src, rtm->rtm_tos, dev); in inet_rtm_getroute()
2593 if (err == 0 && rt->dst.error) in inet_rtm_getroute()
2594 err = -rt->dst.error; in inet_rtm_getroute()
2606 skb_dst_set(skb, &rt->dst); in inet_rtm_getroute()
2613 err = rt_fill_info(net, dst, src, table_id, &fl4, skb, in inet_rtm_getroute()