This updated patch adds support for RFC2732 IPv6 address format with
brackets for the tool ss.

Following the advice by David Laight I used strchr().
Also, IN6ADDR_ANY and INADDR_ANY will return "*".


Signed-off-by: Lehner Florian <d...@der-flo.net>
---
 misc/ss.c | 28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/misc/ss.c b/misc/ss.c
index 12763c9..d40ad00 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -1046,25 +1046,31 @@ do_numeric:

 static void inet_addr_print(const inet_prefix *a, int port, unsigned
int ifindex)
 {
-       char buf[1024];
+       char buf[1024], buf2[1024];
        const char *ap = buf;
+       char *c = NULL;
        int est_len = addr_width;
        const char *ifname = NULL;

-       if (a->family == AF_INET) {
-               if (a->data[0] == 0) {
+       if (a->data[0] == 0) {
                        buf[0] = '*';
                        buf[1] = 0;
-               } else {
+       } else {
+               if (a->family == AF_INET) {
                        ap = format_host(AF_INET, 4, a->data);
+               } else {
+                       ap = format_host(a->family, 16, a->data);
+                       c = strchr(ap, ':');
+                       if (c != NULL && a->family == AF_INET6) {
+                               sprintf(buf2, "[%s]", ap);
+                               ap = buf2;
+                       }
+                       est_len = strlen(ap);
+                       if (est_len <= addr_width)
+                               est_len = addr_width;
+                       else
+                               est_len = addr_width + 
((est_len-addr_width+3)/4)*4;
                }
-       } else {
-               ap = format_host(a->family, 16, a->data);
-               est_len = strlen(ap);
-               if (est_len <= addr_width)
-                       est_len = addr_width;
-               else
-                       est_len = addr_width + ((est_len-addr_width+3)/4)*4;
        }

        if (ifindex) {
-- 
2.9.4

Reply via email to