lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Thu,  8 Mar 2018 08:39:10 -0800
From:   Stephen Hemminger <stephen@...workplumber.org>
To:     netdev@...r.kernel.org
Cc:     Stephen Hemminger <sthemmin@...rosoft.com>,
        Stephen Hemminger <stephen@...workplumber.org>
Subject: [PATCH iproute2-next] netns: add JSON support

From: Stephen Hemminger <sthemmin@...rosoft.com>

Basic support for JSON output when showing network namespaces.

Signed-off-by: Stephen Hemminger <stephen@...workplumber.org>
---
 ip/ipnetns.c | 32 ++++++++++++++++++++++++--------
 1 file changed, 24 insertions(+), 8 deletions(-)

diff --git a/ip/ipnetns.c b/ip/ipnetns.c
index 631794b8a341..e06100f4ad2d 100644
--- a/ip/ipnetns.c
+++ b/ip/ipnetns.c
@@ -22,6 +22,7 @@
 #include "list.h"
 #include "ip_common.h"
 #include "namespace.h"
+#include "json_print.h"
 
 static int usage(void)
 {
@@ -293,26 +294,30 @@ int print_nsid(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
 		return -1;
 	}
 
+	open_json_object(NULL);
 	if (n->nlmsg_type == RTM_DELNSID)
-		fprintf(fp, "Deleted ");
+		print_bool(PRINT_ANY, "deleted", "Deleted ", true);
 
 	nsid = rta_getattr_u32(tb[NETNSA_NSID]);
-	fprintf(fp, "nsid %u ", nsid);
+	print_uint(PRINT_ANY, "nsid", "nsid %u ", nsid);
 
 	c = netns_map_get_by_nsid(nsid);
 	if (c != NULL) {
-		fprintf(fp, "(iproute2 netns name: %s)", c->name);
+		print_string(PRINT_ANY, "name",
+			     "(iproute2 netns name: %s)", c->name);
 		netns_map_del(c);
 	}
 
 	/* During 'ip monitor nsid', no chance to have new nsid in cache. */
 	if (c == NULL && n->nlmsg_type == RTM_NEWNSID)
 		if (netns_get_name(nsid, name) == 0) {
-			fprintf(fp, "(iproute2 netns name: %s)", name);
+			print_string(PRINT_ANY, "name",
+				     "(iproute2 netns name: %s)", name);
 			netns_map_add(nsid, name);
 		}
 
-	fprintf(fp, "\n");
+	print_string(PRINT_FP, NULL, "\n", NULL);
+	close_json_object();
 	fflush(fp);
 	return 0;
 }
@@ -329,10 +334,14 @@ static int netns_list_id(int argc, char **argv)
 		perror("Cannot send dump request");
 		exit(1);
 	}
+
+	new_json_obj(json);
 	if (rtnl_dump_filter(&rth, print_nsid, stdout) < 0) {
+		delete_json_obj();
 		fprintf(stderr, "Dump terminated\n");
 		exit(1);
 	}
+	delete_json_obj();
 	return 0;
 }
 
@@ -346,20 +355,27 @@ static int netns_list(int argc, char **argv)
 	if (!dir)
 		return 0;
 
+	new_json_obj(json);
 	while ((entry = readdir(dir)) != NULL) {
 		if (strcmp(entry->d_name, ".") == 0)
 			continue;
 		if (strcmp(entry->d_name, "..") == 0)
 			continue;
-		printf("%s", entry->d_name);
+
+		open_json_object(NULL);
+		print_string(PRINT_ANY, "name",
+			     "%s", entry->d_name);
 		if (ipnetns_have_nsid()) {
 			id = get_netnsid_from_name(entry->d_name);
 			if (id >= 0)
-				printf(" (id: %d)", id);
+				print_uint(PRINT_ANY, "id",
+					   " (id: %d)", id);
 		}
-		printf("\n");
+		print_string(PRINT_FP, NULL, "\n", NULL);
+		close_json_object();
 	}
 	closedir(dir);
+	delete_json_obj();
 	return 0;
 }
 
-- 
2.16.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ