[PATCH v2] nl80211: Pass "global" events to all interfaces
Cermak Dominik
Dominik.Cermak at joynext.com
Thu Aug 29 01:01:21 PDT 2024
Extending commit f136837202393a7e1f3182e9efdbf1aaa0c1a5c2.
We got connection failures because of outdated channel information.
That's because the NL80211_CMD_REG_CHANGE event is important for all
interfaces, but the early termination still kicks in because it is not
directed to a specific wiphy.
Therefore 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 at joynext.com>
---
src/drivers/driver_nl80211_event.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c
index 903207067..8e79b5848 100644
--- a/src/drivers/driver_nl80211_event.c
+++ b/src/drivers/driver_nl80211_event.c
@@ -4257,7 +4257,13 @@ int process_global_event(struct nl_msg *msg, void *arg)
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.
+ * Or in other words, terminate early only if it 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,
--
2.44.1
More information about the Hostap
mailing list