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