f6i               197 include/net/ip6_fib.h 	struct fib6_info	*f6i;
f6i               216 include/net/ip6_fib.h static inline void fib6_clean_expires(struct fib6_info *f6i)
f6i               218 include/net/ip6_fib.h 	f6i->fib6_flags &= ~RTF_EXPIRES;
f6i               219 include/net/ip6_fib.h 	f6i->expires = 0;
f6i               222 include/net/ip6_fib.h static inline void fib6_set_expires(struct fib6_info *f6i,
f6i               225 include/net/ip6_fib.h 	f6i->expires = expires;
f6i               226 include/net/ip6_fib.h 	f6i->fib6_flags |= RTF_EXPIRES;
f6i               229 include/net/ip6_fib.h static inline bool fib6_check_expired(const struct fib6_info *f6i)
f6i               231 include/net/ip6_fib.h 	if (f6i->fib6_flags & RTF_EXPIRES)
f6i               232 include/net/ip6_fib.h 		return time_after(jiffies, f6i->expires);
f6i               241 include/net/ip6_fib.h static inline bool fib6_get_cookie_safe(const struct fib6_info *f6i,
f6i               247 include/net/ip6_fib.h 	fn = rcu_dereference(f6i->fib6_node);
f6i               290 include/net/ip6_fib.h static inline void fib6_info_hold(struct fib6_info *f6i)
f6i               292 include/net/ip6_fib.h 	refcount_inc(&f6i->fib6_ref);
f6i               295 include/net/ip6_fib.h static inline bool fib6_info_hold_safe(struct fib6_info *f6i)
f6i               297 include/net/ip6_fib.h 	return refcount_inc_not_zero(&f6i->fib6_ref);
f6i               300 include/net/ip6_fib.h static inline void fib6_info_release(struct fib6_info *f6i)
f6i               302 include/net/ip6_fib.h 	if (f6i && refcount_dec_and_test(&f6i->fib6_ref))
f6i               303 include/net/ip6_fib.h 		call_rcu(&f6i->rcu, fib6_info_destroy_rcu);
f6i               499 include/net/ip6_fib.h void fib6_update_sernum_stub(struct net *net, struct fib6_info *f6i);
f6i               501 include/net/ip6_fib.h void fib6_metric_set(struct fib6_info *f6i, int metric, u32 val);
f6i               502 include/net/ip6_fib.h static inline bool fib6_metric_locked(struct fib6_info *f6i, int metric)
f6i               504 include/net/ip6_fib.h 	return !!(f6i->fib6_metrics->metrics[RTAX_LOCK - 1] & (1 << metric));
f6i                74 include/net/ip6_route.h static inline bool rt6_qualify_for_ecmp(const struct fib6_info *f6i)
f6i                77 include/net/ip6_route.h 	return !(f6i->fib6_flags & RTF_ADDRCONF) && !f6i->nh &&
f6i                78 include/net/ip6_route.h 		f6i->fib6_nh->fib_nh_gw_family;
f6i               125 include/net/ip6_route.h int ip6_ins_rt(struct net *net, struct fib6_info *f6i);
f6i               126 include/net/ip6_route.h int ip6_del_rt(struct net *net, struct fib6_info *f6i);
f6i               128 include/net/ip6_route.h void rt6_flush_exceptions(struct fib6_info *f6i);
f6i               129 include/net/ip6_route.h void rt6_age_exceptions(struct fib6_info *f6i, struct fib6_gc_args *gc_args,
f6i               132 include/net/ip6_route.h static inline int ip6_route_get_saddr(struct net *net, struct fib6_info *f6i,
f6i               139 include/net/ip6_route.h 	if (f6i && f6i->fib6_prefsrc.plen) {
f6i               140 include/net/ip6_route.h 		*saddr = f6i->fib6_prefsrc.addr;
f6i               142 include/net/ip6_route.h 		struct net_device *dev = f6i ? fib6_info_nh_dev(f6i) : NULL;
f6i               200 include/net/ip6_route.h int rt6_dump_route(struct fib6_info *f6i, void *p_arg, unsigned int skip);
f6i               207 include/net/ip6_route.h void rt6_multipath_rebalance(struct fib6_info *f6i);
f6i               314 include/net/nexthop.h static inline struct net_device *fib6_info_nh_dev(struct fib6_info *f6i)
f6i               318 include/net/nexthop.h 	fib6_nh = f6i->nh ? nexthop_fib6_nh(f6i->nh) : f6i->fib6_nh;
f6i               324 include/net/nexthop.h 	struct nexthop *nh = res->f6i->nh;
f6i                70 include/trace/events/fib6.h 		if (res->f6i == net->ipv6.fib6_null_entry) {
f6i              4793 net/core/filter.c 	if (unlikely(err || IS_ERR_OR_NULL(res.f6i) ||
f6i              4794 net/core/filter.c 		     res.f6i == net->ipv6.fib6_null_entry))
f6i              4827 net/core/filter.c 	params->rt_metric = res.f6i->fib6_metric;
f6i               610 net/ipv4/nexthop.c 	struct fib6_info *f6i;
f6i               615 net/ipv4/nexthop.c 	list_for_each_entry(f6i, &old->f6i_list, nh_list) {
f6i               616 net/ipv4/nexthop.c 		if (check_src_addr(&f6i->fib6_src.addr, extack) < 0)
f6i               787 net/ipv4/nexthop.c 	struct fib6_info *f6i, *tmp;
f6i               799 net/ipv4/nexthop.c 	list_for_each_entry_safe(f6i, tmp, &nh->f6i_list, nh_list) {
f6i               801 net/ipv4/nexthop.c 		fib6_info_hold(f6i);
f6i               802 net/ipv4/nexthop.c 		ipv6_stub->ip6_del_rt(net, f6i);
f6i               844 net/ipv4/nexthop.c 	struct fib6_info *f6i;
f6i               849 net/ipv4/nexthop.c 	list_for_each_entry(f6i, &nh->f6i_list, nh_list)
f6i               850 net/ipv4/nexthop.c 		ipv6_stub->fib6_update_sernum(net, f6i);
f6i               911 net/ipv4/nexthop.c 	struct fib6_info *f6i;
f6i               929 net/ipv4/nexthop.c 	list_for_each_entry(f6i, &nh->f6i_list, nh_list)
f6i               930 net/ipv4/nexthop.c 		ipv6_stub->fib6_rt_update(net, f6i, info);
f6i              1044 net/ipv6/addrconf.c 	struct fib6_info *f6i = NULL;
f6i              1087 net/ipv6/addrconf.c 	f6i = addrconf_f6i_alloc(net, idev, cfg->pfx, false, gfp_flags);
f6i              1088 net/ipv6/addrconf.c 	if (IS_ERR(f6i)) {
f6i              1089 net/ipv6/addrconf.c 		err = PTR_ERR(f6i);
f6i              1090 net/ipv6/addrconf.c 		f6i = NULL;
f6i              1096 net/ipv6/addrconf.c 		f6i->dst_nopolicy = true;
f6i              1119 net/ipv6/addrconf.c 	ifa->rt = f6i;
f6i              1153 net/ipv6/addrconf.c 		fib6_info_release(f6i);
f6i              1232 net/ipv6/addrconf.c 	struct fib6_info *f6i;
f6i              1234 net/ipv6/addrconf.c 	f6i = addrconf_get_prefix_route(del_peer ? &ifp->peer_addr : &ifp->addr,
f6i              1237 net/ipv6/addrconf.c 	if (f6i) {
f6i              1239 net/ipv6/addrconf.c 			ip6_del_rt(dev_net(ifp->idev->dev), f6i);
f6i              1241 net/ipv6/addrconf.c 			if (!(f6i->fib6_flags & RTF_EXPIRES))
f6i              1242 net/ipv6/addrconf.c 				fib6_set_expires(f6i, expires);
f6i              1243 net/ipv6/addrconf.c 			fib6_info_release(f6i);
f6i              3432 net/ipv6/addrconf.c 		struct fib6_info *f6i, *prev;
f6i              3434 net/ipv6/addrconf.c 		f6i = addrconf_f6i_alloc(net, idev, &ifp->addr, false,
f6i              3436 net/ipv6/addrconf.c 		if (IS_ERR(f6i))
f6i              3437 net/ipv6/addrconf.c 			return PTR_ERR(f6i);
f6i              3442 net/ipv6/addrconf.c 		ifp->rt = f6i;
f6i              4602 net/ipv6/addrconf.c 	struct fib6_info *f6i;
f6i              4605 net/ipv6/addrconf.c 	f6i = addrconf_get_prefix_route(modify_peer ? &ifp->peer_addr : &ifp->addr,
f6i              4608 net/ipv6/addrconf.c 	if (!f6i)
f6i              4612 net/ipv6/addrconf.c 	if (f6i->fib6_metric != prio) {
f6i              4614 net/ipv6/addrconf.c 		ip6_del_rt(dev_net(ifp->idev->dev), f6i);
f6i              4623 net/ipv6/addrconf.c 			fib6_clean_expires(f6i);
f6i              4625 net/ipv6/addrconf.c 			fib6_set_expires(f6i, expires);
f6i              4627 net/ipv6/addrconf.c 		fib6_info_release(f6i);
f6i               253 net/ipv6/anycast.c static struct ifacaddr6 *aca_alloc(struct fib6_info *f6i,
f6i               263 net/ipv6/anycast.c 	fib6_info_hold(f6i);
f6i               264 net/ipv6/anycast.c 	aca->aca_rt = f6i;
f6i               280 net/ipv6/anycast.c 	struct fib6_info *f6i;
f6i               301 net/ipv6/anycast.c 	f6i = addrconf_f6i_alloc(net, idev, addr, true, GFP_ATOMIC);
f6i               302 net/ipv6/anycast.c 	if (IS_ERR(f6i)) {
f6i               303 net/ipv6/anycast.c 		err = PTR_ERR(f6i);
f6i               306 net/ipv6/anycast.c 	aca = aca_alloc(f6i, addr);
f6i               308 net/ipv6/anycast.c 		fib6_info_release(f6i);
f6i               324 net/ipv6/anycast.c 	ip6_ins_rt(net, f6i);
f6i                81 net/ipv6/fib6_rules.c 		if (err || res->f6i == net->ipv6.fib6_null_entry)
f6i               182 net/ipv6/fib6_rules.c 	if (!err && res->f6i != net->ipv6.fib6_null_entry)
f6i               106 net/ipv6/ip6_fib.c void fib6_update_sernum(struct net *net, struct fib6_info *f6i)
f6i               110 net/ipv6/ip6_fib.c 	fn = rcu_dereference_protected(f6i->fib6_node,
f6i               111 net/ipv6/ip6_fib.c 			lockdep_is_held(&f6i->fib6_table->tb6_lock));
f6i               148 net/ipv6/ip6_fib.c 	struct fib6_info *f6i;
f6i               149 net/ipv6/ip6_fib.c 	size_t sz = sizeof(*f6i);
f6i               154 net/ipv6/ip6_fib.c 	f6i = kzalloc(sz, gfp_flags);
f6i               155 net/ipv6/ip6_fib.c 	if (!f6i)
f6i               159 net/ipv6/ip6_fib.c 	INIT_LIST_HEAD(&f6i->fib6_siblings);
f6i               160 net/ipv6/ip6_fib.c 	refcount_set(&f6i->fib6_ref, 1);
f6i               162 net/ipv6/ip6_fib.c 	return f6i;
f6i               167 net/ipv6/ip6_fib.c 	struct fib6_info *f6i = container_of(head, struct fib6_info, rcu);
f6i               169 net/ipv6/ip6_fib.c 	WARN_ON(f6i->fib6_node);
f6i               171 net/ipv6/ip6_fib.c 	if (f6i->nh)
f6i               172 net/ipv6/ip6_fib.c 		nexthop_put(f6i->nh);
f6i               174 net/ipv6/ip6_fib.c 		fib6_nh_release(f6i->fib6_nh);
f6i               176 net/ipv6/ip6_fib.c 	ip_fib_metrics_put(f6i->fib6_metrics);
f6i               177 net/ipv6/ip6_fib.c 	kfree(f6i);
f6i               659 net/ipv6/ip6_fib.c void fib6_metric_set(struct fib6_info *f6i, int metric, u32 val)
f6i               661 net/ipv6/ip6_fib.c 	if (!f6i)
f6i               664 net/ipv6/ip6_fib.c 	if (f6i->fib6_metrics == &dst_default_metrics) {
f6i               671 net/ipv6/ip6_fib.c 		f6i->fib6_metrics = p;
f6i               674 net/ipv6/ip6_fib.c 	f6i->fib6_metrics->metrics[metric - 1] = val;
f6i               946 net/ipv6/ip6_fib.c static void fib6_drop_pcpu_from(struct fib6_info *f6i,
f6i               952 net/ipv6/ip6_fib.c 	f6i->fib6_destroying = 1;
f6i               955 net/ipv6/ip6_fib.c 	if (f6i->nh) {
f6i               957 net/ipv6/ip6_fib.c 			.from = f6i,
f6i               961 net/ipv6/ip6_fib.c 		nexthop_for_each_fib6_nh(f6i->nh, fib6_nh_drop_pcpu_from,
f6i               966 net/ipv6/ip6_fib.c 		fib6_nh = f6i->fib6_nh;
f6i               967 net/ipv6/ip6_fib.c 		__fib6_drop_pcpu_from(fib6_nh, f6i, table);
f6i              1289 net/ipv6/ip6_fib.c void fib6_update_sernum_stub(struct net *net, struct fib6_info *f6i)
f6i              1291 net/ipv6/ip6_fib.c 	spin_lock_bh(&f6i->fib6_table->tb6_lock);
f6i              1292 net/ipv6/ip6_fib.c 	fib6_update_sernum_upto_root(net, f6i);
f6i              1293 net/ipv6/ip6_fib.c 	spin_unlock_bh(&f6i->fib6_table->tb6_lock);
f6i               104 net/ipv6/route.c static size_t rt6_nlmsg_size(struct fib6_info *f6i);
f6i               432 net/ipv6/route.c 	struct fib6_info *match = res->f6i;
f6i               467 net/ipv6/route.c 	res->f6i = match;
f6i               538 net/ipv6/route.c 	struct fib6_info *f6i = res->f6i;
f6i               543 net/ipv6/route.c 		if (unlikely(f6i->nh)) {
f6i               544 net/ipv6/route.c 			nh = nexthop_fib6_nh(f6i->nh);
f6i               545 net/ipv6/route.c 			if (nexthop_is_blackhole(f6i->nh))
f6i               548 net/ipv6/route.c 			nh = f6i->fib6_nh;
f6i               554 net/ipv6/route.c 	for (spf6i = f6i; spf6i; spf6i = rcu_dereference(spf6i->fib6_next)) {
f6i               568 net/ipv6/route.c 			res->f6i = spf6i;
f6i               574 net/ipv6/route.c 		res->f6i = net->ipv6.fib6_null_entry;
f6i               575 net/ipv6/route.c 		nh = res->f6i->fib6_nh;
f6i               579 net/ipv6/route.c 	if (unlikely(f6i->nh)) {
f6i               580 net/ipv6/route.c 		nh = nexthop_fib6_nh(f6i->nh);
f6i               581 net/ipv6/route.c 		if (nexthop_is_blackhole(f6i->nh))
f6i               584 net/ipv6/route.c 		nh = f6i->fib6_nh;
f6i               588 net/ipv6/route.c 		res->f6i = net->ipv6.fib6_null_entry;
f6i               589 net/ipv6/route.c 		nh = res->f6i->fib6_nh;
f6i               593 net/ipv6/route.c 	res->fib6_type = res->f6i->fib6_type;
f6i               594 net/ipv6/route.c 	res->fib6_flags = res->f6i->fib6_flags;
f6i               798 net/ipv6/route.c 	struct fib6_info *f6i;
f6i               800 net/ipv6/route.c 	for (f6i = f6i_start;
f6i               801 net/ipv6/route.c 	     f6i && f6i != nomatch;
f6i               802 net/ipv6/route.c 	     f6i = rcu_dereference(f6i->fib6_next)) {
f6i               806 net/ipv6/route.c 		if (cont && f6i->fib6_metric != metric) {
f6i               807 net/ipv6/route.c 			*cont = f6i;
f6i               811 net/ipv6/route.c 		if (fib6_check_expired(f6i))
f6i               814 net/ipv6/route.c 		if (unlikely(f6i->nh)) {
f6i               816 net/ipv6/route.c 				.flags  = f6i->fib6_flags,
f6i               823 net/ipv6/route.c 			if (nexthop_is_blackhole(f6i->nh)) {
f6i               826 net/ipv6/route.c 				res->f6i = f6i;
f6i               827 net/ipv6/route.c 				res->nh = nexthop_fib6_nh(f6i->nh);
f6i               830 net/ipv6/route.c 			if (nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_find_match,
f6i               836 net/ipv6/route.c 			nh = f6i->fib6_nh;
f6i               837 net/ipv6/route.c 			if (find_match(nh, f6i->fib6_flags, oif, strict,
f6i               842 net/ipv6/route.c 			res->f6i = f6i;
f6i               844 net/ipv6/route.c 			res->fib6_flags = f6i->fib6_flags;
f6i               845 net/ipv6/route.c 			res->fib6_type = f6i->fib6_type;
f6i               864 net/ipv6/route.c 	if (res->f6i || !cont)
f6i               880 net/ipv6/route.c 	res->f6i = NULL;
f6i               920 net/ipv6/route.c 	if (!res->f6i) {
f6i               921 net/ipv6/route.c 		res->f6i = net->ipv6.fib6_null_entry;
f6i               922 net/ipv6/route.c 		res->nh = res->f6i->fib6_nh;
f6i               923 net/ipv6/route.c 		res->fib6_flags = res->f6i->fib6_flags;
f6i               924 net/ipv6/route.c 		res->fib6_type = res->f6i->fib6_type;
f6i               930 net/ipv6/route.c 	return (res->f6i->fib6_flags & RTF_NONEXTHOP) ||
f6i              1025 net/ipv6/route.c 		    !rt6_need_strict(&res->f6i->fib6_dst.addr))
f6i              1095 net/ipv6/route.c 	struct fib6_info *f6i = res->f6i;
f6i              1107 net/ipv6/route.c 	} else if (ipv6_addr_type(&f6i->fib6_dst.addr) & IPV6_ADDR_MULTICAST) {
f6i              1134 net/ipv6/route.c 	struct fib6_info *f6i = res->f6i;
f6i              1138 net/ipv6/route.c 	rt->rt6i_dst = f6i->fib6_dst;
f6i              1145 net/ipv6/route.c 	rt6_set_from(rt, f6i);
f6i              1147 net/ipv6/route.c 	rt->rt6i_src = f6i->fib6_src;
f6i              1189 net/ipv6/route.c 	struct fib6_info *f6i = res->f6i;
f6i              1193 net/ipv6/route.c 	if (!fib6_info_hold_safe(f6i))
f6i              1196 net/ipv6/route.c 	flags = fib6_info_dst_flags(f6i);
f6i              1199 net/ipv6/route.c 		fib6_info_release(f6i);
f6i              1228 net/ipv6/route.c 	res.f6i = rcu_dereference(fn->leaf);
f6i              1229 net/ipv6/route.c 	if (!res.f6i)
f6i              1230 net/ipv6/route.c 		res.f6i = net->ipv6.fib6_null_entry;
f6i              1235 net/ipv6/route.c 	if (res.f6i == net->ipv6.fib6_null_entry) {
f6i              1332 net/ipv6/route.c 	struct fib6_info *f6i = res->f6i;
f6i              1340 net/ipv6/route.c 	if (!fib6_info_hold_safe(f6i))
f6i              1346 net/ipv6/route.c 		fib6_info_release(f6i);
f6i              1357 net/ipv6/route.c 		if (f6i->fib6_dst.plen != 128 &&
f6i              1358 net/ipv6/route.c 		    ipv6_addr_equal(&f6i->fib6_dst.addr, daddr))
f6i              1373 net/ipv6/route.c 	struct fib6_info *f6i = res->f6i;
f6i              1374 net/ipv6/route.c 	unsigned short flags = fib6_info_dst_flags(f6i);
f6i              1378 net/ipv6/route.c 	if (!fib6_info_hold_safe(f6i))
f6i              1386 net/ipv6/route.c 		fib6_info_release(f6i);
f6i              1392 net/ipv6/route.c 	if (f6i->nh)
f6i              1439 net/ipv6/route.c 	if (res->f6i->fib6_destroying) {
f6i              1588 net/ipv6/route.c 	if (res->f6i->fib6_pmtu) {
f6i              1589 net/ipv6/route.c 		mtu = res->f6i->fib6_pmtu;
f6i              1663 net/ipv6/route.c 	struct fib6_info *f6i = res->f6i;
f6i              1693 net/ipv6/route.c 	if (f6i->fib6_src.plen)
f6i              1729 net/ipv6/route.c 		spin_lock_bh(&f6i->fib6_table->tb6_lock);
f6i              1730 net/ipv6/route.c 		fib6_update_sernum(net, f6i);
f6i              1731 net/ipv6/route.c 		spin_unlock_bh(&f6i->fib6_table->tb6_lock);
f6i              1770 net/ipv6/route.c 	struct fib6_info *f6i = arg;
f6i              1772 net/ipv6/route.c 	fib6_nh_flush_exceptions(nh, f6i);
f6i              1777 net/ipv6/route.c void rt6_flush_exceptions(struct fib6_info *f6i)
f6i              1779 net/ipv6/route.c 	if (f6i->nh)
f6i              1780 net/ipv6/route.c 		nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_flush_exceptions,
f6i              1781 net/ipv6/route.c 					 f6i);
f6i              1783 net/ipv6/route.c 		fib6_nh_flush_exceptions(f6i->fib6_nh, f6i);
f6i              1810 net/ipv6/route.c 	if (res->f6i->fib6_src.plen)
f6i              1822 net/ipv6/route.c 	if (!ret && src_key && src_key != &res->f6i->fib6_src.addr) {
f6i              1823 net/ipv6/route.c 		src_key = &res->f6i->fib6_src.addr;
f6i              2162 net/ipv6/route.c void rt6_age_exceptions(struct fib6_info *f6i,
f6i              2166 net/ipv6/route.c 	if (f6i->nh) {
f6i              2172 net/ipv6/route.c 		nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_age_exceptions,
f6i              2175 net/ipv6/route.c 		fib6_nh_age_exceptions(f6i->fib6_nh, gc_args, now);
f6i              2193 net/ipv6/route.c 	if (res->f6i == net->ipv6.fib6_null_entry) {
f6i              2229 net/ipv6/route.c 	if (res.f6i == net->ipv6.fib6_null_entry)
f6i              2575 net/ipv6/route.c static bool fib6_check(struct fib6_info *f6i, u32 cookie)
f6i              2579 net/ipv6/route.c 	if (!fib6_get_cookie_safe(f6i, &rt_cookie) || rt_cookie != cookie)
f6i              2582 net/ipv6/route.c 	if (fib6_check_expired(f6i))
f6i              2764 net/ipv6/route.c 		res.f6i = rcu_dereference(rt6->from);
f6i              2765 net/ipv6/route.c 		if (!res.f6i)
f6i              2768 net/ipv6/route.c 		res.fib6_flags = res.f6i->fib6_flags;
f6i              2769 net/ipv6/route.c 		res.fib6_type = res.f6i->fib6_type;
f6i              2771 net/ipv6/route.c 		if (res.f6i->nh) {
f6i              2777 net/ipv6/route.c 			nexthop_for_each_fib6_nh(res.f6i->nh,
f6i              2788 net/ipv6/route.c 			res.nh = res.f6i->fib6_nh;
f6i              2959 net/ipv6/route.c 		res.f6i = rt;
f6i              2993 net/ipv6/route.c 	res.f6i = rt;
f6i              2999 net/ipv6/route.c 		res.fib6_flags = res.f6i->fib6_flags;
f6i              3000 net/ipv6/route.c 		res.fib6_type = res.f6i->fib6_type;
f6i              3129 net/ipv6/route.c 	struct fib6_info *f6i = res->f6i;
f6i              3134 net/ipv6/route.c 	if (unlikely(fib6_metric_locked(f6i, RTAX_MTU))) {
f6i              3135 net/ipv6/route.c 		mtu = f6i->fib6_pmtu;
f6i              3243 net/ipv6/route.c 	if (!err && res->f6i != net->ipv6.fib6_null_entry)
f6i              3263 net/ipv6/route.c 	    !ipv6_addr_any(&res.f6i->fib6_dst.addr) &&
f6i              3853 net/ipv6/route.c 		.f6i = rt,
f6i              3867 net/ipv6/route.c 	struct fib6_info *f6i;
f6i              3875 net/ipv6/route.c 	rc = ip6_del_cached_rt(arg->cfg, arg->f6i, nh);
f6i              3879 net/ipv6/route.c static int ip6_del_cached_rt_nh(struct fib6_config *cfg, struct fib6_info *f6i)
f6i              3883 net/ipv6/route.c 		.f6i = f6i
f6i              3886 net/ipv6/route.c 	return nexthop_for_each_fib6_nh(f6i->nh, fib6_nh_del_cached_rt, &arg);
f6i              4066 net/ipv6/route.c 	res.f6i = rcu_dereference(rt->from);
f6i              4067 net/ipv6/route.c 	if (!res.f6i)
f6i              4070 net/ipv6/route.c 	if (res.f6i->nh) {
f6i              4076 net/ipv6/route.c 		nexthop_for_each_fib6_nh(res.f6i->nh,
f6i              4086 net/ipv6/route.c 		res.nh = res.f6i->fib6_nh;
f6i              4089 net/ipv6/route.c 	res.fib6_flags = res.f6i->fib6_flags;
f6i              4090 net/ipv6/route.c 	res.fib6_type = res.f6i->fib6_type;
f6i              4438 net/ipv6/route.c 	struct fib6_info *f6i;
f6i              4448 net/ipv6/route.c 	f6i = ip6_route_info_create(&cfg, gfp_flags, NULL);
f6i              4449 net/ipv6/route.c 	if (!IS_ERR(f6i))
f6i              4450 net/ipv6/route.c 		f6i->dst_nocount = true;
f6i              4451 net/ipv6/route.c 	return f6i;
f6i              4777 net/ipv6/route.c 	struct fib6_info *f6i;
f6i              4783 net/ipv6/route.c 	struct fib6_info *f6i = arg->f6i;
f6i              4792 net/ipv6/route.c 		u32 mtu = f6i->fib6_pmtu;
f6i              4796 net/ipv6/route.c 			fib6_metric_set(f6i, RTAX_MTU, arg->mtu);
f6i              4806 net/ipv6/route.c static int rt6_mtu_change_route(struct fib6_info *f6i, void *p_arg)
f6i              4821 net/ipv6/route.c 	if (fib6_metric_locked(f6i, RTAX_MTU))
f6i              4824 net/ipv6/route.c 	arg->f6i = f6i;
f6i              4825 net/ipv6/route.c 	if (f6i->nh) {
f6i              4827 net/ipv6/route.c 		return nexthop_for_each_fib6_nh(f6i->nh, fib6_nh_mtu_change,
f6i              4831 net/ipv6/route.c 	return fib6_nh_mtu_change(f6i->fib6_nh, arg);
f6i              5328 net/ipv6/route.c static size_t rt6_nlmsg_size(struct fib6_info *f6i)
f6i              5332 net/ipv6/route.c 	if (f6i->nh) {
f6i              5334 net/ipv6/route.c 		nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_nlmsg_size,
f6i              5337 net/ipv6/route.c 		struct fib6_nh *nh = f6i->fib6_nh;
f6i              5340 net/ipv6/route.c 		if (f6i->fib6_nsiblings) {
f6i              5346 net/ipv6/route.c 			nexthop_len *= f6i->fib6_nsiblings;
f6i              5575 net/ipv6/route.c static bool fib6_info_uses_dev(const struct fib6_info *f6i,
f6i              5578 net/ipv6/route.c 	if (f6i->nh) {
f6i              5581 net/ipv6/route.c 		return !!nexthop_for_each_fib6_nh(f6i->nh,
f6i              5586 net/ipv6/route.c 	if (f6i->fib6_nh->fib_nh_dev == dev)
f6i              5589 net/ipv6/route.c 	if (f6i->fib6_nsiblings) {
f6i              5593 net/ipv6/route.c 					 &f6i->fib6_siblings, fib6_siblings) {