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

Commit 60ba24a3 authored by Tianyi Gou's avatar Tianyi Gou Committed by Stephen Boyd
Browse files

net: sched: export an api to enable/disable flow on sch



Export a function from sch_api.c that will look up
desired qdisc and call it's registered change function
to enable/disable flow.

Change-Id: I5b6dc7a6fd2b09b796c92b3770ba83423d19c864
CRs-Fixed: 355156
Acked-by: default avatarJimi Shah <jimis@qualcomm.com>
Signed-off-by: default avatarTianyi Gou <tgou@codeaurora.org>
parent 3fcdaed4
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -109,7 +109,8 @@ extern int tc_classify_compat(struct sk_buff *skb, const struct tcf_proto *tp,
			      struct tcf_result *res);
extern int tc_classify(struct sk_buff *skb, const struct tcf_proto *tp,
		       struct tcf_result *res);

extern void tc_qdisc_flow_control(struct net_device *dev, u32 tcm_handle,
				  int flow_enable);
/* Calculate maximal size of packet seen by hard_start_xmit
   routine of this device.
 */
+29 −0
Original line number Diff line number Diff line
@@ -1036,6 +1036,35 @@ static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n)
	return 0;
}

/*
 * enable/disable flow on qdisc.
 */
void
tc_qdisc_flow_control(struct net_device *dev, u32 tcm_handle, int enable_flow)
{
	struct Qdisc *q;
	struct __qdisc_change_req {
		struct nlattr attr;
		struct tc_prio_qopt data;
	} req =	{
		.attr = {sizeof(struct __qdisc_change_req), TCA_OPTIONS},
		.data = {3, {1, 2, 2, 2, 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1}, 1}
		};

	/* override flow bit */
	req.data.enable_flow = enable_flow;

	/* look up using tcm handle */
	q = qdisc_lookup(dev, tcm_handle);

	/* call registered change function */
	if (q) {
		if (q->ops->change(q, &(req.attr)) != 0)
			pr_err("tc_qdisc_flow_control: qdisc change failed");
	}
}
EXPORT_SYMBOL(tc_qdisc_flow_control);

/*
 * Create/change qdisc.
 */