atheros: Fix auth_alg configuration for static WEP
When IEEE 802.1X is not enabled, driver_atheros.c needs to know how to set authentication algorithms for static WEP.
This commit is contained in:
parent
6d28fb9627
commit
41fd1d9e9a
4 changed files with 44 additions and 0 deletions
|
@ -194,4 +194,12 @@ static inline int hostapd_drv_set_radius_acl_expire(struct hostapd_data *hapd,
|
|||
return hapd->driver->set_radius_acl_expire(hapd->drv_priv, mac);
|
||||
}
|
||||
|
||||
static inline int hostapd_drv_set_authmode(struct hostapd_data *hapd,
|
||||
int auth_algs)
|
||||
{
|
||||
if (hapd->driver == NULL || hapd->driver->set_authmode == NULL)
|
||||
return 0;
|
||||
return hapd->driver->set_authmode(hapd->drv_priv, auth_algs);
|
||||
}
|
||||
|
||||
#endif /* AP_DRV_OPS */
|
||||
|
|
|
@ -306,6 +306,12 @@ static int hostapd_setup_encryption(char *iface, struct hostapd_data *hapd)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* When IEEE 802.1X is not enabled, the driver may need to know how to
|
||||
* set authentication algorithms for static WEP.
|
||||
*/
|
||||
hostapd_drv_set_authmode(hapd, hapd->conf->auth_algs);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (hapd->conf->ssid.wep.key[i] &&
|
||||
hostapd_drv_set_key(iface, hapd, WPA_ALG_WEP, NULL, i,
|
||||
|
|
|
@ -2241,6 +2241,18 @@ struct wpa_driver_ops {
|
|||
* @signal_info: Connection info structure
|
||||
*/
|
||||
int (*signal_poll)(void *priv, struct wpa_signal_info *signal_info);
|
||||
|
||||
/**
|
||||
* set_authmode - Set authentication algorithm(s) for static WEP
|
||||
* @priv: Private driver interface data
|
||||
* @authmode: 1=Open System, 2=Shared Key, 3=both
|
||||
* Returns: 0 on success, -1 on failure
|
||||
*
|
||||
* This function can be used to set authentication algorithms for AP
|
||||
* mode when static WEP is used. If the driver uses user space MLME/SME
|
||||
* implementation, there is no need to implement this function.
|
||||
*/
|
||||
int (*set_authmode)(void *priv, int authmode);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1357,6 +1357,23 @@ atheros_commit(void *priv)
|
|||
return linux_set_iface_flags(drv->ioctl_sock, drv->iface, 1);
|
||||
}
|
||||
|
||||
static int atheros_set_authmode(void *priv, int auth_algs)
|
||||
{
|
||||
int authmode;
|
||||
|
||||
if ((auth_algs & WPA_AUTH_ALG_OPEN) &&
|
||||
(auth_algs & WPA_AUTH_ALG_SHARED))
|
||||
authmode = IEEE80211_AUTH_AUTO;
|
||||
else if (auth_algs & WPA_AUTH_ALG_OPEN)
|
||||
authmode = IEEE80211_AUTH_OPEN;
|
||||
else if (auth_algs & WPA_AUTH_ALG_SHARED)
|
||||
authmode = IEEE80211_AUTH_SHARED;
|
||||
else
|
||||
return -1;
|
||||
|
||||
return set80211param(priv, IEEE80211_PARAM_AUTHMODE, authmode);
|
||||
}
|
||||
|
||||
const struct wpa_driver_ops wpa_driver_atheros_ops = {
|
||||
.name = "atheros",
|
||||
.hapd_init = atheros_init,
|
||||
|
@ -1378,4 +1395,5 @@ const struct wpa_driver_ops wpa_driver_atheros_ops = {
|
|||
.sta_clear_stats = atheros_sta_clear_stats,
|
||||
.commit = atheros_commit,
|
||||
.set_ap_wps_ie = atheros_set_ap_wps_ie,
|
||||
.set_authmode = atheros_set_authmode,
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue