Lines Matching refs:cfg
376 const struct fib_config *cfg) in fib_find_info_nh() argument
382 hash = fib_info_hashfn_1(fib_devindex_hashfn(cfg->fc_nh_id), in fib_find_info_nh()
383 cfg->fc_protocol, cfg->fc_scope, in fib_find_info_nh()
384 (__force u32)cfg->fc_prefsrc, in fib_find_info_nh()
385 cfg->fc_priority); in fib_find_info_nh()
392 if (!fi->nh || fi->nh->id != cfg->fc_nh_id) in fib_find_info_nh()
394 if (cfg->fc_protocol == fi->fib_protocol && in fib_find_info_nh()
395 cfg->fc_scope == fi->fib_scope && in fib_find_info_nh()
396 cfg->fc_prefsrc == fi->fib_prefsrc && in fib_find_info_nh()
397 cfg->fc_priority == fi->fib_priority && in fib_find_info_nh()
398 cfg->fc_type == fi->fib_type && in fib_find_info_nh()
399 cfg->fc_table == fi->fib_tb_id && in fib_find_info_nh()
400 !((cfg->fc_flags ^ fi->fib_flags) & ~RTNH_COMPARE_MASK)) in fib_find_info_nh()
583 void *cfg, gfp_t gfp_flags, in fib_nh_common_init() argument
602 nhc->nhc_family, cfg, &lwtstate, in fib_nh_common_init()
620 struct fib_config *cfg, int nh_weight, in fib_nh_init() argument
627 err = fib_nh_common_init(net, &nh->nh_common, cfg->fc_encap, in fib_nh_init()
628 cfg->fc_encap_type, cfg, GFP_KERNEL, extack); in fib_nh_init()
632 nh->fib_nh_oif = cfg->fc_oif; in fib_nh_init()
633 nh->fib_nh_gw_family = cfg->fc_gw_family; in fib_nh_init()
634 if (cfg->fc_gw_family == AF_INET) in fib_nh_init()
635 nh->fib_nh_gw4 = cfg->fc_gw4; in fib_nh_init()
636 else if (cfg->fc_gw_family == AF_INET6) in fib_nh_init()
637 nh->fib_nh_gw6 = cfg->fc_gw6; in fib_nh_init()
639 nh->fib_nh_flags = cfg->fc_flags; in fib_nh_init()
642 nh->nh_tclassid = cfg->fc_flow; in fib_nh_init()
689 int remaining, struct fib_config *cfg, in fib_get_nhs() argument
714 fib_cfg.fc_flags = (cfg->fc_flags & ~0xFF) | rtnh->rtnh_flags; in fib_get_nhs()
770 if (cfg->fc_oif && nh->fib_nh_oif != cfg->fc_oif) { in fib_get_nhs()
775 if (cfg->fc_gw_family) { in fib_get_nhs()
776 if (cfg->fc_gw_family != nh->fib_nh_gw_family || in fib_get_nhs()
777 (cfg->fc_gw_family == AF_INET && in fib_get_nhs()
778 nh->fib_nh_gw4 != cfg->fc_gw4) || in fib_get_nhs()
779 (cfg->fc_gw_family == AF_INET6 && in fib_get_nhs()
780 ipv6_addr_cmp(&nh->fib_nh_gw6, &cfg->fc_gw6))) { in fib_get_nhs()
787 if (cfg->fc_flow && nh->nh_tclassid != cfg->fc_flow) { in fib_get_nhs()
840 int remaining, struct fib_config *cfg, in fib_get_nhs() argument
855 const struct fib_config *cfg, in fib_encap_match() argument
865 cfg, &lwtstate, extack); in fib_encap_match()
874 int fib_nh_match(struct net *net, struct fib_config *cfg, struct fib_info *fi, in fib_nh_match() argument
882 if (cfg->fc_priority && cfg->fc_priority != fi->fib_priority) in fib_nh_match()
885 if (cfg->fc_nh_id) { in fib_nh_match()
886 if (fi->nh && cfg->fc_nh_id == fi->nh->id) in fib_nh_match()
892 if (cfg->fc_oif || cfg->fc_gw_family || cfg->fc_mp) in fib_nh_match()
897 if (cfg->fc_oif || cfg->fc_gw_family) { in fib_nh_match()
901 if (cfg->fc_encap) { in fib_nh_match()
902 if (fib_encap_match(net, cfg->fc_encap_type, in fib_nh_match()
903 cfg->fc_encap, nh, cfg, extack)) in fib_nh_match()
907 if (cfg->fc_flow && in fib_nh_match()
908 cfg->fc_flow != nh->nh_tclassid) in fib_nh_match()
911 if ((cfg->fc_oif && cfg->fc_oif != nh->fib_nh_oif) || in fib_nh_match()
912 (cfg->fc_gw_family && in fib_nh_match()
913 cfg->fc_gw_family != nh->fib_nh_gw_family)) in fib_nh_match()
916 if (cfg->fc_gw_family == AF_INET && in fib_nh_match()
917 cfg->fc_gw4 != nh->fib_nh_gw4) in fib_nh_match()
920 if (cfg->fc_gw_family == AF_INET6 && in fib_nh_match()
921 ipv6_addr_cmp(&cfg->fc_gw6, &nh->fib_nh_gw6)) in fib_nh_match()
928 if (!cfg->fc_mp) in fib_nh_match()
931 rtnh = cfg->fc_mp; in fib_nh_match()
932 remaining = cfg->fc_mp_len; in fib_nh_match()
1007 bool fib_metrics_match(struct fib_config *cfg, struct fib_info *fi) in fib_metrics_match() argument
1012 if (!cfg->fc_mx) in fib_metrics_match()
1015 nla_for_each_attr(nla, cfg->fc_mx, cfg->fc_mx_len, remaining) { in fib_metrics_match()
1050 struct fib6_config cfg = { in fib_check_nh_v6_gw() local
1059 err = ipv6_stub->fib6_nh_init(net, &fib6_nh, &cfg, GFP_KERNEL, extack); in fib_check_nh_v6_gw()
1374 static bool fib_valid_prefsrc(struct fib_config *cfg, __be32 fib_prefsrc) in fib_valid_prefsrc() argument
1376 if (cfg->fc_type != RTN_LOCAL || !cfg->fc_dst || in fib_valid_prefsrc()
1377 fib_prefsrc != cfg->fc_dst) { in fib_valid_prefsrc()
1378 u32 tb_id = cfg->fc_table; in fib_valid_prefsrc()
1384 rc = inet_addr_type_table(cfg->fc_nlinfo.nl_net, in fib_valid_prefsrc()
1388 rc = inet_addr_type_table(cfg->fc_nlinfo.nl_net, in fib_valid_prefsrc()
1398 struct fib_info *fib_create_info(struct fib_config *cfg, in fib_create_info() argument
1406 struct net *net = cfg->fc_nlinfo.nl_net; in fib_create_info()
1408 if (cfg->fc_type > RTN_MAX) in fib_create_info()
1412 if (fib_props[cfg->fc_type].scope > cfg->fc_scope) { in fib_create_info()
1417 if (cfg->fc_flags & (RTNH_F_DEAD | RTNH_F_LINKDOWN)) { in fib_create_info()
1423 if (cfg->fc_nh_id) { in fib_create_info()
1424 if (!cfg->fc_mx) { in fib_create_info()
1425 fi = fib_find_info_nh(net, cfg); in fib_create_info()
1432 nh = nexthop_find_by_id(net, cfg->fc_nh_id); in fib_create_info()
1441 if (cfg->fc_mp) { in fib_create_info()
1442 nhs = fib_count_nexthops(cfg->fc_mp, cfg->fc_mp_len, extack); in fib_create_info()
1475 fi->fib_metrics = ip_fib_metrics_init(fi->fib_net, cfg->fc_mx, in fib_create_info()
1476 cfg->fc_mx_len, extack); in fib_create_info()
1484 fi->fib_protocol = cfg->fc_protocol; in fib_create_info()
1485 fi->fib_scope = cfg->fc_scope; in fib_create_info()
1486 fi->fib_flags = cfg->fc_flags; in fib_create_info()
1487 fi->fib_priority = cfg->fc_priority; in fib_create_info()
1488 fi->fib_prefsrc = cfg->fc_prefsrc; in fib_create_info()
1489 fi->fib_type = cfg->fc_type; in fib_create_info()
1490 fi->fib_tb_id = cfg->fc_table; in fib_create_info()
1506 if (cfg->fc_mp) in fib_create_info()
1507 err = fib_get_nhs(fi, cfg->fc_mp, cfg->fc_mp_len, cfg, in fib_create_info()
1510 err = fib_nh_init(net, fi->fib_nh, cfg, 1, extack); in fib_create_info()
1516 if (fib_props[cfg->fc_type].error) { in fib_create_info()
1517 if (cfg->fc_gw_family || cfg->fc_oif || cfg->fc_mp) { in fib_create_info()
1524 switch (cfg->fc_type) { in fib_create_info()
1537 if (cfg->fc_scope > RT_SCOPE_HOST) { in fib_create_info()
1543 err = fib_check_nexthop(fi->nh, cfg->fc_scope, extack); in fib_create_info()
1546 } else if (cfg->fc_scope == RT_SCOPE_HOST) { in fib_create_info()
1569 err = fib_check_nh(cfg->fc_nlinfo.nl_net, nexthop_nh, in fib_create_info()
1570 cfg->fc_table, cfg->fc_scope, in fib_create_info()
1581 if (fi->fib_prefsrc && !fib_valid_prefsrc(cfg, fi->fib_prefsrc)) { in fib_create_info()