Date: Mon, 06 Nov 2000 12:31:49 -0500 From: Marcel Moolenaar <marcel@cup.hp.com> To: Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> Cc: emulation@FreeBSD.ORG Subject: Re: Wine port: How to obtain MAC address? Message-ID: <3A06EB05.F908822@cup.hp.com> References: <Pine.BSF.4.30.0011061305430.64453-100000@taygeta.dbai.tuwien.ac.at>
next in thread | previous in thread | raw e-mail | index | archive | help
Gerald Pfeifer wrote:
>
> For the Wine port I'd need to obtain the MAC address of an ethernet
> interface, alas it seems that this is not easily possible the way it
> is done in Linux/Solaris?
>
> For Linux, the code in Wine looks as follows:
>
> strcpy(ifInfo.ifr_name, ifName);
> if (ioctl(sock, SIOCGIFHWADDR, &ifInfo) < 0)
> {
> ERR ("Error obtaining MAC Address!\n");
> close(sock);
> return (-1);
> }
> else
> {
> /* FIXME: Is it correct to assume size of 6? */
> memcpy(IntInfo->if_physaddr, ifInfo.ifr_hwaddr.sa_data, 6);
> IntInfo->if_physaddrlen=6;
> }
See /sys/compat/linux/linux_ioctl.c:1370
case LINUX_SIOCGIFHWADDR: {
int ifn;
struct ifnet *ifp;
struct ifaddr *ifa;
struct sockaddr_dl *sdl;
struct linux_ifreq *ifr = (struct linux_ifreq *)args->arg;
/* Note that we don't actually respect the name in the ifreq
* structure, as Linux interface names are all different.
*/
for (ifn = 0; ifn < if_index; ifn++) {
ifp = ifnet_addrs[ifn]->ifa_ifp;
if (ifp->if_type == IFT_ETHER) {
ifa = TAILQ_FIRST(&ifp->if_addrhead);
while (ifa) {
sdl=(struct sockaddr_dl*)ifa->ifa_addr;
if (sdl != NULL &&
(sdl->sdl_family == AF_LINK) &&
(sdl->sdl_type == IFT_ETHER)) {
return (copyout(LLADDR(sdl),
&ifr->ifr_hwaddr.sa_data,
LINUX_IFHWADDRLEN));
}
ifa = TAILQ_NEXT(ifa, ifa_link);
}
}
}
return (ENOENT);
}
This gives you a kernel-space datapoint. With that, you should be able
to mimic what ifconfig (as Will suggested) does.
HTH,
--
Marcel Moolenaar
mail: marcel@cup.hp.com / marcel@FreeBSD.org
tel: (408) 447-4222
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-emulation" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3A06EB05.F908822>
