[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20191225190418.8806-9-lesliemonis@gmail.com>
Date: Thu, 26 Dec 2019 00:34:16 +0530
From: Leslie Monis <lesliemonis@...il.com>
To: Linux NetDev <netdev@...r.kernel.org>
Cc: David Ahern <dsahern@...il.com>,
Stephen Hemminger <stephen@...workplumber.org>
Subject: [PATCH iproute2-next 08/10] tc: sfq: add support for JSON output
Enable proper JSON output for the SFQ Qdisc.
Use the long double format specifier to print the value of
"probability".
Also, fix the indentation in the online output of the contents in the
tc_sfqred_stats structure.
Signed-off-by: Leslie Monis <lesliemonis@...il.com>
---
tc/q_sfq.c | 66 ++++++++++++++++++++++++++++++++++--------------------
1 file changed, 42 insertions(+), 24 deletions(-)
diff --git a/tc/q_sfq.c b/tc/q_sfq.c
index 4998921d..2b9bbcd2 100644
--- a/tc/q_sfq.c
+++ b/tc/q_sfq.c
@@ -217,35 +217,53 @@ static int sfq_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
if (RTA_PAYLOAD(opt) >= sizeof(*qopt_ext))
qopt_ext = RTA_DATA(opt);
qopt = RTA_DATA(opt);
- fprintf(f, "limit %up ", qopt->limit);
- fprintf(f, "quantum %s ", sprint_size(qopt->quantum, b1));
+
+ print_uint(PRINT_ANY, "limit", "limit %up ", qopt->limit);
+ print_uint(PRINT_JSON, "quantum", NULL, qopt->quantum);
+ print_string(PRINT_FP, NULL, "quantum %s ",
+ sprint_size(qopt->quantum, b1));
+
if (qopt_ext && qopt_ext->depth)
- fprintf(f, "depth %u ", qopt_ext->depth);
+ print_uint(PRINT_ANY, "depth", "depth %u ", qopt_ext->depth);
if (qopt_ext && qopt_ext->headdrop)
- fprintf(f, "headdrop ");
+ print_bool(PRINT_ANY, "headdrop", "headdrop ", true);
+ if (show_details)
+ print_uint(PRINT_ANY, "flows", "flows %u ", qopt->flows);
+
+ print_uint(PRINT_ANY, "divisor", "divisor %u ", qopt->divisor);
- if (show_details) {
- fprintf(f, "flows %u/%u ", qopt->flows, qopt->divisor);
- }
- fprintf(f, "divisor %u ", qopt->divisor);
if (qopt->perturb_period)
- fprintf(f, "perturb %dsec ", qopt->perturb_period);
+ print_int(PRINT_ANY, "perturb", "perturb %dsec ",
+ qopt->perturb_period);
if (qopt_ext && qopt_ext->qth_min) {
- fprintf(f, "\n ewma %u ", qopt_ext->Wlog);
- fprintf(f, "min %s max %s probability %g ",
- sprint_size(qopt_ext->qth_min, b2),
- sprint_size(qopt_ext->qth_max, b3),
- qopt_ext->max_P / pow(2, 32));
+ print_uint(PRINT_ANY, "ewma", "ewma %u ", qopt_ext->Wlog);
+ print_uint(PRINT_JSON, "min", NULL, qopt_ext->qth_min);
+ print_string(PRINT_FP, NULL, "min %s ",
+ sprint_size(qopt_ext->qth_min, b2));
+ print_uint(PRINT_JSON, "max", NULL, qopt_ext->qth_max);
+ print_string(PRINT_FP, NULL, "max %s ",
+ sprint_size(qopt_ext->qth_max, b3));
+ print_float(PRINT_ANY, "probability", "probability %lg ",
+ qopt_ext->max_P / pow(2, 32));
tc_red_print_flags(qopt_ext->flags);
if (show_stats) {
- fprintf(f, "\n prob_mark %u prob_mark_head %u prob_drop %u",
- qopt_ext->stats.prob_mark,
- qopt_ext->stats.prob_mark_head,
- qopt_ext->stats.prob_drop);
- fprintf(f, "\n forced_mark %u forced_mark_head %u forced_drop %u",
- qopt_ext->stats.forced_mark,
- qopt_ext->stats.forced_mark_head,
- qopt_ext->stats.forced_drop);
+ print_nl();
+ print_uint(PRINT_ANY, "prob_mark", " prob_mark %u",
+ qopt_ext->stats.prob_mark);
+ print_uint(PRINT_ANY, "prob_mark_head",
+ " prob_mark_head %u",
+ qopt_ext->stats.prob_mark_head);
+ print_uint(PRINT_ANY, "prob_drop", " prob_drop %u",
+ qopt_ext->stats.prob_drop);
+ print_nl();
+ print_uint(PRINT_ANY, "forced_mark",
+ " forced_mark %u",
+ qopt_ext->stats.forced_mark);
+ print_uint(PRINT_ANY, "forced_mark_head",
+ " forced_mark_head %u",
+ qopt_ext->stats.forced_mark_head);
+ print_uint(PRINT_ANY, "forced_drop", " forced_drop %u",
+ qopt_ext->stats.forced_drop);
}
}
return 0;
@@ -262,8 +280,8 @@ static int sfq_print_xstats(struct qdisc_util *qu, FILE *f,
return -1;
st = RTA_DATA(xstats);
- fprintf(f, " allot %d ", st->allot);
- fprintf(f, "\n");
+ print_int(PRINT_ANY, "allot", " allot %d", st->allot);
+
return 0;
}
--
2.17.1
Powered by blists - more mailing lists