Lines Matching refs:f6i

107 static size_t rt6_nlmsg_size(struct fib6_info *f6i);
417 struct fib6_info *match = res->f6i;
455 res->f6i = match;
526 struct fib6_info *f6i = res->f6i;
531 if (unlikely(f6i->nh)) {
532 nh = nexthop_fib6_nh(f6i->nh);
533 if (nexthop_is_blackhole(f6i->nh))
536 nh = f6i->fib6_nh;
542 for (spf6i = f6i; spf6i; spf6i = rcu_dereference(spf6i->fib6_next)) {
556 res->f6i = spf6i;
562 res->f6i = net->ipv6.fib6_null_entry;
563 nh = res->f6i->fib6_nh;
567 if (unlikely(f6i->nh)) {
568 nh = nexthop_fib6_nh(f6i->nh);
569 if (nexthop_is_blackhole(f6i->nh))
572 nh = f6i->fib6_nh;
576 res->f6i = net->ipv6.fib6_null_entry;
577 nh = res->f6i->fib6_nh;
581 res->fib6_type = res->f6i->fib6_type;
582 res->fib6_flags = res->f6i->fib6_flags;
788 struct fib6_info *f6i;
790 for (f6i = f6i_start;
791 f6i && f6i != nomatch;
792 f6i = rcu_dereference(f6i->fib6_next)) {
796 if (cont && f6i->fib6_metric != metric) {
797 *cont = f6i;
801 if (fib6_check_expired(f6i))
804 if (unlikely(f6i->nh)) {
806 .flags = f6i->fib6_flags,
813 if (nexthop_is_blackhole(f6i->nh)) {
816 res->f6i = f6i;
817 res->nh = nexthop_fib6_nh(f6i->nh);
820 if (nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_find_match,
826 nh = f6i->fib6_nh;
827 if (find_match(nh, f6i->fib6_flags, oif, strict,
832 res->f6i = f6i;
834 res->fib6_flags = f6i->fib6_flags;
835 res->fib6_type = f6i->fib6_type;
854 if (res->f6i || !cont)
869 /* make sure this function or its helpers sets f6i */
870 res->f6i = NULL;
910 if (!res->f6i) {
911 res->f6i = net->ipv6.fib6_null_entry;
912 res->nh = res->f6i->fib6_nh;
913 res->fib6_flags = res->f6i->fib6_flags;
914 res->fib6_type = res->f6i->fib6_type;
920 return (res->f6i->fib6_flags & RTF_NONEXTHOP) ||
1015 !rt6_need_strict(&res->f6i->fib6_dst.addr))
1083 struct fib6_info *f6i = res->f6i;
1095 } else if (ipv6_addr_type(&f6i->fib6_dst.addr) & IPV6_ADDR_MULTICAST) {
1117 /* Caller must already hold reference to f6i in result */
1122 struct fib6_info *f6i = res->f6i;
1126 rt->rt6i_dst = f6i->fib6_dst;
1133 rt6_set_from(rt, f6i);
1135 rt->rt6i_src = f6i->fib6_src;
1177 struct fib6_info *f6i = res->f6i;
1181 if (!fib6_info_hold_safe(f6i))
1184 flags = fib6_info_dst_flags(f6i);
1187 fib6_info_release(f6i);
1216 res.f6i = rcu_dereference(fn->leaf);
1217 if (!res.f6i)
1218 res.f6i = net->ipv6.fib6_null_entry;
1223 if (res.f6i == net->ipv6.fib6_null_entry) {
1320 struct fib6_info *f6i = res->f6i;
1328 if (!fib6_info_hold_safe(f6i))
1334 fib6_info_release(f6i);
1344 if (f6i->fib6_dst.plen != 128 &&
1345 ipv6_addr_equal(&f6i->fib6_dst.addr, daddr))
1360 struct fib6_info *f6i = res->f6i;
1361 unsigned short flags = fib6_info_dst_flags(f6i);
1365 if (!fib6_info_hold_safe(f6i))
1373 fib6_info_release(f6i);
1379 if (f6i->nh)
1427 if (res->f6i->fib6_destroying) {
1583 if (res->f6i->fib6_pmtu) {
1584 mtu = res->f6i->fib6_pmtu;
1658 struct fib6_info *f6i = res->f6i;
1683 /* fib6_src.plen != 0 indicates f6i is in subtree
1689 if (f6i->fib6_src.plen)
1692 /* rt6_mtu_change() might lower mtu on f6i.
1694 * is less than f6i's mtu value.
1727 spin_lock_bh(&f6i->fib6_table->tb6_lock);
1728 fib6_update_sernum(net, f6i);
1729 spin_unlock_bh(&f6i->fib6_table->tb6_lock);
1768 struct fib6_info *f6i = arg;
1770 fib6_nh_flush_exceptions(nh, f6i);
1775 void rt6_flush_exceptions(struct fib6_info *f6i)
1777 if (f6i->nh)
1778 nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_flush_exceptions,
1779 f6i);
1781 fib6_nh_flush_exceptions(f6i->fib6_nh, f6i);
1797 /* fib6i_src.plen != 0 indicates f6i is in subtree
1803 * So we need to use f6i->fib6_src to redo lookup
1808 if (res->f6i->fib6_src.plen)
1820 if (!ret && src_key && src_key != &res->f6i->fib6_src.addr) {
1821 src_key = &res->f6i->fib6_src.addr;
2160 void rt6_age_exceptions(struct fib6_info *f6i,
2164 if (f6i->nh) {
2170 nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_age_exceptions,
2173 fib6_nh_age_exceptions(f6i->fib6_nh, gc_args, now);
2191 if (res->f6i == net->ipv6.fib6_null_entry) {
2227 if (res.f6i == net->ipv6.fib6_null_entry)
2570 static bool fib6_check(struct fib6_info *f6i, u32 cookie)
2574 if (!fib6_get_cookie_safe(f6i, &rt_cookie) || rt_cookie != cookie)
2577 if (fib6_check_expired(f6i))
2760 res.f6i = rcu_dereference(rt6->from);
2761 if (!res.f6i)
2764 res.fib6_flags = res.f6i->fib6_flags;
2765 res.fib6_type = res.f6i->fib6_type;
2767 if (res.f6i->nh) {
2773 nexthop_for_each_fib6_nh(res.f6i->nh,
2784 res.nh = res.f6i->fib6_nh;
2955 res.f6i = rt;
2989 res.f6i = rt;
2995 res.fib6_flags = res.f6i->fib6_flags;
2996 res.fib6_type = res.f6i->fib6_type;
3125 struct fib6_info *f6i = res->f6i;
3130 if (unlikely(fib6_metric_locked(f6i, RTAX_MTU))) {
3131 mtu = f6i->fib6_pmtu;
3239 if (!err && res->f6i != net->ipv6.fib6_null_entry)
3259 !ipv6_addr_any(&res.f6i->fib6_dst.addr) &&
3899 .f6i = rt,
3913 struct fib6_info *f6i;
3921 rc = ip6_del_cached_rt(arg->cfg, arg->f6i, nh);
3925 static int ip6_del_cached_rt_nh(struct fib6_config *cfg, struct fib6_info *f6i)
3929 .f6i = f6i
3932 return nexthop_for_each_fib6_nh(f6i->nh, fib6_nh_del_cached_rt, &arg);
4112 res.f6i = rcu_dereference(rt->from);
4113 if (!res.f6i)
4116 if (res.f6i->nh) {
4122 nexthop_for_each_fib6_nh(res.f6i->nh,
4132 res.nh = res.f6i->fib6_nh;
4135 res.fib6_flags = res.f6i->fib6_flags;
4136 res.fib6_type = res.f6i->fib6_type;
4472 struct fib6_info *f6i;
4482 f6i = ip6_route_info_create(&cfg, gfp_flags, NULL);
4483 if (!IS_ERR(f6i)) {
4484 f6i->dst_nocount = true;
4489 f6i->dst_nopolicy = true;
4492 return f6i;
4818 struct fib6_info *f6i;
4824 struct fib6_info *f6i = arg->f6i;
4833 u32 mtu = f6i->fib6_pmtu;
4837 fib6_metric_set(f6i, RTAX_MTU, arg->mtu);
4847 static int rt6_mtu_change_route(struct fib6_info *f6i, void *p_arg)
4862 if (fib6_metric_locked(f6i, RTAX_MTU))
4865 arg->f6i = f6i;
4866 if (f6i->nh) {
4868 return nexthop_for_each_fib6_nh(f6i->nh, fib6_nh_mtu_change,
4872 return fib6_nh_mtu_change(f6i->fib6_nh, arg);
5432 static size_t rt6_nlmsg_size(struct fib6_info *f6i)
5436 if (f6i->nh) {
5438 nexthop_for_each_fib6_nh(f6i->nh, rt6_nh_nlmsg_size,
5442 struct fib6_nh *nh = f6i->fib6_nh;
5445 if (f6i->fib6_nsiblings) {
5449 &f6i->fib6_siblings, fib6_siblings) {
5689 static bool fib6_info_uses_dev(const struct fib6_info *f6i,
5692 if (f6i->nh) {
5695 return !!nexthop_for_each_fib6_nh(f6i->nh,
5700 if (f6i->fib6_nh->fib_nh_dev == dev)
5703 if (f6i->fib6_nsiblings) {
5707 &f6i->fib6_siblings, fib6_siblings) {