aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2016-06-11 02:13:32 -0400
committerDavid S. Miller <davem@davemloft.net>2016-06-11 02:13:32 -0400
commitd6cf3a85b47424d6fc7b57129680097067cf95eb (patch)
tree9c122d64c1f038bbfe4d9d7687b4bb3115ce5147 /net/wireless
parent52a3d792bb54d379c4546cbc40c1365139922e15 (diff)
parent5caa328e3811b7cfa33fd02c93280ffa622deb0e (diff)
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')
-rw-r--r--net/wireless/core.c30
-rw-r--r--net/wireless/core.h4
-rw-r--r--net/wireless/nl80211.c232
-rw-r--r--net/wireless/nl80211.h2
-rw-r--r--net/wireless/sme.c8
5 files changed, 172 insertions, 104 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)
748 nl80211_send_reg_change_event(&request); 748 nl80211_send_reg_change_event(&request);
749 } 749 }
750 750
751 /* Check that nobody globally advertises any capabilities they do not
752 * advertise on all possible interface types.
753 */
754 if (wiphy->extended_capabilities_len &&
755 wiphy->num_iftype_ext_capab &&
756 wiphy->iftype_ext_capab) {
757 u8 supported_on_all, j;
758 const struct wiphy_iftype_ext_capab *capab;
759
760 capab = wiphy->iftype_ext_capab;
761 for (j = 0; j < wiphy->extended_capabilities_len; j++) {
762 if (capab[0].extended_capabilities_len > j)
763 supported_on_all =
764 capab[0].extended_capabilities[j];
765 else
766 supported_on_all = 0x00;
767 for (i = 1; i < wiphy->num_iftype_ext_capab; i++) {
768 if (j >= capab[i].extended_capabilities_len) {
769 supported_on_all = 0x00;
770 break;
771 }
772 supported_on_all &=
773 capab[i].extended_capabilities[j];
774 }
775 if (WARN_ON(wiphy->extended_capabilities[j] &
776 ~supported_on_all))
777 break;
778 }
779 }
780
751 rdev->wiphy.registered = true; 781 rdev->wiphy.registered = true;
752 rtnl_unlock(); 782 rtnl_unlock();
753 783
diff --git a/net/wireless/core.h b/net/wireless/core.h
index 025b7a5d508b..a4d547f99f8d 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -214,7 +214,7 @@ struct cfg80211_event {
214 size_t req_ie_len; 214 size_t req_ie_len;
215 size_t resp_ie_len; 215 size_t resp_ie_len;
216 struct cfg80211_bss *bss; 216 struct cfg80211_bss *bss;
217 u16 status; 217 int status; /* -1 = failed; 0..65535 = status code */
218 } cr; 218 } cr;
219 struct { 219 struct {
220 const u8 *req_ie; 220 const u8 *req_ie;
@@ -374,7 +374,7 @@ int cfg80211_connect(struct cfg80211_registered_device *rdev,
374void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid, 374void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
375 const u8 *req_ie, size_t req_ie_len, 375 const u8 *req_ie, size_t req_ie_len,
376 const u8 *resp_ie, size_t resp_ie_len, 376 const u8 *resp_ie, size_t resp_ie_len,
377 u16 status, bool wextev, 377 int status, bool wextev,
378 struct cfg80211_bss *bss); 378 struct cfg80211_bss *bss);
379void __cfg80211_disconnected(struct net_device *dev, const u8 *ie, 379void __cfg80211_disconnected(struct net_device *dev, const u8 *ie,
380 size_t ie_len, u16 reason, bool from_ap); 380 size_t ie_len, u16 reason, bool from_ap);
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index d7599014055d..c503e96bfd5a 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -167,6 +167,7 @@ __cfg80211_rdev_from_attrs(struct net *netns, struct nlattr **attrs)
167 167
168 if (attrs[NL80211_ATTR_IFINDEX]) { 168 if (attrs[NL80211_ATTR_IFINDEX]) {
169 int ifindex = nla_get_u32(attrs[NL80211_ATTR_IFINDEX]); 169 int ifindex = nla_get_u32(attrs[NL80211_ATTR_IFINDEX]);
170
170 netdev = __dev_get_by_index(netns, ifindex); 171 netdev = __dev_get_by_index(netns, ifindex);
171 if (netdev) { 172 if (netdev) {
172 if (netdev->ieee80211_ptr) 173 if (netdev->ieee80211_ptr)
@@ -731,6 +732,7 @@ static int nl80211_parse_key_new(struct nlattr *key, struct key_parse *k)
731 732
732 if (tb[NL80211_KEY_DEFAULT_TYPES]) { 733 if (tb[NL80211_KEY_DEFAULT_TYPES]) {
733 struct nlattr *kdt[NUM_NL80211_KEY_DEFAULT_TYPES]; 734 struct nlattr *kdt[NUM_NL80211_KEY_DEFAULT_TYPES];
735
734 err = nla_parse_nested(kdt, NUM_NL80211_KEY_DEFAULT_TYPES - 1, 736 err = nla_parse_nested(kdt, NUM_NL80211_KEY_DEFAULT_TYPES - 1,
735 tb[NL80211_KEY_DEFAULT_TYPES], 737 tb[NL80211_KEY_DEFAULT_TYPES],
736 nl80211_key_default_policy); 738 nl80211_key_default_policy);
@@ -1264,7 +1266,7 @@ nl80211_send_mgmt_stypes(struct sk_buff *msg,
1264struct nl80211_dump_wiphy_state { 1266struct nl80211_dump_wiphy_state {
1265 s64 filter_wiphy; 1267 s64 filter_wiphy;
1266 long start; 1268 long start;
1267 long split_start, band_start, chan_start; 1269 long split_start, band_start, chan_start, capa_start;
1268 bool split; 1270 bool split;
1269}; 1271};
1270 1272
@@ -1382,6 +1384,7 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev,
1382 rdev->ops->get_antenna) { 1384 rdev->ops->get_antenna) {
1383 u32 tx_ant = 0, rx_ant = 0; 1385 u32 tx_ant = 0, rx_ant = 0;
1384 int res; 1386 int res;
1387
1385 res = rdev_get_antenna(rdev, &tx_ant, &rx_ant); 1388 res = rdev_get_antenna(rdev, &tx_ant, &rx_ant);
1386 if (!res) { 1389 if (!res) {
1387 if (nla_put_u32(msg, 1390 if (nla_put_u32(msg,
@@ -1761,6 +1764,47 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev,
1761 nla_nest_end(msg, nested); 1764 nla_nest_end(msg, nested);
1762 } 1765 }
1763 1766
1767 state->split_start++;
1768 break;
1769 case 13:
1770 if (rdev->wiphy.num_iftype_ext_capab &&
1771 rdev->wiphy.iftype_ext_capab) {
1772 struct nlattr *nested_ext_capab, *nested;
1773
1774 nested = nla_nest_start(msg,
1775 NL80211_ATTR_IFTYPE_EXT_CAPA);
1776 if (!nested)
1777 goto nla_put_failure;
1778
1779 for (i = state->capa_start;
1780 i < rdev->wiphy.num_iftype_ext_capab; i++) {
1781 const struct wiphy_iftype_ext_capab *capab;
1782
1783 capab = &rdev->wiphy.iftype_ext_capab[i];
1784
1785 nested_ext_capab = nla_nest_start(msg, i);
1786 if (!nested_ext_capab ||
1787 nla_put_u32(msg, NL80211_ATTR_IFTYPE,
1788 capab->iftype) ||
1789 nla_put(msg, NL80211_ATTR_EXT_CAPA,
1790 capab->extended_capabilities_len,
1791 capab->extended_capabilities) ||
1792 nla_put(msg, NL80211_ATTR_EXT_CAPA_MASK,
1793 capab->extended_capabilities_len,
1794 capab->extended_capabilities_mask))
1795 goto nla_put_failure;
1796
1797 nla_nest_end(msg, nested_ext_capab);
1798 if (state->split)
1799 break;
1800 }
1801 nla_nest_end(msg, nested);
1802 if (i < rdev->wiphy.num_iftype_ext_capab) {
1803 state->capa_start = i + 1;
1804 break;
1805 }
1806 }
1807
1764 /* done */ 1808 /* done */
1765 state->split_start = 0; 1809 state->split_start = 0;
1766 break; 1810 break;
@@ -2116,7 +2160,6 @@ static int nl80211_set_wds_peer(struct sk_buff *skb, struct genl_info *info)
2116 return rdev_set_wds_peer(rdev, dev, bssid); 2160 return rdev_set_wds_peer(rdev, dev, bssid);
2117} 2161}
2118 2162
2119
2120static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info) 2163static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
2121{ 2164{
2122 struct cfg80211_registered_device *rdev; 2165 struct cfg80211_registered_device *rdev;
@@ -2251,6 +2294,7 @@ static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
2251 if (info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX] && 2294 if (info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX] &&
2252 info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]) { 2295 info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]) {
2253 u32 tx_ant, rx_ant; 2296 u32 tx_ant, rx_ant;
2297
2254 if ((!rdev->wiphy.available_antennas_tx && 2298 if ((!rdev->wiphy.available_antennas_tx &&
2255 !rdev->wiphy.available_antennas_rx) || 2299 !rdev->wiphy.available_antennas_rx) ||
2256 !rdev->ops->set_antenna) 2300 !rdev->ops->set_antenna)
@@ -2919,6 +2963,7 @@ static int nl80211_get_key(struct sk_buff *skb, struct genl_info *info)
2919 pairwise = !!mac_addr; 2963 pairwise = !!mac_addr;
2920 if (info->attrs[NL80211_ATTR_KEY_TYPE]) { 2964 if (info->attrs[NL80211_ATTR_KEY_TYPE]) {
2921 u32 kt = nla_get_u32(info->attrs[NL80211_ATTR_KEY_TYPE]); 2965 u32 kt = nla_get_u32(info->attrs[NL80211_ATTR_KEY_TYPE]);
2966
2922 if (kt >= NUM_NL80211_KEYTYPES) 2967 if (kt >= NUM_NL80211_KEYTYPES)
2923 return -EINVAL; 2968 return -EINVAL;
2924 if (kt != NL80211_KEYTYPE_GROUP && 2969 if (kt != NL80211_KEYTYPE_GROUP &&
@@ -3962,7 +4007,6 @@ static int nl80211_dump_station(struct sk_buff *skb,
3962 sta_idx++; 4007 sta_idx++;
3963 } 4008 }
3964 4009
3965
3966 out: 4010 out:
3967 cb->args[2] = sta_idx; 4011 cb->args[2] = sta_idx;
3968 err = skb->len; 4012 err = skb->len;
@@ -4763,7 +4807,6 @@ static int nl80211_dump_mpath(struct sk_buff *skb,
4763 path_idx++; 4807 path_idx++;
4764 } 4808 }
4765 4809
4766
4767 out: 4810 out:
4768 cb->args[2] = path_idx; 4811 cb->args[2] = path_idx;
4769 err = skb->len; 4812 err = skb->len;
@@ -5053,7 +5096,6 @@ static int nl80211_req_set_reg(struct sk_buff *skb, struct genl_info *info)
5053 enum nl80211_user_reg_hint_type user_reg_hint_type; 5096 enum nl80211_user_reg_hint_type user_reg_hint_type;
5054 u32 owner_nlportid; 5097 u32 owner_nlportid;
5055 5098
5056
5057 /* 5099 /*
5058 * You should only get this when cfg80211 hasn't yet initialized 5100 * You should only get this when cfg80211 hasn't yet initialized
5059 * completely when built-in to the kernel right between the time 5101 * completely when built-in to the kernel right between the time
@@ -5262,7 +5304,6 @@ do { \
5262 } \ 5304 } \
5263} while (0) 5305} while (0)
5264 5306
5265
5266 if (!info->attrs[NL80211_ATTR_MESH_CONFIG]) 5307 if (!info->attrs[NL80211_ATTR_MESH_CONFIG])
5267 return -EINVAL; 5308 return -EINVAL;
5268 if (nla_parse_nested(tb, NL80211_MESHCONF_ATTR_MAX, 5309 if (nla_parse_nested(tb, NL80211_MESHCONF_ATTR_MAX,
@@ -5409,7 +5450,6 @@ static int nl80211_parse_mesh_setup(struct genl_info *info,
5409 IEEE80211_PATH_METRIC_VENDOR : 5450 IEEE80211_PATH_METRIC_VENDOR :
5410 IEEE80211_PATH_METRIC_AIRTIME; 5451 IEEE80211_PATH_METRIC_AIRTIME;
5411 5452
5412
5413 if (tb[NL80211_MESH_SETUP_IE]) { 5453 if (tb[NL80211_MESH_SETUP_IE]) {
5414 struct nlattr *ieattr = 5454 struct nlattr *ieattr =
5415 tb[NL80211_MESH_SETUP_IE]; 5455 tb[NL80211_MESH_SETUP_IE];
@@ -5796,10 +5836,8 @@ static int nl80211_set_reg(struct sk_buff *skb, struct genl_info *info)
5796 } 5836 }
5797 } 5837 }
5798 5838
5799 r = set_regdom(rd, REGD_SOURCE_CRDA); 5839 /* set_regdom takes ownership of rd */
5800 /* set_regdom took ownership */ 5840 return set_regdom(rd, REGD_SOURCE_CRDA);
5801 rd = NULL;
5802
5803 bad_reg: 5841 bad_reg:
5804 kfree(rd); 5842 kfree(rd);
5805 return r; 5843 return r;
@@ -6033,6 +6071,7 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
6033 /* all channels */ 6071 /* all channels */
6034 for (band = 0; band < NUM_NL80211_BANDS; band++) { 6072 for (band = 0; band < NUM_NL80211_BANDS; band++) {
6035 int j; 6073 int j;
6074
6036 if (!wiphy->bands[band]) 6075 if (!wiphy->bands[band])
6037 continue; 6076 continue;
6038 for (j = 0; j < wiphy->bands[band]->n_channels; j++) { 6077 for (j = 0; j < wiphy->bands[band]->n_channels; j++) {
@@ -6442,6 +6481,7 @@ nl80211_parse_sched_scan(struct wiphy *wiphy, struct wireless_dev *wdev,
6442 /* all channels */ 6481 /* all channels */
6443 for (band = 0; band < NUM_NL80211_BANDS; band++) { 6482 for (band = 0; band < NUM_NL80211_BANDS; band++) {
6444 int j; 6483 int j;
6484
6445 if (!wiphy->bands[band]) 6485 if (!wiphy->bands[band])
6446 continue; 6486 continue;
6447 for (j = 0; j < wiphy->bands[band]->n_channels; j++) { 6487 for (j = 0; j < wiphy->bands[band]->n_channels; j++) {
@@ -6511,7 +6551,7 @@ nl80211_parse_sched_scan(struct wiphy *wiphy, struct wireless_dev *wdev,
6511 nla_data(ssid), nla_len(ssid)); 6551 nla_data(ssid), nla_len(ssid));
6512 request->match_sets[i].ssid.ssid_len = 6552 request->match_sets[i].ssid.ssid_len =
6513 nla_len(ssid); 6553 nla_len(ssid);
6514 /* special attribute - old implemenation w/a */ 6554 /* special attribute - old implementation w/a */
6515 request->match_sets[i].rssi_thold = 6555 request->match_sets[i].rssi_thold =
6516 default_match_rssi; 6556 default_match_rssi;
6517 rssi = tb[NL80211_SCHED_SCAN_MATCH_ATTR_RSSI]; 6557 rssi = tb[NL80211_SCHED_SCAN_MATCH_ATTR_RSSI];
@@ -7204,6 +7244,7 @@ static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info)
7204 if (key.idx >= 0) { 7244 if (key.idx >= 0) {
7205 int i; 7245 int i;
7206 bool ok = false; 7246 bool ok = false;
7247
7207 for (i = 0; i < rdev->wiphy.n_cipher_suites; i++) { 7248 for (i = 0; i < rdev->wiphy.n_cipher_suites; i++) {
7208 if (key.p.cipher == rdev->wiphy.cipher_suites[i]) { 7249 if (key.p.cipher == rdev->wiphy.cipher_suites[i]) {
7209 ok = true; 7250 ok = true;
@@ -7282,6 +7323,7 @@ static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev,
7282 7323
7283 if (info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]) { 7324 if (info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]) {
7284 u16 proto; 7325 u16 proto;
7326
7285 proto = nla_get_u16( 7327 proto = nla_get_u16(
7286 info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]); 7328 info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]);
7287 settings->control_port_ethertype = cpu_to_be16(proto); 7329 settings->control_port_ethertype = cpu_to_be16(proto);
@@ -8435,6 +8477,7 @@ static u32 rateset_to_mask(struct ieee80211_supported_band *sband,
8435 for (i = 0; i < rates_len; i++) { 8477 for (i = 0; i < rates_len; i++) {
8436 int rate = (rates[i] & 0x7f) * 5; 8478 int rate = (rates[i] & 0x7f) * 5;
8437 int ridx; 8479 int ridx;
8480
8438 for (ridx = 0; ridx < sband->n_bitrates; ridx++) { 8481 for (ridx = 0; ridx < sband->n_bitrates; ridx++) {
8439 struct ieee80211_rate *srate = 8482 struct ieee80211_rate *srate =
8440 &sband->bitrates[ridx]; 8483 &sband->bitrates[ridx];
@@ -8743,7 +8786,6 @@ static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info)
8743 if (params.wait < NL80211_MIN_REMAIN_ON_CHANNEL_TIME || 8786 if (params.wait < NL80211_MIN_REMAIN_ON_CHANNEL_TIME ||
8744 params.wait > rdev->wiphy.max_remain_on_channel_duration) 8787 params.wait > rdev->wiphy.max_remain_on_channel_duration)
8745 return -EINVAL; 8788 return -EINVAL;
8746
8747 } 8789 }
8748 8790
8749 params.offchan = info->attrs[NL80211_ATTR_OFFCHANNEL_TX_OK]; 8791 params.offchan = info->attrs[NL80211_ATTR_OFFCHANNEL_TX_OK];
@@ -10590,7 +10632,6 @@ int cfg80211_vendor_cmd_reply(struct sk_buff *skb)
10590} 10632}
10591EXPORT_SYMBOL_GPL(cfg80211_vendor_cmd_reply); 10633EXPORT_SYMBOL_GPL(cfg80211_vendor_cmd_reply);
10592 10634
10593
10594static int nl80211_set_qos_map(struct sk_buff *skb, 10635static int nl80211_set_qos_map(struct sk_buff *skb,
10595 struct genl_info *info) 10636 struct genl_info *info)
10596{ 10637{
@@ -10945,7 +10986,7 @@ static const struct genl_ops nl80211_ops[] = {
10945 .cmd = NL80211_CMD_SET_WIPHY, 10986 .cmd = NL80211_CMD_SET_WIPHY,
10946 .doit = nl80211_set_wiphy, 10987 .doit = nl80211_set_wiphy,
10947 .policy = nl80211_policy, 10988 .policy = nl80211_policy,
10948 .flags = GENL_ADMIN_PERM, 10989 .flags = GENL_UNS_ADMIN_PERM,
10949 .internal_flags = NL80211_FLAG_NEED_RTNL, 10990 .internal_flags = NL80211_FLAG_NEED_RTNL,
10950 }, 10991 },
10951 { 10992 {
@@ -10961,7 +11002,7 @@ static const struct genl_ops nl80211_ops[] = {
10961 .cmd = NL80211_CMD_SET_INTERFACE, 11002 .cmd = NL80211_CMD_SET_INTERFACE,
10962 .doit = nl80211_set_interface, 11003 .doit = nl80211_set_interface,
10963 .policy = nl80211_policy, 11004 .policy = nl80211_policy,
10964 .flags = GENL_ADMIN_PERM, 11005 .flags = GENL_UNS_ADMIN_PERM,
10965 .internal_flags = NL80211_FLAG_NEED_NETDEV | 11006 .internal_flags = NL80211_FLAG_NEED_NETDEV |
10966 NL80211_FLAG_NEED_RTNL, 11007 NL80211_FLAG_NEED_RTNL,
10967 }, 11008 },
@@ -10969,7 +11010,7 @@ static const struct genl_ops nl80211_ops[] = {
10969 .cmd = NL80211_CMD_NEW_INTERFACE, 11010 .cmd = NL80211_CMD_NEW_INTERFACE,
10970 .doit = nl80211_new_interface, 11011 .doit = nl80211_new_interface,
10971 .policy = nl80211_policy, 11012 .policy = nl80211_policy,
10972 .flags = GENL_ADMIN_PERM, 11013 .flags = GENL_UNS_ADMIN_PERM,
10973 .internal_flags = NL80211_FLAG_NEED_WIPHY | 11014 .internal_flags = NL80211_FLAG_NEED_WIPHY |
10974 NL80211_FLAG_NEED_RTNL, 11015 NL80211_FLAG_NEED_RTNL,
10975 }, 11016 },
@@ -10977,7 +11018,7 @@ static const struct genl_ops nl80211_ops[] = {
10977 .cmd = NL80211_CMD_DEL_INTERFACE, 11018 .cmd = NL80211_CMD_DEL_INTERFACE,
10978 .doit = nl80211_del_interface, 11019 .doit = nl80211_del_interface,
10979 .policy = nl80211_policy, 11020 .policy = nl80211_policy,
10980 .flags = GENL_ADMIN_PERM, 11021 .flags = GENL_UNS_ADMIN_PERM,
10981 .internal_flags = NL80211_FLAG_NEED_WDEV | 11022 .internal_flags = NL80211_FLAG_NEED_WDEV |
10982 NL80211_FLAG_NEED_RTNL, 11023 NL80211_FLAG_NEED_RTNL,
10983 }, 11024 },
@@ -10985,7 +11026,7 @@ static const struct genl_ops nl80211_ops[] = {
10985 .cmd = NL80211_CMD_GET_KEY, 11026 .cmd = NL80211_CMD_GET_KEY,
10986 .doit = nl80211_get_key, 11027 .doit = nl80211_get_key,
10987 .policy = nl80211_policy, 11028 .policy = nl80211_policy,
10988 .flags = GENL_ADMIN_PERM, 11029 .flags = GENL_UNS_ADMIN_PERM,
10989 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11030 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
10990 NL80211_FLAG_NEED_RTNL, 11031 NL80211_FLAG_NEED_RTNL,
10991 }, 11032 },
@@ -10993,7 +11034,7 @@ static const struct genl_ops nl80211_ops[] = {
10993 .cmd = NL80211_CMD_SET_KEY, 11034 .cmd = NL80211_CMD_SET_KEY,
10994 .doit = nl80211_set_key, 11035 .doit = nl80211_set_key,
10995 .policy = nl80211_policy, 11036 .policy = nl80211_policy,
10996 .flags = GENL_ADMIN_PERM, 11037 .flags = GENL_UNS_ADMIN_PERM,
10997 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11038 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
10998 NL80211_FLAG_NEED_RTNL | 11039 NL80211_FLAG_NEED_RTNL |
10999 NL80211_FLAG_CLEAR_SKB, 11040 NL80211_FLAG_CLEAR_SKB,
@@ -11002,7 +11043,7 @@ static const struct genl_ops nl80211_ops[] = {
11002 .cmd = NL80211_CMD_NEW_KEY, 11043 .cmd = NL80211_CMD_NEW_KEY,
11003 .doit = nl80211_new_key, 11044 .doit = nl80211_new_key,
11004 .policy = nl80211_policy, 11045 .policy = nl80211_policy,
11005 .flags = GENL_ADMIN_PERM, 11046 .flags = GENL_UNS_ADMIN_PERM,
11006 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11047 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11007 NL80211_FLAG_NEED_RTNL | 11048 NL80211_FLAG_NEED_RTNL |
11008 NL80211_FLAG_CLEAR_SKB, 11049 NL80211_FLAG_CLEAR_SKB,
@@ -11011,14 +11052,14 @@ static const struct genl_ops nl80211_ops[] = {
11011 .cmd = NL80211_CMD_DEL_KEY, 11052 .cmd = NL80211_CMD_DEL_KEY,
11012 .doit = nl80211_del_key, 11053 .doit = nl80211_del_key,
11013 .policy = nl80211_policy, 11054 .policy = nl80211_policy,
11014 .flags = GENL_ADMIN_PERM, 11055 .flags = GENL_UNS_ADMIN_PERM,
11015 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11056 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11016 NL80211_FLAG_NEED_RTNL, 11057 NL80211_FLAG_NEED_RTNL,
11017 }, 11058 },
11018 { 11059 {
11019 .cmd = NL80211_CMD_SET_BEACON, 11060 .cmd = NL80211_CMD_SET_BEACON,
11020 .policy = nl80211_policy, 11061 .policy = nl80211_policy,
11021 .flags = GENL_ADMIN_PERM, 11062 .flags = GENL_UNS_ADMIN_PERM,
11022 .doit = nl80211_set_beacon, 11063 .doit = nl80211_set_beacon,
11023 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11064 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11024 NL80211_FLAG_NEED_RTNL, 11065 NL80211_FLAG_NEED_RTNL,
@@ -11026,7 +11067,7 @@ static const struct genl_ops nl80211_ops[] = {
11026 { 11067 {
11027 .cmd = NL80211_CMD_START_AP, 11068 .cmd = NL80211_CMD_START_AP,
11028 .policy = nl80211_policy, 11069 .policy = nl80211_policy,
11029 .flags = GENL_ADMIN_PERM, 11070 .flags = GENL_UNS_ADMIN_PERM,
11030 .doit = nl80211_start_ap, 11071 .doit = nl80211_start_ap,
11031 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11072 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11032 NL80211_FLAG_NEED_RTNL, 11073 NL80211_FLAG_NEED_RTNL,
@@ -11034,7 +11075,7 @@ static const struct genl_ops nl80211_ops[] = {
11034 { 11075 {
11035 .cmd = NL80211_CMD_STOP_AP, 11076 .cmd = NL80211_CMD_STOP_AP,
11036 .policy = nl80211_policy, 11077 .policy = nl80211_policy,
11037 .flags = GENL_ADMIN_PERM, 11078 .flags = GENL_UNS_ADMIN_PERM,
11038 .doit = nl80211_stop_ap, 11079 .doit = nl80211_stop_ap,
11039 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11080 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11040 NL80211_FLAG_NEED_RTNL, 11081 NL80211_FLAG_NEED_RTNL,
@@ -11051,7 +11092,7 @@ static const struct genl_ops nl80211_ops[] = {
11051 .cmd = NL80211_CMD_SET_STATION, 11092 .cmd = NL80211_CMD_SET_STATION,
11052 .doit = nl80211_set_station, 11093 .doit = nl80211_set_station,
11053 .policy = nl80211_policy, 11094 .policy = nl80211_policy,
11054 .flags = GENL_ADMIN_PERM, 11095 .flags = GENL_UNS_ADMIN_PERM,
11055 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11096 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11056 NL80211_FLAG_NEED_RTNL, 11097 NL80211_FLAG_NEED_RTNL,
11057 }, 11098 },
@@ -11059,7 +11100,7 @@ static const struct genl_ops nl80211_ops[] = {
11059 .cmd = NL80211_CMD_NEW_STATION, 11100 .cmd = NL80211_CMD_NEW_STATION,
11060 .doit = nl80211_new_station, 11101 .doit = nl80211_new_station,
11061 .policy = nl80211_policy, 11102 .policy = nl80211_policy,
11062 .flags = GENL_ADMIN_PERM, 11103 .flags = GENL_UNS_ADMIN_PERM,
11063 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11104 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11064 NL80211_FLAG_NEED_RTNL, 11105 NL80211_FLAG_NEED_RTNL,
11065 }, 11106 },
@@ -11067,7 +11108,7 @@ static const struct genl_ops nl80211_ops[] = {
11067 .cmd = NL80211_CMD_DEL_STATION, 11108 .cmd = NL80211_CMD_DEL_STATION,
11068 .doit = nl80211_del_station, 11109 .doit = nl80211_del_station,
11069 .policy = nl80211_policy, 11110 .policy = nl80211_policy,
11070 .flags = GENL_ADMIN_PERM, 11111 .flags = GENL_UNS_ADMIN_PERM,
11071 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11112 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11072 NL80211_FLAG_NEED_RTNL, 11113 NL80211_FLAG_NEED_RTNL,
11073 }, 11114 },
@@ -11076,7 +11117,7 @@ static const struct genl_ops nl80211_ops[] = {
11076 .doit = nl80211_get_mpath, 11117 .doit = nl80211_get_mpath,
11077 .dumpit = nl80211_dump_mpath, 11118 .dumpit = nl80211_dump_mpath,
11078 .policy = nl80211_policy, 11119 .policy = nl80211_policy,
11079 .flags = GENL_ADMIN_PERM, 11120 .flags = GENL_UNS_ADMIN_PERM,
11080 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11121 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11081 NL80211_FLAG_NEED_RTNL, 11122 NL80211_FLAG_NEED_RTNL,
11082 }, 11123 },
@@ -11085,7 +11126,7 @@ static const struct genl_ops nl80211_ops[] = {
11085 .doit = nl80211_get_mpp, 11126 .doit = nl80211_get_mpp,
11086 .dumpit = nl80211_dump_mpp, 11127 .dumpit = nl80211_dump_mpp,
11087 .policy = nl80211_policy, 11128 .policy = nl80211_policy,
11088 .flags = GENL_ADMIN_PERM, 11129 .flags = GENL_UNS_ADMIN_PERM,
11089 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11130 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11090 NL80211_FLAG_NEED_RTNL, 11131 NL80211_FLAG_NEED_RTNL,
11091 }, 11132 },
@@ -11093,7 +11134,7 @@ static const struct genl_ops nl80211_ops[] = {
11093 .cmd = NL80211_CMD_SET_MPATH, 11134 .cmd = NL80211_CMD_SET_MPATH,
11094 .doit = nl80211_set_mpath, 11135 .doit = nl80211_set_mpath,
11095 .policy = nl80211_policy, 11136 .policy = nl80211_policy,
11096 .flags = GENL_ADMIN_PERM, 11137 .flags = GENL_UNS_ADMIN_PERM,
11097 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11138 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11098 NL80211_FLAG_NEED_RTNL, 11139 NL80211_FLAG_NEED_RTNL,
11099 }, 11140 },
@@ -11101,7 +11142,7 @@ static const struct genl_ops nl80211_ops[] = {
11101 .cmd = NL80211_CMD_NEW_MPATH, 11142 .cmd = NL80211_CMD_NEW_MPATH,
11102 .doit = nl80211_new_mpath, 11143 .doit = nl80211_new_mpath,
11103 .policy = nl80211_policy, 11144 .policy = nl80211_policy,
11104 .flags = GENL_ADMIN_PERM, 11145 .flags = GENL_UNS_ADMIN_PERM,
11105 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11146 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11106 NL80211_FLAG_NEED_RTNL, 11147 NL80211_FLAG_NEED_RTNL,
11107 }, 11148 },
@@ -11109,7 +11150,7 @@ static const struct genl_ops nl80211_ops[] = {
11109 .cmd = NL80211_CMD_DEL_MPATH, 11150 .cmd = NL80211_CMD_DEL_MPATH,
11110 .doit = nl80211_del_mpath, 11151 .doit = nl80211_del_mpath,
11111 .policy = nl80211_policy, 11152 .policy = nl80211_policy,
11112 .flags = GENL_ADMIN_PERM, 11153 .flags = GENL_UNS_ADMIN_PERM,
11113 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11154 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11114 NL80211_FLAG_NEED_RTNL, 11155 NL80211_FLAG_NEED_RTNL,
11115 }, 11156 },
@@ -11117,7 +11158,7 @@ static const struct genl_ops nl80211_ops[] = {
11117 .cmd = NL80211_CMD_SET_BSS, 11158 .cmd = NL80211_CMD_SET_BSS,
11118 .doit = nl80211_set_bss, 11159 .doit = nl80211_set_bss,
11119 .policy = nl80211_policy, 11160 .policy = nl80211_policy,
11120 .flags = GENL_ADMIN_PERM, 11161 .flags = GENL_UNS_ADMIN_PERM,
11121 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11162 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11122 NL80211_FLAG_NEED_RTNL, 11163 NL80211_FLAG_NEED_RTNL,
11123 }, 11164 },
@@ -11156,7 +11197,7 @@ static const struct genl_ops nl80211_ops[] = {
11156 .cmd = NL80211_CMD_SET_MESH_CONFIG, 11197 .cmd = NL80211_CMD_SET_MESH_CONFIG,
11157 .doit = nl80211_update_mesh_config, 11198 .doit = nl80211_update_mesh_config,
11158 .policy = nl80211_policy, 11199 .policy = nl80211_policy,
11159 .flags = GENL_ADMIN_PERM, 11200 .flags = GENL_UNS_ADMIN_PERM,
11160 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11201 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11161 NL80211_FLAG_NEED_RTNL, 11202 NL80211_FLAG_NEED_RTNL,
11162 }, 11203 },
@@ -11164,7 +11205,7 @@ static const struct genl_ops nl80211_ops[] = {
11164 .cmd = NL80211_CMD_TRIGGER_SCAN, 11205 .cmd = NL80211_CMD_TRIGGER_SCAN,
11165 .doit = nl80211_trigger_scan, 11206 .doit = nl80211_trigger_scan,
11166 .policy = nl80211_policy, 11207 .policy = nl80211_policy,
11167 .flags = GENL_ADMIN_PERM, 11208 .flags = GENL_UNS_ADMIN_PERM,
11168 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 11209 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
11169 NL80211_FLAG_NEED_RTNL, 11210 NL80211_FLAG_NEED_RTNL,
11170 }, 11211 },
@@ -11172,7 +11213,7 @@ static const struct genl_ops nl80211_ops[] = {
11172 .cmd = NL80211_CMD_ABORT_SCAN, 11213 .cmd = NL80211_CMD_ABORT_SCAN,
11173 .doit = nl80211_abort_scan, 11214 .doit = nl80211_abort_scan,
11174 .policy = nl80211_policy, 11215 .policy = nl80211_policy,
11175 .flags = GENL_ADMIN_PERM, 11216 .flags = GENL_UNS_ADMIN_PERM,
11176 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 11217 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
11177 NL80211_FLAG_NEED_RTNL, 11218 NL80211_FLAG_NEED_RTNL,
11178 }, 11219 },
@@ -11185,7 +11226,7 @@ static const struct genl_ops nl80211_ops[] = {
11185 .cmd = NL80211_CMD_START_SCHED_SCAN, 11226 .cmd = NL80211_CMD_START_SCHED_SCAN,
11186 .doit = nl80211_start_sched_scan, 11227 .doit = nl80211_start_sched_scan,
11187 .policy = nl80211_policy, 11228 .policy = nl80211_policy,
11188 .flags = GENL_ADMIN_PERM, 11229 .flags = GENL_UNS_ADMIN_PERM,
11189 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11230 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11190 NL80211_FLAG_NEED_RTNL, 11231 NL80211_FLAG_NEED_RTNL,
11191 }, 11232 },
@@ -11193,7 +11234,7 @@ static const struct genl_ops nl80211_ops[] = {
11193 .cmd = NL80211_CMD_STOP_SCHED_SCAN, 11234 .cmd = NL80211_CMD_STOP_SCHED_SCAN,
11194 .doit = nl80211_stop_sched_scan, 11235 .doit = nl80211_stop_sched_scan,
11195 .policy = nl80211_policy, 11236 .policy = nl80211_policy,
11196 .flags = GENL_ADMIN_PERM, 11237 .flags = GENL_UNS_ADMIN_PERM,
11197 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11238 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11198 NL80211_FLAG_NEED_RTNL, 11239 NL80211_FLAG_NEED_RTNL,
11199 }, 11240 },
@@ -11201,7 +11242,7 @@ static const struct genl_ops nl80211_ops[] = {
11201 .cmd = NL80211_CMD_AUTHENTICATE, 11242 .cmd = NL80211_CMD_AUTHENTICATE,
11202 .doit = nl80211_authenticate, 11243 .doit = nl80211_authenticate,
11203 .policy = nl80211_policy, 11244 .policy = nl80211_policy,
11204 .flags = GENL_ADMIN_PERM, 11245 .flags = GENL_UNS_ADMIN_PERM,
11205 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11246 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11206 NL80211_FLAG_NEED_RTNL | 11247 NL80211_FLAG_NEED_RTNL |
11207 NL80211_FLAG_CLEAR_SKB, 11248 NL80211_FLAG_CLEAR_SKB,
@@ -11210,7 +11251,7 @@ static const struct genl_ops nl80211_ops[] = {
11210 .cmd = NL80211_CMD_ASSOCIATE, 11251 .cmd = NL80211_CMD_ASSOCIATE,
11211 .doit = nl80211_associate, 11252 .doit = nl80211_associate,
11212 .policy = nl80211_policy, 11253 .policy = nl80211_policy,
11213 .flags = GENL_ADMIN_PERM, 11254 .flags = GENL_UNS_ADMIN_PERM,
11214 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11255 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11215 NL80211_FLAG_NEED_RTNL, 11256 NL80211_FLAG_NEED_RTNL,
11216 }, 11257 },
@@ -11218,7 +11259,7 @@ static const struct genl_ops nl80211_ops[] = {
11218 .cmd = NL80211_CMD_DEAUTHENTICATE, 11259 .cmd = NL80211_CMD_DEAUTHENTICATE,
11219 .doit = nl80211_deauthenticate, 11260 .doit = nl80211_deauthenticate,
11220 .policy = nl80211_policy, 11261 .policy = nl80211_policy,
11221 .flags = GENL_ADMIN_PERM, 11262 .flags = GENL_UNS_ADMIN_PERM,
11222 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11263 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11223 NL80211_FLAG_NEED_RTNL, 11264 NL80211_FLAG_NEED_RTNL,
11224 }, 11265 },
@@ -11226,7 +11267,7 @@ static const struct genl_ops nl80211_ops[] = {
11226 .cmd = NL80211_CMD_DISASSOCIATE, 11267 .cmd = NL80211_CMD_DISASSOCIATE,
11227 .doit = nl80211_disassociate, 11268 .doit = nl80211_disassociate,
11228 .policy = nl80211_policy, 11269 .policy = nl80211_policy,
11229 .flags = GENL_ADMIN_PERM, 11270 .flags = GENL_UNS_ADMIN_PERM,
11230 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11271 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11231 NL80211_FLAG_NEED_RTNL, 11272 NL80211_FLAG_NEED_RTNL,
11232 }, 11273 },
@@ -11234,7 +11275,7 @@ static const struct genl_ops nl80211_ops[] = {
11234 .cmd = NL80211_CMD_JOIN_IBSS, 11275 .cmd = NL80211_CMD_JOIN_IBSS,
11235 .doit = nl80211_join_ibss, 11276 .doit = nl80211_join_ibss,
11236 .policy = nl80211_policy, 11277 .policy = nl80211_policy,
11237 .flags = GENL_ADMIN_PERM, 11278 .flags = GENL_UNS_ADMIN_PERM,
11238 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11279 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11239 NL80211_FLAG_NEED_RTNL, 11280 NL80211_FLAG_NEED_RTNL,
11240 }, 11281 },
@@ -11242,7 +11283,7 @@ static const struct genl_ops nl80211_ops[] = {
11242 .cmd = NL80211_CMD_LEAVE_IBSS, 11283 .cmd = NL80211_CMD_LEAVE_IBSS,
11243 .doit = nl80211_leave_ibss, 11284 .doit = nl80211_leave_ibss,
11244 .policy = nl80211_policy, 11285 .policy = nl80211_policy,
11245 .flags = GENL_ADMIN_PERM, 11286 .flags = GENL_UNS_ADMIN_PERM,
11246 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11287 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11247 NL80211_FLAG_NEED_RTNL, 11288 NL80211_FLAG_NEED_RTNL,
11248 }, 11289 },
@@ -11252,7 +11293,7 @@ static const struct genl_ops nl80211_ops[] = {
11252 .doit = nl80211_testmode_do, 11293 .doit = nl80211_testmode_do,
11253 .dumpit = nl80211_testmode_dump, 11294 .dumpit = nl80211_testmode_dump,
11254 .policy = nl80211_policy, 11295 .policy = nl80211_policy,
11255 .flags = GENL_ADMIN_PERM, 11296 .flags = GENL_UNS_ADMIN_PERM,
11256 .internal_flags = NL80211_FLAG_NEED_WIPHY | 11297 .internal_flags = NL80211_FLAG_NEED_WIPHY |
11257 NL80211_FLAG_NEED_RTNL, 11298 NL80211_FLAG_NEED_RTNL,
11258 }, 11299 },
@@ -11261,7 +11302,7 @@ static const struct genl_ops nl80211_ops[] = {
11261 .cmd = NL80211_CMD_CONNECT, 11302 .cmd = NL80211_CMD_CONNECT,
11262 .doit = nl80211_connect, 11303 .doit = nl80211_connect,
11263 .policy = nl80211_policy, 11304 .policy = nl80211_policy,
11264 .flags = GENL_ADMIN_PERM, 11305 .flags = GENL_UNS_ADMIN_PERM,
11265 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11306 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11266 NL80211_FLAG_NEED_RTNL, 11307 NL80211_FLAG_NEED_RTNL,
11267 }, 11308 },
@@ -11269,7 +11310,7 @@ static const struct genl_ops nl80211_ops[] = {
11269 .cmd = NL80211_CMD_DISCONNECT, 11310 .cmd = NL80211_CMD_DISCONNECT,
11270 .doit = nl80211_disconnect, 11311 .doit = nl80211_disconnect,
11271 .policy = nl80211_policy, 11312 .policy = nl80211_policy,
11272 .flags = GENL_ADMIN_PERM, 11313 .flags = GENL_UNS_ADMIN_PERM,
11273 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11314 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11274 NL80211_FLAG_NEED_RTNL, 11315 NL80211_FLAG_NEED_RTNL,
11275 }, 11316 },
@@ -11277,7 +11318,7 @@ static const struct genl_ops nl80211_ops[] = {
11277 .cmd = NL80211_CMD_SET_WIPHY_NETNS, 11318 .cmd = NL80211_CMD_SET_WIPHY_NETNS,
11278 .doit = nl80211_wiphy_netns, 11319 .doit = nl80211_wiphy_netns,
11279 .policy = nl80211_policy, 11320 .policy = nl80211_policy,
11280 .flags = GENL_ADMIN_PERM, 11321 .flags = GENL_UNS_ADMIN_PERM,
11281 .internal_flags = NL80211_FLAG_NEED_WIPHY | 11322 .internal_flags = NL80211_FLAG_NEED_WIPHY |
11282 NL80211_FLAG_NEED_RTNL, 11323 NL80211_FLAG_NEED_RTNL,
11283 }, 11324 },
@@ -11290,7 +11331,7 @@ static const struct genl_ops nl80211_ops[] = {
11290 .cmd = NL80211_CMD_SET_PMKSA, 11331 .cmd = NL80211_CMD_SET_PMKSA,
11291 .doit = nl80211_setdel_pmksa, 11332 .doit = nl80211_setdel_pmksa,
11292 .policy = nl80211_policy, 11333 .policy = nl80211_policy,
11293 .flags = GENL_ADMIN_PERM, 11334 .flags = GENL_UNS_ADMIN_PERM,
11294 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11335 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11295 NL80211_FLAG_NEED_RTNL, 11336 NL80211_FLAG_NEED_RTNL,
11296 }, 11337 },
@@ -11298,7 +11339,7 @@ static const struct genl_ops nl80211_ops[] = {
11298 .cmd = NL80211_CMD_DEL_PMKSA, 11339 .cmd = NL80211_CMD_DEL_PMKSA,
11299 .doit = nl80211_setdel_pmksa, 11340 .doit = nl80211_setdel_pmksa,
11300 .policy = nl80211_policy, 11341 .policy = nl80211_policy,
11301 .flags = GENL_ADMIN_PERM, 11342 .flags = GENL_UNS_ADMIN_PERM,
11302 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11343 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11303 NL80211_FLAG_NEED_RTNL, 11344 NL80211_FLAG_NEED_RTNL,
11304 }, 11345 },
@@ -11306,7 +11347,7 @@ static const struct genl_ops nl80211_ops[] = {
11306 .cmd = NL80211_CMD_FLUSH_PMKSA, 11347 .cmd = NL80211_CMD_FLUSH_PMKSA,
11307 .doit = nl80211_flush_pmksa, 11348 .doit = nl80211_flush_pmksa,
11308 .policy = nl80211_policy, 11349 .policy = nl80211_policy,
11309 .flags = GENL_ADMIN_PERM, 11350 .flags = GENL_UNS_ADMIN_PERM,
11310 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11351 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11311 NL80211_FLAG_NEED_RTNL, 11352 NL80211_FLAG_NEED_RTNL,
11312 }, 11353 },
@@ -11314,7 +11355,7 @@ static const struct genl_ops nl80211_ops[] = {
11314 .cmd = NL80211_CMD_REMAIN_ON_CHANNEL, 11355 .cmd = NL80211_CMD_REMAIN_ON_CHANNEL,
11315 .doit = nl80211_remain_on_channel, 11356 .doit = nl80211_remain_on_channel,
11316 .policy = nl80211_policy, 11357 .policy = nl80211_policy,
11317 .flags = GENL_ADMIN_PERM, 11358 .flags = GENL_UNS_ADMIN_PERM,
11318 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 11359 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
11319 NL80211_FLAG_NEED_RTNL, 11360 NL80211_FLAG_NEED_RTNL,
11320 }, 11361 },
@@ -11322,7 +11363,7 @@ static const struct genl_ops nl80211_ops[] = {
11322 .cmd = NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, 11363 .cmd = NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL,
11323 .doit = nl80211_cancel_remain_on_channel, 11364 .doit = nl80211_cancel_remain_on_channel,
11324 .policy = nl80211_policy, 11365 .policy = nl80211_policy,
11325 .flags = GENL_ADMIN_PERM, 11366 .flags = GENL_UNS_ADMIN_PERM,
11326 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 11367 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
11327 NL80211_FLAG_NEED_RTNL, 11368 NL80211_FLAG_NEED_RTNL,
11328 }, 11369 },
@@ -11330,7 +11371,7 @@ static const struct genl_ops nl80211_ops[] = {
11330 .cmd = NL80211_CMD_SET_TX_BITRATE_MASK, 11371 .cmd = NL80211_CMD_SET_TX_BITRATE_MASK,
11331 .doit = nl80211_set_tx_bitrate_mask, 11372 .doit = nl80211_set_tx_bitrate_mask,
11332 .policy = nl80211_policy, 11373 .policy = nl80211_policy,
11333 .flags = GENL_ADMIN_PERM, 11374 .flags = GENL_UNS_ADMIN_PERM,
11334 .internal_flags = NL80211_FLAG_NEED_NETDEV | 11375 .internal_flags = NL80211_FLAG_NEED_NETDEV |
11335 NL80211_FLAG_NEED_RTNL, 11376 NL80211_FLAG_NEED_RTNL,
11336 }, 11377 },
@@ -11338,7 +11379,7 @@ static const struct genl_ops nl80211_ops[] = {
11338 .cmd = NL80211_CMD_REGISTER_FRAME, 11379 .cmd = NL80211_CMD_REGISTER_FRAME,
11339 .doit = nl80211_register_mgmt, 11380 .doit = nl80211_register_mgmt,
11340 .policy = nl80211_policy, 11381 .policy = nl80211_policy,
11341 .flags = GENL_ADMIN_PERM, 11382 .flags = GENL_UNS_ADMIN_PERM,
11342 .internal_flags = NL80211_FLAG_NEED_WDEV | 11383 .internal_flags = NL80211_FLAG_NEED_WDEV |
11343 NL80211_FLAG_NEED_RTNL, 11384 NL80211_FLAG_NEED_RTNL,
11344 }, 11385 },
@@ -11346,7 +11387,7 @@ static const struct genl_ops nl80211_ops[] = {
11346 .cmd = NL80211_CMD_FRAME, 11387 .cmd = NL80211_CMD_FRAME,
11347 .doit = nl80211_tx_mgmt, 11388 .doit = nl80211_tx_mgmt,
11348 .policy = nl80211_policy, 11389 .policy = nl80211_policy,
11349 .flags = GENL_ADMIN_PERM, 11390 .flags = GENL_UNS_ADMIN_PERM,
11350 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 11391 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
11351 NL80211_FLAG_NEED_RTNL, 11392 NL80211_FLAG_NEED_RTNL,
11352 }, 11393 },
@@ -11354,7 +11395,7 @@ static const struct genl_ops nl80211_ops[] = {
11354 .cmd = NL80211_CMD_FRAME_WAIT_CANCEL, 11395 .cmd = NL80211_CMD_FRAME_WAIT_CANCEL,
11355 .doit = nl80211_tx_mgmt_cancel_wait, 11396 .doit = nl80211_tx_mgmt_cancel_wait,
11356 .policy = nl80211_policy, 11397 .policy = nl80211_policy,
11357 .flags = GENL_ADMIN_PERM, 11398 .flags = GENL_UNS_ADMIN_PERM,
11358 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 11399 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
11359 NL80211_FLAG_NEED_RTNL, 11400 NL80211_FLAG_NEED_RTNL,
11360 }, 11401 },
@@ -11362,7 +11403,7 @@ static const struct genl_ops nl80211_ops[] = {
11362 .cmd = NL80211_CMD_SET_POWER_SAVE, 11403 .cmd = NL80211_CMD_SET_POWER_SAVE,
11363 .doit = nl80211_set_power_save, 11404 .doit = nl80211_set_power_save,
11364 .policy = nl80211_policy, 11405 .policy = nl80211_policy,
11365 .flags = GENL_ADMIN_PERM, 11406 .flags = GENL_UNS_ADMIN_PERM,
11366 .internal_flags = NL80211_FLAG_NEED_NETDEV | 11407 .internal_flags = NL80211_FLAG_NEED_NETDEV |
11367 NL80211_FLAG_NEED_RTNL, 11408 NL80211_FLAG_NEED_RTNL,
11368 }, 11409 },
@@ -11378,7 +11419,7 @@ static const struct genl_ops nl80211_ops[] = {
11378 .cmd = NL80211_CMD_SET_CQM, 11419 .cmd = NL80211_CMD_SET_CQM,
11379 .doit = nl80211_set_cqm, 11420 .doit = nl80211_set_cqm,
11380 .policy = nl80211_policy, 11421 .policy = nl80211_policy,
11381 .flags = GENL_ADMIN_PERM, 11422 .flags = GENL_UNS_ADMIN_PERM,
11382 .internal_flags = NL80211_FLAG_NEED_NETDEV | 11423 .internal_flags = NL80211_FLAG_NEED_NETDEV |
11383 NL80211_FLAG_NEED_RTNL, 11424 NL80211_FLAG_NEED_RTNL,
11384 }, 11425 },
@@ -11386,7 +11427,7 @@ static const struct genl_ops nl80211_ops[] = {
11386 .cmd = NL80211_CMD_SET_CHANNEL, 11427 .cmd = NL80211_CMD_SET_CHANNEL,
11387 .doit = nl80211_set_channel, 11428 .doit = nl80211_set_channel,
11388 .policy = nl80211_policy, 11429 .policy = nl80211_policy,
11389 .flags = GENL_ADMIN_PERM, 11430 .flags = GENL_UNS_ADMIN_PERM,
11390 .internal_flags = NL80211_FLAG_NEED_NETDEV | 11431 .internal_flags = NL80211_FLAG_NEED_NETDEV |
11391 NL80211_FLAG_NEED_RTNL, 11432 NL80211_FLAG_NEED_RTNL,
11392 }, 11433 },
@@ -11394,7 +11435,7 @@ static const struct genl_ops nl80211_ops[] = {
11394 .cmd = NL80211_CMD_SET_WDS_PEER, 11435 .cmd = NL80211_CMD_SET_WDS_PEER,
11395 .doit = nl80211_set_wds_peer, 11436 .doit = nl80211_set_wds_peer,
11396 .policy = nl80211_policy, 11437 .policy = nl80211_policy,
11397 .flags = GENL_ADMIN_PERM, 11438 .flags = GENL_UNS_ADMIN_PERM,
11398 .internal_flags = NL80211_FLAG_NEED_NETDEV | 11439 .internal_flags = NL80211_FLAG_NEED_NETDEV |
11399 NL80211_FLAG_NEED_RTNL, 11440 NL80211_FLAG_NEED_RTNL,
11400 }, 11441 },
@@ -11402,7 +11443,7 @@ static const struct genl_ops nl80211_ops[] = {
11402 .cmd = NL80211_CMD_JOIN_MESH, 11443 .cmd = NL80211_CMD_JOIN_MESH,
11403 .doit = nl80211_join_mesh, 11444 .doit = nl80211_join_mesh,
11404 .policy = nl80211_policy, 11445 .policy = nl80211_policy,
11405 .flags = GENL_ADMIN_PERM, 11446 .flags = GENL_UNS_ADMIN_PERM,
11406 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11447 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11407 NL80211_FLAG_NEED_RTNL, 11448 NL80211_FLAG_NEED_RTNL,
11408 }, 11449 },
@@ -11410,7 +11451,7 @@ static const struct genl_ops nl80211_ops[] = {
11410 .cmd = NL80211_CMD_LEAVE_MESH, 11451 .cmd = NL80211_CMD_LEAVE_MESH,
11411 .doit = nl80211_leave_mesh, 11452 .doit = nl80211_leave_mesh,
11412 .policy = nl80211_policy, 11453 .policy = nl80211_policy,
11413 .flags = GENL_ADMIN_PERM, 11454 .flags = GENL_UNS_ADMIN_PERM,
11414 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11455 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11415 NL80211_FLAG_NEED_RTNL, 11456 NL80211_FLAG_NEED_RTNL,
11416 }, 11457 },
@@ -11418,7 +11459,7 @@ static const struct genl_ops nl80211_ops[] = {
11418 .cmd = NL80211_CMD_JOIN_OCB, 11459 .cmd = NL80211_CMD_JOIN_OCB,
11419 .doit = nl80211_join_ocb, 11460 .doit = nl80211_join_ocb,
11420 .policy = nl80211_policy, 11461 .policy = nl80211_policy,
11421 .flags = GENL_ADMIN_PERM, 11462 .flags = GENL_UNS_ADMIN_PERM,
11422 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11463 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11423 NL80211_FLAG_NEED_RTNL, 11464 NL80211_FLAG_NEED_RTNL,
11424 }, 11465 },
@@ -11426,7 +11467,7 @@ static const struct genl_ops nl80211_ops[] = {
11426 .cmd = NL80211_CMD_LEAVE_OCB, 11467 .cmd = NL80211_CMD_LEAVE_OCB,
11427 .doit = nl80211_leave_ocb, 11468 .doit = nl80211_leave_ocb,
11428 .policy = nl80211_policy, 11469 .policy = nl80211_policy,
11429 .flags = GENL_ADMIN_PERM, 11470 .flags = GENL_UNS_ADMIN_PERM,
11430 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11471 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11431 NL80211_FLAG_NEED_RTNL, 11472 NL80211_FLAG_NEED_RTNL,
11432 }, 11473 },
@@ -11443,7 +11484,7 @@ static const struct genl_ops nl80211_ops[] = {
11443 .cmd = NL80211_CMD_SET_WOWLAN, 11484 .cmd = NL80211_CMD_SET_WOWLAN,
11444 .doit = nl80211_set_wowlan, 11485 .doit = nl80211_set_wowlan,
11445 .policy = nl80211_policy, 11486 .policy = nl80211_policy,
11446 .flags = GENL_ADMIN_PERM, 11487 .flags = GENL_UNS_ADMIN_PERM,
11447 .internal_flags = NL80211_FLAG_NEED_WIPHY | 11488 .internal_flags = NL80211_FLAG_NEED_WIPHY |
11448 NL80211_FLAG_NEED_RTNL, 11489 NL80211_FLAG_NEED_RTNL,
11449 }, 11490 },
@@ -11452,7 +11493,7 @@ static const struct genl_ops nl80211_ops[] = {
11452 .cmd = NL80211_CMD_SET_REKEY_OFFLOAD, 11493 .cmd = NL80211_CMD_SET_REKEY_OFFLOAD,
11453 .doit = nl80211_set_rekey_data, 11494 .doit = nl80211_set_rekey_data,
11454 .policy = nl80211_policy, 11495 .policy = nl80211_policy,
11455 .flags = GENL_ADMIN_PERM, 11496 .flags = GENL_UNS_ADMIN_PERM,
11456 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11497 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11457 NL80211_FLAG_NEED_RTNL | 11498 NL80211_FLAG_NEED_RTNL |
11458 NL80211_FLAG_CLEAR_SKB, 11499 NL80211_FLAG_CLEAR_SKB,
@@ -11461,7 +11502,7 @@ static const struct genl_ops nl80211_ops[] = {
11461 .cmd = NL80211_CMD_TDLS_MGMT, 11502 .cmd = NL80211_CMD_TDLS_MGMT,
11462 .doit = nl80211_tdls_mgmt, 11503 .doit = nl80211_tdls_mgmt,
11463 .policy = nl80211_policy, 11504 .policy = nl80211_policy,
11464 .flags = GENL_ADMIN_PERM, 11505 .flags = GENL_UNS_ADMIN_PERM,
11465 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11506 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11466 NL80211_FLAG_NEED_RTNL, 11507 NL80211_FLAG_NEED_RTNL,
11467 }, 11508 },
@@ -11469,7 +11510,7 @@ static const struct genl_ops nl80211_ops[] = {
11469 .cmd = NL80211_CMD_TDLS_OPER, 11510 .cmd = NL80211_CMD_TDLS_OPER,
11470 .doit = nl80211_tdls_oper, 11511 .doit = nl80211_tdls_oper,
11471 .policy = nl80211_policy, 11512 .policy = nl80211_policy,
11472 .flags = GENL_ADMIN_PERM, 11513 .flags = GENL_UNS_ADMIN_PERM,
11473 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11514 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11474 NL80211_FLAG_NEED_RTNL, 11515 NL80211_FLAG_NEED_RTNL,
11475 }, 11516 },
@@ -11477,7 +11518,7 @@ static const struct genl_ops nl80211_ops[] = {
11477 .cmd = NL80211_CMD_UNEXPECTED_FRAME, 11518 .cmd = NL80211_CMD_UNEXPECTED_FRAME,
11478 .doit = nl80211_register_unexpected_frame, 11519 .doit = nl80211_register_unexpected_frame,
11479 .policy = nl80211_policy, 11520 .policy = nl80211_policy,
11480 .flags = GENL_ADMIN_PERM, 11521 .flags = GENL_UNS_ADMIN_PERM,
11481 .internal_flags = NL80211_FLAG_NEED_NETDEV | 11522 .internal_flags = NL80211_FLAG_NEED_NETDEV |
11482 NL80211_FLAG_NEED_RTNL, 11523 NL80211_FLAG_NEED_RTNL,
11483 }, 11524 },
@@ -11485,7 +11526,7 @@ static const struct genl_ops nl80211_ops[] = {
11485 .cmd = NL80211_CMD_PROBE_CLIENT, 11526 .cmd = NL80211_CMD_PROBE_CLIENT,
11486 .doit = nl80211_probe_client, 11527 .doit = nl80211_probe_client,
11487 .policy = nl80211_policy, 11528 .policy = nl80211_policy,
11488 .flags = GENL_ADMIN_PERM, 11529 .flags = GENL_UNS_ADMIN_PERM,
11489 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11530 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11490 NL80211_FLAG_NEED_RTNL, 11531 NL80211_FLAG_NEED_RTNL,
11491 }, 11532 },
@@ -11493,7 +11534,7 @@ static const struct genl_ops nl80211_ops[] = {
11493 .cmd = NL80211_CMD_REGISTER_BEACONS, 11534 .cmd = NL80211_CMD_REGISTER_BEACONS,
11494 .doit = nl80211_register_beacons, 11535 .doit = nl80211_register_beacons,
11495 .policy = nl80211_policy, 11536 .policy = nl80211_policy,
11496 .flags = GENL_ADMIN_PERM, 11537 .flags = GENL_UNS_ADMIN_PERM,
11497 .internal_flags = NL80211_FLAG_NEED_WIPHY | 11538 .internal_flags = NL80211_FLAG_NEED_WIPHY |
11498 NL80211_FLAG_NEED_RTNL, 11539 NL80211_FLAG_NEED_RTNL,
11499 }, 11540 },
@@ -11501,7 +11542,7 @@ static const struct genl_ops nl80211_ops[] = {
11501 .cmd = NL80211_CMD_SET_NOACK_MAP, 11542 .cmd = NL80211_CMD_SET_NOACK_MAP,
11502 .doit = nl80211_set_noack_map, 11543 .doit = nl80211_set_noack_map,
11503 .policy = nl80211_policy, 11544 .policy = nl80211_policy,
11504 .flags = GENL_ADMIN_PERM, 11545 .flags = GENL_UNS_ADMIN_PERM,
11505 .internal_flags = NL80211_FLAG_NEED_NETDEV | 11546 .internal_flags = NL80211_FLAG_NEED_NETDEV |
11506 NL80211_FLAG_NEED_RTNL, 11547 NL80211_FLAG_NEED_RTNL,
11507 }, 11548 },
@@ -11509,7 +11550,7 @@ static const struct genl_ops nl80211_ops[] = {
11509 .cmd = NL80211_CMD_START_P2P_DEVICE, 11550 .cmd = NL80211_CMD_START_P2P_DEVICE,
11510 .doit = nl80211_start_p2p_device, 11551 .doit = nl80211_start_p2p_device,
11511 .policy = nl80211_policy, 11552 .policy = nl80211_policy,
11512 .flags = GENL_ADMIN_PERM, 11553 .flags = GENL_UNS_ADMIN_PERM,
11513 .internal_flags = NL80211_FLAG_NEED_WDEV | 11554 .internal_flags = NL80211_FLAG_NEED_WDEV |
11514 NL80211_FLAG_NEED_RTNL, 11555 NL80211_FLAG_NEED_RTNL,
11515 }, 11556 },
@@ -11517,7 +11558,7 @@ static const struct genl_ops nl80211_ops[] = {
11517 .cmd = NL80211_CMD_STOP_P2P_DEVICE, 11558 .cmd = NL80211_CMD_STOP_P2P_DEVICE,
11518 .doit = nl80211_stop_p2p_device, 11559 .doit = nl80211_stop_p2p_device,
11519 .policy = nl80211_policy, 11560 .policy = nl80211_policy,
11520 .flags = GENL_ADMIN_PERM, 11561 .flags = GENL_UNS_ADMIN_PERM,
11521 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 11562 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
11522 NL80211_FLAG_NEED_RTNL, 11563 NL80211_FLAG_NEED_RTNL,
11523 }, 11564 },
@@ -11525,7 +11566,7 @@ static const struct genl_ops nl80211_ops[] = {
11525 .cmd = NL80211_CMD_SET_MCAST_RATE, 11566 .cmd = NL80211_CMD_SET_MCAST_RATE,
11526 .doit = nl80211_set_mcast_rate, 11567 .doit = nl80211_set_mcast_rate,
11527 .policy = nl80211_policy, 11568 .policy = nl80211_policy,
11528 .flags = GENL_ADMIN_PERM, 11569 .flags = GENL_UNS_ADMIN_PERM,
11529 .internal_flags = NL80211_FLAG_NEED_NETDEV | 11570 .internal_flags = NL80211_FLAG_NEED_NETDEV |
11530 NL80211_FLAG_NEED_RTNL, 11571 NL80211_FLAG_NEED_RTNL,
11531 }, 11572 },
@@ -11533,7 +11574,7 @@ static const struct genl_ops nl80211_ops[] = {
11533 .cmd = NL80211_CMD_SET_MAC_ACL, 11574 .cmd = NL80211_CMD_SET_MAC_ACL,
11534 .doit = nl80211_set_mac_acl, 11575 .doit = nl80211_set_mac_acl,
11535 .policy = nl80211_policy, 11576 .policy = nl80211_policy,
11536 .flags = GENL_ADMIN_PERM, 11577 .flags = GENL_UNS_ADMIN_PERM,
11537 .internal_flags = NL80211_FLAG_NEED_NETDEV | 11578 .internal_flags = NL80211_FLAG_NEED_NETDEV |
11538 NL80211_FLAG_NEED_RTNL, 11579 NL80211_FLAG_NEED_RTNL,
11539 }, 11580 },
@@ -11541,7 +11582,7 @@ static const struct genl_ops nl80211_ops[] = {
11541 .cmd = NL80211_CMD_RADAR_DETECT, 11582 .cmd = NL80211_CMD_RADAR_DETECT,
11542 .doit = nl80211_start_radar_detection, 11583 .doit = nl80211_start_radar_detection,
11543 .policy = nl80211_policy, 11584 .policy = nl80211_policy,
11544 .flags = GENL_ADMIN_PERM, 11585 .flags = GENL_UNS_ADMIN_PERM,
11545 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11586 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11546 NL80211_FLAG_NEED_RTNL, 11587 NL80211_FLAG_NEED_RTNL,
11547 }, 11588 },
@@ -11554,7 +11595,7 @@ static const struct genl_ops nl80211_ops[] = {
11554 .cmd = NL80211_CMD_UPDATE_FT_IES, 11595 .cmd = NL80211_CMD_UPDATE_FT_IES,
11555 .doit = nl80211_update_ft_ies, 11596 .doit = nl80211_update_ft_ies,
11556 .policy = nl80211_policy, 11597 .policy = nl80211_policy,
11557 .flags = GENL_ADMIN_PERM, 11598 .flags = GENL_UNS_ADMIN_PERM,
11558 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11599 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11559 NL80211_FLAG_NEED_RTNL, 11600 NL80211_FLAG_NEED_RTNL,
11560 }, 11601 },
@@ -11562,7 +11603,7 @@ static const struct genl_ops nl80211_ops[] = {
11562 .cmd = NL80211_CMD_CRIT_PROTOCOL_START, 11603 .cmd = NL80211_CMD_CRIT_PROTOCOL_START,
11563 .doit = nl80211_crit_protocol_start, 11604 .doit = nl80211_crit_protocol_start,
11564 .policy = nl80211_policy, 11605 .policy = nl80211_policy,
11565 .flags = GENL_ADMIN_PERM, 11606 .flags = GENL_UNS_ADMIN_PERM,
11566 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 11607 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
11567 NL80211_FLAG_NEED_RTNL, 11608 NL80211_FLAG_NEED_RTNL,
11568 }, 11609 },
@@ -11570,7 +11611,7 @@ static const struct genl_ops nl80211_ops[] = {
11570 .cmd = NL80211_CMD_CRIT_PROTOCOL_STOP, 11611 .cmd = NL80211_CMD_CRIT_PROTOCOL_STOP,
11571 .doit = nl80211_crit_protocol_stop, 11612 .doit = nl80211_crit_protocol_stop,
11572 .policy = nl80211_policy, 11613 .policy = nl80211_policy,
11573 .flags = GENL_ADMIN_PERM, 11614 .flags = GENL_UNS_ADMIN_PERM,
11574 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 11615 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
11575 NL80211_FLAG_NEED_RTNL, 11616 NL80211_FLAG_NEED_RTNL,
11576 }, 11617 },
@@ -11585,7 +11626,7 @@ static const struct genl_ops nl80211_ops[] = {
11585 .cmd = NL80211_CMD_SET_COALESCE, 11626 .cmd = NL80211_CMD_SET_COALESCE,
11586 .doit = nl80211_set_coalesce, 11627 .doit = nl80211_set_coalesce,
11587 .policy = nl80211_policy, 11628 .policy = nl80211_policy,
11588 .flags = GENL_ADMIN_PERM, 11629 .flags = GENL_UNS_ADMIN_PERM,
11589 .internal_flags = NL80211_FLAG_NEED_WIPHY | 11630 .internal_flags = NL80211_FLAG_NEED_WIPHY |
11590 NL80211_FLAG_NEED_RTNL, 11631 NL80211_FLAG_NEED_RTNL,
11591 }, 11632 },
@@ -11593,7 +11634,7 @@ static const struct genl_ops nl80211_ops[] = {
11593 .cmd = NL80211_CMD_CHANNEL_SWITCH, 11634 .cmd = NL80211_CMD_CHANNEL_SWITCH,
11594 .doit = nl80211_channel_switch, 11635 .doit = nl80211_channel_switch,
11595 .policy = nl80211_policy, 11636 .policy = nl80211_policy,
11596 .flags = GENL_ADMIN_PERM, 11637 .flags = GENL_UNS_ADMIN_PERM,
11597 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11638 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11598 NL80211_FLAG_NEED_RTNL, 11639 NL80211_FLAG_NEED_RTNL,
11599 }, 11640 },
@@ -11602,7 +11643,7 @@ static const struct genl_ops nl80211_ops[] = {
11602 .doit = nl80211_vendor_cmd, 11643 .doit = nl80211_vendor_cmd,
11603 .dumpit = nl80211_vendor_cmd_dump, 11644 .dumpit = nl80211_vendor_cmd_dump,
11604 .policy = nl80211_policy, 11645 .policy = nl80211_policy,
11605 .flags = GENL_ADMIN_PERM, 11646 .flags = GENL_UNS_ADMIN_PERM,
11606 .internal_flags = NL80211_FLAG_NEED_WIPHY | 11647 .internal_flags = NL80211_FLAG_NEED_WIPHY |
11607 NL80211_FLAG_NEED_RTNL, 11648 NL80211_FLAG_NEED_RTNL,
11608 }, 11649 },
@@ -11610,7 +11651,7 @@ static const struct genl_ops nl80211_ops[] = {
11610 .cmd = NL80211_CMD_SET_QOS_MAP, 11651 .cmd = NL80211_CMD_SET_QOS_MAP,
11611 .doit = nl80211_set_qos_map, 11652 .doit = nl80211_set_qos_map,
11612 .policy = nl80211_policy, 11653 .policy = nl80211_policy,
11613 .flags = GENL_ADMIN_PERM, 11654 .flags = GENL_UNS_ADMIN_PERM,
11614 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11655 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11615 NL80211_FLAG_NEED_RTNL, 11656 NL80211_FLAG_NEED_RTNL,
11616 }, 11657 },
@@ -11618,7 +11659,7 @@ static const struct genl_ops nl80211_ops[] = {
11618 .cmd = NL80211_CMD_ADD_TX_TS, 11659 .cmd = NL80211_CMD_ADD_TX_TS,
11619 .doit = nl80211_add_tx_ts, 11660 .doit = nl80211_add_tx_ts,
11620 .policy = nl80211_policy, 11661 .policy = nl80211_policy,
11621 .flags = GENL_ADMIN_PERM, 11662 .flags = GENL_UNS_ADMIN_PERM,
11622 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11663 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11623 NL80211_FLAG_NEED_RTNL, 11664 NL80211_FLAG_NEED_RTNL,
11624 }, 11665 },
@@ -11626,7 +11667,7 @@ static const struct genl_ops nl80211_ops[] = {
11626 .cmd = NL80211_CMD_DEL_TX_TS, 11667 .cmd = NL80211_CMD_DEL_TX_TS,
11627 .doit = nl80211_del_tx_ts, 11668 .doit = nl80211_del_tx_ts,
11628 .policy = nl80211_policy, 11669 .policy = nl80211_policy,
11629 .flags = GENL_ADMIN_PERM, 11670 .flags = GENL_UNS_ADMIN_PERM,
11630 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11671 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11631 NL80211_FLAG_NEED_RTNL, 11672 NL80211_FLAG_NEED_RTNL,
11632 }, 11673 },
@@ -11634,7 +11675,7 @@ static const struct genl_ops nl80211_ops[] = {
11634 .cmd = NL80211_CMD_TDLS_CHANNEL_SWITCH, 11675 .cmd = NL80211_CMD_TDLS_CHANNEL_SWITCH,
11635 .doit = nl80211_tdls_channel_switch, 11676 .doit = nl80211_tdls_channel_switch,
11636 .policy = nl80211_policy, 11677 .policy = nl80211_policy,
11637 .flags = GENL_ADMIN_PERM, 11678 .flags = GENL_UNS_ADMIN_PERM,
11638 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11679 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11639 NL80211_FLAG_NEED_RTNL, 11680 NL80211_FLAG_NEED_RTNL,
11640 }, 11681 },
@@ -11642,7 +11683,7 @@ static const struct genl_ops nl80211_ops[] = {
11642 .cmd = NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH, 11683 .cmd = NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH,
11643 .doit = nl80211_tdls_cancel_channel_switch, 11684 .doit = nl80211_tdls_cancel_channel_switch,
11644 .policy = nl80211_policy, 11685 .policy = nl80211_policy,
11645 .flags = GENL_ADMIN_PERM, 11686 .flags = GENL_UNS_ADMIN_PERM,
11646 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 11687 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
11647 NL80211_FLAG_NEED_RTNL, 11688 NL80211_FLAG_NEED_RTNL,
11648 }, 11689 },
@@ -12092,7 +12133,7 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,
12092 struct net_device *netdev, const u8 *bssid, 12133 struct net_device *netdev, const u8 *bssid,
12093 const u8 *req_ie, size_t req_ie_len, 12134 const u8 *req_ie, size_t req_ie_len,
12094 const u8 *resp_ie, size_t resp_ie_len, 12135 const u8 *resp_ie, size_t resp_ie_len,
12095 u16 status, gfp_t gfp) 12136 int status, gfp_t gfp)
12096{ 12137{
12097 struct sk_buff *msg; 12138 struct sk_buff *msg;
12098 void *hdr; 12139 void *hdr;
@@ -12110,7 +12151,10 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,
12110 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || 12151 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
12111 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || 12152 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) ||
12112 (bssid && nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid)) || 12153 (bssid && nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid)) ||
12113 nla_put_u16(msg, NL80211_ATTR_STATUS_CODE, status) || 12154 nla_put_u16(msg, NL80211_ATTR_STATUS_CODE,
12155 status < 0 ? WLAN_STATUS_UNSPECIFIED_FAILURE :
12156 status) ||
12157 (status < 0 && nla_put_flag(msg, NL80211_ATTR_TIMED_OUT)) ||
12114 (req_ie && 12158 (req_ie &&
12115 nla_put(msg, NL80211_ATTR_REQ_IE, req_ie_len, req_ie)) || 12159 nla_put(msg, NL80211_ATTR_REQ_IE, req_ie_len, req_ie)) ||
12116 (resp_ie && 12160 (resp_ie &&
@@ -12126,7 +12170,6 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,
12126 nla_put_failure: 12170 nla_put_failure:
12127 genlmsg_cancel(msg, hdr); 12171 genlmsg_cancel(msg, hdr);
12128 nlmsg_free(msg); 12172 nlmsg_free(msg);
12129
12130} 12173}
12131 12174
12132void nl80211_send_roamed(struct cfg80211_registered_device *rdev, 12175void nl80211_send_roamed(struct cfg80211_registered_device *rdev,
@@ -12165,7 +12208,6 @@ void nl80211_send_roamed(struct cfg80211_registered_device *rdev,
12165 nla_put_failure: 12208 nla_put_failure:
12166 genlmsg_cancel(msg, hdr); 12209 genlmsg_cancel(msg, hdr);
12167 nlmsg_free(msg); 12210 nlmsg_free(msg);
12168
12169} 12211}
12170 12212
12171void nl80211_send_disconnected(struct cfg80211_registered_device *rdev, 12213void nl80211_send_disconnected(struct cfg80211_registered_device *rdev,
@@ -12203,7 +12245,6 @@ void nl80211_send_disconnected(struct cfg80211_registered_device *rdev,
12203 nla_put_failure: 12245 nla_put_failure:
12204 genlmsg_cancel(msg, hdr); 12246 genlmsg_cancel(msg, hdr);
12205 nlmsg_free(msg); 12247 nlmsg_free(msg);
12206
12207} 12248}
12208 12249
12209void nl80211_send_ibss_bssid(struct cfg80211_registered_device *rdev, 12250void nl80211_send_ibss_bssid(struct cfg80211_registered_device *rdev,
@@ -13545,7 +13586,6 @@ void cfg80211_crit_proto_stopped(struct wireless_dev *wdev, gfp_t gfp)
13545 if (hdr) 13586 if (hdr)
13546 genlmsg_cancel(msg, hdr); 13587 genlmsg_cancel(msg, hdr);
13547 nlmsg_free(msg); 13588 nlmsg_free(msg);
13548
13549} 13589}
13550EXPORT_SYMBOL(cfg80211_crit_proto_stopped); 13590EXPORT_SYMBOL(cfg80211_crit_proto_stopped);
13551 13591
diff --git a/net/wireless/nl80211.h b/net/wireless/nl80211.h
index 84d4edf1d545..a63f402b10b7 100644
--- a/net/wireless/nl80211.h
+++ b/net/wireless/nl80211.h
@@ -55,7 +55,7 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev,
55 struct net_device *netdev, const u8 *bssid, 55 struct net_device *netdev, const u8 *bssid,
56 const u8 *req_ie, size_t req_ie_len, 56 const u8 *req_ie, size_t req_ie_len,
57 const u8 *resp_ie, size_t resp_ie_len, 57 const u8 *resp_ie, size_t resp_ie_len,
58 u16 status, gfp_t gfp); 58 int status, gfp_t gfp);
59void nl80211_send_roamed(struct cfg80211_registered_device *rdev, 59void nl80211_send_roamed(struct cfg80211_registered_device *rdev,
60 struct net_device *netdev, const u8 *bssid, 60 struct net_device *netdev, const u8 *bssid,
61 const u8 *req_ie, size_t req_ie_len, 61 const u8 *req_ie, size_t req_ie_len,
diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index 584fdc347221..add6824c44fd 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -244,9 +244,7 @@ void cfg80211_conn_work(struct work_struct *work)
244 if (cfg80211_conn_do_work(wdev)) { 244 if (cfg80211_conn_do_work(wdev)) {
245 __cfg80211_connect_result( 245 __cfg80211_connect_result(
246 wdev->netdev, bssid, 246 wdev->netdev, bssid,
247 NULL, 0, NULL, 0, 247 NULL, 0, NULL, 0, -1, false, NULL);
248 WLAN_STATUS_UNSPECIFIED_FAILURE,
249 false, NULL);
250 } 248 }
251 wdev_unlock(wdev); 249 wdev_unlock(wdev);
252 } 250 }
@@ -648,7 +646,7 @@ static DECLARE_WORK(cfg80211_disconnect_work, disconnect_work);
648void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid, 646void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
649 const u8 *req_ie, size_t req_ie_len, 647 const u8 *req_ie, size_t req_ie_len,
650 const u8 *resp_ie, size_t resp_ie_len, 648 const u8 *resp_ie, size_t resp_ie_len,
651 u16 status, bool wextev, 649 int status, bool wextev,
652 struct cfg80211_bss *bss) 650 struct cfg80211_bss *bss)
653{ 651{
654 struct wireless_dev *wdev = dev->ieee80211_ptr; 652 struct wireless_dev *wdev = dev->ieee80211_ptr;
@@ -757,7 +755,7 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
757void cfg80211_connect_bss(struct net_device *dev, const u8 *bssid, 755void cfg80211_connect_bss(struct net_device *dev, const u8 *bssid,
758 struct cfg80211_bss *bss, const u8 *req_ie, 756 struct cfg80211_bss *bss, const u8 *req_ie,
759 size_t req_ie_len, const u8 *resp_ie, 757 size_t req_ie_len, const u8 *resp_ie,
760 size_t resp_ie_len, u16 status, gfp_t gfp) 758 size_t resp_ie_len, int status, gfp_t gfp)
761{ 759{
762 struct wireless_dev *wdev = dev->ieee80211_ptr; 760 struct wireless_dev *wdev = dev->ieee80211_ptr;
763 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); 761 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);