Lines Matching refs:fib6_nh

106 static int rt6_score_route(const struct fib6_nh *nh, u32 fib6_flags, int oif,
438 if (fl6->mp_hash <= atomic_read(&match->fib6_nh->fib_nh_upper_bound)) in fib6_select_path()
443 const struct fib6_nh *nh = sibling->fib6_nh; in fib6_select_path()
457 res->nh = match->fib6_nh; in fib6_select_path()
464 static bool __rt6_device_match(struct net *net, const struct fib6_nh *nh, in __rt6_device_match()
490 struct fib6_nh *nh;
493 static int __rt6_nh_dev_match(struct fib6_nh *nh, void *_arg) in __rt6_nh_dev_match()
503 static struct fib6_nh *rt6_nh_dev_match(struct net *net, struct nexthop *nh, in rt6_nh_dev_match()
529 struct fib6_nh *nh; in rt6_device_match()
537 nh = f6i->fib6_nh; in rt6_device_match()
552 nh = spf6i->fib6_nh; in rt6_device_match()
564 nh = res->f6i->fib6_nh; in rt6_device_match()
573 nh = f6i->fib6_nh; in rt6_device_match()
578 nh = res->f6i->fib6_nh; in rt6_device_match()
611 static void rt6_probe(struct fib6_nh *fib6_nh) in rt6_probe() argument
628 if (!fib6_nh->fib_nh_gw_family) in rt6_probe()
631 nh_gw = &fib6_nh->fib_nh_gw6; in rt6_probe()
632 dev = fib6_nh->fib_nh_dev; in rt6_probe()
634 last_probe = READ_ONCE(fib6_nh->last_probe); in rt6_probe()
655 if (!work || cmpxchg(&fib6_nh->last_probe, in rt6_probe()
670 static inline void rt6_probe(struct fib6_nh *fib6_nh) in rt6_probe() argument
678 static enum rt6_nud_state rt6_check_neigh(const struct fib6_nh *fib6_nh) in rt6_check_neigh() argument
684 neigh = __ipv6_neigh_lookup_noref(fib6_nh->fib_nh_dev, in rt6_check_neigh()
685 &fib6_nh->fib_nh_gw6); in rt6_check_neigh()
706 static int rt6_score_route(const struct fib6_nh *nh, u32 fib6_flags, int oif, in rt6_score_route()
728 static bool find_match(struct fib6_nh *nh, u32 fib6_flags, in find_match()
770 struct fib6_nh *nh;
773 static int rt6_nh_find_match(struct fib6_nh *nh, void *_arg) in rt6_nh_find_match()
793 struct fib6_nh *nh; in __find_rr_leaf()
825 nh = f6i->fib6_nh; in __find_rr_leaf()
911 res->nh = res->f6i->fib6_nh; in rt6_select()
1119 const struct fib6_nh *nh = res->nh; in ip6_rt_copy_init()
1578 const struct fib6_nh *nh = res->nh; in fib6_mtu()
1606 struct rt6_exception_bucket *fib6_nh_get_excptn_bucket(const struct fib6_nh *nh, in fib6_nh_get_excptn_bucket()
1636 static void fib6_nh_excptn_bucket_set_flushed(struct fib6_nh *nh, in fib6_nh_excptn_bucket_set_flushed()
1659 struct fib6_nh *nh = res->nh; in rt6_insert_exception()
1734 static void fib6_nh_flush_exceptions(struct fib6_nh *nh, struct fib6_info *from) in fib6_nh_flush_exceptions()
1764 static int rt6_nh_flush_exceptions(struct fib6_nh *nh, void *arg) in rt6_nh_flush_exceptions()
1779 fib6_nh_flush_exceptions(f6i->fib6_nh, f6i); in rt6_flush_exceptions()
1828 static int fib6_nh_remove_exception(const struct fib6_nh *nh, int plen, in fib6_nh_remove_exception()
1871 static int rt6_nh_remove_exception_rt(struct fib6_nh *nh, void *_arg) in rt6_nh_remove_exception_rt()
1905 return fib6_nh_remove_exception(from->fib6_nh, in rt6_remove_exception_rt()
1912 static void fib6_nh_update_exception(const struct fib6_nh *nh, int plen, in fib6_nh_update_exception()
1938 struct fib6_nh *match;
1942 static int fib6_nh_find_match(struct fib6_nh *nh, void *_arg) in fib6_nh_find_match()
1961 struct fib6_nh *fib6_nh; in rt6_update_exception_stamp_rt() local
1979 fib6_nh = arg.match; in rt6_update_exception_stamp_rt()
1981 fib6_nh = from->fib6_nh; in rt6_update_exception_stamp_rt()
1983 fib6_nh_update_exception(fib6_nh, from->fib6_src.plen, rt); in rt6_update_exception_stamp_rt()
2011 const struct fib6_nh *nh, int mtu) in rt6_exceptions_update_pmtu()
2039 static void fib6_nh_exceptions_clean_tohost(const struct fib6_nh *nh, in fib6_nh_exceptions_clean_tohost()
2113 static void fib6_nh_age_exceptions(const struct fib6_nh *nh, in fib6_nh_age_exceptions()
2147 static int rt6_nh_age_exceptions(struct fib6_nh *nh, void *_arg) in rt6_nh_age_exceptions()
2168 fib6_nh_age_exceptions(f6i->fib6_nh, gc_args, now); in rt6_age_exceptions()
2908 res.nh = res.f6i->fib6_nh; in __ip6_rt_update_pmtu()
2995 const struct fib6_nh *nh = res->nh; in ip6_redirect_nh_match()
3027 static int fib6_nh_redirect_match(struct fib6_nh *nh, void *_arg) in fib6_nh_redirect_match()
3093 res.nh = rt->fib6_nh; in __ip6_route_redirect()
3114 res.nh = rt->fib6_nh; in __ip6_route_redirect()
3231 const struct fib6_nh *nh = res->nh; in ip6_mtu_from_fib6()
3520 int fib6_nh_init(struct net *net, struct fib6_nh *fib6_nh, in fib6_nh_init() argument
3529 fib6_nh->fib_nh_family = AF_INET6; in fib6_nh_init()
3531 fib6_nh->last_probe = jiffies; in fib6_nh_init()
3534 fib6_nh->fib_nh_gw6 = cfg->fc_gateway; in fib6_nh_init()
3535 fib6_nh->fib_nh_gw_family = AF_INET6; in fib6_nh_init()
3562 fib6_nh->fib_nh_flags |= RTNH_F_ONLINK; in fib6_nh_init()
3565 fib6_nh->fib_nh_weight = 1; in fib6_nh_init()
3594 fib6_nh->fib_nh_gw6 = cfg->fc_gateway; in fib6_nh_init()
3595 fib6_nh->fib_nh_gw_family = AF_INET6; in fib6_nh_init()
3616 fib6_nh->fib_nh_flags |= RTNH_F_LINKDOWN; in fib6_nh_init()
3618 err = fib_nh_common_init(net, &fib6_nh->nh_common, cfg->fc_encap, in fib6_nh_init()
3624 fib6_nh->rt6i_pcpu = alloc_percpu_gfp(struct rt6_info *, gfp_flags); in fib6_nh_init()
3625 if (!fib6_nh->rt6i_pcpu) { in fib6_nh_init()
3630 fib6_nh->fib_nh_dev = dev; in fib6_nh_init()
3631 fib6_nh->fib_nh_oif = dev->ifindex; in fib6_nh_init()
3638 lwtstate_put(fib6_nh->fib_nh_lws); in fib6_nh_init()
3639 fib6_nh->fib_nh_lws = NULL; in fib6_nh_init()
3646 void fib6_nh_release(struct fib6_nh *fib6_nh) in fib6_nh_release() argument
3652 fib6_nh_flush_exceptions(fib6_nh, NULL); in fib6_nh_release()
3653 bucket = fib6_nh_get_excptn_bucket(fib6_nh, NULL); in fib6_nh_release()
3655 rcu_assign_pointer(fib6_nh->rt6i_exception_bucket, NULL); in fib6_nh_release()
3661 if (fib6_nh->rt6i_pcpu) { in fib6_nh_release()
3668 ppcpu_rt = per_cpu_ptr(fib6_nh->rt6i_pcpu, cpu); in fib6_nh_release()
3677 free_percpu(fib6_nh->rt6i_pcpu); in fib6_nh_release()
3680 fib_nh_common_release(&fib6_nh->nh_common); in fib6_nh_release()
3683 void fib6_nh_release_dsts(struct fib6_nh *fib6_nh) in fib6_nh_release_dsts() argument
3687 if (!fib6_nh->rt6i_pcpu) in fib6_nh_release_dsts()
3693 ppcpu_rt = per_cpu_ptr(fib6_nh->rt6i_pcpu, cpu); in fib6_nh_release_dsts()
3710 struct fib6_nh *fib6_nh; in ip6_route_info_create() local
3821 fib6_nh = nexthop_fib6_nh(rt->nh); in ip6_route_info_create()
3823 err = fib6_nh_init(net, rt->fib6_nh, cfg, gfp_flags, extack); in ip6_route_info_create()
3827 fib6_nh = rt->fib6_nh; in ip6_route_info_create()
3833 if (fib6_is_reject(cfg->fc_flags, rt->fib6_nh->fib_nh_dev, in ip6_route_info_create()
3839 struct net_device *dev = fib6_nh->fib_nh_dev; in ip6_route_info_create()
4004 struct fib6_nh *nh) in ip6_del_cached_rt()
4024 static int fib6_nh_del_cached_rt(struct fib6_nh *nh, void *_arg) in fib6_nh_del_cached_rt()
4066 struct fib6_nh *nh; in ip6_route_del()
4080 nh = rt->fib6_nh; in ip6_route_del()
4106 nh = rt->fib6_nh; in ip6_route_del()
4240 res.nh = res.f6i->fib6_nh; in rt6_do_redirect()
4297 if (rt->fib6_nh->fib_nh_dev->ifindex != ifindex) in rt6_get_route_info()
4300 !rt->fib6_nh->fib_nh_gw_family) in rt6_get_route_info()
4302 if (!ipv6_addr_equal(&rt->fib6_nh->fib_nh_gw6, gwaddr)) in rt6_get_route_info()
4360 struct fib6_nh *nh; in rt6_get_dflt_router()
4366 nh = rt->fib6_nh; in rt6_get_dflt_router()
4611 ((void *)rt->fib6_nh->fib_nh_dev == dev || !dev) && in fib6_remove_prefsrc()
4639 struct fib6_nh *nh; in fib6_clean_tohost()
4645 nh = rt->fib6_nh; in fib6_clean_tohost()
4695 if (rt->fib6_nh->fib_nh_flags & RTNH_F_DEAD || in rt6_is_dead()
4696 (rt->fib6_nh->fib_nh_flags & RTNH_F_LINKDOWN && in rt6_is_dead()
4697 ip6_ignore_linkdown(rt->fib6_nh->fib_nh_dev))) in rt6_is_dead()
4709 total += rt->fib6_nh->fib_nh_weight; in rt6_multipath_total_weight()
4713 total += iter->fib6_nh->fib_nh_weight; in rt6_multipath_total_weight()
4724 *weight += rt->fib6_nh->fib_nh_weight; in rt6_upper_bound_set()
4728 atomic_set(&rt->fib6_nh->fib_nh_upper_bound, upper_bound); in rt6_upper_bound_set()
4772 rt->fib6_nh->fib_nh_dev == arg->dev) { in fib6_ifup()
4773 rt->fib6_nh->fib_nh_flags &= ~arg->nh_flags; in fib6_ifup()
4802 if (rt->fib6_nh->fib_nh_dev == dev) in rt6_multipath_uses_dev()
4805 if (iter->fib6_nh->fib_nh_dev == dev) in rt6_multipath_uses_dev()
4826 if (rt->fib6_nh->fib_nh_dev == down_dev || in rt6_multipath_dead_count()
4827 rt->fib6_nh->fib_nh_flags & RTNH_F_DEAD) in rt6_multipath_dead_count()
4830 if (iter->fib6_nh->fib_nh_dev == down_dev || in rt6_multipath_dead_count()
4831 iter->fib6_nh->fib_nh_flags & RTNH_F_DEAD) in rt6_multipath_dead_count()
4843 if (rt->fib6_nh->fib_nh_dev == dev) in rt6_multipath_nh_flags_set()
4844 rt->fib6_nh->fib_nh_flags |= nh_flags; in rt6_multipath_nh_flags_set()
4846 if (iter->fib6_nh->fib_nh_dev == dev) in rt6_multipath_nh_flags_set()
4847 iter->fib6_nh->fib_nh_flags |= nh_flags; in rt6_multipath_nh_flags_set()
4862 return rt->fib6_nh->fib_nh_dev == dev ? -1 : 0; in fib6_ifdown()
4867 return rt->fib6_nh->fib_nh_dev == dev ? -1 : 0; in fib6_ifdown()
4883 if (rt->fib6_nh->fib_nh_dev != dev || in fib6_ifdown()
4886 rt->fib6_nh->fib_nh_flags |= RTNH_F_LINKDOWN; in fib6_ifdown()
4923 static int fib6_nh_mtu_change(struct fib6_nh *nh, void *_arg) in fib6_nh_mtu_change()
4974 return fib6_nh_mtu_change(f6i->fib6_nh, arg); in rt6_mtu_change_route()
5312 rt->fib6_nh->fib_nh_weight = rtnh->rtnh_hops + 1; in ip6_route_multipath_add()
5523 static int rt6_nh_nlmsg_size(struct fib6_nh *nh, void *arg) in rt6_nh_nlmsg_size()
5550 struct fib6_nh *nh = f6i->fib6_nh; in rt6_nlmsg_size()
5595 struct fib6_nh *fib6_nh; in rt6_fill_node_nexthop() local
5597 fib6_nh = nexthop_fib6_nh(nh); in rt6_fill_node_nexthop()
5598 if (fib_nexthop_info(skb, &fib6_nh->nh_common, AF_INET6, in rt6_fill_node_nexthop()
5730 if (fib_add_nexthop(skb, &rt->fib6_nh->nh_common, in rt6_fill_node()
5731 rt->fib6_nh->fib_nh_weight, AF_INET6, in rt6_fill_node()
5737 if (fib_add_nexthop(skb, &sibling->fib6_nh->nh_common, in rt6_fill_node()
5738 sibling->fib6_nh->fib_nh_weight, in rt6_fill_node()
5757 if (fib_nexthop_info(skb, &rt->fib6_nh->nh_common, AF_INET6, in rt6_fill_node()
5793 static int fib6_info_nh_uses_dev(struct fib6_nh *nh, void *arg) in fib6_info_nh_uses_dev()
5814 if (f6i->fib6_nh->fib_nh_dev == dev) in fib6_info_uses_dev()
5822 if (sibling->fib6_nh->fib_nh_dev == dev) in fib6_info_uses_dev()
5838 static int rt6_nh_dump_exceptions(struct fib6_nh *nh, void *arg) in rt6_nh_dump_exceptions()
5946 err = rt6_nh_dump_exceptions(rt->fib6_nh, &w); in rt6_dump_route()
6288 net->ipv6.fib6_null_entry->fib6_nh->fib_nh_dev = dev; in ip6_route_dev_notify()
6625 init_net.ipv6.fib6_null_entry->fib6_nh->fib_nh_dev = init_net.loopback_dev; in ip6_route_init_special_entries()