diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-05-15 11:44:01 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-05-24 18:02:20 -0400 |
commit | 91bf9b26fc95c505846bc2f744a73b51f2aaee1d (patch) | |
tree | 0a8cad8fa49ccb5f4899446ce78d183d50d377af | |
parent | 38fd2143fa653f80729800c1d61d4207b91dca42 (diff) |
cfg80211: remove some locked wrappers from mlme API
By making all the API functions require wdev locking we
can clean up the API a bit, getting rid of the locking
version of each function. This also decreases the size
of cfg80211 by a small amount.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r-- | net/wireless/core.h | 25 | ||||
-rw-r--r-- | net/wireless/mlme.c | 120 | ||||
-rw-r--r-- | net/wireless/nl80211.c | 34 | ||||
-rw-r--r-- | net/wireless/sme.c | 40 |
4 files changed, 70 insertions, 149 deletions
diff --git a/net/wireless/core.h b/net/wireless/core.h index d21a0fc01401..c8f87dfd50d3 100644 --- a/net/wireless/core.h +++ b/net/wireless/core.h | |||
@@ -282,38 +282,21 @@ int cfg80211_stop_ap(struct cfg80211_registered_device *rdev, | |||
282 | struct net_device *dev); | 282 | struct net_device *dev); |
283 | 283 | ||
284 | /* MLME */ | 284 | /* MLME */ |
285 | int __cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, | ||
286 | struct net_device *dev, | ||
287 | struct ieee80211_channel *chan, | ||
288 | enum nl80211_auth_type auth_type, | ||
289 | const u8 *bssid, | ||
290 | const u8 *ssid, int ssid_len, | ||
291 | const u8 *ie, int ie_len, | ||
292 | const u8 *key, int key_len, int key_idx, | ||
293 | const u8 *sae_data, int sae_data_len); | ||
294 | int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, | 285 | int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, |
295 | struct net_device *dev, struct ieee80211_channel *chan, | 286 | struct net_device *dev, |
296 | enum nl80211_auth_type auth_type, const u8 *bssid, | 287 | struct ieee80211_channel *chan, |
288 | enum nl80211_auth_type auth_type, | ||
289 | const u8 *bssid, | ||
297 | const u8 *ssid, int ssid_len, | 290 | const u8 *ssid, int ssid_len, |
298 | const u8 *ie, int ie_len, | 291 | const u8 *ie, int ie_len, |
299 | const u8 *key, int key_len, int key_idx, | 292 | const u8 *key, int key_len, int key_idx, |
300 | const u8 *sae_data, int sae_data_len); | 293 | const u8 *sae_data, int sae_data_len); |
301 | int __cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, | ||
302 | struct net_device *dev, | ||
303 | struct ieee80211_channel *chan, | ||
304 | const u8 *bssid, | ||
305 | const u8 *ssid, int ssid_len, | ||
306 | struct cfg80211_assoc_request *req); | ||
307 | int cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, | 294 | int cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, |
308 | struct net_device *dev, | 295 | struct net_device *dev, |
309 | struct ieee80211_channel *chan, | 296 | struct ieee80211_channel *chan, |
310 | const u8 *bssid, | 297 | const u8 *bssid, |
311 | const u8 *ssid, int ssid_len, | 298 | const u8 *ssid, int ssid_len, |
312 | struct cfg80211_assoc_request *req); | 299 | struct cfg80211_assoc_request *req); |
313 | int __cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev, | ||
314 | struct net_device *dev, const u8 *bssid, | ||
315 | const u8 *ie, int ie_len, u16 reason, | ||
316 | bool local_state_change); | ||
317 | int cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev, | 300 | int cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev, |
318 | struct net_device *dev, const u8 *bssid, | 301 | struct net_device *dev, const u8 *bssid, |
319 | const u8 *ie, int ie_len, u16 reason, | 302 | const u8 *ie, int ie_len, u16 reason, |
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c index 80ffb0138919..7bde5d9c0003 100644 --- a/net/wireless/mlme.c +++ b/net/wireless/mlme.c | |||
@@ -221,15 +221,15 @@ void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, | |||
221 | EXPORT_SYMBOL(cfg80211_michael_mic_failure); | 221 | EXPORT_SYMBOL(cfg80211_michael_mic_failure); |
222 | 222 | ||
223 | /* some MLME handling for userspace SME */ | 223 | /* some MLME handling for userspace SME */ |
224 | int __cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, | 224 | int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, |
225 | struct net_device *dev, | 225 | struct net_device *dev, |
226 | struct ieee80211_channel *chan, | 226 | struct ieee80211_channel *chan, |
227 | enum nl80211_auth_type auth_type, | 227 | enum nl80211_auth_type auth_type, |
228 | const u8 *bssid, | 228 | const u8 *bssid, |
229 | const u8 *ssid, int ssid_len, | 229 | const u8 *ssid, int ssid_len, |
230 | const u8 *ie, int ie_len, | 230 | const u8 *ie, int ie_len, |
231 | const u8 *key, int key_len, int key_idx, | 231 | const u8 *key, int key_len, int key_idx, |
232 | const u8 *sae_data, int sae_data_len) | 232 | const u8 *sae_data, int sae_data_len) |
233 | { | 233 | { |
234 | struct wireless_dev *wdev = dev->ieee80211_ptr; | 234 | struct wireless_dev *wdev = dev->ieee80211_ptr; |
235 | struct cfg80211_auth_request req = { | 235 | struct cfg80211_auth_request req = { |
@@ -271,28 +271,6 @@ out: | |||
271 | return err; | 271 | return err; |
272 | } | 272 | } |
273 | 273 | ||
274 | int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, | ||
275 | struct net_device *dev, struct ieee80211_channel *chan, | ||
276 | enum nl80211_auth_type auth_type, const u8 *bssid, | ||
277 | const u8 *ssid, int ssid_len, | ||
278 | const u8 *ie, int ie_len, | ||
279 | const u8 *key, int key_len, int key_idx, | ||
280 | const u8 *sae_data, int sae_data_len) | ||
281 | { | ||
282 | int err; | ||
283 | |||
284 | ASSERT_RTNL(); | ||
285 | |||
286 | wdev_lock(dev->ieee80211_ptr); | ||
287 | err = __cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid, | ||
288 | ssid, ssid_len, ie, ie_len, | ||
289 | key, key_len, key_idx, | ||
290 | sae_data, sae_data_len); | ||
291 | wdev_unlock(dev->ieee80211_ptr); | ||
292 | |||
293 | return err; | ||
294 | } | ||
295 | |||
296 | /* Do a logical ht_capa &= ht_capa_mask. */ | 274 | /* Do a logical ht_capa &= ht_capa_mask. */ |
297 | void cfg80211_oper_and_ht_capa(struct ieee80211_ht_cap *ht_capa, | 275 | void cfg80211_oper_and_ht_capa(struct ieee80211_ht_cap *ht_capa, |
298 | const struct ieee80211_ht_cap *ht_capa_mask) | 276 | const struct ieee80211_ht_cap *ht_capa_mask) |
@@ -327,12 +305,12 @@ void cfg80211_oper_and_vht_capa(struct ieee80211_vht_cap *vht_capa, | |||
327 | p1[i] &= p2[i]; | 305 | p1[i] &= p2[i]; |
328 | } | 306 | } |
329 | 307 | ||
330 | int __cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, | 308 | int cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, |
331 | struct net_device *dev, | 309 | struct net_device *dev, |
332 | struct ieee80211_channel *chan, | 310 | struct ieee80211_channel *chan, |
333 | const u8 *bssid, | 311 | const u8 *bssid, |
334 | const u8 *ssid, int ssid_len, | 312 | const u8 *ssid, int ssid_len, |
335 | struct cfg80211_assoc_request *req) | 313 | struct cfg80211_assoc_request *req) |
336 | { | 314 | { |
337 | struct wireless_dev *wdev = dev->ieee80211_ptr; | 315 | struct wireless_dev *wdev = dev->ieee80211_ptr; |
338 | int err; | 316 | int err; |
@@ -382,30 +360,10 @@ out: | |||
382 | return err; | 360 | return err; |
383 | } | 361 | } |
384 | 362 | ||
385 | int cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, | 363 | int cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev, |
386 | struct net_device *dev, | 364 | struct net_device *dev, const u8 *bssid, |
387 | struct ieee80211_channel *chan, | 365 | const u8 *ie, int ie_len, u16 reason, |
388 | const u8 *bssid, | 366 | bool local_state_change) |
389 | const u8 *ssid, int ssid_len, | ||
390 | struct cfg80211_assoc_request *req) | ||
391 | { | ||
392 | struct wireless_dev *wdev = dev->ieee80211_ptr; | ||
393 | int err; | ||
394 | |||
395 | ASSERT_RTNL(); | ||
396 | |||
397 | wdev_lock(wdev); | ||
398 | err = __cfg80211_mlme_assoc(rdev, dev, chan, bssid, | ||
399 | ssid, ssid_len, req); | ||
400 | wdev_unlock(wdev); | ||
401 | |||
402 | return err; | ||
403 | } | ||
404 | |||
405 | int __cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev, | ||
406 | struct net_device *dev, const u8 *bssid, | ||
407 | const u8 *ie, int ie_len, u16 reason, | ||
408 | bool local_state_change) | ||
409 | { | 367 | { |
410 | struct wireless_dev *wdev = dev->ieee80211_ptr; | 368 | struct wireless_dev *wdev = dev->ieee80211_ptr; |
411 | struct cfg80211_deauth_request req = { | 369 | struct cfg80211_deauth_request req = { |
@@ -425,26 +383,10 @@ int __cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev, | |||
425 | return rdev_deauth(rdev, dev, &req); | 383 | return rdev_deauth(rdev, dev, &req); |
426 | } | 384 | } |
427 | 385 | ||
428 | int cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev, | 386 | int cfg80211_mlme_disassoc(struct cfg80211_registered_device *rdev, |
429 | struct net_device *dev, const u8 *bssid, | 387 | struct net_device *dev, const u8 *bssid, |
430 | const u8 *ie, int ie_len, u16 reason, | 388 | const u8 *ie, int ie_len, u16 reason, |
431 | bool local_state_change) | 389 | bool local_state_change) |
432 | { | ||
433 | struct wireless_dev *wdev = dev->ieee80211_ptr; | ||
434 | int err; | ||
435 | |||
436 | wdev_lock(wdev); | ||
437 | err = __cfg80211_mlme_deauth(rdev, dev, bssid, ie, ie_len, reason, | ||
438 | local_state_change); | ||
439 | wdev_unlock(wdev); | ||
440 | |||
441 | return err; | ||
442 | } | ||
443 | |||
444 | static int __cfg80211_mlme_disassoc(struct cfg80211_registered_device *rdev, | ||
445 | struct net_device *dev, const u8 *bssid, | ||
446 | const u8 *ie, int ie_len, u16 reason, | ||
447 | bool local_state_change) | ||
448 | { | 390 | { |
449 | struct wireless_dev *wdev = dev->ieee80211_ptr; | 391 | struct wireless_dev *wdev = dev->ieee80211_ptr; |
450 | struct cfg80211_disassoc_request req = { | 392 | struct cfg80211_disassoc_request req = { |
@@ -470,22 +412,6 @@ static int __cfg80211_mlme_disassoc(struct cfg80211_registered_device *rdev, | |||
470 | return rdev_disassoc(rdev, dev, &req); | 412 | return rdev_disassoc(rdev, dev, &req); |
471 | } | 413 | } |
472 | 414 | ||
473 | int cfg80211_mlme_disassoc(struct cfg80211_registered_device *rdev, | ||
474 | struct net_device *dev, const u8 *bssid, | ||
475 | const u8 *ie, int ie_len, u16 reason, | ||
476 | bool local_state_change) | ||
477 | { | ||
478 | struct wireless_dev *wdev = dev->ieee80211_ptr; | ||
479 | int err; | ||
480 | |||
481 | wdev_lock(wdev); | ||
482 | err = __cfg80211_mlme_disassoc(rdev, dev, bssid, ie, ie_len, reason, | ||
483 | local_state_change); | ||
484 | wdev_unlock(wdev); | ||
485 | |||
486 | return err; | ||
487 | } | ||
488 | |||
489 | void cfg80211_mlme_down(struct cfg80211_registered_device *rdev, | 415 | void cfg80211_mlme_down(struct cfg80211_registered_device *rdev, |
490 | struct net_device *dev) | 416 | struct net_device *dev) |
491 | { | 417 | { |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 74cdb1a0cf31..49c2f2f511dc 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -5904,10 +5904,13 @@ static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info) | |||
5904 | if (local_state_change) | 5904 | if (local_state_change) |
5905 | return 0; | 5905 | return 0; |
5906 | 5906 | ||
5907 | return cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid, | 5907 | wdev_lock(dev->ieee80211_ptr); |
5908 | ssid, ssid_len, ie, ie_len, | 5908 | err = cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid, |
5909 | key.p.key, key.p.key_len, key.idx, | 5909 | ssid, ssid_len, ie, ie_len, |
5910 | sae_data, sae_data_len); | 5910 | key.p.key, key.p.key_len, key.idx, |
5911 | sae_data, sae_data_len); | ||
5912 | wdev_unlock(dev->ieee80211_ptr); | ||
5913 | return err; | ||
5911 | } | 5914 | } |
5912 | 5915 | ||
5913 | static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev, | 5916 | static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev, |
@@ -6074,9 +6077,12 @@ static int nl80211_associate(struct sk_buff *skb, struct genl_info *info) | |||
6074 | } | 6077 | } |
6075 | 6078 | ||
6076 | err = nl80211_crypto_settings(rdev, info, &req.crypto, 1); | 6079 | err = nl80211_crypto_settings(rdev, info, &req.crypto, 1); |
6077 | if (!err) | 6080 | if (!err) { |
6081 | wdev_lock(dev->ieee80211_ptr); | ||
6078 | err = cfg80211_mlme_assoc(rdev, dev, chan, bssid, | 6082 | err = cfg80211_mlme_assoc(rdev, dev, chan, bssid, |
6079 | ssid, ssid_len, &req); | 6083 | ssid, ssid_len, &req); |
6084 | wdev_unlock(dev->ieee80211_ptr); | ||
6085 | } | ||
6080 | 6086 | ||
6081 | return err; | 6087 | return err; |
6082 | } | 6088 | } |
@@ -6086,7 +6092,7 @@ static int nl80211_deauthenticate(struct sk_buff *skb, struct genl_info *info) | |||
6086 | struct cfg80211_registered_device *rdev = info->user_ptr[0]; | 6092 | struct cfg80211_registered_device *rdev = info->user_ptr[0]; |
6087 | struct net_device *dev = info->user_ptr[1]; | 6093 | struct net_device *dev = info->user_ptr[1]; |
6088 | const u8 *ie = NULL, *bssid; | 6094 | const u8 *ie = NULL, *bssid; |
6089 | int ie_len = 0; | 6095 | int ie_len = 0, err; |
6090 | u16 reason_code; | 6096 | u16 reason_code; |
6091 | bool local_state_change; | 6097 | bool local_state_change; |
6092 | 6098 | ||
@@ -6121,8 +6127,11 @@ static int nl80211_deauthenticate(struct sk_buff *skb, struct genl_info *info) | |||
6121 | 6127 | ||
6122 | local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE]; | 6128 | local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE]; |
6123 | 6129 | ||
6124 | return cfg80211_mlme_deauth(rdev, dev, bssid, ie, ie_len, reason_code, | 6130 | wdev_lock(dev->ieee80211_ptr); |
6125 | local_state_change); | 6131 | err = cfg80211_mlme_deauth(rdev, dev, bssid, ie, ie_len, reason_code, |
6132 | local_state_change); | ||
6133 | wdev_unlock(dev->ieee80211_ptr); | ||
6134 | return err; | ||
6126 | } | 6135 | } |
6127 | 6136 | ||
6128 | static int nl80211_disassociate(struct sk_buff *skb, struct genl_info *info) | 6137 | static int nl80211_disassociate(struct sk_buff *skb, struct genl_info *info) |
@@ -6130,7 +6139,7 @@ static int nl80211_disassociate(struct sk_buff *skb, struct genl_info *info) | |||
6130 | struct cfg80211_registered_device *rdev = info->user_ptr[0]; | 6139 | struct cfg80211_registered_device *rdev = info->user_ptr[0]; |
6131 | struct net_device *dev = info->user_ptr[1]; | 6140 | struct net_device *dev = info->user_ptr[1]; |
6132 | const u8 *ie = NULL, *bssid; | 6141 | const u8 *ie = NULL, *bssid; |
6133 | int ie_len = 0; | 6142 | int ie_len = 0, err; |
6134 | u16 reason_code; | 6143 | u16 reason_code; |
6135 | bool local_state_change; | 6144 | bool local_state_change; |
6136 | 6145 | ||
@@ -6165,8 +6174,11 @@ static int nl80211_disassociate(struct sk_buff *skb, struct genl_info *info) | |||
6165 | 6174 | ||
6166 | local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE]; | 6175 | local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE]; |
6167 | 6176 | ||
6168 | return cfg80211_mlme_disassoc(rdev, dev, bssid, ie, ie_len, reason_code, | 6177 | wdev_lock(dev->ieee80211_ptr); |
6169 | local_state_change); | 6178 | err = cfg80211_mlme_disassoc(rdev, dev, bssid, ie, ie_len, reason_code, |
6179 | local_state_change); | ||
6180 | wdev_unlock(dev->ieee80211_ptr); | ||
6181 | return err; | ||
6170 | } | 6182 | } |
6171 | 6183 | ||
6172 | static bool | 6184 | static bool |
diff --git a/net/wireless/sme.c b/net/wireless/sme.c index 4dbf31407a56..31d67add7424 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c | |||
@@ -169,13 +169,13 @@ static int cfg80211_conn_do_work(struct wireless_dev *wdev) | |||
169 | case CFG80211_CONN_AUTHENTICATE_NEXT: | 169 | case CFG80211_CONN_AUTHENTICATE_NEXT: |
170 | BUG_ON(!rdev->ops->auth); | 170 | BUG_ON(!rdev->ops->auth); |
171 | wdev->conn->state = CFG80211_CONN_AUTHENTICATING; | 171 | wdev->conn->state = CFG80211_CONN_AUTHENTICATING; |
172 | return __cfg80211_mlme_auth(rdev, wdev->netdev, | 172 | return cfg80211_mlme_auth(rdev, wdev->netdev, |
173 | params->channel, params->auth_type, | 173 | params->channel, params->auth_type, |
174 | params->bssid, | 174 | params->bssid, |
175 | params->ssid, params->ssid_len, | 175 | params->ssid, params->ssid_len, |
176 | NULL, 0, | 176 | NULL, 0, |
177 | params->key, params->key_len, | 177 | params->key, params->key_len, |
178 | params->key_idx, NULL, 0); | 178 | params->key_idx, NULL, 0); |
179 | case CFG80211_CONN_ASSOCIATE_NEXT: | 179 | case CFG80211_CONN_ASSOCIATE_NEXT: |
180 | BUG_ON(!rdev->ops->assoc); | 180 | BUG_ON(!rdev->ops->assoc); |
181 | wdev->conn->state = CFG80211_CONN_ASSOCIATING; | 181 | wdev->conn->state = CFG80211_CONN_ASSOCIATING; |
@@ -191,19 +191,19 @@ static int cfg80211_conn_do_work(struct wireless_dev *wdev) | |||
191 | req.vht_capa = params->vht_capa; | 191 | req.vht_capa = params->vht_capa; |
192 | req.vht_capa_mask = params->vht_capa_mask; | 192 | req.vht_capa_mask = params->vht_capa_mask; |
193 | 193 | ||
194 | err = __cfg80211_mlme_assoc(rdev, wdev->netdev, params->channel, | 194 | err = cfg80211_mlme_assoc(rdev, wdev->netdev, params->channel, |
195 | params->bssid, params->ssid, | 195 | params->bssid, params->ssid, |
196 | params->ssid_len, &req); | 196 | params->ssid_len, &req); |
197 | if (err) | 197 | if (err) |
198 | __cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, | 198 | cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, |
199 | NULL, 0, | 199 | NULL, 0, |
200 | WLAN_REASON_DEAUTH_LEAVING, | 200 | WLAN_REASON_DEAUTH_LEAVING, |
201 | false); | 201 | false); |
202 | return err; | 202 | return err; |
203 | case CFG80211_CONN_DEAUTH_ASSOC_FAIL: | 203 | case CFG80211_CONN_DEAUTH_ASSOC_FAIL: |
204 | __cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, | 204 | cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, |
205 | NULL, 0, | 205 | NULL, 0, |
206 | WLAN_REASON_DEAUTH_LEAVING, false); | 206 | WLAN_REASON_DEAUTH_LEAVING, false); |
207 | /* return an error so that we call __cfg80211_connect_result() */ | 207 | /* return an error so that we call __cfg80211_connect_result() */ |
208 | return -EINVAL; | 208 | return -EINVAL; |
209 | default: | 209 | default: |
@@ -961,7 +961,7 @@ int __cfg80211_disconnect(struct cfg80211_registered_device *rdev, | |||
961 | } | 961 | } |
962 | 962 | ||
963 | /* wdev->conn->params.bssid must be set if > SCANNING */ | 963 | /* wdev->conn->params.bssid must be set if > SCANNING */ |
964 | err = __cfg80211_mlme_deauth(rdev, dev, | 964 | err = cfg80211_mlme_deauth(rdev, dev, |
965 | wdev->conn->params.bssid, | 965 | wdev->conn->params.bssid, |
966 | NULL, 0, reason, false); | 966 | NULL, 0, reason, false); |
967 | if (err) | 967 | if (err) |
@@ -1018,6 +1018,6 @@ void cfg80211_sme_disassoc(struct net_device *dev, | |||
1018 | 1018 | ||
1019 | memcpy(bssid, bss->pub.bssid, ETH_ALEN); | 1019 | memcpy(bssid, bss->pub.bssid, ETH_ALEN); |
1020 | 1020 | ||
1021 | __cfg80211_mlme_deauth(rdev, dev, bssid, NULL, 0, | 1021 | cfg80211_mlme_deauth(rdev, dev, bssid, NULL, 0, |
1022 | WLAN_REASON_DEAUTH_LEAVING, false); | 1022 | WLAN_REASON_DEAUTH_LEAVING, false); |
1023 | } | 1023 | } |