On Mon, Aug 11, 2008 at 02:23:50PM +0100, Iain Hibbert wrote: > Hi, > > Am trying to open a tap(4) device and get the interface address, but > SIOCGIFADDR does not work (though it seems that it should, looking at the > if_tap.c code and ether_ioctl()) No error is produced but nothing is I... doubt that. tap_dev_ioctl() returns ENOTTY (as it should). I'll try though, there might be a bug. > and I worked out how to change the physical address using SIOCSIFPHYADDR That won't work either if you do it on the fd returned by /dev/tap. > but I wanted to see what the address actually was as reported by ifconfig > (I got lost in the twisty passages there, not sure how it gets it) > > the tap(4) manpage mentions a sysctl node but that seems overcomplicated The sysctl is for human, or static boot configuration, because ifconfig doesn't (didn't? I can't remember the status of that) support changing the Ethernet address of an interface. Iain, the way one is supposed to manipulate an interface is through a socket. So you have to open a socket first (AF_INET is fine to do the SIOCSIFPHYADDR call, and you can use it later to set an ipv4 address on the interface and so on), and then do the ioctl calls on it. I don't think I should blindly let ioctls go to tap_ioctl from the character device, but I guess I could at least allow my kludgy SIOCSIFPHYADDR. Though usually if you're playing with a tap interface you'll need a socket at some point. -- Quentin Garnier - cube%cubidou.net@localhost - cube%NetBSD.org@localhost "See the look on my face from staying too long in one place [...] every time the morning breaks I know I'm closer to falling" KT Tunstall, Saving My Face, Drastic Fantastic, 2007.
Attachment:
pgpKzZ6623_9W.pgp
Description: PGP signature