Lines Matching refs:cfg
378 const struct fib_config *cfg) in fib_find_info_nh() argument
384 hash = fib_info_hashfn_1(fib_devindex_hashfn(cfg->fc_nh_id), in fib_find_info_nh()
385 cfg->fc_protocol, cfg->fc_scope, in fib_find_info_nh()
386 (__force u32)cfg->fc_prefsrc, in fib_find_info_nh()
387 cfg->fc_priority); in fib_find_info_nh()
394 if (!fi->nh || fi->nh->id != cfg->fc_nh_id) in fib_find_info_nh()
396 if (cfg->fc_protocol == fi->fib_protocol && in fib_find_info_nh()
397 cfg->fc_scope == fi->fib_scope && in fib_find_info_nh()
398 cfg->fc_prefsrc == fi->fib_prefsrc && in fib_find_info_nh()
399 cfg->fc_priority == fi->fib_priority && in fib_find_info_nh()
400 cfg->fc_type == fi->fib_type && in fib_find_info_nh()
401 cfg->fc_table == fi->fib_tb_id && in fib_find_info_nh()
402 !((cfg->fc_flags ^ fi->fib_flags) & ~RTNH_COMPARE_MASK)) in fib_find_info_nh()
586 void *cfg, gfp_t gfp_flags, in fib_nh_common_init() argument
605 nhc->nhc_family, cfg, &lwtstate, in fib_nh_common_init()
623 struct fib_config *cfg, int nh_weight, in fib_nh_init() argument
630 err = fib_nh_common_init(net, &nh->nh_common, cfg->fc_encap, in fib_nh_init()
631 cfg->fc_encap_type, cfg, GFP_KERNEL, extack); in fib_nh_init()
635 nh->fib_nh_oif = cfg->fc_oif; in fib_nh_init()
636 nh->fib_nh_gw_family = cfg->fc_gw_family; in fib_nh_init()
637 if (cfg->fc_gw_family == AF_INET) in fib_nh_init()
638 nh->fib_nh_gw4 = cfg->fc_gw4; in fib_nh_init()
639 else if (cfg->fc_gw_family == AF_INET6) in fib_nh_init()
640 nh->fib_nh_gw6 = cfg->fc_gw6; in fib_nh_init()
642 nh->fib_nh_flags = cfg->fc_flags; in fib_nh_init()
645 nh->nh_tclassid = cfg->fc_flow; in fib_nh_init()
692 int remaining, struct fib_config *cfg, in fib_get_nhs() argument
717 fib_cfg.fc_flags = (cfg->fc_flags & ~0xFF) | rtnh->rtnh_flags; in fib_get_nhs()
773 if (cfg->fc_oif && nh->fib_nh_oif != cfg->fc_oif) { in fib_get_nhs()
778 if (cfg->fc_gw_family) { in fib_get_nhs()
779 if (cfg->fc_gw_family != nh->fib_nh_gw_family || in fib_get_nhs()
780 (cfg->fc_gw_family == AF_INET && in fib_get_nhs()
781 nh->fib_nh_gw4 != cfg->fc_gw4) || in fib_get_nhs()
782 (cfg->fc_gw_family == AF_INET6 && in fib_get_nhs()
783 ipv6_addr_cmp(&nh->fib_nh_gw6, &cfg->fc_gw6))) { in fib_get_nhs()
790 if (cfg->fc_flow && nh->nh_tclassid != cfg->fc_flow) { in fib_get_nhs()
843 int remaining, struct fib_config *cfg, in fib_get_nhs() argument
858 const struct fib_config *cfg, in fib_encap_match() argument
868 cfg, &lwtstate, extack); in fib_encap_match()
877 int fib_nh_match(struct net *net, struct fib_config *cfg, struct fib_info *fi, in fib_nh_match() argument
885 if (cfg->fc_priority && cfg->fc_priority != fi->fib_priority) in fib_nh_match()
888 if (cfg->fc_nh_id) { in fib_nh_match()
889 if (fi->nh && cfg->fc_nh_id == fi->nh->id) in fib_nh_match()
895 if (cfg->fc_oif || cfg->fc_gw_family || cfg->fc_mp) in fib_nh_match()
900 if (cfg->fc_oif || cfg->fc_gw_family) { in fib_nh_match()
904 if (cfg->fc_encap) { in fib_nh_match()
905 if (fib_encap_match(net, cfg->fc_encap_type, in fib_nh_match()
906 cfg->fc_encap, nh, cfg, extack)) in fib_nh_match()
910 if (cfg->fc_flow && in fib_nh_match()
911 cfg->fc_flow != nh->nh_tclassid) in fib_nh_match()
914 if ((cfg->fc_oif && cfg->fc_oif != nh->fib_nh_oif) || in fib_nh_match()
915 (cfg->fc_gw_family && in fib_nh_match()
916 cfg->fc_gw_family != nh->fib_nh_gw_family)) in fib_nh_match()
919 if (cfg->fc_gw_family == AF_INET && in fib_nh_match()
920 cfg->fc_gw4 != nh->fib_nh_gw4) in fib_nh_match()
923 if (cfg->fc_gw_family == AF_INET6 && in fib_nh_match()
924 ipv6_addr_cmp(&cfg->fc_gw6, &nh->fib_nh_gw6)) in fib_nh_match()
931 if (!cfg->fc_mp) in fib_nh_match()
934 rtnh = cfg->fc_mp; in fib_nh_match()
935 remaining = cfg->fc_mp_len; in fib_nh_match()
1010 bool fib_metrics_match(struct fib_config *cfg, struct fib_info *fi) in fib_metrics_match() argument
1015 if (!cfg->fc_mx) in fib_metrics_match()
1018 nla_for_each_attr(nla, cfg->fc_mx, cfg->fc_mx_len, remaining) { in fib_metrics_match()
1054 struct fib6_config cfg = { in fib_check_nh_v6_gw() local
1063 err = ipv6_stub->fib6_nh_init(net, &fib6_nh, &cfg, GFP_KERNEL, extack); in fib_check_nh_v6_gw()
1361 static bool fib_valid_prefsrc(struct fib_config *cfg, __be32 fib_prefsrc) in fib_valid_prefsrc() argument
1363 if (cfg->fc_type != RTN_LOCAL || !cfg->fc_dst || in fib_valid_prefsrc()
1364 fib_prefsrc != cfg->fc_dst) { in fib_valid_prefsrc()
1365 u32 tb_id = cfg->fc_table; in fib_valid_prefsrc()
1371 rc = inet_addr_type_table(cfg->fc_nlinfo.nl_net, in fib_valid_prefsrc()
1375 rc = inet_addr_type_table(cfg->fc_nlinfo.nl_net, in fib_valid_prefsrc()
1385 struct fib_info *fib_create_info(struct fib_config *cfg, in fib_create_info() argument
1393 struct net *net = cfg->fc_nlinfo.nl_net; in fib_create_info()
1395 if (cfg->fc_type > RTN_MAX) in fib_create_info()
1399 if (fib_props[cfg->fc_type].scope > cfg->fc_scope) { in fib_create_info()
1404 if (cfg->fc_flags & (RTNH_F_DEAD | RTNH_F_LINKDOWN)) { in fib_create_info()
1410 if (cfg->fc_nh_id) { in fib_create_info()
1411 if (!cfg->fc_mx) { in fib_create_info()
1412 fi = fib_find_info_nh(net, cfg); in fib_create_info()
1419 nh = nexthop_find_by_id(net, cfg->fc_nh_id); in fib_create_info()
1428 if (cfg->fc_mp) { in fib_create_info()
1429 nhs = fib_count_nexthops(cfg->fc_mp, cfg->fc_mp_len, extack); in fib_create_info()
1462 fi->fib_metrics = ip_fib_metrics_init(fi->fib_net, cfg->fc_mx, in fib_create_info()
1463 cfg->fc_mx_len, extack); in fib_create_info()
1471 fi->fib_protocol = cfg->fc_protocol; in fib_create_info()
1472 fi->fib_scope = cfg->fc_scope; in fib_create_info()
1473 fi->fib_flags = cfg->fc_flags; in fib_create_info()
1474 fi->fib_priority = cfg->fc_priority; in fib_create_info()
1475 fi->fib_prefsrc = cfg->fc_prefsrc; in fib_create_info()
1476 fi->fib_type = cfg->fc_type; in fib_create_info()
1477 fi->fib_tb_id = cfg->fc_table; in fib_create_info()
1493 if (cfg->fc_mp) in fib_create_info()
1494 err = fib_get_nhs(fi, cfg->fc_mp, cfg->fc_mp_len, cfg, in fib_create_info()
1497 err = fib_nh_init(net, fi->fib_nh, cfg, 1, extack); in fib_create_info()
1503 if (fib_props[cfg->fc_type].error) { in fib_create_info()
1504 if (cfg->fc_gw_family || cfg->fc_oif || cfg->fc_mp) { in fib_create_info()
1511 switch (cfg->fc_type) { in fib_create_info()
1524 if (cfg->fc_scope > RT_SCOPE_HOST) { in fib_create_info()
1530 err = fib_check_nexthop(fi->nh, cfg->fc_scope, extack); in fib_create_info()
1533 } else if (cfg->fc_scope == RT_SCOPE_HOST) { in fib_create_info()
1558 err = fib_check_nh(cfg->fc_nlinfo.nl_net, nexthop_nh, in fib_create_info()
1559 cfg->fc_table, cfg->fc_scope, in fib_create_info()
1570 if (fi->fib_prefsrc && !fib_valid_prefsrc(cfg, fi->fib_prefsrc)) { in fib_create_info()