new wired driver code

Jouke Witteveen j.witteveen
Sat Dec 2 10:41:16 PST 2006


For some stupid reason my ISP uses WPA on its connection. So in order
to get my FreeBSD box on the net I need to make driver_wired.c from
the wpa_supplicant work in BSD. I downloaded the source (v0.4.8) and
tried to compile. A few days of reading a lot of c code in order to
lean c later I came up with the following changes:

BSD doesn't provide the following include, and the code that uses it
is __linux__ only anyway, so I added the following if block:
#ifdef __linux__
#include <netpacket/packet.h>
#endif /* __linux__ */

Next I searched for all non-BSD compliant code and found that ifreq
has no ifr_hwaddr in BSD (this is used in wpa_driver_wired_multi). The
following adjustment however does not work though I'm pretty positive
something alike should do the trick) because the ioctl complains about
invalid arguments during runtime:
---driver_wired.c (wpa_driver_wired_multi)------
#ifdef __linux__
        ifr.ifr_hwaddr.sa_family = AF_UNSPEC;
        memcpy(ifr.ifr_hwaddr.sa_data, addr, ETH_ALEN);
#else /* __linux__ */
        ifr.ifr_addr.sa_family = AF_UNSPEC;
        memcpy(ifr.ifr_addr.sa_data, addr, ETH_ALEN);
#endif /* __linux__ */

        if (ioctl(s, add ? SIOCADDMULTI : SIOCDELMULTI, (caddr_t) &ifr) < 0) {
                return -1;

Can anyone help me getting the wired driver to work in FreeBSD? I
would be most grateful, not only with solutions, but also with

- Jouke

More information about the Hostap mailing list