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