From: Zbigniew Jędrzejewski-Szmek Date: Thu, 3 Sep 2020 13:20:31 +0000 (+0200) Subject: basic: show interface scope in sockaddr_pretty() X-Git-Tag: v247-rc1~261^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b16d17a68ae8b44111b08c2689b3dee1d1f90169;p=thirdparty%2Fsystemd.git basic: show interface scope in sockaddr_pretty() If the interface scope is specified, this changes the meaning of the address quite significantly. Let's show the IPv6 scope_id if present. Sadly we don't even have a test for sockaddr_pretty() output :( This will be implicitly tested through socket_address_parse() later on. --- diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c index 1f65015347f..fa519975812 100644 --- a/src/basic/socket-util.c +++ b/src/basic/socket-util.c @@ -399,19 +399,23 @@ int sockaddr_pretty( if (r < 0) return -ENOMEM; } else { - char a[INET6_ADDRSTRLEN]; + char a[INET6_ADDRSTRLEN], ifname[IF_NAMESIZE + 1]; inet_ntop(AF_INET6, &sa->in6.sin6_addr, a, sizeof(a)); + if (sa->in6.sin6_scope_id != 0) + format_ifname_full(sa->in6.sin6_scope_id, ifname, FORMAT_IFNAME_IFINDEX); if (include_port) { r = asprintf(&p, - "[%s]:%u", + "[%s]:%u%s%s", a, - be16toh(sa->in6.sin6_port)); + be16toh(sa->in6.sin6_port), + sa->in6.sin6_scope_id != 0 ? "%" : "", + sa->in6.sin6_scope_id != 0 ? ifname : ""); if (r < 0) return -ENOMEM; } else { - p = strdup(a); + p = sa->in6.sin6_scope_id != 0 ? strjoin(a, "%", ifname) : strdup(a); if (!p) return -ENOMEM; }