From c472ef754d81792959f8d678a71b6f49a5856c2e Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sat, 7 Mar 2009 23:10:41 +0200 Subject: [PATCH] driver_ndis: Add PAE group address to the multicast address This is done with wired interfaces to fix IEEE 802.1X authentication when the authenticator uses the group address (which should be happening with wired Ethernet authentication). This allows wpa_supplicant to complete wired authentication successfully on Vista with a NDIS 6 driver, but the change is likely needed for Windows XP, too. --- src/drivers/driver_ndis.c | 25 +++++++++++++++++++------ wpa_supplicant/ChangeLog | 2 ++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/drivers/driver_ndis.c b/src/drivers/driver_ndis.c index c2d7eeafe..0935bb0d3 100644 --- a/src/drivers/driver_ndis.c +++ b/src/drivers/driver_ndis.c @@ -56,6 +56,10 @@ static int wpa_driver_ndis_adapter_open(struct wpa_driver_ndis_data *drv); static void wpa_driver_ndis_adapter_close(struct wpa_driver_ndis_data *drv); +static const u8 pae_group_addr[ETH_ALEN] = +{ 0x01, 0x80, 0xc2, 0x00, 0x00, 0x03 }; + + /* FIX: to be removed once this can be compiled with the complete NDIS * header files */ #ifndef OID_802_11_BSSID @@ -610,12 +614,7 @@ static int wpa_driver_ndis_get_bssid(void *priv, u8 *bssid) * Report PAE group address as the "BSSID" for wired * connection. */ - bssid[0] = 0x01; - bssid[1] = 0x80; - bssid[2] = 0xc2; - bssid[3] = 0x00; - bssid[4] = 0x00; - bssid[5] = 0x03; + os_memcpy(bssid, pae_group_addr, ETH_ALEN); return 0; } @@ -2704,6 +2703,19 @@ static void wpa_driver_ndis_adapter_close(struct wpa_driver_ndis_data *drv) } +static int ndis_add_multicast(struct wpa_driver_ndis_data *drv) +{ + if (ndis_set_oid(drv, OID_802_3_MULTICAST_LIST, + (const char *) pae_group_addr, ETH_ALEN) < 0) { + wpa_printf(MSG_DEBUG, "NDIS: Failed to add PAE group address " + "to the multicast list"); + return -1; + } + + return 0; +} + + static void * wpa_driver_ndis_init(void *ctx, const char *ifname) { struct wpa_driver_ndis_data *drv; @@ -2805,6 +2817,7 @@ static void * wpa_driver_ndis_init(void *ctx, const char *ifname) drv->wired = 1; drv->capa.flags |= WPA_DRIVER_FLAGS_WIRED; drv->has_capability = 1; + ndis_add_multicast(drv); } } diff --git a/wpa_supplicant/ChangeLog b/wpa_supplicant/ChangeLog index 80f8c288d..b2a86edcf 100644 --- a/wpa_supplicant/ChangeLog +++ b/wpa_supplicant/ChangeLog @@ -14,6 +14,8 @@ ChangeLog for wpa_supplicant with nl80211 * added support for WPS USBA out-of-band mechanism with USB Flash Drives (UFD) (CONFIG_WPS_UFD=y) + * driver_ndis: add PAE group address to the multicast address list to + fix wired IEEE 802.1X authentication 2009-01-06 - v0.6.7 * added support for Wi-Fi Protected Setup (WPS)