Lines Matching refs:cfg
453 int remaining, struct fib_config *cfg) in fib_get_nhs() argument
462 (cfg->fc_flags & ~0xFF) | rtnh->rtnh_flags; in fib_get_nhs()
488 int fib_nh_match(struct fib_config *cfg, struct fib_info *fi) in fib_nh_match() argument
495 if (cfg->fc_priority && cfg->fc_priority != fi->fib_priority) in fib_nh_match()
498 if (cfg->fc_oif || cfg->fc_gw) { in fib_nh_match()
499 if ((!cfg->fc_oif || cfg->fc_oif == fi->fib_nh->nh_oif) && in fib_nh_match()
500 (!cfg->fc_gw || cfg->fc_gw == fi->fib_nh->nh_gw)) in fib_nh_match()
506 if (!cfg->fc_mp) in fib_nh_match()
509 rtnh = cfg->fc_mp; in fib_nh_match()
510 remaining = cfg->fc_mp_len; in fib_nh_match()
585 static int fib_check_nh(struct fib_config *cfg, struct fib_info *fi, in fib_check_nh() argument
592 net = cfg->fc_nlinfo.nl_net; in fib_check_nh()
598 if (cfg->fc_scope >= RT_SCOPE_LINK) in fib_check_nh()
616 .flowi4_scope = cfg->fc_scope + 1, in fib_check_nh()
760 struct fib_info *fib_create_info(struct fib_config *cfg) in fib_create_info() argument
766 struct net *net = cfg->fc_nlinfo.nl_net; in fib_create_info()
768 if (cfg->fc_type > RTN_MAX) in fib_create_info()
772 if (fib_props[cfg->fc_type].scope > cfg->fc_scope) in fib_create_info()
776 if (cfg->fc_mp) { in fib_create_info()
777 nhs = fib_count_nexthops(cfg->fc_mp, cfg->fc_mp_len); in fib_create_info()
809 if (cfg->fc_mx) { in fib_create_info()
817 fi->fib_protocol = cfg->fc_protocol; in fib_create_info()
818 fi->fib_scope = cfg->fc_scope; in fib_create_info()
819 fi->fib_flags = cfg->fc_flags; in fib_create_info()
820 fi->fib_priority = cfg->fc_priority; in fib_create_info()
821 fi->fib_prefsrc = cfg->fc_prefsrc; in fib_create_info()
822 fi->fib_type = cfg->fc_type; in fib_create_info()
832 if (cfg->fc_mx) { in fib_create_info()
836 nla_for_each_attr(nla, cfg->fc_mx, cfg->fc_mx_len, remaining) { in fib_create_info()
863 if (cfg->fc_mp) { in fib_create_info()
865 err = fib_get_nhs(fi, cfg->fc_mp, cfg->fc_mp_len, cfg); in fib_create_info()
868 if (cfg->fc_oif && fi->fib_nh->nh_oif != cfg->fc_oif) in fib_create_info()
870 if (cfg->fc_gw && fi->fib_nh->nh_gw != cfg->fc_gw) in fib_create_info()
873 if (cfg->fc_flow && fi->fib_nh->nh_tclassid != cfg->fc_flow) in fib_create_info()
882 nh->nh_oif = cfg->fc_oif; in fib_create_info()
883 nh->nh_gw = cfg->fc_gw; in fib_create_info()
884 nh->nh_flags = cfg->fc_flags; in fib_create_info()
886 nh->nh_tclassid = cfg->fc_flow; in fib_create_info()
895 if (fib_props[cfg->fc_type].error) { in fib_create_info()
896 if (cfg->fc_gw || cfg->fc_oif || cfg->fc_mp) in fib_create_info()
900 switch (cfg->fc_type) { in fib_create_info()
912 if (cfg->fc_scope > RT_SCOPE_HOST) in fib_create_info()
915 if (cfg->fc_scope == RT_SCOPE_HOST) { in fib_create_info()
928 err = fib_check_nh(cfg, fi, nexthop_nh); in fib_create_info()
935 if (cfg->fc_type != RTN_LOCAL || !cfg->fc_dst || in fib_create_info()
936 fi->fib_prefsrc != cfg->fc_dst) in fib_create_info()