On Sun, Dec 20, 2020 at 01:39:57PM +0100, Otto Moerbeek wrote:
> Hi,
>
> scope is there, just not shown. While there, use proper constants for
> two sizes.
>
> -Otto
>
>
> Index: ktrstruct.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/kdump/ktrstruct.c,v
> retrieving revision 1.28
> diff -u -p -r1.28 ktrstruct.c
> --- ktrstruct.c 17 Nov 2018 20:46:12 -0000 1.28
> +++ ktrstruct.c 20 Dec 2020 12:34:34 -0000
> @@ -90,7 +90,7 @@ ktrsockaddr(struct sockaddr *sa)
> switch(sa->sa_family) {
> case AF_INET: {
> struct sockaddr_in *sa_in;
> - char addr[64];
> + char addr[INET_ADDRSTRLEN];
>
> sa_in = (struct sockaddr_in *)sa;
> check_sockaddr_len(in);
> @@ -100,12 +100,15 @@ ktrsockaddr(struct sockaddr *sa)
> }
> case AF_INET6: {
> struct sockaddr_in6 *sa_in6;
> - char addr[64];
> + char addr[INET6_ADDRSTRLEN], scope[12] = { 0 };
>
> sa_in6 = (struct sockaddr_in6 *)sa;
> check_sockaddr_len(in6);
> inet_ntop(AF_INET6, &sa_in6->sin6_addr, addr, sizeof addr);
> - printf("[%s]:%u", addr, htons(sa_in6->sin6_port));
> + if (sa_in6->sin6_scope_id)
> + snprintf(scope, sizeof(scope), "%%%u",
> + sa_in6->sin6_scope_id);
Would it make sense to use if_indextoname() here to translate the string
into an interface name? The snprintf would still be needed for the case
where NULL is returned by if_indextoname().
> + printf("[%s%s]:%u", addr, scope, htons(sa_in6->sin6_port));
> break;
> }
> case AF_UNIX: {
>
--
:wq Claudio