Lines Matching refs:nhi
48 static void nexthop_devhash_add(struct net *net, struct nh_info *nhi) in nexthop_devhash_add() argument
50 struct net_device *dev = nhi->fib_nhc.nhc_dev; in nexthop_devhash_add()
58 hlist_add_head(&nhi->dev_hash, head); in nexthop_devhash_add()
75 struct nh_info *nhi; in nexthop_free_single() local
77 nhi = rcu_dereference_raw(nh->nh_info); in nexthop_free_single()
78 switch (nhi->family) { in nexthop_free_single()
80 fib_nh_release(nh->net, &nhi->fib_nh); in nexthop_free_single()
83 ipv6_stub->fib6_nh_release(&nhi->fib6_nh); in nexthop_free_single()
86 kfree(nhi); in nexthop_free_single()
214 struct nh_info *nhi; in nh_fill_node() local
239 nhi = rtnl_dereference(nh->nh_info); in nh_fill_node()
240 nhm->nh_family = nhi->family; in nh_fill_node()
241 if (nhi->reject_nh) { in nh_fill_node()
248 dev = nhi->fib_nhc.nhc_dev; in nh_fill_node()
253 nhm->nh_scope = nhi->fib_nhc.nhc_scope; in nh_fill_node()
254 switch (nhi->family) { in nh_fill_node()
256 fib_nh = &nhi->fib_nh; in nh_fill_node()
263 fib6_nh = &nhi->fib6_nh; in nh_fill_node()
270 if (nhi->fib_nhc.nhc_lwtstate && in nh_fill_node()
271 lwtunnel_fill_encap(skb, nhi->fib_nhc.nhc_lwtstate, in nh_fill_node()
294 struct nh_info *nhi = rtnl_dereference(nh->nh_info); in nh_nlmsg_size_single() local
302 switch (nhi->family) { in nh_nlmsg_size_single()
304 if (nhi->fib_nh.fib_nh_gw_family) in nh_nlmsg_size_single()
310 if (nhi->fib6_nh.fib_nh_gw_family) in nh_nlmsg_size_single()
315 if (nhi->fib_nhc.nhc_lwtstate) { in nh_nlmsg_size_single()
316 sz += lwtunnel_get_encap_size(nhi->fib_nhc.nhc_lwtstate); in nh_nlmsg_size_single()
377 struct nh_info *nhi = rtnl_dereference(nh->nh_info); in valid_group_nh() local
379 if (nhi->reject_nh && npaths > 1) { in valid_group_nh()
492 struct nh_info *nhi; in nexthop_select_path() local
500 nhi = rcu_dereference(nhge->nh->nh_info); in nexthop_select_path()
501 switch (nhi->family) { in nexthop_select_path()
503 if (ipv4_good_nh(&nhi->fib_nh)) in nexthop_select_path()
507 if (ipv6_good_nh(&nhi->fib6_nh)) in nexthop_select_path()
524 struct nh_info *nhi; in nexthop_for_each_fib6_nh() local
535 nhi = rcu_dereference_rtnl(nhge->nh->nh_info); in nexthop_for_each_fib6_nh()
536 err = cb(&nhi->fib6_nh, arg); in nexthop_for_each_fib6_nh()
541 nhi = rcu_dereference_rtnl(nh->nh_info); in nexthop_for_each_fib6_nh()
542 err = cb(&nhi->fib6_nh, arg); in nexthop_for_each_fib6_nh()
564 struct nh_info *nhi; in fib6_check_nexthop() local
582 nhi = rtnl_dereference(nh->nh_info); in fib6_check_nexthop()
583 if (nhi->family == AF_INET) in fib6_check_nexthop()
616 struct nh_info *nhi; in nexthop_check_scope() local
618 nhi = rtnl_dereference(nh->nh_info); in nexthop_check_scope()
619 if (scope == RT_SCOPE_HOST && nhi->fib_nhc.nhc_gw_family) { in nexthop_check_scope()
625 if (nhi->fib_nhc.nhc_flags & RTNH_F_ONLINK && scope >= RT_SCOPE_LINK) { in nexthop_check_scope()
798 struct nh_info *nhi; in __remove_nexthop() local
800 nhi = rtnl_dereference(nh->nh_info); in __remove_nexthop()
801 if (nhi->fib_nhc.nhc_dev) in __remove_nexthop()
802 hlist_del(&nhi->dev_hash); in __remove_nexthop()
951 struct nh_info *nhi = rtnl_dereference(new->nh_info); in replace_nexthop() local
953 new_is_reject = nhi->reject_nh; in replace_nexthop()
1058 struct nh_info *nhi; in nexthop_flush_dev() local
1060 hlist_for_each_entry_safe(nhi, n, head, dev_hash) { in nexthop_flush_dev()
1061 if (nhi->fib_nhc.nhc_dev != dev) in nexthop_flush_dev()
1064 remove_nexthop(net, nhi->nh_parent, NULL); in nexthop_flush_dev()
1105 struct nh_info *nhi; in nexthop_create_group() local
1111 nhi = rtnl_dereference(nhe->nh_info); in nexthop_create_group()
1112 if (nhi->family == AF_INET) in nexthop_create_group()
1141 struct nh_info *nhi, struct nh_config *cfg, in nh_create_ipv4() argument
1144 struct fib_nh *fib_nh = &nhi->fib_nh; in nh_create_ipv4()
1176 struct nh_info *nhi, struct nh_config *cfg, in nh_create_ipv6() argument
1179 struct fib6_nh *fib6_nh = &nhi->fib6_nh; in nh_create_ipv6()
1207 struct nh_info *nhi; in nexthop_create() local
1215 nhi = kzalloc(sizeof(*nhi), GFP_KERNEL); in nexthop_create()
1216 if (!nhi) { in nexthop_create()
1224 nhi->nh_parent = nh; in nexthop_create()
1225 nhi->family = cfg->nh_family; in nexthop_create()
1226 nhi->fib_nhc.nhc_scope = RT_SCOPE_LINK; in nexthop_create()
1229 nhi->reject_nh = 1; in nexthop_create()
1235 err = nh_create_ipv4(net, nh, nhi, cfg, extack); in nexthop_create()
1238 err = nh_create_ipv6(net, nh, nhi, cfg, extack); in nexthop_create()
1243 kfree(nhi); in nexthop_create()
1249 nexthop_devhash_add(net, nhi); in nexthop_create()
1251 rcu_assign_pointer(nh->nh_info, nhi); in nexthop_create()
1599 const struct nh_info *nhi; in nh_dump_filtered() local
1610 nhi = rtnl_dereference(nh->nh_info); in nh_dump_filtered()
1611 if (family && nhi->family != family) in nh_dump_filtered()
1614 dev = nhi->fib_nhc.nhc_dev; in nh_dump_filtered()
1744 struct nh_info *nhi; in nexthop_sync_mtu() local
1746 hlist_for_each_entry_safe(nhi, n, head, dev_hash) { in nexthop_sync_mtu()
1747 if (nhi->fib_nhc.nhc_dev == dev) { in nexthop_sync_mtu()
1748 if (nhi->family == AF_INET) in nexthop_sync_mtu()
1749 fib_nhc_update_mtu(&nhi->fib_nhc, dev->mtu, in nexthop_sync_mtu()