nl80211: announce radios/interfaces when switching namespaces
authorMartin Willi <martin@strongswan.org>
Sat, 27 Oct 2018 07:31:24 +0000 (09:31 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 9 Nov 2018 10:21:10 +0000 (11:21 +0100)
When a wiphy changes its namespace, all interfaces are moved to the
new namespace as well. The network interfaces are properly announced
as leaving on the old and as appearing on the new namespace through
RTM_NEWLINK/RTM_DELLINK. On nl80211, however, these events are missing
for radios and their interfaces.

Add netlink announcements through nl80211 when switching namespaces,
so userspace can rely on these events to discover radios properly.

Signed-off-by: Martin Willi <martin@strongswan.org>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/core.c

index 0a3092c56b3e96c1f1063520f70b12b6c0f7d7f0..623dfe5e211c6ee41a6a4346d048f7e94f464a22 100644 (file)
@@ -191,11 +191,25 @@ int cfg80211_switch_netns(struct cfg80211_registered_device *rdev,
                return err;
        }
 
+       list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
+               if (!wdev->netdev)
+                       continue;
+               nl80211_notify_iface(rdev, wdev, NL80211_CMD_DEL_INTERFACE);
+       }
+       nl80211_notify_wiphy(rdev, NL80211_CMD_DEL_WIPHY);
+
        wiphy_net_set(&rdev->wiphy, net);
 
        err = device_rename(&rdev->wiphy.dev, dev_name(&rdev->wiphy.dev));
        WARN_ON(err);
 
+       nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY);
+       list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
+               if (!wdev->netdev)
+                       continue;
+               nl80211_notify_iface(rdev, wdev, NL80211_CMD_NEW_INTERFACE);
+       }
+
        return 0;
 }