Lines Matching refs:f6i

109 static size_t rt6_nlmsg_size(struct fib6_info *f6i);
442 struct fib6_info *first, *match = res->f6i; in fib6_select_path()
494 res->f6i = match; in fib6_select_path()
565 struct fib6_info *f6i = res->f6i; in rt6_device_match() local
570 if (unlikely(f6i->nh)) { in rt6_device_match()
571 nh = nexthop_fib6_nh(f6i->nh); in rt6_device_match()
572 if (nexthop_is_blackhole(f6i->nh)) in rt6_device_match()
575 nh = f6i->fib6_nh; in rt6_device_match()
581 for (spf6i = f6i; spf6i; spf6i = rcu_dereference(spf6i->fib6_next)) { in rt6_device_match()
595 res->f6i = spf6i; in rt6_device_match()
601 res->f6i = net->ipv6.fib6_null_entry; in rt6_device_match()
602 nh = res->f6i->fib6_nh; in rt6_device_match()
606 if (unlikely(f6i->nh)) { in rt6_device_match()
607 nh = nexthop_fib6_nh(f6i->nh); in rt6_device_match()
608 if (nexthop_is_blackhole(f6i->nh)) in rt6_device_match()
611 nh = f6i->fib6_nh; in rt6_device_match()
615 res->f6i = net->ipv6.fib6_null_entry; in rt6_device_match()
616 nh = res->f6i->fib6_nh; in rt6_device_match()
620 res->fib6_type = res->f6i->fib6_type; in rt6_device_match()
621 res->fib6_flags = res->f6i->fib6_flags; in rt6_device_match()
829 struct fib6_info *f6i; in __find_rr_leaf() local
831 for (f6i = f6i_start; in __find_rr_leaf()
832 f6i && f6i != nomatch; in __find_rr_leaf()
833 f6i = rcu_dereference(f6i->fib6_next)) { in __find_rr_leaf()
837 if (cont && f6i->fib6_metric != metric) { in __find_rr_leaf()
838 *cont = f6i; in __find_rr_leaf()
842 if (fib6_check_expired(f6i)) in __find_rr_leaf()
845 if (unlikely(f6i->nh)) { in __find_rr_leaf()
847 .flags = f6i->fib6_flags, in __find_rr_leaf()
854 if (nexthop_is_blackhole(f6i->nh)) { in __find_rr_leaf()
857 res->f6i = f6i; in __find_rr_leaf()
858 res->nh = nexthop_fib6_nh(f6i->nh); in __find_rr_leaf()
861 if (nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_find_match, in __find_rr_leaf()
867 nh = f6i->fib6_nh; in __find_rr_leaf()
868 if (find_match(nh, f6i->fib6_flags, oif, strict, in __find_rr_leaf()
873 res->f6i = f6i; in __find_rr_leaf()
875 res->fib6_flags = f6i->fib6_flags; in __find_rr_leaf()
876 res->fib6_type = f6i->fib6_type; in __find_rr_leaf()
895 if (res->f6i || !cont) in find_rr_leaf()
911 res->f6i = NULL; in rt6_select()
951 if (!res->f6i) { in rt6_select()
952 res->f6i = net->ipv6.fib6_null_entry; in rt6_select()
953 res->nh = res->f6i->fib6_nh; in rt6_select()
954 res->fib6_flags = res->f6i->fib6_flags; in rt6_select()
955 res->fib6_type = res->f6i->fib6_type; in rt6_select()
961 return (res->f6i->fib6_flags & RTF_NONEXTHOP) || in rt6_is_gw_or_nonexthop()
1065 !rt6_need_strict(&res->f6i->fib6_dst.addr)) in ip6_rt_get_dev_rcu()
1133 struct fib6_info *f6i = res->f6i; in ip6_rt_init_dst() local
1145 } else if (ipv6_addr_type(&f6i->fib6_dst.addr) & IPV6_ADDR_MULTICAST) { in ip6_rt_init_dst()
1173 struct fib6_info *f6i = res->f6i; in ip6_rt_copy_init() local
1177 rt->rt6i_dst = f6i->fib6_dst; in ip6_rt_copy_init()
1184 rt6_set_from(rt, f6i); in ip6_rt_copy_init()
1186 rt->rt6i_src = f6i->fib6_src; in ip6_rt_copy_init()
1228 struct fib6_info *f6i = res->f6i; in ip6_create_rt_rcu() local
1232 if (!fib6_info_hold_safe(f6i)) in ip6_create_rt_rcu()
1235 flags = fib6_info_dst_flags(f6i); in ip6_create_rt_rcu()
1238 fib6_info_release(f6i); in ip6_create_rt_rcu()
1264 res.f6i = rcu_dereference(fn->leaf); in ip6_pol_route_lookup()
1265 if (!res.f6i) in ip6_pol_route_lookup()
1266 res.f6i = net->ipv6.fib6_null_entry; in ip6_pol_route_lookup()
1271 if (res.f6i == net->ipv6.fib6_null_entry) { in ip6_pol_route_lookup()
1368 struct fib6_info *f6i = res->f6i; in ip6_rt_cache_alloc() local
1376 if (!fib6_info_hold_safe(f6i)) in ip6_rt_cache_alloc()
1382 fib6_info_release(f6i); in ip6_rt_cache_alloc()
1392 if (f6i->fib6_dst.plen != 128 && in ip6_rt_cache_alloc()
1393 ipv6_addr_equal(&f6i->fib6_dst.addr, daddr)) in ip6_rt_cache_alloc()
1408 struct fib6_info *f6i = res->f6i; in ip6_rt_pcpu_alloc() local
1409 unsigned short flags = fib6_info_dst_flags(f6i); in ip6_rt_pcpu_alloc()
1413 if (!fib6_info_hold_safe(f6i)) in ip6_rt_pcpu_alloc()
1421 fib6_info_release(f6i); in ip6_rt_pcpu_alloc()
1427 if (f6i->nh) in ip6_rt_pcpu_alloc()
1475 if (res->f6i->fib6_destroying) { in rt6_make_pcpu_route()
1628 if (res->f6i->fib6_pmtu) { in fib6_mtu()
1629 mtu = res->f6i->fib6_pmtu; in fib6_mtu()
1703 struct fib6_info *f6i = res->f6i; in rt6_insert_exception() local
1734 if (f6i->fib6_src.plen) in rt6_insert_exception()
1772 spin_lock_bh(&f6i->fib6_table->tb6_lock); in rt6_insert_exception()
1773 fib6_update_sernum(net, f6i); in rt6_insert_exception()
1774 fib6_add_gc_list(f6i); in rt6_insert_exception()
1775 spin_unlock_bh(&f6i->fib6_table->tb6_lock); in rt6_insert_exception()
1814 struct fib6_info *f6i = arg; in rt6_nh_flush_exceptions() local
1816 fib6_nh_flush_exceptions(nh, f6i); in rt6_nh_flush_exceptions()
1821 void rt6_flush_exceptions(struct fib6_info *f6i) in rt6_flush_exceptions() argument
1823 if (f6i->nh) { in rt6_flush_exceptions()
1825 nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_flush_exceptions, f6i); in rt6_flush_exceptions()
1828 fib6_nh_flush_exceptions(f6i->fib6_nh, f6i); in rt6_flush_exceptions()
1856 if (res->f6i->fib6_src.plen) in rt6_find_cached_rt()
1868 if (!ret && src_key && src_key != &res->f6i->fib6_src.addr) { in rt6_find_cached_rt()
1869 src_key = &res->f6i->fib6_src.addr; in rt6_find_cached_rt()
2206 void rt6_age_exceptions(struct fib6_info *f6i, in rt6_age_exceptions() argument
2210 if (f6i->nh) { in rt6_age_exceptions()
2216 nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_age_exceptions, in rt6_age_exceptions()
2219 fib6_nh_age_exceptions(f6i->fib6_nh, gc_args, now); in rt6_age_exceptions()
2234 if (res->f6i == net->ipv6.fib6_null_entry) { in fib6_table_lookup()
2270 if (res.f6i == net->ipv6.fib6_null_entry) in ip6_pol_route()
2746 static bool fib6_check(struct fib6_info *f6i, u32 cookie) in fib6_check() argument
2750 if (!fib6_get_cookie_safe(f6i, &rt_cookie) || rt_cookie != cookie) in fib6_check()
2753 if (fib6_check_expired(f6i)) in fib6_check()
2937 res.f6i = rcu_dereference(rt6->from); in __ip6_rt_update_pmtu()
2938 if (!res.f6i) in __ip6_rt_update_pmtu()
2941 res.fib6_flags = res.f6i->fib6_flags; in __ip6_rt_update_pmtu()
2942 res.fib6_type = res.f6i->fib6_type; in __ip6_rt_update_pmtu()
2944 if (res.f6i->nh) { in __ip6_rt_update_pmtu()
2950 nexthop_for_each_fib6_nh(res.f6i->nh, in __ip6_rt_update_pmtu()
2961 res.nh = res.f6i->fib6_nh; in __ip6_rt_update_pmtu()
3127 res.f6i = rt; in __ip6_route_redirect()
3161 res.f6i = rt; in __ip6_route_redirect()
3167 res.fib6_flags = res.f6i->fib6_flags; in __ip6_route_redirect()
3168 res.fib6_type = res.f6i->fib6_type; in __ip6_route_redirect()
3285 struct fib6_info *f6i = res->f6i; in ip6_mtu_from_fib6() local
3290 if (unlikely(fib6_metric_locked(f6i, RTAX_MTU))) { in ip6_mtu_from_fib6()
3291 mtu = f6i->fib6_pmtu; in ip6_mtu_from_fib6()
3394 if (!err && res->f6i != net->ipv6.fib6_null_entry) in ip6_nh_lookup_table()
3414 !ipv6_addr_any(&res.f6i->fib6_dst.addr) && in ip6_route_check_nh_onlink()
4084 .f6i = rt, in ip6_del_cached_rt()
4098 struct fib6_info *f6i; member
4106 rc = ip6_del_cached_rt(arg->cfg, arg->f6i, nh); in fib6_nh_del_cached_rt()
4110 static int ip6_del_cached_rt_nh(struct fib6_config *cfg, struct fib6_info *f6i) in ip6_del_cached_rt_nh() argument
4114 .f6i = f6i in ip6_del_cached_rt_nh()
4117 return nexthop_for_each_fib6_nh(f6i->nh, fib6_nh_del_cached_rt, &arg); in ip6_del_cached_rt_nh()
4298 res.f6i = rcu_dereference(rt->from); in rt6_do_redirect()
4299 if (!res.f6i) in rt6_do_redirect()
4302 if (res.f6i->nh) { in rt6_do_redirect()
4308 nexthop_for_each_fib6_nh(res.f6i->nh, in rt6_do_redirect()
4318 res.nh = res.f6i->fib6_nh; in rt6_do_redirect()
4321 res.fib6_flags = res.f6i->fib6_flags; in rt6_do_redirect()
4322 res.fib6_type = res.f6i->fib6_type; in rt6_do_redirect()
4669 struct fib6_info *f6i; in addrconf_f6i_alloc() local
4680 f6i = ip6_route_info_create(&cfg, gfp_flags, extack); in addrconf_f6i_alloc()
4681 if (IS_ERR(f6i)) in addrconf_f6i_alloc()
4682 return f6i; in addrconf_f6i_alloc()
4684 err = ip6_route_info_create_nh(f6i, &cfg, gfp_flags, extack); in addrconf_f6i_alloc()
4688 f6i->dst_nocount = true; in addrconf_f6i_alloc()
4693 f6i->dst_nopolicy = true; in addrconf_f6i_alloc()
4695 return f6i; in addrconf_f6i_alloc()
5018 struct fib6_info *f6i; member
5024 struct fib6_info *f6i = arg->f6i; in fib6_nh_mtu_change() local
5033 u32 mtu = f6i->fib6_pmtu; in fib6_nh_mtu_change()
5037 fib6_metric_set(f6i, RTAX_MTU, arg->mtu); in fib6_nh_mtu_change()
5047 static int rt6_mtu_change_route(struct fib6_info *f6i, void *p_arg) in rt6_mtu_change_route() argument
5062 if (fib6_metric_locked(f6i, RTAX_MTU)) in rt6_mtu_change_route()
5065 arg->f6i = f6i; in rt6_mtu_change_route()
5066 if (f6i->nh) { in rt6_mtu_change_route()
5068 return nexthop_for_each_fib6_nh(f6i->nh, fib6_nh_mtu_change, in rt6_mtu_change_route()
5072 return fib6_nh_mtu_change(f6i->fib6_nh, arg); in rt6_mtu_change_route()
5673 static size_t rt6_nlmsg_size(struct fib6_info *f6i) in rt6_nlmsg_size() argument
5679 if (f6i->nh) { in rt6_nlmsg_size()
5681 nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_nlmsg_size, in rt6_nlmsg_size()
5688 nh = f6i->fib6_nh; in rt6_nlmsg_size()
5690 if (READ_ONCE(f6i->fib6_nsiblings)) { in rt6_nlmsg_size()
5693 list_for_each_entry_rcu(sibling, &f6i->fib6_siblings, in rt6_nlmsg_size()
5696 if (!READ_ONCE(f6i->fib6_nsiblings)) in rt6_nlmsg_size()
5951 static bool fib6_info_uses_dev(const struct fib6_info *f6i, in fib6_info_uses_dev() argument
5954 if (f6i->nh) { in fib6_info_uses_dev()
5957 return !!nexthop_for_each_fib6_nh(f6i->nh, in fib6_info_uses_dev()
5962 if (f6i->fib6_nh->fib_nh_dev == dev) in fib6_info_uses_dev()
5965 if (READ_ONCE(f6i->fib6_nsiblings)) { in fib6_info_uses_dev()
5969 list_for_each_entry_rcu(sibling, &f6i->fib6_siblings, in fib6_info_uses_dev()
5975 if (!READ_ONCE(f6i->fib6_nsiblings)) in fib6_info_uses_dev()
6399 void fib6_info_hw_flags_set(struct net *net, struct fib6_info *f6i, in fib6_info_hw_flags_set() argument
6405 if (READ_ONCE(f6i->offload) == offload && in fib6_info_hw_flags_set()
6406 READ_ONCE(f6i->trap) == trap && in fib6_info_hw_flags_set()
6407 READ_ONCE(f6i->offload_failed) == offload_failed) in fib6_info_hw_flags_set()
6410 WRITE_ONCE(f6i->offload, offload); in fib6_info_hw_flags_set()
6411 WRITE_ONCE(f6i->trap, trap); in fib6_info_hw_flags_set()
6415 READ_ONCE(f6i->offload_failed) == offload_failed) in fib6_info_hw_flags_set()
6418 WRITE_ONCE(f6i->offload_failed, offload_failed); in fib6_info_hw_flags_set()
6420 if (!rcu_access_pointer(f6i->fib6_node)) in fib6_info_hw_flags_set()
6429 skb = nlmsg_new(rt6_nlmsg_size(f6i), GFP_KERNEL); in fib6_info_hw_flags_set()
6435 err = rt6_fill_node(net, skb, f6i, NULL, NULL, NULL, 0, RTM_NEWROUTE, 0, in fib6_info_hw_flags_set()