nl80211: Include wiphy address setup in NEW_WIPHY
authorDenis Kenzior <denkenz@gmail.com>
Mon, 22 Jul 2019 11:33:12 +0000 (06:33 -0500)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 26 Jul 2019 14:14:13 +0000 (16:14 +0200)
Include wiphy address setup in wiphy dumps and new wiphy events.  The
wiphy permanent address is exposed as ATTR_MAC.  If addr_mask is setup,
then it is included as ATTR_MAC_MASK attribute.  If multiple addresses
are available, then their are exposed in a nested ATTR_MAC_ADDRS array.

This information is already exposed via sysfs, but it makes sense to
include it in the wiphy dump as well.

Signed-off-by: Denis Kenzior <denkenz@gmail.com>
Link: https://lore.kernel.org/r/20190722113312.14031-3-denkenz@gmail.com
[use just nla_nest_start(), this is new functionality]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/nl80211.c

index fc83dd1..10b57aa 100644 (file)
@@ -2172,6 +2172,30 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev,
                            rdev->wiphy.vht_capa_mod_mask))
                        goto nla_put_failure;
 
+               if (nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN,
+                           rdev->wiphy.perm_addr))
+                       goto nla_put_failure;
+
+               if (!is_zero_ether_addr(rdev->wiphy.addr_mask) &&
+                   nla_put(msg, NL80211_ATTR_MAC_MASK, ETH_ALEN,
+                           rdev->wiphy.addr_mask))
+                       goto nla_put_failure;
+
+               if (rdev->wiphy.n_addresses > 1) {
+                       void *attr;
+
+                       attr = nla_nest_start(msg, NL80211_ATTR_MAC_ADDRS);
+                       if (!attr)
+                               goto nla_put_failure;
+
+                       for (i = 0; i < rdev->wiphy.n_addresses; i++)
+                               if (nla_put(msg, i + 1, ETH_ALEN,
+                                           rdev->wiphy.addresses[i].addr))
+                                       goto nla_put_failure;
+
+                       nla_nest_end(msg, attr);
+               }
+
                state->split_start++;
                break;
        case 10: