net: sched: sch: add extack to change class
authorAlexander Aring <aring@mojatatu.com>
Wed, 20 Dec 2017 17:35:15 +0000 (12:35 -0500)
committerDavid S. Miller <davem@davemloft.net>
Thu, 21 Dec 2017 17:32:50 +0000 (12:32 -0500)
This patch adds extack support for class change callback api. This prepares
to handle extack support inside each specific class implementation.

Cc: David Ahern <dsahern@gmail.com>
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Alexander Aring <aring@mojatatu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/sch_generic.h
net/sched/sch_api.c
net/sched/sch_atm.c
net/sched/sch_cbq.c
net/sched/sch_drr.c
net/sched/sch_dsmark.c
net/sched/sch_fq_codel.c
net/sched/sch_hfsc.c
net/sched/sch_htb.c
net/sched/sch_qfq.c
net/sched/sch_sfb.c

index e7a3e206b904bd5268e2346678f00468d1644e9b..b4660a3ea99cd101380de4580fa4ef51c7454551 100644 (file)
@@ -158,7 +158,8 @@ struct Qdisc_class_ops {
        /* Class manipulation routines */
        unsigned long           (*find)(struct Qdisc *, u32 classid);
        int                     (*change)(struct Qdisc *, u32, u32,
-                                       struct nlattr **, unsigned long *);
+                                       struct nlattr **, unsigned long *,
+                                       struct netlink_ext_ack *);
        int                     (*delete)(struct Qdisc *, unsigned long);
        void                    (*walk)(struct Qdisc *, struct qdisc_walker * arg);
 
index fcc70415fd26cdfa9369ef0d9c560beaa040287c..6cf2f7dadbdbd3043bde24a53104616581697620 100644 (file)
@@ -1907,7 +1907,7 @@ static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n,
        new_cl = cl;
        err = -EOPNOTSUPP;
        if (cops->change)
-               err = cops->change(q, clid, portid, tca, &new_cl);
+               err = cops->change(q, clid, portid, tca, &new_cl, extack);
        if (err == 0) {
                tclass_notify(net, skb, n, q, new_cl, RTM_NEWTCLASS);
                /* We just create a new class, need to do reverse binding. */
index 53a07687c0fbc7f8a8fdff40e1b376d3b69d27a1..80ada9affe816a73e8a63fcfb2094715729040b2 100644 (file)
@@ -191,7 +191,8 @@ static const struct nla_policy atm_policy[TCA_ATM_MAX + 1] = {
 };
 
 static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent,
-                        struct nlattr **tca, unsigned long *arg)
+                        struct nlattr **tca, unsigned long *arg,
+                        struct netlink_ext_ack *extack)
 {
        struct atm_qdisc_data *p = qdisc_priv(sch);
        struct atm_flow_data *flow = (struct atm_flow_data *)*arg;
index 86eba01457f37ba504d14a72d6da8bb6a6e42aba..8f1832df8b4f9187325d9fdeb2327afb5cb2806c 100644 (file)
@@ -1452,7 +1452,7 @@ static void cbq_destroy(struct Qdisc *sch)
 
 static int
 cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **tca,
-                unsigned long *arg)
+                unsigned long *arg, struct netlink_ext_ack *extack)
 {
        int err;
        struct cbq_sched_data *q = qdisc_priv(sch);
index 1a88473cd768254277d971e420ab77da90af079f..73b914bc47a4ccebdd3145c2b6d69dd2f0139151 100644 (file)
@@ -64,7 +64,8 @@ static const struct nla_policy drr_policy[TCA_DRR_MAX + 1] = {
 };
 
 static int drr_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
-                           struct nlattr **tca, unsigned long *arg)
+                           struct nlattr **tca, unsigned long *arg,
+                           struct netlink_ext_ack *extack)
 {
        struct drr_sched *q = qdisc_priv(sch);
        struct drr_class *cl = (struct drr_class *)*arg;
index 16dd480b5583c79e183c9d1d3bda22790f083654..89e433bbd590d01334b93426311c17622b27871c 100644 (file)
@@ -112,7 +112,8 @@ static const struct nla_policy dsmark_policy[TCA_DSMARK_MAX + 1] = {
 };
 
 static int dsmark_change(struct Qdisc *sch, u32 classid, u32 parent,
-                        struct nlattr **tca, unsigned long *arg)
+                        struct nlattr **tca, unsigned long *arg,
+                        struct netlink_ext_ack *extack)
 {
        struct dsmark_qdisc_data *p = qdisc_priv(sch);
        struct nlattr *opt = tca[TCA_OPTIONS];
index d798c93f7c9669247596014303658c540427667c..b4ca46aafb5af303db5072207e1313a6b4d041e0 100644 (file)
@@ -479,7 +479,7 @@ static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt,
        q->cparams.mtu = psched_mtu(qdisc_dev(sch));
 
        if (opt) {
-               int err = fq_codel_change(sch, opt, NULL);
+               int err = fq_codel_change(sch, opt, extack);
                if (err)
                        return err;
        }
index f49a4a4fe09596bee3c0729d3a6c3c97f6906cb9..11410b0e40681911ee55162f6c938d1d916fa9fd 100644 (file)
@@ -921,7 +921,8 @@ static const struct nla_policy hfsc_policy[TCA_HFSC_MAX + 1] = {
 
 static int
 hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
-                 struct nlattr **tca, unsigned long *arg)
+                 struct nlattr **tca, unsigned long *arg,
+                 struct netlink_ext_ack *extack)
 {
        struct hfsc_sched *q = qdisc_priv(sch);
        struct hfsc_class *cl = (struct hfsc_class *)*arg;
index 41d9b7da9273b564a1971b28c94c088db496fbe5..eb535a23a69bd6cc01bffbc45cce18c4fc077120 100644 (file)
@@ -1327,7 +1327,7 @@ static int htb_delete(struct Qdisc *sch, unsigned long arg)
 
 static int htb_change_class(struct Qdisc *sch, u32 classid,
                            u32 parentid, struct nlattr **tca,
-                           unsigned long *arg)
+                           unsigned long *arg, struct netlink_ext_ack *extack)
 {
        int err = -EINVAL;
        struct htb_sched *q = qdisc_priv(sch);
index 7c1b976314bd82d7bdc2e80707af545e6bb6dc88..1f4a84b687d2f6ae69367f420bd289c61a030918 100644 (file)
@@ -402,7 +402,8 @@ static int qfq_change_agg(struct Qdisc *sch, struct qfq_class *cl, u32 weight,
 }
 
 static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
-                           struct nlattr **tca, unsigned long *arg)
+                           struct nlattr **tca, unsigned long *arg,
+                           struct netlink_ext_ack *extack)
 {
        struct qfq_sched *q = qdisc_priv(sch);
        struct qfq_class *cl = (struct qfq_class *)*arg;
index 1b9d69bd6ed675dbb80c6e6c5f2b253be4b14173..d70d470361be76a338ad439a5bd4892c25c10676 100644 (file)
@@ -645,7 +645,8 @@ static void sfb_unbind(struct Qdisc *sch, unsigned long arg)
 }
 
 static int sfb_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
-                           struct nlattr **tca, unsigned long *arg)
+                           struct nlattr **tca, unsigned long *arg,
+                           struct netlink_ext_ack *extack)
 {
        return -ENOSYS;
 }