]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Add driver capa flag for EAPOL TX status and store capa in hostapd
authorJouni Malinen <jouni.malinen@atheros.com>
Tue, 29 Mar 2011 14:36:06 +0000 (17:36 +0300)
committerJouni Malinen <j@w1.fi>
Tue, 29 Mar 2011 14:36:06 +0000 (17:36 +0300)
hostapd/main.c
src/ap/hostapd.h
src/drivers/driver.h
src/drivers/driver_nl80211.c

index 21b3cca14fe0ace6c83c23760b6b02adf280d186..c169375cf709690e0bffbc2ee8fa0af8cb9216f6 100644 (file)
@@ -234,6 +234,7 @@ static int hostapd_driver_init(struct hostapd_iface *iface)
        struct hostapd_data *hapd = iface->bss[0];
        struct hostapd_bss_config *conf = hapd->conf;
        u8 *b = conf->bssid;
+       struct wpa_driver_capa capa;
 
        if (hapd->driver == NULL || hapd->driver->hapd_init == NULL) {
                wpa_printf(MSG_ERROR, "No hostapd driver wrapper available");
@@ -273,6 +274,10 @@ static int hostapd_driver_init(struct hostapd_iface *iface)
                return -1;
        }
 
+       if (hapd->driver->get_capa &&
+           hapd->driver->get_capa(hapd->drv_priv, &capa) == 0)
+               iface->drv_flags = capa.flags;
+
        return 0;
 }
 
index bb600e1584739fe91c6b06983affa006dcfd33e7..d4501a1bb16cb461259e1e93d86ca1ebf5d17efe 100644 (file)
@@ -184,6 +184,7 @@ struct hostapd_iface {
        struct ap_info *ap_hash[STA_HASH_SIZE];
        struct ap_info *ap_iter_list;
 
+       unsigned int drv_flags;
        struct hostapd_hw_modes *hw_features;
        int num_hw_features;
        struct hostapd_hw_modes *current_mode;
index 40f1d0e3f6ed334e9e4fd8ff12cefaf8b7adc9e5..3627f7d00cb29cdba46d72a6234fb7423883a5d9 100644 (file)
@@ -561,6 +561,8 @@ struct wpa_driver_capa {
 #define WPA_DRIVER_FLAGS_SANE_ERROR_CODES              0x00004000
 /* Driver supports off-channel TX */
 #define WPA_DRIVER_FLAGS_OFFCHANNEL_TX                 0x00008000
+/* Driver indicates TX status events for EAPOL Data frames */
+#define WPA_DRIVER_FLAGS_EAPOL_TX_STATUS               0x00010000
        unsigned int flags;
 
        int max_scan_ssids;
index f9f85669ec07a5eafe36a8f39e025abeef6346f0..20440f103b24296c3f937f224b361c348432598f 100644 (file)
@@ -1493,7 +1493,6 @@ nla_put_failure:
 }
 
 
-#ifndef HOSTAPD
 struct wiphy_info_data {
        int max_scan_ssids;
        int ap_supported;
@@ -1634,11 +1633,11 @@ static int wpa_driver_nl80211_capa(struct wpa_driver_nl80211_data *drv)
        drv->capa.flags |= WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE;
        if (info.p2p_supported)
                drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_CAPABLE;
+       drv->capa.flags |= WPA_DRIVER_FLAGS_EAPOL_TX_STATUS;
        drv->capa.max_remain_on_chan = info.max_remain_on_chan;
 
        return 0;
 }
-#endif /* HOSTAPD */
 
 
 static int wpa_driver_nl80211_init_nl(struct wpa_driver_nl80211_data *drv)
@@ -2034,13 +2033,13 @@ wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv)
                }
        }
 
-       if (wpa_driver_nl80211_capa(drv))
-               return -1;
-
        netlink_send_oper_ifla(drv->netlink, drv->ifindex,
                               1, IF_OPER_DORMANT);
 #endif /* HOSTAPD */
 
+       if (wpa_driver_nl80211_capa(drv))
+               return -1;
+
        if (linux_get_ifhwaddr(drv->ioctl_sock, bss->ifname, drv->addr))
                return -1;