diff options
author | David S. Miller <davem@davemloft.net> | 2016-06-11 09:13:32 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-06-11 09:13:32 +0300 |
commit | d6cf3a85b47424d6fc7b57129680097067cf95eb (patch) | |
tree | 9c122d64c1f038bbfe4d9d7687b4bb3115ce5147 /net/wireless/core.c | |
parent | 52a3d792bb54d379c4546cbc40c1365139922e15 (diff) | |
parent | 5caa328e3811b7cfa33fd02c93280ffa622deb0e (diff) | |
download | linux-d6cf3a85b47424d6fc7b57129680097067cf95eb.tar.xz |
Merge tag 'mac80211-next-for-davem-2016-06-09' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Johannes Berg says:
====================
For the next cycle, we have the following:
* the biggest change is MichaĆ's work on integrating FQ/codel
with the mac80211 internal software queues
* cfg80211 connect result gets clarified for the
"no connection at all" case
* advertisement of per-interface type capabilities, in case
they differ (which makes a lot of sense for some capabilities)
* most of the nl80211 & hwsim unprivileged namespace operation
changes
* human-readable VHT capabilities in debugfs
* some other cleanups, like spelling
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/wireless/core.c')
-rw-r--r-- | net/wireless/core.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/net/wireless/core.c b/net/wireless/core.c index ecca3896b9f7..39d9abd309ea 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c @@ -748,6 +748,36 @@ int wiphy_register(struct wiphy *wiphy) nl80211_send_reg_change_event(&request); } + /* Check that nobody globally advertises any capabilities they do not + * advertise on all possible interface types. + */ + if (wiphy->extended_capabilities_len && + wiphy->num_iftype_ext_capab && + wiphy->iftype_ext_capab) { + u8 supported_on_all, j; + const struct wiphy_iftype_ext_capab *capab; + + capab = wiphy->iftype_ext_capab; + for (j = 0; j < wiphy->extended_capabilities_len; j++) { + if (capab[0].extended_capabilities_len > j) + supported_on_all = + capab[0].extended_capabilities[j]; + else + supported_on_all = 0x00; + for (i = 1; i < wiphy->num_iftype_ext_capab; i++) { + if (j >= capab[i].extended_capabilities_len) { + supported_on_all = 0x00; + break; + } + supported_on_all &= + capab[i].extended_capabilities[j]; + } + if (WARN_ON(wiphy->extended_capabilities[j] & + ~supported_on_all)) + break; + } + } + rdev->wiphy.registered = true; rtnl_unlock(); |