Lines Matching defs:nhi
59 static void nexthop_devhash_add(struct net *net, struct nh_info *nhi)
61 struct net_device *dev = nhi->fib_nhc.nhc_dev;
69 hlist_add_head(&nhi->dev_hash, head);
93 struct nh_info *nhi;
95 nhi = rcu_dereference_raw(nh->nh_info);
96 switch (nhi->family) {
98 fib_nh_release(nh->net, &nhi->fib_nh);
101 ipv6_stub->fib6_nh_release(&nhi->fib6_nh);
104 kfree(nhi);
231 struct nh_info *nhi;
258 nhi = rtnl_dereference(nh->nh_info);
259 nhm->nh_family = nhi->family;
260 if (nhi->reject_nh) {
264 } else if (nhi->fdb_nh) {
270 dev = nhi->fib_nhc.nhc_dev;
275 nhm->nh_scope = nhi->fib_nhc.nhc_scope;
276 switch (nhi->family) {
278 fib_nh = &nhi->fib_nh;
285 fib6_nh = &nhi->fib6_nh;
292 if (nhi->fib_nhc.nhc_lwtstate &&
293 lwtunnel_fill_encap(skb, nhi->fib_nhc.nhc_lwtstate,
317 struct nh_info *nhi = rtnl_dereference(nh->nh_info);
325 switch (nhi->family) {
327 if (nhi->fib_nh.fib_nh_gw_family)
333 if (nhi->fib6_nh.fib_nh_gw_family)
338 if (nhi->fib_nhc.nhc_lwtstate) {
339 sz += lwtunnel_get_encap_size(nhi->fib_nhc.nhc_lwtstate);
403 struct nh_info *nhi = rtnl_dereference(nh->nh_info);
405 if (nhi->reject_nh && npaths > 1) {
410 *is_fdb = nhi->fdb_nh;
419 struct nh_info *nhi;
421 nhi = rtnl_dereference(nh->nh_info);
423 if (!nhi->fdb_nh) {
429 *nh_family = nhi->family;
430 } else if (*nh_family != nhi->family) {
555 struct nh_info *nhi;
560 nhi = rcu_dereference(nhge->nh->nh_info);
561 if (nhi->fdb_nh)
567 switch (nhi->family) {
569 if (ipv4_good_nh(&nhi->fib_nh))
573 if (ipv6_good_nh(&nhi->fib6_nh))
590 struct nh_info *nhi;
601 nhi = rcu_dereference_rtnl(nhge->nh->nh_info);
602 err = cb(&nhi->fib6_nh, arg);
607 nhi = rcu_dereference_rtnl(nh->nh_info);
608 err = cb(&nhi->fib6_nh, arg);
630 struct nh_info *nhi;
650 nhi = rtnl_dereference(nh->nh_info);
651 if (nhi->family == AF_INET)
653 is_fdb_nh = nhi->fdb_nh;
687 static int nexthop_check_scope(struct nh_info *nhi, u8 scope,
690 if (scope == RT_SCOPE_HOST && nhi->fib_nhc.nhc_gw_family) {
696 if (nhi->fib_nhc.nhc_flags & RTNH_F_ONLINK && scope >= RT_SCOPE_LINK) {
711 struct nh_info *nhi;
731 nhi = rtnl_dereference(nhg->nh_entries[0].nh->nh_info);
732 err = nexthop_check_scope(nhi, scope, extack);
734 nhi = rtnl_dereference(nh->nh_info);
735 if (nhi->fdb_nh) {
740 err = nexthop_check_scope(nhi, scope, extack);
810 struct nh_info *nhi;
818 nhi = rtnl_dereference(nhges[i].nh->nh_info);
819 if (nhi->family == AF_INET)
898 struct nh_info *nhi;
900 nhi = rtnl_dereference(nh->nh_info);
901 if (nhi->fib_nhc.nhc_dev)
902 hlist_del(&nhi->dev_hash);
953 struct nh_info *nhi = rtnl_dereference(nhge->nh->nh_info);
955 if (nhi->family == AF_INET6)
956 ipv6_stub->fib6_nh_release_dsts(&nhi->fib6_nh);
997 struct nh_info *nhi;
999 nhi = rtnl_dereference(nhges[i].nh->nh_info);
1000 if (nhi->family == AF_INET)
1106 struct nh_info *nhi = rtnl_dereference(new->nh_info);
1108 new_is_reject = nhi->reject_nh;
1214 struct nh_info *nhi;
1216 hlist_for_each_entry_safe(nhi, n, head, dev_hash) {
1217 if (nhi->fib_nhc.nhc_dev != dev)
1220 if (nhi->reject_nh &&
1224 remove_nexthop(net, nhi->nh_parent, NULL);
1278 struct nh_info *nhi;
1284 nhi = rtnl_dereference(nhe->nh_info);
1285 if (nhi->family == AF_INET)
1320 struct nh_info *nhi, struct nh_config *cfg,
1323 struct fib_nh *fib_nh = &nhi->fib_nh;
1342 if (nhi->fdb_nh)
1359 struct nh_info *nhi, struct nh_config *cfg,
1362 struct fib6_nh *fib6_nh = &nhi->fib6_nh;
1396 struct nh_info *nhi;
1404 nhi = kzalloc(sizeof(*nhi), GFP_KERNEL);
1405 if (!nhi) {
1413 nhi->nh_parent = nh;
1414 nhi->family = cfg->nh_family;
1415 nhi->fib_nhc.nhc_scope = RT_SCOPE_LINK;
1418 nhi->fdb_nh = 1;
1421 nhi->reject_nh = 1;
1427 err = nh_create_ipv4(net, nh, nhi, cfg, extack);
1430 err = nh_create_ipv6(net, nh, nhi, cfg, extack);
1435 kfree(nhi);
1441 if (!nhi->fdb_nh)
1442 nexthop_devhash_add(net, nhi);
1444 rcu_assign_pointer(nh->nh_info, nhi);
1807 const struct nh_info *nhi;
1818 nhi = rtnl_dereference(nh->nh_info);
1819 if (family && nhi->family != family)
1822 dev = nhi->fib_nhc.nhc_dev;
1955 struct nh_info *nhi;
1957 hlist_for_each_entry_safe(nhi, n, head, dev_hash) {
1958 if (nhi->fib_nhc.nhc_dev == dev) {
1959 if (nhi->family == AF_INET)
1960 fib_nhc_update_mtu(&nhi->fib_nhc, dev->mtu,