From: Patrick McHardy <kaber@trash.net>
To: davem@davemloft.net
Cc: netdev@vger.kernel.org, shemminger@vyatta.com,
Patrick McHardy <kaber@trash.net>
Subject: [NET_SCHED 03/04]: sch_sfq: make internal queues visible as classes
Date: Thu, 31 Jan 2008 18:58:06 +0100 (MET) [thread overview]
Message-ID: <20080131175802.25151.33423.sendpatchset@localhost.localdomain> (raw)
In-Reply-To: <20080131175758.25151.20370.sendpatchset@localhost.localdomain>
[NET_SCHED]: sch_sfq: make internal queues visible as classes
Add support for dumping statistics and make internal queues visible
as classes.
Signed-off-by: Patrick McHardy <kaber@trash.net>
---
commit 7a281f8ef334a35d699682315e9f80a3e006376c
tree 0a2cbd55e22f1913e9cf0cc28da2956952110243
parent 6049892cc4acca9af393e134e4cdaf6b3e1ccad9
author Patrick McHardy <kaber@trash.net> Wed, 30 Jan 2008 21:59:29 +0100
committer Patrick McHardy <kaber@trash.net> Thu, 31 Jan 2008 18:52:56 +0100
include/linux/pkt_sched.h | 5 +++++
net/sched/sch_sfq.c | 41 ++++++++++++++++++++++++++++++++++++++++-
2 files changed, 45 insertions(+), 1 deletions(-)
diff --git a/include/linux/pkt_sched.h b/include/linux/pkt_sched.h
index 3276135..dbb7ac3 100644
--- a/include/linux/pkt_sched.h
+++ b/include/linux/pkt_sched.h
@@ -150,6 +150,11 @@ struct tc_sfq_qopt
unsigned flows; /* Maximal number of flows */
};
+struct tc_sfq_xstats
+{
+ __s32 allot;
+};
+
/*
* NOTE: limit, divisor and flows are hardwired to code at the moment.
*
diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
index d818d19..a20e2ef 100644
--- a/net/sched/sch_sfq.c
+++ b/net/sched/sch_sfq.c
@@ -566,15 +566,54 @@ static struct tcf_proto **sfq_find_tcf(struct Qdisc *sch, unsigned long cl)
return &q->filter_list;
}
+static int sfq_dump_class(struct Qdisc *sch, unsigned long cl,
+ struct sk_buff *skb, struct tcmsg *tcm)
+{
+ tcm->tcm_handle |= TC_H_MIN(cl);
+ return 0;
+}
+
+static int sfq_dump_class_stats(struct Qdisc *sch, unsigned long cl,
+ struct gnet_dump *d)
+{
+ struct sfq_sched_data *q = qdisc_priv(sch);
+ sfq_index idx = q->ht[cl-1];
+ struct gnet_stats_queue qs = { .qlen = q->qs[idx].qlen };
+ struct tc_sfq_xstats xstats = { .allot = q->allot[idx] };
+
+ if (gnet_stats_copy_queue(d, &qs) < 0)
+ return -1;
+ return gnet_stats_copy_app(d, &xstats, sizeof(xstats));
+}
+
static void sfq_walk(struct Qdisc *sch, struct qdisc_walker *arg)
{
- return;
+ struct sfq_sched_data *q = qdisc_priv(sch);
+ unsigned int i;
+
+ if (arg->stop)
+ return;
+
+ for (i = 0; i < SFQ_HASH_DIVISOR; i++) {
+ if (q->ht[i] == SFQ_DEPTH ||
+ arg->count < arg->skip) {
+ arg->count++;
+ continue;
+ }
+ if (arg->fn(sch, i + 1, arg) < 0) {
+ arg->stop = 1;
+ break;
+ }
+ arg->count++;
+ }
}
static const struct Qdisc_class_ops sfq_class_ops = {
.get = sfq_get,
.change = sfq_change_class,
.tcf_chain = sfq_find_tcf,
+ .dump = sfq_dump_class,
+ .dump_stats = sfq_dump_class_stats,
.walk = sfq_walk,
};
next prev parent reply other threads:[~2008-01-31 17:58 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-31 17:58 [NET_SCHED 00/04]: External SFQ classifiers/flow classifier Patrick McHardy
2008-01-31 17:58 ` [NET_SCHED 01/04]: Constify struct tcf_ext_map Patrick McHardy
2008-01-31 17:58 ` [NET_SCHED 02/04]: sch_sfq: add support for external classifiers Patrick McHardy
2008-01-31 17:58 ` Patrick McHardy [this message]
2008-01-31 17:58 ` [NET_SCHED 04/04]: Add flow classifier Patrick McHardy
2008-02-01 2:37 ` [NET_SCHED 00/04]: External SFQ classifiers/flow classifier David Miller
2008-02-02 23:23 ` Corey Hickey
2008-02-04 17:48 ` Patrick McHardy
2008-02-04 18:25 ` Corey Hickey
2008-03-29 23:35 ` Andy Furniss
2008-04-01 12:39 ` Patrick McHardy
2008-04-01 19:04 ` Andy Furniss
2008-04-02 11:42 ` Andy Furniss
2008-04-02 12:37 ` Patrick McHardy
2008-04-02 16:26 ` Andy Furniss
2008-04-04 10:42 ` Andy Furniss
2008-04-04 10:45 ` Patrick McHardy
2008-04-04 17:01 ` Andy Furniss
2008-04-04 18:54 ` Andy Furniss
2008-04-07 13:43 ` Andy Furniss
2008-04-07 13:44 ` Patrick McHardy
2008-04-07 15:14 ` Andy Furniss
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080131175802.25151.33423.sendpatchset@localhost.localdomain \
--to=kaber@trash.net \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=shemminger@vyatta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).