]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ipneigh: add support to print brief output of neigh cache in tabular format
authorGokul Sivakumar <gokulkumar792@gmail.com>
Tue, 27 Jul 2021 16:46:28 +0000 (22:16 +0530)
committerStephen Hemminger <stephen@networkplumber.org>
Wed, 1 Sep 2021 19:51:44 +0000 (12:51 -0700)
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
172.16.12.100                           bridge0          b0:fc:36:2f:07:43
172.16.12.174                           bridge0          8c:16:45:2f:bc:1c
172.16.12.250                           bridge0          04:d9:f5:c1:0c:74
fe80::267b:9f70:745e:d54d               bridge0          b0:fc:36:2f:07:43
fd16:a115:6a62:0:8744:efa1:9933:2c4c    bridge0          8c:16:45:2f:bc:1c
fe80::6d9:f5ff:fec1:c74                 bridge0          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 <gokulkumar792@gmail.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
ip/ipneigh.c
man/man8/ip.8

index 2d6b7f5873e167dbc8308fc84b6679c310c617dd..95bde520fbfc60d34abb706c823839a5323bff31 100644 (file)
@@ -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 (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", "%-39s ", dst);
+       }
+
+       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_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;
 }
index c9f7671e591f070aa94079438fd2984086cb70e2..3f572889386a26acabd9112a1341fc12f7e4e3ca 100644 (file)
@@ -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"