Lines Matching refs:nh

64 	int nhsel; const struct fib_nh *nh;				\
65 for (nhsel = 0, nh = (fi)->fib_nh; \
67 nh++, nhsel++)
80 int nhsel; const struct fib_nh *nh = (fi)->fib_nh; \
160 static void free_nh_exceptions(struct fib_nh *nh) in free_nh_exceptions() argument
165 hash = rcu_dereference_protected(nh->nh_exceptions, 1); in free_nh_exceptions()
268 if (nh->nh_oif != onh->nh_oif || in nh_comp()
269 nh->nh_gw != onh->nh_gw || in nh_comp()
270 nh->nh_scope != onh->nh_scope || in nh_comp()
272 nh->nh_weight != onh->nh_weight || in nh_comp()
275 nh->nh_tclassid != onh->nh_tclassid || in nh_comp()
277 lwtunnel_cmp_encap(nh->nh_lwtstate, onh->nh_lwtstate) || in nh_comp()
278 ((nh->nh_flags ^ onh->nh_flags) & ~RTNH_COMPARE_MASK)) in nh_comp()
303 val ^= fib_devindex_hashfn(nh->nh_oif); in fib_info_hashfn()
344 struct fib_nh *nh; in ip_fib_check_default() local
351 hlist_for_each_entry(nh, head, nh_hash) { in ip_fib_check_default()
352 if (nh->nh_dev == dev && in ip_fib_check_default()
353 nh->nh_gw == gw && in ip_fib_check_default()
354 !(nh->nh_flags & RTNH_F_DEAD)) { in ip_fib_check_default()
389 if (nh->nh_lwtstate) { in fib_nlmsg_size()
392 nh->nh_lwtstate); in fib_nlmsg_size()
570 if (nh->nh_flags & RTNH_F_DEAD) in fib_rebalance()
573 in_dev = __in_dev_get_rtnl(nh->nh_dev); in fib_rebalance()
577 nh->nh_flags & RTNH_F_LINKDOWN) in fib_rebalance()
580 total += nh->nh_weight; in fib_rebalance()
612 const struct fib_nh *nh, in fib_encap_match() argument
625 result = lwtunnel_cmp_encap(lwtstate, nh->nh_lwtstate); in fib_encap_match()
673 if (rtnh->rtnh_ifindex && rtnh->rtnh_ifindex != nh->nh_oif) in fib_nh_match()
681 if (nla && nla_get_in_addr(nla) != nh->nh_gw) in fib_nh_match()
685 if (nla && nla_get_u32(nla) != nh->nh_tclassid) in fib_nh_match()
780 static int fib_check_nh(struct fib_config *cfg, struct fib_nh *nh, in fib_check_nh() argument
788 if (nh->nh_gw) { in fib_check_nh()
791 if (nh->nh_flags & RTNH_F_ONLINK) { in fib_check_nh()
799 dev = __dev_get_by_index(net, nh->nh_oif); in fib_check_nh()
807 addr_type = inet_addr_type_dev_table(net, dev, nh->nh_gw); in fib_check_nh()
814 nh->nh_flags |= RTNH_F_LINKDOWN; in fib_check_nh()
815 nh->nh_dev = dev; in fib_check_nh()
817 nh->nh_scope = RT_SCOPE_LINK; in fib_check_nh()
824 .daddr = nh->nh_gw, in fib_check_nh()
826 .flowi4_oif = nh->nh_oif, in fib_check_nh()
863 nh->nh_scope = res.scope; in fib_check_nh()
864 nh->nh_oif = FIB_RES_OIF(res); in fib_check_nh()
865 nh->nh_dev = dev = FIB_RES_DEV(res); in fib_check_nh()
873 nh->nh_flags |= RTNH_F_LINKDOWN; in fib_check_nh()
878 if (nh->nh_flags & (RTNH_F_PERVASIVE | RTNH_F_ONLINK)) { in fib_check_nh()
885 in_dev = inetdev_by_index(net, nh->nh_oif); in fib_check_nh()
893 nh->nh_dev = in_dev->dev; in fib_check_nh()
894 dev_hold(nh->nh_dev); in fib_check_nh()
895 nh->nh_scope = RT_SCOPE_HOST; in fib_check_nh()
896 if (!netif_carrier_ok(nh->nh_dev)) in fib_check_nh()
897 nh->nh_flags |= RTNH_F_LINKDOWN; in fib_check_nh()
987 __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh) in fib_info_update_nh_saddr() argument
989 nh->nh_saddr = inet_select_addr(nh->nh_dev, in fib_info_update_nh_saddr()
990 nh->nh_gw, in fib_info_update_nh_saddr()
991 nh->nh_parent->fib_scope); in fib_info_update_nh_saddr()
992 nh->nh_saddr_genid = atomic_read(&net->ipv4.dev_addr_genid); in fib_info_update_nh_saddr()
994 return nh->nh_saddr; in fib_info_update_nh_saddr()
1145 struct fib_nh *nh = fi->fib_nh; in fib_create_info() local
1161 nh->nh_lwtstate = lwtstate_get(lwtstate); in fib_create_info()
1163 nh->nh_oif = cfg->fc_oif; in fib_create_info()
1164 nh->nh_gw = cfg->fc_gw; in fib_create_info()
1165 nh->nh_flags = cfg->fc_flags; in fib_create_info()
1167 nh->nh_tclassid = cfg->fc_flow; in fib_create_info()
1168 if (nh->nh_tclassid) in fib_create_info()
1172 nh->nh_weight = 1; in fib_create_info()
1203 struct fib_nh *nh = fi->fib_nh; in fib_create_info() local
1211 if (nh->nh_gw) { in fib_create_info()
1216 nh->nh_scope = RT_SCOPE_NOWHERE; in fib_create_info()
1217 nh->nh_dev = dev_get_by_index(net, fi->fib_nh->nh_oif); in fib_create_info()
1219 if (!nh->nh_dev) in fib_create_info()
1372 rtnh->rtnh_flags = nh->nh_flags & 0xFF; in fib_dump_info()
1373 if (nh->nh_flags & RTNH_F_LINKDOWN) { in fib_dump_info()
1377 in_dev = __in_dev_get_rcu(nh->nh_dev); in fib_dump_info()
1383 rtnh->rtnh_hops = nh->nh_weight - 1; in fib_dump_info()
1384 rtnh->rtnh_ifindex = nh->nh_oif; in fib_dump_info()
1386 if (nh->nh_gw && in fib_dump_info()
1387 nla_put_in_addr(skb, RTA_GATEWAY, nh->nh_gw)) in fib_dump_info()
1390 if (nh->nh_tclassid && in fib_dump_info()
1391 nla_put_u32(skb, RTA_FLOW, nh->nh_tclassid)) in fib_dump_info()
1394 if (nh->nh_lwtstate && in fib_dump_info()
1395 lwtunnel_fill_encap(skb, nh->nh_lwtstate) < 0) in fib_dump_info()
1483 static void nh_update_mtu(struct fib_nh *nh, u32 new, u32 orig) in nh_update_mtu() argument
1488 bucket = rcu_dereference_protected(nh->nh_exceptions, 1); in nh_update_mtu()
1515 struct fib_nh *nh; in fib_sync_mtu() local
1517 hlist_for_each_entry(nh, head, nh_hash) { in fib_sync_mtu()
1518 if (nh->nh_dev == dev) in fib_sync_mtu()
1519 nh_update_mtu(nh, dev->mtu, orig_mtu); in fib_sync_mtu()
1536 struct fib_nh *nh; in fib_sync_down_dev() local
1541 hlist_for_each_entry(nh, head, nh_hash) { in fib_sync_down_dev()
1542 struct fib_info *fi = nh->nh_parent; in fib_sync_down_dev()
1546 if (nh->nh_dev != dev || fi == prev_fi) in fib_sync_down_dev()
1679 struct fib_nh *nh; in fib_sync_up() local
1697 hlist_for_each_entry(nh, head, nh_hash) { in fib_sync_up()
1698 struct fib_info *fi = nh->nh_parent; in fib_sync_up()
1702 if (nh->nh_dev != dev || fi == prev_fi) in fib_sync_up()
1735 static bool fib_good_nh(const struct fib_nh *nh) in fib_good_nh() argument
1739 if (nh->nh_scope == RT_SCOPE_LINK) { in fib_good_nh()
1744 n = __ipv4_neigh_lookup_noref(nh->nh_dev, in fib_good_nh()
1745 (__force u32)nh->nh_gw); in fib_good_nh()
1763 if (!fib_good_nh(nh)) in fib_select_multipath()
1771 if (hash > atomic_read(&nh->nh_upper_bound)) in fib_select_multipath()