Thread (19 messages) 19 messages, 5 authors, 2017-08-04

Re: [PATCH v2] ss: Enclose IPv6 address in brackets

From: Phil Sutter <phil@nwl.cc>
Date: 2017-07-31 20:27:43

On Mon, Jul 31, 2017 at 09:50:04PM +0200, Florian Lehner wrote:
quoted hunk ↗ jump to hunk
This updated patch adds support for RFC2732 IPv6 address format with
brackets for the tool ss. Resolved hostnames will not be enclosed in
brackets, therefore the global variable resolve_hosts is initialized and
checked.

Signed-off-by: Lehner Florian <redacted>
---
 misc/ss.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/misc/ss.c b/misc/ss.c
index 12763c9..ac94537 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -88,7 +88,7 @@ static int security_get_initial_context(char *name,
char **context)
 }
 #endif

-int resolve_hosts;
+int resolve_hosts = 0;
Global variables are guaranteed to be initialized to zero. According to
the web this is by C89.
quoted hunk ↗ jump to hunk
 int resolve_services = 1;
 int preferred_family = AF_UNSPEC;
 int show_options;
@@ -1059,7 +1059,11 @@ 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->family == AF_INET6 && !resolve_hosts) {
+			sprintf(buf, "[%s]", format_host(a->family, 16, a->data));
+		} else {
+			ap = format_host(a->family, 16, a->data);
+		}
 		est_len = strlen(ap);
 		if (est_len <= addr_width)
 			est_len = addr_width;
This won't work if name resolution was requested but failed. In that
case an IPv6 address is returned but not enclosed in brackets.

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