atheros: Read driver FILS capability
This will be used to determine what type of operations to use for STA authentication and association. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
d5444aac4c
commit
2b7a8ec473
1 changed files with 44 additions and 0 deletions
|
@ -70,6 +70,7 @@ struct atheros_driver_data {
|
||||||
int ioctl_sock; /* socket for ioctl() use */
|
int ioctl_sock; /* socket for ioctl() use */
|
||||||
struct netlink_data *netlink;
|
struct netlink_data *netlink;
|
||||||
int we_version;
|
int we_version;
|
||||||
|
int fils_en; /* FILS enable/disable in driver */
|
||||||
u8 acct_mac[ETH_ALEN];
|
u8 acct_mac[ETH_ALEN];
|
||||||
struct hostap_sta_driver_data acct_data;
|
struct hostap_sta_driver_data acct_data;
|
||||||
|
|
||||||
|
@ -178,6 +179,25 @@ static const char * athr_get_param_name(int op)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_FILS
|
||||||
|
static int
|
||||||
|
get80211param(struct atheros_driver_data *drv, int op, int *data)
|
||||||
|
{
|
||||||
|
struct iwreq iwr;
|
||||||
|
|
||||||
|
os_memset(&iwr, 0, sizeof(iwr));
|
||||||
|
os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ);
|
||||||
|
iwr.u.mode = op;
|
||||||
|
|
||||||
|
if (ioctl(drv->ioctl_sock, IEEE80211_IOCTL_GETPARAM, &iwr) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
*data = iwr.u.mode;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_FILS */
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
set80211priv(struct atheros_driver_data *drv, int op, void *data, int len)
|
set80211priv(struct atheros_driver_data *drv, int op, void *data, int len)
|
||||||
{
|
{
|
||||||
|
@ -1603,6 +1623,27 @@ handle_read(void *ctx, const u8 *src_addr, const u8 *buf, size_t len)
|
||||||
len - sizeof(struct l2_ethhdr));
|
len - sizeof(struct l2_ethhdr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void atheros_read_fils_cap(struct atheros_driver_data *drv)
|
||||||
|
{
|
||||||
|
int fils = 0;
|
||||||
|
|
||||||
|
#ifdef CONFIG_FILS
|
||||||
|
/* TODO: Would be better to have #ifdef on the IEEE80211_PARAM_* value
|
||||||
|
* to automatically check this against the driver header files. */
|
||||||
|
if (get80211param(drv, IEEE80211_PARAM_ENABLE_FILS, &fils) < 0) {
|
||||||
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"%s: Failed to get FILS capability from driver",
|
||||||
|
__func__);
|
||||||
|
/* Assume driver does not support FILS */
|
||||||
|
fils = 0;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_FILS */
|
||||||
|
drv->fils_en = fils;
|
||||||
|
wpa_printf(MSG_DEBUG, "atheros: fils_en=%d", drv->fils_en);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
atheros_init(struct hostapd_data *hapd, struct wpa_init_params *params)
|
atheros_init(struct hostapd_data *hapd, struct wpa_init_params *params)
|
||||||
{
|
{
|
||||||
|
@ -1683,6 +1724,9 @@ atheros_init(struct hostapd_data *hapd, struct wpa_init_params *params)
|
||||||
if (atheros_wireless_event_init(drv))
|
if (atheros_wireless_event_init(drv))
|
||||||
goto bad;
|
goto bad;
|
||||||
|
|
||||||
|
/* Read FILS capability from the driver */
|
||||||
|
atheros_read_fils_cap(drv);
|
||||||
|
|
||||||
return drv;
|
return drv;
|
||||||
bad:
|
bad:
|
||||||
atheros_reset_appfilter(drv);
|
atheros_reset_appfilter(drv);
|
||||||
|
|
Loading…
Reference in a new issue