All of lore.kernel.org
 help / color / mirror / Atom feed
* [iproute2 0/3] Adding json support for showing htb&tbf classes
@ 2019-05-06 16:18 Nir Weiner
  2019-05-06 16:18 ` [iproute2 1/3] tc: jsonify htb qdisc parameters Nir Weiner
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Nir Weiner @ 2019-05-06 16:18 UTC (permalink / raw)
  To: netdev; +Cc: liran.alon, nir.weiner

Adding a json support for running the command 
tc -j class show dev <dev> 
for the htb kind and the tbf kind

Nir Weiner (3):
  tc: jsonify htb qdisc parameters
  tc: jsonify tbf qdisc parameters
  tc: jsonify class core

 tc/q_htb.c    | 19 ++++++++++---------
 tc/q_tbf.c    | 20 ++++++++++----------
 tc/tc_class.c | 29 +++++++++++++++++++----------
 3 files changed, 39 insertions(+), 29 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [iproute2 1/3] tc: jsonify htb qdisc parameters
  2019-05-06 16:18 [iproute2 0/3] Adding json support for showing htb&tbf classes Nir Weiner
@ 2019-05-06 16:18 ` Nir Weiner
  2019-05-06 16:18 ` [iproute2 2/3] tc: jsonify tbf " Nir Weiner
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Nir Weiner @ 2019-05-06 16:18 UTC (permalink / raw)
  To: netdev; +Cc: liran.alon, nir.weiner

Add json output to htb qdisc parameters.

Fixes: f354fa6aa5ff05dd214a595e5159ef93a6ab1934
Acked-by: John Haxby <john.haxby@oracle.com>
Reviewed-by: Liran Alon <liran.alon@oracle.com>
Signed-off-by: Nir Weiner <nir.weiner@oracle.com>
---
 tc/q_htb.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/tc/q_htb.c b/tc/q_htb.c
index 520522266e00..0e0f479d423f 100644
--- a/tc/q_htb.c
+++ b/tc/q_htb.c
@@ -299,16 +299,16 @@ static int htb_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
 		    RTA_PAYLOAD(tb[TCA_HTB_CEIL64]) >= sizeof(ceil64))
 			ceil64 = rta_getattr_u64(tb[TCA_HTB_CEIL64]);
 
-		fprintf(f, "rate %s ", sprint_rate(rate64, b1));
+		print_string(PRINT_ANY, "rate", "rate %s ", sprint_rate(rate64, b1));
 		if (hopt->rate.overhead)
-			fprintf(f, "overhead %u ", hopt->rate.overhead);
+			print_uint(PRINT_ANY, "overhead", "overhead %u ", hopt->rate.overhead);
 		buffer = tc_calc_xmitsize(rate64, hopt->buffer);
 
-		fprintf(f, "ceil %s ", sprint_rate(ceil64, b1));
+		print_string(PRINT_ANY, "ceil", "ceil %s ", sprint_rate(ceil64, b1));
 		cbuffer = tc_calc_xmitsize(ceil64, hopt->cbuffer);
 		linklayer = (hopt->rate.linklayer & TC_LINKLAYER_MASK);
 		if (linklayer > TC_LINKLAYER_ETHERNET || show_details)
-			fprintf(f, "linklayer %s ", sprint_linklayer(linklayer, b3));
+			print_string(PRINT_ANY, "linklayer", "linklayer %s ", sprint_linklayer(linklayer, b3));
 		if (show_details) {
 			fprintf(f, "burst %s/%u mpu %s ",
 				sprint_size(buffer, b1),
@@ -320,12 +320,13 @@ static int htb_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
 				sprint_size(hopt->ceil.mpu, b2));
 			fprintf(f, "level %d ", (int)hopt->level);
 		} else {
-			fprintf(f, "burst %s ", sprint_size(buffer, b1));
-			fprintf(f, "cburst %s ", sprint_size(cbuffer, b1));
+			print_string(PRINT_ANY, "burst", "burst %s ", sprint_size(buffer, b1));
+			print_string(PRINT_ANY, "cburst", "cburst %s ", sprint_size(cbuffer, b1));
+		}
+		if (show_raw) {
+			print_0xhex(PRINT_ANY, "buffer", "buffer [%08x] ", hopt->buffer);
+			print_0xhex(PRINT_ANY, "cbuffer", "cbuffer [%08x] ", hopt->cbuffer);
 		}
-		if (show_raw)
-			fprintf(f, "buffer [%08x] cbuffer [%08x] ",
-				hopt->buffer, hopt->cbuffer);
 	}
 	if (tb[TCA_HTB_INIT]) {
 		gopt = RTA_DATA(tb[TCA_HTB_INIT]);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [iproute2 2/3] tc: jsonify tbf qdisc parameters
  2019-05-06 16:18 [iproute2 0/3] Adding json support for showing htb&tbf classes Nir Weiner
  2019-05-06 16:18 ` [iproute2 1/3] tc: jsonify htb qdisc parameters Nir Weiner
@ 2019-05-06 16:18 ` Nir Weiner
  2019-05-17 17:35   ` David Ahern
  2019-05-06 16:18 ` [iproute2 3/3] tc: jsonify class core Nir Weiner
  2019-05-06 16:22 ` [iproute2 0/3] Adding json support for showing htb&tbf classes Stephen Hemminger
  3 siblings, 1 reply; 7+ messages in thread
From: Nir Weiner @ 2019-05-06 16:18 UTC (permalink / raw)
  To: netdev; +Cc: liran.alon, nir.weiner

Add json output to tbf qdisc parameters.

Acked-by: John Haxby <john.haxby@oracle.com>
Signed-off-by: Nir Weiner <nir.weiner@oracle.com>
Suggested-by: Liran Alon <liran.alon@oracle.com>
---
 tc/q_tbf.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/tc/q_tbf.c b/tc/q_tbf.c
index b9465b20d2be..fd824e67e4f2 100644
--- a/tc/q_tbf.c
+++ b/tc/q_tbf.c
@@ -285,32 +285,32 @@ static int tbf_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
 	if (tb[TCA_TBF_RATE64] &&
 	    RTA_PAYLOAD(tb[TCA_TBF_RATE64]) >= sizeof(rate64))
 		rate64 = rta_getattr_u64(tb[TCA_TBF_RATE64]);
-	fprintf(f, "rate %s ", sprint_rate(rate64, b1));
+	print_string(PRINT_ANY, "rate", "rate %s ", sprint_rate(rate64, b1));
 	buffer = tc_calc_xmitsize(rate64, qopt->buffer);
 	if (show_details) {
 		fprintf(f, "burst %s/%u mpu %s ", sprint_size(buffer, b1),
 			1<<qopt->rate.cell_log, sprint_size(qopt->rate.mpu, b2));
 	} else {
-		fprintf(f, "burst %s ", sprint_size(buffer, b1));
+		print_string(PRINT_ANY, "burst", "burst %s ", sprint_size(buffer, b1));
 	}
 	if (show_raw)
-		fprintf(f, "[%08x] ", qopt->buffer);
+		print_0xhex(PRINT_ANY, "buffer", "[%08x] ", qopt->buffer);
 	prate64 = qopt->peakrate.rate;
 	if (tb[TCA_TBF_PRATE64] &&
 	    RTA_PAYLOAD(tb[TCA_TBF_PRATE64]) >= sizeof(prate64))
 		prate64 = rta_getattr_u64(tb[TCA_TBF_PRATE64]);
 	if (prate64) {
-		fprintf(f, "peakrate %s ", sprint_rate(prate64, b1));
+		print_string(PRINT_ANY, "peakrate", "peakrate %s ", sprint_rate(prate64, b1));
 		if (qopt->mtu || qopt->peakrate.mpu) {
 			mtu = tc_calc_xmitsize(prate64, qopt->mtu);
 			if (show_details) {
 				fprintf(f, "mtu %s/%u mpu %s ", sprint_size(mtu, b1),
 					1<<qopt->peakrate.cell_log, sprint_size(qopt->peakrate.mpu, b2));
 			} else {
-				fprintf(f, "minburst %s ", sprint_size(mtu, b1));
+				print_string(PRINT_ANY, "minburst", "minburst %s ", sprint_size(mtu, b1));
 			}
 			if (show_raw)
-				fprintf(f, "[%08x] ", qopt->mtu);
+				print_0xhex(PRINT_ANY, "mtu", "[%08x] ", qopt->mtu);
 		}
 	}
 
@@ -322,16 +322,16 @@ static int tbf_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
 			latency = lat2;
 	}
 	if (latency >= 0.0)
-		fprintf(f, "lat %s ", sprint_time(latency, b1));
+		print_string(PRINT_ANY, "lat", "lat %s ", sprint_time(latency, b1));
 	if (show_raw || latency < 0.0)
-		fprintf(f, "limit %s ", sprint_size(qopt->limit, b1));
+		print_string(PRINT_ANY, "limit", "limit %s ", sprint_size(qopt->limit, b1));
 
 	if (qopt->rate.overhead) {
-		fprintf(f, "overhead %d", qopt->rate.overhead);
+		print_int(PRINT_ANY, "overhead", "overhead %d", qopt->rate.overhead);
 	}
 	linklayer = (qopt->rate.linklayer & TC_LINKLAYER_MASK);
 	if (linklayer > TC_LINKLAYER_ETHERNET || show_details)
-		fprintf(f, "linklayer %s ", sprint_linklayer(linklayer, b3));
+		print_string(PRINT_ANY, "linklayer", "linklayer %s ", sprint_linklayer(linklayer, b3));
 
 	return 0;
 }
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [iproute2 3/3] tc: jsonify class core
  2019-05-06 16:18 [iproute2 0/3] Adding json support for showing htb&tbf classes Nir Weiner
  2019-05-06 16:18 ` [iproute2 1/3] tc: jsonify htb qdisc parameters Nir Weiner
  2019-05-06 16:18 ` [iproute2 2/3] tc: jsonify tbf " Nir Weiner
@ 2019-05-06 16:18 ` Nir Weiner
  2019-05-06 16:22 ` [iproute2 0/3] Adding json support for showing htb&tbf classes Stephen Hemminger
  3 siblings, 0 replies; 7+ messages in thread
From: Nir Weiner @ 2019-05-06 16:18 UTC (permalink / raw)
  To: netdev; +Cc: liran.alon, nir.weiner

Add json output to class core.

Acked-by: John Haxby <john.haxby@oracle.com>
Reviewed-by: Liran Alon <liran.alon@oracle.com>
Signed-off-by: Nir Weiner <nir.weiner@oracle.com>
---
 tc/tc_class.c | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/tc/tc_class.c b/tc/tc_class.c
index 7ac700d7ab31..68627f4fcc70 100644
--- a/tc/tc_class.c
+++ b/tc/tc_class.c
@@ -333,8 +333,10 @@ int print_class(struct nlmsghdr *n, void *arg)
 		return -1;
 	}
 
+	open_json_object(NULL);
+
 	if (n->nlmsg_type == RTM_DELTCLASS)
-		fprintf(fp, "deleted ");
+		print_bool(PRINT_ANY, "deleted", "deleted ", true);
 
 	abuf[0] = 0;
 	if (t->tcm_handle) {
@@ -343,42 +345,47 @@ int print_class(struct nlmsghdr *n, void *arg)
 		else
 			print_tc_classid(abuf, sizeof(abuf), t->tcm_handle);
 	}
-	fprintf(fp, "class %s %s ", rta_getattr_str(tb[TCA_KIND]), abuf);
+
+	print_string(PRINT_ANY, "kind", "class %s ", rta_getattr_str(tb[TCA_KIND]));
+	print_string(PRINT_ANY, "classid", "%s ", abuf);
 
 	if (filter_ifindex == 0)
-		fprintf(fp, "dev %s ", ll_index_to_name(t->tcm_ifindex));
+		print_string(PRINT_ANY, "dev", "dev %s ", ll_index_to_name(t->tcm_ifindex));
 
 	if (t->tcm_parent == TC_H_ROOT)
-		fprintf(fp, "root ");
+		print_bool(PRINT_ANY, "root", "root ", true);
 	else {
 		if (filter_qdisc)
 			print_tc_classid(abuf, sizeof(abuf), TC_H_MIN(t->tcm_parent));
 		else
 			print_tc_classid(abuf, sizeof(abuf), t->tcm_parent);
-		fprintf(fp, "parent %s ", abuf);
+		print_string(PRINT_ANY, "parent", "parent %s ", abuf);
 	}
 	if (t->tcm_info)
-		fprintf(fp, "leaf %x: ", t->tcm_info>>16);
+		print_uint(PRINT_ANY, "leaf", "leaf %x: ", t->tcm_info>>16);
 	q = get_qdisc_kind(RTA_DATA(tb[TCA_KIND]));
 	if (tb[TCA_OPTIONS]) {
+		open_json_object("options");
 		if (q && q->print_copt)
 			q->print_copt(q, fp, tb[TCA_OPTIONS]);
 		else
-			fprintf(fp, "[cannot parse class parameters]");
+			print_string(PRINT_FP, NULL, "[cannot parse class parameters]", NULL);
+		close_json_object();
 	}
-	fprintf(fp, "\n");
+	print_string(PRINT_FP, NULL, "\n", NULL);
 	if (show_stats) {
 		struct rtattr *xstats = NULL;
 
 		if (tb[TCA_STATS] || tb[TCA_STATS2]) {
 			print_tcstats_attr(fp, tb, " ", &xstats);
-			fprintf(fp, "\n");
+			print_string(PRINT_FP, NULL, "\n", NULL);
 		}
 		if (q && (xstats || tb[TCA_XSTATS]) && q->print_xstats) {
 			q->print_xstats(q, fp, xstats ? : tb[TCA_XSTATS]);
-			fprintf(fp, "\n");
+			print_string(PRINT_FP, NULL, "\n", NULL);
 		}
 	}
+	close_json_object();
 	fflush(fp);
 	return 0;
 }
@@ -450,10 +457,12 @@ static int tc_class_list(int argc, char **argv)
 		return 1;
 	}
 
+	new_json_obj(json);
 	if (rtnl_dump_filter(&rth, print_class, stdout) < 0) {
 		fprintf(stderr, "Dump terminated\n");
 		return 1;
 	}
+	delete_json_obj();
 
 	if (show_graph)
 		graph_cls_show(stdout, &buf[0], &root_cls_list, 0);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [iproute2 0/3] Adding json support for showing htb&tbf classes
  2019-05-06 16:18 [iproute2 0/3] Adding json support for showing htb&tbf classes Nir Weiner
                   ` (2 preceding siblings ...)
  2019-05-06 16:18 ` [iproute2 3/3] tc: jsonify class core Nir Weiner
@ 2019-05-06 16:22 ` Stephen Hemminger
  3 siblings, 0 replies; 7+ messages in thread
From: Stephen Hemminger @ 2019-05-06 16:22 UTC (permalink / raw)
  To: Nir Weiner; +Cc: netdev, liran.alon

On Mon,  6 May 2019 19:18:37 +0300
Nir Weiner <nir.weiner@oracle.com> wrote:

> Adding a json support for running the command 
> tc -j class show dev <dev> 
> for the htb kind and the tbf kind
> 
> Nir Weiner (3):
>   tc: jsonify htb qdisc parameters
>   tc: jsonify tbf qdisc parameters
>   tc: jsonify class core
> 
>  tc/q_htb.c    | 19 ++++++++++---------
>  tc/q_tbf.c    | 20 ++++++++++----------
>  tc/tc_class.c | 29 +++++++++++++++++++----------
>  3 files changed, 39 insertions(+), 29 deletions(-)
> 

These should go to iproute2-next

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [iproute2 2/3] tc: jsonify tbf qdisc parameters
  2019-05-06 16:18 ` [iproute2 2/3] tc: jsonify tbf " Nir Weiner
@ 2019-05-17 17:35   ` David Ahern
  2019-05-17 17:57     ` Stephen Hemminger
  0 siblings, 1 reply; 7+ messages in thread
From: David Ahern @ 2019-05-17 17:35 UTC (permalink / raw)
  To: Nir Weiner, netdev; +Cc: liran.alon

On 5/6/19 10:18 AM, Nir Weiner wrote:

>  	if (prate64) {
> -		fprintf(f, "peakrate %s ", sprint_rate(prate64, b1));
> +		print_string(PRINT_ANY, "peakrate", "peakrate %s ", sprint_rate(prate64, b1));
>  		if (qopt->mtu || qopt->peakrate.mpu) {
>  			mtu = tc_calc_xmitsize(prate64, qopt->mtu);
>  			if (show_details) {
>  				fprintf(f, "mtu %s/%u mpu %s ", sprint_size(mtu, b1),
>  					1<<qopt->peakrate.cell_log, sprint_size(qopt->peakrate.mpu, b2));


The fprintf under show_details should be converted as well. This applies
to patch 1 as well.

And, please add example output to each patch.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [iproute2 2/3] tc: jsonify tbf qdisc parameters
  2019-05-17 17:35   ` David Ahern
@ 2019-05-17 17:57     ` Stephen Hemminger
  0 siblings, 0 replies; 7+ messages in thread
From: Stephen Hemminger @ 2019-05-17 17:57 UTC (permalink / raw)
  To: David Ahern; +Cc: Nir Weiner, netdev, liran.alon

On Fri, 17 May 2019 11:35:16 -0600
David Ahern <dsahern@gmail.com> wrote:

> On 5/6/19 10:18 AM, Nir Weiner wrote:
> 
> >  	if (prate64) {
> > -		fprintf(f, "peakrate %s ", sprint_rate(prate64, b1));
> > +		print_string(PRINT_ANY, "peakrate", "peakrate %s ", sprint_rate(prate64, b1));
> >  		if (qopt->mtu || qopt->peakrate.mpu) {
> >  			mtu = tc_calc_xmitsize(prate64, qopt->mtu);
> >  			if (show_details) {
> >  				fprintf(f, "mtu %s/%u mpu %s ", sprint_size(mtu, b1),
> >  					1<<qopt->peakrate.cell_log, sprint_size(qopt->peakrate.mpu, b2));  
> 
> 
> The fprintf under show_details should be converted as well. This applies
> to patch 1 as well.
> 
> And, please add example output to each patch.

One trick I used was scanning for all calls to fprintf(f and replacing them

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-05-17 17:58 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-05-06 16:18 [iproute2 0/3] Adding json support for showing htb&tbf classes Nir Weiner
2019-05-06 16:18 ` [iproute2 1/3] tc: jsonify htb qdisc parameters Nir Weiner
2019-05-06 16:18 ` [iproute2 2/3] tc: jsonify tbf " Nir Weiner
2019-05-17 17:35   ` David Ahern
2019-05-17 17:57     ` Stephen Hemminger
2019-05-06 16:18 ` [iproute2 3/3] tc: jsonify class core Nir Weiner
2019-05-06 16:22 ` [iproute2 0/3] Adding json support for showing htb&tbf classes Stephen Hemminger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.