hostapd: Process management frames only once per BSS
At least in nl80211, broadcast management frames like Probe Request frames, may be processed multiple times per BSS if multi-BSS is active and NL80211_CMD_FRAME event is used to deliver them. In the case of Probe Request frames, hostapd will create multiple redundant Probe Response frames which are problematic when many BSS are on one channel. This problem is caused by driver_nl80211 generating an event for wpa_supplicant_event() for each BSS, and hostapd_mgmt_rx() calls ieee802_11_mgmt() for each BSS, too. Fix this by processing broadcast events only for the BSS the driver intended to. The behavior is not changed for drivers not setting a BSS. Signed-hostap: Simon Wunderlich <simon@open-mesh.com>
This commit is contained in:
parent
e070051207
commit
1d91f504e4
3 changed files with 19 additions and 2 deletions
|
@ -721,6 +721,12 @@ static int hostapd_mgmt_rx(struct hostapd_data *hapd, struct rx_mgmt *rx_mgmt)
|
|||
size_t i;
|
||||
ret = 0;
|
||||
for (i = 0; i < iface->num_bss; i++) {
|
||||
/* if bss is set, driver will call this function for
|
||||
* each bss individually. */
|
||||
if (rx_mgmt->drv_priv &&
|
||||
(iface->bss[i]->drv_priv != rx_mgmt->drv_priv))
|
||||
continue;
|
||||
|
||||
if (ieee802_11_mgmt(iface->bss[i], rx_mgmt->frame,
|
||||
rx_mgmt->frame_len, &fi) > 0)
|
||||
ret = 1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue