aboutsummaryrefslogtreecommitdiff
path: root/contrib/wpa/src/drivers/driver_ndis.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/wpa/src/drivers/driver_ndis.c')
-rw-r--r--contrib/wpa/src/drivers/driver_ndis.c47
1 files changed, 36 insertions, 11 deletions
diff --git a/contrib/wpa/src/drivers/driver_ndis.c b/contrib/wpa/src/drivers/driver_ndis.c
index 120aa57b108b..8555f96d3283 100644
--- a/contrib/wpa/src/drivers/driver_ndis.c
+++ b/contrib/wpa/src/drivers/driver_ndis.c
@@ -58,7 +58,6 @@ static const u8 pae_group_addr[ETH_ALEN] =
/* FIX: to be removed once this can be compiled with the complete NDIS
* header files */
#ifndef OID_802_11_BSSID
-#define OID_802_3_MULTICAST_LIST 0x01010103
#define OID_802_11_BSSID 0x0d010101
#define OID_802_11_SSID 0x0d010102
#define OID_802_11_INFRASTRUCTURE_MODE 0x0d010108
@@ -505,13 +504,13 @@ static int ndis_get_oid(struct wpa_driver_ndis_data *drv, unsigned int oid,
o->Length = len;
if (!PacketRequest(drv->adapter, FALSE, o)) {
- wpa_printf(MSG_DEBUG, "%s: oid=0x%x len (%d) failed",
+ wpa_printf(MSG_DEBUG, "%s: oid=0x%x len (%lu) failed",
__func__, oid, len);
os_free(buf);
return -1;
}
if (o->Length > len) {
- wpa_printf(MSG_DEBUG, "%s: oid=0x%x Length (%d) > len (%d)",
+ wpa_printf(MSG_DEBUG, "%s: oid=0x%x Length (%d) > len (%lu)",
__func__, oid, (unsigned int) o->Length, len);
os_free(buf);
return -1;
@@ -574,7 +573,7 @@ static int ndis_set_oid(struct wpa_driver_ndis_data *drv, unsigned int oid,
os_memcpy(o->Data, data, len);
if (!PacketRequest(drv->adapter, TRUE, o)) {
- wpa_printf(MSG_DEBUG, "%s: oid=0x%x len (%d) failed",
+ wpa_printf(MSG_DEBUG, "%s: oid=0x%x len (%lu) failed",
__func__, oid, len);
os_free(buf);
return -1;
@@ -1035,6 +1034,18 @@ static int wpa_driver_ndis_set_key(const char *ifname, void *priv,
static int
+wpa_driver_ndis_set_key_wrapper(void *priv,
+ struct wpa_driver_set_key_params *params)
+{
+ return wpa_driver_ndis_set_key(params->ifname, priv,
+ params->alg, params->addr,
+ params->key_idx, params->set_tx,
+ params->seq, params->seq_len,
+ params->key, params->key_len);
+}
+
+
+static int
wpa_driver_ndis_associate(void *priv,
struct wpa_driver_associate_params *params)
{
@@ -1532,7 +1543,7 @@ static void wpa_driver_ndis_event_auth(struct wpa_driver_ndis_data *drv,
if (data_len < sizeof(*req)) {
wpa_printf(MSG_DEBUG, "NDIS: Too short Authentication Request "
- "Event (len=%d)", data_len);
+ "Event (len=%lu)", data_len);
return;
}
req = (NDIS_802_11_AUTHENTICATION_REQUEST *) data;
@@ -1566,7 +1577,7 @@ static void wpa_driver_ndis_event_pmkid(struct wpa_driver_ndis_data *drv,
if (data_len < 8) {
wpa_printf(MSG_DEBUG, "NDIS: Too short PMKID Candidate List "
- "Event (len=%d)", data_len);
+ "Event (len=%lu)", data_len);
return;
}
pmkid = (NDIS_802_11_PMKID_CANDIDATE_LIST *) data;
@@ -1588,7 +1599,7 @@ static void wpa_driver_ndis_event_pmkid(struct wpa_driver_ndis_data *drv,
os_memset(&event, 0, sizeof(event));
for (i = 0; i < pmkid->NumCandidates; i++) {
PMKID_CANDIDATE *p = &pmkid->CandidateList[i];
- wpa_printf(MSG_DEBUG, "NDIS: %d: " MACSTR " Flags 0x%x",
+ wpa_printf(MSG_DEBUG, "NDIS: %lu: " MACSTR " Flags 0x%x",
i, MAC2STR(p->BSSID), (int) p->Flags);
os_memcpy(event.pmkid_candidate.bssid, p->BSSID, ETH_ALEN);
event.pmkid_candidate.index = i;
@@ -1779,7 +1790,7 @@ static void wpa_driver_ndis_get_capability(struct wpa_driver_ndis_data *drv)
"overflow");
break;
}
- wpa_printf(MSG_MSGDUMP, "NDIS: %d - auth %d encr %d",
+ wpa_printf(MSG_MSGDUMP, "NDIS: %lu - auth %d encr %d",
i, (int) ae->AuthModeSupported,
(int) ae->EncryptStatusSupported);
switch (ae->AuthModeSupported) {
@@ -2107,7 +2118,11 @@ static int wpa_driver_ndis_get_names(struct wpa_driver_ndis_data *drv)
dlen = dpos - desc;
else
dlen = os_strlen(desc);
- drv->adapter_desc = dup_binstr(desc, dlen);
+ drv->adapter_desc = os_malloc(dlen + 1);
+ if (drv->adapter_desc) {
+ os_memcpy(drv->adapter_desc, desc, dlen);
+ drv->adapter_desc[dlen] = '\0';
+ }
os_free(b);
if (drv->adapter_desc == NULL)
return -1;
@@ -2275,7 +2290,11 @@ static int wpa_driver_ndis_get_names(struct wpa_driver_ndis_data *drv)
} else {
dlen = os_strlen(desc[i]);
}
- drv->adapter_desc = dup_binstr(desc[i], dlen);
+ drv->adapter_desc = os_malloc(dlen + 1);
+ if (drv->adapter_desc) {
+ os_memcpy(drv->adapter_desc, desc[i], dlen);
+ drv->adapter_desc[dlen] = '\0';
+ }
os_free(names);
if (drv->adapter_desc == NULL)
return -1;
@@ -2798,6 +2817,7 @@ static void * wpa_driver_ndis_init(void *ctx, const char *ifname)
{
struct wpa_driver_ndis_data *drv;
u32 mode;
+ int i;
drv = os_zalloc(sizeof(*drv));
if (drv == NULL)
@@ -2844,6 +2864,11 @@ static void * wpa_driver_ndis_init(void *ctx, const char *ifname)
}
wpa_driver_ndis_get_capability(drv);
+ /* Update per interface supported AKMs */
+ for (i = 0; i < WPA_IF_MAX; i++)
+ drv->capa.key_mgmt_iftype[i] = drv->capa.key_mgmt;
+
+
/* Make sure that the driver does not have any obsolete PMKID entries.
*/
wpa_driver_ndis_flush_pmkid(drv);
@@ -3196,7 +3221,7 @@ void driver_ndis_init_ops(void)
wpa_driver_ndis_ops.desc = ndis_drv_desc;
wpa_driver_ndis_ops.get_bssid = wpa_driver_ndis_get_bssid;
wpa_driver_ndis_ops.get_ssid = wpa_driver_ndis_get_ssid;
- wpa_driver_ndis_ops.set_key = wpa_driver_ndis_set_key;
+ wpa_driver_ndis_ops.set_key = wpa_driver_ndis_set_key_wrapper;
wpa_driver_ndis_ops.init = wpa_driver_ndis_init;
wpa_driver_ndis_ops.deinit = wpa_driver_ndis_deinit;
wpa_driver_ndis_ops.deauthenticate = wpa_driver_ndis_deauthenticate;