We got connection failures because of outdated channel information.
That's because the NL80211_CMD_REG_CHANGE event is important for all
interfaces.
Commit
f13683720239 ("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>
wdev_id == bss->wdev_id)) {
processed = true;
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;
/* The driver instance could have been removed,
* e.g., due to NL80211_CMD_RADAR_DETECT event,