From: Thomas Graf <tgraf@suug.ch>
To: "David S. Miller" <davem@davemloft.net>
Cc: netdev@oss.sgi.com, hadi@cyberus.ca
Subject: [PATCH 7/8] police: use gnet_stats for old policer stats
Date: Wed, 3 Nov 2004 23:02:36 +0100 [thread overview]
Message-ID: <20041103220236.GH12289@postel.suug.ch> (raw)
In-Reply-To: <20041103215816.GA12289@postel.suug.ch>
Transforms old policer to use generic statistic via TCA_STATS2
and maintain backward compatibility via TCA_STATS. Adds a new
API for classifiers to invoke the dumping process.
Signed-off-by: Thomas Graf <tgraf@suug.ch>
diff -Nru linux-2.6.10-rc1-bk13.orig/include/net/act_api.h linux-2.6.10-rc1-bk13/include/net/act_api.h
--- linux-2.6.10-rc1-bk13.orig/include/net/act_api.h 2004-11-03 17:04:58.000000000 +0100
+++ linux-2.6.10-rc1-bk13/include/net/act_api.h 2004-11-03 17:04:44.000000000 +0100
@@ -28,7 +28,9 @@
struct qdisc_rate_table *R_tab;
struct qdisc_rate_table *P_tab;
- struct tc_stats stats;
+ struct gnet_stats_basic bstats;
+ struct gnet_stats_queue qstats;
+ struct gnet_stats_rate_est rate_est;
spinlock_t *stats_lock;
};
@@ -101,6 +103,7 @@
extern void tcf_police_destroy(struct tcf_police *p);
extern struct tcf_police * tcf_police_locate(struct rtattr *rta, struct rtattr *est);
extern int tcf_police_dump(struct sk_buff *skb, struct tcf_police *p);
+extern int tcf_police_dump_stats(struct sk_buff *skb, struct tcf_police *p);
static inline int
tcf_police_release(struct tcf_police *p, int bind)
diff -Nru linux-2.6.10-rc1-bk13.orig/net/sched/police.c linux-2.6.10-rc1-bk13/net/sched/police.c
--- linux-2.6.10-rc1-bk13.orig/net/sched/police.c 2004-11-03 17:05:10.000000000 +0100
+++ linux-2.6.10-rc1-bk13/net/sched/police.c 2004-11-03 17:04:44.000000000 +0100
@@ -149,7 +149,7 @@
*p1p = p->next;
write_unlock_bh(&police_lock);
#ifdef CONFIG_NET_ESTIMATOR
- qdisc_kill_estimator(&p->stats);
+ gen_kill_estimator(&p->bstats, &p->rate_est);
#endif
if (p->R_tab)
qdisc_put_rtab(p->R_tab);
@@ -469,7 +469,7 @@
p->action = parm->action;
#ifdef CONFIG_NET_ESTIMATOR
if (est)
- qdisc_new_estimator(&p->stats, p->stats_lock, est);
+ gen_new_estimator(&p->bstats, &p->rate_est, p->stats_lock, est);
#endif
h = tcf_police_hash(p->index);
write_lock_bh(&police_lock);
@@ -493,12 +493,12 @@
spin_lock(&p->lock);
- p->stats.bytes += skb->len;
- p->stats.packets++;
+ p->bstats.bytes += skb->len;
+ p->bstats.packets++;
#ifdef CONFIG_NET_ESTIMATOR
- if (p->ewma_rate && p->stats.bps >= p->ewma_rate) {
- p->stats.overlimits++;
+ if (p->ewma_rate && p->rate_est.bps >= p->ewma_rate) {
+ p->qstats.overlimits++;
spin_unlock(&p->lock);
return p->action;
}
@@ -534,7 +534,7 @@
}
}
- p->stats.overlimits++;
+ p->qstats.overlimits++;
spin_unlock(&p->lock);
return p->action;
}
@@ -570,9 +570,34 @@
return -1;
}
+int tcf_police_dump_stats(struct sk_buff *skb, struct tcf_police *p)
+{
+ struct gnet_dump d;
+
+ if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS,
+ TCA_XSTATS, p->stats_lock, &d) < 0)
+
+ if (gnet_stats_copy_basic(&d, &p->bstats) < 0 ||
+#ifdef CONFIG_NET_ESTIMATOR
+ gnet_stats_copy_rate_est(&d, &p->rate_est) < 0 ||
+#endif
+ gnet_stats_copy_queue(&d, &p->qstats) < 0)
+ goto errout;
+
+ if (gnet_stats_finish_copy(&d) < 0)
+ goto errout;
+
+ return 0;
+
+errout:
+ return -1;
+}
+
+
EXPORT_SYMBOL(tcf_police);
EXPORT_SYMBOL(tcf_police_destroy);
EXPORT_SYMBOL(tcf_police_dump);
+EXPORT_SYMBOL(tcf_police_dump_stats);
EXPORT_SYMBOL(tcf_police_hash);
EXPORT_SYMBOL(tcf_police_ht);
EXPORT_SYMBOL(tcf_police_locate);
next prev parent reply other threads:[~2004-11-03 22:02 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-03 21:58 [PATCHSET 0/8] PKT_SCHED: Use gnet_stats for actions and policer Thomas Graf
2004-11-03 21:59 ` [PATCH 1/8] tcf_action: copy generic stats via TCA_ACT_STATS Thomas Graf
2004-11-03 21:59 ` [PATCH 2/8] gact: use gnet_stats for action stats Thomas Graf
2004-11-03 22:00 ` [PATCH 3/8] ipt: " Thomas Graf
2004-11-03 22:01 ` [PATCH 4/8] mirred: " Thomas Graf
2004-11-03 22:01 ` [PATCH 5/8] pedit: " Thomas Graf
2004-11-03 22:02 ` [PATCH 6/8] police: use gnet_stats for action policer stats Thomas Graf
2004-11-03 22:02 ` Thomas Graf [this message]
2004-11-03 22:03 ` [PATCH 8/8] cls_*: use tcf_police_dump_stats to dump via new gnet_stats API Thomas Graf
2004-11-03 22:18 ` [PATCHSET 0/8] PKT_SCHED: Use gnet_stats for actions and policer David S. Miller
2004-11-04 0:43 ` Thomas Graf
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=20041103220236.GH12289@postel.suug.ch \
--to=tgraf@suug.ch \
--cc=davem@davemloft.net \
--cc=hadi@cyberus.ca \
--cc=netdev@oss.sgi.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).