Lines Matching defs:nhi

86 			       const struct nh_info *nhi)
88 nh_info->dev = nhi->fib_nhc.nhc_dev;
89 nh_info->gw_family = nhi->fib_nhc.nhc_gw_family;
91 nh_info->ipv4 = nhi->fib_nhc.nhc_gw.ipv4;
93 nh_info->ipv6 = nhi->fib_nhc.nhc_gw.ipv6;
95 nh_info->is_reject = nhi->reject_nh;
96 nh_info->is_fdb = nhi->fdb_nh;
97 nh_info->has_encap = !!nhi->fib_nhc.nhc_lwtstate;
103 struct nh_info *nhi = rtnl_dereference(nh->nh_info);
110 __nh_notifier_single_info_init(info->nh, nhi);
137 struct nh_info *nhi;
139 nhi = rtnl_dereference(nhge->nh->nh_info);
143 nhi);
169 struct nh_info *nhi;
172 nhi = rtnl_dereference(nhge->nh->nh_info);
174 nhi);
454 static void nexthop_devhash_add(struct net *net, struct nh_info *nhi)
456 struct net_device *dev = nhi->fib_nhc.nhc_dev;
464 hlist_add_head(&nhi->dev_hash, head);
491 struct nh_info *nhi;
493 nhi = rcu_dereference_raw(nh->nh_info);
494 switch (nhi->family) {
496 fib_nh_release(nh->net, &nhi->fib_nh);
499 ipv6_stub->fib6_nh_release(&nhi->fib6_nh);
502 kfree(nhi);
699 struct nh_info *nhi;
726 nhi = rtnl_dereference(nh->nh_info);
727 nhm->nh_family = nhi->family;
728 if (nhi->reject_nh) {
732 } else if (nhi->fdb_nh) {
738 dev = nhi->fib_nhc.nhc_dev;
743 nhm->nh_scope = nhi->fib_nhc.nhc_scope;
744 switch (nhi->family) {
746 fib_nh = &nhi->fib_nh;
753 fib6_nh = &nhi->fib6_nh;
760 if (nhi->fib_nhc.nhc_lwtstate &&
761 lwtunnel_fill_encap(skb, nhi->fib_nhc.nhc_lwtstate,
798 struct nh_info *nhi = rtnl_dereference(nh->nh_info);
806 switch (nhi->family) {
808 if (nhi->fib_nh.fib_nh_gw_family)
814 if (nhi->fib6_nh.fib_nh_gw_family)
819 if (nhi->fib_nhc.nhc_lwtstate) {
820 sz += lwtunnel_get_encap_size(nhi->fib_nhc.nhc_lwtstate);
1008 struct nh_info *nhi = rtnl_dereference(nh->nh_info);
1010 if (nhi->reject_nh && npaths > 1) {
1015 *is_fdb = nhi->fdb_nh;
1024 struct nh_info *nhi;
1026 nhi = rtnl_dereference(nh->nh_info);
1028 if (!nhi->fdb_nh) {
1034 *nh_family = nhi->family;
1035 } else if (*nh_family != nhi->family) {
1157 struct nh_info *nhi = rcu_dereference(nh->nh_info);
1159 switch (nhi->family) {
1161 return ipv4_good_nh(&nhi->fib_nh);
1163 return ipv6_good_nh(&nhi->fib6_nh);
1253 struct nh_info *nhi;
1264 nhi = rcu_dereference_rtnl(nhge->nh->nh_info);
1265 err = cb(&nhi->fib6_nh, arg);
1270 nhi = rcu_dereference_rtnl(nh->nh_info);
1271 err = cb(&nhi->fib6_nh, arg);
1293 struct nh_info *nhi;
1313 nhi = rtnl_dereference(nh->nh_info);
1314 if (nhi->family == AF_INET)
1316 is_fdb_nh = nhi->fdb_nh;
1350 static int nexthop_check_scope(struct nh_info *nhi, u8 scope,
1353 if (scope == RT_SCOPE_HOST && nhi->fib_nhc.nhc_gw_family) {
1359 if (nhi->fib_nhc.nhc_flags & RTNH_F_ONLINK && scope >= RT_SCOPE_LINK) {
1374 struct nh_info *nhi;
1394 nhi = rtnl_dereference(nhg->nh_entries[0].nh->nh_info);
1395 err = nexthop_check_scope(nhi, scope, extack);
1397 nhi = rtnl_dereference(nh->nh_info);
1398 if (nhi->fdb_nh) {
1403 err = nexthop_check_scope(nhi, scope, extack);
1788 struct nh_info *nhi;
1796 nhi = rtnl_dereference(nhges[i].nh->nh_info);
1797 if (nhi->family == AF_INET)
1896 struct nh_info *nhi;
1898 nhi = rtnl_dereference(nh->nh_info);
1899 if (nhi->fib_nhc.nhc_dev)
1900 hlist_del(&nhi->dev_hash);
1948 struct nh_info *nhi = rtnl_dereference(nhge->nh->nh_info);
1950 if (nhi->family == AF_INET6)
1951 ipv6_stub->fib6_nh_release_dsts(&nhi->fib6_nh);
2050 struct nh_info *nhi;
2052 nhi = rtnl_dereference(nhges[i].nh->nh_info);
2053 if (nhi->family == AF_INET)
2263 struct nh_info *nhi = rtnl_dereference(new->nh_info);
2265 new_is_reject = nhi->reject_nh;
2403 struct nh_info *nhi;
2405 hlist_for_each_entry_safe(nhi, n, head, dev_hash) {
2406 if (nhi->fib_nhc.nhc_dev != dev)
2409 if (nhi->reject_nh &&
2413 remove_nexthop(net, nhi->nh_parent, NULL);
2468 struct nh_info *nhi;
2476 nhi = rtnl_dereference(nhe->nh_info);
2477 if (nhi->family == AF_INET)
2530 struct nh_info *nhi, struct nh_config *cfg,
2533 struct fib_nh *fib_nh = &nhi->fib_nh;
2552 if (nhi->fdb_nh)
2569 struct nh_info *nhi, struct nh_config *cfg,
2572 struct fib6_nh *fib6_nh = &nhi->fib6_nh;
2606 struct nh_info *nhi;
2614 nhi = kzalloc(sizeof(*nhi), GFP_KERNEL);
2615 if (!nhi) {
2623 nhi->nh_parent = nh;
2624 nhi->family = cfg->nh_family;
2625 nhi->fib_nhc.nhc_scope = RT_SCOPE_LINK;
2628 nhi->fdb_nh = 1;
2631 nhi->reject_nh = 1;
2637 err = nh_create_ipv4(net, nh, nhi, cfg, extack);
2640 err = nh_create_ipv6(net, nh, nhi, cfg, extack);
2645 kfree(nhi);
2651 if (!nhi->fdb_nh)
2652 nexthop_devhash_add(net, nhi);
2654 rcu_assign_pointer(nh->nh_info, nhi);
3088 const struct nh_info *nhi;
3099 nhi = rtnl_dereference(nh->nh_info);
3100 if (family && nhi->family != family)
3103 dev = nhi->fib_nhc.nhc_dev;
3557 struct nh_info *nhi;
3559 hlist_for_each_entry_safe(nhi, n, head, dev_hash) {
3560 if (nhi->fib_nhc.nhc_dev == dev) {
3561 if (nhi->family == AF_INET)
3562 fib_nhc_update_mtu(&nhi->fib_nhc, dev->mtu,