Lines Matching refs:nh
63 int nhsel; const struct fib_nh *nh; \
64 for (nhsel = 0, nh = (fi)->fib_nh; \
66 nh++, nhsel++)
79 int nhsel; const struct fib_nh *nh = (fi)->fib_nh; \
158 static void free_nh_exceptions(struct fib_nh *nh) in free_nh_exceptions() argument
163 hash = rcu_dereference_protected(nh->nh_exceptions, 1); in free_nh_exceptions()
261 if (nh->nh_oif != onh->nh_oif || in nh_comp()
262 nh->nh_gw != onh->nh_gw || in nh_comp()
263 nh->nh_scope != onh->nh_scope || in nh_comp()
265 nh->nh_weight != onh->nh_weight || in nh_comp()
268 nh->nh_tclassid != onh->nh_tclassid || in nh_comp()
270 lwtunnel_cmp_encap(nh->nh_lwtstate, onh->nh_lwtstate) || in nh_comp()
271 ((nh->nh_flags ^ onh->nh_flags) & ~RTNH_COMPARE_MASK)) in nh_comp()
296 val ^= fib_devindex_hashfn(nh->nh_oif); in fib_info_hashfn()
337 struct fib_nh *nh; in ip_fib_check_default() local
344 hlist_for_each_entry(nh, head, nh_hash) { in ip_fib_check_default()
345 if (nh->nh_dev == dev && in ip_fib_check_default()
346 nh->nh_gw == gw && in ip_fib_check_default()
347 !(nh->nh_flags & RTNH_F_DEAD)) { in ip_fib_check_default()
382 if (nh->nh_lwtstate) { in fib_nlmsg_size()
385 nh->nh_lwtstate); in fib_nlmsg_size()
545 if (nh->nh_flags & RTNH_F_DEAD) in fib_rebalance()
548 in_dev = __in_dev_get_rtnl(nh->nh_dev); in fib_rebalance()
552 nh->nh_flags & RTNH_F_LINKDOWN) in fib_rebalance()
555 total += nh->nh_weight; in fib_rebalance()
584 const struct fib_nh *nh) in fib_add_weight() argument
586 fi->fib_weight += nh->nh_weight; in fib_add_weight()
592 #define fib_add_weight(fi, nh) do { } while (0) argument
598 int oif, const struct fib_nh *nh, in fib_encap_match() argument
613 result = lwtunnel_cmp_encap(lwtstate, nh->nh_lwtstate); in fib_encap_match()
657 if (rtnh->rtnh_ifindex && rtnh->rtnh_ifindex != nh->nh_oif) in fib_nh_match()
665 if (nla && nla_get_in_addr(nla) != nh->nh_gw) in fib_nh_match()
669 if (nla && nla_get_u32(nla) != nh->nh_tclassid) in fib_nh_match()
725 struct fib_nh *nh) in fib_check_nh() argument
732 if (nh->nh_gw) { in fib_check_nh()
735 if (nh->nh_flags & RTNH_F_ONLINK) { in fib_check_nh()
740 dev = __dev_get_by_index(net, nh->nh_oif); in fib_check_nh()
745 addr_type = inet_addr_type_dev_table(net, dev, nh->nh_gw); in fib_check_nh()
749 nh->nh_flags |= RTNH_F_LINKDOWN; in fib_check_nh()
750 nh->nh_dev = dev; in fib_check_nh()
752 nh->nh_scope = RT_SCOPE_LINK; in fib_check_nh()
759 .daddr = nh->nh_gw, in fib_check_nh()
761 .flowi4_oif = nh->nh_oif, in fib_check_nh()
794 nh->nh_scope = res.scope; in fib_check_nh()
795 nh->nh_oif = FIB_RES_OIF(res); in fib_check_nh()
796 nh->nh_dev = dev = FIB_RES_DEV(res); in fib_check_nh()
801 nh->nh_flags |= RTNH_F_LINKDOWN; in fib_check_nh()
806 if (nh->nh_flags & (RTNH_F_PERVASIVE | RTNH_F_ONLINK)) in fib_check_nh()
811 in_dev = inetdev_by_index(net, nh->nh_oif); in fib_check_nh()
817 nh->nh_dev = in_dev->dev; in fib_check_nh()
818 dev_hold(nh->nh_dev); in fib_check_nh()
819 nh->nh_scope = RT_SCOPE_HOST; in fib_check_nh()
820 if (!netif_carrier_ok(nh->nh_dev)) in fib_check_nh()
821 nh->nh_flags |= RTNH_F_LINKDOWN; in fib_check_nh()
911 __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh) in fib_info_update_nh_saddr() argument
913 nh->nh_saddr = inet_select_addr(nh->nh_dev, in fib_info_update_nh_saddr()
914 nh->nh_gw, in fib_info_update_nh_saddr()
915 nh->nh_parent->fib_scope); in fib_info_update_nh_saddr()
916 nh->nh_saddr_genid = atomic_read(&net->ipv4.dev_addr_genid); in fib_info_update_nh_saddr()
918 return nh->nh_saddr; in fib_info_update_nh_saddr()
1084 struct fib_nh *nh = fi->fib_nh; in fib_create_info() local
1100 nh->nh_lwtstate = lwtstate_get(lwtstate); in fib_create_info()
1102 nh->nh_oif = cfg->fc_oif; in fib_create_info()
1103 nh->nh_gw = cfg->fc_gw; in fib_create_info()
1104 nh->nh_flags = cfg->fc_flags; in fib_create_info()
1106 nh->nh_tclassid = cfg->fc_flow; in fib_create_info()
1107 if (nh->nh_tclassid) in fib_create_info()
1111 nh->nh_weight = 1; in fib_create_info()
1136 struct fib_nh *nh = fi->fib_nh; in fib_create_info() local
1139 if (nhs != 1 || nh->nh_gw) in fib_create_info()
1141 nh->nh_scope = RT_SCOPE_NOWHERE; in fib_create_info()
1142 nh->nh_dev = dev_get_by_index(net, fi->fib_nh->nh_oif); in fib_create_info()
1144 if (!nh->nh_dev) in fib_create_info()
1293 rtnh->rtnh_flags = nh->nh_flags & 0xFF; in fib_dump_info()
1294 if (nh->nh_flags & RTNH_F_LINKDOWN) { in fib_dump_info()
1295 in_dev = __in_dev_get_rtnl(nh->nh_dev); in fib_dump_info()
1300 rtnh->rtnh_hops = nh->nh_weight - 1; in fib_dump_info()
1301 rtnh->rtnh_ifindex = nh->nh_oif; in fib_dump_info()
1303 if (nh->nh_gw && in fib_dump_info()
1304 nla_put_in_addr(skb, RTA_GATEWAY, nh->nh_gw)) in fib_dump_info()
1307 if (nh->nh_tclassid && in fib_dump_info()
1308 nla_put_u32(skb, RTA_FLOW, nh->nh_tclassid)) in fib_dump_info()
1311 if (nh->nh_lwtstate) in fib_dump_info()
1312 lwtunnel_fill_encap(skb, nh->nh_lwtstate); in fib_dump_info()
1368 struct fib_nh *nh; in fib_sync_down_dev() local
1373 hlist_for_each_entry(nh, head, nh_hash) { in fib_sync_down_dev()
1374 struct fib_info *fi = nh->nh_parent; in fib_sync_down_dev()
1378 if (nh->nh_dev != dev || fi == prev_fi) in fib_sync_down_dev()
1509 struct fib_nh *nh; in fib_sync_up() local
1527 hlist_for_each_entry(nh, head, nh_hash) { in fib_sync_up()
1528 struct fib_info *fi = nh->nh_parent; in fib_sync_up()
1532 if (nh->nh_dev != dev || fi == prev_fi) in fib_sync_up()
1570 if (hash > atomic_read(&nh->nh_upper_bound)) in fib_select_multipath()