nl80211: Pass "global" events to all interfaces
We got connection failures because of outdated channel information.
That's because the NL80211_CMD_REG_CHANGE event is important for all
interfaces.
Commit f136837202
("nl80211: Pass wiphy events to all affected
interfaces") skips the early termination for events directed to a wiphy,
but that doesn't cover the regulatory change event because it doesn't
have a wiphy set either. Therefore the early termination still kicks in
and from three interfaces, only one got the updated channel list.
Fix this by changing the early termination logic to only apply to events
directed either to a specific interface index for wdev.
Signed-off-by: Dominik Cermak <dominik.cermak@joynext.com>
This commit is contained in:
parent
c3ee46bcbe
commit
de40e08f70
1 changed files with 10 additions and 1 deletions
|
@ -4257,7 +4257,16 @@ int process_global_event(struct nl_msg *msg, void *arg)
|
||||||
wdev_id == bss->wdev_id)) {
|
wdev_id == bss->wdev_id)) {
|
||||||
processed = true;
|
processed = true;
|
||||||
do_process_drv_event(bss, gnlh->cmd, tb);
|
do_process_drv_event(bss, gnlh->cmd, tb);
|
||||||
if (!wiphy_idx_set)
|
/* There are two types of events that may need
|
||||||
|
* to be delivered to multiple interfaces:
|
||||||
|
* 1. Events for a wiphy, as it can have
|
||||||
|
* multiple interfaces.
|
||||||
|
* 2. "Global" events, like
|
||||||
|
* NL80211_CMD_REG_CHANGE.
|
||||||
|
*
|
||||||
|
* Terminate early only if the event is directed
|
||||||
|
* to a specific interface or wdev. */
|
||||||
|
if (ifidx != -1 || wdev_id_set)
|
||||||
return NL_SKIP;
|
return NL_SKIP;
|
||||||
/* The driver instance could have been removed,
|
/* The driver instance could have been removed,
|
||||||
* e.g., due to NL80211_CMD_RADAR_DETECT event,
|
* e.g., due to NL80211_CMD_RADAR_DETECT event,
|
||||||
|
|
Loading…
Reference in a new issue