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