ipv4: Avoid overhead when no custom FIB rules are installed.
[deliverable/linux.git] / net / ipv4 / fib_rules.c
index b23fd952c84fe06bc9126916adaca7a4677ea55a..c06da93b0b7022a44303e204431f52b6abec55d7 100644 (file)
@@ -54,7 +54,7 @@ u32 fib_rules_tclass(const struct fib_result *res)
 }
 #endif
 
-int fib_lookup(struct net *net, struct flowi4 *flp, struct fib_result *res)
+int __fib_lookup(struct net *net, struct flowi4 *flp, struct fib_result *res)
 {
        struct fib_lookup_arg arg = {
                .result = res,
@@ -67,7 +67,7 @@ int fib_lookup(struct net *net, struct flowi4 *flp, struct fib_result *res)
 
        return err;
 }
-EXPORT_SYMBOL_GPL(fib_lookup);
+EXPORT_SYMBOL_GPL(__fib_lookup);
 
 static int fib4_rule_action(struct fib_rule *rule, struct flowi *flp,
                            int flags, struct fib_lookup_arg *arg)
@@ -172,7 +172,7 @@ static int fib4_rule_configure(struct fib_rule *rule, struct sk_buff *skb,
        if (tb[FRA_FLOW]) {
                rule4->tclassid = nla_get_u32(tb[FRA_FLOW]);
                if (rule4->tclassid)
-                       fib_num_tclassid_users++;
+                       net->ipv4.fib_num_tclassid_users++;
        }
 #endif
 
@@ -182,6 +182,7 @@ static int fib4_rule_configure(struct fib_rule *rule, struct sk_buff *skb,
        rule4->dstmask = inet_make_mask(rule4->dst_len);
        rule4->tos = frh->tos;
 
+       net->ipv4.fib_has_custom_rules = true;
        err = 0;
 errout:
        return err;
@@ -189,12 +190,14 @@ errout:
 
 static void fib4_rule_delete(struct fib_rule *rule)
 {
+       struct net *net = rule->fr_net;
 #ifdef CONFIG_IP_ROUTE_CLASSID
        struct fib4_rule *rule4 = (struct fib4_rule *) rule;
 
        if (rule4->tclassid)
-               fib_num_tclassid_users--;
+               net->ipv4.fib_num_tclassid_users--;
 #endif
+       net->ipv4.fib_has_custom_rules = true;
 }
 
 static int fib4_rule_compare(struct fib_rule *rule, struct fib_rule_hdr *frh,
@@ -309,6 +312,7 @@ int __net_init fib4_rules_init(struct net *net)
        if (err < 0)
                goto fail;
        net->ipv4.rules_ops = ops;
+       net->ipv4.fib_has_custom_rules = false;
        return 0;
 
 fail:
This page took 0.029304 seconds and 5 git commands to generate.