diff mbox series

[v2,iproute2-next,28/31] tc/atm: convert to JSON output

Message ID 20180710210558.20278-29-stephen@networkplumber.org
State Changes Requested, archived
Delegated to: David Ahern
Headers show
Series tc use JSON in all qdisc | expand

Commit Message

Stephen Hemminger July 10, 2018, 9:05 p.m. UTC
From: Stephen Hemminger <sthemmin@microsoft.com>

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 tc/q_atm.c | 38 +++++++++++++++++++++++---------------
 1 file changed, 23 insertions(+), 15 deletions(-)
diff mbox series

Patch

diff --git a/tc/q_atm.c b/tc/q_atm.c
index f8215f06507a..d5ab7a06b28f 100644
--- a/tc/q_atm.c
+++ b/tc/q_atm.c
@@ -194,37 +194,45 @@  static int atm_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
 			fprintf(stderr, "ATM: address too short\n");
 		else {
 			if (atm2text(buffer, MAX_ATM_ADDR_LEN,
-			    RTA_DATA(tb[TCA_ATM_ADDR]), A2T_PRETTY | A2T_NAME) <
-			    0) fprintf(stderr, "atm2text error\n");
-			fprintf(f, "pvc %s ", buffer);
+				     RTA_DATA(tb[TCA_ATM_ADDR]), A2T_PRETTY | A2T_NAME) < 0)
+				fprintf(stderr, "atm2text error\n");
+			else
+				print_string(PRINT_ANY, "pvc",
+					     "pvc %s ", buffer);
 		}
 	}
+
 	if (tb[TCA_ATM_HDR]) {
 		int i;
 		const __u8 *hdr = RTA_DATA(tb[TCA_ATM_HDR]);
 
-		fprintf(f, "hdr");
-		for (i = 0; i < RTA_PAYLOAD(tb[TCA_ATM_HDR]); i++)
-			fprintf(f, "%c%02x", i ? '.' : ' ', hdr[i]);
-		if (!i) fprintf(f, " .");
-		fprintf(f, " ");
+		open_json_array(PRINT_ANY, "hdr");
+		for (i = 0; i < RTA_PAYLOAD(tb[TCA_ATM_HDR]); i++) {
+			print_string(PRINT_FP, NULL, "%s",
+				     i ? "." : " ");
+			print_0xhex(PRINT_ANY, NULL, "%02x", hdr[i]);
+		}
+
+		print_string(PRINT_FP, NULL, "%s ", i ? "" : " .");
 	}
+
 	if (tb[TCA_ATM_EXCESS]) {
 		__u32 excess;
 
 		if (RTA_PAYLOAD(tb[TCA_ATM_EXCESS]) < sizeof(excess))
 			fprintf(stderr, "ATM: excess class ID too short\n");
 		else {
-			excess = rta_getattr_u32(tb[TCA_ATM_EXCESS]);
-			if (!excess) fprintf(f, "excess clp ");
-			else {
-				char buf[64];
+			char buf[64];
 
+			excess = rta_getattr_u32(tb[TCA_ATM_EXCESS]);
+			if (!excess)
+				strcpy(buf, "clp");
+			else
 				print_tc_classid(buf, sizeof(buf), excess);
-				fprintf(f, "excess %s ", buf);
-			}
+			print_string(PRINT_ANY, "excess", "excess %s ", buf);
 		}
 	}
+
 	if (tb[TCA_ATM_STATE]) {
 		static const char *map[] = { ATM_VS2TXT_MAP };
 		int state;
@@ -233,7 +241,7 @@  static int atm_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
 			fprintf(stderr, "ATM: state field too short\n");
 		else {
 			state = rta_getattr_u32(tb[TCA_ATM_STATE]);
-			fprintf(f, "%s ", map[state]);
+			print_string(PRINT_ANY, "state", "%s ", map[state]);
 		}
 	}
 	return 0;