Subject: Re: dhcpd
To: Nicolas Joly <njoly@pasteur.fr>
From: Greg Troxel <gdt@ir.bbn.com>
List: tech-net
Date: 09/13/2007 14:29:28
I looked at the ifconf() code and now think that the kernel wasn't
copying the whole sockaddr. I have compile tested but not run the
following patch, which I think will fix the 'missing two bytes' of the
mac address problem, as well as unbreak v6 addresses.
Index: sys/net/if.c
===================================================================
RCS file: /cvsroot/src/sys/net/if.c,v
retrieving revision 1.200
diff -u -p -r1.200 if.c
--- sys/net/if.c 11 Sep 2007 19:31:22 -0000 1.200
+++ sys/net/if.c 13 Sep 2007 18:28:48 -0000
@@ -1669,7 +1669,7 @@ ifconf(u_long cmd, void *data)
if (ifrp != NULL)
{
- ifr.ifr_addr = *sa;
+ memcpy(&ifr.ifr_space, sa, sa->sa_len);
if (space >= sz) {
error = copyout(&ifr, ifrp, sz);
if (error != 0)
Index: sys/net/if.h
===================================================================
RCS file: /cvsroot/src/sys/net/if.h,v
retrieving revision 1.126
diff -u -p -r1.126 if.h
--- sys/net/if.h 2 Sep 2007 00:24:18 -0000 1.126
+++ sys/net/if.h 13 Sep 2007 18:28:48 -0000
@@ -552,6 +552,7 @@ struct ifreq {
#define ifr_addr ifr_ifru.ifru_addr /* address */
#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-to-p link */
#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
+#define ifr_space ifr_ifru.ifru_space /* sockaddr_storage */
#define ifr_flags ifr_ifru.ifru_flags /* flags */
#define ifr_metric ifr_ifru.ifru_metric /* metric */
#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */