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

Now checking the complete IPv6 address if it is IN6ADDR_ANY.

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

diff --git a/misc/ss.c b/misc/ss.c
index 12763c9..83683b5 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -1046,8 +1046,9 @@ 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;

@@ -1059,7 +1060,18 @@ static void inet_addr_print(const inet_prefix *a,
int port, unsigned int ifindex
                        ap = format_host(AF_INET, 4, a->data);
                }
        } else {
-               ap = format_host(a->family, 16, a->data);
+               if (a->data[0] == 0 && a->data[1] == 0 &&
+                   a->data[2] == 0 && a->data[3] == 0) {
+                               buf[0] = '*';
+                               buf[1] = 0;
+               } 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;
-- 
2.9.4

Reply via email to