pkt_sched: namespace aware act_mirred
authorBenjamin LaHaise <bcrl@kvack.org>
Mon, 14 Jan 2013 05:15:39 +0000 (05:15 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Jan 2013 20:09:36 +0000 (15:09 -0500)
Eric Dumazet pointed out that act_mirred needs to find the current net_ns,
and struct net pointer is not provided in the call chain.  His original
patch made use of current->nsproxy->net_ns to find the network namespace,
but this fails to work correctly for userspace code that makes use of
netlink sockets in different network namespaces.  Instead, pass the
"struct net *" down along the call chain to where it is needed.

This version removes the ifb changes as Eric has submitted that patch
separately, but is otherwise identical to the previous version.

Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
Tested-by: Eric Dumazet <eric.dumazet@gmail.com>
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
22 files changed:
include/net/act_api.h
include/net/pkt_cls.h
include/net/sch_generic.h
net/sched/act_api.c
net/sched/act_csum.c
net/sched/act_gact.c
net/sched/act_ipt.c
net/sched/act_mirred.c
net/sched/act_nat.c
net/sched/act_pedit.c
net/sched/act_police.c
net/sched/act_simple.c
net/sched/act_skbedit.c
net/sched/cls_api.c
net/sched/cls_basic.c
net/sched/cls_cgroup.c
net/sched/cls_flow.c
net/sched/cls_fw.c
net/sched/cls_route.c
net/sched/cls_rsvp.h
net/sched/cls_tcindex.c
net/sched/cls_u32.c

index c739531e156492e573e431d329fe058d6c56e9df..112c25c393a2e94c1c8a6c2339ce3849b50584aa 100644 (file)
@@ -91,7 +91,9 @@ struct tc_action_ops {
        int     (*dump)(struct sk_buff *, struct tc_action *, int, int);
        int     (*cleanup)(struct tc_action *, int bind);
        int     (*lookup)(struct tc_action *, u32);
-       int     (*init)(struct nlattr *, struct nlattr *, struct tc_action *, int , int);
+       int     (*init)(struct net *net, struct nlattr *nla,
+                       struct nlattr *est, struct tc_action *act, int ovr,
+                       int bind);
        int     (*walk)(struct sk_buff *, struct netlink_callback *, int, struct tc_action *);
 };
 
@@ -116,8 +118,12 @@ extern int tcf_register_action(struct tc_action_ops *a);
 extern int tcf_unregister_action(struct tc_action_ops *a);
 extern void tcf_action_destroy(struct tc_action *a, int bind);
 extern int tcf_action_exec(struct sk_buff *skb, const struct tc_action *a, struct tcf_result *res);
-extern struct tc_action *tcf_action_init(struct nlattr *nla, struct nlattr *est, char *n, int ovr, int bind);
-extern struct tc_action *tcf_action_init_1(struct nlattr *nla, struct nlattr *est, char *n, int ovr, int bind);
+extern struct tc_action *tcf_action_init(struct net *net, struct nlattr *nla,
+                                        struct nlattr *est, char *n, int ovr,
+                                        int bind);
+extern struct tc_action *tcf_action_init_1(struct net *net, struct nlattr *nla,
+                                          struct nlattr *est, char *n, int ovr,
+                                          int bind);
 extern int tcf_action_dump(struct sk_buff *skb, struct tc_action *a, int, int);
 extern int tcf_action_dump_old(struct sk_buff *skb, struct tc_action *a, int, int);
 extern int tcf_action_dump_1(struct sk_buff *skb, struct tc_action *a, int, int);
index 9fcc680ab6b9d1f4de4d15583275efe7acf66975..13174509cdfd38485a48f6fb1055f285a7306936 100644 (file)
@@ -126,9 +126,10 @@ tcf_exts_exec(struct sk_buff *skb, struct tcf_exts *exts,
        return 0;
 }
 
-extern int tcf_exts_validate(struct tcf_proto *tp, struct nlattr **tb,
-                            struct nlattr *rate_tlv, struct tcf_exts *exts,
-                            const struct tcf_ext_map *map);
+extern int tcf_exts_validate(struct net *net, struct tcf_proto *tp,
+                            struct nlattr **tb, struct nlattr *rate_tlv,
+                            struct tcf_exts *exts,
+                            const struct tcf_ext_map *map);
 extern void tcf_exts_destroy(struct tcf_proto *tp, struct tcf_exts *exts);
 extern void tcf_exts_change(struct tcf_proto *tp, struct tcf_exts *dst,
                             struct tcf_exts *src);
index 1540f9c2fcf4b555780087e48850911659009c25..2d06c2a53de176f3157b5487651de7f1d8c775e4 100644 (file)
@@ -195,7 +195,7 @@ struct tcf_proto_ops {
 
        unsigned long           (*get)(struct tcf_proto*, u32 handle);
        void                    (*put)(struct tcf_proto*, unsigned long);
-       int                     (*change)(struct sk_buff *,
+       int                     (*change)(struct net *net, struct sk_buff *,
                                        struct tcf_proto*, unsigned long,
                                        u32 handle, struct nlattr **,
                                        unsigned long *);
index 65d240cbf74b7513e7dc42effdc7f126bb4fff65..8579c4bb20c9daf093adf0b33b8bd13a94f5c6e0 100644 (file)
@@ -485,8 +485,9 @@ errout:
        return err;
 }
 
-struct tc_action *tcf_action_init_1(struct nlattr *nla, struct nlattr *est,
-                                   char *name, int ovr, int bind)
+struct tc_action *tcf_action_init_1(struct net *net, struct nlattr *nla,
+                                   struct nlattr *est, char *name, int ovr,
+                                   int bind)
 {
        struct tc_action *a;
        struct tc_action_ops *a_o;
@@ -542,9 +543,9 @@ struct tc_action *tcf_action_init_1(struct nlattr *nla, struct nlattr *est,
 
        /* backward compatibility for policer */
        if (name == NULL)
-               err = a_o->init(tb[TCA_ACT_OPTIONS], est, a, ovr, bind);
+               err = a_o->init(net, tb[TCA_ACT_OPTIONS], est, a, ovr, bind);
        else
-               err = a_o->init(nla, est, a, ovr, bind);
+               err = a_o->init(net, nla, est, a, ovr, bind);
        if (err < 0)
                goto err_free;
 
@@ -566,8 +567,9 @@ err_out:
        return ERR_PTR(err);
 }
 
-struct tc_action *tcf_action_init(struct nlattr *nla, struct nlattr *est,
-                                 char *name, int ovr, int bind)
+struct tc_action *tcf_action_init(struct net *net, struct nlattr *nla,
+                                 struct nlattr *est, char *name, int ovr,
+                                 int bind)
 {
        struct nlattr *tb[TCA_ACT_MAX_PRIO + 1];
        struct tc_action *head = NULL, *act, *act_prev = NULL;
@@ -579,7 +581,7 @@ struct tc_action *tcf_action_init(struct nlattr *nla, struct nlattr *est,
                return ERR_PTR(err);
 
        for (i = 1; i <= TCA_ACT_MAX_PRIO && tb[i]; i++) {
-               act = tcf_action_init_1(tb[i], est, name, ovr, bind);
+               act = tcf_action_init_1(net, tb[i], est, name, ovr, bind);
                if (IS_ERR(act))
                        goto err;
                act->order = i;
@@ -960,7 +962,7 @@ tcf_action_add(struct net *net, struct nlattr *nla, struct nlmsghdr *n,
        struct tc_action *a;
        u32 seq = n->nlmsg_seq;
 
-       act = tcf_action_init(nla, NULL, NULL, ovr, 0);
+       act = tcf_action_init(net, nla, NULL, NULL, ovr, 0);
        if (act == NULL)
                goto done;
        if (IS_ERR(act)) {
index 2c8ad7c86e4340e246394e075e18fcffc26ca722..08fa1e8a4ca4a5a0d45e399103cd680622b870bd 100644 (file)
@@ -51,7 +51,7 @@ static const struct nla_policy csum_policy[TCA_CSUM_MAX + 1] = {
        [TCA_CSUM_PARMS] = { .len = sizeof(struct tc_csum), },
 };
 
-static int tcf_csum_init(struct nlattr *nla, struct nlattr *est,
+static int tcf_csum_init(struct net *n, struct nlattr *nla, struct nlattr *est,
                         struct tc_action *a, int ovr, int bind)
 {
        struct nlattr *tb[TCA_CSUM_MAX + 1];
index 05d60859d8e3d1c2eb700ff7d1d63d81d9f98894..fd2b3cff5fa28cf4da25690da9e7bad410c60a78 100644 (file)
@@ -58,8 +58,9 @@ static const struct nla_policy gact_policy[TCA_GACT_MAX + 1] = {
        [TCA_GACT_PROB]         = { .len = sizeof(struct tc_gact_p) },
 };
 
-static int tcf_gact_init(struct nlattr *nla, struct nlattr *est,
-                        struct tc_action *a, int ovr, int bind)
+static int tcf_gact_init(struct net *net, struct nlattr *nla,
+                        struct nlattr *est, struct tc_action *a,
+                        int ovr, int bind)
 {
        struct nlattr *tb[TCA_GACT_MAX + 1];
        struct tc_gact *parm;
index 58fb3c7aab9eea8a0e65851948dd3d81da4fe3b8..0fb9e3f567e62340ee5b3d707d34591e54e7c7f2 100644 (file)
@@ -102,7 +102,7 @@ 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 nlattr *nla, struct nlattr *est,
+static int tcf_ipt_init(struct net *net, struct nlattr *nla, struct nlattr *est,
                        struct tc_action *a, int ovr, int bind)
 {
        struct nlattr *tb[TCA_IPT_MAX + 1];
index 9c0fd0c788145c0b6fa877463022f5ec90a707e2..5d676edc22a66010ee93eea8b4663a45f60b4c75 100644 (file)
@@ -62,8 +62,9 @@ static const struct nla_policy mirred_policy[TCA_MIRRED_MAX + 1] = {
        [TCA_MIRRED_PARMS]      = { .len = sizeof(struct tc_mirred) },
 };
 
-static int tcf_mirred_init(struct nlattr *nla, struct nlattr *est,
-                          struct tc_action *a, int ovr, int bind)
+static int tcf_mirred_init(struct net *net, struct nlattr *nla,
+                          struct nlattr *est, struct tc_action *a, int ovr,
+                          int bind)
 {
        struct nlattr *tb[TCA_MIRRED_MAX + 1];
        struct tc_mirred *parm;
@@ -88,7 +89,7 @@ static int tcf_mirred_init(struct nlattr *nla, struct nlattr *est,
                return -EINVAL;
        }
        if (parm->ifindex) {
-               dev = __dev_get_by_index(&init_net, parm->ifindex);
+               dev = __dev_get_by_index(net, parm->ifindex);
                if (dev == NULL)
                        return -ENODEV;
                switch (dev->type) {
index b5d029eb44f23216cce377506b39e9bbf7997dc3..876f0ef29694a3f28260a221d0862d4fe3756f8d 100644 (file)
@@ -44,7 +44,7 @@ static const struct nla_policy nat_policy[TCA_NAT_MAX + 1] = {
        [TCA_NAT_PARMS] = { .len = sizeof(struct tc_nat) },
 };
 
-static int tcf_nat_init(struct nlattr *nla, struct nlattr *est,
+static int tcf_nat_init(struct net *net, struct nlattr *nla, struct nlattr *est,
                        struct tc_action *a, int ovr, int bind)
 {
        struct nlattr *tb[TCA_NAT_MAX + 1];
index 45c53ab067a63240357a970e15ab2633802211d6..0c3faddf3f2c75f1505f5c7c1862f24a4c769dfa 100644 (file)
@@ -38,8 +38,9 @@ static const struct nla_policy pedit_policy[TCA_PEDIT_MAX + 1] = {
        [TCA_PEDIT_PARMS]       = { .len = sizeof(struct tc_pedit) },
 };
 
-static int tcf_pedit_init(struct nlattr *nla, struct nlattr *est,
-                         struct tc_action *a, int ovr, int bind)
+static int tcf_pedit_init(struct net *net, struct nlattr *nla,
+                         struct nlattr *est, struct tc_action *a,
+                         int ovr, int bind)
 {
        struct nlattr *tb[TCA_PEDIT_MAX + 1];
        struct tc_pedit *parm;
index a9de23297d47759f3fa50113b1bf190f51bf4063..8dbd695c160bc7c1e55c3d07a41d150b963dc032 100644 (file)
@@ -130,8 +130,9 @@ static const struct nla_policy police_policy[TCA_POLICE_MAX + 1] = {
        [TCA_POLICE_RESULT]     = { .type = NLA_U32 },
 };
 
-static int tcf_act_police_locate(struct nlattr *nla, struct nlattr *est,
-                                struct tc_action *a, int ovr, int bind)
+static int tcf_act_police_locate(struct net *net, struct nlattr *nla,
+                                struct nlattr *est, struct tc_action *a,
+                                int ovr, int bind)
 {
        unsigned int h;
        int ret = 0, err;
index 3714f60f0b3c5869725e449de8456ec9bd6b20fe..7725eb4ab756caa841eca2e0f4778880c310e5c4 100644 (file)
@@ -95,8 +95,9 @@ static const struct nla_policy simple_policy[TCA_DEF_MAX + 1] = {
        [TCA_DEF_DATA]  = { .type = NLA_STRING, .len = SIMP_MAX_DATA },
 };
 
-static int tcf_simp_init(struct nlattr *nla, struct nlattr *est,
-                        struct tc_action *a, int ovr, int bind)
+static int tcf_simp_init(struct net *net, struct nlattr *nla,
+                        struct nlattr *est, struct tc_action *a,
+                        int ovr, int bind)
 {
        struct nlattr *tb[TCA_DEF_MAX + 1];
        struct tc_defact *parm;
index 476e0fac6712292a133d5645f98ca889af52a8c4..cb4221171f93f0c5b8fbb98f41b11241aa17d02a 100644 (file)
@@ -67,8 +67,9 @@ static const struct nla_policy skbedit_policy[TCA_SKBEDIT_MAX + 1] = {
        [TCA_SKBEDIT_MARK]              = { .len = sizeof(u32) },
 };
 
-static int tcf_skbedit_init(struct nlattr *nla, struct nlattr *est,
-                        struct tc_action *a, int ovr, int bind)
+static int tcf_skbedit_init(struct net *net, struct nlattr *nla,
+                           struct nlattr *est, struct tc_action *a,
+                           int ovr, int bind)
 {
        struct nlattr *tb[TCA_SKBEDIT_MAX + 1];
        struct tc_skbedit *parm;
index ff55ed6c49b24115f4dc78b505da368a34e06b6b..964f5e4f4b8ac641f3f96b1b5a69d3c64aa70d48 100644 (file)
@@ -321,7 +321,7 @@ replay:
                }
        }
 
-       err = tp->ops->change(skb, tp, cl, t->tcm_handle, tca, &fh);
+       err = tp->ops->change(net, skb, tp, cl, t->tcm_handle, tca, &fh);
        if (err == 0) {
                if (tp_created) {
                        spin_lock_bh(root_lock);
@@ -508,7 +508,7 @@ void tcf_exts_destroy(struct tcf_proto *tp, struct tcf_exts *exts)
 }
 EXPORT_SYMBOL(tcf_exts_destroy);
 
-int tcf_exts_validate(struct tcf_proto *tp, struct nlattr **tb,
+int tcf_exts_validate(struct net *net, struct tcf_proto *tp, struct nlattr **tb,
                  struct nlattr *rate_tlv, struct tcf_exts *exts,
                  const struct tcf_ext_map *map)
 {
@@ -519,7 +519,7 @@ int tcf_exts_validate(struct tcf_proto *tp, struct nlattr **tb,
                struct tc_action *act;
 
                if (map->police && tb[map->police]) {
-                       act = tcf_action_init_1(tb[map->police], rate_tlv,
+                       act = tcf_action_init_1(net, tb[map->police], rate_tlv,
                                                "police", TCA_ACT_NOREPLACE,
                                                TCA_ACT_BIND);
                        if (IS_ERR(act))
@@ -528,8 +528,9 @@ int tcf_exts_validate(struct tcf_proto *tp, struct nlattr **tb,
                        act->type = TCA_OLD_COMPAT;
                        exts->action = act;
                } else if (map->action && tb[map->action]) {
-                       act = tcf_action_init(tb[map->action], rate_tlv, NULL,
-                                             TCA_ACT_NOREPLACE, TCA_ACT_BIND);
+                       act = tcf_action_init(net, tb[map->action], rate_tlv,
+                                             NULL, TCA_ACT_NOREPLACE,
+                                             TCA_ACT_BIND);
                        if (IS_ERR(act))
                                return PTR_ERR(act);
 
index 344a11b342e5ad333430ba68605bec6ce5f27f5c..d76a35d0dc85b82ddd9b8f2cc037b1ff0d31f5d5 100644 (file)
@@ -132,15 +132,16 @@ static const struct nla_policy basic_policy[TCA_BASIC_MAX + 1] = {
        [TCA_BASIC_EMATCHES]    = { .type = NLA_NESTED },
 };
 
-static int basic_set_parms(struct tcf_proto *tp, struct basic_filter *f,
-                          unsigned long base, struct nlattr **tb,
+static int basic_set_parms(struct net *net, struct tcf_proto *tp,
+                          struct basic_filter *f, unsigned long base,
+                          struct nlattr **tb,
                           struct nlattr *est)
 {
        int err = -EINVAL;
        struct tcf_exts e;
        struct tcf_ematch_tree t;
 
-       err = tcf_exts_validate(tp, tb, est, &e, &basic_ext_map);
+       err = tcf_exts_validate(net, tp, tb, est, &e, &basic_ext_map);
        if (err < 0)
                return err;
 
@@ -162,7 +163,7 @@ errout:
        return err;
 }
 
-static int basic_change(struct sk_buff *in_skb,
+static int basic_change(struct net *net, struct sk_buff *in_skb,
                        struct tcf_proto *tp, unsigned long base, u32 handle,
                        struct nlattr **tca, unsigned long *arg)
 {
@@ -182,7 +183,7 @@ static int basic_change(struct sk_buff *in_skb,
        if (f != NULL) {
                if (handle && f->handle != handle)
                        return -EINVAL;
-               return basic_set_parms(tp, f, base, tb, tca[TCA_RATE]);
+               return basic_set_parms(net, tp, f, base, tb, tca[TCA_RATE]);
        }
 
        err = -ENOBUFS;
@@ -208,7 +209,7 @@ static int basic_change(struct sk_buff *in_skb,
                f->handle = head->hgenerator;
        }
 
-       err = basic_set_parms(tp, f, base, tb, tca[TCA_RATE]);
+       err = basic_set_parms(net, tp, f, base, tb, tca[TCA_RATE]);
        if (err < 0)
                goto errout;
 
index 6db7855b9029ee26dcd97d73c43862a93c35b6c4..3a294eb98d6178733edc49c98da4069ccf643a39 100644 (file)
@@ -178,7 +178,7 @@ static const struct nla_policy cgroup_policy[TCA_CGROUP_MAX + 1] = {
        [TCA_CGROUP_EMATCHES]   = { .type = NLA_NESTED },
 };
 
-static int cls_cgroup_change(struct sk_buff *in_skb,
+static int cls_cgroup_change(struct net *net, struct sk_buff *in_skb,
                             struct tcf_proto *tp, unsigned long base,
                             u32 handle, struct nlattr **tca,
                             unsigned long *arg)
@@ -215,7 +215,8 @@ static int cls_cgroup_change(struct sk_buff *in_skb,
        if (err < 0)
                return err;
 
-       err = tcf_exts_validate(tp, tb, tca[TCA_RATE], &e, &cgroup_ext_map);
+       err = tcf_exts_validate(net, tp, tb, tca[TCA_RATE], &e,
+                               &cgroup_ext_map);
        if (err < 0)
                return err;
 
index ce82d0cb1b4762e8ffcc58d8e46beacd86e31db0..aa36a8c8b33bf27e286443f23ba27393e7156cda 100644 (file)
@@ -351,7 +351,7 @@ static const struct nla_policy flow_policy[TCA_FLOW_MAX + 1] = {
        [TCA_FLOW_PERTURB]      = { .type = NLA_U32 },
 };
 
-static int flow_change(struct sk_buff *in_skb, 
+static int flow_change(struct net *net, struct sk_buff *in_skb,
                       struct tcf_proto *tp, unsigned long base,
                       u32 handle, struct nlattr **tca,
                       unsigned long *arg)
@@ -397,7 +397,7 @@ static int flow_change(struct sk_buff *in_skb,
                        return -EOPNOTSUPP;
        }
 
-       err = tcf_exts_validate(tp, tb, tca[TCA_RATE], &e, &flow_ext_map);
+       err = tcf_exts_validate(net, tp, tb, tca[TCA_RATE], &e, &flow_ext_map);
        if (err < 0)
                return err;
 
index 4075a0aef2aa2e83fdf167c056e216c3abfc6204..1135d8227f9bf1811a2c45c211b80e6b9a69706f 100644 (file)
@@ -192,7 +192,7 @@ static const struct nla_policy fw_policy[TCA_FW_MAX + 1] = {
 };
 
 static int
-fw_change_attrs(struct tcf_proto *tp, struct fw_filter *f,
+fw_change_attrs(struct net *net, struct tcf_proto *tp, struct fw_filter *f,
        struct nlattr **tb, struct nlattr **tca, unsigned long base)
 {
        struct fw_head *head = (struct fw_head *)tp->root;
@@ -200,7 +200,7 @@ fw_change_attrs(struct tcf_proto *tp, struct fw_filter *f,
        u32 mask;
        int err;
 
-       err = tcf_exts_validate(tp, tb, tca[TCA_RATE], &e, &fw_ext_map);
+       err = tcf_exts_validate(net, tp, tb, tca[TCA_RATE], &e, &fw_ext_map);
        if (err < 0)
                return err;
 
@@ -233,7 +233,7 @@ errout:
        return err;
 }
 
-static int fw_change(struct sk_buff *in_skb,
+static int fw_change(struct net *net, struct sk_buff *in_skb,
                     struct tcf_proto *tp, unsigned long base,
                     u32 handle,
                     struct nlattr **tca,
@@ -255,7 +255,7 @@ static int fw_change(struct sk_buff *in_skb,
        if (f != NULL) {
                if (f->id != handle && handle)
                        return -EINVAL;
-               return fw_change_attrs(tp, f, tb, tca, base);
+               return fw_change_attrs(net, tp, f, tb, tca, base);
        }
 
        if (!handle)
@@ -282,7 +282,7 @@ static int fw_change(struct sk_buff *in_skb,
 
        f->id = handle;
 
-       err = fw_change_attrs(tp, f, tb, tca, base);
+       err = fw_change_attrs(net, tp, f, tb, tca, base);
        if (err < 0)
                goto errout;
 
index c10d57bf98f2aa036434633db10a03fa530688da..37da567d833eff8368a3f881e2741e772f19c052 100644 (file)
@@ -335,9 +335,10 @@ static const struct nla_policy route4_policy[TCA_ROUTE4_MAX + 1] = {
        [TCA_ROUTE4_IIF]        = { .type = NLA_U32 },
 };
 
-static int route4_set_parms(struct tcf_proto *tp, unsigned long base,
-       struct route4_filter *f, u32 handle, struct route4_head *head,
-       struct nlattr **tb, struct nlattr *est, int new)
+static int route4_set_parms(struct net *net, struct tcf_proto *tp,
+                           unsigned long base, struct route4_filter *f,
+                           u32 handle, struct route4_head *head,
+                           struct nlattr **tb, struct nlattr *est, int new)
 {
        int err;
        u32 id = 0, to = 0, nhandle = 0x8000;
@@ -346,7 +347,7 @@ static int route4_set_parms(struct tcf_proto *tp, unsigned long base,
        struct route4_bucket *b;
        struct tcf_exts e;
 
-       err = tcf_exts_validate(tp, tb, est, &e, &route_ext_map);
+       err = tcf_exts_validate(net, tp, tb, est, &e, &route_ext_map);
        if (err < 0)
                return err;
 
@@ -427,7 +428,7 @@ errout:
        return err;
 }
 
-static int route4_change(struct sk_buff *in_skb,
+static int route4_change(struct net *net, struct sk_buff *in_skb,
                       struct tcf_proto *tp, unsigned long base,
                       u32 handle,
                       struct nlattr **tca,
@@ -457,7 +458,7 @@ static int route4_change(struct sk_buff *in_skb,
                if (f->bkt)
                        old_handle = f->handle;
 
-               err = route4_set_parms(tp, base, f, handle, head, tb,
+               err = route4_set_parms(net, tp, base, f, handle, head, tb,
                        tca[TCA_RATE], 0);
                if (err < 0)
                        return err;
@@ -480,7 +481,7 @@ static int route4_change(struct sk_buff *in_skb,
        if (f == NULL)
                goto errout;
 
-       err = route4_set_parms(tp, base, f, handle, head, tb,
+       err = route4_set_parms(net, tp, base, f, handle, head, tb,
                tca[TCA_RATE], 1);
        if (err < 0)
                goto errout;
index 494bbb90924a36445d73ef5c921112b685722128..252d8b05872e511f029eab85d2e498ca4eb6d18a 100644 (file)
@@ -416,7 +416,7 @@ static const struct nla_policy rsvp_policy[TCA_RSVP_MAX + 1] = {
        [TCA_RSVP_PINFO]        = { .len = sizeof(struct tc_rsvp_pinfo) },
 };
 
-static int rsvp_change(struct sk_buff *in_skb,
+static int rsvp_change(struct net *net, struct sk_buff *in_skb,
                       struct tcf_proto *tp, unsigned long base,
                       u32 handle,
                       struct nlattr **tca,
@@ -440,7 +440,7 @@ static int rsvp_change(struct sk_buff *in_skb,
        if (err < 0)
                return err;
 
-       err = tcf_exts_validate(tp, tb, tca[TCA_RATE], &e, &rsvp_ext_map);
+       err = tcf_exts_validate(net, tp, tb, tca[TCA_RATE], &e, &rsvp_ext_map);
        if (err < 0)
                return err;
 
index a1293b4ab7a13a38ae2653bc91bf48527cfdee7a..b86535a401695259ab9a765573180c33eb72fe00 100644 (file)
@@ -197,9 +197,10 @@ static const struct nla_policy tcindex_policy[TCA_TCINDEX_MAX + 1] = {
 };
 
 static int
-tcindex_set_parms(struct tcf_proto *tp, unsigned long base, u32 handle,
-                 struct tcindex_data *p, struct tcindex_filter_result *r,
-                 struct nlattr **tb, struct nlattr *est)
+tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base,
+                 u32 handle, struct tcindex_data *p,
+                 struct tcindex_filter_result *r, struct nlattr **tb,
+                struct nlattr *est)
 {
        int err, balloc = 0;
        struct tcindex_filter_result new_filter_result, *old_r = r;
@@ -208,7 +209,7 @@ tcindex_set_parms(struct tcf_proto *tp, unsigned long base, u32 handle,
        struct tcindex_filter *f = NULL; /* make gcc behave */
        struct tcf_exts e;
 
-       err = tcf_exts_validate(tp, tb, est, &e, &tcindex_ext_map);
+       err = tcf_exts_validate(net, tp, tb, est, &e, &tcindex_ext_map);
        if (err < 0)
                return err;
 
@@ -332,7 +333,7 @@ errout:
 }
 
 static int
-tcindex_change(struct sk_buff *in_skb,
+tcindex_change(struct net *net, struct sk_buff *in_skb,
               struct tcf_proto *tp, unsigned long base, u32 handle,
               struct nlattr **tca, unsigned long *arg)
 {
@@ -353,7 +354,8 @@ tcindex_change(struct sk_buff *in_skb,
        if (err < 0)
                return err;
 
-       return tcindex_set_parms(tp, base, handle, p, r, tb, tca[TCA_RATE]);
+       return tcindex_set_parms(net, tp, base, handle, p, r, tb,
+                                tca[TCA_RATE]);
 }
 
 
index c7c27bc91b5af300e74fe8434f7fcedb30635df6..eb07a1e536e6cb6f0b1f44099f130119490e9f52 100644 (file)
@@ -488,15 +488,15 @@ static const struct nla_policy u32_policy[TCA_U32_MAX + 1] = {
        [TCA_U32_MARK]          = { .len = sizeof(struct tc_u32_mark) },
 };
 
-static int u32_set_parms(struct tcf_proto *tp, unsigned long base,
-                        struct tc_u_hnode *ht,
+static int u32_set_parms(struct net *net, struct tcf_proto *tp,
+                        unsigned long base, struct tc_u_hnode *ht,
                         struct tc_u_knode *n, struct nlattr **tb,
                         struct nlattr *est)
 {
        int err;
        struct tcf_exts e;
 
-       err = tcf_exts_validate(tp, tb, est, &e, &u32_ext_map);
+       err = tcf_exts_validate(net, tp, tb, est, &e, &u32_ext_map);
        if (err < 0)
                return err;
 
@@ -544,7 +544,7 @@ errout:
        return err;
 }
 
-static int u32_change(struct sk_buff *in_skb,
+static int u32_change(struct net *net, struct sk_buff *in_skb,
                      struct tcf_proto *tp, unsigned long base, u32 handle,
                      struct nlattr **tca,
                      unsigned long *arg)
@@ -570,7 +570,8 @@ static int u32_change(struct sk_buff *in_skb,
                if (TC_U32_KEY(n->handle) == 0)
                        return -EINVAL;
 
-               return u32_set_parms(tp, base, n->ht_up, n, tb, tca[TCA_RATE]);
+               return u32_set_parms(net, tp, base, n->ht_up, n, tb,
+                                    tca[TCA_RATE]);
        }
 
        if (tb[TCA_U32_DIVISOR]) {
@@ -656,7 +657,7 @@ static int u32_change(struct sk_buff *in_skb,
        }
 #endif
 
-       err = u32_set_parms(tp, base, ht, n, tb, tca[TCA_RATE]);
+       err = u32_set_parms(net, tp, base, ht, n, tb, tca[TCA_RATE]);
        if (err == 0) {
                struct tc_u_knode **ins;
                for (ins = &ht->ht[TC_U32_HASH(handle)]; *ins; ins = &(*ins)->next)