|
@@ -36,8 +36,8 @@ static struct tc_action_ops act_ipt_ops;
|
|
|
static unsigned int xt_net_id;
|
|
|
static struct tc_action_ops act_xt_ops;
|
|
|
|
|
|
-static int ipt_init_target(struct xt_entry_target *t, char *table,
|
|
|
- unsigned int hook)
|
|
|
+static int ipt_init_target(struct net *net, struct xt_entry_target *t,
|
|
|
+ char *table, unsigned int hook)
|
|
|
{
|
|
|
struct xt_tgchk_param par;
|
|
|
struct xt_target *target;
|
|
@@ -49,6 +49,7 @@ static int ipt_init_target(struct xt_entry_target *t, char *table,
|
|
|
return PTR_ERR(target);
|
|
|
|
|
|
t->u.kernel.target = target;
|
|
|
+ par.net = net;
|
|
|
par.table = table;
|
|
|
par.entryinfo = NULL;
|
|
|
par.target = target;
|
|
@@ -91,10 +92,11 @@ static const struct nla_policy ipt_policy[TCA_IPT_MAX + 1] = {
|
|
|
[TCA_IPT_TARG] = { .len = sizeof(struct xt_entry_target) },
|
|
|
};
|
|
|
|
|
|
-static int __tcf_ipt_init(struct tc_action_net *tn, struct nlattr *nla,
|
|
|
+static int __tcf_ipt_init(struct net *net, unsigned int id, struct nlattr *nla,
|
|
|
struct nlattr *est, struct tc_action **a,
|
|
|
const struct tc_action_ops *ops, int ovr, int bind)
|
|
|
{
|
|
|
+ struct tc_action_net *tn = net_generic(net, id);
|
|
|
struct nlattr *tb[TCA_IPT_MAX + 1];
|
|
|
struct tcf_ipt *ipt;
|
|
|
struct xt_entry_target *td, *t;
|
|
@@ -159,7 +161,7 @@ static int __tcf_ipt_init(struct tc_action_net *tn, struct nlattr *nla,
|
|
|
if (unlikely(!t))
|
|
|
goto err2;
|
|
|
|
|
|
- err = ipt_init_target(t, tname, hook);
|
|
|
+ err = ipt_init_target(net, t, tname, hook);
|
|
|
if (err < 0)
|
|
|
goto err3;
|
|
|
|
|
@@ -193,18 +195,16 @@ static int tcf_ipt_init(struct net *net, struct nlattr *nla,
|
|
|
struct nlattr *est, struct tc_action **a, int ovr,
|
|
|
int bind)
|
|
|
{
|
|
|
- struct tc_action_net *tn = net_generic(net, ipt_net_id);
|
|
|
-
|
|
|
- return __tcf_ipt_init(tn, nla, est, a, &act_ipt_ops, ovr, bind);
|
|
|
+ return __tcf_ipt_init(net, ipt_net_id, nla, est, a, &act_ipt_ops, ovr,
|
|
|
+ bind);
|
|
|
}
|
|
|
|
|
|
static int tcf_xt_init(struct net *net, struct nlattr *nla,
|
|
|
struct nlattr *est, struct tc_action **a, int ovr,
|
|
|
int bind)
|
|
|
{
|
|
|
- struct tc_action_net *tn = net_generic(net, xt_net_id);
|
|
|
-
|
|
|
- return __tcf_ipt_init(tn, nla, est, a, &act_xt_ops, ovr, bind);
|
|
|
+ return __tcf_ipt_init(net, xt_net_id, nla, est, a, &act_xt_ops, ovr,
|
|
|
+ bind);
|
|
|
}
|
|
|
|
|
|
static int tcf_ipt(struct sk_buff *skb, const struct tc_action *a,
|