Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 51314a17 authored by Denis V. Lunev's avatar Denis V. Lunev Committed by David S. Miller
Browse files

[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: default avatarDenis V. Lunev <den@openvz.org>
Acked-by: default avatarDaniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9e3a5487
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ struct fib_rule
	u32			target;
	struct fib_rule *	ctarget;
	struct rcu_head		rcu;
	struct net *		fr_net;
};

struct fib_lookup_arg
+2 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ int fib_default_rule_add(struct fib_rules_ops *ops,
	r->pref = pref;
	r->table = table;
	r->flags = flags;
	r->fr_net = ops->fro_net;

	/* The lock is not required here, the list in unreacheable
	 * 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)
		err = -ENOMEM;
		goto errout;
	}
	rule->fr_net = net;

	if (tb[FRA_PRIORITY])
		rule->pref = nla_get_u32(tb[FRA_PRIORITY]);
+1 −1
Original line number Diff line number Diff line
@@ -91,7 +91,7 @@ static int fib4_rule_action(struct fib_rule *rule, struct flowi *flp,
		goto errout;
	}

	if ((tbl = fib_get_table(&init_net, rule->table)) == NULL)
	if ((tbl = fib_get_table(rule->fr_net, rule->table)) == NULL)
		goto errout;

	err = tbl->tb_lookup(tbl, flp, (struct fib_result *) arg->result);