[PATCH iproute2-next] ipneigh: add support to print brief output of neigh cache in tabular format

Subsystems: the rest

STALE1855d

3 messages, 2 authors, 2021-07-27 · open the first message on its own page

[PATCH iproute2-next] ipneigh: add support to print brief output of neigh cache in tabular format

From: Gokul Sivakumar <hidden>
Date: 2021-07-25 15:39:40

Make use of the already available brief flag and print the basic details of
the IPv4 or IPv6 neighbour cache in a tabular format for better readability
when the brief output is expected.

$ ip -br neigh
bridge0          172.16.12.100                           b0:fc:36:2f:07:43
bridge0          172.16.12.174                           8c:16:45:2f:bc:1c
bridge0          172.16.12.250                           04:d9:f5:c1:0c:74
bridge0          fe80::267b:9f70:745e:d54d               b0:fc:36:2f:07:43
bridge0          fd16:a115:6a62:0:8744:efa1:9933:2c4c    8c:16:45:2f:bc:1c
bridge0          fe80::6d9:f5ff:fec1:c74                 04:d9:f5:c1:0c:74

And add "ip neigh show" to the list of ip sub commands mentioned in the man
page that support the brief output in tabular format.

Signed-off-by: Gokul Sivakumar <redacted>
---
 ip/ipneigh.c  | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
 man/man8/ip.8 |  2 +-
 2 files changed, 50 insertions(+), 2 deletions(-)
diff --git a/ip/ipneigh.c b/ip/ipneigh.c
index 2d6b7f58..91c157f9 100644
--- a/ip/ipneigh.c
+++ b/ip/ipneigh.c
@@ -251,6 +251,51 @@ static void print_neigh_state(unsigned int nud)
 	close_json_array(PRINT_JSON, NULL);
 }
 
+static int print_neigh_brief(FILE *fp, struct ndmsg *r, struct rtattr *tb[])
+{
+	if (!filter.index && r->ndm_ifindex) {
+		print_color_string(PRINT_ANY, COLOR_IFNAME,
+				   "dev", "%-16s ",
+				   ll_index_to_name(r->ndm_ifindex));
+	}
+
+	if (tb[NDA_DST]) {
+		const char *dst;
+		int family = r->ndm_family;
+
+		if (family == AF_BRIDGE) {
+			if (RTA_PAYLOAD(tb[NDA_DST]) == sizeof(struct in6_addr))
+				family = AF_INET6;
+			else
+				family = AF_INET;
+		}
+
+		dst = format_host_rta(family, tb[NDA_DST]);
+		print_color_string(PRINT_ANY, ifa_family_color(family),
+				   "dst", "%-40s", dst);
+	}
+
+	if (tb[NDA_LLADDR]) {
+		const char *lladdr;
+
+		SPRINT_BUF(b1);
+
+		lladdr = ll_addr_n2a(RTA_DATA(tb[NDA_LLADDR]),
+				     RTA_PAYLOAD(tb[NDA_LLADDR]),
+				     ll_index_to_type(r->ndm_ifindex),
+				     b1, sizeof(b1));
+
+		print_color_string(PRINT_ANY, COLOR_MAC,
+				   "lladdr", "%s", lladdr);
+	}
+
+	print_string(PRINT_FP, NULL, "%s", "\n");
+	close_json_object();
+	fflush(fp);
+
+	return 0;
+}
+
 int print_neigh(struct nlmsghdr *n, void *arg)
 {
 	FILE *fp = (FILE *)arg;
@@ -337,6 +382,9 @@ int print_neigh(struct nlmsghdr *n, void *arg)
 	else if (n->nlmsg_type == RTM_GETNEIGH)
 		print_null(PRINT_ANY, "miss", "%s ", "miss");
 
+	if (brief)
+		return print_neigh_brief(fp, r, tb);
+
 	if (tb[NDA_DST]) {
 		const char *dst;
 		int family = r->ndm_family;
@@ -412,7 +460,7 @@ int print_neigh(struct nlmsghdr *n, void *arg)
 
 	print_string(PRINT_FP, NULL, "\n", "");
 	close_json_object();
-	fflush(stdout);
+	fflush(fp);
 
 	return 0;
 }
diff --git a/man/man8/ip.8 b/man/man8/ip.8
index c9f7671e..3f572889 100644
--- a/man/man8/ip.8
+++ b/man/man8/ip.8
@@ -227,7 +227,7 @@ print human readable rates in IEC units (e.g. 1Ki = 1024).
 .BR "\-br" , " \-brief"
 Print only basic information in a tabular format for better
 readability. This option is currently only supported by
-.BR "ip addr show " and " ip link show " commands.
+.BR "ip addr show ", " ip link show " & " ip neigh show " commands.
 
 .TP
 .BR "\-j", " \-json"
-- 
2.25.1

Re: [PATCH iproute2-next] ipneigh: add support to print brief output of neigh cache in tabular format

From: David Ahern <hidden>
Date: 2021-07-26 21:09:06

On 7/25/21 9:39 AM, Gokul Sivakumar wrote:
Make use of the already available brief flag and print the basic details of
the IPv4 or IPv6 neighbour cache in a tabular format for better readability
when the brief output is expected.

$ ip -br neigh
bridge0          172.16.12.100                           b0:fc:36:2f:07:43
bridge0          172.16.12.174                           8c:16:45:2f:bc:1c
bridge0          172.16.12.250                           04:d9:f5:c1:0c:74
bridge0          fe80::267b:9f70:745e:d54d               b0:fc:36:2f:07:43
bridge0          fd16:a115:6a62:0:8744:efa1:9933:2c4c    8c:16:45:2f:bc:1c
bridge0          fe80::6d9:f5ff:fec1:c74                 04:d9:f5:c1:0c:74
I am guessing you put the device first to be consistent with the output
for the other 2 commands.

In this case I think the network address should be first then device and
lladdr which is consistent with existing output just removing 'dev'
keyword and flags.

Re: [PATCH iproute2-next] ipneigh: add support to print brief output of neigh cache in tabular format

From: Gokul Sivakumar <hidden>
Date: 2021-07-27 16:33:54

On Mon, 2021-07-26 at 15:09 -0600, David Ahern wrote:
On 7/25/21 9:39 AM, Gokul Sivakumar wrote:
quoted
Make use of the already available brief flag and print the basic details of
the IPv4 or IPv6 neighbour cache in a tabular format for better readability
when the brief output is expected.

$ ip -br neigh
bridge0          172.16.12.100                           b0:fc:36:2f:07:43
bridge0          172.16.12.174                           8c:16:45:2f:bc:1c
bridge0          172.16.12.250                           04:d9:f5:c1:0c:74
bridge0          fe80::267b:9f70:745e:d54d               b0:fc:36:2f:07:43
bridge0          fd16:a115:6a62:0:8744:efa1:9933:2c4c    8c:16:45:2f:bc:1c
bridge0          fe80::6d9:f5ff:fec1:c74                 04:d9:f5:c1:0c:74
I am guessing you put the device first to be consistent with the output
for the other 2 commands.
Yes, that was my initial thought.
In this case I think the network address should be first then device and
lladdr which is consistent with existing output just removing 'dev'
keyword and flags.
I understand, will send an updated v2 patch now to print the brief output with 
columns in the order that you are suggesting.

Thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help