2 * This is the linux wireless configuration interface.
4 * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
8 #include <linux/module.h>
10 #include <linux/list.h>
11 #include <linux/nl80211.h>
12 #include <linux/debugfs.h>
13 #include <linux/notifier.h>
14 #include <linux/device.h>
15 #include <linux/etherdevice.h>
16 #include <linux/rtnetlink.h>
17 #include <linux/sched.h>
18 #include <net/genetlink.h>
19 #include <net/cfg80211.h>
24 #include "wext-compat.h"
27 /* name for sysfs, %d is appended */
28 #define PHY_NAME "phy"
30 MODULE_AUTHOR("Johannes Berg");
31 MODULE_LICENSE("GPL");
32 MODULE_DESCRIPTION("wireless configuration support");
34 /* RCU-protected (and cfg80211_mutex for writers) */
35 LIST_HEAD(cfg80211_rdev_list
);
36 int cfg80211_rdev_list_generation
;
38 DEFINE_MUTEX(cfg80211_mutex
);
41 static struct dentry
*ieee80211_debugfs_dir
;
43 /* for the cleanup, scan and event works */
44 struct workqueue_struct
*cfg80211_wq
;
46 /* requires cfg80211_mutex to be held! */
47 struct cfg80211_registered_device
*cfg80211_rdev_by_wiphy_idx(int wiphy_idx
)
49 struct cfg80211_registered_device
*result
= NULL
, *rdev
;
51 if (!wiphy_idx_valid(wiphy_idx
))
54 assert_cfg80211_lock();
56 list_for_each_entry(rdev
, &cfg80211_rdev_list
, list
) {
57 if (rdev
->wiphy_idx
== wiphy_idx
) {
66 int get_wiphy_idx(struct wiphy
*wiphy
)
68 struct cfg80211_registered_device
*rdev
;
70 return WIPHY_IDX_STALE
;
71 rdev
= wiphy_to_dev(wiphy
);
72 return rdev
->wiphy_idx
;
75 /* requires cfg80211_rdev_mutex to be held! */
76 struct wiphy
*wiphy_idx_to_wiphy(int wiphy_idx
)
78 struct cfg80211_registered_device
*rdev
;
80 if (!wiphy_idx_valid(wiphy_idx
))
83 assert_cfg80211_lock();
85 rdev
= cfg80211_rdev_by_wiphy_idx(wiphy_idx
);
91 /* requires cfg80211_mutex to be held! */
92 struct cfg80211_registered_device
*
93 __cfg80211_rdev_from_info(struct genl_info
*info
)
96 struct cfg80211_registered_device
*bywiphyidx
= NULL
, *byifidx
= NULL
;
97 struct net_device
*dev
;
100 assert_cfg80211_lock();
102 if (info
->attrs
[NL80211_ATTR_WIPHY
]) {
103 bywiphyidx
= cfg80211_rdev_by_wiphy_idx(
104 nla_get_u32(info
->attrs
[NL80211_ATTR_WIPHY
]));
108 if (info
->attrs
[NL80211_ATTR_IFINDEX
]) {
109 ifindex
= nla_get_u32(info
->attrs
[NL80211_ATTR_IFINDEX
]);
110 dev
= dev_get_by_index(genl_info_net(info
), ifindex
);
112 if (dev
->ieee80211_ptr
)
114 wiphy_to_dev(dev
->ieee80211_ptr
->wiphy
);
120 if (bywiphyidx
&& byifidx
) {
121 if (bywiphyidx
!= byifidx
)
122 return ERR_PTR(-EINVAL
);
124 return bywiphyidx
; /* == byifidx */
135 struct cfg80211_registered_device
*
136 cfg80211_get_dev_from_info(struct genl_info
*info
)
138 struct cfg80211_registered_device
*rdev
;
140 mutex_lock(&cfg80211_mutex
);
141 rdev
= __cfg80211_rdev_from_info(info
);
143 /* if it is not an error we grab the lock on
144 * it to assure it won't be going away while
145 * we operate on it */
147 mutex_lock(&rdev
->mtx
);
149 mutex_unlock(&cfg80211_mutex
);
154 struct cfg80211_registered_device
*
155 cfg80211_get_dev_from_ifindex(struct net
*net
, int ifindex
)
157 struct cfg80211_registered_device
*rdev
= ERR_PTR(-ENODEV
);
158 struct net_device
*dev
;
160 mutex_lock(&cfg80211_mutex
);
161 dev
= dev_get_by_index(net
, ifindex
);
164 if (dev
->ieee80211_ptr
) {
165 rdev
= wiphy_to_dev(dev
->ieee80211_ptr
->wiphy
);
166 mutex_lock(&rdev
->mtx
);
168 rdev
= ERR_PTR(-ENODEV
);
171 mutex_unlock(&cfg80211_mutex
);
175 /* requires cfg80211_mutex to be held */
176 int cfg80211_dev_rename(struct cfg80211_registered_device
*rdev
,
179 struct cfg80211_registered_device
*rdev2
;
180 int wiphy_idx
, taken
= -1, result
, digits
;
182 assert_cfg80211_lock();
184 /* prohibit calling the thing phy%d when %d is not its number */
185 sscanf(newname
, PHY_NAME
"%d%n", &wiphy_idx
, &taken
);
186 if (taken
== strlen(newname
) && wiphy_idx
!= rdev
->wiphy_idx
) {
187 /* count number of places needed to print wiphy_idx */
189 while (wiphy_idx
/= 10)
192 * deny the name if it is phy<idx> where <idx> is printed
193 * without leading zeroes. taken == strlen(newname) here
195 if (taken
== strlen(PHY_NAME
) + digits
)
200 /* Ignore nop renames */
201 if (strcmp(newname
, dev_name(&rdev
->wiphy
.dev
)) == 0)
204 /* Ensure another device does not already have this name. */
205 list_for_each_entry(rdev2
, &cfg80211_rdev_list
, list
)
206 if (strcmp(newname
, dev_name(&rdev2
->wiphy
.dev
)) == 0)
209 result
= device_rename(&rdev
->wiphy
.dev
, newname
);
213 if (rdev
->wiphy
.debugfsdir
&&
214 !debugfs_rename(rdev
->wiphy
.debugfsdir
->d_parent
,
215 rdev
->wiphy
.debugfsdir
,
216 rdev
->wiphy
.debugfsdir
->d_parent
,
218 printk(KERN_ERR
"cfg80211: failed to rename debugfs dir to %s!\n",
221 nl80211_notify_dev_rename(rdev
);
226 int cfg80211_switch_netns(struct cfg80211_registered_device
*rdev
,
229 struct wireless_dev
*wdev
;
232 if (!(rdev
->wiphy
.flags
& WIPHY_FLAG_NETNS_OK
))
235 list_for_each_entry(wdev
, &rdev
->netdev_list
, list
) {
236 wdev
->netdev
->features
&= ~NETIF_F_NETNS_LOCAL
;
237 err
= dev_change_net_namespace(wdev
->netdev
, net
, "wlan%d");
240 wdev
->netdev
->features
|= NETIF_F_NETNS_LOCAL
;
244 /* failed -- clean up to old netns */
245 net
= wiphy_net(&rdev
->wiphy
);
247 list_for_each_entry_continue_reverse(wdev
, &rdev
->netdev_list
,
249 wdev
->netdev
->features
&= ~NETIF_F_NETNS_LOCAL
;
250 err
= dev_change_net_namespace(wdev
->netdev
, net
,
253 wdev
->netdev
->features
|= NETIF_F_NETNS_LOCAL
;
257 wiphy_net_set(&rdev
->wiphy
, net
);
262 static void cfg80211_rfkill_poll(struct rfkill
*rfkill
, void *data
)
264 struct cfg80211_registered_device
*rdev
= data
;
266 rdev
->ops
->rfkill_poll(&rdev
->wiphy
);
269 static int cfg80211_rfkill_set_block(void *data
, bool blocked
)
271 struct cfg80211_registered_device
*rdev
= data
;
272 struct wireless_dev
*wdev
;
278 mutex_lock(&rdev
->devlist_mtx
);
280 list_for_each_entry(wdev
, &rdev
->netdev_list
, list
)
281 dev_close(wdev
->netdev
);
283 mutex_unlock(&rdev
->devlist_mtx
);
289 static void cfg80211_rfkill_sync_work(struct work_struct
*work
)
291 struct cfg80211_registered_device
*rdev
;
293 rdev
= container_of(work
, struct cfg80211_registered_device
, rfkill_sync
);
294 cfg80211_rfkill_set_block(rdev
, rfkill_blocked(rdev
->rfkill
));
297 static void cfg80211_event_work(struct work_struct
*work
)
299 struct cfg80211_registered_device
*rdev
;
301 rdev
= container_of(work
, struct cfg80211_registered_device
,
305 cfg80211_lock_rdev(rdev
);
307 cfg80211_process_rdev_events(rdev
);
308 cfg80211_unlock_rdev(rdev
);
312 /* exported functions */
314 struct wiphy
*wiphy_new(const struct cfg80211_ops
*ops
, int sizeof_priv
)
316 static int wiphy_counter
;
318 struct cfg80211_registered_device
*rdev
;
321 WARN_ON(ops
->add_key
&& (!ops
->del_key
|| !ops
->set_default_key
));
322 WARN_ON(ops
->auth
&& (!ops
->assoc
|| !ops
->deauth
|| !ops
->disassoc
));
323 WARN_ON(ops
->connect
&& !ops
->disconnect
);
324 WARN_ON(ops
->join_ibss
&& !ops
->leave_ibss
);
325 WARN_ON(ops
->add_virtual_intf
&& !ops
->del_virtual_intf
);
326 WARN_ON(ops
->add_station
&& !ops
->del_station
);
327 WARN_ON(ops
->add_mpath
&& !ops
->del_mpath
);
329 alloc_size
= sizeof(*rdev
) + sizeof_priv
;
331 rdev
= kzalloc(alloc_size
, GFP_KERNEL
);
337 mutex_lock(&cfg80211_mutex
);
339 rdev
->wiphy_idx
= wiphy_counter
++;
341 if (unlikely(!wiphy_idx_valid(rdev
->wiphy_idx
))) {
343 mutex_unlock(&cfg80211_mutex
);
349 mutex_unlock(&cfg80211_mutex
);
351 /* give it a proper name */
352 dev_set_name(&rdev
->wiphy
.dev
, PHY_NAME
"%d", rdev
->wiphy_idx
);
354 mutex_init(&rdev
->mtx
);
355 mutex_init(&rdev
->devlist_mtx
);
356 INIT_LIST_HEAD(&rdev
->netdev_list
);
357 spin_lock_init(&rdev
->bss_lock
);
358 INIT_LIST_HEAD(&rdev
->bss_list
);
359 INIT_WORK(&rdev
->scan_done_wk
, __cfg80211_scan_done
);
361 #ifdef CONFIG_CFG80211_WEXT
362 rdev
->wiphy
.wext
= &cfg80211_wext_handler
;
365 device_initialize(&rdev
->wiphy
.dev
);
366 rdev
->wiphy
.dev
.class = &ieee80211_class
;
367 rdev
->wiphy
.dev
.platform_data
= rdev
;
369 #ifdef CONFIG_CFG80211_DEFAULT_PS
370 rdev
->wiphy
.flags
|= WIPHY_FLAG_PS_ON_BY_DEFAULT
;
373 wiphy_net_set(&rdev
->wiphy
, &init_net
);
375 rdev
->rfkill_ops
.set_block
= cfg80211_rfkill_set_block
;
376 rdev
->rfkill
= rfkill_alloc(dev_name(&rdev
->wiphy
.dev
),
377 &rdev
->wiphy
.dev
, RFKILL_TYPE_WLAN
,
378 &rdev
->rfkill_ops
, rdev
);
385 INIT_WORK(&rdev
->rfkill_sync
, cfg80211_rfkill_sync_work
);
386 INIT_WORK(&rdev
->conn_work
, cfg80211_conn_work
);
387 INIT_WORK(&rdev
->event_work
, cfg80211_event_work
);
389 init_waitqueue_head(&rdev
->dev_wait
);
392 * Initialize wiphy parameters to IEEE 802.11 MIB default values.
393 * Fragmentation and RTS threshold are disabled by default with the
396 rdev
->wiphy
.retry_short
= 7;
397 rdev
->wiphy
.retry_long
= 4;
398 rdev
->wiphy
.frag_threshold
= (u32
) -1;
399 rdev
->wiphy
.rts_threshold
= (u32
) -1;
400 rdev
->wiphy
.coverage_class
= 0;
404 EXPORT_SYMBOL(wiphy_new
);
406 int wiphy_register(struct wiphy
*wiphy
)
408 struct cfg80211_registered_device
*rdev
= wiphy_to_dev(wiphy
);
410 enum ieee80211_band band
;
411 struct ieee80211_supported_band
*sband
;
412 bool have_band
= false;
414 u16 ifmodes
= wiphy
->interface_modes
;
416 if (WARN_ON(wiphy
->addresses
&& !wiphy
->n_addresses
))
419 if (WARN_ON(wiphy
->addresses
&&
420 !is_zero_ether_addr(wiphy
->perm_addr
) &&
421 memcmp(wiphy
->perm_addr
, wiphy
->addresses
[0].addr
,
425 if (wiphy
->addresses
)
426 memcpy(wiphy
->perm_addr
, wiphy
->addresses
[0].addr
, ETH_ALEN
);
428 /* sanity check ifmodes */
430 ifmodes
&= ((1 << __NL80211_IFTYPE_AFTER_LAST
) - 1) & ~1;
431 if (WARN_ON(ifmodes
!= wiphy
->interface_modes
))
432 wiphy
->interface_modes
= ifmodes
;
434 /* sanity check supported bands/channels */
435 for (band
= 0; band
< IEEE80211_NUM_BANDS
; band
++) {
436 sband
= wiphy
->bands
[band
];
442 if (WARN_ON(!sband
->n_channels
|| !sband
->n_bitrates
))
446 * Since we use a u32 for rate bitmaps in
447 * ieee80211_get_response_rate, we cannot
448 * have more than 32 legacy rates.
450 if (WARN_ON(sband
->n_bitrates
> 32))
453 for (i
= 0; i
< sband
->n_channels
; i
++) {
454 sband
->channels
[i
].orig_flags
=
455 sband
->channels
[i
].flags
;
456 sband
->channels
[i
].orig_mag
=
457 sband
->channels
[i
].max_antenna_gain
;
458 sband
->channels
[i
].orig_mpwr
=
459 sband
->channels
[i
].max_power
;
460 sband
->channels
[i
].band
= band
;
471 /* check and set up bitrates */
472 ieee80211_set_bitrate_flags(wiphy
);
474 res
= device_add(&rdev
->wiphy
.dev
);
478 res
= rfkill_register(rdev
->rfkill
);
482 mutex_lock(&cfg80211_mutex
);
484 /* set up regulatory info */
485 wiphy_update_regulatory(wiphy
, NL80211_REGDOM_SET_BY_CORE
);
487 list_add_rcu(&rdev
->list
, &cfg80211_rdev_list
);
488 cfg80211_rdev_list_generation
++;
490 mutex_unlock(&cfg80211_mutex
);
493 rdev
->wiphy
.debugfsdir
=
494 debugfs_create_dir(wiphy_name(&rdev
->wiphy
),
495 ieee80211_debugfs_dir
);
496 if (IS_ERR(rdev
->wiphy
.debugfsdir
))
497 rdev
->wiphy
.debugfsdir
= NULL
;
499 if (wiphy
->flags
& WIPHY_FLAG_CUSTOM_REGULATORY
) {
500 struct regulatory_request request
;
502 request
.wiphy_idx
= get_wiphy_idx(wiphy
);
503 request
.initiator
= NL80211_REGDOM_SET_BY_DRIVER
;
504 request
.alpha2
[0] = '9';
505 request
.alpha2
[1] = '9';
507 nl80211_send_reg_change_event(&request
);
510 cfg80211_debugfs_rdev_add(rdev
);
515 device_del(&rdev
->wiphy
.dev
);
518 EXPORT_SYMBOL(wiphy_register
);
520 void wiphy_rfkill_start_polling(struct wiphy
*wiphy
)
522 struct cfg80211_registered_device
*rdev
= wiphy_to_dev(wiphy
);
524 if (!rdev
->ops
->rfkill_poll
)
526 rdev
->rfkill_ops
.poll
= cfg80211_rfkill_poll
;
527 rfkill_resume_polling(rdev
->rfkill
);
529 EXPORT_SYMBOL(wiphy_rfkill_start_polling
);
531 void wiphy_rfkill_stop_polling(struct wiphy
*wiphy
)
533 struct cfg80211_registered_device
*rdev
= wiphy_to_dev(wiphy
);
535 rfkill_pause_polling(rdev
->rfkill
);
537 EXPORT_SYMBOL(wiphy_rfkill_stop_polling
);
539 void wiphy_unregister(struct wiphy
*wiphy
)
541 struct cfg80211_registered_device
*rdev
= wiphy_to_dev(wiphy
);
543 rfkill_unregister(rdev
->rfkill
);
545 /* protect the device list */
546 mutex_lock(&cfg80211_mutex
);
548 wait_event(rdev
->dev_wait
, ({
550 mutex_lock(&rdev
->devlist_mtx
);
551 __count
= rdev
->opencount
;
552 mutex_unlock(&rdev
->devlist_mtx
);
555 mutex_lock(&rdev
->devlist_mtx
);
556 BUG_ON(!list_empty(&rdev
->netdev_list
));
557 mutex_unlock(&rdev
->devlist_mtx
);
560 * First remove the hardware from everywhere, this makes
561 * it impossible to find from userspace.
563 debugfs_remove_recursive(rdev
->wiphy
.debugfsdir
);
564 list_del_rcu(&rdev
->list
);
568 * Try to grab rdev->mtx. If a command is still in progress,
569 * hopefully the driver will refuse it since it's tearing
570 * down the device already. We wait for this command to complete
571 * before unlinking the item from the list.
572 * Note: as codified by the BUG_ON above we cannot get here if
573 * a virtual interface is still present. Hence, we can only get
574 * to lock contention here if userspace issues a command that
575 * identified the hardware by wiphy index.
577 cfg80211_lock_rdev(rdev
);
579 cfg80211_unlock_rdev(rdev
);
581 /* If this device got a regulatory hint tell core its
582 * free to listen now to a new shiny device regulatory hint */
583 reg_device_remove(wiphy
);
585 cfg80211_rdev_list_generation
++;
586 device_del(&rdev
->wiphy
.dev
);
588 mutex_unlock(&cfg80211_mutex
);
590 flush_work(&rdev
->scan_done_wk
);
591 cancel_work_sync(&rdev
->conn_work
);
592 flush_work(&rdev
->event_work
);
594 EXPORT_SYMBOL(wiphy_unregister
);
596 void cfg80211_dev_free(struct cfg80211_registered_device
*rdev
)
598 struct cfg80211_internal_bss
*scan
, *tmp
;
599 rfkill_destroy(rdev
->rfkill
);
600 mutex_destroy(&rdev
->mtx
);
601 mutex_destroy(&rdev
->devlist_mtx
);
602 list_for_each_entry_safe(scan
, tmp
, &rdev
->bss_list
, list
)
603 cfg80211_put_bss(&scan
->pub
);
607 void wiphy_free(struct wiphy
*wiphy
)
609 put_device(&wiphy
->dev
);
611 EXPORT_SYMBOL(wiphy_free
);
613 void wiphy_rfkill_set_hw_state(struct wiphy
*wiphy
, bool blocked
)
615 struct cfg80211_registered_device
*rdev
= wiphy_to_dev(wiphy
);
617 if (rfkill_set_hw_state(rdev
->rfkill
, blocked
))
618 schedule_work(&rdev
->rfkill_sync
);
620 EXPORT_SYMBOL(wiphy_rfkill_set_hw_state
);
622 static void wdev_cleanup_work(struct work_struct
*work
)
624 struct wireless_dev
*wdev
;
625 struct cfg80211_registered_device
*rdev
;
627 wdev
= container_of(work
, struct wireless_dev
, cleanup_work
);
628 rdev
= wiphy_to_dev(wdev
->wiphy
);
630 cfg80211_lock_rdev(rdev
);
632 if (WARN_ON(rdev
->scan_req
&& rdev
->scan_req
->dev
== wdev
->netdev
)) {
633 rdev
->scan_req
->aborted
= true;
634 ___cfg80211_scan_done(rdev
, true);
637 cfg80211_unlock_rdev(rdev
);
639 mutex_lock(&rdev
->devlist_mtx
);
641 mutex_unlock(&rdev
->devlist_mtx
);
642 wake_up(&rdev
->dev_wait
);
644 dev_put(wdev
->netdev
);
647 static struct device_type wiphy_type
= {
651 static int cfg80211_netdev_notifier_call(struct notifier_block
* nb
,
655 struct net_device
*dev
= ndev
;
656 struct wireless_dev
*wdev
= dev
->ieee80211_ptr
;
657 struct cfg80211_registered_device
*rdev
;
662 rdev
= wiphy_to_dev(wdev
->wiphy
);
664 WARN_ON(wdev
->iftype
== NL80211_IFTYPE_UNSPECIFIED
);
667 case NETDEV_POST_INIT
:
668 SET_NETDEV_DEVTYPE(dev
, &wiphy_type
);
670 case NETDEV_REGISTER
:
672 * NB: cannot take rdev->mtx here because this may be
673 * called within code protected by it when interfaces
674 * are added with nl80211.
676 mutex_init(&wdev
->mtx
);
677 INIT_WORK(&wdev
->cleanup_work
, wdev_cleanup_work
);
678 INIT_LIST_HEAD(&wdev
->event_list
);
679 spin_lock_init(&wdev
->event_lock
);
680 mutex_lock(&rdev
->devlist_mtx
);
681 list_add_rcu(&wdev
->list
, &rdev
->netdev_list
);
682 rdev
->devlist_generation
++;
683 /* can only change netns with wiphy */
684 dev
->features
|= NETIF_F_NETNS_LOCAL
;
686 if (sysfs_create_link(&dev
->dev
.kobj
, &rdev
->wiphy
.dev
.kobj
,
688 printk(KERN_ERR
"wireless: failed to add phy80211 "
689 "symlink to netdev!\n");
692 wdev
->sme_state
= CFG80211_SME_IDLE
;
693 mutex_unlock(&rdev
->devlist_mtx
);
694 #ifdef CONFIG_CFG80211_WEXT
695 wdev
->wext
.default_key
= -1;
696 wdev
->wext
.default_mgmt_key
= -1;
697 wdev
->wext
.connect
.auth_type
= NL80211_AUTHTYPE_AUTOMATIC
;
698 if (wdev
->wiphy
->flags
& WIPHY_FLAG_PS_ON_BY_DEFAULT
)
699 wdev
->wext
.ps
= true;
701 wdev
->wext
.ps
= false;
702 wdev
->wext
.ps_timeout
= 100;
703 if (rdev
->ops
->set_power_mgmt
)
704 if (rdev
->ops
->set_power_mgmt(wdev
->wiphy
, dev
,
706 wdev
->wext
.ps_timeout
)) {
707 /* assume this means it's off */
708 wdev
->wext
.ps
= false;
711 if (!dev
->ethtool_ops
)
712 dev
->ethtool_ops
= &cfg80211_ethtool_ops
;
714 if ((wdev
->iftype
== NL80211_IFTYPE_STATION
||
715 wdev
->iftype
== NL80211_IFTYPE_ADHOC
) && !wdev
->use_4addr
)
716 dev
->priv_flags
|= IFF_DONT_BRIDGE
;
718 case NETDEV_GOING_DOWN
:
719 switch (wdev
->iftype
) {
720 case NL80211_IFTYPE_ADHOC
:
721 cfg80211_leave_ibss(rdev
, dev
, true);
723 case NL80211_IFTYPE_STATION
:
725 #ifdef CONFIG_CFG80211_WEXT
726 kfree(wdev
->wext
.ie
);
727 wdev
->wext
.ie
= NULL
;
728 wdev
->wext
.ie_len
= 0;
729 wdev
->wext
.connect
.auth_type
= NL80211_AUTHTYPE_AUTOMATIC
;
731 __cfg80211_disconnect(rdev
, dev
,
732 WLAN_REASON_DEAUTH_LEAVING
, true);
733 cfg80211_mlme_down(rdev
, dev
);
742 queue_work(cfg80211_wq
, &wdev
->cleanup_work
);
746 * If we have a really quick DOWN/UP succession we may
747 * have this work still pending ... cancel it and see
748 * if it was pending, in which case we need to account
749 * for some of the work it would have done.
751 if (cancel_work_sync(&wdev
->cleanup_work
)) {
752 mutex_lock(&rdev
->devlist_mtx
);
754 mutex_unlock(&rdev
->devlist_mtx
);
757 cfg80211_lock_rdev(rdev
);
758 mutex_lock(&rdev
->devlist_mtx
);
759 #ifdef CONFIG_CFG80211_WEXT
761 switch (wdev
->iftype
) {
762 case NL80211_IFTYPE_ADHOC
:
763 cfg80211_ibss_wext_join(rdev
, wdev
);
765 case NL80211_IFTYPE_STATION
:
766 cfg80211_mgd_wext_connect(rdev
, wdev
);
774 mutex_unlock(&rdev
->devlist_mtx
);
775 cfg80211_unlock_rdev(rdev
);
777 case NETDEV_UNREGISTER
:
779 * NB: cannot take rdev->mtx here because this may be
780 * called within code protected by it when interfaces
781 * are removed with nl80211.
783 mutex_lock(&rdev
->devlist_mtx
);
785 * It is possible to get NETDEV_UNREGISTER
786 * multiple times. To detect that, check
787 * that the interface is still on the list
788 * of registered interfaces, and only then
789 * remove and clean it up.
791 if (!list_empty(&wdev
->list
)) {
792 sysfs_remove_link(&dev
->dev
.kobj
, "phy80211");
793 list_del_rcu(&wdev
->list
);
794 rdev
->devlist_generation
++;
795 #ifdef CONFIG_CFG80211_WEXT
796 kfree(wdev
->wext
.keys
);
799 mutex_unlock(&rdev
->devlist_mtx
);
801 * synchronise (so that we won't find this netdev
802 * from other code any more) and then clear the list
803 * head so that the above code can safely check for
804 * !list_empty() to avoid double-cleanup.
807 INIT_LIST_HEAD(&wdev
->list
);
810 if (!(wdev
->wiphy
->interface_modes
& BIT(wdev
->iftype
)))
811 return notifier_from_errno(-EOPNOTSUPP
);
812 if (rfkill_blocked(rdev
->rfkill
))
813 return notifier_from_errno(-ERFKILL
);
820 static struct notifier_block cfg80211_netdev_notifier
= {
821 .notifier_call
= cfg80211_netdev_notifier_call
,
824 static void __net_exit
cfg80211_pernet_exit(struct net
*net
)
826 struct cfg80211_registered_device
*rdev
;
829 mutex_lock(&cfg80211_mutex
);
830 list_for_each_entry(rdev
, &cfg80211_rdev_list
, list
) {
831 if (net_eq(wiphy_net(&rdev
->wiphy
), net
))
832 WARN_ON(cfg80211_switch_netns(rdev
, &init_net
));
834 mutex_unlock(&cfg80211_mutex
);
838 static struct pernet_operations cfg80211_pernet_ops
= {
839 .exit
= cfg80211_pernet_exit
,
842 static int __init
cfg80211_init(void)
846 err
= register_pernet_device(&cfg80211_pernet_ops
);
848 goto out_fail_pernet
;
850 err
= wiphy_sysfs_init();
854 err
= register_netdevice_notifier(&cfg80211_netdev_notifier
);
856 goto out_fail_notifier
;
858 err
= nl80211_init();
860 goto out_fail_nl80211
;
862 ieee80211_debugfs_dir
= debugfs_create_dir("ieee80211", NULL
);
864 err
= regulatory_init();
868 cfg80211_wq
= create_singlethread_workqueue("cfg80211");
877 debugfs_remove(ieee80211_debugfs_dir
);
879 unregister_netdevice_notifier(&cfg80211_netdev_notifier
);
883 unregister_pernet_device(&cfg80211_pernet_ops
);
887 subsys_initcall(cfg80211_init
);
889 static void cfg80211_exit(void)
891 debugfs_remove(ieee80211_debugfs_dir
);
893 unregister_netdevice_notifier(&cfg80211_netdev_notifier
);
896 unregister_pernet_device(&cfg80211_pernet_ops
);
897 destroy_workqueue(cfg80211_wq
);
899 module_exit(cfg80211_exit
);