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");
return -1;
}
+ if (hapd->driver->get_capa &&
+ hapd->driver->get_capa(hapd->drv_priv, &capa) == 0)
+ iface->drv_flags = capa.flags;
+
return 0;
}
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;
#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;
}
-#ifndef HOSTAPD
struct wiphy_info_data {
int max_scan_ssids;
int ap_supported;
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)
}
}
- 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;