xref: /linux/net/mac80211/iface.c (revision c145211d1f9e2ef19e7b4c2b943f68366daa97af)
1 /*
2  * Interface handling (except master interface)
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  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2 as
11  * published by the Free Software Foundation.
12  */
13 #include <linux/slab.h>
14 #include <linux/kernel.h>
15 #include <linux/if_arp.h>
16 #include <linux/netdevice.h>
17 #include <linux/rtnetlink.h>
18 #include <net/mac80211.h>
19 #include <net/ieee80211_radiotap.h>
20 #include "ieee80211_i.h"
21 #include "sta_info.h"
22 #include "debugfs_netdev.h"
23 #include "mesh.h"
24 #include "led.h"
25 #include "driver-ops.h"
26 #include "wme.h"
27 
28 /**
29  * DOC: Interface list locking
30  *
31  * The interface list in each struct ieee80211_local is protected
32  * three-fold:
33  *
34  * (1) modifications may only be done under the RTNL
35  * (2) modifications and readers are protected against each other by
36  *     the iflist_mtx.
37  * (3) modifications are done in an RCU manner so atomic readers
38  *     can traverse the list in RCU-safe blocks.
39  *
40  * As a consequence, reads (traversals) of the list can be protected
41  * by either the RTNL, the iflist_mtx or RCU.
42  */
43 
44 
45 static int ieee80211_change_mtu(struct net_device *dev, int new_mtu)
46 {
47 	int meshhdrlen;
48 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
49 
50 	meshhdrlen = (sdata->vif.type == NL80211_IFTYPE_MESH_POINT) ? 5 : 0;
51 
52 	/* FIX: what would be proper limits for MTU?
53 	 * This interface uses 802.3 frames. */
54 	if (new_mtu < 256 ||
55 	    new_mtu > IEEE80211_MAX_DATA_LEN - 24 - 6 - meshhdrlen) {
56 		return -EINVAL;
57 	}
58 
59 #ifdef CONFIG_MAC80211_VERBOSE_DEBUG
60 	printk(KERN_DEBUG "%s: setting MTU %d\n", dev->name, new_mtu);
61 #endif /* CONFIG_MAC80211_VERBOSE_DEBUG */
62 	dev->mtu = new_mtu;
63 	return 0;
64 }
65 
66 static int ieee80211_change_mac(struct net_device *dev, void *addr)
67 {
68 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
69 	struct sockaddr *sa = addr;
70 	int ret;
71 
72 	if (ieee80211_sdata_running(sdata))
73 		return -EBUSY;
74 
75 	ret = eth_mac_addr(dev, sa);
76 
77 	if (ret == 0)
78 		memcpy(sdata->vif.addr, sa->sa_data, ETH_ALEN);
79 
80 	return ret;
81 }
82 
83 static inline int identical_mac_addr_allowed(int type1, int type2)
84 {
85 	return type1 == NL80211_IFTYPE_MONITOR ||
86 		type2 == NL80211_IFTYPE_MONITOR ||
87 		(type1 == NL80211_IFTYPE_AP && type2 == NL80211_IFTYPE_WDS) ||
88 		(type1 == NL80211_IFTYPE_WDS &&
89 			(type2 == NL80211_IFTYPE_WDS ||
90 			 type2 == NL80211_IFTYPE_AP)) ||
91 		(type1 == NL80211_IFTYPE_AP && type2 == NL80211_IFTYPE_AP_VLAN) ||
92 		(type1 == NL80211_IFTYPE_AP_VLAN &&
93 			(type2 == NL80211_IFTYPE_AP ||
94 			 type2 == NL80211_IFTYPE_AP_VLAN));
95 }
96 
97 static int ieee80211_open(struct net_device *dev)
98 {
99 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
100 	struct ieee80211_sub_if_data *nsdata;
101 	struct ieee80211_local *local = sdata->local;
102 	struct sta_info *sta;
103 	u32 changed = 0;
104 	int res;
105 	u32 hw_reconf_flags = 0;
106 	u8 null_addr[ETH_ALEN] = {0};
107 
108 	/* fail early if user set an invalid address */
109 	if (compare_ether_addr(dev->dev_addr, null_addr) &&
110 	    !is_valid_ether_addr(dev->dev_addr))
111 		return -EADDRNOTAVAIL;
112 
113 	/* we hold the RTNL here so can safely walk the list */
114 	list_for_each_entry(nsdata, &local->interfaces, list) {
115 		struct net_device *ndev = nsdata->dev;
116 
117 		if (ndev != dev && ieee80211_sdata_running(nsdata)) {
118 			/*
119 			 * Allow only a single IBSS interface to be up at any
120 			 * time. This is restricted because beacon distribution
121 			 * cannot work properly if both are in the same IBSS.
122 			 *
123 			 * To remove this restriction we'd have to disallow them
124 			 * from setting the same SSID on different IBSS interfaces
125 			 * belonging to the same hardware. Then, however, we're
126 			 * faced with having to adopt two different TSF timers...
127 			 */
128 			if (sdata->vif.type == NL80211_IFTYPE_ADHOC &&
129 			    nsdata->vif.type == NL80211_IFTYPE_ADHOC)
130 				return -EBUSY;
131 
132 			/*
133 			 * The remaining checks are only performed for interfaces
134 			 * with the same MAC address.
135 			 */
136 			if (compare_ether_addr(dev->dev_addr, ndev->dev_addr))
137 				continue;
138 
139 			/*
140 			 * check whether it may have the same address
141 			 */
142 			if (!identical_mac_addr_allowed(sdata->vif.type,
143 							nsdata->vif.type))
144 				return -ENOTUNIQ;
145 
146 			/*
147 			 * can only add VLANs to enabled APs
148 			 */
149 			if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
150 			    nsdata->vif.type == NL80211_IFTYPE_AP)
151 				sdata->bss = &nsdata->u.ap;
152 		}
153 	}
154 
155 	switch (sdata->vif.type) {
156 	case NL80211_IFTYPE_WDS:
157 		if (!is_valid_ether_addr(sdata->u.wds.remote_addr))
158 			return -ENOLINK;
159 		break;
160 	case NL80211_IFTYPE_AP_VLAN:
161 		if (!sdata->bss)
162 			return -ENOLINK;
163 		list_add(&sdata->u.vlan.list, &sdata->bss->vlans);
164 		break;
165 	case NL80211_IFTYPE_AP:
166 		sdata->bss = &sdata->u.ap;
167 		break;
168 	case NL80211_IFTYPE_MESH_POINT:
169 		if (!ieee80211_vif_is_mesh(&sdata->vif))
170 			break;
171 		/* mesh ifaces must set allmulti to forward mcast traffic */
172 		atomic_inc(&local->iff_allmultis);
173 		break;
174 	case NL80211_IFTYPE_STATION:
175 	case NL80211_IFTYPE_MONITOR:
176 	case NL80211_IFTYPE_ADHOC:
177 		/* no special treatment */
178 		break;
179 	case NL80211_IFTYPE_UNSPECIFIED:
180 	case __NL80211_IFTYPE_AFTER_LAST:
181 		/* cannot happen */
182 		WARN_ON(1);
183 		break;
184 	}
185 
186 	if (local->open_count == 0) {
187 		res = drv_start(local);
188 		if (res)
189 			goto err_del_bss;
190 		/* we're brought up, everything changes */
191 		hw_reconf_flags = ~0;
192 		ieee80211_led_radio(local, true);
193 	}
194 
195 	/*
196 	 * Check all interfaces and copy the hopefully now-present
197 	 * MAC address to those that have the special null one.
198 	 */
199 	list_for_each_entry(nsdata, &local->interfaces, list) {
200 		struct net_device *ndev = nsdata->dev;
201 
202 		/*
203 		 * No need to check running since we do not allow
204 		 * it to start up with this invalid address.
205 		 */
206 		if (compare_ether_addr(null_addr, ndev->dev_addr) == 0) {
207 			memcpy(ndev->dev_addr,
208 			       local->hw.wiphy->perm_addr,
209 			       ETH_ALEN);
210 			memcpy(ndev->perm_addr, ndev->dev_addr, ETH_ALEN);
211 		}
212 	}
213 
214 	/*
215 	 * Validate the MAC address for this device.
216 	 */
217 	if (!is_valid_ether_addr(dev->dev_addr)) {
218 		if (!local->open_count)
219 			drv_stop(local);
220 		return -EADDRNOTAVAIL;
221 	}
222 
223 	switch (sdata->vif.type) {
224 	case NL80211_IFTYPE_AP_VLAN:
225 		/* no need to tell driver */
226 		break;
227 	case NL80211_IFTYPE_MONITOR:
228 		if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) {
229 			local->cooked_mntrs++;
230 			break;
231 		}
232 
233 		/* must be before the call to ieee80211_configure_filter */
234 		local->monitors++;
235 		if (local->monitors == 1) {
236 			local->hw.conf.flags |= IEEE80211_CONF_MONITOR;
237 			hw_reconf_flags |= IEEE80211_CONF_CHANGE_MONITOR;
238 		}
239 
240 		if (sdata->u.mntr_flags & MONITOR_FLAG_FCSFAIL)
241 			local->fif_fcsfail++;
242 		if (sdata->u.mntr_flags & MONITOR_FLAG_PLCPFAIL)
243 			local->fif_plcpfail++;
244 		if (sdata->u.mntr_flags & MONITOR_FLAG_CONTROL) {
245 			local->fif_control++;
246 			local->fif_pspoll++;
247 		}
248 		if (sdata->u.mntr_flags & MONITOR_FLAG_OTHER_BSS)
249 			local->fif_other_bss++;
250 
251 		ieee80211_configure_filter(local);
252 		break;
253 	default:
254 		res = drv_add_interface(local, &sdata->vif);
255 		if (res)
256 			goto err_stop;
257 
258 		if (ieee80211_vif_is_mesh(&sdata->vif)) {
259 			local->fif_other_bss++;
260 			ieee80211_configure_filter(local);
261 
262 			ieee80211_start_mesh(sdata);
263 		} else if (sdata->vif.type == NL80211_IFTYPE_AP) {
264 			local->fif_pspoll++;
265 
266 			ieee80211_configure_filter(local);
267 		}
268 
269 		changed |= ieee80211_reset_erp_info(sdata);
270 		ieee80211_bss_info_change_notify(sdata, changed);
271 		ieee80211_enable_keys(sdata);
272 
273 		if (sdata->vif.type == NL80211_IFTYPE_STATION)
274 			netif_carrier_off(dev);
275 		else
276 			netif_carrier_on(dev);
277 	}
278 
279 	if (sdata->vif.type == NL80211_IFTYPE_WDS) {
280 		/* Create STA entry for the WDS peer */
281 		sta = sta_info_alloc(sdata, sdata->u.wds.remote_addr,
282 				     GFP_KERNEL);
283 		if (!sta) {
284 			res = -ENOMEM;
285 			goto err_del_interface;
286 		}
287 
288 		/* no locking required since STA is not live yet */
289 		sta->flags |= WLAN_STA_AUTHORIZED;
290 
291 		res = sta_info_insert(sta);
292 		if (res) {
293 			/* STA has been freed */
294 			goto err_del_interface;
295 		}
296 	}
297 
298 	/*
299 	 * set_multicast_list will be invoked by the networking core
300 	 * which will check whether any increments here were done in
301 	 * error and sync them down to the hardware as filter flags.
302 	 */
303 	if (sdata->flags & IEEE80211_SDATA_ALLMULTI)
304 		atomic_inc(&local->iff_allmultis);
305 
306 	if (sdata->flags & IEEE80211_SDATA_PROMISC)
307 		atomic_inc(&local->iff_promiscs);
308 
309 	hw_reconf_flags |= __ieee80211_recalc_idle(local);
310 
311 	local->open_count++;
312 	if (hw_reconf_flags) {
313 		ieee80211_hw_config(local, hw_reconf_flags);
314 		/*
315 		 * set default queue parameters so drivers don't
316 		 * need to initialise the hardware if the hardware
317 		 * doesn't start up with sane defaults
318 		 */
319 		ieee80211_set_wmm_default(sdata);
320 	}
321 
322 	ieee80211_recalc_ps(local, -1);
323 
324 	/*
325 	 * ieee80211_sta_work is disabled while network interface
326 	 * is down. Therefore, some configuration changes may not
327 	 * yet be effective. Trigger execution of ieee80211_sta_work
328 	 * to fix this.
329 	 */
330 	if (sdata->vif.type == NL80211_IFTYPE_STATION)
331 		ieee80211_queue_work(&local->hw, &sdata->u.mgd.work);
332 
333 	netif_tx_start_all_queues(dev);
334 
335 	return 0;
336  err_del_interface:
337 	drv_remove_interface(local, &sdata->vif);
338  err_stop:
339 	if (!local->open_count)
340 		drv_stop(local);
341  err_del_bss:
342 	sdata->bss = NULL;
343 	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
344 		list_del(&sdata->u.vlan.list);
345 	return res;
346 }
347 
348 static int ieee80211_stop(struct net_device *dev)
349 {
350 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
351 	struct ieee80211_local *local = sdata->local;
352 	struct sta_info *sta;
353 	unsigned long flags;
354 	struct sk_buff *skb, *tmp;
355 	u32 hw_reconf_flags = 0;
356 	int i;
357 
358 	/*
359 	 * Stop TX on this interface first.
360 	 */
361 	netif_tx_stop_all_queues(dev);
362 
363 	/*
364 	 * Purge work for this interface.
365 	 */
366 	ieee80211_work_purge(sdata);
367 
368 	/*
369 	 * Now delete all active aggregation sessions.
370 	 */
371 	rcu_read_lock();
372 
373 	list_for_each_entry_rcu(sta, &local->sta_list, list) {
374 		if (sta->sdata == sdata)
375 			ieee80211_sta_tear_down_BA_sessions(sta);
376 	}
377 
378 	rcu_read_unlock();
379 
380 	/*
381 	 * Remove all stations associated with this interface.
382 	 *
383 	 * This must be done before calling ops->remove_interface()
384 	 * because otherwise we can later invoke ops->sta_notify()
385 	 * whenever the STAs are removed, and that invalidates driver
386 	 * assumptions about always getting a vif pointer that is valid
387 	 * (because if we remove a STA after ops->remove_interface()
388 	 * the driver will have removed the vif info already!)
389 	 *
390 	 * We could relax this and only unlink the stations from the
391 	 * hash table and list but keep them on a per-sdata list that
392 	 * will be inserted back again when the interface is brought
393 	 * up again, but I don't currently see a use case for that,
394 	 * except with WDS which gets a STA entry created when it is
395 	 * brought up.
396 	 */
397 	sta_info_flush(local, sdata);
398 
399 	/*
400 	 * Don't count this interface for promisc/allmulti while it
401 	 * is down. dev_mc_unsync() will invoke set_multicast_list
402 	 * on the master interface which will sync these down to the
403 	 * hardware as filter flags.
404 	 */
405 	if (sdata->flags & IEEE80211_SDATA_ALLMULTI)
406 		atomic_dec(&local->iff_allmultis);
407 
408 	if (sdata->flags & IEEE80211_SDATA_PROMISC)
409 		atomic_dec(&local->iff_promiscs);
410 
411 	if (sdata->vif.type == NL80211_IFTYPE_AP)
412 		local->fif_pspoll--;
413 
414 	netif_addr_lock_bh(dev);
415 	spin_lock_bh(&local->filter_lock);
416 	__dev_addr_unsync(&local->mc_list, &local->mc_count,
417 			  &dev->mc_list, &dev->mc_count);
418 	spin_unlock_bh(&local->filter_lock);
419 	netif_addr_unlock_bh(dev);
420 
421 	ieee80211_configure_filter(local);
422 
423 	del_timer_sync(&local->dynamic_ps_timer);
424 	cancel_work_sync(&local->dynamic_ps_enable_work);
425 
426 	/* APs need special treatment */
427 	if (sdata->vif.type == NL80211_IFTYPE_AP) {
428 		struct ieee80211_sub_if_data *vlan, *tmpsdata;
429 		struct beacon_data *old_beacon = sdata->u.ap.beacon;
430 
431 		/* remove beacon */
432 		rcu_assign_pointer(sdata->u.ap.beacon, NULL);
433 		synchronize_rcu();
434 		kfree(old_beacon);
435 
436 		/* down all dependent devices, that is VLANs */
437 		list_for_each_entry_safe(vlan, tmpsdata, &sdata->u.ap.vlans,
438 					 u.vlan.list)
439 			dev_close(vlan->dev);
440 		WARN_ON(!list_empty(&sdata->u.ap.vlans));
441 	}
442 
443 	local->open_count--;
444 
445 	switch (sdata->vif.type) {
446 	case NL80211_IFTYPE_AP_VLAN:
447 		list_del(&sdata->u.vlan.list);
448 		/* no need to tell driver */
449 		break;
450 	case NL80211_IFTYPE_MONITOR:
451 		if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES) {
452 			local->cooked_mntrs--;
453 			break;
454 		}
455 
456 		local->monitors--;
457 		if (local->monitors == 0) {
458 			local->hw.conf.flags &= ~IEEE80211_CONF_MONITOR;
459 			hw_reconf_flags |= IEEE80211_CONF_CHANGE_MONITOR;
460 		}
461 
462 		if (sdata->u.mntr_flags & MONITOR_FLAG_FCSFAIL)
463 			local->fif_fcsfail--;
464 		if (sdata->u.mntr_flags & MONITOR_FLAG_PLCPFAIL)
465 			local->fif_plcpfail--;
466 		if (sdata->u.mntr_flags & MONITOR_FLAG_CONTROL) {
467 			local->fif_pspoll--;
468 			local->fif_control--;
469 		}
470 		if (sdata->u.mntr_flags & MONITOR_FLAG_OTHER_BSS)
471 			local->fif_other_bss--;
472 
473 		ieee80211_configure_filter(local);
474 		break;
475 	case NL80211_IFTYPE_STATION:
476 		del_timer_sync(&sdata->u.mgd.chswitch_timer);
477 		del_timer_sync(&sdata->u.mgd.timer);
478 		del_timer_sync(&sdata->u.mgd.conn_mon_timer);
479 		del_timer_sync(&sdata->u.mgd.bcn_mon_timer);
480 		/*
481 		 * If any of the timers fired while we waited for it, it will
482 		 * have queued its work. Now the work will be running again
483 		 * but will not rearm the timer again because it checks
484 		 * whether the interface is running, which, at this point,
485 		 * it no longer is.
486 		 */
487 		cancel_work_sync(&sdata->u.mgd.work);
488 		cancel_work_sync(&sdata->u.mgd.chswitch_work);
489 		cancel_work_sync(&sdata->u.mgd.monitor_work);
490 		cancel_work_sync(&sdata->u.mgd.beacon_loss_work);
491 
492 		/*
493 		 * When we get here, the interface is marked down.
494 		 * Call synchronize_rcu() to wait for the RX path
495 		 * should it be using the interface and enqueuing
496 		 * frames at this very time on another CPU.
497 		 */
498 		synchronize_rcu();
499 		skb_queue_purge(&sdata->u.mgd.skb_queue);
500 		/* fall through */
501 	case NL80211_IFTYPE_ADHOC:
502 		if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
503 			del_timer_sync(&sdata->u.ibss.timer);
504 			cancel_work_sync(&sdata->u.ibss.work);
505 			synchronize_rcu();
506 			skb_queue_purge(&sdata->u.ibss.skb_queue);
507 		}
508 		/* fall through */
509 	case NL80211_IFTYPE_MESH_POINT:
510 		if (ieee80211_vif_is_mesh(&sdata->vif)) {
511 			/* other_bss and allmulti are always set on mesh
512 			 * ifaces */
513 			local->fif_other_bss--;
514 			atomic_dec(&local->iff_allmultis);
515 
516 			ieee80211_configure_filter(local);
517 
518 			ieee80211_stop_mesh(sdata);
519 		}
520 		/* fall through */
521 	default:
522 		if (local->scan_sdata == sdata)
523 			ieee80211_scan_cancel(local);
524 
525 		/*
526 		 * Disable beaconing for AP and mesh, IBSS can't
527 		 * still be joined to a network at this point.
528 		 */
529 		if (sdata->vif.type == NL80211_IFTYPE_AP ||
530 		    sdata->vif.type == NL80211_IFTYPE_MESH_POINT) {
531 			ieee80211_bss_info_change_notify(sdata,
532 				BSS_CHANGED_BEACON_ENABLED);
533 		}
534 
535 		/* disable all keys for as long as this netdev is down */
536 		ieee80211_disable_keys(sdata);
537 		drv_remove_interface(local, &sdata->vif);
538 	}
539 
540 	sdata->bss = NULL;
541 
542 	hw_reconf_flags |= __ieee80211_recalc_idle(local);
543 
544 	ieee80211_recalc_ps(local, -1);
545 
546 	if (local->open_count == 0) {
547 		ieee80211_clear_tx_pending(local);
548 		ieee80211_stop_device(local);
549 
550 		/* no reconfiguring after stop! */
551 		hw_reconf_flags = 0;
552 	}
553 
554 	/* do after stop to avoid reconfiguring when we stop anyway */
555 	if (hw_reconf_flags)
556 		ieee80211_hw_config(local, hw_reconf_flags);
557 
558 	spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
559 	for (i = 0; i < IEEE80211_MAX_QUEUES; i++) {
560 		skb_queue_walk_safe(&local->pending[i], skb, tmp) {
561 			struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
562 			if (info->control.vif == &sdata->vif) {
563 				__skb_unlink(skb, &local->pending[i]);
564 				dev_kfree_skb_irq(skb);
565 			}
566 		}
567 	}
568 	spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
569 
570 	return 0;
571 }
572 
573 static void ieee80211_set_multicast_list(struct net_device *dev)
574 {
575 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
576 	struct ieee80211_local *local = sdata->local;
577 	int allmulti, promisc, sdata_allmulti, sdata_promisc;
578 
579 	allmulti = !!(dev->flags & IFF_ALLMULTI);
580 	promisc = !!(dev->flags & IFF_PROMISC);
581 	sdata_allmulti = !!(sdata->flags & IEEE80211_SDATA_ALLMULTI);
582 	sdata_promisc = !!(sdata->flags & IEEE80211_SDATA_PROMISC);
583 
584 	if (allmulti != sdata_allmulti) {
585 		if (dev->flags & IFF_ALLMULTI)
586 			atomic_inc(&local->iff_allmultis);
587 		else
588 			atomic_dec(&local->iff_allmultis);
589 		sdata->flags ^= IEEE80211_SDATA_ALLMULTI;
590 	}
591 
592 	if (promisc != sdata_promisc) {
593 		if (dev->flags & IFF_PROMISC)
594 			atomic_inc(&local->iff_promiscs);
595 		else
596 			atomic_dec(&local->iff_promiscs);
597 		sdata->flags ^= IEEE80211_SDATA_PROMISC;
598 	}
599 	spin_lock_bh(&local->filter_lock);
600 	__dev_addr_sync(&local->mc_list, &local->mc_count,
601 			&dev->mc_list, &dev->mc_count);
602 	spin_unlock_bh(&local->filter_lock);
603 	ieee80211_queue_work(&local->hw, &local->reconfig_filter);
604 }
605 
606 /*
607  * Called when the netdev is removed or, by the code below, before
608  * the interface type changes.
609  */
610 static void ieee80211_teardown_sdata(struct net_device *dev)
611 {
612 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
613 	struct ieee80211_local *local = sdata->local;
614 	struct beacon_data *beacon;
615 	struct sk_buff *skb;
616 	int flushed;
617 	int i;
618 
619 	/* free extra data */
620 	ieee80211_free_keys(sdata);
621 
622 	ieee80211_debugfs_remove_netdev(sdata);
623 
624 	for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++)
625 		__skb_queue_purge(&sdata->fragments[i].skb_list);
626 	sdata->fragment_next = 0;
627 
628 	switch (sdata->vif.type) {
629 	case NL80211_IFTYPE_AP:
630 		beacon = sdata->u.ap.beacon;
631 		rcu_assign_pointer(sdata->u.ap.beacon, NULL);
632 		synchronize_rcu();
633 		kfree(beacon);
634 
635 		while ((skb = skb_dequeue(&sdata->u.ap.ps_bc_buf))) {
636 			local->total_ps_buffered--;
637 			dev_kfree_skb(skb);
638 		}
639 
640 		break;
641 	case NL80211_IFTYPE_MESH_POINT:
642 		if (ieee80211_vif_is_mesh(&sdata->vif))
643 			mesh_rmc_free(sdata);
644 		break;
645 	case NL80211_IFTYPE_ADHOC:
646 		if (WARN_ON(sdata->u.ibss.presp))
647 			kfree_skb(sdata->u.ibss.presp);
648 		break;
649 	case NL80211_IFTYPE_STATION:
650 	case NL80211_IFTYPE_WDS:
651 	case NL80211_IFTYPE_AP_VLAN:
652 	case NL80211_IFTYPE_MONITOR:
653 		break;
654 	case NL80211_IFTYPE_UNSPECIFIED:
655 	case __NL80211_IFTYPE_AFTER_LAST:
656 		BUG();
657 		break;
658 	}
659 
660 	flushed = sta_info_flush(local, sdata);
661 	WARN_ON(flushed);
662 }
663 
664 static u16 ieee80211_netdev_select_queue(struct net_device *dev,
665 					 struct sk_buff *skb)
666 {
667 	return ieee80211_select_queue(IEEE80211_DEV_TO_SUB_IF(dev), skb);
668 }
669 
670 static const struct net_device_ops ieee80211_dataif_ops = {
671 	.ndo_open		= ieee80211_open,
672 	.ndo_stop		= ieee80211_stop,
673 	.ndo_uninit		= ieee80211_teardown_sdata,
674 	.ndo_start_xmit		= ieee80211_subif_start_xmit,
675 	.ndo_set_multicast_list = ieee80211_set_multicast_list,
676 	.ndo_change_mtu 	= ieee80211_change_mtu,
677 	.ndo_set_mac_address 	= ieee80211_change_mac,
678 	.ndo_select_queue	= ieee80211_netdev_select_queue,
679 };
680 
681 static u16 ieee80211_monitor_select_queue(struct net_device *dev,
682 					  struct sk_buff *skb)
683 {
684 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
685 	struct ieee80211_local *local = sdata->local;
686 	struct ieee80211_hdr *hdr;
687 	struct ieee80211_radiotap_header *rtap = (void *)skb->data;
688 	u8 *p;
689 
690 	if (local->hw.queues < 4)
691 		return 0;
692 
693 	if (skb->len < 4 ||
694 	    skb->len < le16_to_cpu(rtap->it_len) + 2 /* frame control */)
695 		return 0; /* doesn't matter, frame will be dropped */
696 
697 	hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len));
698 
699 	if (!ieee80211_is_data(hdr->frame_control)) {
700 		skb->priority = 7;
701 		return ieee802_1d_to_ac[skb->priority];
702 	}
703 	if (!ieee80211_is_data_qos(hdr->frame_control)) {
704 		skb->priority = 0;
705 		return ieee802_1d_to_ac[skb->priority];
706 	}
707 
708 	p = ieee80211_get_qos_ctl(hdr);
709 	skb->priority = *p & IEEE80211_QOS_CTL_TAG1D_MASK;
710 
711 	return ieee80211_downgrade_queue(local, skb);
712 }
713 
714 static const struct net_device_ops ieee80211_monitorif_ops = {
715 	.ndo_open		= ieee80211_open,
716 	.ndo_stop		= ieee80211_stop,
717 	.ndo_uninit		= ieee80211_teardown_sdata,
718 	.ndo_start_xmit		= ieee80211_monitor_start_xmit,
719 	.ndo_set_multicast_list = ieee80211_set_multicast_list,
720 	.ndo_change_mtu 	= ieee80211_change_mtu,
721 	.ndo_set_mac_address 	= eth_mac_addr,
722 	.ndo_select_queue	= ieee80211_monitor_select_queue,
723 };
724 
725 static void ieee80211_if_setup(struct net_device *dev)
726 {
727 	ether_setup(dev);
728 	dev->netdev_ops = &ieee80211_dataif_ops;
729 	dev->destructor = free_netdev;
730 }
731 
732 /*
733  * Helper function to initialise an interface to a specific type.
734  */
735 static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata,
736 				  enum nl80211_iftype type)
737 {
738 	/* clear type-dependent union */
739 	memset(&sdata->u, 0, sizeof(sdata->u));
740 
741 	/* and set some type-dependent values */
742 	sdata->vif.type = type;
743 	sdata->dev->netdev_ops = &ieee80211_dataif_ops;
744 	sdata->wdev.iftype = type;
745 
746 	/* only monitor differs */
747 	sdata->dev->type = ARPHRD_ETHER;
748 
749 	switch (type) {
750 	case NL80211_IFTYPE_AP:
751 		skb_queue_head_init(&sdata->u.ap.ps_bc_buf);
752 		INIT_LIST_HEAD(&sdata->u.ap.vlans);
753 		break;
754 	case NL80211_IFTYPE_STATION:
755 		ieee80211_sta_setup_sdata(sdata);
756 		break;
757 	case NL80211_IFTYPE_ADHOC:
758 		ieee80211_ibss_setup_sdata(sdata);
759 		break;
760 	case NL80211_IFTYPE_MESH_POINT:
761 		if (ieee80211_vif_is_mesh(&sdata->vif))
762 			ieee80211_mesh_init_sdata(sdata);
763 		break;
764 	case NL80211_IFTYPE_MONITOR:
765 		sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP;
766 		sdata->dev->netdev_ops = &ieee80211_monitorif_ops;
767 		sdata->u.mntr_flags = MONITOR_FLAG_CONTROL |
768 				      MONITOR_FLAG_OTHER_BSS;
769 		break;
770 	case NL80211_IFTYPE_WDS:
771 	case NL80211_IFTYPE_AP_VLAN:
772 		break;
773 	case NL80211_IFTYPE_UNSPECIFIED:
774 	case __NL80211_IFTYPE_AFTER_LAST:
775 		BUG();
776 		break;
777 	}
778 
779 	ieee80211_debugfs_add_netdev(sdata);
780 }
781 
782 int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata,
783 			     enum nl80211_iftype type)
784 {
785 	ASSERT_RTNL();
786 
787 	if (type == sdata->vif.type)
788 		return 0;
789 
790 	/* Setting ad-hoc mode on non-IBSS channel is not supported. */
791 	if (sdata->local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS &&
792 	    type == NL80211_IFTYPE_ADHOC)
793 		return -EOPNOTSUPP;
794 
795 	/*
796 	 * We could, here, on changes between IBSS/STA/MESH modes,
797 	 * invoke an MLME function instead that disassociates etc.
798 	 * and goes into the requested mode.
799 	 */
800 
801 	if (ieee80211_sdata_running(sdata))
802 		return -EBUSY;
803 
804 	/* Purge and reset type-dependent state. */
805 	ieee80211_teardown_sdata(sdata->dev);
806 	ieee80211_setup_sdata(sdata, type);
807 
808 	/* reset some values that shouldn't be kept across type changes */
809 	sdata->vif.bss_conf.basic_rates =
810 		ieee80211_mandatory_rates(sdata->local,
811 			sdata->local->hw.conf.channel->band);
812 	sdata->drop_unencrypted = 0;
813 	if (type == NL80211_IFTYPE_STATION)
814 		sdata->u.mgd.use_4addr = false;
815 
816 	return 0;
817 }
818 
819 int ieee80211_if_add(struct ieee80211_local *local, const char *name,
820 		     struct net_device **new_dev, enum nl80211_iftype type,
821 		     struct vif_params *params)
822 {
823 	struct net_device *ndev;
824 	struct ieee80211_sub_if_data *sdata = NULL;
825 	int ret, i;
826 
827 	ASSERT_RTNL();
828 
829 	ndev = alloc_netdev_mq(sizeof(*sdata) + local->hw.vif_data_size,
830 			       name, ieee80211_if_setup, local->hw.queues);
831 	if (!ndev)
832 		return -ENOMEM;
833 	dev_net_set(ndev, wiphy_net(local->hw.wiphy));
834 
835 	ndev->needed_headroom = local->tx_headroom +
836 				4*6 /* four MAC addresses */
837 				+ 2 + 2 + 2 + 2 /* ctl, dur, seq, qos */
838 				+ 6 /* mesh */
839 				+ 8 /* rfc1042/bridge tunnel */
840 				- ETH_HLEN /* ethernet hard_header_len */
841 				+ IEEE80211_ENCRYPT_HEADROOM;
842 	ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM;
843 
844 	ret = dev_alloc_name(ndev, ndev->name);
845 	if (ret < 0)
846 		goto fail;
847 
848 	memcpy(ndev->dev_addr, local->hw.wiphy->perm_addr, ETH_ALEN);
849 	memcpy(ndev->perm_addr, ndev->dev_addr, ETH_ALEN);
850 	SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy));
851 
852 	/* don't use IEEE80211_DEV_TO_SUB_IF because it checks too much */
853 	sdata = netdev_priv(ndev);
854 	ndev->ieee80211_ptr = &sdata->wdev;
855 	memcpy(sdata->vif.addr, ndev->dev_addr, ETH_ALEN);
856 	memcpy(sdata->name, ndev->name, IFNAMSIZ);
857 
858 	/* initialise type-independent data */
859 	sdata->wdev.wiphy = local->hw.wiphy;
860 	sdata->local = local;
861 	sdata->dev = ndev;
862 
863 	for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++)
864 		skb_queue_head_init(&sdata->fragments[i].skb_list);
865 
866 	INIT_LIST_HEAD(&sdata->key_list);
867 
868 	for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
869 		struct ieee80211_supported_band *sband;
870 		sband = local->hw.wiphy->bands[i];
871 		sdata->rc_rateidx_mask[i] =
872 			sband ? (1 << sband->n_bitrates) - 1 : 0;
873 	}
874 
875 	/* setup type-dependent data */
876 	ieee80211_setup_sdata(sdata, type);
877 
878 	if (params) {
879 		ndev->ieee80211_ptr->use_4addr = params->use_4addr;
880 		if (type == NL80211_IFTYPE_STATION)
881 			sdata->u.mgd.use_4addr = params->use_4addr;
882 	}
883 
884 	ret = register_netdevice(ndev);
885 	if (ret)
886 		goto fail;
887 
888 	if (ieee80211_vif_is_mesh(&sdata->vif) &&
889 	    params && params->mesh_id_len)
890 		ieee80211_sdata_set_mesh_id(sdata,
891 					    params->mesh_id_len,
892 					    params->mesh_id);
893 
894 	mutex_lock(&local->iflist_mtx);
895 	list_add_tail_rcu(&sdata->list, &local->interfaces);
896 	mutex_unlock(&local->iflist_mtx);
897 
898 	if (new_dev)
899 		*new_dev = ndev;
900 
901 	return 0;
902 
903  fail:
904 	free_netdev(ndev);
905 	return ret;
906 }
907 
908 void ieee80211_if_remove(struct ieee80211_sub_if_data *sdata)
909 {
910 	ASSERT_RTNL();
911 
912 	mutex_lock(&sdata->local->iflist_mtx);
913 	list_del_rcu(&sdata->list);
914 	mutex_unlock(&sdata->local->iflist_mtx);
915 
916 	synchronize_rcu();
917 	unregister_netdevice(sdata->dev);
918 }
919 
920 /*
921  * Remove all interfaces, may only be called at hardware unregistration
922  * time because it doesn't do RCU-safe list removals.
923  */
924 void ieee80211_remove_interfaces(struct ieee80211_local *local)
925 {
926 	struct ieee80211_sub_if_data *sdata, *tmp;
927 	LIST_HEAD(unreg_list);
928 
929 	ASSERT_RTNL();
930 
931 	mutex_lock(&local->iflist_mtx);
932 	list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) {
933 		list_del(&sdata->list);
934 
935 		unregister_netdevice_queue(sdata->dev, &unreg_list);
936 	}
937 	mutex_unlock(&local->iflist_mtx);
938 	unregister_netdevice_many(&unreg_list);
939 }
940 
941 static u32 ieee80211_idle_off(struct ieee80211_local *local,
942 			      const char *reason)
943 {
944 	if (!(local->hw.conf.flags & IEEE80211_CONF_IDLE))
945 		return 0;
946 
947 #ifdef CONFIG_MAC80211_VERBOSE_DEBUG
948 	printk(KERN_DEBUG "%s: device no longer idle - %s\n",
949 	       wiphy_name(local->hw.wiphy), reason);
950 #endif
951 
952 	local->hw.conf.flags &= ~IEEE80211_CONF_IDLE;
953 	return IEEE80211_CONF_CHANGE_IDLE;
954 }
955 
956 static u32 ieee80211_idle_on(struct ieee80211_local *local)
957 {
958 	if (local->hw.conf.flags & IEEE80211_CONF_IDLE)
959 		return 0;
960 
961 #ifdef CONFIG_MAC80211_VERBOSE_DEBUG
962 	printk(KERN_DEBUG "%s: device now idle\n",
963 	       wiphy_name(local->hw.wiphy));
964 #endif
965 
966 	drv_flush(local, false);
967 
968 	local->hw.conf.flags |= IEEE80211_CONF_IDLE;
969 	return IEEE80211_CONF_CHANGE_IDLE;
970 }
971 
972 u32 __ieee80211_recalc_idle(struct ieee80211_local *local)
973 {
974 	struct ieee80211_sub_if_data *sdata;
975 	int count = 0;
976 
977 	if (!list_empty(&local->work_list))
978 		return ieee80211_idle_off(local, "working");
979 
980 	if (local->scanning)
981 		return ieee80211_idle_off(local, "scanning");
982 
983 	list_for_each_entry(sdata, &local->interfaces, list) {
984 		if (!ieee80211_sdata_running(sdata))
985 			continue;
986 		/* do not count disabled managed interfaces */
987 		if (sdata->vif.type == NL80211_IFTYPE_STATION &&
988 		    !sdata->u.mgd.associated)
989 			continue;
990 		/* do not count unused IBSS interfaces */
991 		if (sdata->vif.type == NL80211_IFTYPE_ADHOC &&
992 		    !sdata->u.ibss.ssid_len)
993 			continue;
994 		/* count everything else */
995 		count++;
996 	}
997 
998 	if (!count)
999 		return ieee80211_idle_on(local);
1000 	else
1001 		return ieee80211_idle_off(local, "in use");
1002 
1003 	return 0;
1004 }
1005 
1006 void ieee80211_recalc_idle(struct ieee80211_local *local)
1007 {
1008 	u32 chg;
1009 
1010 	mutex_lock(&local->iflist_mtx);
1011 	chg = __ieee80211_recalc_idle(local);
1012 	mutex_unlock(&local->iflist_mtx);
1013 	if (chg)
1014 		ieee80211_hw_config(local, chg);
1015 }
1016 
1017 static int netdev_notify(struct notifier_block *nb,
1018 			 unsigned long state,
1019 			 void *ndev)
1020 {
1021 	struct net_device *dev = ndev;
1022 	struct ieee80211_sub_if_data *sdata;
1023 
1024 	if (state != NETDEV_CHANGENAME)
1025 		return 0;
1026 
1027 	if (!dev->ieee80211_ptr || !dev->ieee80211_ptr->wiphy)
1028 		return 0;
1029 
1030 	if (dev->ieee80211_ptr->wiphy->privid != mac80211_wiphy_privid)
1031 		return 0;
1032 
1033 	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1034 
1035 	memcpy(sdata->name, dev->name, IFNAMSIZ);
1036 
1037 	ieee80211_debugfs_rename_netdev(sdata);
1038 	return 0;
1039 }
1040 
1041 static struct notifier_block mac80211_netdev_notifier = {
1042 	.notifier_call = netdev_notify,
1043 };
1044 
1045 int ieee80211_iface_init(void)
1046 {
1047 	return register_netdevice_notifier(&mac80211_netdev_notifier);
1048 }
1049 
1050 void ieee80211_iface_exit(void)
1051 {
1052 	unregister_netdevice_notifier(&mac80211_netdev_notifier);
1053 }
1054