Fix couple of forgotten wpa_hw_modes -> hostapd_hw_modes
[wpasupplicant] / hostapd / driver_hostap.c
index 0c8a353..1d4bef1 100644 (file)
@@ -436,10 +436,10 @@ static int hostapd_ioctl(void *priv, struct prism2_hostapd_param *param,
 }
 
 
-static int hostap_set_encryption(const char *ifname, void *priv,
-                                const char *alg, const u8 *addr,
-                                int idx, const u8 *key, size_t key_len,
-                                int txkey)
+static int hostap_set_key(const char *ifname, void *priv, wpa_alg alg,
+                         const u8 *addr, int key_idx, int set_tx,
+                         const u8 *seq, size_t seq_len, const u8 *key,
+                         size_t key_len)
 {
        struct hostap_driver_data *drv = priv;
        struct prism2_hostapd_param *param;
@@ -458,10 +458,29 @@ static int hostap_set_encryption(const char *ifname, void *priv,
                memset(param->sta_addr, 0xff, ETH_ALEN);
        else
                memcpy(param->sta_addr, addr, ETH_ALEN);
-       os_strlcpy((char *) param->u.crypt.alg, alg,
-                  HOSTAP_CRYPT_ALG_NAME_LEN);
-       param->u.crypt.flags = txkey ? HOSTAP_CRYPT_FLAG_SET_TX_KEY : 0;
-       param->u.crypt.idx = idx;
+       switch (alg) {
+       case WPA_ALG_NONE:
+               os_strlcpy((char *) param->u.crypt.alg, "NONE",
+                          HOSTAP_CRYPT_ALG_NAME_LEN);
+               break;
+       case WPA_ALG_WEP:
+               os_strlcpy((char *) param->u.crypt.alg, "WEP",
+                          HOSTAP_CRYPT_ALG_NAME_LEN);
+               break;
+       case WPA_ALG_TKIP:
+               os_strlcpy((char *) param->u.crypt.alg, "TKIP",
+                          HOSTAP_CRYPT_ALG_NAME_LEN);
+               break;
+       case WPA_ALG_CCMP:
+               os_strlcpy((char *) param->u.crypt.alg, "CCMP",
+                          HOSTAP_CRYPT_ALG_NAME_LEN);
+               break;
+       default:
+               os_free(buf);
+               return -1;
+       }
+       param->u.crypt.flags = set_tx ? HOSTAP_CRYPT_FLAG_SET_TX_KEY : 0;
+       param->u.crypt.idx = key_idx;
        param->u.crypt.key_len = key_len;
        memcpy((u8 *) (param + 1), key, key_len);
 
@@ -641,10 +660,8 @@ static int hostap_read_sta_data(void *priv,
 }
 
 
-static int hostap_sta_add(const char *ifname, void *priv, const u8 *addr,
-                         u16 aid, u16 capability, u8 *supp_rates,
-                         size_t supp_rates_len, int flags,
-                         u16 listen_interval)
+static int hostap_sta_add(const char *ifname, void *priv,
+                         struct hostapd_sta_add_params *params)
 {
        struct hostap_driver_data *drv = priv;
        struct prism2_hostapd_param param;
@@ -656,22 +673,22 @@ static int hostap_sta_add(const char *ifname, void *priv, const u8 *addr,
 #define WLAN_RATE_5M5 BIT(2)
 #define WLAN_RATE_11M BIT(3)
 
-       for (i = 0; i < supp_rates_len; i++) {
-               if ((supp_rates[i] & 0x7f) == 2)
+       for (i = 0; i < params->supp_rates_len; i++) {
+               if ((params->supp_rates[i] & 0x7f) == 2)
                        tx_supp_rates |= WLAN_RATE_1M;
-               if ((supp_rates[i] & 0x7f) == 4)
+               if ((params->supp_rates[i] & 0x7f) == 4)
                        tx_supp_rates |= WLAN_RATE_2M;
-               if ((supp_rates[i] & 0x7f) == 11)
+               if ((params->supp_rates[i] & 0x7f) == 11)
                        tx_supp_rates |= WLAN_RATE_5M5;
-               if ((supp_rates[i] & 0x7f) == 22)
+               if ((params->supp_rates[i] & 0x7f) == 22)
                        tx_supp_rates |= WLAN_RATE_11M;
        }
 
        memset(&param, 0, sizeof(param));
        param.cmd = PRISM2_HOSTAPD_ADD_STA;
-       memcpy(param.sta_addr, addr, ETH_ALEN);
-       param.u.add_sta.aid = aid;
-       param.u.add_sta.capability = capability;
+       memcpy(param.sta_addr, params->addr, ETH_ALEN);
+       param.u.add_sta.aid = params->aid;
+       param.u.add_sta.capability = params->capability;
        param.u.add_sta.tx_supp_rates = tx_supp_rates;
        return hostapd_ioctl(drv, &param, sizeof(param));
 }
@@ -1020,9 +1037,8 @@ static int hostap_get_we_version(struct hostap_driver_data *drv)
 }
 
 
-static int hostap_wireless_event_init(void *priv)
+static int hostap_wireless_event_init(struct hostap_driver_data *drv)
 {
-       struct hostap_driver_data *drv = priv;
        int s;
        struct sockaddr_nl local;
 
@@ -1053,9 +1069,8 @@ static int hostap_wireless_event_init(void *priv)
 }
 
 
-static void hostap_wireless_event_deinit(void *priv)
+static void hostap_wireless_event_deinit(struct hostap_driver_data *drv)
 {
-       struct hostap_driver_data *drv = priv;
        if (drv->wext_sock < 0)
                return;
        eloop_unregister_read_sock(drv->wext_sock);
@@ -1092,7 +1107,7 @@ static void * hostap_init(struct hostapd_data *hapd)
                return NULL;
        }
 
-       if (hostap_init_sockets(drv)) {
+       if (hostap_init_sockets(drv) || hostap_wireless_event_init(drv)) {
                close(drv->ioctl_sock);
                free(drv);
                return NULL;
@@ -1106,6 +1121,7 @@ static void hostap_driver_deinit(void *priv)
 {
        struct hostap_driver_data *drv = priv;
 
+       hostap_wireless_event_deinit(drv);
        (void) hostap_set_iface_flags(drv, 0);
        (void) hostap_ioctl_prism2param(drv, PRISM2_PARAM_HOSTAPD, 0);
        (void) hostap_ioctl_prism2param(drv, PRISM2_PARAM_HOSTAPD_STA, 0);
@@ -1210,15 +1226,13 @@ static struct hostapd_hw_modes * hostap_get_hw_feature_data(void *priv,
 }
 
 
-const struct wpa_driver_ops wpa_driver_hostap_ops = {
+const struct hapd_driver_ops wpa_driver_hostap_ops = {
        .name = "hostap",
        .init = hostap_init,
        .deinit = hostap_driver_deinit,
-       .wireless_event_init = hostap_wireless_event_init,
-       .wireless_event_deinit = hostap_wireless_event_deinit,
        .set_ieee8021x = hostap_set_ieee8021x,
        .set_privacy = hostap_set_privacy,
-       .set_encryption = hostap_set_encryption,
+       .set_key = hostap_set_key,
        .get_seqnum = hostap_get_seqnum,
        .flush = hostap_flush,
        .set_generic_elem = hostap_set_generic_elem,