At Tue, 03 Aug 2004 16:03:11 +0200, Marco Gerards wrote: > On debian-hurd someone noticed SIOCGIFHWADDR does not exist for > GNU/Hurd. I have included the required patches for the Hurd and glibc > with this email. Or can someone suggest a better way to read the > hardware address?
It seems basically ok to me. However, I think that two small changes could/should be made. 1. Only copy dev->addr_len bytes into the user buffer. It's best to give out less information than more. 2. Independent of that, do we need to check if there even is a hardware address? For example, what is the dev_addr of the loopback interface? How does Linux ifconfig detect that the loopback interface doesn't have a valid MAC? Do we initialize it correctly in loopback.c and does your code deal with it in a compatible way? I didn't do much to try to answer the second question, although the answer should be readily available by looking at Linux and net-tools source code. Once we have determined that unconditionally copying the dev_addr field is ok, or did an appropriate check, it can go in (with the addr_len change mentioned above). Thanks, Marcus > 2004-08-03 Marco Gerards <[EMAIL PROTECTED]> > > * sysdeps/mach/hurd/bits/ioctls.h (SIOCGIFHWADDR): New macro. > > > Index: sysdeps/mach/hurd/bits/ioctls.h > =================================================================== > RCS file: /cvs/glibc/libc/sysdeps/mach/hurd/bits/ioctls.h,v > retrieving revision 1.7 > diff -u -p -u -p -r1.7 ioctls.h > --- sysdeps/mach/hurd/bits/ioctls.h 6 Jul 2001 04:55:58 -0000 1.7 > +++ sysdeps/mach/hurd/bits/ioctls.h 3 Aug 2004 13:55:34 -0000 > @@ -226,6 +226,7 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_ > #define SIOCSIFADDR _IOW('i', 12, struct ifreq) /* set ifnet > address */ > #define OSIOCGIFADDR _IOWR('i',13, struct ifreq) /* get ifnet > address */ > #define SIOCGIFADDR _IOWR('i',33, struct ifreq) /* get ifnet > address */ > +#define SIOCGIFHWADDR _IOWR('i',39, struct ifreq) /* get > hwaddress */ > #define SIOCSIFDSTADDR _IOW('i', 14, struct ifreq) /* set p-p > address */ > #define OSIOCGIFDSTADDR _IOWR('i',15, struct ifreq) /* get p-p > address */ > #define SIOCGIFDSTADDR _IOWR('i',34, struct ifreq) /* get p-p > address */ > > > > 2004-08-03 Marco Gerards <[EMAIL PROTECTED]> > > * iioctl.defs (iioctl_siocgifhwaddr): New RPC. > > Index: iioctl.defs > =================================================================== > RCS file: /cvsroot/hurd/hurd/hurd/iioctl.defs,v > retrieving revision 1.1 > diff -u -p -r1.1 iioctl.defs > --- iioctl.defs 11 Jan 2001 22:28:29 -0000 1.1 > +++ iioctl.defs 3 Aug 2004 13:12:34 -0000 > @@ -131,7 +131,14 @@ routine iioctl_siocgifnetmask ( > inout ifnam: ifname_t; > inout netmask: sockaddr_t); > > -skip; skip; skip; skip; /* 38, 39, 40, 41 unused */ > +skip; /* 38 SIOCGARP -- Not implemented yet */ > + > +routine iioctl_siocgifhwaddr ( > + reqport: io_t; > + inout ifnam: ifname_t; > + inout netmask: sockaddr_t); > + > +skip; skip; /* 40, 41 unused */ > skip; skip; skip; skip; /* 42, 43, 44, 45 unused */ > skip; skip; skip; skip; /* 46, 47, 48, 49 unused */ > skip; /* 50 unused */ > > > > 2004-08-03 Marco Gerards <[EMAIL PROTECTED]> > > * iioctl-ops.c (S_iioctl_siocgifhwaddr): New function. > > > Index: iioctl-ops.c > =================================================================== > RCS file: /cvsroot/hurd/hurd/pfinet/iioctl-ops.c,v > retrieving revision 1.2 > diff -u -p -r1.2 iioctl-ops.c > --- iioctl-ops.c 17 Jan 2001 01:37:51 -0000 1.2 > +++ iioctl-ops.c 3 Aug 2004 13:11:45 -0000 > @@ -361,3 +361,28 @@ S_iioctl_siocgifname (io_t port, > > return err; > } > + > +error_t > +S_iioctl_siocgifhwaddr (io_t port, > + ifname_t ifname, > + sockaddr_t *addr) > +{ > + error_t err = 0; > + struct device *dev; > + > + if (!port) > + return EOPNOTSUPP; > + > + dev = get_dev (ifname); > + if (!dev) > + err = ENODEV; > + else > + { > + memcpy (addr->sa_data, dev->dev_addr, MAX_ADDR_LEN); > + addr->sa_family = dev->type; > + > + } > + > + __mutex_unlock (&global_lock); > + return err; > +} > > > > _______________________________________________ > Bug-hurd mailing list > Bug-hurd@gnu.org > http://lists.gnu.org/mailman/listinfo/bug-hurd > _______________________________________________ Bug-hurd mailing list Bug-hurd@gnu.org http://lists.gnu.org/mailman/listinfo/bug-hurd