diff options
author | John W. Linville <linville@tuxdriver.com> | 2014-05-22 13:58:36 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-05-22 13:58:36 -0400 |
commit | 40a10fd740a4d5a9f3da255cf8dae48c6723d1a6 (patch) | |
tree | a65eb4adca8e37ed7335345e94e36918593f7f92 /net/wireless/util.c | |
parent | 99abe65ff18b6bbac2e55524827b571c3eccfa86 (diff) | |
parent | 67af9811539be83dbdc0739215d29af23c870405 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Diffstat (limited to 'net/wireless/util.c')
-rw-r--r-- | net/wireless/util.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/net/wireless/util.c b/net/wireless/util.c index 7c47fa07b276..728f1c0dc70d 100644 --- a/net/wireless/util.c +++ b/net/wireless/util.c | |||
@@ -476,7 +476,8 @@ int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr, | |||
476 | EXPORT_SYMBOL(ieee80211_data_to_8023); | 476 | EXPORT_SYMBOL(ieee80211_data_to_8023); |
477 | 477 | ||
478 | int ieee80211_data_from_8023(struct sk_buff *skb, const u8 *addr, | 478 | int ieee80211_data_from_8023(struct sk_buff *skb, const u8 *addr, |
479 | enum nl80211_iftype iftype, u8 *bssid, bool qos) | 479 | enum nl80211_iftype iftype, |
480 | const u8 *bssid, bool qos) | ||
480 | { | 481 | { |
481 | struct ieee80211_hdr hdr; | 482 | struct ieee80211_hdr hdr; |
482 | u16 hdrlen, ethertype; | 483 | u16 hdrlen, ethertype; |
@@ -839,6 +840,9 @@ void cfg80211_process_wdev_events(struct wireless_dev *wdev) | |||
839 | __cfg80211_ibss_joined(wdev->netdev, ev->ij.bssid, | 840 | __cfg80211_ibss_joined(wdev->netdev, ev->ij.bssid, |
840 | ev->ij.channel); | 841 | ev->ij.channel); |
841 | break; | 842 | break; |
843 | case EVENT_STOPPED: | ||
844 | __cfg80211_leave(wiphy_to_rdev(wdev->wiphy), wdev); | ||
845 | break; | ||
842 | } | 846 | } |
843 | wdev_unlock(wdev); | 847 | wdev_unlock(wdev); |
844 | 848 | ||
@@ -1271,10 +1275,20 @@ int cfg80211_iter_combinations(struct wiphy *wiphy, | |||
1271 | void *data), | 1275 | void *data), |
1272 | void *data) | 1276 | void *data) |
1273 | { | 1277 | { |
1278 | const struct ieee80211_regdomain *regdom; | ||
1279 | enum nl80211_dfs_regions region = 0; | ||
1274 | int i, j, iftype; | 1280 | int i, j, iftype; |
1275 | int num_interfaces = 0; | 1281 | int num_interfaces = 0; |
1276 | u32 used_iftypes = 0; | 1282 | u32 used_iftypes = 0; |
1277 | 1283 | ||
1284 | if (radar_detect) { | ||
1285 | rcu_read_lock(); | ||
1286 | regdom = rcu_dereference(cfg80211_regdomain); | ||
1287 | if (regdom) | ||
1288 | region = regdom->dfs_region; | ||
1289 | rcu_read_unlock(); | ||
1290 | } | ||
1291 | |||
1278 | for (iftype = 0; iftype < NUM_NL80211_IFTYPES; iftype++) { | 1292 | for (iftype = 0; iftype < NUM_NL80211_IFTYPES; iftype++) { |
1279 | num_interfaces += iftype_num[iftype]; | 1293 | num_interfaces += iftype_num[iftype]; |
1280 | if (iftype_num[iftype] > 0 && | 1294 | if (iftype_num[iftype] > 0 && |
@@ -1315,6 +1329,10 @@ int cfg80211_iter_combinations(struct wiphy *wiphy, | |||
1315 | if (radar_detect != (c->radar_detect_widths & radar_detect)) | 1329 | if (radar_detect != (c->radar_detect_widths & radar_detect)) |
1316 | goto cont; | 1330 | goto cont; |
1317 | 1331 | ||
1332 | if (radar_detect && c->radar_detect_regions && | ||
1333 | !(c->radar_detect_regions & BIT(region))) | ||
1334 | goto cont; | ||
1335 | |||
1318 | /* Finally check that all iftypes that we're currently | 1336 | /* Finally check that all iftypes that we're currently |
1319 | * using are actually part of this combination. If they | 1337 | * using are actually part of this combination. If they |
1320 | * aren't then we can't use this combination and have | 1338 | * aren't then we can't use this combination and have |
@@ -1528,6 +1546,24 @@ unsigned int ieee80211_get_num_supported_channels(struct wiphy *wiphy) | |||
1528 | } | 1546 | } |
1529 | EXPORT_SYMBOL(ieee80211_get_num_supported_channels); | 1547 | EXPORT_SYMBOL(ieee80211_get_num_supported_channels); |
1530 | 1548 | ||
1549 | int cfg80211_get_station(struct net_device *dev, const u8 *mac_addr, | ||
1550 | struct station_info *sinfo) | ||
1551 | { | ||
1552 | struct cfg80211_registered_device *rdev; | ||
1553 | struct wireless_dev *wdev; | ||
1554 | |||
1555 | wdev = dev->ieee80211_ptr; | ||
1556 | if (!wdev) | ||
1557 | return -EOPNOTSUPP; | ||
1558 | |||
1559 | rdev = wiphy_to_rdev(wdev->wiphy); | ||
1560 | if (!rdev->ops->get_station) | ||
1561 | return -EOPNOTSUPP; | ||
1562 | |||
1563 | return rdev_get_station(rdev, dev, mac_addr, sinfo); | ||
1564 | } | ||
1565 | EXPORT_SYMBOL(cfg80211_get_station); | ||
1566 | |||
1531 | /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */ | 1567 | /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */ |
1532 | /* Ethernet-II snap header (RFC1042 for most EtherTypes) */ | 1568 | /* Ethernet-II snap header (RFC1042 for most EtherTypes) */ |
1533 | const unsigned char rfc1042_header[] __aligned(2) = | 1569 | const unsigned char rfc1042_header[] __aligned(2) = |