Lines Matching refs:cfg

471 		       int remaining, struct fib_config *cfg)  in fib_get_nhs()  argument
473 struct net *net = cfg->fc_nlinfo.nl_net; in fib_get_nhs()
483 (cfg->fc_flags & ~0xFF) | rtnh->rtnh_flags; in fib_get_nhs()
509 if (cfg->fc_oif) in fib_get_nhs()
510 dev = __dev_get_by_index(net, cfg->fc_oif); in fib_get_nhs()
513 nla, AF_INET, cfg, in fib_get_nhs()
599 const struct fib_config *cfg) in fib_encap_match() argument
611 AF_INET, cfg, &lwtstate); in fib_encap_match()
620 int fib_nh_match(struct fib_config *cfg, struct fib_info *fi) in fib_nh_match() argument
622 struct net *net = cfg->fc_nlinfo.nl_net; in fib_nh_match()
628 if (cfg->fc_priority && cfg->fc_priority != fi->fib_priority) in fib_nh_match()
631 if (cfg->fc_oif || cfg->fc_gw) { in fib_nh_match()
632 if (cfg->fc_encap) { in fib_nh_match()
633 if (fib_encap_match(net, cfg->fc_encap_type, in fib_nh_match()
634 cfg->fc_encap, cfg->fc_oif, in fib_nh_match()
635 fi->fib_nh, cfg)) in fib_nh_match()
638 if ((!cfg->fc_oif || cfg->fc_oif == fi->fib_nh->nh_oif) && in fib_nh_match()
639 (!cfg->fc_gw || cfg->fc_gw == fi->fib_nh->nh_gw)) in fib_nh_match()
645 if (!cfg->fc_mp) in fib_nh_match()
648 rtnh = cfg->fc_mp; in fib_nh_match()
649 remaining = cfg->fc_mp_len; in fib_nh_match()
724 static int fib_check_nh(struct fib_config *cfg, struct fib_info *fi, in fib_check_nh() argument
731 net = cfg->fc_nlinfo.nl_net; in fib_check_nh()
738 if (cfg->fc_scope >= RT_SCOPE_LINK) in fib_check_nh()
760 .flowi4_scope = cfg->fc_scope + 1, in fib_check_nh()
769 if (cfg->fc_table) in fib_check_nh()
770 tbl = fib_get_table(net, cfg->fc_table); in fib_check_nh()
921 static bool fib_valid_prefsrc(struct fib_config *cfg, __be32 fib_prefsrc) in fib_valid_prefsrc() argument
923 if (cfg->fc_type != RTN_LOCAL || !cfg->fc_dst || in fib_valid_prefsrc()
924 fib_prefsrc != cfg->fc_dst) { in fib_valid_prefsrc()
925 u32 tb_id = cfg->fc_table; in fib_valid_prefsrc()
931 rc = inet_addr_type_table(cfg->fc_nlinfo.nl_net, in fib_valid_prefsrc()
935 rc = inet_addr_type_table(cfg->fc_nlinfo.nl_net, in fib_valid_prefsrc()
946 fib_convert_metrics(struct fib_info *fi, const struct fib_config *cfg) in fib_convert_metrics() argument
952 if (!cfg->fc_mx) in fib_convert_metrics()
955 nla_for_each_attr(nla, cfg->fc_mx, cfg->fc_mx_len, remaining) { in fib_convert_metrics()
991 struct fib_info *fib_create_info(struct fib_config *cfg) in fib_create_info() argument
997 struct net *net = cfg->fc_nlinfo.nl_net; in fib_create_info()
999 if (cfg->fc_type > RTN_MAX) in fib_create_info()
1003 if (fib_props[cfg->fc_type].scope > cfg->fc_scope) in fib_create_info()
1007 if (cfg->fc_mp) { in fib_create_info()
1008 nhs = fib_count_nexthops(cfg->fc_mp, cfg->fc_mp_len); in fib_create_info()
1040 if (cfg->fc_mx) { in fib_create_info()
1048 fi->fib_protocol = cfg->fc_protocol; in fib_create_info()
1049 fi->fib_scope = cfg->fc_scope; in fib_create_info()
1050 fi->fib_flags = cfg->fc_flags; in fib_create_info()
1051 fi->fib_priority = cfg->fc_priority; in fib_create_info()
1052 fi->fib_prefsrc = cfg->fc_prefsrc; in fib_create_info()
1053 fi->fib_type = cfg->fc_type; in fib_create_info()
1063 err = fib_convert_metrics(fi, cfg); in fib_create_info()
1067 if (cfg->fc_mp) { in fib_create_info()
1069 err = fib_get_nhs(fi, cfg->fc_mp, cfg->fc_mp_len, cfg); in fib_create_info()
1072 if (cfg->fc_oif && fi->fib_nh->nh_oif != cfg->fc_oif) in fib_create_info()
1074 if (cfg->fc_gw && fi->fib_nh->nh_gw != cfg->fc_gw) in fib_create_info()
1077 if (cfg->fc_flow && fi->fib_nh->nh_tclassid != cfg->fc_flow) in fib_create_info()
1086 if (cfg->fc_encap) { in fib_create_info()
1090 if (cfg->fc_encap_type == LWTUNNEL_ENCAP_NONE) in fib_create_info()
1092 if (cfg->fc_oif) in fib_create_info()
1093 dev = __dev_get_by_index(net, cfg->fc_oif); in fib_create_info()
1094 err = lwtunnel_build_state(dev, cfg->fc_encap_type, in fib_create_info()
1095 cfg->fc_encap, AF_INET, cfg, 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()
1115 if (fib_props[cfg->fc_type].error) { in fib_create_info()
1116 if (cfg->fc_gw || cfg->fc_oif || cfg->fc_mp) in fib_create_info()
1120 switch (cfg->fc_type) { in fib_create_info()
1132 if (cfg->fc_scope > RT_SCOPE_HOST) in fib_create_info()
1135 if (cfg->fc_scope == RT_SCOPE_HOST) { in fib_create_info()
1150 err = fib_check_nh(cfg, fi, nexthop_nh); in fib_create_info()
1160 if (fi->fib_prefsrc && !fib_valid_prefsrc(cfg, fi->fib_prefsrc)) in fib_create_info()