Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 07 Jan 2011 21:01:01 -0500
From:      Boris Kochergin <spawk@acm.poly.edu>
To:        Sergey Kandaurov <pluknet@gmail.com>
Cc:        freebsd-net@freebsd.org
Subject:   Re: NDP Ethernet address display
Message-ID:  <4D27C55D.8070200@acm.poly.edu>
In-Reply-To: <AANLkTinhoqTsjrgYqZZVFJ610L7eHqfjU-vzPVqcHXpt@mail.gmail.com>
References:  <4D27AF1D.2030505@acm.poly.edu> <AANLkTinhoqTsjrgYqZZVFJ610L7eHqfjU-vzPVqcHXpt@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------070606030005030406040902
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

On 01/07/11 20:26, Sergey Kandaurov wrote:
> On 8 January 2011 03:26, Boris Kochergin<spawk@acm.poly.edu>  wrote:
>> Hi. I noticed that ndp(8) doesn't zero-pad Ethernet addresses, which is
>> inconsistent with arp(8):
>>
>> # ndp -an
>> ...
>> 2001:470:897b::1                     0:30:48:b1:1b:9c     em0 permanent R
>>
>> # arp -an
>> ...
>> ? (128.238.9.201) at 00:30:48:b1:1b:9c on em0 permanent [ethernet]
>>
>> As everything else I can think of zero-pads them, this makes it a little
>> annoying to grep for addresses, etc. Is this intentional? It is the case in
>> 7.x through CURRENT and the fix is quite simple:
>>
>> --- /usr/src/usr.sbin/ndp/ndp.c.orig    2011-01-07 19:16:17.000000000 -0500
>> +++ /usr/src/usr.sbin/ndp/ndp.c 2011-01-07 19:15:36.000000000 -0500
>> @@ -828,7 +828,7 @@
>>
>>         if (sdl->sdl_alen) {
>>                 cp = (u_char *)LLADDR(sdl);
>> -               snprintf(hbuf, sizeof(hbuf), "%x:%x:%x:%x:%x:%x",
>> +               snprintf(hbuf, sizeof(hbuf),
>> "%02x:%02x:%02x:%02x:%02x:%02x",
>>                     cp[0], cp[1], cp[2], cp[3], cp[4], cp[5]);
>>         } else
>>                 snprintf(hbuf, sizeof(hbuf), "(incomplete)");
>>
> Or rather use getnameinfo() for that as NetBSD/KAME does, and
> NetBSD's getnameinfo() AF_LINK support was merged at 6.3 time.
>
> (See ndp.c#rev1.87 at KAME, ndp.c#rev1.35 at NetBSD).
>

Sure.

-Boris

--------------070606030005030406040902
Content-Type: text/plain;
 name="ndp.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="ndp.patch"

--- /usr/src/usr.sbin/ndp/ndp.c.orig	2011-01-07 19:16:17.000000000 -0500
+++ /usr/src/usr.sbin/ndp/ndp.c	2011-01-07 21:00:20.000000000 -0500
@@ -80,6 +80,7 @@
 #include <sys/socket.h>
 #include <sys/sysctl.h>
 #include <sys/time.h>
+#include <sys/types.h>
 #include <sys/queue.h>
 
 #include <net/if.h>
@@ -824,12 +825,12 @@
 	struct sockaddr_dl *sdl;
 {
 	static char hbuf[NI_MAXHOST];
-	u_char *cp;
 
 	if (sdl->sdl_alen) {
-		cp = (u_char *)LLADDR(sdl);
-		snprintf(hbuf, sizeof(hbuf), "%x:%x:%x:%x:%x:%x",
-		    cp[0], cp[1], cp[2], cp[3], cp[4], cp[5]);
+		if (getnameinfo((struct sockaddr *)(void *)sdl,
+		    (socklen_t)sdl->sdl_len,
+		    hbuf, sizeof(hbuf), NULL, 0, NI_NUMERICHOST) != 0)
+			snprintf(hbuf, sizeof(hbuf), "<invalid>");
 	} else
 		snprintf(hbuf, sizeof(hbuf), "(incomplete)");
 

--------------070606030005030406040902--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4D27C55D.8070200>