diff options
author | Denis V. Lunev <den@openvz.org> | 2008-01-20 19:47:09 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 18:08:14 -0500 |
commit | 51314a17baabc710e5fb12975fe8983dedd5ac0d (patch) | |
tree | c0aaa74535570247f34a60bd80133c70881144b6 /net | |
parent | 9e3a548781fc1c0da617fc65769a515f074be740 (diff) |
[NETNS]: Process FIB rule action in the context of the namespace.
Save namespace context on the fib rule at the rule creation time and
call routing lookup in the correct namespace.
Signed-off-by: Denis V. Lunev <den@openvz.org>
Acked-by: Daniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/fib_rules.c | 2 | ||||
-rw-r--r-- | net/ipv4/fib_rules.c | 2 |
2 files changed, 3 insertions, 1 deletions
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c index 3cd4f13413f6..42ccaf5b8509 100644 --- a/net/core/fib_rules.c +++ b/net/core/fib_rules.c | |||
@@ -29,6 +29,7 @@ int fib_default_rule_add(struct fib_rules_ops *ops, | |||
29 | r->pref = pref; | 29 | r->pref = pref; |
30 | r->table = table; | 30 | r->table = table; |
31 | r->flags = flags; | 31 | r->flags = flags; |
32 | r->fr_net = ops->fro_net; | ||
32 | 33 | ||
33 | /* The lock is not required here, the list in unreacheable | 34 | /* The lock is not required here, the list in unreacheable |
34 | * at the moment this function is called */ | 35 | * at the moment this function is called */ |
@@ -242,6 +243,7 @@ static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) | |||
242 | err = -ENOMEM; | 243 | err = -ENOMEM; |
243 | goto errout; | 244 | goto errout; |
244 | } | 245 | } |
246 | rule->fr_net = net; | ||
245 | 247 | ||
246 | if (tb[FRA_PRIORITY]) | 248 | if (tb[FRA_PRIORITY]) |
247 | rule->pref = nla_get_u32(tb[FRA_PRIORITY]); | 249 | rule->pref = nla_get_u32(tb[FRA_PRIORITY]); |
diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c index 3b7affd5cb3b..d2001f1c28a2 100644 --- a/net/ipv4/fib_rules.c +++ b/net/ipv4/fib_rules.c | |||
@@ -91,7 +91,7 @@ static int fib4_rule_action(struct fib_rule *rule, struct flowi *flp, | |||
91 | goto errout; | 91 | goto errout; |
92 | } | 92 | } |
93 | 93 | ||
94 | if ((tbl = fib_get_table(&init_net, rule->table)) == NULL) | 94 | if ((tbl = fib_get_table(rule->fr_net, rule->table)) == NULL) |
95 | goto errout; | 95 | goto errout; |
96 | 96 | ||
97 | err = tbl->tb_lookup(tbl, flp, (struct fib_result *) arg->result); | 97 | err = tbl->tb_lookup(tbl, flp, (struct fib_result *) arg->result); |