Lines Matching refs:dst
133 static struct dst_entry *ipv4_dst_check(struct dst_entry *dst, u32 cookie);
134 static unsigned int ipv4_default_advmss(const struct dst_entry *dst);
135 static unsigned int ipv4_mtu(const struct dst_entry *dst);
136 static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst);
138 static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk,
140 static void ip_do_redirect(struct dst_entry *dst, struct sock *sk,
142 static void ipv4_dst_destroy(struct dst_entry *dst);
144 static u32 *ipv4_cow_metrics(struct dst_entry *dst, unsigned long old) in ipv4_cow_metrics() argument
150 static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst,
336 struct ip_rt_acct *dst, *src; in rt_acct_proc_show() local
339 dst = kcalloc(256, sizeof(struct ip_rt_acct), GFP_KERNEL); in rt_acct_proc_show()
340 if (!dst) in rt_acct_proc_show()
346 dst[j].o_bytes += src[j].o_bytes; in rt_acct_proc_show()
347 dst[j].o_packets += src[j].o_packets; in rt_acct_proc_show()
348 dst[j].i_bytes += src[j].i_bytes; in rt_acct_proc_show()
349 dst[j].i_packets += src[j].i_packets; in rt_acct_proc_show()
353 seq_write(m, dst, 256 * sizeof(struct ip_rt_acct)); in rt_acct_proc_show()
354 kfree(dst); in rt_acct_proc_show()
431 return rth->rt_genid != rt_genid_ipv4(dev_net(rth->dst.dev)); in rt_is_expired()
439 static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst, in ipv4_neigh_lookup() argument
443 struct net_device *dev = dst->dev; in ipv4_neigh_lookup()
448 rt = (const struct rtable *) dst; in ipv4_neigh_lookup()
562 call_rcu(&rt->dst.rcu_head, dst_rcu_free); in rt_free()
610 rt->dst.expires = fnhe->fnhe_expires; in fill_route_from_fnhe()
686 rt->dst.obsolete = DST_OBSOLETE_KILL; in update_or_create_fnhe()
693 rt->dst.obsolete = DST_OBSOLETE_KILL; in update_or_create_fnhe()
748 n = ipv4_neigh_lookup(&rt->dst, NULL, &new_gw); in __ip_do_redirect()
760 rt->dst.obsolete = DST_OBSOLETE_KILL; in __ip_do_redirect()
783 static void ip_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb) in ip_do_redirect() argument
793 rt = (struct rtable *) dst; in ip_do_redirect()
799 static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst) in ipv4_negative_advice() argument
801 struct rtable *rt = (struct rtable *)dst; in ipv4_negative_advice()
802 struct dst_entry *ret = dst; in ipv4_negative_advice()
805 if (dst->obsolete > 0) { in ipv4_negative_advice()
809 rt->dst.expires) { in ipv4_negative_advice()
842 in_dev = __in_dev_get_rcu(rt->dst.dev); in ip_rt_send_redirect()
850 net = dev_net(rt->dst.dev); in ip_rt_send_redirect()
910 net = dev_net(rt->dst.dev); in ip_error()
912 switch (rt->dst.error) { in ip_error()
924 switch (rt->dst.error) { in ip_error()
964 struct dst_entry *dst = &rt->dst; in __ip_rt_update_pmtu() local
967 if (dst_metric_locked(dst, RTAX_MTU)) in __ip_rt_update_pmtu()
970 if (ipv4_mtu(dst) < mtu) in __ip_rt_update_pmtu()
977 time_before(jiffies, dst->expires - ip_rt_mtu_expires / 2)) in __ip_rt_update_pmtu()
981 if (fib_lookup(dev_net(dst->dev), fl4, &res) == 0) { in __ip_rt_update_pmtu()
990 static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, in ip_rt_update_pmtu() argument
993 struct rtable *rt = (struct rtable *) dst; in ip_rt_update_pmtu()
1069 __ip_rt_update_pmtu((struct rtable *) rt->dst.path, &fl4, mtu); in ipv4_sk_update_pmtu()
1071 if (!dst_check(&rt->dst, 0)) { in ipv4_sk_update_pmtu()
1073 dst_release(&rt->dst); in ipv4_sk_update_pmtu()
1083 sk_dst_set(sk, &rt->dst); in ipv4_sk_update_pmtu()
1123 static struct dst_entry *ipv4_dst_check(struct dst_entry *dst, u32 cookie) in ipv4_dst_check() argument
1125 struct rtable *rt = (struct rtable *) dst; in ipv4_dst_check()
1135 if (dst->obsolete != DST_OBSOLETE_FORCE_CHK || rt_is_expired(rt)) in ipv4_dst_check()
1137 return dst; in ipv4_dst_check()
1148 dst_set_expires(&rt->dst, 0); in ipv4_link_failure()
1187 fl4.flowi4_oif = rt->dst.dev->ifindex; in ip_rt_get_source()
1192 if (fib_lookup(dev_net(rt->dst.dev), &fl4, &res) == 0) in ip_rt_get_source()
1193 src = FIB_RES_PREFSRC(dev_net(rt->dst.dev), res); in ip_rt_get_source()
1195 src = inet_select_addr(rt->dst.dev, in ip_rt_get_source()
1206 if (!(rt->dst.tclassid & 0xFFFF)) in set_class_tag()
1207 rt->dst.tclassid |= tag & 0xFFFF; in set_class_tag()
1208 if (!(rt->dst.tclassid & 0xFFFF0000)) in set_class_tag()
1209 rt->dst.tclassid |= tag & 0xFFFF0000; in set_class_tag()
1213 static unsigned int ipv4_default_advmss(const struct dst_entry *dst) in ipv4_default_advmss() argument
1215 unsigned int advmss = dst_metric_raw(dst, RTAX_ADVMSS); in ipv4_default_advmss()
1218 advmss = max_t(unsigned int, dst->dev->mtu - 40, in ipv4_default_advmss()
1226 static unsigned int ipv4_mtu(const struct dst_entry *dst) in ipv4_mtu() argument
1228 const struct rtable *rt = (const struct rtable *) dst; in ipv4_mtu()
1231 if (!mtu || time_after_eq(jiffies, rt->dst.expires)) in ipv4_mtu()
1232 mtu = dst_metric_raw(dst, RTAX_MTU); in ipv4_mtu()
1237 mtu = dst->dev->mtu; in ipv4_mtu()
1239 if (unlikely(dst_metric_locked(dst, RTAX_MTU))) { in ipv4_mtu()
1276 int genid = fnhe_genid(dev_net(rt->dst.dev)); in rt_bind_exception()
1296 if (!(rt->dst.flags & DST_NOCACHE)) { in rt_bind_exception()
1350 static void ipv4_dst_destroy(struct dst_entry *dst) in ipv4_dst_destroy() argument
1352 struct rtable *rt = (struct rtable *) dst; in ipv4_dst_destroy()
1374 if (rt->dst.dev != dev) in rt_flush_dev()
1376 rt->dst.dev = net->loopback_dev; in rt_flush_dev()
1377 dev_hold(rt->dst.dev); in rt_flush_dev()
1387 rt->dst.obsolete == DST_OBSOLETE_FORCE_CHK && in rt_cache_valid()
1405 dst_init_metrics(&rt->dst, fi->fib_metrics, true); in rt_set_nexthop()
1407 rt->dst.tclassid = nh->nh_tclassid; in rt_set_nexthop()
1411 else if (!(rt->dst.flags & DST_NOCACHE)) in rt_set_nexthop()
1419 rt->dst.flags |= DST_NOCACHE; in rt_set_nexthop()
1481 rth->dst.tclassid = itag; in ip_route_input_mc()
1483 rth->dst.output = ip_rt_bug; in ip_route_input_mc()
1495 rth->dst.input= ip_local_deliver; in ip_route_input_mc()
1501 rth->dst.input = ip_mr_input; in ip_route_input_mc()
1505 skb_dst_set(skb, &rth->dst); in ip_route_input_mc()
1628 if (rth && rth->dst.expires && in __mkroute_input()
1629 time_after(jiffies, rth->dst.expires)) { in __mkroute_input()
1641 skb_dst_set_noref(skb, &rth->dst); in __mkroute_input()
1654 rth->rt_genid = rt_genid_ipv4(dev_net(rth->dst.dev)); in __mkroute_input()
1665 rth->dst.input = ip_forward; in __mkroute_input()
1666 rth->dst.output = ip_output; in __mkroute_input()
1669 skb_dst_set(skb, &rth->dst); in __mkroute_input()
1809 skb_dst_set_noref(skb, &rth->dst); in ip_route_input_slow()
1822 rth->dst.input= ip_local_deliver; in ip_route_input_slow()
1823 rth->dst.output= ip_rt_bug; in ip_route_input_slow()
1825 rth->dst.tclassid = itag; in ip_route_input_slow()
1839 rth->dst.input= ip_error; in ip_route_input_slow()
1840 rth->dst.error= -err; in ip_route_input_slow()
1845 rth->dst.flags |= DST_NOCACHE; in ip_route_input_slow()
1849 skb_dst_set(skb, &rth->dst); in ip_route_input_slow()
1991 if (rth && rth->dst.expires && in __mkroute_output()
1992 time_after(jiffies, rth->dst.expires)) { in __mkroute_output()
2012 dst_hold(&rth->dst); in __mkroute_output()
2025 rth->dst.output = ip_output; in __mkroute_output()
2040 rth->dst.input = ip_local_deliver; in __mkroute_output()
2044 rth->dst.output = ip_mc_output; in __mkroute_output()
2051 rth->dst.input = ip_mr_input; in __mkroute_output()
2052 rth->dst.output = ip_mc_output; in __mkroute_output()
2248 static struct dst_entry *ipv4_blackhole_dst_check(struct dst_entry *dst, u32 cookie) in ipv4_blackhole_dst_check() argument
2253 static unsigned int ipv4_blackhole_mtu(const struct dst_entry *dst) in ipv4_blackhole_mtu() argument
2255 unsigned int mtu = dst_metric_raw(dst, RTAX_MTU); in ipv4_blackhole_mtu()
2257 return mtu ? : dst->dev->mtu; in ipv4_blackhole_mtu()
2260 static void ipv4_rt_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk, in ipv4_rt_blackhole_update_pmtu() argument
2265 static void ipv4_rt_blackhole_redirect(struct dst_entry *dst, struct sock *sk, in ipv4_rt_blackhole_redirect() argument
2270 static u32 *ipv4_rt_blackhole_cow_metrics(struct dst_entry *dst, in ipv4_rt_blackhole_cow_metrics() argument
2294 struct dst_entry *new = &rt->dst; in ipv4_blackhole_route()
2300 new->dev = ort->dst.dev; in ipv4_blackhole_route()
2321 return rt ? &rt->dst : ERR_PTR(-ENOMEM); in ipv4_blackhole_route()
2333 rt = (struct rtable *)xfrm_lookup_route(net, &rt->dst, in ip_route_output_flow()
2341 static int rt_fill_info(struct net *net, __be32 dst, __be32 src, in rt_fill_info() argument
2373 if (nla_put_in_addr(skb, RTA_DST, dst)) in rt_fill_info()
2380 if (rt->dst.dev && in rt_fill_info()
2381 nla_put_u32(skb, RTA_OIF, rt->dst.dev->ifindex)) in rt_fill_info()
2384 if (rt->dst.tclassid && in rt_fill_info()
2385 nla_put_u32(skb, RTA_FLOW, rt->dst.tclassid)) in rt_fill_info()
2397 expires = rt->dst.expires; in rt_fill_info()
2407 memcpy(metrics, dst_metrics_ptr(&rt->dst), sizeof(metrics)); in rt_fill_info()
2417 error = rt->dst.error; in rt_fill_info()
2421 if (ipv4_is_multicast(dst) && !ipv4_is_local_multicast(dst) && in rt_fill_info()
2443 if (rtnl_put_cacheinfo(skb, &rt->dst, 0, expires, error) < 0) in rt_fill_info()
2461 __be32 dst = 0; in inet_rtm_getroute() local
2491 dst = tb[RTA_DST] ? nla_get_in_addr(tb[RTA_DST]) : 0; in inet_rtm_getroute()
2496 fl4.daddr = dst; in inet_rtm_getroute()
2515 err = ip_route_input(skb, dst, src, rtm->rtm_tos, dev); in inet_rtm_getroute()
2519 if (err == 0 && rt->dst.error) in inet_rtm_getroute()
2520 err = -rt->dst.error; in inet_rtm_getroute()
2532 skb_dst_set(skb, &rt->dst); in inet_rtm_getroute()
2536 err = rt_fill_info(net, dst, src, &fl4, skb, in inet_rtm_getroute()