Use common driver code for Linux hwaddr get/set
[libeap.git] / src / drivers / driver_hostap.c
index 4faec83..64b345f 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "priv_netlink.h"
 #include "netlink.h"
+#include "linux_ioctl.h"
 #include "common/ieee802_11_defs.h"
 
 
@@ -268,21 +269,7 @@ static int hostap_init_sockets(struct hostap_driver_data *drv, u8 *own_addr)
                return -1;
        }
 
-        memset(&ifr, 0, sizeof(ifr));
-        os_strlcpy(ifr.ifr_name, drv->iface, sizeof(ifr.ifr_name));
-        if (ioctl(drv->sock, SIOCGIFHWADDR, &ifr) != 0) {
-               perror("ioctl(SIOCGIFHWADDR)");
-               return -1;
-        }
-
-       if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {
-               printf("Invalid HW-addr family 0x%04x\n",
-                      ifr.ifr_hwaddr.sa_family);
-               return -1;
-       }
-       os_memcpy(own_addr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
-
-       return 0;
+       return linux_get_ifhwaddr(drv->sock, drv->iface, own_addr);
 }
 
 
@@ -371,31 +358,15 @@ static int hostap_set_iface_flags(void *priv, int dev_up)
 {
        struct hostap_driver_data *drv = priv;
        struct ifreq ifr;
+       char ifname[IFNAMSIZ];
 
-       if (drv->ioctl_sock < 0)
+       os_snprintf(ifname, IFNAMSIZ, "%sap", drv->iface);
+       if (linux_set_iface_flags(drv->ioctl_sock, ifname, dev_up) < 0)
                return -1;
 
-       memset(&ifr, 0, sizeof(ifr));
-       snprintf(ifr.ifr_name, IFNAMSIZ, "%sap", drv->iface);
-
-       if (ioctl(drv->ioctl_sock, SIOCGIFFLAGS, &ifr) != 0) {
-               perror("ioctl[SIOCGIFFLAGS]");
-               return -1;
-       }
-
-       if (dev_up)
-               ifr.ifr_flags |= IFF_UP;
-       else
-               ifr.ifr_flags &= ~IFF_UP;
-
-       if (ioctl(drv->ioctl_sock, SIOCSIFFLAGS, &ifr) != 0) {
-               perror("ioctl[SIOCSIFFLAGS]");
-               return -1;
-       }
-
        if (dev_up) {
                memset(&ifr, 0, sizeof(ifr));
-               snprintf(ifr.ifr_name, IFNAMSIZ, "%sap", drv->iface);
+               os_strlcpy(ifr.ifr_name, ifname, IFNAMSIZ);
                ifr.ifr_mtu = HOSTAPD_MTU;
                if (ioctl(drv->ioctl_sock, SIOCSIFMTU, &ifr) != 0) {
                        perror("ioctl[SIOCSIFMTU]");
@@ -1533,11 +1504,11 @@ static int wpa_driver_hostap_set_auth_alg(void *priv, int auth_alg)
        struct wpa_driver_hostap_data *drv = priv;
        int algs = 0;
 
-       if (auth_alg & AUTH_ALG_OPEN_SYSTEM)
+       if (auth_alg & WPA_AUTH_ALG_OPEN)
                algs |= 1;
-       if (auth_alg & AUTH_ALG_SHARED_KEY)
+       if (auth_alg & WPA_AUTH_ALG_SHARED)
                algs |= 2;
-       if (auth_alg & AUTH_ALG_LEAP)
+       if (auth_alg & WPA_AUTH_ALG_LEAP)
                algs |= 4;
        if (algs == 0)
                algs = 1; /* at least one algorithm should be set */