Lines Matching refs:f6i
106 static size_t rt6_nlmsg_size(struct fib6_info *f6i);
416 struct fib6_info *match = res->f6i; in fib6_select_path()
454 res->f6i = match; in fib6_select_path()
525 struct fib6_info *f6i = res->f6i; in rt6_device_match() local
530 if (unlikely(f6i->nh)) { in rt6_device_match()
531 nh = nexthop_fib6_nh(f6i->nh); in rt6_device_match()
532 if (nexthop_is_blackhole(f6i->nh)) in rt6_device_match()
535 nh = f6i->fib6_nh; in rt6_device_match()
541 for (spf6i = f6i; spf6i; spf6i = rcu_dereference(spf6i->fib6_next)) { in rt6_device_match()
555 res->f6i = spf6i; in rt6_device_match()
561 res->f6i = net->ipv6.fib6_null_entry; in rt6_device_match()
562 nh = res->f6i->fib6_nh; in rt6_device_match()
566 if (unlikely(f6i->nh)) { in rt6_device_match()
567 nh = nexthop_fib6_nh(f6i->nh); in rt6_device_match()
568 if (nexthop_is_blackhole(f6i->nh)) in rt6_device_match()
571 nh = f6i->fib6_nh; in rt6_device_match()
575 res->f6i = net->ipv6.fib6_null_entry; in rt6_device_match()
576 nh = res->f6i->fib6_nh; in rt6_device_match()
580 res->fib6_type = res->f6i->fib6_type; in rt6_device_match()
581 res->fib6_flags = res->f6i->fib6_flags; in rt6_device_match()
785 struct fib6_info *f6i; in __find_rr_leaf() local
787 for (f6i = f6i_start; in __find_rr_leaf()
788 f6i && f6i != nomatch; in __find_rr_leaf()
789 f6i = rcu_dereference(f6i->fib6_next)) { in __find_rr_leaf()
793 if (cont && f6i->fib6_metric != metric) { in __find_rr_leaf()
794 *cont = f6i; in __find_rr_leaf()
798 if (fib6_check_expired(f6i)) in __find_rr_leaf()
801 if (unlikely(f6i->nh)) { in __find_rr_leaf()
803 .flags = f6i->fib6_flags, in __find_rr_leaf()
810 if (nexthop_is_blackhole(f6i->nh)) { in __find_rr_leaf()
813 res->f6i = f6i; in __find_rr_leaf()
814 res->nh = nexthop_fib6_nh(f6i->nh); in __find_rr_leaf()
817 if (nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_find_match, in __find_rr_leaf()
823 nh = f6i->fib6_nh; in __find_rr_leaf()
824 if (find_match(nh, f6i->fib6_flags, oif, strict, in __find_rr_leaf()
829 res->f6i = f6i; in __find_rr_leaf()
831 res->fib6_flags = f6i->fib6_flags; in __find_rr_leaf()
832 res->fib6_type = f6i->fib6_type; in __find_rr_leaf()
851 if (res->f6i || !cont) in find_rr_leaf()
867 res->f6i = NULL; in rt6_select()
907 if (!res->f6i) { in rt6_select()
908 res->f6i = net->ipv6.fib6_null_entry; in rt6_select()
909 res->nh = res->f6i->fib6_nh; in rt6_select()
910 res->fib6_flags = res->f6i->fib6_flags; in rt6_select()
911 res->fib6_type = res->f6i->fib6_type; in rt6_select()
917 return (res->f6i->fib6_flags & RTF_NONEXTHOP) || in rt6_is_gw_or_nonexthop()
1012 !rt6_need_strict(&res->f6i->fib6_dst.addr)) in ip6_rt_get_dev_rcu()
1080 struct fib6_info *f6i = res->f6i; in ip6_rt_init_dst() local
1092 } else if (ipv6_addr_type(&f6i->fib6_dst.addr) & IPV6_ADDR_MULTICAST) { in ip6_rt_init_dst()
1119 struct fib6_info *f6i = res->f6i; in ip6_rt_copy_init() local
1123 rt->rt6i_dst = f6i->fib6_dst; in ip6_rt_copy_init()
1130 rt6_set_from(rt, f6i); in ip6_rt_copy_init()
1132 rt->rt6i_src = f6i->fib6_src; in ip6_rt_copy_init()
1174 struct fib6_info *f6i = res->f6i; in ip6_create_rt_rcu() local
1178 if (!fib6_info_hold_safe(f6i)) in ip6_create_rt_rcu()
1181 flags = fib6_info_dst_flags(f6i); in ip6_create_rt_rcu()
1184 fib6_info_release(f6i); in ip6_create_rt_rcu()
1213 res.f6i = rcu_dereference(fn->leaf); in ip6_pol_route_lookup()
1214 if (!res.f6i) in ip6_pol_route_lookup()
1215 res.f6i = net->ipv6.fib6_null_entry; in ip6_pol_route_lookup()
1220 if (res.f6i == net->ipv6.fib6_null_entry) { in ip6_pol_route_lookup()
1317 struct fib6_info *f6i = res->f6i; in ip6_rt_cache_alloc() local
1325 if (!fib6_info_hold_safe(f6i)) in ip6_rt_cache_alloc()
1331 fib6_info_release(f6i); in ip6_rt_cache_alloc()
1341 if (f6i->fib6_dst.plen != 128 && in ip6_rt_cache_alloc()
1342 ipv6_addr_equal(&f6i->fib6_dst.addr, daddr)) in ip6_rt_cache_alloc()
1357 struct fib6_info *f6i = res->f6i; in ip6_rt_pcpu_alloc() local
1358 unsigned short flags = fib6_info_dst_flags(f6i); in ip6_rt_pcpu_alloc()
1362 if (!fib6_info_hold_safe(f6i)) in ip6_rt_pcpu_alloc()
1370 fib6_info_release(f6i); in ip6_rt_pcpu_alloc()
1376 if (f6i->nh) in ip6_rt_pcpu_alloc()
1423 if (res->f6i->fib6_destroying) { in rt6_make_pcpu_route()
1579 if (res->f6i->fib6_pmtu) { in fib6_mtu()
1580 mtu = res->f6i->fib6_pmtu; in fib6_mtu()
1654 struct fib6_info *f6i = res->f6i; in rt6_insert_exception() local
1685 if (f6i->fib6_src.plen) in rt6_insert_exception()
1723 spin_lock_bh(&f6i->fib6_table->tb6_lock); in rt6_insert_exception()
1724 fib6_update_sernum(net, f6i); in rt6_insert_exception()
1725 spin_unlock_bh(&f6i->fib6_table->tb6_lock); in rt6_insert_exception()
1764 struct fib6_info *f6i = arg; in rt6_nh_flush_exceptions() local
1766 fib6_nh_flush_exceptions(nh, f6i); in rt6_nh_flush_exceptions()
1771 void rt6_flush_exceptions(struct fib6_info *f6i) in rt6_flush_exceptions() argument
1773 if (f6i->nh) in rt6_flush_exceptions()
1774 nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_flush_exceptions, in rt6_flush_exceptions()
1775 f6i); in rt6_flush_exceptions()
1777 fib6_nh_flush_exceptions(f6i->fib6_nh, f6i); in rt6_flush_exceptions()
1804 if (res->f6i->fib6_src.plen) in rt6_find_cached_rt()
1816 if (!ret && src_key && src_key != &res->f6i->fib6_src.addr) { in rt6_find_cached_rt()
1817 src_key = &res->f6i->fib6_src.addr; in rt6_find_cached_rt()
2156 void rt6_age_exceptions(struct fib6_info *f6i, in rt6_age_exceptions() argument
2160 if (f6i->nh) { in rt6_age_exceptions()
2166 nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_age_exceptions, in rt6_age_exceptions()
2169 fib6_nh_age_exceptions(f6i->fib6_nh, gc_args, now); in rt6_age_exceptions()
2187 if (res->f6i == net->ipv6.fib6_null_entry) { in fib6_table_lookup()
2223 if (res.f6i == net->ipv6.fib6_null_entry) in ip6_pol_route()
2566 static bool fib6_check(struct fib6_info *f6i, u32 cookie) in fib6_check() argument
2570 if (!fib6_get_cookie_safe(f6i, &rt_cookie) || rt_cookie != cookie) in fib6_check()
2573 if (fib6_check_expired(f6i)) in fib6_check()
2756 res.f6i = rcu_dereference(rt6->from); in __ip6_rt_update_pmtu()
2757 if (!res.f6i) in __ip6_rt_update_pmtu()
2760 res.fib6_flags = res.f6i->fib6_flags; in __ip6_rt_update_pmtu()
2761 res.fib6_type = res.f6i->fib6_type; in __ip6_rt_update_pmtu()
2763 if (res.f6i->nh) { in __ip6_rt_update_pmtu()
2769 nexthop_for_each_fib6_nh(res.f6i->nh, in __ip6_rt_update_pmtu()
2780 res.nh = res.f6i->fib6_nh; in __ip6_rt_update_pmtu()
2951 res.f6i = rt; in __ip6_route_redirect()
2985 res.f6i = rt; in __ip6_route_redirect()
2991 res.fib6_flags = res.f6i->fib6_flags; in __ip6_route_redirect()
2992 res.fib6_type = res.f6i->fib6_type; in __ip6_route_redirect()
3121 struct fib6_info *f6i = res->f6i; in ip6_mtu_from_fib6() local
3126 if (unlikely(fib6_metric_locked(f6i, RTAX_MTU))) { in ip6_mtu_from_fib6()
3127 mtu = f6i->fib6_pmtu; in ip6_mtu_from_fib6()
3238 if (!err && res->f6i != net->ipv6.fib6_null_entry) in ip6_nh_lookup_table()
3258 !ipv6_addr_any(&res.f6i->fib6_dst.addr) && in ip6_route_check_nh_onlink()
3898 .f6i = rt, in ip6_del_cached_rt()
3912 struct fib6_info *f6i; member
3920 rc = ip6_del_cached_rt(arg->cfg, arg->f6i, nh); in fib6_nh_del_cached_rt()
3924 static int ip6_del_cached_rt_nh(struct fib6_config *cfg, struct fib6_info *f6i) in ip6_del_cached_rt_nh() argument
3928 .f6i = f6i in ip6_del_cached_rt_nh()
3931 return nexthop_for_each_fib6_nh(f6i->nh, fib6_nh_del_cached_rt, &arg); in ip6_del_cached_rt_nh()
4111 res.f6i = rcu_dereference(rt->from); in rt6_do_redirect()
4112 if (!res.f6i) in rt6_do_redirect()
4115 if (res.f6i->nh) { in rt6_do_redirect()
4121 nexthop_for_each_fib6_nh(res.f6i->nh, in rt6_do_redirect()
4131 res.nh = res.f6i->fib6_nh; in rt6_do_redirect()
4134 res.fib6_flags = res.f6i->fib6_flags; in rt6_do_redirect()
4135 res.fib6_type = res.f6i->fib6_type; in rt6_do_redirect()
4471 struct fib6_info *f6i; in addrconf_f6i_alloc() local
4481 f6i = ip6_route_info_create(&cfg, gfp_flags, NULL); in addrconf_f6i_alloc()
4482 if (!IS_ERR(f6i)) { in addrconf_f6i_alloc()
4483 f6i->dst_nocount = true; in addrconf_f6i_alloc()
4488 f6i->dst_nopolicy = true; in addrconf_f6i_alloc()
4491 return f6i; in addrconf_f6i_alloc()
4817 struct fib6_info *f6i; member
4823 struct fib6_info *f6i = arg->f6i; in fib6_nh_mtu_change() local
4832 u32 mtu = f6i->fib6_pmtu; in fib6_nh_mtu_change()
4836 fib6_metric_set(f6i, RTAX_MTU, arg->mtu); in fib6_nh_mtu_change()
4846 static int rt6_mtu_change_route(struct fib6_info *f6i, void *p_arg) in rt6_mtu_change_route() argument
4861 if (fib6_metric_locked(f6i, RTAX_MTU)) in rt6_mtu_change_route()
4864 arg->f6i = f6i; in rt6_mtu_change_route()
4865 if (f6i->nh) { in rt6_mtu_change_route()
4867 return nexthop_for_each_fib6_nh(f6i->nh, fib6_nh_mtu_change, in rt6_mtu_change_route()
4871 return fib6_nh_mtu_change(f6i->fib6_nh, arg); in rt6_mtu_change_route()
5438 static size_t rt6_nlmsg_size(struct fib6_info *f6i) in rt6_nlmsg_size() argument
5442 if (f6i->nh) { in rt6_nlmsg_size()
5444 nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_nlmsg_size, in rt6_nlmsg_size()
5447 struct fib6_nh *nh = f6i->fib6_nh; in rt6_nlmsg_size()
5450 if (f6i->fib6_nsiblings) { in rt6_nlmsg_size()
5456 nexthop_len *= f6i->fib6_nsiblings; in rt6_nlmsg_size()
5694 static bool fib6_info_uses_dev(const struct fib6_info *f6i, in fib6_info_uses_dev() argument
5697 if (f6i->nh) { in fib6_info_uses_dev()
5700 return !!nexthop_for_each_fib6_nh(f6i->nh, in fib6_info_uses_dev()
5705 if (f6i->fib6_nh->fib_nh_dev == dev) in fib6_info_uses_dev()
5708 if (f6i->fib6_nsiblings) { in fib6_info_uses_dev()
5712 &f6i->fib6_siblings, fib6_siblings) { in fib6_info_uses_dev()