From c7243decfbb5c0fd772e7055c1bd2ce1089d3aa4 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Thu, 23 Dec 2010 12:03:57 -0800 Subject: [PATCH] --- yaml --- r: 223652 b: refs/heads/master c: e058464990c2ef1f3ecd6b83a154913c3c06f02a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/net/flow.h | 1 - trunk/net/core/fib_rules.c | 3 +-- trunk/net/ipv4/fib_frontend.c | 10 ++++++++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 2e79c0f4af30..b8875793451f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0e214ad81545a35c5e62a4c2d6cf7275fd7a545f +refs/heads/master: e058464990c2ef1f3ecd6b83a154913c3c06f02a diff --git a/trunk/include/net/flow.h b/trunk/include/net/flow.h index 0ac3fb5e0973..bb08692a20b0 100644 --- a/trunk/include/net/flow.h +++ b/trunk/include/net/flow.h @@ -49,7 +49,6 @@ struct flowi { __u8 proto; __u8 flags; #define FLOWI_FLAG_ANYSRC 0x01 -#define FLOWI_FLAG_MATCH_ANY_IIF 0x02 union { struct { __be16 sport; diff --git a/trunk/net/core/fib_rules.c b/trunk/net/core/fib_rules.c index 82a4369ae150..a20e5d3bbfa0 100644 --- a/trunk/net/core/fib_rules.c +++ b/trunk/net/core/fib_rules.c @@ -181,8 +181,7 @@ static int fib_rule_match(struct fib_rule *rule, struct fib_rules_ops *ops, { int ret = 0; - if (rule->iifindex && (rule->iifindex != fl->iif) && - !(fl->flags & FLOWI_FLAG_MATCH_ANY_IIF)) + if (rule->iifindex && (rule->iifindex != fl->iif)) goto out; if (rule->oifindex && (rule->oifindex != fl->oif)) diff --git a/trunk/net/ipv4/fib_frontend.c b/trunk/net/ipv4/fib_frontend.c index eb6f69a8f27a..c19c1f739fba 100644 --- a/trunk/net/ipv4/fib_frontend.c +++ b/trunk/net/ipv4/fib_frontend.c @@ -163,13 +163,19 @@ struct net_device *__ip_dev_find(struct net *net, __be32 addr, bool devref) .daddr = addr } }, - .flags = FLOWI_FLAG_MATCH_ANY_IIF }; struct fib_result res = { 0 }; struct net_device *dev = NULL; + struct fib_table *local_table; + +#ifdef CONFIG_IP_MULTIPLE_TABLES + res.r = NULL; +#endif rcu_read_lock(); - if (fib_lookup(net, &fl, &res)) { + local_table = fib_get_table(net, RT_TABLE_LOCAL); + if (!local_table || + fib_table_lookup(local_table, &fl, &res, FIB_LOOKUP_NOREF)) { rcu_read_unlock(); return NULL; }