Add more WPA/IEEE 802.1X parameters into set_ieee8021x() driver op

This gets rid of the need to touch internal hostapd data structures
directly from the driver wrappers.
This commit is contained in:
Jouni Malinen 2009-12-12 23:50:29 +02:00
parent ff2a74eeb1
commit af586419fd
5 changed files with 89 additions and 90 deletions

View file

@ -1497,5 +1497,13 @@ int hostapd_set_drv_ieee8021x(struct hostapd_data *hapd, const char *ifname,
os_memset(&params, 0, sizeof(params)); os_memset(&params, 0, sizeof(params));
params.ifname = ifname; params.ifname = ifname;
params.enabled = enabled; params.enabled = enabled;
if (enabled) {
params.wpa = hapd->conf->wpa;
params.ieee802_1x = hapd->conf->ieee802_1x;
params.wpa_group = hapd->conf->wpa_group;
params.wpa_pairwise = hapd->conf->wpa_pairwise;
params.wpa_key_mgmt = hapd->conf->wpa_key_mgmt;
params.rsn_preauth = hapd->conf->rsn_preauth;
}
return hostapd_set_ieee8021x(hapd, &params); return hostapd_set_ieee8021x(hapd, &params);
} }

View file

@ -486,6 +486,13 @@ struct wpa_bss_params {
const char *ifname; const char *ifname;
/** Whether IEEE 802.1X or WPA/WPA2 is enabled */ /** Whether IEEE 802.1X or WPA/WPA2 is enabled */
int enabled; int enabled;
int wpa;
int ieee802_1x;
int wpa_group;
int wpa_pairwise;
int wpa_key_mgmt;
int rsn_preauth;
}; };

View file

@ -58,8 +58,6 @@
#include "wireless_copy.h" #include "wireless_copy.h"
#include "../hostapd/hostapd.h"
#include "../hostapd/config.h"
#include "../hostapd/sta_flags.h" #include "../hostapd/sta_flags.h"
#include "driver.h" #include "driver.h"
#include "eloop.h" #include "eloop.h"
@ -192,13 +190,12 @@ ether_sprintf(const u8 *addr)
* Configure WPA parameters. * Configure WPA parameters.
*/ */
static int static int
madwifi_configure_wpa(struct madwifi_driver_data *drv) madwifi_configure_wpa(struct madwifi_driver_data *drv,
struct wpa_bss_params *params)
{ {
struct hostapd_data *hapd = drv->hapd;
struct hostapd_bss_config *conf = hapd->conf;
int v; int v;
switch (conf->wpa_group) { switch (params->wpa_group) {
case WPA_CIPHER_CCMP: case WPA_CIPHER_CCMP:
v = IEEE80211_CIPHER_AES_CCM; v = IEEE80211_CIPHER_AES_CCM;
break; break;
@ -216,7 +213,7 @@ madwifi_configure_wpa(struct madwifi_driver_data *drv)
break; break;
default: default:
wpa_printf(MSG_ERROR, "Unknown group key cipher %u", wpa_printf(MSG_ERROR, "Unknown group key cipher %u",
conf->wpa_group); params->wpa_group);
return -1; return -1;
} }
wpa_printf(MSG_DEBUG, "%s: group key cipher=%d", __func__, v); wpa_printf(MSG_DEBUG, "%s: group key cipher=%d", __func__, v);
@ -226,7 +223,7 @@ madwifi_configure_wpa(struct madwifi_driver_data *drv)
} }
if (v == IEEE80211_CIPHER_WEP) { if (v == IEEE80211_CIPHER_WEP) {
/* key length is done only for specific ciphers */ /* key length is done only for specific ciphers */
v = (conf->wpa_group == WPA_CIPHER_WEP104 ? 13 : 5); v = (params->wpa_group == WPA_CIPHER_WEP104 ? 13 : 5);
if (set80211param(drv, IEEE80211_PARAM_MCASTKEYLEN, v)) { if (set80211param(drv, IEEE80211_PARAM_MCASTKEYLEN, v)) {
printf("Unable to set group key length to %u\n", v); printf("Unable to set group key length to %u\n", v);
return -1; return -1;
@ -234,11 +231,11 @@ madwifi_configure_wpa(struct madwifi_driver_data *drv)
} }
v = 0; v = 0;
if (conf->wpa_pairwise & WPA_CIPHER_CCMP) if (params->wpa_pairwise & WPA_CIPHER_CCMP)
v |= 1<<IEEE80211_CIPHER_AES_CCM; v |= 1<<IEEE80211_CIPHER_AES_CCM;
if (conf->wpa_pairwise & WPA_CIPHER_TKIP) if (params->wpa_pairwise & WPA_CIPHER_TKIP)
v |= 1<<IEEE80211_CIPHER_TKIP; v |= 1<<IEEE80211_CIPHER_TKIP;
if (conf->wpa_pairwise & WPA_CIPHER_NONE) if (params->wpa_pairwise & WPA_CIPHER_NONE)
v |= 1<<IEEE80211_CIPHER_NONE; v |= 1<<IEEE80211_CIPHER_NONE;
wpa_printf(MSG_DEBUG, "%s: pairwise key ciphers=0x%x", __func__, v); wpa_printf(MSG_DEBUG, "%s: pairwise key ciphers=0x%x", __func__, v);
if (set80211param(drv, IEEE80211_PARAM_UCASTCIPHERS, v)) { if (set80211param(drv, IEEE80211_PARAM_UCASTCIPHERS, v)) {
@ -247,26 +244,27 @@ madwifi_configure_wpa(struct madwifi_driver_data *drv)
} }
wpa_printf(MSG_DEBUG, "%s: key management algorithms=0x%x", wpa_printf(MSG_DEBUG, "%s: key management algorithms=0x%x",
__func__, conf->wpa_key_mgmt); __func__, params->wpa_key_mgmt);
if (set80211param(drv, IEEE80211_PARAM_KEYMGTALGS, conf->wpa_key_mgmt)) { if (set80211param(drv, IEEE80211_PARAM_KEYMGTALGS,
params->wpa_key_mgmt)) {
printf("Unable to set key management algorithms to 0x%x\n", printf("Unable to set key management algorithms to 0x%x\n",
conf->wpa_key_mgmt); params->wpa_key_mgmt);
return -1; return -1;
} }
v = 0; v = 0;
if (conf->rsn_preauth) if (params->rsn_preauth)
v |= BIT(0); v |= BIT(0);
wpa_printf(MSG_DEBUG, "%s: rsn capabilities=0x%x", wpa_printf(MSG_DEBUG, "%s: rsn capabilities=0x%x",
__func__, conf->rsn_preauth); __func__, params->rsn_preauth);
if (set80211param(drv, IEEE80211_PARAM_RSNCAPS, v)) { if (set80211param(drv, IEEE80211_PARAM_RSNCAPS, v)) {
printf("Unable to set RSN capabilities to 0x%x\n", v); printf("Unable to set RSN capabilities to 0x%x\n", v);
return -1; return -1;
} }
wpa_printf(MSG_DEBUG, "%s: enable WPA=0x%x", __func__, conf->wpa); wpa_printf(MSG_DEBUG, "%s: enable WPA=0x%x", __func__, params->wpa);
if (set80211param(drv, IEEE80211_PARAM_WPA, conf->wpa)) { if (set80211param(drv, IEEE80211_PARAM_WPA, params->wpa)) {
printf("Unable to set WPA to %u\n", conf->wpa); printf("Unable to set WPA to %u\n", params->wpa);
return -1; return -1;
} }
return 0; return 0;
@ -309,30 +307,27 @@ static int
madwifi_set_ieee8021x(void *priv, struct wpa_bss_params *params) madwifi_set_ieee8021x(void *priv, struct wpa_bss_params *params)
{ {
struct madwifi_driver_data *drv = priv; struct madwifi_driver_data *drv = priv;
struct hostapd_data *hapd = drv->hapd;
struct hostapd_bss_config *conf = hapd->conf;
int enabled = params->enabled;
wpa_printf(MSG_DEBUG, "%s: enabled=%d", __func__, enabled); wpa_printf(MSG_DEBUG, "%s: enabled=%d", __func__, params->enabled);
if (!enabled) { if (!params->enabled) {
/* XXX restore state */ /* XXX restore state */
return set80211param(priv, IEEE80211_PARAM_AUTHMODE, return set80211param(priv, IEEE80211_PARAM_AUTHMODE,
IEEE80211_AUTH_AUTO); IEEE80211_AUTH_AUTO);
} }
if (!conf->wpa && !conf->ieee802_1x) { if (!params->wpa && !params->ieee802_1x) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_DRIVER, hostapd_logger(drv->hapd, NULL, HOSTAPD_MODULE_DRIVER,
HOSTAPD_LEVEL_WARNING, "No 802.1X or WPA enabled!"); HOSTAPD_LEVEL_WARNING, "No 802.1X or WPA enabled!");
return -1; return -1;
} }
if (conf->wpa && madwifi_configure_wpa(drv) != 0) { if (params->wpa && madwifi_configure_wpa(drv, params) != 0) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_DRIVER, hostapd_logger(drv->hapd, NULL, HOSTAPD_MODULE_DRIVER,
HOSTAPD_LEVEL_WARNING, "Error configuring WPA state!"); HOSTAPD_LEVEL_WARNING, "Error configuring WPA state!");
return -1; return -1;
} }
if (set80211param(priv, IEEE80211_PARAM_AUTHMODE, if (set80211param(priv, IEEE80211_PARAM_AUTHMODE,
(conf->wpa ? IEEE80211_AUTH_WPA : IEEE80211_AUTH_8021X))) { (params->wpa ? IEEE80211_AUTH_WPA : IEEE80211_AUTH_8021X))) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_DRIVER, hostapd_logger(drv->hapd, NULL, HOSTAPD_MODULE_DRIVER,
HOSTAPD_LEVEL_WARNING, "Error enabling WPA/802.1X!"); HOSTAPD_LEVEL_WARNING, "Error enabling WPA/802.1X!");
return -1; return -1;
} }

View file

@ -154,8 +154,6 @@ bsd_set_ssid(int s, const char *ifname, const u8 *ssid, size_t ssid_len)
#undef WPA_OUI_TYPE #undef WPA_OUI_TYPE
#include "l2_packet/l2_packet.h" #include "l2_packet/l2_packet.h"
#include "../../hostapd/hostapd.h"
#include "../../hostapd/config.h"
#include "../../hostapd/sta_flags.h" #include "../../hostapd/sta_flags.h"
struct bsd_driver_data { struct bsd_driver_data {
@ -204,15 +202,13 @@ ether_sprintf(const u8 *addr)
* Configure WPA parameters. * Configure WPA parameters.
*/ */
static int static int
bsd_configure_wpa(struct bsd_driver_data *drv) bsd_configure_wpa(struct bsd_driver_data *drv, struct wpa_bss_params *params)
{ {
static const char *ciphernames[] = static const char *ciphernames[] =
{ "WEP", "TKIP", "AES-OCB", "AES-CCM", "CKIP", "NONE" }; { "WEP", "TKIP", "AES-OCB", "AES-CCM", "CKIP", "NONE" };
struct hostapd_data *hapd = drv->hapd;
struct hostapd_bss_config *conf = hapd->conf;
int v; int v;
switch (conf->wpa_group) { switch (params->wpa_group) {
case WPA_CIPHER_CCMP: case WPA_CIPHER_CCMP:
v = IEEE80211_CIPHER_AES_CCM; v = IEEE80211_CIPHER_AES_CCM;
break; break;
@ -230,7 +226,7 @@ bsd_configure_wpa(struct bsd_driver_data *drv)
break; break;
default: default:
printf("Unknown group key cipher %u\n", printf("Unknown group key cipher %u\n",
conf->wpa_group); params->wpa_group);
return -1; return -1;
} }
wpa_printf(MSG_DEBUG, "%s: group key cipher=%s (%u)", wpa_printf(MSG_DEBUG, "%s: group key cipher=%s (%u)",
@ -242,7 +238,7 @@ bsd_configure_wpa(struct bsd_driver_data *drv)
} }
if (v == IEEE80211_CIPHER_WEP) { if (v == IEEE80211_CIPHER_WEP) {
/* key length is done only for specific ciphers */ /* key length is done only for specific ciphers */
v = (conf->wpa_group == WPA_CIPHER_WEP104 ? 13 : 5); v = (params->wpa_group == WPA_CIPHER_WEP104 ? 13 : 5);
if (set80211param(drv, IEEE80211_IOC_MCASTKEYLEN, v)) { if (set80211param(drv, IEEE80211_IOC_MCASTKEYLEN, v)) {
printf("Unable to set group key length to %u\n", v); printf("Unable to set group key length to %u\n", v);
return -1; return -1;
@ -250,11 +246,11 @@ bsd_configure_wpa(struct bsd_driver_data *drv)
} }
v = 0; v = 0;
if (conf->wpa_pairwise & WPA_CIPHER_CCMP) if (params->wpa_pairwise & WPA_CIPHER_CCMP)
v |= 1<<IEEE80211_CIPHER_AES_CCM; v |= 1<<IEEE80211_CIPHER_AES_CCM;
if (conf->wpa_pairwise & WPA_CIPHER_TKIP) if (params->wpa_pairwise & WPA_CIPHER_TKIP)
v |= 1<<IEEE80211_CIPHER_TKIP; v |= 1<<IEEE80211_CIPHER_TKIP;
if (conf->wpa_pairwise & WPA_CIPHER_NONE) if (params->wpa_pairwise & WPA_CIPHER_NONE)
v |= 1<<IEEE80211_CIPHER_NONE; v |= 1<<IEEE80211_CIPHER_NONE;
wpa_printf(MSG_DEBUG, "%s: pairwise key ciphers=0x%x", __func__, v); wpa_printf(MSG_DEBUG, "%s: pairwise key ciphers=0x%x", __func__, v);
if (set80211param(drv, IEEE80211_IOC_UCASTCIPHERS, v)) { if (set80211param(drv, IEEE80211_IOC_UCASTCIPHERS, v)) {
@ -263,26 +259,27 @@ bsd_configure_wpa(struct bsd_driver_data *drv)
} }
wpa_printf(MSG_DEBUG, "%s: key management algorithms=0x%x", wpa_printf(MSG_DEBUG, "%s: key management algorithms=0x%x",
__func__, conf->wpa_key_mgmt); __func__, params->wpa_key_mgmt);
if (set80211param(drv, IEEE80211_IOC_KEYMGTALGS, conf->wpa_key_mgmt)) { if (set80211param(drv, IEEE80211_IOC_KEYMGTALGS, params->wpa_key_mgmt))
{
printf("Unable to set key management algorithms to 0x%x\n", printf("Unable to set key management algorithms to 0x%x\n",
conf->wpa_key_mgmt); params->wpa_key_mgmt);
return -1; return -1;
} }
v = 0; v = 0;
if (conf->rsn_preauth) if (params->rsn_preauth)
v |= BIT(0); v |= BIT(0);
wpa_printf(MSG_DEBUG, "%s: rsn capabilities=0x%x", wpa_printf(MSG_DEBUG, "%s: rsn capabilities=0x%x",
__func__, conf->rsn_preauth); __func__, params->rsn_preauth);
if (set80211param(drv, IEEE80211_IOC_RSNCAPS, v)) { if (set80211param(drv, IEEE80211_IOC_RSNCAPS, v)) {
printf("Unable to set RSN capabilities to 0x%x\n", v); printf("Unable to set RSN capabilities to 0x%x\n", v);
return -1; return -1;
} }
wpa_printf(MSG_DEBUG, "%s: enable WPA= 0x%x", __func__, conf->wpa); wpa_printf(MSG_DEBUG, "%s: enable WPA= 0x%x", __func__, params->wpa);
if (set80211param(drv, IEEE80211_IOC_WPA, conf->wpa)) { if (set80211param(drv, IEEE80211_IOC_WPA, params->wpa)) {
printf("Unable to set WPA to %u\n", conf->wpa); printf("Unable to set WPA to %u\n", params->wpa);
return -1; return -1;
} }
return 0; return 0;
@ -325,30 +322,27 @@ static int
bsd_set_ieee8021x(void *priv, struct wpa_bss_params *params) bsd_set_ieee8021x(void *priv, struct wpa_bss_params *params)
{ {
struct bsd_driver_data *drv = priv; struct bsd_driver_data *drv = priv;
struct hostapd_data *hapd = drv->hapd;
struct hostapd_bss_config *conf = hapd->conf;
int enabled = params->enabled;
wpa_printf(MSG_DEBUG, "%s: enabled=%d", __func__, enabled); wpa_printf(MSG_DEBUG, "%s: enabled=%d", __func__, params->enabled);
if (!enabled) { if (!params->enabled) {
/* XXX restore state */ /* XXX restore state */
return set80211param(priv, IEEE80211_IOC_AUTHMODE, return set80211param(priv, IEEE80211_IOC_AUTHMODE,
IEEE80211_AUTH_AUTO); IEEE80211_AUTH_AUTO);
} }
if (!conf->wpa && !conf->ieee802_1x) { if (!params->wpa && !params->ieee802_1x) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_DRIVER, hostapd_logger(drv->hapd, NULL, HOSTAPD_MODULE_DRIVER,
HOSTAPD_LEVEL_WARNING, "No 802.1X or WPA enabled!"); HOSTAPD_LEVEL_WARNING, "No 802.1X or WPA enabled!");
return -1; return -1;
} }
if (conf->wpa && bsd_configure_wpa(drv) != 0) { if (params->wpa && bsd_configure_wpa(drv) != 0) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_DRIVER, hostapd_logger(drv->hapd, NULL, HOSTAPD_MODULE_DRIVER,
HOSTAPD_LEVEL_WARNING, "Error configuring WPA state!"); HOSTAPD_LEVEL_WARNING, "Error configuring WPA state!");
return -1; return -1;
} }
if (set80211param(priv, IEEE80211_IOC_AUTHMODE, if (set80211param(priv, IEEE80211_IOC_AUTHMODE,
(conf->wpa ? IEEE80211_AUTH_WPA : IEEE80211_AUTH_8021X))) { (params->wpa ? IEEE80211_AUTH_WPA : IEEE80211_AUTH_8021X))) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_DRIVER, hostapd_logger(drv->hapd, NULL, HOSTAPD_MODULE_DRIVER,
HOSTAPD_LEVEL_WARNING, "Error enabling WPA/802.1X!"); HOSTAPD_LEVEL_WARNING, "Error enabling WPA/802.1X!");
return -1; return -1;
} }

View file

@ -74,8 +74,6 @@
#include "priv_netlink.h" #include "priv_netlink.h"
#include "l2_packet/l2_packet.h" #include "l2_packet/l2_packet.h"
#include "../../hostapd/hostapd.h"
#include "../../hostapd/config.h"
#include "../../hostapd/sta_flags.h" #include "../../hostapd/sta_flags.h"
@ -237,13 +235,12 @@ ether_sprintf(const u8 *addr)
* Configure WPA parameters. * Configure WPA parameters.
*/ */
static int static int
madwifi_configure_wpa(struct madwifi_driver_data *drv) madwifi_configure_wpa(struct madwifi_driver_data *drv,
struct wpa_bss_params *params)
{ {
struct hostapd_data *hapd = drv->hapd;
struct hostapd_bss_config *conf = hapd->conf;
int v; int v;
switch (conf->wpa_group) { switch (params->wpa_group) {
case WPA_CIPHER_CCMP: case WPA_CIPHER_CCMP:
v = IEEE80211_CIPHER_AES_CCM; v = IEEE80211_CIPHER_AES_CCM;
break; break;
@ -261,7 +258,7 @@ madwifi_configure_wpa(struct madwifi_driver_data *drv)
break; break;
default: default:
wpa_printf(MSG_ERROR, "Unknown group key cipher %u", wpa_printf(MSG_ERROR, "Unknown group key cipher %u",
conf->wpa_group); params->wpa_group);
return -1; return -1;
} }
wpa_printf(MSG_DEBUG, "%s: group key cipher=%d", __func__, v); wpa_printf(MSG_DEBUG, "%s: group key cipher=%d", __func__, v);
@ -271,7 +268,7 @@ madwifi_configure_wpa(struct madwifi_driver_data *drv)
} }
if (v == IEEE80211_CIPHER_WEP) { if (v == IEEE80211_CIPHER_WEP) {
/* key length is done only for specific ciphers */ /* key length is done only for specific ciphers */
v = (conf->wpa_group == WPA_CIPHER_WEP104 ? 13 : 5); v = (params->wpa_group == WPA_CIPHER_WEP104 ? 13 : 5);
if (set80211param(drv, IEEE80211_PARAM_MCASTKEYLEN, v)) { if (set80211param(drv, IEEE80211_PARAM_MCASTKEYLEN, v)) {
printf("Unable to set group key length to %u\n", v); printf("Unable to set group key length to %u\n", v);
return -1; return -1;
@ -279,11 +276,11 @@ madwifi_configure_wpa(struct madwifi_driver_data *drv)
} }
v = 0; v = 0;
if (conf->wpa_pairwise & WPA_CIPHER_CCMP) if (params->wpa_pairwise & WPA_CIPHER_CCMP)
v |= 1<<IEEE80211_CIPHER_AES_CCM; v |= 1<<IEEE80211_CIPHER_AES_CCM;
if (conf->wpa_pairwise & WPA_CIPHER_TKIP) if (params->wpa_pairwise & WPA_CIPHER_TKIP)
v |= 1<<IEEE80211_CIPHER_TKIP; v |= 1<<IEEE80211_CIPHER_TKIP;
if (conf->wpa_pairwise & WPA_CIPHER_NONE) if (params->wpa_pairwise & WPA_CIPHER_NONE)
v |= 1<<IEEE80211_CIPHER_NONE; v |= 1<<IEEE80211_CIPHER_NONE;
wpa_printf(MSG_DEBUG, "%s: pairwise key ciphers=0x%x", __func__, v); wpa_printf(MSG_DEBUG, "%s: pairwise key ciphers=0x%x", __func__, v);
if (set80211param(drv, IEEE80211_PARAM_UCASTCIPHERS, v)) { if (set80211param(drv, IEEE80211_PARAM_UCASTCIPHERS, v)) {
@ -292,26 +289,27 @@ madwifi_configure_wpa(struct madwifi_driver_data *drv)
} }
wpa_printf(MSG_DEBUG, "%s: key management algorithms=0x%x", wpa_printf(MSG_DEBUG, "%s: key management algorithms=0x%x",
__func__, conf->wpa_key_mgmt); __func__, params->wpa_key_mgmt);
if (set80211param(drv, IEEE80211_PARAM_KEYMGTALGS, conf->wpa_key_mgmt)) { if (set80211param(drv, IEEE80211_PARAM_KEYMGTALGS,
params->wpa_key_mgmt)) {
printf("Unable to set key management algorithms to 0x%x\n", printf("Unable to set key management algorithms to 0x%x\n",
conf->wpa_key_mgmt); params->wpa_key_mgmt);
return -1; return -1;
} }
v = 0; v = 0;
if (conf->rsn_preauth) if (params->rsn_preauth)
v |= BIT(0); v |= BIT(0);
wpa_printf(MSG_DEBUG, "%s: rsn capabilities=0x%x", wpa_printf(MSG_DEBUG, "%s: rsn capabilities=0x%x",
__func__, conf->rsn_preauth); __func__, params->rsn_preauth);
if (set80211param(drv, IEEE80211_PARAM_RSNCAPS, v)) { if (set80211param(drv, IEEE80211_PARAM_RSNCAPS, v)) {
printf("Unable to set RSN capabilities to 0x%x\n", v); printf("Unable to set RSN capabilities to 0x%x\n", v);
return -1; return -1;
} }
wpa_printf(MSG_DEBUG, "%s: enable WPA=0x%x", __func__, conf->wpa); wpa_printf(MSG_DEBUG, "%s: enable WPA=0x%x", __func__, params->wpa);
if (set80211param(drv, IEEE80211_PARAM_WPA, conf->wpa)) { if (set80211param(drv, IEEE80211_PARAM_WPA, params->wpa)) {
printf("Unable to set WPA to %u\n", conf->wpa); printf("Unable to set WPA to %u\n", params->wpa);
return -1; return -1;
} }
return 0; return 0;
@ -354,30 +352,27 @@ static int
madwifi_set_ieee8021x(void *priv, struct wpa_bss_params *params) madwifi_set_ieee8021x(void *priv, struct wpa_bss_params *params)
{ {
struct madwifi_driver_data *drv = priv; struct madwifi_driver_data *drv = priv;
struct hostapd_data *hapd = drv->hapd;
struct hostapd_bss_config *conf = hapd->conf;
int enabled = params->enabled;
wpa_printf(MSG_DEBUG, "%s: enabled=%d", __func__, enabled); wpa_printf(MSG_DEBUG, "%s: enabled=%d", __func__, params->enabled);
if (!enabled) { if (!params->enabled) {
/* XXX restore state */ /* XXX restore state */
return set80211param(priv, IEEE80211_PARAM_AUTHMODE, return set80211param(priv, IEEE80211_PARAM_AUTHMODE,
IEEE80211_AUTH_AUTO); IEEE80211_AUTH_AUTO);
} }
if (!conf->wpa && !conf->ieee802_1x) { if (!params->wpa && !params->ieee802_1x) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_DRIVER, hostapd_logger(drv->hapd, NULL, HOSTAPD_MODULE_DRIVER,
HOSTAPD_LEVEL_WARNING, "No 802.1X or WPA enabled!"); HOSTAPD_LEVEL_WARNING, "No 802.1X or WPA enabled!");
return -1; return -1;
} }
if (conf->wpa && madwifi_configure_wpa(drv) != 0) { if (params->wpa && madwifi_configure_wpa(drv, params) != 0) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_DRIVER, hostapd_logger(drv->hapd, NULL, HOSTAPD_MODULE_DRIVER,
HOSTAPD_LEVEL_WARNING, "Error configuring WPA state!"); HOSTAPD_LEVEL_WARNING, "Error configuring WPA state!");
return -1; return -1;
} }
if (set80211param(priv, IEEE80211_PARAM_AUTHMODE, if (set80211param(priv, IEEE80211_PARAM_AUTHMODE,
(conf->wpa ? IEEE80211_AUTH_WPA : IEEE80211_AUTH_8021X))) { (params->wpa ? IEEE80211_AUTH_WPA : IEEE80211_AUTH_8021X))) {
hostapd_logger(hapd, NULL, HOSTAPD_MODULE_DRIVER, hostapd_logger(drv->hapd, NULL, HOSTAPD_MODULE_DRIVER,
HOSTAPD_LEVEL_WARNING, "Error enabling WPA/802.1X!"); HOSTAPD_LEVEL_WARNING, "Error enabling WPA/802.1X!");
return -1; return -1;
} }