hostapd: Inherit correct MAC address for AP VLAN interfaces
authorHelmut Schaa <helmut.schaa@googlemail.com>
Thu, 24 Feb 2011 19:25:40 +0000 (21:25 +0200)
committerJouni Malinen <j@w1.fi>
Thu, 24 Feb 2011 19:25:40 +0000 (21:25 +0200)
When using multiple vifs and dynamic vlan tagging is enabled on any
interface, the created AP VLAN interfaces get the BSSID of the first
AP mode interface instead of the BSSID of the corresponding AP mode
interface.

Example:

wlan0 - xx:xx:xx:xx:x0
wlan1 - xx:xx:xx:xx:x1

Assume a STA connects to the AP interface wlan1 and gets a dynamic
VLAN tag 100 assigned by the RADIUS server. Hostapd will create an AP
VLAN interface wlan1.100 but doesn't set an address for this interface
which results in wlan1.100 getting the same address as wlan0:

wlan1.100 - xx:xx:xx:xx:x0

As a result the STA that was moved to wlan1.100 isn't able to finish its
4-way handshake since mac80211 won't pass its frames to wlan1.100 due to
the different address.

To fix this issue make use of the address of the AP interface when
creating an AP VLAN interface.

Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
src/ap/ap_drv_ops.c

index 7f9522a..22a7b91 100644 (file)
@@ -280,8 +280,8 @@ int hostapd_vlan_if_add(struct hostapd_data *hapd, const char *ifname)
 {
        char force_ifname[IFNAMSIZ];
        u8 if_addr[ETH_ALEN];
-       return hostapd_if_add(hapd, WPA_IF_AP_VLAN, ifname, NULL, NULL, NULL,
-                             force_ifname, if_addr);
+       return hostapd_if_add(hapd, WPA_IF_AP_VLAN, ifname, hapd->own_addr,
+                             NULL, NULL, force_ifname, if_addr);
 }