summaryrefslogtreecommitdiffstats
path: root/src/drivers/driver_ndiswrapper.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/driver_ndiswrapper.c')
-rw-r--r--src/drivers/driver_ndiswrapper.c42
1 files changed, 25 insertions, 17 deletions
diff --git a/src/drivers/driver_ndiswrapper.c b/src/drivers/driver_ndiswrapper.c
index b5c534a..cd2f61e 100644
--- a/src/drivers/driver_ndiswrapper.c
+++ b/src/drivers/driver_ndiswrapper.c
@@ -33,9 +33,8 @@ struct wpa_driver_ndiswrapper_data {
};
-struct wpa_key
-{
- wpa_alg alg;
+struct wpa_key {
+ enum wpa_alg alg;
const u8 *addr;
int key_index;
int set_tx;
@@ -45,17 +44,16 @@ struct wpa_key
size_t key_len;
};
-struct wpa_assoc_info
-{
+struct wpa_assoc_info {
const u8 *bssid;
const u8 *ssid;
size_t ssid_len;
int freq;
const u8 *wpa_ie;
size_t wpa_ie_len;
- wpa_cipher pairwise_suite;
- wpa_cipher group_suite;
- wpa_key_mgmt key_mgmt_suite;
+ enum wpa_cipher pairwise_suite;
+ enum wpa_cipher group_suite;
+ enum wpa_key_mgmt key_mgmt_suite;
int auth_alg;
int mode;
};
@@ -73,6 +71,8 @@ struct wpa_assoc_info
#define WPA_DEINIT SIOCIWFIRSTPRIV+10
#define WPA_GET_CAPA SIOCIWFIRSTPRIV+11
+static int wpa_ndiswrapper_set_auth_alg(void *priv, int auth_alg);
+
static int get_socket(void)
{
static const int families[] = {
@@ -111,7 +111,8 @@ static int wpa_ndiswrapper_set_wpa(void *priv, int enabled)
return ret;
}
-static int wpa_ndiswrapper_set_key(void *priv, wpa_alg alg, const u8 *addr,
+static int wpa_ndiswrapper_set_key(const char *ifname, void *priv,
+ enum wpa_alg alg, const u8 *addr,
int key_idx, int set_tx,
const u8 *seq, size_t seq_len,
const u8 *key, size_t key_len)
@@ -146,8 +147,8 @@ static int wpa_ndiswrapper_set_key(void *priv, wpa_alg alg, const u8 *addr,
* did not associate. Try to make sure the keys are cleared so
* that plaintext APs can be used in all cases.
*/
- wpa_driver_wext_set_key(drv->wext, alg, addr, key_idx, set_tx,
- seq, seq_len, key, key_len);
+ wpa_driver_wext_set_key(ifname, drv->wext, alg, addr, key_idx,
+ set_tx, seq, seq_len, key, key_len);
}
return ret;
@@ -223,6 +224,12 @@ wpa_ndiswrapper_associate(void *priv,
struct wpa_assoc_info wpa_assoc_info;
struct iwreq priv_req;
+ if (wpa_ndiswrapper_set_drop_unencrypted(drv,
+ params->drop_unencrypted) < 0)
+ ret = -1;
+ if (wpa_ndiswrapper_set_auth_alg(drv, params->auth_alg) < 0)
+ ret = -1;
+
os_memset(&priv_req, 0, sizeof(priv_req));
os_memset(&wpa_assoc_info, 0, sizeof(wpa_assoc_info));
@@ -274,10 +281,11 @@ static int wpa_ndiswrapper_get_ssid(void *priv, u8 *ssid)
}
-static int wpa_ndiswrapper_scan(void *priv, const u8 *ssid, size_t ssid_len)
+static int wpa_ndiswrapper_scan(void *priv,
+ struct wpa_driver_scan_params *params)
{
struct wpa_driver_ndiswrapper_data *drv = priv;
- return wpa_driver_wext_scan(drv->wext, ssid, ssid_len);
+ return wpa_driver_wext_scan(drv->wext, params);
}
@@ -334,6 +342,8 @@ static void * wpa_ndiswrapper_init(void *ctx, const char *ifname)
return NULL;
}
+ wpa_ndiswrapper_set_wpa(drv, 1);
+
return drv;
}
@@ -341,6 +351,7 @@ static void * wpa_ndiswrapper_init(void *ctx, const char *ifname)
static void wpa_ndiswrapper_deinit(void *priv)
{
struct wpa_driver_ndiswrapper_data *drv = priv;
+ wpa_ndiswrapper_set_wpa(drv, 0);
wpa_driver_wext_deinit(drv->wext);
close(drv->sock);
os_free(drv);
@@ -350,18 +361,15 @@ static void wpa_ndiswrapper_deinit(void *priv)
const struct wpa_driver_ops wpa_driver_ndiswrapper_ops = {
.name = "ndiswrapper",
.desc = "Linux ndiswrapper (deprecated; use wext)",
- .set_wpa = wpa_ndiswrapper_set_wpa,
.set_key = wpa_ndiswrapper_set_key,
.set_countermeasures = wpa_ndiswrapper_set_countermeasures,
- .set_drop_unencrypted = wpa_ndiswrapper_set_drop_unencrypted,
.deauthenticate = wpa_ndiswrapper_deauthenticate,
.disassociate = wpa_ndiswrapper_disassociate,
.associate = wpa_ndiswrapper_associate,
- .set_auth_alg = wpa_ndiswrapper_set_auth_alg,
.get_bssid = wpa_ndiswrapper_get_bssid,
.get_ssid = wpa_ndiswrapper_get_ssid,
- .scan = wpa_ndiswrapper_scan,
+ .scan2 = wpa_ndiswrapper_scan,
.get_scan_results2 = wpa_ndiswrapper_get_scan_results,
.init = wpa_ndiswrapper_init,
.deinit = wpa_ndiswrapper_deinit,
OpenPOWER on IntegriCloud