Lines Matching refs:cfg

471 		       int remaining, struct fib_config *cfg)
480 (cfg->fc_flags & ~0xFF) | rtnh->rtnh_flags;
506 int fib_nh_match(struct fib_config *cfg, struct fib_info *fi)
513 if (cfg->fc_priority && cfg->fc_priority != fi->fib_priority)
516 if (cfg->fc_oif || cfg->fc_gw) {
517 if ((!cfg->fc_oif || cfg->fc_oif == fi->fib_nh->nh_oif) &&
518 (!cfg->fc_gw || cfg->fc_gw == fi->fib_nh->nh_gw))
524 if (cfg->fc_mp == NULL)
527 rtnh = cfg->fc_mp;
528 remaining = cfg->fc_mp_len;
603 static int fib_check_nh(struct fib_config *cfg, struct fib_info *fi,
610 net = cfg->fc_nlinfo.nl_net;
616 if (cfg->fc_scope >= RT_SCOPE_LINK)
634 .flowi4_scope = cfg->fc_scope + 1,
778 struct fib_info *fib_create_info(struct fib_config *cfg)
784 struct net *net = cfg->fc_nlinfo.nl_net;
786 if (cfg->fc_type > RTN_MAX)
790 if (fib_props[cfg->fc_type].scope > cfg->fc_scope)
794 if (cfg->fc_mp) {
795 nhs = fib_count_nexthops(cfg->fc_mp, cfg->fc_mp_len);
827 if (cfg->fc_mx) {
835 fi->fib_protocol = cfg->fc_protocol;
836 fi->fib_scope = cfg->fc_scope;
837 fi->fib_flags = cfg->fc_flags;
838 fi->fib_priority = cfg->fc_priority;
839 fi->fib_prefsrc = cfg->fc_prefsrc;
840 fi->fib_type = cfg->fc_type;
850 if (cfg->fc_mx) {
854 nla_for_each_attr(nla, cfg->fc_mx, cfg->fc_mx_len, remaining) {
872 if (cfg->fc_mp) {
874 err = fib_get_nhs(fi, cfg->fc_mp, cfg->fc_mp_len, cfg);
877 if (cfg->fc_oif && fi->fib_nh->nh_oif != cfg->fc_oif)
879 if (cfg->fc_gw && fi->fib_nh->nh_gw != cfg->fc_gw)
882 if (cfg->fc_flow && fi->fib_nh->nh_tclassid != cfg->fc_flow)
891 nh->nh_oif = cfg->fc_oif;
892 nh->nh_gw = cfg->fc_gw;
893 nh->nh_flags = cfg->fc_flags;
895 nh->nh_tclassid = cfg->fc_flow;
904 if (fib_props[cfg->fc_type].error) {
905 if (cfg->fc_gw || cfg->fc_oif || cfg->fc_mp)
909 switch (cfg->fc_type) {
921 if (cfg->fc_scope > RT_SCOPE_HOST)
924 if (cfg->fc_scope == RT_SCOPE_HOST) {
937 err = fib_check_nh(cfg, fi, nexthop_nh);
944 if (cfg->fc_type != RTN_LOCAL || !cfg->fc_dst ||
945 fi->fib_prefsrc != cfg->fc_dst)