1/*
2 * Interface handling
3 *
4 * Copyright 2002-2005, Instant802 Networks, Inc.
5 * Copyright 2005-2006, Devicescape Software, Inc.
6 * Copyright (c) 2006 Jiri Benc <jbenc@suse.cz>
7 * Copyright 2008, Johannes Berg <johannes@sipsolutions.net>
8 * Copyright 2013-2014  Intel Mobile Communications GmbH
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 */
14#include <linux/slab.h>
15#include <linux/kernel.h>
16#include <linux/if_arp.h>
17#include <linux/netdevice.h>
18#include <linux/rtnetlink.h>
19#include <net/mac80211.h>
20#include <net/ieee80211_radiotap.h>
21#include "ieee80211_i.h"
22#include "sta_info.h"
23#include "debugfs_netdev.h"
24#include "mesh.h"
25#include "led.h"
26#include "driver-ops.h"
27#include "wme.h"
28#include "rate.h"
29
30/**
31 * DOC: Interface list locking
32 *
33 * The interface list in each struct ieee80211_local is protected
34 * three-fold:
35 *
36 * (1) modifications may only be done under the RTNL
37 * (2) modifications and readers are protected against each other by
38 *     the iflist_mtx.
39 * (3) modifications are done in an RCU manner so atomic readers
40 *     can traverse the list in RCU-safe blocks.
41 *
42 * As a consequence, reads (traversals) of the list can be protected
43 * by either the RTNL, the iflist_mtx or RCU.
44 */
45
46bool __ieee80211_recalc_txpower(struct ieee80211_sub_if_data *sdata)
47{
48	struct ieee80211_chanctx_conf *chanctx_conf;
49	int power;
50
51	rcu_read_lock();
52	chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
53	if (!chanctx_conf) {
54		rcu_read_unlock();
55		return false;
56	}
57
58	power = ieee80211_chandef_max_power(&chanctx_conf->def);
59	rcu_read_unlock();
60
61	if (sdata->user_power_level != IEEE80211_UNSET_POWER_LEVEL)
62		power = min(power, sdata->user_power_level);
63
64	if (sdata->ap_power_level != IEEE80211_UNSET_POWER_LEVEL)
65		power = min(power, sdata->ap_power_level);
66
67	if (power != sdata->vif.bss_conf.txpower) {
68		sdata->vif.bss_conf.txpower = power;
69		ieee80211_hw_config(sdata->local, 0);
70		return true;
71	}
72
73	return false;
74}
75
76void ieee80211_recalc_txpower(struct ieee80211_sub_if_data *sdata,
77			      bool update_bss)
78{
79	if (__ieee80211_recalc_txpower(sdata) ||
80	    (update_bss && ieee80211_sdata_running(sdata)))
81		ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_TXPOWER);
82}
83
84static u32 __ieee80211_idle_off(struct ieee80211_local *local)
85{
86	if (!(local->hw.conf.flags & IEEE80211_CONF_IDLE))
87		return 0;
88
89	local->hw.conf.flags &= ~IEEE80211_CONF_IDLE;
90	return IEEE80211_CONF_CHANGE_IDLE;
91}
92
93static u32 __ieee80211_idle_on(struct ieee80211_local *local)
94{
95	if (local->hw.conf.flags & IEEE80211_CONF_IDLE)
96		return 0;
97
98	ieee80211_flush_queues(local, NULL, false);
99
100	local->hw.conf.flags |= IEEE80211_CONF_IDLE;
101	return IEEE80211_CONF_CHANGE_IDLE;
102}
103
104static u32 __ieee80211_recalc_idle(struct ieee80211_local *local,
105				   bool force_active)
106{
107	bool working, scanning, active;
108	unsigned int led_trig_start = 0, led_trig_stop = 0;
109
110	lockdep_assert_held(&local->mtx);
111
112	active = force_active ||
113		 !list_empty(&local->chanctx_list) ||
114		 local->monitors;
115
116	working = !local->ops->remain_on_channel &&
117		  !list_empty(&local->roc_list);
118
119	scanning = test_bit(SCAN_SW_SCANNING, &local->scanning) ||
120		   test_bit(SCAN_ONCHANNEL_SCANNING, &local->scanning);
121
122	if (working || scanning)
123		led_trig_start |= IEEE80211_TPT_LEDTRIG_FL_WORK;
124	else
125		led_trig_stop |= IEEE80211_TPT_LEDTRIG_FL_WORK;
126
127	if (active)
128		led_trig_start |= IEEE80211_TPT_LEDTRIG_FL_CONNECTED;
129	else
130		led_trig_stop |= IEEE80211_TPT_LEDTRIG_FL_CONNECTED;
131
132	ieee80211_mod_tpt_led_trig(local, led_trig_start, led_trig_stop);
133
134	if (working || scanning || active)
135		return __ieee80211_idle_off(local);
136	return __ieee80211_idle_on(local);
137}
138
139u32 ieee80211_idle_off(struct ieee80211_local *local)
140{
141	return __ieee80211_recalc_idle(local, true);
142}
143
144void ieee80211_recalc_idle(struct ieee80211_local *local)
145{
146	u32 change = __ieee80211_recalc_idle(local, false);
147	if (change)
148		ieee80211_hw_config(local, change);
149}
150
151static int ieee80211_change_mtu(struct net_device *dev, int new_mtu)
152{
153	if (new_mtu < 256 || new_mtu > IEEE80211_MAX_DATA_LEN)
154		return -EINVAL;
155
156	dev->mtu = new_mtu;
157	return 0;
158}
159
160static int ieee80211_verify_mac(struct ieee80211_sub_if_data *sdata, u8 *addr,
161				bool check_dup)
162{
163	struct ieee80211_local *local = sdata->local;
164	struct ieee80211_sub_if_data *iter;
165	u64 new, mask, tmp;
166	u8 *m;
167	int ret = 0;
168
169	if (is_zero_ether_addr(local->hw.wiphy->addr_mask))
170		return 0;
171
172	m = addr;
173	new =	((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) |
174		((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) |
175		((u64)m[4] << 1*8) | ((u64)m[5] << 0*8);
176
177	m = local->hw.wiphy->addr_mask;
178	mask =	((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) |
179		((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) |
180		((u64)m[4] << 1*8) | ((u64)m[5] << 0*8);
181
182	if (!check_dup)
183		return ret;
184
185	mutex_lock(&local->iflist_mtx);
186	list_for_each_entry(iter, &local->interfaces, list) {
187		if (iter == sdata)
188			continue;
189
190		if (iter->vif.type == NL80211_IFTYPE_MONITOR &&
191		    !(iter->u.mntr_flags & MONITOR_FLAG_ACTIVE))
192			continue;
193
194		m = iter->vif.addr;
195		tmp =	((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) |
196			((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) |
197			((u64)m[4] << 1*8) | ((u64)m[5] << 0*8);
198
199		if ((new & ~mask) != (tmp & ~mask)) {
200			ret = -EINVAL;
201			break;
202		}
203	}
204	mutex_unlock(&local->iflist_mtx);
205
206	return ret;
207}
208
209static int ieee80211_change_mac(struct net_device *dev, void *addr)
210{
211	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
212	struct sockaddr *sa = addr;
213	bool check_dup = true;
214	int ret;
215
216	if (ieee80211_sdata_running(sdata))
217		return -EBUSY;
218
219	if (sdata->vif.type == NL80211_IFTYPE_MONITOR &&
220	    !(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE))
221		check_dup = false;
222
223	ret = ieee80211_verify_mac(sdata, sa->sa_data, check_dup);
224	if (ret)
225		return ret;
226
227	ret = eth_mac_addr(dev, sa);
228
229	if (ret == 0)
230		memcpy(sdata->vif.addr, sa->sa_data, ETH_ALEN);
231
232	return ret;
233}
234
235static inline int identical_mac_addr_allowed(int type1, int type2)
236{
237	return type1 == NL80211_IFTYPE_MONITOR ||
238		type2 == NL80211_IFTYPE_MONITOR ||
239		type1 == NL80211_IFTYPE_P2P_DEVICE ||
240		type2 == NL80211_IFTYPE_P2P_DEVICE ||
241		(type1 == NL80211_IFTYPE_AP && type2 == NL80211_IFTYPE_WDS) ||
242		(type1 == NL80211_IFTYPE_WDS &&
243			(type2 == NL80211_IFTYPE_WDS ||
244			 type2 == NL80211_IFTYPE_AP)) ||
245		(type1 == NL80211_IFTYPE_AP && type2 == NL80211_IFTYPE_AP_VLAN) ||
246		(type1 == NL80211_IFTYPE_AP_VLAN &&
247			(type2 == NL80211_IFTYPE_AP ||
248			 type2 == NL80211_IFTYPE_AP_VLAN));
249}
250
251static int ieee80211_check_concurrent_iface(struct ieee80211_sub_if_data *sdata,
252					    enum nl80211_iftype iftype)
253{
254	struct ieee80211_local *local = sdata->local;
255	struct ieee80211_sub_if_data *nsdata;
256	int ret;
257
258	ASSERT_RTNL();
259
260	/* we hold the RTNL here so can safely walk the list */
261	list_for_each_entry(nsdata, &local->interfaces, list) {
262		if (nsdata != sdata && ieee80211_sdata_running(nsdata)) {
263			/*
264			 * Only OCB and monitor mode may coexist
265			 */
266			if ((sdata->vif.type == NL80211_IFTYPE_OCB &&
267			     nsdata->vif.type != NL80211_IFTYPE_MONITOR) ||
268			    (sdata->vif.type != NL80211_IFTYPE_MONITOR &&
269			     nsdata->vif.type == NL80211_IFTYPE_OCB))
270				return -EBUSY;
271
272			/*
273			 * Allow only a single IBSS interface to be up at any
274			 * time. This is restricted because beacon distribution
275			 * cannot work properly if both are in the same IBSS.
276			 *
277			 * To remove this restriction we'd have to disallow them
278			 * from setting the same SSID on different IBSS interfaces
279			 * belonging to the same hardware. Then, however, we're
280			 * faced with having to adopt two different TSF timers...
281			 */
282			if (iftype == NL80211_IFTYPE_ADHOC &&
283			    nsdata->vif.type == NL80211_IFTYPE_ADHOC)
284				return -EBUSY;
285			/*
286			 * will not add another interface while any channel
287			 * switch is active.
288			 */
289			if (nsdata->vif.csa_active)
290				return -EBUSY;
291
292			/*
293			 * The remaining checks are only performed for interfaces
294			 * with the same MAC address.
295			 */
296			if (!ether_addr_equal(sdata->vif.addr,
297					      nsdata->vif.addr))
298				continue;
299
300			/*
301			 * check whether it may have the same address
302			 */
303			if (!identical_mac_addr_allowed(iftype,
304							nsdata->vif.type))
305				return -ENOTUNIQ;
306
307			/*
308			 * can only add VLANs to enabled APs
309			 */
310			if (iftype == NL80211_IFTYPE_AP_VLAN &&
311			    nsdata->vif.type == NL80211_IFTYPE_AP)
312				sdata->bss = &nsdata->u.ap;
313		}
314	}
315
316	mutex_lock(&local->chanctx_mtx);
317	ret = ieee80211_check_combinations(sdata, NULL, 0, 0);
318	mutex_unlock(&local->chanctx_mtx);
319	return ret;
320}
321
322static int ieee80211_check_queues(struct ieee80211_sub_if_data *sdata,
323				  enum nl80211_iftype iftype)
324{
325	int n_queues = sdata->local->hw.queues;
326	int i;
327
328	if (iftype != NL80211_IFTYPE_P2P_DEVICE) {
329		for (i = 0; i < IEEE80211_NUM_ACS; i++) {
330			if (WARN_ON_ONCE(sdata->vif.hw_queue[i] ==
331					 IEEE80211_INVAL_HW_QUEUE))
332				return -EINVAL;
333			if (WARN_ON_ONCE(sdata->vif.hw_queue[i] >=
334					 n_queues))
335				return -EINVAL;
336		}
337	}
338
339	if ((iftype != NL80211_IFTYPE_AP &&
340	     iftype != NL80211_IFTYPE_P2P_GO &&
341	     iftype != NL80211_IFTYPE_MESH_POINT) ||
342	    !ieee80211_hw_check(&sdata->local->hw, QUEUE_CONTROL)) {
343		sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE;
344		return 0;
345	}
346
347	if (WARN_ON_ONCE(sdata->vif.cab_queue == IEEE80211_INVAL_HW_QUEUE))
348		return -EINVAL;
349
350	if (WARN_ON_ONCE(sdata->vif.cab_queue >= n_queues))
351		return -EINVAL;
352
353	return 0;
354}
355
356void ieee80211_adjust_monitor_flags(struct ieee80211_sub_if_data *sdata,
357				    const int offset)
358{
359	struct ieee80211_local *local = sdata->local;
360	u32 flags = sdata->u.mntr_flags;
361
362#define ADJUST(_f, _s)	do {					\
363	if (flags & MONITOR_FLAG_##_f)				\
364		local->fif_##_s += offset;			\
365	} while (0)
366
367	ADJUST(FCSFAIL, fcsfail);
368	ADJUST(PLCPFAIL, plcpfail);
369	ADJUST(CONTROL, control);
370	ADJUST(CONTROL, pspoll);
371	ADJUST(OTHER_BSS, other_bss);
372
373#undef ADJUST
374}
375
376static void ieee80211_set_default_queues(struct ieee80211_sub_if_data *sdata)
377{
378	struct ieee80211_local *local = sdata->local;
379	int i;
380
381	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
382		if (ieee80211_hw_check(&local->hw, QUEUE_CONTROL))
383			sdata->vif.hw_queue[i] = IEEE80211_INVAL_HW_QUEUE;
384		else if (local->hw.queues >= IEEE80211_NUM_ACS)
385			sdata->vif.hw_queue[i] = i;
386		else
387			sdata->vif.hw_queue[i] = 0;
388	}
389	sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE;
390}
391
392int ieee80211_add_virtual_monitor(struct ieee80211_local *local)
393{
394	struct ieee80211_sub_if_data *sdata;
395	int ret;
396
397	if (!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF))
398		return 0;
399
400	ASSERT_RTNL();
401
402	if (local->monitor_sdata)
403		return 0;
404
405	sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size, GFP_KERNEL);
406	if (!sdata)
407		return -ENOMEM;
408
409	/* set up data */
410	sdata->local = local;
411	sdata->vif.type = NL80211_IFTYPE_MONITOR;
412	snprintf(sdata->name, IFNAMSIZ, "%s-monitor",
413		 wiphy_name(local->hw.wiphy));
414	sdata->wdev.iftype = NL80211_IFTYPE_MONITOR;
415
416	sdata->encrypt_headroom = IEEE80211_ENCRYPT_HEADROOM;
417
418	ieee80211_set_default_queues(sdata);
419
420	ret = drv_add_interface(local, sdata);
421	if (WARN_ON(ret)) {
422		/* ok .. stupid driver, it asked for this! */
423		kfree(sdata);
424		return ret;
425	}
426
427	ret = ieee80211_check_queues(sdata, NL80211_IFTYPE_MONITOR);
428	if (ret) {
429		kfree(sdata);
430		return ret;
431	}
432
433	mutex_lock(&local->iflist_mtx);
434	rcu_assign_pointer(local->monitor_sdata, sdata);
435	mutex_unlock(&local->iflist_mtx);
436
437	mutex_lock(&local->mtx);
438	ret = ieee80211_vif_use_channel(sdata, &local->monitor_chandef,
439					IEEE80211_CHANCTX_EXCLUSIVE);
440	mutex_unlock(&local->mtx);
441	if (ret) {
442		mutex_lock(&local->iflist_mtx);
443		RCU_INIT_POINTER(local->monitor_sdata, NULL);
444		mutex_unlock(&local->iflist_mtx);
445		synchronize_net();
446		drv_remove_interface(local, sdata);
447		kfree(sdata);
448		return ret;
449	}
450
451	return 0;
452}
453
454void ieee80211_del_virtual_monitor(struct ieee80211_local *local)
455{
456	struct ieee80211_sub_if_data *sdata;
457
458	if (!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF))
459		return;
460
461	ASSERT_RTNL();
462
463	mutex_lock(&local->iflist_mtx);
464
465	sdata = rcu_dereference_protected(local->monitor_sdata,
466					  lockdep_is_held(&local->iflist_mtx));
467	if (!sdata) {
468		mutex_unlock(&local->iflist_mtx);
469		return;
470	}
471
472	RCU_INIT_POINTER(local->monitor_sdata, NULL);
473	mutex_unlock(&local->iflist_mtx);
474
475	synchronize_net();
476
477	mutex_lock(&local->mtx);
478	ieee80211_vif_release_channel(sdata);
479	mutex_unlock(&local->mtx);
480
481	drv_remove_interface(local, sdata);
482
483	kfree(sdata);
484}
485
486/*
487 * NOTE: Be very careful when changing this function, it must NOT return
488 * an error on interface type changes that have been pre-checked, so most
489 * checks should be in ieee80211_check_concurrent_iface.
490 */
491int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
492{
493	struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
494	struct net_device *dev = wdev->netdev;
495	struct ieee80211_local *local = sdata->local;
496	struct sta_info *sta;
497	u32 changed = 0;
498	int res;
499	u32 hw_reconf_flags = 0;
500
501	switch (sdata->vif.type) {
502	case NL80211_IFTYPE_WDS:
503		if (!is_valid_ether_addr(sdata->u.wds.remote_addr))
504			return -ENOLINK;
505		break;
506	case NL80211_IFTYPE_AP_VLAN: {
507		struct ieee80211_sub_if_data *master;
508
509		if (!sdata->bss)
510			return -ENOLINK;
511
512		mutex_lock(&local->mtx);
513		list_add(&sdata->u.vlan.list, &sdata->bss->vlans);
514		mutex_unlock(&local->mtx);
515
516		master = container_of(sdata->bss,
517				      struct ieee80211_sub_if_data, u.ap);
518		sdata->control_port_protocol =
519			master->control_port_protocol;
520		sdata->control_port_no_encrypt =
521			master->control_port_no_encrypt;
522		sdata->vif.cab_queue = master->vif.cab_queue;
523		memcpy(sdata->vif.hw_queue, master->vif.hw_queue,
524		       sizeof(sdata->vif.hw_queue));
525		sdata->vif.bss_conf.chandef = master->vif.bss_conf.chandef;
526
527		mutex_lock(&local->key_mtx);
528		sdata->crypto_tx_tailroom_needed_cnt +=
529			master->crypto_tx_tailroom_needed_cnt;
530		mutex_unlock(&local->key_mtx);
531
532		break;
533		}
534	case NL80211_IFTYPE_AP:
535		sdata->bss = &sdata->u.ap;
536		break;
537	case NL80211_IFTYPE_MESH_POINT:
538	case NL80211_IFTYPE_STATION:
539	case NL80211_IFTYPE_MONITOR:
540	case NL80211_IFTYPE_ADHOC:
541	case NL80211_IFTYPE_P2P_DEVICE:
542	case NL80211_IFTYPE_OCB:
543		/* no special treatment */
544		break;
545	case NL80211_IFTYPE_UNSPECIFIED:
546	case NUM_NL80211_IFTYPES:
547	case NL80211_IFTYPE_P2P_CLIENT:
548	case NL80211_IFTYPE_P2P_GO:
549		/* cannot happen */
550		WARN_ON(1);
551		break;
552	}
553
554	if (local->open_count == 0) {
555		res = drv_start(local);
556		if (res)
557			goto err_del_bss;
558		/* we're brought up, everything changes */
559		hw_reconf_flags = ~0;
560		ieee80211_led_radio(local, true);
561		ieee80211_mod_tpt_led_trig(local,
562					   IEEE80211_TPT_LEDTRIG_FL_RADIO, 0);
563	}
564
565	/*
566	 * Copy the hopefully now-present MAC address to
567	 * this interface, if it has the special null one.
568	 */
569	if (dev && is_zero_ether_addr(dev->dev_addr)) {
570		memcpy(dev->dev_addr,
571		       local->hw.wiphy->perm_addr,
572		       ETH_ALEN);
573		memcpy(dev->perm_addr, dev->dev_addr, ETH_ALEN);
574
575		if (!is_valid_ether_addr(dev->dev_addr)) {
576			res = -EADDRNOTAVAIL;
577			goto err_stop;
578		}
579	}
580
581	switch (sdata->vif.type) {
582	case NL80211_IFTYPE_AP_VLAN:
583		/* no need to tell driver, but set carrier and chanctx */
584		if (rtnl_dereference(sdata->bss->beacon)) {
585			ieee80211_vif_vlan_copy_chanctx(sdata);
586			netif_carrier_on(dev);
587		} else {
588			netif_carrier_off(dev);
589		}
590		break;
591	case NL80211_IFTYPE_MONITOR:
592		if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) {
593			local->cooked_mntrs++;
594			break;
595		}
596
597		if (sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE) {
598			res = drv_add_interface(local, sdata);
599			if (res)
600				goto err_stop;
601		} else if (local->monitors == 0 && local->open_count == 0) {
602			res = ieee80211_add_virtual_monitor(local);
603			if (res)
604				goto err_stop;
605		}
606
607		/* must be before the call to ieee80211_configure_filter */
608		local->monitors++;
609		if (local->monitors == 1) {
610			local->hw.conf.flags |= IEEE80211_CONF_MONITOR;
611			hw_reconf_flags |= IEEE80211_CONF_CHANGE_MONITOR;
612		}
613
614		ieee80211_adjust_monitor_flags(sdata, 1);
615		ieee80211_configure_filter(local);
616		mutex_lock(&local->mtx);
617		ieee80211_recalc_idle(local);
618		mutex_unlock(&local->mtx);
619
620		netif_carrier_on(dev);
621		break;
622	default:
623		if (coming_up) {
624			ieee80211_del_virtual_monitor(local);
625
626			res = drv_add_interface(local, sdata);
627			if (res)
628				goto err_stop;
629			res = ieee80211_check_queues(sdata,
630				ieee80211_vif_type_p2p(&sdata->vif));
631			if (res)
632				goto err_del_interface;
633		}
634
635		if (sdata->vif.type == NL80211_IFTYPE_AP) {
636			local->fif_pspoll++;
637			local->fif_probe_req++;
638
639			ieee80211_configure_filter(local);
640		} else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
641			local->fif_probe_req++;
642		}
643
644		if (sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE)
645			changed |= ieee80211_reset_erp_info(sdata);
646		ieee80211_bss_info_change_notify(sdata, changed);
647
648		switch (sdata->vif.type) {
649		case NL80211_IFTYPE_STATION:
650		case NL80211_IFTYPE_ADHOC:
651		case NL80211_IFTYPE_AP:
652		case NL80211_IFTYPE_MESH_POINT:
653		case NL80211_IFTYPE_OCB:
654			netif_carrier_off(dev);
655			break;
656		case NL80211_IFTYPE_WDS:
657		case NL80211_IFTYPE_P2P_DEVICE:
658			break;
659		default:
660			/* not reached */
661			WARN_ON(1);
662		}
663
664		/*
665		 * Set default queue parameters so drivers don't
666		 * need to initialise the hardware if the hardware
667		 * doesn't start up with sane defaults.
668		 * Enable QoS for anything but station interfaces.
669		 */
670		ieee80211_set_wmm_default(sdata, true,
671			sdata->vif.type != NL80211_IFTYPE_STATION);
672	}
673
674	set_bit(SDATA_STATE_RUNNING, &sdata->state);
675
676	if (sdata->vif.type == NL80211_IFTYPE_WDS) {
677		/* Create STA entry for the WDS peer */
678		sta = sta_info_alloc(sdata, sdata->u.wds.remote_addr,
679				     GFP_KERNEL);
680		if (!sta) {
681			res = -ENOMEM;
682			goto err_del_interface;
683		}
684
685		sta_info_pre_move_state(sta, IEEE80211_STA_AUTH);
686		sta_info_pre_move_state(sta, IEEE80211_STA_ASSOC);
687		sta_info_pre_move_state(sta, IEEE80211_STA_AUTHORIZED);
688
689		res = sta_info_insert(sta);
690		if (res) {
691			/* STA has been freed */
692			goto err_del_interface;
693		}
694
695		rate_control_rate_init(sta);
696		netif_carrier_on(dev);
697	} else if (sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) {
698		rcu_assign_pointer(local->p2p_sdata, sdata);
699	}
700
701	/*
702	 * set_multicast_list will be invoked by the networking core
703	 * which will check whether any increments here were done in
704	 * error and sync them down to the hardware as filter flags.
705	 */
706	if (sdata->flags & IEEE80211_SDATA_ALLMULTI)
707		atomic_inc(&local->iff_allmultis);
708
709	if (coming_up)
710		local->open_count++;
711
712	if (hw_reconf_flags)
713		ieee80211_hw_config(local, hw_reconf_flags);
714
715	ieee80211_recalc_ps(local);
716
717	if (sdata->vif.type == NL80211_IFTYPE_MONITOR ||
718	    sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
719		/* XXX: for AP_VLAN, actually track AP queues */
720		netif_tx_start_all_queues(dev);
721	} else if (dev) {
722		unsigned long flags;
723		int n_acs = IEEE80211_NUM_ACS;
724		int ac;
725
726		if (local->hw.queues < IEEE80211_NUM_ACS)
727			n_acs = 1;
728
729		spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
730		if (sdata->vif.cab_queue == IEEE80211_INVAL_HW_QUEUE ||
731		    (local->queue_stop_reasons[sdata->vif.cab_queue] == 0 &&
732		     skb_queue_empty(&local->pending[sdata->vif.cab_queue]))) {
733			for (ac = 0; ac < n_acs; ac++) {
734				int ac_queue = sdata->vif.hw_queue[ac];
735
736				if (local->queue_stop_reasons[ac_queue] == 0 &&
737				    skb_queue_empty(&local->pending[ac_queue]))
738					netif_start_subqueue(dev, ac);
739			}
740		}
741		spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
742	}
743
744	return 0;
745 err_del_interface:
746	drv_remove_interface(local, sdata);
747 err_stop:
748	if (!local->open_count)
749		drv_stop(local);
750 err_del_bss:
751	sdata->bss = NULL;
752	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
753		mutex_lock(&local->mtx);
754		list_del(&sdata->u.vlan.list);
755		mutex_unlock(&local->mtx);
756	}
757	/* might already be clear but that doesn't matter */
758	clear_bit(SDATA_STATE_RUNNING, &sdata->state);
759	return res;
760}
761
762static int ieee80211_open(struct net_device *dev)
763{
764	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
765	int err;
766
767	/* fail early if user set an invalid address */
768	if (!is_valid_ether_addr(dev->dev_addr))
769		return -EADDRNOTAVAIL;
770
771	err = ieee80211_check_concurrent_iface(sdata, sdata->vif.type);
772	if (err)
773		return err;
774
775	return ieee80211_do_open(&sdata->wdev, true);
776}
777
778static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
779			      bool going_down)
780{
781	struct ieee80211_local *local = sdata->local;
782	unsigned long flags;
783	struct sk_buff *skb, *tmp;
784	u32 hw_reconf_flags = 0;
785	int i, flushed;
786	struct ps_data *ps;
787	struct cfg80211_chan_def chandef;
788	bool cancel_scan;
789
790	clear_bit(SDATA_STATE_RUNNING, &sdata->state);
791
792	cancel_scan = rcu_access_pointer(local->scan_sdata) == sdata;
793	if (cancel_scan)
794		ieee80211_scan_cancel(local);
795
796	/*
797	 * Stop TX on this interface first.
798	 */
799	if (sdata->dev)
800		netif_tx_stop_all_queues(sdata->dev);
801
802	ieee80211_roc_purge(local, sdata);
803
804	switch (sdata->vif.type) {
805	case NL80211_IFTYPE_STATION:
806		ieee80211_mgd_stop(sdata);
807		break;
808	case NL80211_IFTYPE_ADHOC:
809		ieee80211_ibss_stop(sdata);
810		break;
811	case NL80211_IFTYPE_AP:
812		cancel_work_sync(&sdata->u.ap.request_smps_work);
813		break;
814	default:
815		break;
816	}
817
818	/*
819	 * Remove all stations associated with this interface.
820	 *
821	 * This must be done before calling ops->remove_interface()
822	 * because otherwise we can later invoke ops->sta_notify()
823	 * whenever the STAs are removed, and that invalidates driver
824	 * assumptions about always getting a vif pointer that is valid
825	 * (because if we remove a STA after ops->remove_interface()
826	 * the driver will have removed the vif info already!)
827	 *
828	 * In WDS mode a station must exist here and be flushed, for
829	 * AP_VLANs stations may exist since there's nothing else that
830	 * would have removed them, but in other modes there shouldn't
831	 * be any stations.
832	 */
833	flushed = sta_info_flush(sdata);
834	WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
835		     ((sdata->vif.type != NL80211_IFTYPE_WDS && flushed > 0) ||
836		      (sdata->vif.type == NL80211_IFTYPE_WDS && flushed != 1)));
837
838	/* don't count this interface for allmulti while it is down */
839	if (sdata->flags & IEEE80211_SDATA_ALLMULTI)
840		atomic_dec(&local->iff_allmultis);
841
842	if (sdata->vif.type == NL80211_IFTYPE_AP) {
843		local->fif_pspoll--;
844		local->fif_probe_req--;
845	} else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
846		local->fif_probe_req--;
847	}
848
849	if (sdata->dev) {
850		netif_addr_lock_bh(sdata->dev);
851		spin_lock_bh(&local->filter_lock);
852		__hw_addr_unsync(&local->mc_list, &sdata->dev->mc,
853				 sdata->dev->addr_len);
854		spin_unlock_bh(&local->filter_lock);
855		netif_addr_unlock_bh(sdata->dev);
856	}
857
858	del_timer_sync(&local->dynamic_ps_timer);
859	cancel_work_sync(&local->dynamic_ps_enable_work);
860
861	cancel_work_sync(&sdata->recalc_smps);
862	sdata_lock(sdata);
863	mutex_lock(&local->mtx);
864	sdata->vif.csa_active = false;
865	if (sdata->vif.type == NL80211_IFTYPE_STATION)
866		sdata->u.mgd.csa_waiting_bcn = false;
867	if (sdata->csa_block_tx) {
868		ieee80211_wake_vif_queues(local, sdata,
869					  IEEE80211_QUEUE_STOP_REASON_CSA);
870		sdata->csa_block_tx = false;
871	}
872	mutex_unlock(&local->mtx);
873	sdata_unlock(sdata);
874
875	cancel_work_sync(&sdata->csa_finalize_work);
876
877	cancel_delayed_work_sync(&sdata->dfs_cac_timer_work);
878
879	if (sdata->wdev.cac_started) {
880		chandef = sdata->vif.bss_conf.chandef;
881		WARN_ON(local->suspended);
882		mutex_lock(&local->mtx);
883		ieee80211_vif_release_channel(sdata);
884		mutex_unlock(&local->mtx);
885		cfg80211_cac_event(sdata->dev, &chandef,
886				   NL80211_RADAR_CAC_ABORTED,
887				   GFP_KERNEL);
888	}
889
890	/* APs need special treatment */
891	if (sdata->vif.type == NL80211_IFTYPE_AP) {
892		struct ieee80211_sub_if_data *vlan, *tmpsdata;
893
894		/* down all dependent devices, that is VLANs */
895		list_for_each_entry_safe(vlan, tmpsdata, &sdata->u.ap.vlans,
896					 u.vlan.list)
897			dev_close(vlan->dev);
898		WARN_ON(!list_empty(&sdata->u.ap.vlans));
899	} else if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
900		/* remove all packets in parent bc_buf pointing to this dev */
901		ps = &sdata->bss->ps;
902
903		spin_lock_irqsave(&ps->bc_buf.lock, flags);
904		skb_queue_walk_safe(&ps->bc_buf, skb, tmp) {
905			if (skb->dev == sdata->dev) {
906				__skb_unlink(skb, &ps->bc_buf);
907				local->total_ps_buffered--;
908				ieee80211_free_txskb(&local->hw, skb);
909			}
910		}
911		spin_unlock_irqrestore(&ps->bc_buf.lock, flags);
912	}
913
914	if (going_down)
915		local->open_count--;
916
917	switch (sdata->vif.type) {
918	case NL80211_IFTYPE_AP_VLAN:
919		mutex_lock(&local->mtx);
920		list_del(&sdata->u.vlan.list);
921		mutex_unlock(&local->mtx);
922		RCU_INIT_POINTER(sdata->vif.chanctx_conf, NULL);
923		/* see comment in the default case below */
924		ieee80211_free_keys(sdata, true);
925		/* no need to tell driver */
926		break;
927	case NL80211_IFTYPE_MONITOR:
928		if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) {
929			local->cooked_mntrs--;
930			break;
931		}
932
933		local->monitors--;
934		if (local->monitors == 0) {
935			local->hw.conf.flags &= ~IEEE80211_CONF_MONITOR;
936			hw_reconf_flags |= IEEE80211_CONF_CHANGE_MONITOR;
937		}
938
939		ieee80211_adjust_monitor_flags(sdata, -1);
940		break;
941	case NL80211_IFTYPE_P2P_DEVICE:
942		/* relies on synchronize_rcu() below */
943		RCU_INIT_POINTER(local->p2p_sdata, NULL);
944		/* fall through */
945	default:
946		cancel_work_sync(&sdata->work);
947		/*
948		 * When we get here, the interface is marked down.
949		 * Free the remaining keys, if there are any
950		 * (which can happen in AP mode if userspace sets
951		 * keys before the interface is operating, and maybe
952		 * also in WDS mode)
953		 *
954		 * Force the key freeing to always synchronize_net()
955		 * to wait for the RX path in case it is using this
956		 * interface enqueuing frames at this very time on
957		 * another CPU.
958		 */
959		ieee80211_free_keys(sdata, true);
960		skb_queue_purge(&sdata->skb_queue);
961	}
962
963	sdata->bss = NULL;
964
965	spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
966	for (i = 0; i < IEEE80211_MAX_QUEUES; i++) {
967		skb_queue_walk_safe(&local->pending[i], skb, tmp) {
968			struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
969			if (info->control.vif == &sdata->vif) {
970				__skb_unlink(skb, &local->pending[i]);
971				ieee80211_free_txskb(&local->hw, skb);
972			}
973		}
974	}
975	spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
976
977	if (sdata->vif.txq) {
978		struct txq_info *txqi = to_txq_info(sdata->vif.txq);
979
980		spin_lock_bh(&txqi->queue.lock);
981		ieee80211_purge_tx_queue(&local->hw, &txqi->queue);
982		spin_unlock_bh(&txqi->queue.lock);
983
984		atomic_set(&sdata->txqs_len[txqi->txq.ac], 0);
985	}
986
987	if (local->open_count == 0)
988		ieee80211_clear_tx_pending(local);
989
990	/*
991	 * If the interface goes down while suspended, presumably because
992	 * the device was unplugged and that happens before our resume,
993	 * then the driver is already unconfigured and the remainder of
994	 * this function isn't needed.
995	 * XXX: what about WoWLAN? If the device has software state, e.g.
996	 *	memory allocated, it might expect teardown commands from
997	 *	mac80211 here?
998	 */
999	if (local->suspended) {
1000		WARN_ON(local->wowlan);
1001		WARN_ON(rtnl_dereference(local->monitor_sdata));
1002		return;
1003	}
1004
1005	switch (sdata->vif.type) {
1006	case NL80211_IFTYPE_AP_VLAN:
1007		break;
1008	case NL80211_IFTYPE_MONITOR:
1009		if (local->monitors == 0)
1010			ieee80211_del_virtual_monitor(local);
1011
1012		mutex_lock(&local->mtx);
1013		ieee80211_recalc_idle(local);
1014		mutex_unlock(&local->mtx);
1015
1016		if (!(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE))
1017			break;
1018
1019		/* fall through */
1020	default:
1021		if (going_down)
1022			drv_remove_interface(local, sdata);
1023	}
1024
1025	ieee80211_recalc_ps(local);
1026
1027	if (cancel_scan)
1028		flush_delayed_work(&local->scan_work);
1029
1030	if (local->open_count == 0) {
1031		ieee80211_stop_device(local);
1032
1033		/* no reconfiguring after stop! */
1034		return;
1035	}
1036
1037	/* do after stop to avoid reconfiguring when we stop anyway */
1038	ieee80211_configure_filter(local);
1039	ieee80211_hw_config(local, hw_reconf_flags);
1040
1041	if (local->monitors == local->open_count)
1042		ieee80211_add_virtual_monitor(local);
1043}
1044
1045static int ieee80211_stop(struct net_device *dev)
1046{
1047	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1048
1049	ieee80211_do_stop(sdata, true);
1050
1051	return 0;
1052}
1053
1054static void ieee80211_set_multicast_list(struct net_device *dev)
1055{
1056	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1057	struct ieee80211_local *local = sdata->local;
1058	int allmulti, sdata_allmulti;
1059
1060	allmulti = !!(dev->flags & IFF_ALLMULTI);
1061	sdata_allmulti = !!(sdata->flags & IEEE80211_SDATA_ALLMULTI);
1062
1063	if (allmulti != sdata_allmulti) {
1064		if (dev->flags & IFF_ALLMULTI)
1065			atomic_inc(&local->iff_allmultis);
1066		else
1067			atomic_dec(&local->iff_allmultis);
1068		sdata->flags ^= IEEE80211_SDATA_ALLMULTI;
1069	}
1070
1071	spin_lock_bh(&local->filter_lock);
1072	__hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len);
1073	spin_unlock_bh(&local->filter_lock);
1074	ieee80211_queue_work(&local->hw, &local->reconfig_filter);
1075}
1076
1077/*
1078 * Called when the netdev is removed or, by the code below, before
1079 * the interface type changes.
1080 */
1081static void ieee80211_teardown_sdata(struct ieee80211_sub_if_data *sdata)
1082{
1083	int i;
1084
1085	/* free extra data */
1086	ieee80211_free_keys(sdata, false);
1087
1088	ieee80211_debugfs_remove_netdev(sdata);
1089
1090	for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++)
1091		__skb_queue_purge(&sdata->fragments[i].skb_list);
1092	sdata->fragment_next = 0;
1093
1094	if (ieee80211_vif_is_mesh(&sdata->vif))
1095		mesh_rmc_free(sdata);
1096}
1097
1098static void ieee80211_uninit(struct net_device *dev)
1099{
1100	ieee80211_teardown_sdata(IEEE80211_DEV_TO_SUB_IF(dev));
1101}
1102
1103static u16 ieee80211_netdev_select_queue(struct net_device *dev,
1104					 struct sk_buff *skb,
1105					 void *accel_priv,
1106					 select_queue_fallback_t fallback)
1107{
1108	return ieee80211_select_queue(IEEE80211_DEV_TO_SUB_IF(dev), skb);
1109}
1110
1111static struct rtnl_link_stats64 *
1112ieee80211_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
1113{
1114	int i;
1115
1116	for_each_possible_cpu(i) {
1117		const struct pcpu_sw_netstats *tstats;
1118		u64 rx_packets, rx_bytes, tx_packets, tx_bytes;
1119		unsigned int start;
1120
1121		tstats = per_cpu_ptr(dev->tstats, i);
1122
1123		do {
1124			start = u64_stats_fetch_begin_irq(&tstats->syncp);
1125			rx_packets = tstats->rx_packets;
1126			tx_packets = tstats->tx_packets;
1127			rx_bytes = tstats->rx_bytes;
1128			tx_bytes = tstats->tx_bytes;
1129		} while (u64_stats_fetch_retry_irq(&tstats->syncp, start));
1130
1131		stats->rx_packets += rx_packets;
1132		stats->tx_packets += tx_packets;
1133		stats->rx_bytes   += rx_bytes;
1134		stats->tx_bytes   += tx_bytes;
1135	}
1136
1137	return stats;
1138}
1139
1140static const struct net_device_ops ieee80211_dataif_ops = {
1141	.ndo_open		= ieee80211_open,
1142	.ndo_stop		= ieee80211_stop,
1143	.ndo_uninit		= ieee80211_uninit,
1144	.ndo_start_xmit		= ieee80211_subif_start_xmit,
1145	.ndo_set_rx_mode	= ieee80211_set_multicast_list,
1146	.ndo_change_mtu 	= ieee80211_change_mtu,
1147	.ndo_set_mac_address 	= ieee80211_change_mac,
1148	.ndo_select_queue	= ieee80211_netdev_select_queue,
1149	.ndo_get_stats64	= ieee80211_get_stats64,
1150};
1151
1152static u16 ieee80211_monitor_select_queue(struct net_device *dev,
1153					  struct sk_buff *skb,
1154					  void *accel_priv,
1155					  select_queue_fallback_t fallback)
1156{
1157	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1158	struct ieee80211_local *local = sdata->local;
1159	struct ieee80211_hdr *hdr;
1160	struct ieee80211_radiotap_header *rtap = (void *)skb->data;
1161
1162	if (local->hw.queues < IEEE80211_NUM_ACS)
1163		return 0;
1164
1165	if (skb->len < 4 ||
1166	    skb->len < le16_to_cpu(rtap->it_len) + 2 /* frame control */)
1167		return 0; /* doesn't matter, frame will be dropped */
1168
1169	hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len));
1170
1171	return ieee80211_select_queue_80211(sdata, skb, hdr);
1172}
1173
1174static const struct net_device_ops ieee80211_monitorif_ops = {
1175	.ndo_open		= ieee80211_open,
1176	.ndo_stop		= ieee80211_stop,
1177	.ndo_uninit		= ieee80211_uninit,
1178	.ndo_start_xmit		= ieee80211_monitor_start_xmit,
1179	.ndo_set_rx_mode	= ieee80211_set_multicast_list,
1180	.ndo_change_mtu 	= ieee80211_change_mtu,
1181	.ndo_set_mac_address 	= ieee80211_change_mac,
1182	.ndo_select_queue	= ieee80211_monitor_select_queue,
1183	.ndo_get_stats64	= ieee80211_get_stats64,
1184};
1185
1186static void ieee80211_if_free(struct net_device *dev)
1187{
1188	free_percpu(dev->tstats);
1189	free_netdev(dev);
1190}
1191
1192static void ieee80211_if_setup(struct net_device *dev)
1193{
1194	ether_setup(dev);
1195	dev->priv_flags &= ~IFF_TX_SKB_SHARING;
1196	dev->netdev_ops = &ieee80211_dataif_ops;
1197	dev->destructor = ieee80211_if_free;
1198}
1199
1200static void ieee80211_iface_work(struct work_struct *work)
1201{
1202	struct ieee80211_sub_if_data *sdata =
1203		container_of(work, struct ieee80211_sub_if_data, work);
1204	struct ieee80211_local *local = sdata->local;
1205	struct sk_buff *skb;
1206	struct sta_info *sta;
1207	struct ieee80211_ra_tid *ra_tid;
1208	struct ieee80211_rx_agg *rx_agg;
1209
1210	if (!ieee80211_sdata_running(sdata))
1211		return;
1212
1213	if (test_bit(SCAN_SW_SCANNING, &local->scanning))
1214		return;
1215
1216	if (!ieee80211_can_run_worker(local))
1217		return;
1218
1219	/* first process frames */
1220	while ((skb = skb_dequeue(&sdata->skb_queue))) {
1221		struct ieee80211_mgmt *mgmt = (void *)skb->data;
1222
1223		if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_START) {
1224			ra_tid = (void *)&skb->cb;
1225			ieee80211_start_tx_ba_cb(&sdata->vif, ra_tid->ra,
1226						 ra_tid->tid);
1227		} else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_STOP) {
1228			ra_tid = (void *)&skb->cb;
1229			ieee80211_stop_tx_ba_cb(&sdata->vif, ra_tid->ra,
1230						ra_tid->tid);
1231		} else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_RX_AGG_START) {
1232			rx_agg = (void *)&skb->cb;
1233			mutex_lock(&local->sta_mtx);
1234			sta = sta_info_get_bss(sdata, rx_agg->addr);
1235			if (sta)
1236				__ieee80211_start_rx_ba_session(sta,
1237						0, 0, 0, 1, rx_agg->tid,
1238						IEEE80211_MAX_AMPDU_BUF,
1239						false, true);
1240			mutex_unlock(&local->sta_mtx);
1241		} else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_RX_AGG_STOP) {
1242			rx_agg = (void *)&skb->cb;
1243			mutex_lock(&local->sta_mtx);
1244			sta = sta_info_get_bss(sdata, rx_agg->addr);
1245			if (sta)
1246				__ieee80211_stop_rx_ba_session(sta,
1247							rx_agg->tid,
1248							WLAN_BACK_RECIPIENT, 0,
1249							false);
1250			mutex_unlock(&local->sta_mtx);
1251		} else if (ieee80211_is_action(mgmt->frame_control) &&
1252			   mgmt->u.action.category == WLAN_CATEGORY_BACK) {
1253			int len = skb->len;
1254
1255			mutex_lock(&local->sta_mtx);
1256			sta = sta_info_get_bss(sdata, mgmt->sa);
1257			if (sta) {
1258				switch (mgmt->u.action.u.addba_req.action_code) {
1259				case WLAN_ACTION_ADDBA_REQ:
1260					ieee80211_process_addba_request(
1261							local, sta, mgmt, len);
1262					break;
1263				case WLAN_ACTION_ADDBA_RESP:
1264					ieee80211_process_addba_resp(local, sta,
1265								     mgmt, len);
1266					break;
1267				case WLAN_ACTION_DELBA:
1268					ieee80211_process_delba(sdata, sta,
1269								mgmt, len);
1270					break;
1271				default:
1272					WARN_ON(1);
1273					break;
1274				}
1275			}
1276			mutex_unlock(&local->sta_mtx);
1277		} else if (ieee80211_is_data_qos(mgmt->frame_control)) {
1278			struct ieee80211_hdr *hdr = (void *)mgmt;
1279			/*
1280			 * So the frame isn't mgmt, but frame_control
1281			 * is at the right place anyway, of course, so
1282			 * the if statement is correct.
1283			 *
1284			 * Warn if we have other data frame types here,
1285			 * they must not get here.
1286			 */
1287			WARN_ON(hdr->frame_control &
1288					cpu_to_le16(IEEE80211_STYPE_NULLFUNC));
1289			WARN_ON(!(hdr->seq_ctrl &
1290					cpu_to_le16(IEEE80211_SCTL_FRAG)));
1291			/*
1292			 * This was a fragment of a frame, received while
1293			 * a block-ack session was active. That cannot be
1294			 * right, so terminate the session.
1295			 */
1296			mutex_lock(&local->sta_mtx);
1297			sta = sta_info_get_bss(sdata, mgmt->sa);
1298			if (sta) {
1299				u16 tid = *ieee80211_get_qos_ctl(hdr) &
1300						IEEE80211_QOS_CTL_TID_MASK;
1301
1302				__ieee80211_stop_rx_ba_session(
1303					sta, tid, WLAN_BACK_RECIPIENT,
1304					WLAN_REASON_QSTA_REQUIRE_SETUP,
1305					true);
1306			}
1307			mutex_unlock(&local->sta_mtx);
1308		} else switch (sdata->vif.type) {
1309		case NL80211_IFTYPE_STATION:
1310			ieee80211_sta_rx_queued_mgmt(sdata, skb);
1311			break;
1312		case NL80211_IFTYPE_ADHOC:
1313			ieee80211_ibss_rx_queued_mgmt(sdata, skb);
1314			break;
1315		case NL80211_IFTYPE_MESH_POINT:
1316			if (!ieee80211_vif_is_mesh(&sdata->vif))
1317				break;
1318			ieee80211_mesh_rx_queued_mgmt(sdata, skb);
1319			break;
1320		default:
1321			WARN(1, "frame for unexpected interface type");
1322			break;
1323		}
1324
1325		kfree_skb(skb);
1326	}
1327
1328	/* then other type-dependent work */
1329	switch (sdata->vif.type) {
1330	case NL80211_IFTYPE_STATION:
1331		ieee80211_sta_work(sdata);
1332		break;
1333	case NL80211_IFTYPE_ADHOC:
1334		ieee80211_ibss_work(sdata);
1335		break;
1336	case NL80211_IFTYPE_MESH_POINT:
1337		if (!ieee80211_vif_is_mesh(&sdata->vif))
1338			break;
1339		ieee80211_mesh_work(sdata);
1340		break;
1341	case NL80211_IFTYPE_OCB:
1342		ieee80211_ocb_work(sdata);
1343		break;
1344	default:
1345		break;
1346	}
1347}
1348
1349static void ieee80211_recalc_smps_work(struct work_struct *work)
1350{
1351	struct ieee80211_sub_if_data *sdata =
1352		container_of(work, struct ieee80211_sub_if_data, recalc_smps);
1353
1354	ieee80211_recalc_smps(sdata);
1355}
1356
1357/*
1358 * Helper function to initialise an interface to a specific type.
1359 */
1360static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata,
1361				  enum nl80211_iftype type)
1362{
1363	static const u8 bssid_wildcard[ETH_ALEN] = {0xff, 0xff, 0xff,
1364						    0xff, 0xff, 0xff};
1365
1366	/* clear type-dependent union */
1367	memset(&sdata->u, 0, sizeof(sdata->u));
1368
1369	/* and set some type-dependent values */
1370	sdata->vif.type = type;
1371	sdata->vif.p2p = false;
1372	sdata->wdev.iftype = type;
1373
1374	sdata->control_port_protocol = cpu_to_be16(ETH_P_PAE);
1375	sdata->control_port_no_encrypt = false;
1376	sdata->encrypt_headroom = IEEE80211_ENCRYPT_HEADROOM;
1377	sdata->vif.bss_conf.idle = true;
1378
1379	sdata->noack_map = 0;
1380
1381	/* only monitor/p2p-device differ */
1382	if (sdata->dev) {
1383		sdata->dev->netdev_ops = &ieee80211_dataif_ops;
1384		sdata->dev->type = ARPHRD_ETHER;
1385	}
1386
1387	skb_queue_head_init(&sdata->skb_queue);
1388	INIT_WORK(&sdata->work, ieee80211_iface_work);
1389	INIT_WORK(&sdata->recalc_smps, ieee80211_recalc_smps_work);
1390	INIT_WORK(&sdata->csa_finalize_work, ieee80211_csa_finalize_work);
1391	INIT_LIST_HEAD(&sdata->assigned_chanctx_list);
1392	INIT_LIST_HEAD(&sdata->reserved_chanctx_list);
1393
1394	switch (type) {
1395	case NL80211_IFTYPE_P2P_GO:
1396		type = NL80211_IFTYPE_AP;
1397		sdata->vif.type = type;
1398		sdata->vif.p2p = true;
1399		/* fall through */
1400	case NL80211_IFTYPE_AP:
1401		skb_queue_head_init(&sdata->u.ap.ps.bc_buf);
1402		INIT_LIST_HEAD(&sdata->u.ap.vlans);
1403		INIT_WORK(&sdata->u.ap.request_smps_work,
1404			  ieee80211_request_smps_ap_work);
1405		sdata->vif.bss_conf.bssid = sdata->vif.addr;
1406		sdata->u.ap.req_smps = IEEE80211_SMPS_OFF;
1407		break;
1408	case NL80211_IFTYPE_P2P_CLIENT:
1409		type = NL80211_IFTYPE_STATION;
1410		sdata->vif.type = type;
1411		sdata->vif.p2p = true;
1412		/* fall through */
1413	case NL80211_IFTYPE_STATION:
1414		sdata->vif.bss_conf.bssid = sdata->u.mgd.bssid;
1415		ieee80211_sta_setup_sdata(sdata);
1416		break;
1417	case NL80211_IFTYPE_OCB:
1418		sdata->vif.bss_conf.bssid = bssid_wildcard;
1419		ieee80211_ocb_setup_sdata(sdata);
1420		break;
1421	case NL80211_IFTYPE_ADHOC:
1422		sdata->vif.bss_conf.bssid = sdata->u.ibss.bssid;
1423		ieee80211_ibss_setup_sdata(sdata);
1424		break;
1425	case NL80211_IFTYPE_MESH_POINT:
1426		if (ieee80211_vif_is_mesh(&sdata->vif))
1427			ieee80211_mesh_init_sdata(sdata);
1428		break;
1429	case NL80211_IFTYPE_MONITOR:
1430		sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP;
1431		sdata->dev->netdev_ops = &ieee80211_monitorif_ops;
1432		sdata->u.mntr_flags = MONITOR_FLAG_CONTROL |
1433				      MONITOR_FLAG_OTHER_BSS;
1434		break;
1435	case NL80211_IFTYPE_WDS:
1436		sdata->vif.bss_conf.bssid = NULL;
1437		break;
1438	case NL80211_IFTYPE_AP_VLAN:
1439	case NL80211_IFTYPE_P2P_DEVICE:
1440		sdata->vif.bss_conf.bssid = sdata->vif.addr;
1441		break;
1442	case NL80211_IFTYPE_UNSPECIFIED:
1443	case NUM_NL80211_IFTYPES:
1444		BUG();
1445		break;
1446	}
1447
1448	ieee80211_debugfs_add_netdev(sdata);
1449}
1450
1451static int ieee80211_runtime_change_iftype(struct ieee80211_sub_if_data *sdata,
1452					   enum nl80211_iftype type)
1453{
1454	struct ieee80211_local *local = sdata->local;
1455	int ret, err;
1456	enum nl80211_iftype internal_type = type;
1457	bool p2p = false;
1458
1459	ASSERT_RTNL();
1460
1461	if (!local->ops->change_interface)
1462		return -EBUSY;
1463
1464	switch (sdata->vif.type) {
1465	case NL80211_IFTYPE_AP:
1466	case NL80211_IFTYPE_STATION:
1467	case NL80211_IFTYPE_ADHOC:
1468	case NL80211_IFTYPE_OCB:
1469		/*
1470		 * Could maybe also all others here?
1471		 * Just not sure how that interacts
1472		 * with the RX/config path e.g. for
1473		 * mesh.
1474		 */
1475		break;
1476	default:
1477		return -EBUSY;
1478	}
1479
1480	switch (type) {
1481	case NL80211_IFTYPE_AP:
1482	case NL80211_IFTYPE_STATION:
1483	case NL80211_IFTYPE_ADHOC:
1484	case NL80211_IFTYPE_OCB:
1485		/*
1486		 * Could probably support everything
1487		 * but WDS here (WDS do_open can fail
1488		 * under memory pressure, which this
1489		 * code isn't prepared to handle).
1490		 */
1491		break;
1492	case NL80211_IFTYPE_P2P_CLIENT:
1493		p2p = true;
1494		internal_type = NL80211_IFTYPE_STATION;
1495		break;
1496	case NL80211_IFTYPE_P2P_GO:
1497		p2p = true;
1498		internal_type = NL80211_IFTYPE_AP;
1499		break;
1500	default:
1501		return -EBUSY;
1502	}
1503
1504	ret = ieee80211_check_concurrent_iface(sdata, internal_type);
1505	if (ret)
1506		return ret;
1507
1508	ieee80211_do_stop(sdata, false);
1509
1510	ieee80211_teardown_sdata(sdata);
1511
1512	ret = drv_change_interface(local, sdata, internal_type, p2p);
1513	if (ret)
1514		type = ieee80211_vif_type_p2p(&sdata->vif);
1515
1516	/*
1517	 * Ignore return value here, there's not much we can do since
1518	 * the driver changed the interface type internally already.
1519	 * The warnings will hopefully make driver authors fix it :-)
1520	 */
1521	ieee80211_check_queues(sdata, type);
1522
1523	ieee80211_setup_sdata(sdata, type);
1524
1525	err = ieee80211_do_open(&sdata->wdev, false);
1526	WARN(err, "type change: do_open returned %d", err);
1527
1528	return ret;
1529}
1530
1531int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata,
1532			     enum nl80211_iftype type)
1533{
1534	int ret;
1535
1536	ASSERT_RTNL();
1537
1538	if (type == ieee80211_vif_type_p2p(&sdata->vif))
1539		return 0;
1540
1541	if (ieee80211_sdata_running(sdata)) {
1542		ret = ieee80211_runtime_change_iftype(sdata, type);
1543		if (ret)
1544			return ret;
1545	} else {
1546		/* Purge and reset type-dependent state. */
1547		ieee80211_teardown_sdata(sdata);
1548		ieee80211_setup_sdata(sdata, type);
1549	}
1550
1551	/* reset some values that shouldn't be kept across type changes */
1552	if (type == NL80211_IFTYPE_STATION)
1553		sdata->u.mgd.use_4addr = false;
1554
1555	return 0;
1556}
1557
1558static void ieee80211_assign_perm_addr(struct ieee80211_local *local,
1559				       u8 *perm_addr, enum nl80211_iftype type)
1560{
1561	struct ieee80211_sub_if_data *sdata;
1562	u64 mask, start, addr, val, inc;
1563	u8 *m;
1564	u8 tmp_addr[ETH_ALEN];
1565	int i;
1566
1567	/* default ... something at least */
1568	memcpy(perm_addr, local->hw.wiphy->perm_addr, ETH_ALEN);
1569
1570	if (is_zero_ether_addr(local->hw.wiphy->addr_mask) &&
1571	    local->hw.wiphy->n_addresses <= 1)
1572		return;
1573
1574	mutex_lock(&local->iflist_mtx);
1575
1576	switch (type) {
1577	case NL80211_IFTYPE_MONITOR:
1578		/* doesn't matter */
1579		break;
1580	case NL80211_IFTYPE_WDS:
1581	case NL80211_IFTYPE_AP_VLAN:
1582		/* match up with an AP interface */
1583		list_for_each_entry(sdata, &local->interfaces, list) {
1584			if (sdata->vif.type != NL80211_IFTYPE_AP)
1585				continue;
1586			memcpy(perm_addr, sdata->vif.addr, ETH_ALEN);
1587			break;
1588		}
1589		/* keep default if no AP interface present */
1590		break;
1591	case NL80211_IFTYPE_P2P_CLIENT:
1592	case NL80211_IFTYPE_P2P_GO:
1593		if (ieee80211_hw_check(&local->hw, P2P_DEV_ADDR_FOR_INTF)) {
1594			list_for_each_entry(sdata, &local->interfaces, list) {
1595				if (sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE)
1596					continue;
1597				if (!ieee80211_sdata_running(sdata))
1598					continue;
1599				memcpy(perm_addr, sdata->vif.addr, ETH_ALEN);
1600				goto out_unlock;
1601			}
1602		}
1603		/* otherwise fall through */
1604	default:
1605		/* assign a new address if possible -- try n_addresses first */
1606		for (i = 0; i < local->hw.wiphy->n_addresses; i++) {
1607			bool used = false;
1608
1609			list_for_each_entry(sdata, &local->interfaces, list) {
1610				if (ether_addr_equal(local->hw.wiphy->addresses[i].addr,
1611						     sdata->vif.addr)) {
1612					used = true;
1613					break;
1614				}
1615			}
1616
1617			if (!used) {
1618				memcpy(perm_addr,
1619				       local->hw.wiphy->addresses[i].addr,
1620				       ETH_ALEN);
1621				break;
1622			}
1623		}
1624
1625		/* try mask if available */
1626		if (is_zero_ether_addr(local->hw.wiphy->addr_mask))
1627			break;
1628
1629		m = local->hw.wiphy->addr_mask;
1630		mask =	((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) |
1631			((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) |
1632			((u64)m[4] << 1*8) | ((u64)m[5] << 0*8);
1633
1634		if (__ffs64(mask) + hweight64(mask) != fls64(mask)) {
1635			/* not a contiguous mask ... not handled now! */
1636			pr_info("not contiguous\n");
1637			break;
1638		}
1639
1640		/*
1641		 * Pick address of existing interface in case user changed
1642		 * MAC address manually, default to perm_addr.
1643		 */
1644		m = local->hw.wiphy->perm_addr;
1645		list_for_each_entry(sdata, &local->interfaces, list) {
1646			if (sdata->vif.type == NL80211_IFTYPE_MONITOR)
1647				continue;
1648			m = sdata->vif.addr;
1649			break;
1650		}
1651		start = ((u64)m[0] << 5*8) | ((u64)m[1] << 4*8) |
1652			((u64)m[2] << 3*8) | ((u64)m[3] << 2*8) |
1653			((u64)m[4] << 1*8) | ((u64)m[5] << 0*8);
1654
1655		inc = 1ULL<<__ffs64(mask);
1656		val = (start & mask);
1657		addr = (start & ~mask) | (val & mask);
1658		do {
1659			bool used = false;
1660
1661			tmp_addr[5] = addr >> 0*8;
1662			tmp_addr[4] = addr >> 1*8;
1663			tmp_addr[3] = addr >> 2*8;
1664			tmp_addr[2] = addr >> 3*8;
1665			tmp_addr[1] = addr >> 4*8;
1666			tmp_addr[0] = addr >> 5*8;
1667
1668			val += inc;
1669
1670			list_for_each_entry(sdata, &local->interfaces, list) {
1671				if (ether_addr_equal(tmp_addr, sdata->vif.addr)) {
1672					used = true;
1673					break;
1674				}
1675			}
1676
1677			if (!used) {
1678				memcpy(perm_addr, tmp_addr, ETH_ALEN);
1679				break;
1680			}
1681			addr = (start & ~mask) | (val & mask);
1682		} while (addr != start);
1683
1684		break;
1685	}
1686
1687 out_unlock:
1688	mutex_unlock(&local->iflist_mtx);
1689}
1690
1691int ieee80211_if_add(struct ieee80211_local *local, const char *name,
1692		     unsigned char name_assign_type,
1693		     struct wireless_dev **new_wdev, enum nl80211_iftype type,
1694		     struct vif_params *params)
1695{
1696	struct net_device *ndev = NULL;
1697	struct ieee80211_sub_if_data *sdata = NULL;
1698	struct txq_info *txqi;
1699	int ret, i;
1700	int txqs = 1;
1701
1702	ASSERT_RTNL();
1703
1704	if (type == NL80211_IFTYPE_P2P_DEVICE) {
1705		struct wireless_dev *wdev;
1706
1707		sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size,
1708				GFP_KERNEL);
1709		if (!sdata)
1710			return -ENOMEM;
1711		wdev = &sdata->wdev;
1712
1713		sdata->dev = NULL;
1714		strlcpy(sdata->name, name, IFNAMSIZ);
1715		ieee80211_assign_perm_addr(local, wdev->address, type);
1716		memcpy(sdata->vif.addr, wdev->address, ETH_ALEN);
1717	} else {
1718		int size = ALIGN(sizeof(*sdata) + local->hw.vif_data_size,
1719				 sizeof(void *));
1720		int txq_size = 0;
1721
1722		if (local->ops->wake_tx_queue)
1723			txq_size += sizeof(struct txq_info) +
1724				    local->hw.txq_data_size;
1725
1726		if (local->hw.queues >= IEEE80211_NUM_ACS)
1727			txqs = IEEE80211_NUM_ACS;
1728
1729		ndev = alloc_netdev_mqs(size + txq_size,
1730					name, name_assign_type,
1731					ieee80211_if_setup, txqs, 1);
1732		if (!ndev)
1733			return -ENOMEM;
1734		dev_net_set(ndev, wiphy_net(local->hw.wiphy));
1735
1736		ndev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
1737		if (!ndev->tstats) {
1738			free_netdev(ndev);
1739			return -ENOMEM;
1740		}
1741
1742		ndev->needed_headroom = local->tx_headroom +
1743					4*6 /* four MAC addresses */
1744					+ 2 + 2 + 2 + 2 /* ctl, dur, seq, qos */
1745					+ 6 /* mesh */
1746					+ 8 /* rfc1042/bridge tunnel */
1747					- ETH_HLEN /* ethernet hard_header_len */
1748					+ IEEE80211_ENCRYPT_HEADROOM;
1749		ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM;
1750
1751		ret = dev_alloc_name(ndev, ndev->name);
1752		if (ret < 0) {
1753			ieee80211_if_free(ndev);
1754			return ret;
1755		}
1756
1757		ieee80211_assign_perm_addr(local, ndev->perm_addr, type);
1758		if (params && is_valid_ether_addr(params->macaddr))
1759			memcpy(ndev->dev_addr, params->macaddr, ETH_ALEN);
1760		else
1761			memcpy(ndev->dev_addr, ndev->perm_addr, ETH_ALEN);
1762		SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy));
1763
1764		/* don't use IEEE80211_DEV_TO_SUB_IF -- it checks too much */
1765		sdata = netdev_priv(ndev);
1766		ndev->ieee80211_ptr = &sdata->wdev;
1767		memcpy(sdata->vif.addr, ndev->dev_addr, ETH_ALEN);
1768		memcpy(sdata->name, ndev->name, IFNAMSIZ);
1769
1770		if (txq_size) {
1771			txqi = netdev_priv(ndev) + size;
1772			ieee80211_init_tx_queue(sdata, NULL, txqi, 0);
1773		}
1774
1775		sdata->dev = ndev;
1776	}
1777
1778	/* initialise type-independent data */
1779	sdata->wdev.wiphy = local->hw.wiphy;
1780	sdata->local = local;
1781
1782	for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++)
1783		skb_queue_head_init(&sdata->fragments[i].skb_list);
1784
1785	INIT_LIST_HEAD(&sdata->key_list);
1786
1787	INIT_DELAYED_WORK(&sdata->dfs_cac_timer_work,
1788			  ieee80211_dfs_cac_timer_work);
1789	INIT_DELAYED_WORK(&sdata->dec_tailroom_needed_wk,
1790			  ieee80211_delayed_tailroom_dec);
1791
1792	for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
1793		struct ieee80211_supported_band *sband;
1794		sband = local->hw.wiphy->bands[i];
1795		sdata->rc_rateidx_mask[i] =
1796			sband ? (1 << sband->n_bitrates) - 1 : 0;
1797		if (sband) {
1798			__le16 cap;
1799			u16 *vht_rate_mask;
1800
1801			memcpy(sdata->rc_rateidx_mcs_mask[i],
1802			       sband->ht_cap.mcs.rx_mask,
1803			       sizeof(sdata->rc_rateidx_mcs_mask[i]));
1804
1805			cap = sband->vht_cap.vht_mcs.rx_mcs_map;
1806			vht_rate_mask = sdata->rc_rateidx_vht_mcs_mask[i];
1807			ieee80211_get_vht_mask_from_cap(cap, vht_rate_mask);
1808		} else {
1809			memset(sdata->rc_rateidx_mcs_mask[i], 0,
1810			       sizeof(sdata->rc_rateidx_mcs_mask[i]));
1811			memset(sdata->rc_rateidx_vht_mcs_mask[i], 0,
1812			       sizeof(sdata->rc_rateidx_vht_mcs_mask[i]));
1813		}
1814	}
1815
1816	ieee80211_set_default_queues(sdata);
1817
1818	sdata->ap_power_level = IEEE80211_UNSET_POWER_LEVEL;
1819	sdata->user_power_level = local->user_power_level;
1820
1821	sdata->encrypt_headroom = IEEE80211_ENCRYPT_HEADROOM;
1822
1823	/* setup type-dependent data */
1824	ieee80211_setup_sdata(sdata, type);
1825
1826	if (ndev) {
1827		if (params) {
1828			ndev->ieee80211_ptr->use_4addr = params->use_4addr;
1829			if (type == NL80211_IFTYPE_STATION)
1830				sdata->u.mgd.use_4addr = params->use_4addr;
1831		}
1832
1833		ndev->features |= local->hw.netdev_features;
1834
1835		netdev_set_default_ethtool_ops(ndev, &ieee80211_ethtool_ops);
1836
1837		ret = register_netdevice(ndev);
1838		if (ret) {
1839			ieee80211_if_free(ndev);
1840			return ret;
1841		}
1842	}
1843
1844	mutex_lock(&local->iflist_mtx);
1845	list_add_tail_rcu(&sdata->list, &local->interfaces);
1846	mutex_unlock(&local->iflist_mtx);
1847
1848	if (new_wdev)
1849		*new_wdev = &sdata->wdev;
1850
1851	return 0;
1852}
1853
1854void ieee80211_if_remove(struct ieee80211_sub_if_data *sdata)
1855{
1856	ASSERT_RTNL();
1857
1858	mutex_lock(&sdata->local->iflist_mtx);
1859	list_del_rcu(&sdata->list);
1860	mutex_unlock(&sdata->local->iflist_mtx);
1861
1862	synchronize_rcu();
1863
1864	if (sdata->dev) {
1865		unregister_netdevice(sdata->dev);
1866	} else {
1867		cfg80211_unregister_wdev(&sdata->wdev);
1868		ieee80211_teardown_sdata(sdata);
1869		kfree(sdata);
1870	}
1871}
1872
1873void ieee80211_sdata_stop(struct ieee80211_sub_if_data *sdata)
1874{
1875	if (WARN_ON_ONCE(!test_bit(SDATA_STATE_RUNNING, &sdata->state)))
1876		return;
1877	ieee80211_do_stop(sdata, true);
1878}
1879
1880void ieee80211_remove_interfaces(struct ieee80211_local *local)
1881{
1882	struct ieee80211_sub_if_data *sdata, *tmp;
1883	LIST_HEAD(unreg_list);
1884	LIST_HEAD(wdev_list);
1885
1886	ASSERT_RTNL();
1887
1888	/* Before destroying the interfaces, make sure they're all stopped so
1889	 * that the hardware is stopped. Otherwise, the driver might still be
1890	 * iterating the interfaces during the shutdown, e.g. from a worker
1891	 * or from RX processing or similar, and if it does so (using atomic
1892	 * iteration) while we're manipulating the list, the iteration will
1893	 * crash.
1894	 *
1895	 * After this, the hardware should be stopped and the driver should
1896	 * have stopped all of its activities, so that we can do RCU-unaware
1897	 * manipulations of the interface list below.
1898	 */
1899	cfg80211_shutdown_all_interfaces(local->hw.wiphy);
1900
1901	WARN(local->open_count, "%s: open count remains %d\n",
1902	     wiphy_name(local->hw.wiphy), local->open_count);
1903
1904	mutex_lock(&local->iflist_mtx);
1905	list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) {
1906		list_del(&sdata->list);
1907
1908		if (sdata->dev)
1909			unregister_netdevice_queue(sdata->dev, &unreg_list);
1910		else
1911			list_add(&sdata->list, &wdev_list);
1912	}
1913	mutex_unlock(&local->iflist_mtx);
1914	unregister_netdevice_many(&unreg_list);
1915
1916	list_for_each_entry_safe(sdata, tmp, &wdev_list, list) {
1917		list_del(&sdata->list);
1918		cfg80211_unregister_wdev(&sdata->wdev);
1919		kfree(sdata);
1920	}
1921}
1922
1923static int netdev_notify(struct notifier_block *nb,
1924			 unsigned long state, void *ptr)
1925{
1926	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1927	struct ieee80211_sub_if_data *sdata;
1928
1929	if (state != NETDEV_CHANGENAME)
1930		return NOTIFY_DONE;
1931
1932	if (!dev->ieee80211_ptr || !dev->ieee80211_ptr->wiphy)
1933		return NOTIFY_DONE;
1934
1935	if (dev->ieee80211_ptr->wiphy->privid != mac80211_wiphy_privid)
1936		return NOTIFY_DONE;
1937
1938	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1939	memcpy(sdata->name, dev->name, IFNAMSIZ);
1940	ieee80211_debugfs_rename_netdev(sdata);
1941
1942	return NOTIFY_OK;
1943}
1944
1945static struct notifier_block mac80211_netdev_notifier = {
1946	.notifier_call = netdev_notify,
1947};
1948
1949int ieee80211_iface_init(void)
1950{
1951	return register_netdevice_notifier(&mac80211_netdev_notifier);
1952}
1953
1954void ieee80211_iface_exit(void)
1955{
1956	unregister_netdevice_notifier(&mac80211_netdev_notifier);
1957}
1958