Commit 793d81d6 authored by Alexander Aring's avatar Alexander Aring Committed by David S. Miller
Browse files

net: sched: sch: add extack to change class



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: default avatarJamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: default avatarAlexander Aring <aring@mojatatu.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2030721c
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -158,7 +158,8 @@ struct Qdisc_class_ops {
	/* Class manipulation routines */
	/* Class manipulation routines */
	unsigned long		(*find)(struct Qdisc *, u32 classid);
	unsigned long		(*find)(struct Qdisc *, u32 classid);
	int			(*change)(struct Qdisc *, u32, u32,
	int			(*change)(struct Qdisc *, u32, u32,
					struct nlattr **, unsigned long *);
					struct nlattr **, unsigned long *,
					struct netlink_ext_ack *);
	int			(*delete)(struct Qdisc *, unsigned long);
	int			(*delete)(struct Qdisc *, unsigned long);
	void			(*walk)(struct Qdisc *, struct qdisc_walker * arg);
	void			(*walk)(struct Qdisc *, struct qdisc_walker * arg);


+1 −1
Original line number Original line Diff line number Diff line
@@ -1907,7 +1907,7 @@ static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n,
	new_cl = cl;
	new_cl = cl;
	err = -EOPNOTSUPP;
	err = -EOPNOTSUPP;
	if (cops->change)
	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) {
	if (err == 0) {
		tclass_notify(net, skb, n, q, new_cl, RTM_NEWTCLASS);
		tclass_notify(net, skb, n, q, new_cl, RTM_NEWTCLASS);
		/* We just create a new class, need to do reverse binding. */
		/* We just create a new class, need to do reverse binding. */
+2 −1
Original line number Original line Diff line number Diff line
@@ -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,
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_qdisc_data *p = qdisc_priv(sch);
	struct atm_flow_data *flow = (struct atm_flow_data *)*arg;
	struct atm_flow_data *flow = (struct atm_flow_data *)*arg;
+1 −1
Original line number Original line Diff line number Diff line
@@ -1452,7 +1452,7 @@ static void cbq_destroy(struct Qdisc *sch)


static int
static int
cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **tca,
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;
	int err;
	struct cbq_sched_data *q = qdisc_priv(sch);
	struct cbq_sched_data *q = qdisc_priv(sch);
+2 −1
Original line number Original line Diff line number Diff line
@@ -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,
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_sched *q = qdisc_priv(sch);
	struct drr_class *cl = (struct drr_class *)*arg;
	struct drr_class *cl = (struct drr_class *)*arg;
Loading