treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
[sfrench/cifs-2.6.git] / drivers / net / wireless / mac80211_hwsim.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * mac80211_hwsim - software simulator of 802.11 radio(s) for mac80211
4  * Copyright (c) 2008, Jouni Malinen <j@w1.fi>
5  * Copyright (c) 2011, Javier Lopez <jlopex@gmail.com>
6  * Copyright (c) 2016 - 2017 Intel Deutschland GmbH
7  * Copyright (C) 2018 Intel Corporation
8  */
9
10 /*
11  * TODO:
12  * - Add TSF sync and fix IBSS beacon transmission by adding
13  *   competition for "air time" at TBTT
14  * - RX filtering based on filter configuration (data->rx_filter)
15  */
16
17 #include <linux/list.h>
18 #include <linux/slab.h>
19 #include <linux/spinlock.h>
20 #include <net/dst.h>
21 #include <net/xfrm.h>
22 #include <net/mac80211.h>
23 #include <net/ieee80211_radiotap.h>
24 #include <linux/if_arp.h>
25 #include <linux/rtnetlink.h>
26 #include <linux/etherdevice.h>
27 #include <linux/platform_device.h>
28 #include <linux/debugfs.h>
29 #include <linux/module.h>
30 #include <linux/ktime.h>
31 #include <net/genetlink.h>
32 #include <net/net_namespace.h>
33 #include <net/netns/generic.h>
34 #include <linux/rhashtable.h>
35 #include <linux/nospec.h>
36 #include "mac80211_hwsim.h"
37
38 #define WARN_QUEUE 100
39 #define MAX_QUEUE 200
40
41 MODULE_AUTHOR("Jouni Malinen");
42 MODULE_DESCRIPTION("Software simulator of 802.11 radio(s) for mac80211");
43 MODULE_LICENSE("GPL");
44
45 static int radios = 2;
46 module_param(radios, int, 0444);
47 MODULE_PARM_DESC(radios, "Number of simulated radios");
48
49 static int channels = 1;
50 module_param(channels, int, 0444);
51 MODULE_PARM_DESC(channels, "Number of concurrent channels");
52
53 static bool paged_rx = false;
54 module_param(paged_rx, bool, 0644);
55 MODULE_PARM_DESC(paged_rx, "Use paged SKBs for RX instead of linear ones");
56
57 static bool rctbl = false;
58 module_param(rctbl, bool, 0444);
59 MODULE_PARM_DESC(rctbl, "Handle rate control table");
60
61 static bool support_p2p_device = true;
62 module_param(support_p2p_device, bool, 0444);
63 MODULE_PARM_DESC(support_p2p_device, "Support P2P-Device interface type");
64
65 /**
66  * enum hwsim_regtest - the type of regulatory tests we offer
67  *
68  * These are the different values you can use for the regtest
69  * module parameter. This is useful to help test world roaming
70  * and the driver regulatory_hint() call and combinations of these.
71  * If you want to do specific alpha2 regulatory domain tests simply
72  * use the userspace regulatory request as that will be respected as
73  * well without the need of this module parameter. This is designed
74  * only for testing the driver regulatory request, world roaming
75  * and all possible combinations.
76  *
77  * @HWSIM_REGTEST_DISABLED: No regulatory tests are performed,
78  *      this is the default value.
79  * @HWSIM_REGTEST_DRIVER_REG_FOLLOW: Used for testing the driver regulatory
80  *      hint, only one driver regulatory hint will be sent as such the
81  *      secondary radios are expected to follow.
82  * @HWSIM_REGTEST_DRIVER_REG_ALL: Used for testing the driver regulatory
83  *      request with all radios reporting the same regulatory domain.
84  * @HWSIM_REGTEST_DIFF_COUNTRY: Used for testing the drivers calling
85  *      different regulatory domains requests. Expected behaviour is for
86  *      an intersection to occur but each device will still use their
87  *      respective regulatory requested domains. Subsequent radios will
88  *      use the resulting intersection.
89  * @HWSIM_REGTEST_WORLD_ROAM: Used for testing the world roaming. We accomplish
90  *      this by using a custom beacon-capable regulatory domain for the first
91  *      radio. All other device world roam.
92  * @HWSIM_REGTEST_CUSTOM_WORLD: Used for testing the custom world regulatory
93  *      domain requests. All radios will adhere to this custom world regulatory
94  *      domain.
95  * @HWSIM_REGTEST_CUSTOM_WORLD_2: Used for testing 2 custom world regulatory
96  *      domain requests. The first radio will adhere to the first custom world
97  *      regulatory domain, the second one to the second custom world regulatory
98  *      domain. All other devices will world roam.
99  * @HWSIM_REGTEST_STRICT_FOLLOW_: Used for testing strict regulatory domain
100  *      settings, only the first radio will send a regulatory domain request
101  *      and use strict settings. The rest of the radios are expected to follow.
102  * @HWSIM_REGTEST_STRICT_ALL: Used for testing strict regulatory domain
103  *      settings. All radios will adhere to this.
104  * @HWSIM_REGTEST_STRICT_AND_DRIVER_REG: Used for testing strict regulatory
105  *      domain settings, combined with secondary driver regulatory domain
106  *      settings. The first radio will get a strict regulatory domain setting
107  *      using the first driver regulatory request and the second radio will use
108  *      non-strict settings using the second driver regulatory request. All
109  *      other devices should follow the intersection created between the
110  *      first two.
111  * @HWSIM_REGTEST_ALL: Used for testing every possible mix. You will need
112  *      at least 6 radios for a complete test. We will test in this order:
113  *      1 - driver custom world regulatory domain
114  *      2 - second custom world regulatory domain
115  *      3 - first driver regulatory domain request
116  *      4 - second driver regulatory domain request
117  *      5 - strict regulatory domain settings using the third driver regulatory
118  *          domain request
119  *      6 and on - should follow the intersection of the 3rd, 4rth and 5th radio
120  *                 regulatory requests.
121  */
122 enum hwsim_regtest {
123         HWSIM_REGTEST_DISABLED = 0,
124         HWSIM_REGTEST_DRIVER_REG_FOLLOW = 1,
125         HWSIM_REGTEST_DRIVER_REG_ALL = 2,
126         HWSIM_REGTEST_DIFF_COUNTRY = 3,
127         HWSIM_REGTEST_WORLD_ROAM = 4,
128         HWSIM_REGTEST_CUSTOM_WORLD = 5,
129         HWSIM_REGTEST_CUSTOM_WORLD_2 = 6,
130         HWSIM_REGTEST_STRICT_FOLLOW = 7,
131         HWSIM_REGTEST_STRICT_ALL = 8,
132         HWSIM_REGTEST_STRICT_AND_DRIVER_REG = 9,
133         HWSIM_REGTEST_ALL = 10,
134 };
135
136 /* Set to one of the HWSIM_REGTEST_* values above */
137 static int regtest = HWSIM_REGTEST_DISABLED;
138 module_param(regtest, int, 0444);
139 MODULE_PARM_DESC(regtest, "The type of regulatory test we want to run");
140
141 static const char *hwsim_alpha2s[] = {
142         "FI",
143         "AL",
144         "US",
145         "DE",
146         "JP",
147         "AL",
148 };
149
150 static const struct ieee80211_regdomain hwsim_world_regdom_custom_01 = {
151         .n_reg_rules = 4,
152         .alpha2 =  "99",
153         .reg_rules = {
154                 REG_RULE(2412-10, 2462+10, 40, 0, 20, 0),
155                 REG_RULE(2484-10, 2484+10, 40, 0, 20, 0),
156                 REG_RULE(5150-10, 5240+10, 40, 0, 30, 0),
157                 REG_RULE(5745-10, 5825+10, 40, 0, 30, 0),
158         }
159 };
160
161 static const struct ieee80211_regdomain hwsim_world_regdom_custom_02 = {
162         .n_reg_rules = 2,
163         .alpha2 =  "99",
164         .reg_rules = {
165                 REG_RULE(2412-10, 2462+10, 40, 0, 20, 0),
166                 REG_RULE(5725-10, 5850+10, 40, 0, 30,
167                          NL80211_RRF_NO_IR),
168         }
169 };
170
171 static const struct ieee80211_regdomain *hwsim_world_regdom_custom[] = {
172         &hwsim_world_regdom_custom_01,
173         &hwsim_world_regdom_custom_02,
174 };
175
176 struct hwsim_vif_priv {
177         u32 magic;
178         u8 bssid[ETH_ALEN];
179         bool assoc;
180         bool bcn_en;
181         u16 aid;
182 };
183
184 #define HWSIM_VIF_MAGIC 0x69537748
185
186 static inline void hwsim_check_magic(struct ieee80211_vif *vif)
187 {
188         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
189         WARN(vp->magic != HWSIM_VIF_MAGIC,
190              "Invalid VIF (%p) magic %#x, %pM, %d/%d\n",
191              vif, vp->magic, vif->addr, vif->type, vif->p2p);
192 }
193
194 static inline void hwsim_set_magic(struct ieee80211_vif *vif)
195 {
196         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
197         vp->magic = HWSIM_VIF_MAGIC;
198 }
199
200 static inline void hwsim_clear_magic(struct ieee80211_vif *vif)
201 {
202         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
203         vp->magic = 0;
204 }
205
206 struct hwsim_sta_priv {
207         u32 magic;
208 };
209
210 #define HWSIM_STA_MAGIC 0x6d537749
211
212 static inline void hwsim_check_sta_magic(struct ieee80211_sta *sta)
213 {
214         struct hwsim_sta_priv *sp = (void *)sta->drv_priv;
215         WARN_ON(sp->magic != HWSIM_STA_MAGIC);
216 }
217
218 static inline void hwsim_set_sta_magic(struct ieee80211_sta *sta)
219 {
220         struct hwsim_sta_priv *sp = (void *)sta->drv_priv;
221         sp->magic = HWSIM_STA_MAGIC;
222 }
223
224 static inline void hwsim_clear_sta_magic(struct ieee80211_sta *sta)
225 {
226         struct hwsim_sta_priv *sp = (void *)sta->drv_priv;
227         sp->magic = 0;
228 }
229
230 struct hwsim_chanctx_priv {
231         u32 magic;
232 };
233
234 #define HWSIM_CHANCTX_MAGIC 0x6d53774a
235
236 static inline void hwsim_check_chanctx_magic(struct ieee80211_chanctx_conf *c)
237 {
238         struct hwsim_chanctx_priv *cp = (void *)c->drv_priv;
239         WARN_ON(cp->magic != HWSIM_CHANCTX_MAGIC);
240 }
241
242 static inline void hwsim_set_chanctx_magic(struct ieee80211_chanctx_conf *c)
243 {
244         struct hwsim_chanctx_priv *cp = (void *)c->drv_priv;
245         cp->magic = HWSIM_CHANCTX_MAGIC;
246 }
247
248 static inline void hwsim_clear_chanctx_magic(struct ieee80211_chanctx_conf *c)
249 {
250         struct hwsim_chanctx_priv *cp = (void *)c->drv_priv;
251         cp->magic = 0;
252 }
253
254 static unsigned int hwsim_net_id;
255
256 static DEFINE_IDA(hwsim_netgroup_ida);
257
258 struct hwsim_net {
259         int netgroup;
260         u32 wmediumd;
261 };
262
263 static inline int hwsim_net_get_netgroup(struct net *net)
264 {
265         struct hwsim_net *hwsim_net = net_generic(net, hwsim_net_id);
266
267         return hwsim_net->netgroup;
268 }
269
270 static inline int hwsim_net_set_netgroup(struct net *net)
271 {
272         struct hwsim_net *hwsim_net = net_generic(net, hwsim_net_id);
273
274         hwsim_net->netgroup = ida_simple_get(&hwsim_netgroup_ida,
275                                              0, 0, GFP_KERNEL);
276         return hwsim_net->netgroup >= 0 ? 0 : -ENOMEM;
277 }
278
279 static inline u32 hwsim_net_get_wmediumd(struct net *net)
280 {
281         struct hwsim_net *hwsim_net = net_generic(net, hwsim_net_id);
282
283         return hwsim_net->wmediumd;
284 }
285
286 static inline void hwsim_net_set_wmediumd(struct net *net, u32 portid)
287 {
288         struct hwsim_net *hwsim_net = net_generic(net, hwsim_net_id);
289
290         hwsim_net->wmediumd = portid;
291 }
292
293 static struct class *hwsim_class;
294
295 static struct net_device *hwsim_mon; /* global monitor netdev */
296
297 #define CHAN2G(_freq)  { \
298         .band = NL80211_BAND_2GHZ, \
299         .center_freq = (_freq), \
300         .hw_value = (_freq), \
301         .max_power = 20, \
302 }
303
304 #define CHAN5G(_freq) { \
305         .band = NL80211_BAND_5GHZ, \
306         .center_freq = (_freq), \
307         .hw_value = (_freq), \
308         .max_power = 20, \
309 }
310
311 static const struct ieee80211_channel hwsim_channels_2ghz[] = {
312         CHAN2G(2412), /* Channel 1 */
313         CHAN2G(2417), /* Channel 2 */
314         CHAN2G(2422), /* Channel 3 */
315         CHAN2G(2427), /* Channel 4 */
316         CHAN2G(2432), /* Channel 5 */
317         CHAN2G(2437), /* Channel 6 */
318         CHAN2G(2442), /* Channel 7 */
319         CHAN2G(2447), /* Channel 8 */
320         CHAN2G(2452), /* Channel 9 */
321         CHAN2G(2457), /* Channel 10 */
322         CHAN2G(2462), /* Channel 11 */
323         CHAN2G(2467), /* Channel 12 */
324         CHAN2G(2472), /* Channel 13 */
325         CHAN2G(2484), /* Channel 14 */
326 };
327
328 static const struct ieee80211_channel hwsim_channels_5ghz[] = {
329         CHAN5G(5180), /* Channel 36 */
330         CHAN5G(5200), /* Channel 40 */
331         CHAN5G(5220), /* Channel 44 */
332         CHAN5G(5240), /* Channel 48 */
333
334         CHAN5G(5260), /* Channel 52 */
335         CHAN5G(5280), /* Channel 56 */
336         CHAN5G(5300), /* Channel 60 */
337         CHAN5G(5320), /* Channel 64 */
338
339         CHAN5G(5500), /* Channel 100 */
340         CHAN5G(5520), /* Channel 104 */
341         CHAN5G(5540), /* Channel 108 */
342         CHAN5G(5560), /* Channel 112 */
343         CHAN5G(5580), /* Channel 116 */
344         CHAN5G(5600), /* Channel 120 */
345         CHAN5G(5620), /* Channel 124 */
346         CHAN5G(5640), /* Channel 128 */
347         CHAN5G(5660), /* Channel 132 */
348         CHAN5G(5680), /* Channel 136 */
349         CHAN5G(5700), /* Channel 140 */
350
351         CHAN5G(5745), /* Channel 149 */
352         CHAN5G(5765), /* Channel 153 */
353         CHAN5G(5785), /* Channel 157 */
354         CHAN5G(5805), /* Channel 161 */
355         CHAN5G(5825), /* Channel 165 */
356         CHAN5G(5845), /* Channel 169 */
357 };
358
359 static const struct ieee80211_rate hwsim_rates[] = {
360         { .bitrate = 10 },
361         { .bitrate = 20, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
362         { .bitrate = 55, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
363         { .bitrate = 110, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
364         { .bitrate = 60 },
365         { .bitrate = 90 },
366         { .bitrate = 120 },
367         { .bitrate = 180 },
368         { .bitrate = 240 },
369         { .bitrate = 360 },
370         { .bitrate = 480 },
371         { .bitrate = 540 }
372 };
373
374 static const u32 hwsim_ciphers[] = {
375         WLAN_CIPHER_SUITE_WEP40,
376         WLAN_CIPHER_SUITE_WEP104,
377         WLAN_CIPHER_SUITE_TKIP,
378         WLAN_CIPHER_SUITE_CCMP,
379         WLAN_CIPHER_SUITE_CCMP_256,
380         WLAN_CIPHER_SUITE_GCMP,
381         WLAN_CIPHER_SUITE_GCMP_256,
382         WLAN_CIPHER_SUITE_AES_CMAC,
383         WLAN_CIPHER_SUITE_BIP_CMAC_256,
384         WLAN_CIPHER_SUITE_BIP_GMAC_128,
385         WLAN_CIPHER_SUITE_BIP_GMAC_256,
386 };
387
388 #define OUI_QCA 0x001374
389 #define QCA_NL80211_SUBCMD_TEST 1
390 enum qca_nl80211_vendor_subcmds {
391         QCA_WLAN_VENDOR_ATTR_TEST = 8,
392         QCA_WLAN_VENDOR_ATTR_MAX = QCA_WLAN_VENDOR_ATTR_TEST
393 };
394
395 static const struct nla_policy
396 hwsim_vendor_test_policy[QCA_WLAN_VENDOR_ATTR_MAX + 1] = {
397         [QCA_WLAN_VENDOR_ATTR_MAX] = { .type = NLA_U32 },
398 };
399
400 static int mac80211_hwsim_vendor_cmd_test(struct wiphy *wiphy,
401                                           struct wireless_dev *wdev,
402                                           const void *data, int data_len)
403 {
404         struct sk_buff *skb;
405         struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_MAX + 1];
406         int err;
407         u32 val;
408
409         err = nla_parse_deprecated(tb, QCA_WLAN_VENDOR_ATTR_MAX, data,
410                                    data_len, hwsim_vendor_test_policy, NULL);
411         if (err)
412                 return err;
413         if (!tb[QCA_WLAN_VENDOR_ATTR_TEST])
414                 return -EINVAL;
415         val = nla_get_u32(tb[QCA_WLAN_VENDOR_ATTR_TEST]);
416         wiphy_dbg(wiphy, "%s: test=%u\n", __func__, val);
417
418         /* Send a vendor event as a test. Note that this would not normally be
419          * done within a command handler, but rather, based on some other
420          * trigger. For simplicity, this command is used to trigger the event
421          * here.
422          *
423          * event_idx = 0 (index in mac80211_hwsim_vendor_commands)
424          */
425         skb = cfg80211_vendor_event_alloc(wiphy, wdev, 100, 0, GFP_KERNEL);
426         if (skb) {
427                 /* skb_put() or nla_put() will fill up data within
428                  * NL80211_ATTR_VENDOR_DATA.
429                  */
430
431                 /* Add vendor data */
432                 nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_TEST, val + 1);
433
434                 /* Send the event - this will call nla_nest_end() */
435                 cfg80211_vendor_event(skb, GFP_KERNEL);
436         }
437
438         /* Send a response to the command */
439         skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, 10);
440         if (!skb)
441                 return -ENOMEM;
442
443         /* skb_put() or nla_put() will fill up data within
444          * NL80211_ATTR_VENDOR_DATA
445          */
446         nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_TEST, val + 2);
447
448         return cfg80211_vendor_cmd_reply(skb);
449 }
450
451 static struct wiphy_vendor_command mac80211_hwsim_vendor_commands[] = {
452         {
453                 .info = { .vendor_id = OUI_QCA,
454                           .subcmd = QCA_NL80211_SUBCMD_TEST },
455                 .flags = WIPHY_VENDOR_CMD_NEED_NETDEV,
456                 .doit = mac80211_hwsim_vendor_cmd_test,
457         }
458 };
459
460 /* Advertise support vendor specific events */
461 static const struct nl80211_vendor_cmd_info mac80211_hwsim_vendor_events[] = {
462         { .vendor_id = OUI_QCA, .subcmd = 1 },
463 };
464
465 static spinlock_t hwsim_radio_lock;
466 static LIST_HEAD(hwsim_radios);
467 static struct rhashtable hwsim_radios_rht;
468 static int hwsim_radio_idx;
469 static int hwsim_radios_generation = 1;
470
471 static struct platform_driver mac80211_hwsim_driver = {
472         .driver = {
473                 .name = "mac80211_hwsim",
474         },
475 };
476
477 struct mac80211_hwsim_data {
478         struct list_head list;
479         struct rhash_head rht;
480         struct ieee80211_hw *hw;
481         struct device *dev;
482         struct ieee80211_supported_band bands[NUM_NL80211_BANDS];
483         struct ieee80211_channel channels_2ghz[ARRAY_SIZE(hwsim_channels_2ghz)];
484         struct ieee80211_channel channels_5ghz[ARRAY_SIZE(hwsim_channels_5ghz)];
485         struct ieee80211_rate rates[ARRAY_SIZE(hwsim_rates)];
486         struct ieee80211_iface_combination if_combination;
487         struct ieee80211_iface_limit if_limits[3];
488         int n_if_limits;
489
490         u32 ciphers[ARRAY_SIZE(hwsim_ciphers)];
491
492         struct mac_address addresses[2];
493         int channels, idx;
494         bool use_chanctx;
495         bool destroy_on_close;
496         u32 portid;
497         char alpha2[2];
498         const struct ieee80211_regdomain *regd;
499
500         struct ieee80211_channel *tmp_chan;
501         struct ieee80211_channel *roc_chan;
502         u32 roc_duration;
503         struct delayed_work roc_start;
504         struct delayed_work roc_done;
505         struct delayed_work hw_scan;
506         struct cfg80211_scan_request *hw_scan_request;
507         struct ieee80211_vif *hw_scan_vif;
508         int scan_chan_idx;
509         u8 scan_addr[ETH_ALEN];
510         struct {
511                 struct ieee80211_channel *channel;
512                 unsigned long next_start, start, end;
513         } survey_data[ARRAY_SIZE(hwsim_channels_2ghz) +
514                       ARRAY_SIZE(hwsim_channels_5ghz)];
515
516         struct ieee80211_channel *channel;
517         u64 beacon_int  /* beacon interval in us */;
518         unsigned int rx_filter;
519         bool started, idle, scanning;
520         struct mutex mutex;
521         struct hrtimer beacon_timer;
522         enum ps_mode {
523                 PS_DISABLED, PS_ENABLED, PS_AUTO_POLL, PS_MANUAL_POLL
524         } ps;
525         bool ps_poll_pending;
526         struct dentry *debugfs;
527
528         uintptr_t pending_cookie;
529         struct sk_buff_head pending;    /* packets pending */
530         /*
531          * Only radios in the same group can communicate together (the
532          * channel has to match too). Each bit represents a group. A
533          * radio can be in more than one group.
534          */
535         u64 group;
536
537         /* group shared by radios created in the same netns */
538         int netgroup;
539         /* wmediumd portid responsible for netgroup of this radio */
540         u32 wmediumd;
541
542         /* difference between this hw's clock and the real clock, in usecs */
543         s64 tsf_offset;
544         s64 bcn_delta;
545         /* absolute beacon transmission time. Used to cover up "tx" delay. */
546         u64 abs_bcn_ts;
547
548         /* Stats */
549         u64 tx_pkts;
550         u64 rx_pkts;
551         u64 tx_bytes;
552         u64 rx_bytes;
553         u64 tx_dropped;
554         u64 tx_failed;
555 };
556
557 static const struct rhashtable_params hwsim_rht_params = {
558         .nelem_hint = 2,
559         .automatic_shrinking = true,
560         .key_len = ETH_ALEN,
561         .key_offset = offsetof(struct mac80211_hwsim_data, addresses[1]),
562         .head_offset = offsetof(struct mac80211_hwsim_data, rht),
563 };
564
565 struct hwsim_radiotap_hdr {
566         struct ieee80211_radiotap_header hdr;
567         __le64 rt_tsft;
568         u8 rt_flags;
569         u8 rt_rate;
570         __le16 rt_channel;
571         __le16 rt_chbitmask;
572 } __packed;
573
574 struct hwsim_radiotap_ack_hdr {
575         struct ieee80211_radiotap_header hdr;
576         u8 rt_flags;
577         u8 pad;
578         __le16 rt_channel;
579         __le16 rt_chbitmask;
580 } __packed;
581
582 /* MAC80211_HWSIM netlink family */
583 static struct genl_family hwsim_genl_family;
584
585 enum hwsim_multicast_groups {
586         HWSIM_MCGRP_CONFIG,
587 };
588
589 static const struct genl_multicast_group hwsim_mcgrps[] = {
590         [HWSIM_MCGRP_CONFIG] = { .name = "config", },
591 };
592
593 /* MAC80211_HWSIM netlink policy */
594
595 static const struct nla_policy hwsim_genl_policy[HWSIM_ATTR_MAX + 1] = {
596         [HWSIM_ATTR_ADDR_RECEIVER] = { .type = NLA_UNSPEC, .len = ETH_ALEN },
597         [HWSIM_ATTR_ADDR_TRANSMITTER] = { .type = NLA_UNSPEC, .len = ETH_ALEN },
598         [HWSIM_ATTR_FRAME] = { .type = NLA_BINARY,
599                                .len = IEEE80211_MAX_DATA_LEN },
600         [HWSIM_ATTR_FLAGS] = { .type = NLA_U32 },
601         [HWSIM_ATTR_RX_RATE] = { .type = NLA_U32 },
602         [HWSIM_ATTR_SIGNAL] = { .type = NLA_U32 },
603         [HWSIM_ATTR_TX_INFO] = { .type = NLA_UNSPEC,
604                                  .len = IEEE80211_TX_MAX_RATES *
605                                         sizeof(struct hwsim_tx_rate)},
606         [HWSIM_ATTR_COOKIE] = { .type = NLA_U64 },
607         [HWSIM_ATTR_CHANNELS] = { .type = NLA_U32 },
608         [HWSIM_ATTR_RADIO_ID] = { .type = NLA_U32 },
609         [HWSIM_ATTR_REG_HINT_ALPHA2] = { .type = NLA_STRING, .len = 2 },
610         [HWSIM_ATTR_REG_CUSTOM_REG] = { .type = NLA_U32 },
611         [HWSIM_ATTR_REG_STRICT_REG] = { .type = NLA_FLAG },
612         [HWSIM_ATTR_SUPPORT_P2P_DEVICE] = { .type = NLA_FLAG },
613         [HWSIM_ATTR_DESTROY_RADIO_ON_CLOSE] = { .type = NLA_FLAG },
614         [HWSIM_ATTR_RADIO_NAME] = { .type = NLA_STRING },
615         [HWSIM_ATTR_NO_VIF] = { .type = NLA_FLAG },
616         [HWSIM_ATTR_FREQ] = { .type = NLA_U32 },
617         [HWSIM_ATTR_PERM_ADDR] = { .type = NLA_UNSPEC, .len = ETH_ALEN },
618         [HWSIM_ATTR_IFTYPE_SUPPORT] = { .type = NLA_U32 },
619         [HWSIM_ATTR_CIPHER_SUPPORT] = { .type = NLA_BINARY },
620 };
621
622 static void mac80211_hwsim_tx_frame(struct ieee80211_hw *hw,
623                                     struct sk_buff *skb,
624                                     struct ieee80211_channel *chan);
625
626 /* sysfs attributes */
627 static void hwsim_send_ps_poll(void *dat, u8 *mac, struct ieee80211_vif *vif)
628 {
629         struct mac80211_hwsim_data *data = dat;
630         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
631         struct sk_buff *skb;
632         struct ieee80211_pspoll *pspoll;
633
634         if (!vp->assoc)
635                 return;
636
637         wiphy_dbg(data->hw->wiphy,
638                   "%s: send PS-Poll to %pM for aid %d\n",
639                   __func__, vp->bssid, vp->aid);
640
641         skb = dev_alloc_skb(sizeof(*pspoll));
642         if (!skb)
643                 return;
644         pspoll = skb_put(skb, sizeof(*pspoll));
645         pspoll->frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL |
646                                             IEEE80211_STYPE_PSPOLL |
647                                             IEEE80211_FCTL_PM);
648         pspoll->aid = cpu_to_le16(0xc000 | vp->aid);
649         memcpy(pspoll->bssid, vp->bssid, ETH_ALEN);
650         memcpy(pspoll->ta, mac, ETH_ALEN);
651
652         rcu_read_lock();
653         mac80211_hwsim_tx_frame(data->hw, skb,
654                                 rcu_dereference(vif->chanctx_conf)->def.chan);
655         rcu_read_unlock();
656 }
657
658 static void hwsim_send_nullfunc(struct mac80211_hwsim_data *data, u8 *mac,
659                                 struct ieee80211_vif *vif, int ps)
660 {
661         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
662         struct sk_buff *skb;
663         struct ieee80211_hdr *hdr;
664
665         if (!vp->assoc)
666                 return;
667
668         wiphy_dbg(data->hw->wiphy,
669                   "%s: send data::nullfunc to %pM ps=%d\n",
670                   __func__, vp->bssid, ps);
671
672         skb = dev_alloc_skb(sizeof(*hdr));
673         if (!skb)
674                 return;
675         hdr = skb_put(skb, sizeof(*hdr) - ETH_ALEN);
676         hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
677                                          IEEE80211_STYPE_NULLFUNC |
678                                          IEEE80211_FCTL_TODS |
679                                          (ps ? IEEE80211_FCTL_PM : 0));
680         hdr->duration_id = cpu_to_le16(0);
681         memcpy(hdr->addr1, vp->bssid, ETH_ALEN);
682         memcpy(hdr->addr2, mac, ETH_ALEN);
683         memcpy(hdr->addr3, vp->bssid, ETH_ALEN);
684
685         rcu_read_lock();
686         mac80211_hwsim_tx_frame(data->hw, skb,
687                                 rcu_dereference(vif->chanctx_conf)->def.chan);
688         rcu_read_unlock();
689 }
690
691
692 static void hwsim_send_nullfunc_ps(void *dat, u8 *mac,
693                                    struct ieee80211_vif *vif)
694 {
695         struct mac80211_hwsim_data *data = dat;
696         hwsim_send_nullfunc(data, mac, vif, 1);
697 }
698
699 static void hwsim_send_nullfunc_no_ps(void *dat, u8 *mac,
700                                       struct ieee80211_vif *vif)
701 {
702         struct mac80211_hwsim_data *data = dat;
703         hwsim_send_nullfunc(data, mac, vif, 0);
704 }
705
706 static int hwsim_fops_ps_read(void *dat, u64 *val)
707 {
708         struct mac80211_hwsim_data *data = dat;
709         *val = data->ps;
710         return 0;
711 }
712
713 static int hwsim_fops_ps_write(void *dat, u64 val)
714 {
715         struct mac80211_hwsim_data *data = dat;
716         enum ps_mode old_ps;
717
718         if (val != PS_DISABLED && val != PS_ENABLED && val != PS_AUTO_POLL &&
719             val != PS_MANUAL_POLL)
720                 return -EINVAL;
721
722         if (val == PS_MANUAL_POLL) {
723                 if (data->ps != PS_ENABLED)
724                         return -EINVAL;
725                 local_bh_disable();
726                 ieee80211_iterate_active_interfaces_atomic(
727                         data->hw, IEEE80211_IFACE_ITER_NORMAL,
728                         hwsim_send_ps_poll, data);
729                 local_bh_enable();
730                 return 0;
731         }
732         old_ps = data->ps;
733         data->ps = val;
734
735         local_bh_disable();
736         if (old_ps == PS_DISABLED && val != PS_DISABLED) {
737                 ieee80211_iterate_active_interfaces_atomic(
738                         data->hw, IEEE80211_IFACE_ITER_NORMAL,
739                         hwsim_send_nullfunc_ps, data);
740         } else if (old_ps != PS_DISABLED && val == PS_DISABLED) {
741                 ieee80211_iterate_active_interfaces_atomic(
742                         data->hw, IEEE80211_IFACE_ITER_NORMAL,
743                         hwsim_send_nullfunc_no_ps, data);
744         }
745         local_bh_enable();
746
747         return 0;
748 }
749
750 DEFINE_SIMPLE_ATTRIBUTE(hwsim_fops_ps, hwsim_fops_ps_read, hwsim_fops_ps_write,
751                         "%llu\n");
752
753 static int hwsim_write_simulate_radar(void *dat, u64 val)
754 {
755         struct mac80211_hwsim_data *data = dat;
756
757         ieee80211_radar_detected(data->hw);
758
759         return 0;
760 }
761
762 DEFINE_SIMPLE_ATTRIBUTE(hwsim_simulate_radar, NULL,
763                         hwsim_write_simulate_radar, "%llu\n");
764
765 static int hwsim_fops_group_read(void *dat, u64 *val)
766 {
767         struct mac80211_hwsim_data *data = dat;
768         *val = data->group;
769         return 0;
770 }
771
772 static int hwsim_fops_group_write(void *dat, u64 val)
773 {
774         struct mac80211_hwsim_data *data = dat;
775         data->group = val;
776         return 0;
777 }
778
779 DEFINE_SIMPLE_ATTRIBUTE(hwsim_fops_group,
780                         hwsim_fops_group_read, hwsim_fops_group_write,
781                         "%llx\n");
782
783 static netdev_tx_t hwsim_mon_xmit(struct sk_buff *skb,
784                                         struct net_device *dev)
785 {
786         /* TODO: allow packet injection */
787         dev_kfree_skb(skb);
788         return NETDEV_TX_OK;
789 }
790
791 static inline u64 mac80211_hwsim_get_tsf_raw(void)
792 {
793         return ktime_to_us(ktime_get_real());
794 }
795
796 static __le64 __mac80211_hwsim_get_tsf(struct mac80211_hwsim_data *data)
797 {
798         u64 now = mac80211_hwsim_get_tsf_raw();
799         return cpu_to_le64(now + data->tsf_offset);
800 }
801
802 static u64 mac80211_hwsim_get_tsf(struct ieee80211_hw *hw,
803                                   struct ieee80211_vif *vif)
804 {
805         struct mac80211_hwsim_data *data = hw->priv;
806         return le64_to_cpu(__mac80211_hwsim_get_tsf(data));
807 }
808
809 static void mac80211_hwsim_set_tsf(struct ieee80211_hw *hw,
810                 struct ieee80211_vif *vif, u64 tsf)
811 {
812         struct mac80211_hwsim_data *data = hw->priv;
813         u64 now = mac80211_hwsim_get_tsf(hw, vif);
814         u32 bcn_int = data->beacon_int;
815         u64 delta = abs(tsf - now);
816
817         /* adjust after beaconing with new timestamp at old TBTT */
818         if (tsf > now) {
819                 data->tsf_offset += delta;
820                 data->bcn_delta = do_div(delta, bcn_int);
821         } else {
822                 data->tsf_offset -= delta;
823                 data->bcn_delta = -(s64)do_div(delta, bcn_int);
824         }
825 }
826
827 static void mac80211_hwsim_monitor_rx(struct ieee80211_hw *hw,
828                                       struct sk_buff *tx_skb,
829                                       struct ieee80211_channel *chan)
830 {
831         struct mac80211_hwsim_data *data = hw->priv;
832         struct sk_buff *skb;
833         struct hwsim_radiotap_hdr *hdr;
834         u16 flags;
835         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_skb);
836         struct ieee80211_rate *txrate = ieee80211_get_tx_rate(hw, info);
837
838         if (WARN_ON(!txrate))
839                 return;
840
841         if (!netif_running(hwsim_mon))
842                 return;
843
844         skb = skb_copy_expand(tx_skb, sizeof(*hdr), 0, GFP_ATOMIC);
845         if (skb == NULL)
846                 return;
847
848         hdr = skb_push(skb, sizeof(*hdr));
849         hdr->hdr.it_version = PKTHDR_RADIOTAP_VERSION;
850         hdr->hdr.it_pad = 0;
851         hdr->hdr.it_len = cpu_to_le16(sizeof(*hdr));
852         hdr->hdr.it_present = cpu_to_le32((1 << IEEE80211_RADIOTAP_FLAGS) |
853                                           (1 << IEEE80211_RADIOTAP_RATE) |
854                                           (1 << IEEE80211_RADIOTAP_TSFT) |
855                                           (1 << IEEE80211_RADIOTAP_CHANNEL));
856         hdr->rt_tsft = __mac80211_hwsim_get_tsf(data);
857         hdr->rt_flags = 0;
858         hdr->rt_rate = txrate->bitrate / 5;
859         hdr->rt_channel = cpu_to_le16(chan->center_freq);
860         flags = IEEE80211_CHAN_2GHZ;
861         if (txrate->flags & IEEE80211_RATE_ERP_G)
862                 flags |= IEEE80211_CHAN_OFDM;
863         else
864                 flags |= IEEE80211_CHAN_CCK;
865         hdr->rt_chbitmask = cpu_to_le16(flags);
866
867         skb->dev = hwsim_mon;
868         skb_reset_mac_header(skb);
869         skb->ip_summed = CHECKSUM_UNNECESSARY;
870         skb->pkt_type = PACKET_OTHERHOST;
871         skb->protocol = htons(ETH_P_802_2);
872         memset(skb->cb, 0, sizeof(skb->cb));
873         netif_rx(skb);
874 }
875
876
877 static void mac80211_hwsim_monitor_ack(struct ieee80211_channel *chan,
878                                        const u8 *addr)
879 {
880         struct sk_buff *skb;
881         struct hwsim_radiotap_ack_hdr *hdr;
882         u16 flags;
883         struct ieee80211_hdr *hdr11;
884
885         if (!netif_running(hwsim_mon))
886                 return;
887
888         skb = dev_alloc_skb(100);
889         if (skb == NULL)
890                 return;
891
892         hdr = skb_put(skb, sizeof(*hdr));
893         hdr->hdr.it_version = PKTHDR_RADIOTAP_VERSION;
894         hdr->hdr.it_pad = 0;
895         hdr->hdr.it_len = cpu_to_le16(sizeof(*hdr));
896         hdr->hdr.it_present = cpu_to_le32((1 << IEEE80211_RADIOTAP_FLAGS) |
897                                           (1 << IEEE80211_RADIOTAP_CHANNEL));
898         hdr->rt_flags = 0;
899         hdr->pad = 0;
900         hdr->rt_channel = cpu_to_le16(chan->center_freq);
901         flags = IEEE80211_CHAN_2GHZ;
902         hdr->rt_chbitmask = cpu_to_le16(flags);
903
904         hdr11 = skb_put(skb, 10);
905         hdr11->frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL |
906                                            IEEE80211_STYPE_ACK);
907         hdr11->duration_id = cpu_to_le16(0);
908         memcpy(hdr11->addr1, addr, ETH_ALEN);
909
910         skb->dev = hwsim_mon;
911         skb_reset_mac_header(skb);
912         skb->ip_summed = CHECKSUM_UNNECESSARY;
913         skb->pkt_type = PACKET_OTHERHOST;
914         skb->protocol = htons(ETH_P_802_2);
915         memset(skb->cb, 0, sizeof(skb->cb));
916         netif_rx(skb);
917 }
918
919 struct mac80211_hwsim_addr_match_data {
920         u8 addr[ETH_ALEN];
921         bool ret;
922 };
923
924 static void mac80211_hwsim_addr_iter(void *data, u8 *mac,
925                                      struct ieee80211_vif *vif)
926 {
927         struct mac80211_hwsim_addr_match_data *md = data;
928
929         if (memcmp(mac, md->addr, ETH_ALEN) == 0)
930                 md->ret = true;
931 }
932
933 static bool mac80211_hwsim_addr_match(struct mac80211_hwsim_data *data,
934                                       const u8 *addr)
935 {
936         struct mac80211_hwsim_addr_match_data md = {
937                 .ret = false,
938         };
939
940         if (data->scanning && memcmp(addr, data->scan_addr, ETH_ALEN) == 0)
941                 return true;
942
943         memcpy(md.addr, addr, ETH_ALEN);
944
945         ieee80211_iterate_active_interfaces_atomic(data->hw,
946                                                    IEEE80211_IFACE_ITER_NORMAL,
947                                                    mac80211_hwsim_addr_iter,
948                                                    &md);
949
950         return md.ret;
951 }
952
953 static bool hwsim_ps_rx_ok(struct mac80211_hwsim_data *data,
954                            struct sk_buff *skb)
955 {
956         switch (data->ps) {
957         case PS_DISABLED:
958                 return true;
959         case PS_ENABLED:
960                 return false;
961         case PS_AUTO_POLL:
962                 /* TODO: accept (some) Beacons by default and other frames only
963                  * if pending PS-Poll has been sent */
964                 return true;
965         case PS_MANUAL_POLL:
966                 /* Allow unicast frames to own address if there is a pending
967                  * PS-Poll */
968                 if (data->ps_poll_pending &&
969                     mac80211_hwsim_addr_match(data, skb->data + 4)) {
970                         data->ps_poll_pending = false;
971                         return true;
972                 }
973                 return false;
974         }
975
976         return true;
977 }
978
979 static int hwsim_unicast_netgroup(struct mac80211_hwsim_data *data,
980                                   struct sk_buff *skb, int portid)
981 {
982         struct net *net;
983         bool found = false;
984         int res = -ENOENT;
985
986         rcu_read_lock();
987         for_each_net_rcu(net) {
988                 if (data->netgroup == hwsim_net_get_netgroup(net)) {
989                         res = genlmsg_unicast(net, skb, portid);
990                         found = true;
991                         break;
992                 }
993         }
994         rcu_read_unlock();
995
996         if (!found)
997                 nlmsg_free(skb);
998
999         return res;
1000 }
1001
1002 static inline u16 trans_tx_rate_flags_ieee2hwsim(struct ieee80211_tx_rate *rate)
1003 {
1004         u16 result = 0;
1005
1006         if (rate->flags & IEEE80211_TX_RC_USE_RTS_CTS)
1007                 result |= MAC80211_HWSIM_TX_RC_USE_RTS_CTS;
1008         if (rate->flags & IEEE80211_TX_RC_USE_CTS_PROTECT)
1009                 result |= MAC80211_HWSIM_TX_RC_USE_CTS_PROTECT;
1010         if (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
1011                 result |= MAC80211_HWSIM_TX_RC_USE_SHORT_PREAMBLE;
1012         if (rate->flags & IEEE80211_TX_RC_MCS)
1013                 result |= MAC80211_HWSIM_TX_RC_MCS;
1014         if (rate->flags & IEEE80211_TX_RC_GREEN_FIELD)
1015                 result |= MAC80211_HWSIM_TX_RC_GREEN_FIELD;
1016         if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
1017                 result |= MAC80211_HWSIM_TX_RC_40_MHZ_WIDTH;
1018         if (rate->flags & IEEE80211_TX_RC_DUP_DATA)
1019                 result |= MAC80211_HWSIM_TX_RC_DUP_DATA;
1020         if (rate->flags & IEEE80211_TX_RC_SHORT_GI)
1021                 result |= MAC80211_HWSIM_TX_RC_SHORT_GI;
1022         if (rate->flags & IEEE80211_TX_RC_VHT_MCS)
1023                 result |= MAC80211_HWSIM_TX_RC_VHT_MCS;
1024         if (rate->flags & IEEE80211_TX_RC_80_MHZ_WIDTH)
1025                 result |= MAC80211_HWSIM_TX_RC_80_MHZ_WIDTH;
1026         if (rate->flags & IEEE80211_TX_RC_160_MHZ_WIDTH)
1027                 result |= MAC80211_HWSIM_TX_RC_160_MHZ_WIDTH;
1028
1029         return result;
1030 }
1031
1032 static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
1033                                        struct sk_buff *my_skb,
1034                                        int dst_portid)
1035 {
1036         struct sk_buff *skb;
1037         struct mac80211_hwsim_data *data = hw->priv;
1038         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) my_skb->data;
1039         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(my_skb);
1040         void *msg_head;
1041         unsigned int hwsim_flags = 0;
1042         int i;
1043         struct hwsim_tx_rate tx_attempts[IEEE80211_TX_MAX_RATES];
1044         struct hwsim_tx_rate_flag tx_attempts_flags[IEEE80211_TX_MAX_RATES];
1045         uintptr_t cookie;
1046
1047         if (data->ps != PS_DISABLED)
1048                 hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM);
1049         /* If the queue contains MAX_QUEUE skb's drop some */
1050         if (skb_queue_len(&data->pending) >= MAX_QUEUE) {
1051                 /* Droping until WARN_QUEUE level */
1052                 while (skb_queue_len(&data->pending) >= WARN_QUEUE) {
1053                         ieee80211_free_txskb(hw, skb_dequeue(&data->pending));
1054                         data->tx_dropped++;
1055                 }
1056         }
1057
1058         skb = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_ATOMIC);
1059         if (skb == NULL)
1060                 goto nla_put_failure;
1061
1062         msg_head = genlmsg_put(skb, 0, 0, &hwsim_genl_family, 0,
1063                                HWSIM_CMD_FRAME);
1064         if (msg_head == NULL) {
1065                 pr_debug("mac80211_hwsim: problem with msg_head\n");
1066                 goto nla_put_failure;
1067         }
1068
1069         if (nla_put(skb, HWSIM_ATTR_ADDR_TRANSMITTER,
1070                     ETH_ALEN, data->addresses[1].addr))
1071                 goto nla_put_failure;
1072
1073         /* We get the skb->data */
1074         if (nla_put(skb, HWSIM_ATTR_FRAME, my_skb->len, my_skb->data))
1075                 goto nla_put_failure;
1076
1077         /* We get the flags for this transmission, and we translate them to
1078            wmediumd flags  */
1079
1080         if (info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS)
1081                 hwsim_flags |= HWSIM_TX_CTL_REQ_TX_STATUS;
1082
1083         if (info->flags & IEEE80211_TX_CTL_NO_ACK)
1084                 hwsim_flags |= HWSIM_TX_CTL_NO_ACK;
1085
1086         if (nla_put_u32(skb, HWSIM_ATTR_FLAGS, hwsim_flags))
1087                 goto nla_put_failure;
1088
1089         if (nla_put_u32(skb, HWSIM_ATTR_FREQ, data->channel->center_freq))
1090                 goto nla_put_failure;
1091
1092         /* We get the tx control (rate and retries) info*/
1093
1094         for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
1095                 tx_attempts[i].idx = info->status.rates[i].idx;
1096                 tx_attempts_flags[i].idx = info->status.rates[i].idx;
1097                 tx_attempts[i].count = info->status.rates[i].count;
1098                 tx_attempts_flags[i].flags =
1099                                 trans_tx_rate_flags_ieee2hwsim(
1100                                                 &info->status.rates[i]);
1101         }
1102
1103         if (nla_put(skb, HWSIM_ATTR_TX_INFO,
1104                     sizeof(struct hwsim_tx_rate)*IEEE80211_TX_MAX_RATES,
1105                     tx_attempts))
1106                 goto nla_put_failure;
1107
1108         if (nla_put(skb, HWSIM_ATTR_TX_INFO_FLAGS,
1109                     sizeof(struct hwsim_tx_rate_flag) * IEEE80211_TX_MAX_RATES,
1110                     tx_attempts_flags))
1111                 goto nla_put_failure;
1112
1113         /* We create a cookie to identify this skb */
1114         data->pending_cookie++;
1115         cookie = data->pending_cookie;
1116         info->rate_driver_data[0] = (void *)cookie;
1117         if (nla_put_u64_64bit(skb, HWSIM_ATTR_COOKIE, cookie, HWSIM_ATTR_PAD))
1118                 goto nla_put_failure;
1119
1120         genlmsg_end(skb, msg_head);
1121         if (hwsim_unicast_netgroup(data, skb, dst_portid))
1122                 goto err_free_txskb;
1123
1124         /* Enqueue the packet */
1125         skb_queue_tail(&data->pending, my_skb);
1126         data->tx_pkts++;
1127         data->tx_bytes += my_skb->len;
1128         return;
1129
1130 nla_put_failure:
1131         nlmsg_free(skb);
1132 err_free_txskb:
1133         pr_debug("mac80211_hwsim: error occurred in %s\n", __func__);
1134         ieee80211_free_txskb(hw, my_skb);
1135         data->tx_failed++;
1136 }
1137
1138 static bool hwsim_chans_compat(struct ieee80211_channel *c1,
1139                                struct ieee80211_channel *c2)
1140 {
1141         if (!c1 || !c2)
1142                 return false;
1143
1144         return c1->center_freq == c2->center_freq;
1145 }
1146
1147 struct tx_iter_data {
1148         struct ieee80211_channel *channel;
1149         bool receive;
1150 };
1151
1152 static void mac80211_hwsim_tx_iter(void *_data, u8 *addr,
1153                                    struct ieee80211_vif *vif)
1154 {
1155         struct tx_iter_data *data = _data;
1156
1157         if (!vif->chanctx_conf)
1158                 return;
1159
1160         if (!hwsim_chans_compat(data->channel,
1161                                 rcu_dereference(vif->chanctx_conf)->def.chan))
1162                 return;
1163
1164         data->receive = true;
1165 }
1166
1167 static void mac80211_hwsim_add_vendor_rtap(struct sk_buff *skb)
1168 {
1169         /*
1170          * To enable this code, #define the HWSIM_RADIOTAP_OUI,
1171          * e.g. like this:
1172          * #define HWSIM_RADIOTAP_OUI "\x02\x00\x00"
1173          * (but you should use a valid OUI, not that)
1174          *
1175          * If anyone wants to 'donate' a radiotap OUI/subns code
1176          * please send a patch removing this #ifdef and changing
1177          * the values accordingly.
1178          */
1179 #ifdef HWSIM_RADIOTAP_OUI
1180         struct ieee80211_vendor_radiotap *rtap;
1181
1182         /*
1183          * Note that this code requires the headroom in the SKB
1184          * that was allocated earlier.
1185          */
1186         rtap = skb_push(skb, sizeof(*rtap) + 8 + 4);
1187         rtap->oui[0] = HWSIM_RADIOTAP_OUI[0];
1188         rtap->oui[1] = HWSIM_RADIOTAP_OUI[1];
1189         rtap->oui[2] = HWSIM_RADIOTAP_OUI[2];
1190         rtap->subns = 127;
1191
1192         /*
1193          * Radiotap vendor namespaces can (and should) also be
1194          * split into fields by using the standard radiotap
1195          * presence bitmap mechanism. Use just BIT(0) here for
1196          * the presence bitmap.
1197          */
1198         rtap->present = BIT(0);
1199         /* We have 8 bytes of (dummy) data */
1200         rtap->len = 8;
1201         /* For testing, also require it to be aligned */
1202         rtap->align = 8;
1203         /* And also test that padding works, 4 bytes */
1204         rtap->pad = 4;
1205         /* push the data */
1206         memcpy(rtap->data, "ABCDEFGH", 8);
1207         /* make sure to clear padding, mac80211 doesn't */
1208         memset(rtap->data + 8, 0, 4);
1209
1210         IEEE80211_SKB_RXCB(skb)->flag |= RX_FLAG_RADIOTAP_VENDOR_DATA;
1211 #endif
1212 }
1213
1214 static bool mac80211_hwsim_tx_frame_no_nl(struct ieee80211_hw *hw,
1215                                           struct sk_buff *skb,
1216                                           struct ieee80211_channel *chan)
1217 {
1218         struct mac80211_hwsim_data *data = hw->priv, *data2;
1219         bool ack = false;
1220         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
1221         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1222         struct ieee80211_rx_status rx_status;
1223         u64 now;
1224
1225         memset(&rx_status, 0, sizeof(rx_status));
1226         rx_status.flag |= RX_FLAG_MACTIME_START;
1227         rx_status.freq = chan->center_freq;
1228         rx_status.band = chan->band;
1229         if (info->control.rates[0].flags & IEEE80211_TX_RC_VHT_MCS) {
1230                 rx_status.rate_idx =
1231                         ieee80211_rate_get_vht_mcs(&info->control.rates[0]);
1232                 rx_status.nss =
1233                         ieee80211_rate_get_vht_nss(&info->control.rates[0]);
1234                 rx_status.encoding = RX_ENC_VHT;
1235         } else {
1236                 rx_status.rate_idx = info->control.rates[0].idx;
1237                 if (info->control.rates[0].flags & IEEE80211_TX_RC_MCS)
1238                         rx_status.encoding = RX_ENC_HT;
1239         }
1240         if (info->control.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
1241                 rx_status.bw = RATE_INFO_BW_40;
1242         else if (info->control.rates[0].flags & IEEE80211_TX_RC_80_MHZ_WIDTH)
1243                 rx_status.bw = RATE_INFO_BW_80;
1244         else if (info->control.rates[0].flags & IEEE80211_TX_RC_160_MHZ_WIDTH)
1245                 rx_status.bw = RATE_INFO_BW_160;
1246         else
1247                 rx_status.bw = RATE_INFO_BW_20;
1248         if (info->control.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
1249                 rx_status.enc_flags |= RX_ENC_FLAG_SHORT_GI;
1250         /* TODO: simulate real signal strength (and optional packet loss) */
1251         rx_status.signal = -50;
1252         if (info->control.vif)
1253                 rx_status.signal += info->control.vif->bss_conf.txpower;
1254
1255         if (data->ps != PS_DISABLED)
1256                 hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM);
1257
1258         /* release the skb's source info */
1259         skb_orphan(skb);
1260         skb_dst_drop(skb);
1261         skb->mark = 0;
1262         secpath_reset(skb);
1263         nf_reset(skb);
1264
1265         /*
1266          * Get absolute mactime here so all HWs RX at the "same time", and
1267          * absolute TX time for beacon mactime so the timestamp matches.
1268          * Giving beacons a different mactime than non-beacons looks messy, but
1269          * it helps the Toffset be exact and a ~10us mactime discrepancy
1270          * probably doesn't really matter.
1271          */
1272         if (ieee80211_is_beacon(hdr->frame_control) ||
1273             ieee80211_is_probe_resp(hdr->frame_control)) {
1274                 rx_status.boottime_ns = ktime_get_boot_ns();
1275                 now = data->abs_bcn_ts;
1276         } else {
1277                 now = mac80211_hwsim_get_tsf_raw();
1278         }
1279
1280         /* Copy skb to all enabled radios that are on the current frequency */
1281         spin_lock(&hwsim_radio_lock);
1282         list_for_each_entry(data2, &hwsim_radios, list) {
1283                 struct sk_buff *nskb;
1284                 struct tx_iter_data tx_iter_data = {
1285                         .receive = false,
1286                         .channel = chan,
1287                 };
1288
1289                 if (data == data2)
1290                         continue;
1291
1292                 if (!data2->started || (data2->idle && !data2->tmp_chan) ||
1293                     !hwsim_ps_rx_ok(data2, skb))
1294                         continue;
1295
1296                 if (!(data->group & data2->group))
1297                         continue;
1298
1299                 if (data->netgroup != data2->netgroup)
1300                         continue;
1301
1302                 if (!hwsim_chans_compat(chan, data2->tmp_chan) &&
1303                     !hwsim_chans_compat(chan, data2->channel)) {
1304                         ieee80211_iterate_active_interfaces_atomic(
1305                                 data2->hw, IEEE80211_IFACE_ITER_NORMAL,
1306                                 mac80211_hwsim_tx_iter, &tx_iter_data);
1307                         if (!tx_iter_data.receive)
1308                                 continue;
1309                 }
1310
1311                 /*
1312                  * reserve some space for our vendor and the normal
1313                  * radiotap header, since we're copying anyway
1314                  */
1315                 if (skb->len < PAGE_SIZE && paged_rx) {
1316                         struct page *page = alloc_page(GFP_ATOMIC);
1317
1318                         if (!page)
1319                                 continue;
1320
1321                         nskb = dev_alloc_skb(128);
1322                         if (!nskb) {
1323                                 __free_page(page);
1324                                 continue;
1325                         }
1326
1327                         memcpy(page_address(page), skb->data, skb->len);
1328                         skb_add_rx_frag(nskb, 0, page, 0, skb->len, skb->len);
1329                 } else {
1330                         nskb = skb_copy(skb, GFP_ATOMIC);
1331                         if (!nskb)
1332                                 continue;
1333                 }
1334
1335                 if (mac80211_hwsim_addr_match(data2, hdr->addr1))
1336                         ack = true;
1337
1338                 rx_status.mactime = now + data2->tsf_offset;
1339
1340                 memcpy(IEEE80211_SKB_RXCB(nskb), &rx_status, sizeof(rx_status));
1341
1342                 mac80211_hwsim_add_vendor_rtap(nskb);
1343
1344                 data2->rx_pkts++;
1345                 data2->rx_bytes += nskb->len;
1346                 ieee80211_rx_irqsafe(data2->hw, nskb);
1347         }
1348         spin_unlock(&hwsim_radio_lock);
1349
1350         return ack;
1351 }
1352
1353 static void mac80211_hwsim_tx(struct ieee80211_hw *hw,
1354                               struct ieee80211_tx_control *control,
1355                               struct sk_buff *skb)
1356 {
1357         struct mac80211_hwsim_data *data = hw->priv;
1358         struct ieee80211_tx_info *txi = IEEE80211_SKB_CB(skb);
1359         struct ieee80211_hdr *hdr = (void *)skb->data;
1360         struct ieee80211_chanctx_conf *chanctx_conf;
1361         struct ieee80211_channel *channel;
1362         bool ack;
1363         u32 _portid;
1364
1365         if (WARN_ON(skb->len < 10)) {
1366                 /* Should not happen; just a sanity check for addr1 use */
1367                 ieee80211_free_txskb(hw, skb);
1368                 return;
1369         }
1370
1371         if (!data->use_chanctx) {
1372                 channel = data->channel;
1373         } else if (txi->hw_queue == 4) {
1374                 channel = data->tmp_chan;
1375         } else {
1376                 chanctx_conf = rcu_dereference(txi->control.vif->chanctx_conf);
1377                 if (chanctx_conf)
1378                         channel = chanctx_conf->def.chan;
1379                 else
1380                         channel = NULL;
1381         }
1382
1383         if (WARN(!channel, "TX w/o channel - queue = %d\n", txi->hw_queue)) {
1384                 ieee80211_free_txskb(hw, skb);
1385                 return;
1386         }
1387
1388         if (data->idle && !data->tmp_chan) {
1389                 wiphy_dbg(hw->wiphy, "Trying to TX when idle - reject\n");
1390                 ieee80211_free_txskb(hw, skb);
1391                 return;
1392         }
1393
1394         if (txi->control.vif)
1395                 hwsim_check_magic(txi->control.vif);
1396         if (control->sta)
1397                 hwsim_check_sta_magic(control->sta);
1398
1399         if (ieee80211_hw_check(hw, SUPPORTS_RC_TABLE))
1400                 ieee80211_get_tx_rates(txi->control.vif, control->sta, skb,
1401                                        txi->control.rates,
1402                                        ARRAY_SIZE(txi->control.rates));
1403
1404         if (skb->len >= 24 + 8 &&
1405             ieee80211_is_probe_resp(hdr->frame_control)) {
1406                 /* fake header transmission time */
1407                 struct ieee80211_mgmt *mgmt;
1408                 struct ieee80211_rate *txrate;
1409                 u64 ts;
1410
1411                 mgmt = (struct ieee80211_mgmt *)skb->data;
1412                 txrate = ieee80211_get_tx_rate(hw, txi);
1413                 ts = mac80211_hwsim_get_tsf_raw();
1414                 mgmt->u.probe_resp.timestamp =
1415                         cpu_to_le64(ts + data->tsf_offset +
1416                                     24 * 8 * 10 / txrate->bitrate);
1417         }
1418
1419         mac80211_hwsim_monitor_rx(hw, skb, channel);
1420
1421         /* wmediumd mode check */
1422         _portid = READ_ONCE(data->wmediumd);
1423
1424         if (_portid)
1425                 return mac80211_hwsim_tx_frame_nl(hw, skb, _portid);
1426
1427         /* NO wmediumd detected, perfect medium simulation */
1428         data->tx_pkts++;
1429         data->tx_bytes += skb->len;
1430         ack = mac80211_hwsim_tx_frame_no_nl(hw, skb, channel);
1431
1432         if (ack && skb->len >= 16)
1433                 mac80211_hwsim_monitor_ack(channel, hdr->addr2);
1434
1435         ieee80211_tx_info_clear_status(txi);
1436
1437         /* frame was transmitted at most favorable rate at first attempt */
1438         txi->control.rates[0].count = 1;
1439         txi->control.rates[1].idx = -1;
1440
1441         if (!(txi->flags & IEEE80211_TX_CTL_NO_ACK) && ack)
1442                 txi->flags |= IEEE80211_TX_STAT_ACK;
1443         ieee80211_tx_status_irqsafe(hw, skb);
1444 }
1445
1446
1447 static int mac80211_hwsim_start(struct ieee80211_hw *hw)
1448 {
1449         struct mac80211_hwsim_data *data = hw->priv;
1450         wiphy_dbg(hw->wiphy, "%s\n", __func__);
1451         data->started = true;
1452         return 0;
1453 }
1454
1455
1456 static void mac80211_hwsim_stop(struct ieee80211_hw *hw)
1457 {
1458         struct mac80211_hwsim_data *data = hw->priv;
1459         data->started = false;
1460         hrtimer_cancel(&data->beacon_timer);
1461         wiphy_dbg(hw->wiphy, "%s\n", __func__);
1462 }
1463
1464
1465 static int mac80211_hwsim_add_interface(struct ieee80211_hw *hw,
1466                                         struct ieee80211_vif *vif)
1467 {
1468         wiphy_dbg(hw->wiphy, "%s (type=%d mac_addr=%pM)\n",
1469                   __func__, ieee80211_vif_type_p2p(vif),
1470                   vif->addr);
1471         hwsim_set_magic(vif);
1472
1473         vif->cab_queue = 0;
1474         vif->hw_queue[IEEE80211_AC_VO] = 0;
1475         vif->hw_queue[IEEE80211_AC_VI] = 1;
1476         vif->hw_queue[IEEE80211_AC_BE] = 2;
1477         vif->hw_queue[IEEE80211_AC_BK] = 3;
1478
1479         return 0;
1480 }
1481
1482
1483 static int mac80211_hwsim_change_interface(struct ieee80211_hw *hw,
1484                                            struct ieee80211_vif *vif,
1485                                            enum nl80211_iftype newtype,
1486                                            bool newp2p)
1487 {
1488         newtype = ieee80211_iftype_p2p(newtype, newp2p);
1489         wiphy_dbg(hw->wiphy,
1490                   "%s (old type=%d, new type=%d, mac_addr=%pM)\n",
1491                   __func__, ieee80211_vif_type_p2p(vif),
1492                     newtype, vif->addr);
1493         hwsim_check_magic(vif);
1494
1495         /*
1496          * interface may change from non-AP to AP in
1497          * which case this needs to be set up again
1498          */
1499         vif->cab_queue = 0;
1500
1501         return 0;
1502 }
1503
1504 static void mac80211_hwsim_remove_interface(
1505         struct ieee80211_hw *hw, struct ieee80211_vif *vif)
1506 {
1507         wiphy_dbg(hw->wiphy, "%s (type=%d mac_addr=%pM)\n",
1508                   __func__, ieee80211_vif_type_p2p(vif),
1509                   vif->addr);
1510         hwsim_check_magic(vif);
1511         hwsim_clear_magic(vif);
1512 }
1513
1514 static void mac80211_hwsim_tx_frame(struct ieee80211_hw *hw,
1515                                     struct sk_buff *skb,
1516                                     struct ieee80211_channel *chan)
1517 {
1518         struct mac80211_hwsim_data *data = hw->priv;
1519         u32 _pid = READ_ONCE(data->wmediumd);
1520
1521         if (ieee80211_hw_check(hw, SUPPORTS_RC_TABLE)) {
1522                 struct ieee80211_tx_info *txi = IEEE80211_SKB_CB(skb);
1523                 ieee80211_get_tx_rates(txi->control.vif, NULL, skb,
1524                                        txi->control.rates,
1525                                        ARRAY_SIZE(txi->control.rates));
1526         }
1527
1528         mac80211_hwsim_monitor_rx(hw, skb, chan);
1529
1530         if (_pid)
1531                 return mac80211_hwsim_tx_frame_nl(hw, skb, _pid);
1532
1533         mac80211_hwsim_tx_frame_no_nl(hw, skb, chan);
1534         dev_kfree_skb(skb);
1535 }
1536
1537 static void mac80211_hwsim_beacon_tx(void *arg, u8 *mac,
1538                                      struct ieee80211_vif *vif)
1539 {
1540         struct mac80211_hwsim_data *data = arg;
1541         struct ieee80211_hw *hw = data->hw;
1542         struct ieee80211_tx_info *info;
1543         struct ieee80211_rate *txrate;
1544         struct ieee80211_mgmt *mgmt;
1545         struct sk_buff *skb;
1546
1547         hwsim_check_magic(vif);
1548
1549         if (vif->type != NL80211_IFTYPE_AP &&
1550             vif->type != NL80211_IFTYPE_MESH_POINT &&
1551             vif->type != NL80211_IFTYPE_ADHOC)
1552                 return;
1553
1554         skb = ieee80211_beacon_get(hw, vif);
1555         if (skb == NULL)
1556                 return;
1557         info = IEEE80211_SKB_CB(skb);
1558         if (ieee80211_hw_check(hw, SUPPORTS_RC_TABLE))
1559                 ieee80211_get_tx_rates(vif, NULL, skb,
1560                                        info->control.rates,
1561                                        ARRAY_SIZE(info->control.rates));
1562
1563         txrate = ieee80211_get_tx_rate(hw, info);
1564
1565         mgmt = (struct ieee80211_mgmt *) skb->data;
1566         /* fake header transmission time */
1567         data->abs_bcn_ts = mac80211_hwsim_get_tsf_raw();
1568         mgmt->u.beacon.timestamp = cpu_to_le64(data->abs_bcn_ts +
1569                                                data->tsf_offset +
1570                                                24 * 8 * 10 / txrate->bitrate);
1571
1572         mac80211_hwsim_tx_frame(hw, skb,
1573                                 rcu_dereference(vif->chanctx_conf)->def.chan);
1574
1575         if (vif->csa_active && ieee80211_csa_is_complete(vif))
1576                 ieee80211_csa_finish(vif);
1577 }
1578
1579 static enum hrtimer_restart
1580 mac80211_hwsim_beacon(struct hrtimer *timer)
1581 {
1582         struct mac80211_hwsim_data *data =
1583                 container_of(timer, struct mac80211_hwsim_data, beacon_timer);
1584         struct ieee80211_hw *hw = data->hw;
1585         u64 bcn_int = data->beacon_int;
1586
1587         if (!data->started)
1588                 return HRTIMER_NORESTART;
1589
1590         ieee80211_iterate_active_interfaces_atomic(
1591                 hw, IEEE80211_IFACE_ITER_NORMAL,
1592                 mac80211_hwsim_beacon_tx, data);
1593
1594         /* beacon at new TBTT + beacon interval */
1595         if (data->bcn_delta) {
1596                 bcn_int -= data->bcn_delta;
1597                 data->bcn_delta = 0;
1598         }
1599         hrtimer_forward(&data->beacon_timer, hrtimer_get_expires(timer),
1600                         ns_to_ktime(bcn_int * NSEC_PER_USEC));
1601         return HRTIMER_RESTART;
1602 }
1603
1604 static const char * const hwsim_chanwidths[] = {
1605         [NL80211_CHAN_WIDTH_20_NOHT] = "noht",
1606         [NL80211_CHAN_WIDTH_20] = "ht20",
1607         [NL80211_CHAN_WIDTH_40] = "ht40",
1608         [NL80211_CHAN_WIDTH_80] = "vht80",
1609         [NL80211_CHAN_WIDTH_80P80] = "vht80p80",
1610         [NL80211_CHAN_WIDTH_160] = "vht160",
1611 };
1612
1613 static int mac80211_hwsim_config(struct ieee80211_hw *hw, u32 changed)
1614 {
1615         struct mac80211_hwsim_data *data = hw->priv;
1616         struct ieee80211_conf *conf = &hw->conf;
1617         static const char *smps_modes[IEEE80211_SMPS_NUM_MODES] = {
1618                 [IEEE80211_SMPS_AUTOMATIC] = "auto",
1619                 [IEEE80211_SMPS_OFF] = "off",
1620                 [IEEE80211_SMPS_STATIC] = "static",
1621                 [IEEE80211_SMPS_DYNAMIC] = "dynamic",
1622         };
1623         int idx;
1624
1625         if (conf->chandef.chan)
1626                 wiphy_dbg(hw->wiphy,
1627                           "%s (freq=%d(%d - %d)/%s idle=%d ps=%d smps=%s)\n",
1628                           __func__,
1629                           conf->chandef.chan->center_freq,
1630                           conf->chandef.center_freq1,
1631                           conf->chandef.center_freq2,
1632                           hwsim_chanwidths[conf->chandef.width],
1633                           !!(conf->flags & IEEE80211_CONF_IDLE),
1634                           !!(conf->flags & IEEE80211_CONF_PS),
1635                           smps_modes[conf->smps_mode]);
1636         else
1637                 wiphy_dbg(hw->wiphy,
1638                           "%s (freq=0 idle=%d ps=%d smps=%s)\n",
1639                           __func__,
1640                           !!(conf->flags & IEEE80211_CONF_IDLE),
1641                           !!(conf->flags & IEEE80211_CONF_PS),
1642                           smps_modes[conf->smps_mode]);
1643
1644         data->idle = !!(conf->flags & IEEE80211_CONF_IDLE);
1645
1646         WARN_ON(conf->chandef.chan && data->use_chanctx);
1647
1648         mutex_lock(&data->mutex);
1649         if (data->scanning && conf->chandef.chan) {
1650                 for (idx = 0; idx < ARRAY_SIZE(data->survey_data); idx++) {
1651                         if (data->survey_data[idx].channel == data->channel) {
1652                                 data->survey_data[idx].start =
1653                                         data->survey_data[idx].next_start;
1654                                 data->survey_data[idx].end = jiffies;
1655                                 break;
1656                         }
1657                 }
1658
1659                 data->channel = conf->chandef.chan;
1660
1661                 for (idx = 0; idx < ARRAY_SIZE(data->survey_data); idx++) {
1662                         if (data->survey_data[idx].channel &&
1663                             data->survey_data[idx].channel != data->channel)
1664                                 continue;
1665                         data->survey_data[idx].channel = data->channel;
1666                         data->survey_data[idx].next_start = jiffies;
1667                         break;
1668                 }
1669         } else {
1670                 data->channel = conf->chandef.chan;
1671         }
1672         mutex_unlock(&data->mutex);
1673
1674         if (!data->started || !data->beacon_int)
1675                 hrtimer_cancel(&data->beacon_timer);
1676         else if (!hrtimer_is_queued(&data->beacon_timer)) {
1677                 u64 tsf = mac80211_hwsim_get_tsf(hw, NULL);
1678                 u32 bcn_int = data->beacon_int;
1679                 u64 until_tbtt = bcn_int - do_div(tsf, bcn_int);
1680
1681                 hrtimer_start(&data->beacon_timer,
1682                               ns_to_ktime(until_tbtt * NSEC_PER_USEC),
1683                               HRTIMER_MODE_REL_SOFT);
1684         }
1685
1686         return 0;
1687 }
1688
1689
1690 static void mac80211_hwsim_configure_filter(struct ieee80211_hw *hw,
1691                                             unsigned int changed_flags,
1692                                             unsigned int *total_flags,u64 multicast)
1693 {
1694         struct mac80211_hwsim_data *data = hw->priv;
1695
1696         wiphy_dbg(hw->wiphy, "%s\n", __func__);
1697
1698         data->rx_filter = 0;
1699         if (*total_flags & FIF_ALLMULTI)
1700                 data->rx_filter |= FIF_ALLMULTI;
1701
1702         *total_flags = data->rx_filter;
1703 }
1704
1705 static void mac80211_hwsim_bcn_en_iter(void *data, u8 *mac,
1706                                        struct ieee80211_vif *vif)
1707 {
1708         unsigned int *count = data;
1709         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
1710
1711         if (vp->bcn_en)
1712                 (*count)++;
1713 }
1714
1715 static void mac80211_hwsim_bss_info_changed(struct ieee80211_hw *hw,
1716                                             struct ieee80211_vif *vif,
1717                                             struct ieee80211_bss_conf *info,
1718                                             u32 changed)
1719 {
1720         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
1721         struct mac80211_hwsim_data *data = hw->priv;
1722
1723         hwsim_check_magic(vif);
1724
1725         wiphy_dbg(hw->wiphy, "%s(changed=0x%x vif->addr=%pM)\n",
1726                   __func__, changed, vif->addr);
1727
1728         if (changed & BSS_CHANGED_BSSID) {
1729                 wiphy_dbg(hw->wiphy, "%s: BSSID changed: %pM\n",
1730                           __func__, info->bssid);
1731                 memcpy(vp->bssid, info->bssid, ETH_ALEN);
1732         }
1733
1734         if (changed & BSS_CHANGED_ASSOC) {
1735                 wiphy_dbg(hw->wiphy, "  ASSOC: assoc=%d aid=%d\n",
1736                           info->assoc, info->aid);
1737                 vp->assoc = info->assoc;
1738                 vp->aid = info->aid;
1739         }
1740
1741         if (changed & BSS_CHANGED_BEACON_ENABLED) {
1742                 wiphy_dbg(hw->wiphy, "  BCN EN: %d (BI=%u)\n",
1743                           info->enable_beacon, info->beacon_int);
1744                 vp->bcn_en = info->enable_beacon;
1745                 if (data->started &&
1746                     !hrtimer_is_queued(&data->beacon_timer) &&
1747                     info->enable_beacon) {
1748                         u64 tsf, until_tbtt;
1749                         u32 bcn_int;
1750                         data->beacon_int = info->beacon_int * 1024;
1751                         tsf = mac80211_hwsim_get_tsf(hw, vif);
1752                         bcn_int = data->beacon_int;
1753                         until_tbtt = bcn_int - do_div(tsf, bcn_int);
1754
1755                         hrtimer_start(&data->beacon_timer,
1756                                       ns_to_ktime(until_tbtt * NSEC_PER_USEC),
1757                                       HRTIMER_MODE_REL_SOFT);
1758                 } else if (!info->enable_beacon) {
1759                         unsigned int count = 0;
1760                         ieee80211_iterate_active_interfaces_atomic(
1761                                 data->hw, IEEE80211_IFACE_ITER_NORMAL,
1762                                 mac80211_hwsim_bcn_en_iter, &count);
1763                         wiphy_dbg(hw->wiphy, "  beaconing vifs remaining: %u",
1764                                   count);
1765                         if (count == 0) {
1766                                 hrtimer_cancel(&data->beacon_timer);
1767                                 data->beacon_int = 0;
1768                         }
1769                 }
1770         }
1771
1772         if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1773                 wiphy_dbg(hw->wiphy, "  ERP_CTS_PROT: %d\n",
1774                           info->use_cts_prot);
1775         }
1776
1777         if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1778                 wiphy_dbg(hw->wiphy, "  ERP_PREAMBLE: %d\n",
1779                           info->use_short_preamble);
1780         }
1781
1782         if (changed & BSS_CHANGED_ERP_SLOT) {
1783                 wiphy_dbg(hw->wiphy, "  ERP_SLOT: %d\n", info->use_short_slot);
1784         }
1785
1786         if (changed & BSS_CHANGED_HT) {
1787                 wiphy_dbg(hw->wiphy, "  HT: op_mode=0x%x\n",
1788                           info->ht_operation_mode);
1789         }
1790
1791         if (changed & BSS_CHANGED_BASIC_RATES) {
1792                 wiphy_dbg(hw->wiphy, "  BASIC_RATES: 0x%llx\n",
1793                           (unsigned long long) info->basic_rates);
1794         }
1795
1796         if (changed & BSS_CHANGED_TXPOWER)
1797                 wiphy_dbg(hw->wiphy, "  TX Power: %d dBm\n", info->txpower);
1798 }
1799
1800 static int mac80211_hwsim_sta_add(struct ieee80211_hw *hw,
1801                                   struct ieee80211_vif *vif,
1802                                   struct ieee80211_sta *sta)
1803 {
1804         hwsim_check_magic(vif);
1805         hwsim_set_sta_magic(sta);
1806
1807         return 0;
1808 }
1809
1810 static int mac80211_hwsim_sta_remove(struct ieee80211_hw *hw,
1811                                      struct ieee80211_vif *vif,
1812                                      struct ieee80211_sta *sta)
1813 {
1814         hwsim_check_magic(vif);
1815         hwsim_clear_sta_magic(sta);
1816
1817         return 0;
1818 }
1819
1820 static void mac80211_hwsim_sta_notify(struct ieee80211_hw *hw,
1821                                       struct ieee80211_vif *vif,
1822                                       enum sta_notify_cmd cmd,
1823                                       struct ieee80211_sta *sta)
1824 {
1825         hwsim_check_magic(vif);
1826
1827         switch (cmd) {
1828         case STA_NOTIFY_SLEEP:
1829         case STA_NOTIFY_AWAKE:
1830                 /* TODO: make good use of these flags */
1831                 break;
1832         default:
1833                 WARN(1, "Invalid sta notify: %d\n", cmd);
1834                 break;
1835         }
1836 }
1837
1838 static int mac80211_hwsim_set_tim(struct ieee80211_hw *hw,
1839                                   struct ieee80211_sta *sta,
1840                                   bool set)
1841 {
1842         hwsim_check_sta_magic(sta);
1843         return 0;
1844 }
1845
1846 static int mac80211_hwsim_conf_tx(
1847         struct ieee80211_hw *hw,
1848         struct ieee80211_vif *vif, u16 queue,
1849         const struct ieee80211_tx_queue_params *params)
1850 {
1851         wiphy_dbg(hw->wiphy,
1852                   "%s (queue=%d txop=%d cw_min=%d cw_max=%d aifs=%d)\n",
1853                   __func__, queue,
1854                   params->txop, params->cw_min,
1855                   params->cw_max, params->aifs);
1856         return 0;
1857 }
1858
1859 static int mac80211_hwsim_get_survey(struct ieee80211_hw *hw, int idx,
1860                                      struct survey_info *survey)
1861 {
1862         struct mac80211_hwsim_data *hwsim = hw->priv;
1863
1864         if (idx < 0 || idx >= ARRAY_SIZE(hwsim->survey_data))
1865                 return -ENOENT;
1866
1867         mutex_lock(&hwsim->mutex);
1868         survey->channel = hwsim->survey_data[idx].channel;
1869         if (!survey->channel) {
1870                 mutex_unlock(&hwsim->mutex);
1871                 return -ENOENT;
1872         }
1873
1874         /*
1875          * Magically conjured dummy values --- this is only ok for simulated hardware.
1876          *
1877          * A real driver which cannot determine real values noise MUST NOT
1878          * report any, especially not a magically conjured ones :-)
1879          */
1880         survey->filled = SURVEY_INFO_NOISE_DBM |
1881                          SURVEY_INFO_TIME |
1882                          SURVEY_INFO_TIME_BUSY;
1883         survey->noise = -92;
1884         survey->time =
1885                 jiffies_to_msecs(hwsim->survey_data[idx].end -
1886                                  hwsim->survey_data[idx].start);
1887         /* report 12.5% of channel time is used */
1888         survey->time_busy = survey->time/8;
1889         mutex_unlock(&hwsim->mutex);
1890
1891         return 0;
1892 }
1893
1894 #ifdef CONFIG_NL80211_TESTMODE
1895 /*
1896  * This section contains example code for using netlink
1897  * attributes with the testmode command in nl80211.
1898  */
1899
1900 /* These enums need to be kept in sync with userspace */
1901 enum hwsim_testmode_attr {
1902         __HWSIM_TM_ATTR_INVALID = 0,
1903         HWSIM_TM_ATTR_CMD       = 1,
1904         HWSIM_TM_ATTR_PS        = 2,
1905
1906         /* keep last */
1907         __HWSIM_TM_ATTR_AFTER_LAST,
1908         HWSIM_TM_ATTR_MAX       = __HWSIM_TM_ATTR_AFTER_LAST - 1
1909 };
1910
1911 enum hwsim_testmode_cmd {
1912         HWSIM_TM_CMD_SET_PS             = 0,
1913         HWSIM_TM_CMD_GET_PS             = 1,
1914         HWSIM_TM_CMD_STOP_QUEUES        = 2,
1915         HWSIM_TM_CMD_WAKE_QUEUES        = 3,
1916 };
1917
1918 static const struct nla_policy hwsim_testmode_policy[HWSIM_TM_ATTR_MAX + 1] = {
1919         [HWSIM_TM_ATTR_CMD] = { .type = NLA_U32 },
1920         [HWSIM_TM_ATTR_PS] = { .type = NLA_U32 },
1921 };
1922
1923 static int mac80211_hwsim_testmode_cmd(struct ieee80211_hw *hw,
1924                                        struct ieee80211_vif *vif,
1925                                        void *data, int len)
1926 {
1927         struct mac80211_hwsim_data *hwsim = hw->priv;
1928         struct nlattr *tb[HWSIM_TM_ATTR_MAX + 1];
1929         struct sk_buff *skb;
1930         int err, ps;
1931
1932         err = nla_parse_deprecated(tb, HWSIM_TM_ATTR_MAX, data, len,
1933                                    hwsim_testmode_policy, NULL);
1934         if (err)
1935                 return err;
1936
1937         if (!tb[HWSIM_TM_ATTR_CMD])
1938                 return -EINVAL;
1939
1940         switch (nla_get_u32(tb[HWSIM_TM_ATTR_CMD])) {
1941         case HWSIM_TM_CMD_SET_PS:
1942                 if (!tb[HWSIM_TM_ATTR_PS])
1943                         return -EINVAL;
1944                 ps = nla_get_u32(tb[HWSIM_TM_ATTR_PS]);
1945                 return hwsim_fops_ps_write(hwsim, ps);
1946         case HWSIM_TM_CMD_GET_PS:
1947                 skb = cfg80211_testmode_alloc_reply_skb(hw->wiphy,
1948                                                 nla_total_size(sizeof(u32)));
1949                 if (!skb)
1950                         return -ENOMEM;
1951                 if (nla_put_u32(skb, HWSIM_TM_ATTR_PS, hwsim->ps))
1952                         goto nla_put_failure;
1953                 return cfg80211_testmode_reply(skb);
1954         case HWSIM_TM_CMD_STOP_QUEUES:
1955                 ieee80211_stop_queues(hw);
1956                 return 0;
1957         case HWSIM_TM_CMD_WAKE_QUEUES:
1958                 ieee80211_wake_queues(hw);
1959                 return 0;
1960         default:
1961                 return -EOPNOTSUPP;
1962         }
1963
1964  nla_put_failure:
1965         kfree_skb(skb);
1966         return -ENOBUFS;
1967 }
1968 #endif
1969
1970 static int mac80211_hwsim_ampdu_action(struct ieee80211_hw *hw,
1971                                        struct ieee80211_vif *vif,
1972                                        struct ieee80211_ampdu_params *params)
1973 {
1974         struct ieee80211_sta *sta = params->sta;
1975         enum ieee80211_ampdu_mlme_action action = params->action;
1976         u16 tid = params->tid;
1977
1978         switch (action) {
1979         case IEEE80211_AMPDU_TX_START:
1980                 ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1981                 break;
1982         case IEEE80211_AMPDU_TX_STOP_CONT:
1983         case IEEE80211_AMPDU_TX_STOP_FLUSH:
1984         case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
1985                 ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1986                 break;
1987         case IEEE80211_AMPDU_TX_OPERATIONAL:
1988                 break;
1989         case IEEE80211_AMPDU_RX_START:
1990         case IEEE80211_AMPDU_RX_STOP:
1991                 break;
1992         default:
1993                 return -EOPNOTSUPP;
1994         }
1995
1996         return 0;
1997 }
1998
1999 static void mac80211_hwsim_flush(struct ieee80211_hw *hw,
2000                                  struct ieee80211_vif *vif,
2001                                  u32 queues, bool drop)
2002 {
2003         /* Not implemented, queues only on kernel side */
2004 }
2005
2006 static void hw_scan_work(struct work_struct *work)
2007 {
2008         struct mac80211_hwsim_data *hwsim =
2009                 container_of(work, struct mac80211_hwsim_data, hw_scan.work);
2010         struct cfg80211_scan_request *req = hwsim->hw_scan_request;
2011         int dwell, i;
2012
2013         mutex_lock(&hwsim->mutex);
2014         if (hwsim->scan_chan_idx >= req->n_channels) {
2015                 struct cfg80211_scan_info info = {
2016                         .aborted = false,
2017                 };
2018
2019                 wiphy_dbg(hwsim->hw->wiphy, "hw scan complete\n");
2020                 ieee80211_scan_completed(hwsim->hw, &info);
2021                 hwsim->hw_scan_request = NULL;
2022                 hwsim->hw_scan_vif = NULL;
2023                 hwsim->tmp_chan = NULL;
2024                 mutex_unlock(&hwsim->mutex);
2025                 return;
2026         }
2027
2028         wiphy_dbg(hwsim->hw->wiphy, "hw scan %d MHz\n",
2029                   req->channels[hwsim->scan_chan_idx]->center_freq);
2030
2031         hwsim->tmp_chan = req->channels[hwsim->scan_chan_idx];
2032         if (hwsim->tmp_chan->flags & (IEEE80211_CHAN_NO_IR |
2033                                       IEEE80211_CHAN_RADAR) ||
2034             !req->n_ssids) {
2035                 dwell = 120;
2036         } else {
2037                 dwell = 30;
2038                 /* send probes */
2039                 for (i = 0; i < req->n_ssids; i++) {
2040                         struct sk_buff *probe;
2041                         struct ieee80211_mgmt *mgmt;
2042
2043                         probe = ieee80211_probereq_get(hwsim->hw,
2044                                                        hwsim->scan_addr,
2045                                                        req->ssids[i].ssid,
2046                                                        req->ssids[i].ssid_len,
2047                                                        req->ie_len);
2048                         if (!probe)
2049                                 continue;
2050
2051                         mgmt = (struct ieee80211_mgmt *) probe->data;
2052                         memcpy(mgmt->da, req->bssid, ETH_ALEN);
2053                         memcpy(mgmt->bssid, req->bssid, ETH_ALEN);
2054
2055                         if (req->ie_len)
2056                                 skb_put_data(probe, req->ie, req->ie_len);
2057
2058                         local_bh_disable();
2059                         mac80211_hwsim_tx_frame(hwsim->hw, probe,
2060                                                 hwsim->tmp_chan);
2061                         local_bh_enable();
2062                 }
2063         }
2064         ieee80211_queue_delayed_work(hwsim->hw, &hwsim->hw_scan,
2065                                      msecs_to_jiffies(dwell));
2066         hwsim->survey_data[hwsim->scan_chan_idx].channel = hwsim->tmp_chan;
2067         hwsim->survey_data[hwsim->scan_chan_idx].start = jiffies;
2068         hwsim->survey_data[hwsim->scan_chan_idx].end =
2069                 jiffies + msecs_to_jiffies(dwell);
2070         hwsim->scan_chan_idx++;
2071         mutex_unlock(&hwsim->mutex);
2072 }
2073
2074 static int mac80211_hwsim_hw_scan(struct ieee80211_hw *hw,
2075                                   struct ieee80211_vif *vif,
2076                                   struct ieee80211_scan_request *hw_req)
2077 {
2078         struct mac80211_hwsim_data *hwsim = hw->priv;
2079         struct cfg80211_scan_request *req = &hw_req->req;
2080
2081         mutex_lock(&hwsim->mutex);
2082         if (WARN_ON(hwsim->tmp_chan || hwsim->hw_scan_request)) {
2083                 mutex_unlock(&hwsim->mutex);
2084                 return -EBUSY;
2085         }
2086         hwsim->hw_scan_request = req;
2087         hwsim->hw_scan_vif = vif;
2088         hwsim->scan_chan_idx = 0;
2089         if (req->flags & NL80211_SCAN_FLAG_RANDOM_ADDR)
2090                 get_random_mask_addr(hwsim->scan_addr,
2091                                      hw_req->req.mac_addr,
2092                                      hw_req->req.mac_addr_mask);
2093         else
2094                 memcpy(hwsim->scan_addr, vif->addr, ETH_ALEN);
2095         memset(hwsim->survey_data, 0, sizeof(hwsim->survey_data));
2096         mutex_unlock(&hwsim->mutex);
2097
2098         wiphy_dbg(hw->wiphy, "hwsim hw_scan request\n");
2099
2100         ieee80211_queue_delayed_work(hwsim->hw, &hwsim->hw_scan, 0);
2101
2102         return 0;
2103 }
2104
2105 static void mac80211_hwsim_cancel_hw_scan(struct ieee80211_hw *hw,
2106                                           struct ieee80211_vif *vif)
2107 {
2108         struct mac80211_hwsim_data *hwsim = hw->priv;
2109         struct cfg80211_scan_info info = {
2110                 .aborted = true,
2111         };
2112
2113         wiphy_dbg(hw->wiphy, "hwsim cancel_hw_scan\n");
2114
2115         cancel_delayed_work_sync(&hwsim->hw_scan);
2116
2117         mutex_lock(&hwsim->mutex);
2118         ieee80211_scan_completed(hwsim->hw, &info);
2119         hwsim->tmp_chan = NULL;
2120         hwsim->hw_scan_request = NULL;
2121         hwsim->hw_scan_vif = NULL;
2122         mutex_unlock(&hwsim->mutex);
2123 }
2124
2125 static void mac80211_hwsim_sw_scan(struct ieee80211_hw *hw,
2126                                    struct ieee80211_vif *vif,
2127                                    const u8 *mac_addr)
2128 {
2129         struct mac80211_hwsim_data *hwsim = hw->priv;
2130
2131         mutex_lock(&hwsim->mutex);
2132
2133         if (hwsim->scanning) {
2134                 pr_debug("two hwsim sw_scans detected!\n");
2135                 goto out;
2136         }
2137
2138         pr_debug("hwsim sw_scan request, prepping stuff\n");
2139
2140         memcpy(hwsim->scan_addr, mac_addr, ETH_ALEN);
2141         hwsim->scanning = true;
2142         memset(hwsim->survey_data, 0, sizeof(hwsim->survey_data));
2143
2144 out:
2145         mutex_unlock(&hwsim->mutex);
2146 }
2147
2148 static void mac80211_hwsim_sw_scan_complete(struct ieee80211_hw *hw,
2149                                             struct ieee80211_vif *vif)
2150 {
2151         struct mac80211_hwsim_data *hwsim = hw->priv;
2152
2153         mutex_lock(&hwsim->mutex);
2154
2155         pr_debug("hwsim sw_scan_complete\n");
2156         hwsim->scanning = false;
2157         eth_zero_addr(hwsim->scan_addr);
2158
2159         mutex_unlock(&hwsim->mutex);
2160 }
2161
2162 static void hw_roc_start(struct work_struct *work)
2163 {
2164         struct mac80211_hwsim_data *hwsim =
2165                 container_of(work, struct mac80211_hwsim_data, roc_start.work);
2166
2167         mutex_lock(&hwsim->mutex);
2168
2169         wiphy_dbg(hwsim->hw->wiphy, "hwsim ROC begins\n");
2170         hwsim->tmp_chan = hwsim->roc_chan;
2171         ieee80211_ready_on_channel(hwsim->hw);
2172
2173         ieee80211_queue_delayed_work(hwsim->hw, &hwsim->roc_done,
2174                                      msecs_to_jiffies(hwsim->roc_duration));
2175
2176         mutex_unlock(&hwsim->mutex);
2177 }
2178
2179 static void hw_roc_done(struct work_struct *work)
2180 {
2181         struct mac80211_hwsim_data *hwsim =
2182                 container_of(work, struct mac80211_hwsim_data, roc_done.work);
2183
2184         mutex_lock(&hwsim->mutex);
2185         ieee80211_remain_on_channel_expired(hwsim->hw);
2186         hwsim->tmp_chan = NULL;
2187         mutex_unlock(&hwsim->mutex);
2188
2189         wiphy_dbg(hwsim->hw->wiphy, "hwsim ROC expired\n");
2190 }
2191
2192 static int mac80211_hwsim_roc(struct ieee80211_hw *hw,
2193                               struct ieee80211_vif *vif,
2194                               struct ieee80211_channel *chan,
2195                               int duration,
2196                               enum ieee80211_roc_type type)
2197 {
2198         struct mac80211_hwsim_data *hwsim = hw->priv;
2199
2200         mutex_lock(&hwsim->mutex);
2201         if (WARN_ON(hwsim->tmp_chan || hwsim->hw_scan_request)) {
2202                 mutex_unlock(&hwsim->mutex);
2203                 return -EBUSY;
2204         }
2205
2206         hwsim->roc_chan = chan;
2207         hwsim->roc_duration = duration;
2208         mutex_unlock(&hwsim->mutex);
2209
2210         wiphy_dbg(hw->wiphy, "hwsim ROC (%d MHz, %d ms)\n",
2211                   chan->center_freq, duration);
2212         ieee80211_queue_delayed_work(hw, &hwsim->roc_start, HZ/50);
2213
2214         return 0;
2215 }
2216
2217 static int mac80211_hwsim_croc(struct ieee80211_hw *hw)
2218 {
2219         struct mac80211_hwsim_data *hwsim = hw->priv;
2220
2221         cancel_delayed_work_sync(&hwsim->roc_start);
2222         cancel_delayed_work_sync(&hwsim->roc_done);
2223
2224         mutex_lock(&hwsim->mutex);
2225         hwsim->tmp_chan = NULL;
2226         mutex_unlock(&hwsim->mutex);
2227
2228         wiphy_dbg(hw->wiphy, "hwsim ROC canceled\n");
2229
2230         return 0;
2231 }
2232
2233 static int mac80211_hwsim_add_chanctx(struct ieee80211_hw *hw,
2234                                       struct ieee80211_chanctx_conf *ctx)
2235 {
2236         hwsim_set_chanctx_magic(ctx);
2237         wiphy_dbg(hw->wiphy,
2238                   "add channel context control: %d MHz/width: %d/cfreqs:%d/%d MHz\n",
2239                   ctx->def.chan->center_freq, ctx->def.width,
2240                   ctx->def.center_freq1, ctx->def.center_freq2);
2241         return 0;
2242 }
2243
2244 static void mac80211_hwsim_remove_chanctx(struct ieee80211_hw *hw,
2245                                           struct ieee80211_chanctx_conf *ctx)
2246 {
2247         wiphy_dbg(hw->wiphy,
2248                   "remove channel context control: %d MHz/width: %d/cfreqs:%d/%d MHz\n",
2249                   ctx->def.chan->center_freq, ctx->def.width,
2250                   ctx->def.center_freq1, ctx->def.center_freq2);
2251         hwsim_check_chanctx_magic(ctx);
2252         hwsim_clear_chanctx_magic(ctx);
2253 }
2254
2255 static void mac80211_hwsim_change_chanctx(struct ieee80211_hw *hw,
2256                                           struct ieee80211_chanctx_conf *ctx,
2257                                           u32 changed)
2258 {
2259         hwsim_check_chanctx_magic(ctx);
2260         wiphy_dbg(hw->wiphy,
2261                   "change channel context control: %d MHz/width: %d/cfreqs:%d/%d MHz\n",
2262                   ctx->def.chan->center_freq, ctx->def.width,
2263                   ctx->def.center_freq1, ctx->def.center_freq2);
2264 }
2265
2266 static int mac80211_hwsim_assign_vif_chanctx(struct ieee80211_hw *hw,
2267                                              struct ieee80211_vif *vif,
2268                                              struct ieee80211_chanctx_conf *ctx)
2269 {
2270         hwsim_check_magic(vif);
2271         hwsim_check_chanctx_magic(ctx);
2272
2273         return 0;
2274 }
2275
2276 static void mac80211_hwsim_unassign_vif_chanctx(struct ieee80211_hw *hw,
2277                                                 struct ieee80211_vif *vif,
2278                                                 struct ieee80211_chanctx_conf *ctx)
2279 {
2280         hwsim_check_magic(vif);
2281         hwsim_check_chanctx_magic(ctx);
2282 }
2283
2284 static const char mac80211_hwsim_gstrings_stats[][ETH_GSTRING_LEN] = {
2285         "tx_pkts_nic",
2286         "tx_bytes_nic",
2287         "rx_pkts_nic",
2288         "rx_bytes_nic",
2289         "d_tx_dropped",
2290         "d_tx_failed",
2291         "d_ps_mode",
2292         "d_group",
2293 };
2294
2295 #define MAC80211_HWSIM_SSTATS_LEN ARRAY_SIZE(mac80211_hwsim_gstrings_stats)
2296
2297 static void mac80211_hwsim_get_et_strings(struct ieee80211_hw *hw,
2298                                           struct ieee80211_vif *vif,
2299                                           u32 sset, u8 *data)
2300 {
2301         if (sset == ETH_SS_STATS)
2302                 memcpy(data, *mac80211_hwsim_gstrings_stats,
2303                        sizeof(mac80211_hwsim_gstrings_stats));
2304 }
2305
2306 static int mac80211_hwsim_get_et_sset_count(struct ieee80211_hw *hw,
2307                                             struct ieee80211_vif *vif, int sset)
2308 {
2309         if (sset == ETH_SS_STATS)
2310                 return MAC80211_HWSIM_SSTATS_LEN;
2311         return 0;
2312 }
2313
2314 static void mac80211_hwsim_get_et_stats(struct ieee80211_hw *hw,
2315                                         struct ieee80211_vif *vif,
2316                                         struct ethtool_stats *stats, u64 *data)
2317 {
2318         struct mac80211_hwsim_data *ar = hw->priv;
2319         int i = 0;
2320
2321         data[i++] = ar->tx_pkts;
2322         data[i++] = ar->tx_bytes;
2323         data[i++] = ar->rx_pkts;
2324         data[i++] = ar->rx_bytes;
2325         data[i++] = ar->tx_dropped;
2326         data[i++] = ar->tx_failed;
2327         data[i++] = ar->ps;
2328         data[i++] = ar->group;
2329
2330         WARN_ON(i != MAC80211_HWSIM_SSTATS_LEN);
2331 }
2332
2333 #define HWSIM_COMMON_OPS                                        \
2334         .tx = mac80211_hwsim_tx,                                \
2335         .start = mac80211_hwsim_start,                          \
2336         .stop = mac80211_hwsim_stop,                            \
2337         .add_interface = mac80211_hwsim_add_interface,          \
2338         .change_interface = mac80211_hwsim_change_interface,    \
2339         .remove_interface = mac80211_hwsim_remove_interface,    \
2340         .config = mac80211_hwsim_config,                        \
2341         .configure_filter = mac80211_hwsim_configure_filter,    \
2342         .bss_info_changed = mac80211_hwsim_bss_info_changed,    \
2343         .sta_add = mac80211_hwsim_sta_add,                      \
2344         .sta_remove = mac80211_hwsim_sta_remove,                \
2345         .sta_notify = mac80211_hwsim_sta_notify,                \
2346         .set_tim = mac80211_hwsim_set_tim,                      \
2347         .conf_tx = mac80211_hwsim_conf_tx,                      \
2348         .get_survey = mac80211_hwsim_get_survey,                \
2349         CFG80211_TESTMODE_CMD(mac80211_hwsim_testmode_cmd)      \
2350         .ampdu_action = mac80211_hwsim_ampdu_action,            \
2351         .flush = mac80211_hwsim_flush,                          \
2352         .get_tsf = mac80211_hwsim_get_tsf,                      \
2353         .set_tsf = mac80211_hwsim_set_tsf,                      \
2354         .get_et_sset_count = mac80211_hwsim_get_et_sset_count,  \
2355         .get_et_stats = mac80211_hwsim_get_et_stats,            \
2356         .get_et_strings = mac80211_hwsim_get_et_strings,
2357
2358 static const struct ieee80211_ops mac80211_hwsim_ops = {
2359         HWSIM_COMMON_OPS
2360         .sw_scan_start = mac80211_hwsim_sw_scan,
2361         .sw_scan_complete = mac80211_hwsim_sw_scan_complete,
2362 };
2363
2364 static const struct ieee80211_ops mac80211_hwsim_mchan_ops = {
2365         HWSIM_COMMON_OPS
2366         .hw_scan = mac80211_hwsim_hw_scan,
2367         .cancel_hw_scan = mac80211_hwsim_cancel_hw_scan,
2368         .sw_scan_start = NULL,
2369         .sw_scan_complete = NULL,
2370         .remain_on_channel = mac80211_hwsim_roc,
2371         .cancel_remain_on_channel = mac80211_hwsim_croc,
2372         .add_chanctx = mac80211_hwsim_add_chanctx,
2373         .remove_chanctx = mac80211_hwsim_remove_chanctx,
2374         .change_chanctx = mac80211_hwsim_change_chanctx,
2375         .assign_vif_chanctx = mac80211_hwsim_assign_vif_chanctx,
2376         .unassign_vif_chanctx = mac80211_hwsim_unassign_vif_chanctx,
2377 };
2378
2379 struct hwsim_new_radio_params {
2380         unsigned int channels;
2381         const char *reg_alpha2;
2382         const struct ieee80211_regdomain *regd;
2383         bool reg_strict;
2384         bool p2p_device;
2385         bool use_chanctx;
2386         bool destroy_on_close;
2387         const char *hwname;
2388         bool no_vif;
2389         const u8 *perm_addr;
2390         u32 iftypes;
2391         u32 *ciphers;
2392         u8 n_ciphers;
2393 };
2394
2395 static void hwsim_mcast_config_msg(struct sk_buff *mcast_skb,
2396                                    struct genl_info *info)
2397 {
2398         if (info)
2399                 genl_notify(&hwsim_genl_family, mcast_skb, info,
2400                             HWSIM_MCGRP_CONFIG, GFP_KERNEL);
2401         else
2402                 genlmsg_multicast(&hwsim_genl_family, mcast_skb, 0,
2403                                   HWSIM_MCGRP_CONFIG, GFP_KERNEL);
2404 }
2405
2406 static int append_radio_msg(struct sk_buff *skb, int id,
2407                             struct hwsim_new_radio_params *param)
2408 {
2409         int ret;
2410
2411         ret = nla_put_u32(skb, HWSIM_ATTR_RADIO_ID, id);
2412         if (ret < 0)
2413                 return ret;
2414
2415         if (param->channels) {
2416                 ret = nla_put_u32(skb, HWSIM_ATTR_CHANNELS, param->channels);
2417                 if (ret < 0)
2418                         return ret;
2419         }
2420
2421         if (param->reg_alpha2) {
2422                 ret = nla_put(skb, HWSIM_ATTR_REG_HINT_ALPHA2, 2,
2423                               param->reg_alpha2);
2424                 if (ret < 0)
2425                         return ret;
2426         }
2427
2428         if (param->regd) {
2429                 int i;
2430
2431                 for (i = 0; i < ARRAY_SIZE(hwsim_world_regdom_custom); i++) {
2432                         if (hwsim_world_regdom_custom[i] != param->regd)
2433                                 continue;
2434
2435                         ret = nla_put_u32(skb, HWSIM_ATTR_REG_CUSTOM_REG, i);
2436                         if (ret < 0)
2437                                 return ret;
2438                         break;
2439                 }
2440         }
2441
2442         if (param->reg_strict) {
2443                 ret = nla_put_flag(skb, HWSIM_ATTR_REG_STRICT_REG);
2444                 if (ret < 0)
2445                         return ret;
2446         }
2447
2448         if (param->p2p_device) {
2449                 ret = nla_put_flag(skb, HWSIM_ATTR_SUPPORT_P2P_DEVICE);
2450                 if (ret < 0)
2451                         return ret;
2452         }
2453
2454         if (param->use_chanctx) {
2455                 ret = nla_put_flag(skb, HWSIM_ATTR_USE_CHANCTX);
2456                 if (ret < 0)
2457                         return ret;
2458         }
2459
2460         if (param->hwname) {
2461                 ret = nla_put(skb, HWSIM_ATTR_RADIO_NAME,
2462                               strlen(param->hwname), param->hwname);
2463                 if (ret < 0)
2464                         return ret;
2465         }
2466
2467         return 0;
2468 }
2469
2470 static void hwsim_mcast_new_radio(int id, struct genl_info *info,
2471                                   struct hwsim_new_radio_params *param)
2472 {
2473         struct sk_buff *mcast_skb;
2474         void *data;
2475
2476         mcast_skb = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_KERNEL);
2477         if (!mcast_skb)
2478                 return;
2479
2480         data = genlmsg_put(mcast_skb, 0, 0, &hwsim_genl_family, 0,
2481                            HWSIM_CMD_NEW_RADIO);
2482         if (!data)
2483                 goto out_err;
2484
2485         if (append_radio_msg(mcast_skb, id, param) < 0)
2486                 goto out_err;
2487
2488         genlmsg_end(mcast_skb, data);
2489
2490         hwsim_mcast_config_msg(mcast_skb, info);
2491         return;
2492
2493 out_err:
2494         nlmsg_free(mcast_skb);
2495 }
2496
2497 static const struct ieee80211_sband_iftype_data he_capa_2ghz = {
2498         /* TODO: should we support other types, e.g., P2P?*/
2499         .types_mask = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_AP),
2500         .he_cap = {
2501                 .has_he = true,
2502                 .he_cap_elem = {
2503                         .mac_cap_info[0] =
2504                                 IEEE80211_HE_MAC_CAP0_HTC_HE,
2505                         .mac_cap_info[1] =
2506                                 IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US |
2507                                 IEEE80211_HE_MAC_CAP1_MULTI_TID_AGG_RX_QOS_8,
2508                         .mac_cap_info[2] =
2509                                 IEEE80211_HE_MAC_CAP2_BSR |
2510                                 IEEE80211_HE_MAC_CAP2_MU_CASCADING |
2511                                 IEEE80211_HE_MAC_CAP2_ACK_EN,
2512                         .mac_cap_info[3] =
2513                                 IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
2514                                 IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2,
2515                         .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU,
2516                         .phy_cap_info[1] =
2517                                 IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK |
2518                                 IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A |
2519                                 IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD |
2520                                 IEEE80211_HE_PHY_CAP1_MIDAMBLE_RX_TX_MAX_NSTS,
2521                         .phy_cap_info[2] =
2522                                 IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US |
2523                                 IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ |
2524                                 IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ |
2525                                 IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO |
2526                                 IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO,
2527
2528                         /* Leave all the other PHY capability bytes unset, as
2529                          * DCM, beam forming, RU and PPE threshold information
2530                          * are not supported
2531                          */
2532                 },
2533                 .he_mcs_nss_supp = {
2534                         .rx_mcs_80 = cpu_to_le16(0xfffa),
2535                         .tx_mcs_80 = cpu_to_le16(0xfffa),
2536                         .rx_mcs_160 = cpu_to_le16(0xffff),
2537                         .tx_mcs_160 = cpu_to_le16(0xffff),
2538                         .rx_mcs_80p80 = cpu_to_le16(0xffff),
2539                         .tx_mcs_80p80 = cpu_to_le16(0xffff),
2540                 },
2541         },
2542 };
2543
2544 static const struct ieee80211_sband_iftype_data he_capa_5ghz = {
2545         /* TODO: should we support other types, e.g., P2P?*/
2546         .types_mask = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_AP),
2547         .he_cap = {
2548                 .has_he = true,
2549                 .he_cap_elem = {
2550                         .mac_cap_info[0] =
2551                                 IEEE80211_HE_MAC_CAP0_HTC_HE,
2552                         .mac_cap_info[1] =
2553                                 IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US |
2554                                 IEEE80211_HE_MAC_CAP1_MULTI_TID_AGG_RX_QOS_8,
2555                         .mac_cap_info[2] =
2556                                 IEEE80211_HE_MAC_CAP2_BSR |
2557                                 IEEE80211_HE_MAC_CAP2_MU_CASCADING |
2558                                 IEEE80211_HE_MAC_CAP2_ACK_EN,
2559                         .mac_cap_info[3] =
2560                                 IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
2561                                 IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2,
2562                         .mac_cap_info[4] = IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU,
2563                         .phy_cap_info[0] =
2564                                 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
2565                                 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G |
2566                                 IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G,
2567                         .phy_cap_info[1] =
2568                                 IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK |
2569                                 IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A |
2570                                 IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD |
2571                                 IEEE80211_HE_PHY_CAP1_MIDAMBLE_RX_TX_MAX_NSTS,
2572                         .phy_cap_info[2] =
2573                                 IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US |
2574                                 IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ |
2575                                 IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ |
2576                                 IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO |
2577                                 IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO,
2578
2579                         /* Leave all the other PHY capability bytes unset, as
2580                          * DCM, beam forming, RU and PPE threshold information
2581                          * are not supported
2582                          */
2583                 },
2584                 .he_mcs_nss_supp = {
2585                         .rx_mcs_80 = cpu_to_le16(0xfffa),
2586                         .tx_mcs_80 = cpu_to_le16(0xfffa),
2587                         .rx_mcs_160 = cpu_to_le16(0xfffa),
2588                         .tx_mcs_160 = cpu_to_le16(0xfffa),
2589                         .rx_mcs_80p80 = cpu_to_le16(0xfffa),
2590                         .tx_mcs_80p80 = cpu_to_le16(0xfffa),
2591                 },
2592         },
2593 };
2594
2595 static void mac80211_hswim_he_capab(struct ieee80211_supported_band *sband)
2596 {
2597         if (sband->band == NL80211_BAND_2GHZ)
2598                 sband->iftype_data =
2599                         (struct ieee80211_sband_iftype_data *)&he_capa_2ghz;
2600         else if (sband->band == NL80211_BAND_5GHZ)
2601                 sband->iftype_data =
2602                         (struct ieee80211_sband_iftype_data *)&he_capa_5ghz;
2603         else
2604                 return;
2605
2606         sband->n_iftype_data = 1;
2607 }
2608
2609 #ifdef CONFIG_MAC80211_MESH
2610 #define HWSIM_MESH_BIT BIT(NL80211_IFTYPE_MESH_POINT)
2611 #else
2612 #define HWSIM_MESH_BIT 0
2613 #endif
2614
2615 #define HWSIM_DEFAULT_IF_LIMIT \
2616         (BIT(NL80211_IFTYPE_STATION) | \
2617          BIT(NL80211_IFTYPE_P2P_CLIENT) | \
2618          BIT(NL80211_IFTYPE_AP) | \
2619          BIT(NL80211_IFTYPE_P2P_GO) | \
2620          HWSIM_MESH_BIT)
2621
2622 #define HWSIM_IFTYPE_SUPPORT_MASK \
2623         (BIT(NL80211_IFTYPE_STATION) | \
2624          BIT(NL80211_IFTYPE_AP) | \
2625          BIT(NL80211_IFTYPE_P2P_CLIENT) | \
2626          BIT(NL80211_IFTYPE_P2P_GO) | \
2627          BIT(NL80211_IFTYPE_ADHOC) | \
2628          BIT(NL80211_IFTYPE_MESH_POINT))
2629
2630 static int mac80211_hwsim_new_radio(struct genl_info *info,
2631                                     struct hwsim_new_radio_params *param)
2632 {
2633         int err;
2634         u8 addr[ETH_ALEN];
2635         struct mac80211_hwsim_data *data;
2636         struct ieee80211_hw *hw;
2637         enum nl80211_band band;
2638         const struct ieee80211_ops *ops = &mac80211_hwsim_ops;
2639         struct net *net;
2640         int idx, i;
2641         int n_limits = 0;
2642
2643         if (WARN_ON(param->channels > 1 && !param->use_chanctx))
2644                 return -EINVAL;
2645
2646         spin_lock_bh(&hwsim_radio_lock);
2647         idx = hwsim_radio_idx++;
2648         spin_unlock_bh(&hwsim_radio_lock);
2649
2650         if (param->use_chanctx)
2651                 ops = &mac80211_hwsim_mchan_ops;
2652         hw = ieee80211_alloc_hw_nm(sizeof(*data), ops, param->hwname);
2653         if (!hw) {
2654                 pr_debug("mac80211_hwsim: ieee80211_alloc_hw failed\n");
2655                 err = -ENOMEM;
2656                 goto failed;
2657         }
2658
2659         /* ieee80211_alloc_hw_nm may have used a default name */
2660         param->hwname = wiphy_name(hw->wiphy);
2661
2662         if (info)
2663                 net = genl_info_net(info);
2664         else
2665                 net = &init_net;
2666         wiphy_net_set(hw->wiphy, net);
2667
2668         data = hw->priv;
2669         data->hw = hw;
2670
2671         data->dev = device_create(hwsim_class, NULL, 0, hw, "hwsim%d", idx);
2672         if (IS_ERR(data->dev)) {
2673                 printk(KERN_DEBUG
2674                        "mac80211_hwsim: device_create failed (%ld)\n",
2675                        PTR_ERR(data->dev));
2676                 err = -ENOMEM;
2677                 goto failed_drvdata;
2678         }
2679         data->dev->driver = &mac80211_hwsim_driver.driver;
2680         err = device_bind_driver(data->dev);
2681         if (err != 0) {
2682                 pr_debug("mac80211_hwsim: device_bind_driver failed (%d)\n",
2683                        err);
2684                 goto failed_bind;
2685         }
2686
2687         skb_queue_head_init(&data->pending);
2688
2689         SET_IEEE80211_DEV(hw, data->dev);
2690         if (!param->perm_addr) {
2691                 eth_zero_addr(addr);
2692                 addr[0] = 0x02;
2693                 addr[3] = idx >> 8;
2694                 addr[4] = idx;
2695                 memcpy(data->addresses[0].addr, addr, ETH_ALEN);
2696                 /* Why need here second address ? */
2697                 memcpy(data->addresses[1].addr, addr, ETH_ALEN);
2698                 data->addresses[1].addr[0] |= 0x40;
2699                 hw->wiphy->n_addresses = 2;
2700                 hw->wiphy->addresses = data->addresses;
2701                 /* possible address clash is checked at hash table insertion */
2702         } else {
2703                 memcpy(data->addresses[0].addr, param->perm_addr, ETH_ALEN);
2704                 /* compatibility with automatically generated mac addr */
2705                 memcpy(data->addresses[1].addr, param->perm_addr, ETH_ALEN);
2706                 hw->wiphy->n_addresses = 2;
2707                 hw->wiphy->addresses = data->addresses;
2708         }
2709
2710         data->channels = param->channels;
2711         data->use_chanctx = param->use_chanctx;
2712         data->idx = idx;
2713         data->destroy_on_close = param->destroy_on_close;
2714         if (info)
2715                 data->portid = info->snd_portid;
2716
2717         /* setup interface limits, only on interface types we support */
2718         if (param->iftypes & BIT(NL80211_IFTYPE_ADHOC)) {
2719                 data->if_limits[n_limits].max = 1;
2720                 data->if_limits[n_limits].types = BIT(NL80211_IFTYPE_ADHOC);
2721                 n_limits++;
2722         }
2723
2724         if (param->iftypes & HWSIM_DEFAULT_IF_LIMIT) {
2725                 data->if_limits[n_limits].max = 2048;
2726                 /*
2727                  * For this case, we may only support a subset of
2728                  * HWSIM_DEFAULT_IF_LIMIT, therefore we only want to add the
2729                  * bits that both param->iftype & HWSIM_DEFAULT_IF_LIMIT have.
2730                  */
2731                 data->if_limits[n_limits].types =
2732                                         HWSIM_DEFAULT_IF_LIMIT & param->iftypes;
2733                 n_limits++;
2734         }
2735
2736         if (param->iftypes & BIT(NL80211_IFTYPE_P2P_DEVICE)) {
2737                 data->if_limits[n_limits].max = 1;
2738                 data->if_limits[n_limits].types =
2739                                                 BIT(NL80211_IFTYPE_P2P_DEVICE);
2740                 n_limits++;
2741         }
2742
2743         if (data->use_chanctx) {
2744                 hw->wiphy->max_scan_ssids = 255;
2745                 hw->wiphy->max_scan_ie_len = IEEE80211_MAX_DATA_LEN;
2746                 hw->wiphy->max_remain_on_channel_duration = 1000;
2747                 data->if_combination.radar_detect_widths = 0;
2748                 data->if_combination.num_different_channels = data->channels;
2749         } else {
2750                 data->if_combination.num_different_channels = 1;
2751                 data->if_combination.radar_detect_widths =
2752                                         BIT(NL80211_CHAN_WIDTH_20_NOHT) |
2753                                         BIT(NL80211_CHAN_WIDTH_20) |
2754                                         BIT(NL80211_CHAN_WIDTH_40) |
2755                                         BIT(NL80211_CHAN_WIDTH_80) |
2756                                         BIT(NL80211_CHAN_WIDTH_160);
2757         }
2758
2759         if (!n_limits) {
2760                 err = -EINVAL;
2761                 goto failed_hw;
2762         }
2763
2764         data->if_combination.max_interfaces = 0;
2765         for (i = 0; i < n_limits; i++)
2766                 data->if_combination.max_interfaces +=
2767                         data->if_limits[i].max;
2768
2769         data->if_combination.n_limits = n_limits;
2770         data->if_combination.limits = data->if_limits;
2771
2772         /*
2773          * If we actually were asked to support combinations,
2774          * advertise them - if there's only a single thing like
2775          * only IBSS then don't advertise it as combinations.
2776          */
2777         if (data->if_combination.max_interfaces > 1) {
2778                 hw->wiphy->iface_combinations = &data->if_combination;
2779                 hw->wiphy->n_iface_combinations = 1;
2780         }
2781
2782         if (param->ciphers) {
2783                 memcpy(data->ciphers, param->ciphers,
2784                        param->n_ciphers * sizeof(u32));
2785                 hw->wiphy->cipher_suites = data->ciphers;
2786                 hw->wiphy->n_cipher_suites = param->n_ciphers;
2787         }
2788
2789         INIT_DELAYED_WORK(&data->roc_start, hw_roc_start);
2790         INIT_DELAYED_WORK(&data->roc_done, hw_roc_done);
2791         INIT_DELAYED_WORK(&data->hw_scan, hw_scan_work);
2792
2793         hw->queues = 5;
2794         hw->offchannel_tx_hw_queue = 4;
2795
2796         ieee80211_hw_set(hw, SUPPORT_FAST_XMIT);
2797         ieee80211_hw_set(hw, CHANCTX_STA_CSA);
2798         ieee80211_hw_set(hw, SUPPORTS_HT_CCK_RATES);
2799         ieee80211_hw_set(hw, QUEUE_CONTROL);
2800         ieee80211_hw_set(hw, WANT_MONITOR_VIF);
2801         ieee80211_hw_set(hw, AMPDU_AGGREGATION);
2802         ieee80211_hw_set(hw, MFP_CAPABLE);
2803         ieee80211_hw_set(hw, SIGNAL_DBM);
2804         ieee80211_hw_set(hw, SUPPORTS_PS);
2805         ieee80211_hw_set(hw, TDLS_WIDER_BW);
2806
2807         /* We only have SW crypto and only implement the A-MPDU API
2808          * (but don't really build A-MPDUs) so can have extended key
2809          * support
2810          */
2811         ieee80211_hw_set(hw, EXT_KEY_ID_NATIVE);
2812         if (rctbl)
2813                 ieee80211_hw_set(hw, SUPPORTS_RC_TABLE);
2814         ieee80211_hw_set(hw, SUPPORTS_MULTI_BSSID);
2815
2816         hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS |
2817                             WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL |
2818                             WIPHY_FLAG_AP_UAPSD |
2819                             WIPHY_FLAG_HAS_CHANNEL_SWITCH;
2820         hw->wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR |
2821                                NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE |
2822                                NL80211_FEATURE_STATIC_SMPS |
2823                                NL80211_FEATURE_DYNAMIC_SMPS |
2824                                NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR;
2825         wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
2826
2827         hw->wiphy->interface_modes = param->iftypes;
2828
2829         /* ask mac80211 to reserve space for magic */
2830         hw->vif_data_size = sizeof(struct hwsim_vif_priv);
2831         hw->sta_data_size = sizeof(struct hwsim_sta_priv);
2832         hw->chanctx_data_size = sizeof(struct hwsim_chanctx_priv);
2833
2834         memcpy(data->channels_2ghz, hwsim_channels_2ghz,
2835                 sizeof(hwsim_channels_2ghz));
2836         memcpy(data->channels_5ghz, hwsim_channels_5ghz,
2837                 sizeof(hwsim_channels_5ghz));
2838         memcpy(data->rates, hwsim_rates, sizeof(hwsim_rates));
2839
2840         for (band = NL80211_BAND_2GHZ; band < NUM_NL80211_BANDS; band++) {
2841                 struct ieee80211_supported_band *sband = &data->bands[band];
2842
2843                 sband->band = band;
2844
2845                 switch (band) {
2846                 case NL80211_BAND_2GHZ:
2847                         sband->channels = data->channels_2ghz;
2848                         sband->n_channels = ARRAY_SIZE(hwsim_channels_2ghz);
2849                         sband->bitrates = data->rates;
2850                         sband->n_bitrates = ARRAY_SIZE(hwsim_rates);
2851                         break;
2852                 case NL80211_BAND_5GHZ:
2853                         sband->channels = data->channels_5ghz;
2854                         sband->n_channels = ARRAY_SIZE(hwsim_channels_5ghz);
2855                         sband->bitrates = data->rates + 4;
2856                         sband->n_bitrates = ARRAY_SIZE(hwsim_rates) - 4;
2857
2858                         sband->vht_cap.vht_supported = true;
2859                         sband->vht_cap.cap =
2860                                 IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 |
2861                                 IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ |
2862                                 IEEE80211_VHT_CAP_RXLDPC |
2863                                 IEEE80211_VHT_CAP_SHORT_GI_80 |
2864                                 IEEE80211_VHT_CAP_SHORT_GI_160 |
2865                                 IEEE80211_VHT_CAP_TXSTBC |
2866                                 IEEE80211_VHT_CAP_RXSTBC_4 |
2867                                 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK;
2868                         sband->vht_cap.vht_mcs.rx_mcs_map =
2869                                 cpu_to_le16(IEEE80211_VHT_MCS_SUPPORT_0_9 << 0 |
2870                                             IEEE80211_VHT_MCS_SUPPORT_0_9 << 2 |
2871                                             IEEE80211_VHT_MCS_SUPPORT_0_9 << 4 |
2872                                             IEEE80211_VHT_MCS_SUPPORT_0_9 << 6 |
2873                                             IEEE80211_VHT_MCS_SUPPORT_0_9 << 8 |
2874                                             IEEE80211_VHT_MCS_SUPPORT_0_9 << 10 |
2875                                             IEEE80211_VHT_MCS_SUPPORT_0_9 << 12 |
2876                                             IEEE80211_VHT_MCS_SUPPORT_0_9 << 14);
2877                         sband->vht_cap.vht_mcs.tx_mcs_map =
2878                                 sband->vht_cap.vht_mcs.rx_mcs_map;
2879                         break;
2880                 default:
2881                         continue;
2882                 }
2883
2884                 sband->ht_cap.ht_supported = true;
2885                 sband->ht_cap.cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
2886                                     IEEE80211_HT_CAP_GRN_FLD |
2887                                     IEEE80211_HT_CAP_SGI_20 |
2888                                     IEEE80211_HT_CAP_SGI_40 |
2889                                     IEEE80211_HT_CAP_DSSSCCK40;
2890                 sband->ht_cap.ampdu_factor = 0x3;
2891                 sband->ht_cap.ampdu_density = 0x6;
2892                 memset(&sband->ht_cap.mcs, 0,
2893                        sizeof(sband->ht_cap.mcs));
2894                 sband->ht_cap.mcs.rx_mask[0] = 0xff;
2895                 sband->ht_cap.mcs.rx_mask[1] = 0xff;
2896                 sband->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
2897
2898                 mac80211_hswim_he_capab(sband);
2899
2900                 hw->wiphy->bands[band] = sband;
2901         }
2902
2903         /* By default all radios belong to the first group */
2904         data->group = 1;
2905         mutex_init(&data->mutex);
2906
2907         data->netgroup = hwsim_net_get_netgroup(net);
2908         data->wmediumd = hwsim_net_get_wmediumd(net);
2909
2910         /* Enable frame retransmissions for lossy channels */
2911         hw->max_rates = 4;
2912         hw->max_rate_tries = 11;
2913
2914         hw->wiphy->vendor_commands = mac80211_hwsim_vendor_commands;
2915         hw->wiphy->n_vendor_commands =
2916                 ARRAY_SIZE(mac80211_hwsim_vendor_commands);
2917         hw->wiphy->vendor_events = mac80211_hwsim_vendor_events;
2918         hw->wiphy->n_vendor_events = ARRAY_SIZE(mac80211_hwsim_vendor_events);
2919
2920         if (param->reg_strict)
2921                 hw->wiphy->regulatory_flags |= REGULATORY_STRICT_REG;
2922         if (param->regd) {
2923                 data->regd = param->regd;
2924                 hw->wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG;
2925                 wiphy_apply_custom_regulatory(hw->wiphy, param->regd);
2926                 /* give the regulatory workqueue a chance to run */
2927                 schedule_timeout_interruptible(1);
2928         }
2929
2930         if (param->no_vif)
2931                 ieee80211_hw_set(hw, NO_AUTO_VIF);
2932
2933         wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
2934
2935         hrtimer_init(&data->beacon_timer, CLOCK_MONOTONIC,
2936                      HRTIMER_MODE_ABS_SOFT);
2937         data->beacon_timer.function = mac80211_hwsim_beacon;
2938
2939         err = ieee80211_register_hw(hw);
2940         if (err < 0) {
2941                 pr_debug("mac80211_hwsim: ieee80211_register_hw failed (%d)\n",
2942                        err);
2943                 goto failed_hw;
2944         }
2945
2946         wiphy_dbg(hw->wiphy, "hwaddr %pM registered\n", hw->wiphy->perm_addr);
2947
2948         if (param->reg_alpha2) {
2949                 data->alpha2[0] = param->reg_alpha2[0];
2950                 data->alpha2[1] = param->reg_alpha2[1];
2951                 regulatory_hint(hw->wiphy, param->reg_alpha2);
2952         }
2953
2954         data->debugfs = debugfs_create_dir("hwsim", hw->wiphy->debugfsdir);
2955         debugfs_create_file("ps", 0666, data->debugfs, data, &hwsim_fops_ps);
2956         debugfs_create_file("group", 0666, data->debugfs, data,
2957                             &hwsim_fops_group);
2958         if (!data->use_chanctx)
2959                 debugfs_create_file("dfs_simulate_radar", 0222,
2960                                     data->debugfs,
2961                                     data, &hwsim_simulate_radar);
2962
2963         spin_lock_bh(&hwsim_radio_lock);
2964         err = rhashtable_insert_fast(&hwsim_radios_rht, &data->rht,
2965                                      hwsim_rht_params);
2966         if (err < 0) {
2967                 if (info) {
2968                         GENL_SET_ERR_MSG(info, "perm addr already present");
2969                         NL_SET_BAD_ATTR(info->extack,
2970                                         info->attrs[HWSIM_ATTR_PERM_ADDR]);
2971                 }
2972                 spin_unlock_bh(&hwsim_radio_lock);
2973                 goto failed_final_insert;
2974         }
2975
2976         list_add_tail(&data->list, &hwsim_radios);
2977         hwsim_radios_generation++;
2978         spin_unlock_bh(&hwsim_radio_lock);
2979
2980         hwsim_mcast_new_radio(idx, info, param);
2981
2982         return idx;
2983
2984 failed_final_insert:
2985         debugfs_remove_recursive(data->debugfs);
2986         ieee80211_unregister_hw(data->hw);
2987 failed_hw:
2988         device_release_driver(data->dev);
2989 failed_bind:
2990         device_unregister(data->dev);
2991 failed_drvdata:
2992         ieee80211_free_hw(hw);
2993 failed:
2994         return err;
2995 }
2996
2997 static void hwsim_mcast_del_radio(int id, const char *hwname,
2998                                   struct genl_info *info)
2999 {
3000         struct sk_buff *skb;
3001         void *data;
3002         int ret;
3003
3004         skb = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_KERNEL);
3005         if (!skb)
3006                 return;
3007
3008         data = genlmsg_put(skb, 0, 0, &hwsim_genl_family, 0,
3009                            HWSIM_CMD_DEL_RADIO);
3010         if (!data)
3011                 goto error;
3012
3013         ret = nla_put_u32(skb, HWSIM_ATTR_RADIO_ID, id);
3014         if (ret < 0)
3015                 goto error;
3016
3017         ret = nla_put(skb, HWSIM_ATTR_RADIO_NAME, strlen(hwname),
3018                       hwname);
3019         if (ret < 0)
3020                 goto error;
3021
3022         genlmsg_end(skb, data);
3023
3024         hwsim_mcast_config_msg(skb, info);
3025
3026         return;
3027
3028 error:
3029         nlmsg_free(skb);
3030 }
3031
3032 static void mac80211_hwsim_del_radio(struct mac80211_hwsim_data *data,
3033                                      const char *hwname,
3034                                      struct genl_info *info)
3035 {
3036         hwsim_mcast_del_radio(data->idx, hwname, info);
3037         debugfs_remove_recursive(data->debugfs);
3038         ieee80211_unregister_hw(data->hw);
3039         device_release_driver(data->dev);
3040         device_unregister(data->dev);
3041         ieee80211_free_hw(data->hw);
3042 }
3043
3044 static int mac80211_hwsim_get_radio(struct sk_buff *skb,
3045                                     struct mac80211_hwsim_data *data,
3046                                     u32 portid, u32 seq,
3047                                     struct netlink_callback *cb, int flags)
3048 {
3049         void *hdr;
3050         struct hwsim_new_radio_params param = { };
3051         int res = -EMSGSIZE;
3052
3053         hdr = genlmsg_put(skb, portid, seq, &hwsim_genl_family, flags,
3054                           HWSIM_CMD_GET_RADIO);
3055         if (!hdr)
3056                 return -EMSGSIZE;
3057
3058         if (cb)
3059                 genl_dump_check_consistent(cb, hdr);
3060
3061         if (data->alpha2[0] && data->alpha2[1])
3062                 param.reg_alpha2 = data->alpha2;
3063
3064         param.reg_strict = !!(data->hw->wiphy->regulatory_flags &
3065                                         REGULATORY_STRICT_REG);
3066         param.p2p_device = !!(data->hw->wiphy->interface_modes &
3067                                         BIT(NL80211_IFTYPE_P2P_DEVICE));
3068         param.use_chanctx = data->use_chanctx;
3069         param.regd = data->regd;
3070         param.channels = data->channels;
3071         param.hwname = wiphy_name(data->hw->wiphy);
3072
3073         res = append_radio_msg(skb, data->idx, &param);
3074         if (res < 0)
3075                 goto out_err;
3076
3077         genlmsg_end(skb, hdr);
3078         return 0;
3079
3080 out_err:
3081         genlmsg_cancel(skb, hdr);
3082         return res;
3083 }
3084
3085 static void mac80211_hwsim_free(void)
3086 {
3087         struct mac80211_hwsim_data *data;
3088
3089         spin_lock_bh(&hwsim_radio_lock);
3090         while ((data = list_first_entry_or_null(&hwsim_radios,
3091                                                 struct mac80211_hwsim_data,
3092                                                 list))) {
3093                 list_del(&data->list);
3094                 spin_unlock_bh(&hwsim_radio_lock);
3095                 mac80211_hwsim_del_radio(data, wiphy_name(data->hw->wiphy),
3096                                          NULL);
3097                 spin_lock_bh(&hwsim_radio_lock);
3098         }
3099         spin_unlock_bh(&hwsim_radio_lock);
3100         class_destroy(hwsim_class);
3101 }
3102
3103 static const struct net_device_ops hwsim_netdev_ops = {
3104         .ndo_start_xmit         = hwsim_mon_xmit,
3105         .ndo_set_mac_address    = eth_mac_addr,
3106         .ndo_validate_addr      = eth_validate_addr,
3107 };
3108
3109 static void hwsim_mon_setup(struct net_device *dev)
3110 {
3111         dev->netdev_ops = &hwsim_netdev_ops;
3112         dev->needs_free_netdev = true;
3113         ether_setup(dev);
3114         dev->priv_flags |= IFF_NO_QUEUE;
3115         dev->type = ARPHRD_IEEE80211_RADIOTAP;
3116         eth_zero_addr(dev->dev_addr);
3117         dev->dev_addr[0] = 0x12;
3118 }
3119
3120 static struct mac80211_hwsim_data *get_hwsim_data_ref_from_addr(const u8 *addr)
3121 {
3122         return rhashtable_lookup_fast(&hwsim_radios_rht,
3123                                       addr,
3124                                       hwsim_rht_params);
3125 }
3126
3127 static void hwsim_register_wmediumd(struct net *net, u32 portid)
3128 {
3129         struct mac80211_hwsim_data *data;
3130
3131         hwsim_net_set_wmediumd(net, portid);
3132
3133         spin_lock_bh(&hwsim_radio_lock);
3134         list_for_each_entry(data, &hwsim_radios, list) {
3135                 if (data->netgroup == hwsim_net_get_netgroup(net))
3136                         data->wmediumd = portid;
3137         }
3138         spin_unlock_bh(&hwsim_radio_lock);
3139 }
3140
3141 static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2,
3142                                            struct genl_info *info)
3143 {
3144
3145         struct ieee80211_hdr *hdr;
3146         struct mac80211_hwsim_data *data2;
3147         struct ieee80211_tx_info *txi;
3148         struct hwsim_tx_rate *tx_attempts;
3149         u64 ret_skb_cookie;
3150         struct sk_buff *skb, *tmp;
3151         const u8 *src;
3152         unsigned int hwsim_flags;
3153         int i;
3154         bool found = false;
3155
3156         if (!info->attrs[HWSIM_ATTR_ADDR_TRANSMITTER] ||
3157             !info->attrs[HWSIM_ATTR_FLAGS] ||
3158             !info->attrs[HWSIM_ATTR_COOKIE] ||
3159             !info->attrs[HWSIM_ATTR_SIGNAL] ||
3160             !info->attrs[HWSIM_ATTR_TX_INFO])
3161                 goto out;
3162
3163         src = (void *)nla_data(info->attrs[HWSIM_ATTR_ADDR_TRANSMITTER]);
3164         hwsim_flags = nla_get_u32(info->attrs[HWSIM_ATTR_FLAGS]);
3165         ret_skb_cookie = nla_get_u64(info->attrs[HWSIM_ATTR_COOKIE]);
3166
3167         data2 = get_hwsim_data_ref_from_addr(src);
3168         if (!data2)
3169                 goto out;
3170
3171         if (hwsim_net_get_netgroup(genl_info_net(info)) != data2->netgroup)
3172                 goto out;
3173
3174         if (info->snd_portid != data2->wmediumd)
3175                 goto out;
3176
3177         /* look for the skb matching the cookie passed back from user */
3178         skb_queue_walk_safe(&data2->pending, skb, tmp) {
3179                 u64 skb_cookie;
3180
3181                 txi = IEEE80211_SKB_CB(skb);
3182                 skb_cookie = (u64)(uintptr_t)txi->rate_driver_data[0];
3183
3184                 if (skb_cookie == ret_skb_cookie) {
3185                         skb_unlink(skb, &data2->pending);
3186                         found = true;
3187                         break;
3188                 }
3189         }
3190
3191         /* not found */
3192         if (!found)
3193                 goto out;
3194
3195         /* Tx info received because the frame was broadcasted on user space,
3196          so we get all the necessary info: tx attempts and skb control buff */
3197
3198         tx_attempts = (struct hwsim_tx_rate *)nla_data(
3199                        info->attrs[HWSIM_ATTR_TX_INFO]);
3200
3201         /* now send back TX status */
3202         txi = IEEE80211_SKB_CB(skb);
3203
3204         ieee80211_tx_info_clear_status(txi);
3205
3206         for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
3207                 txi->status.rates[i].idx = tx_attempts[i].idx;
3208                 txi->status.rates[i].count = tx_attempts[i].count;
3209         }
3210
3211         txi->status.ack_signal = nla_get_u32(info->attrs[HWSIM_ATTR_SIGNAL]);
3212
3213         if (!(hwsim_flags & HWSIM_TX_CTL_NO_ACK) &&
3214            (hwsim_flags & HWSIM_TX_STAT_ACK)) {
3215                 if (skb->len >= 16) {
3216                         hdr = (struct ieee80211_hdr *) skb->data;
3217                         mac80211_hwsim_monitor_ack(data2->channel,
3218                                                    hdr->addr2);
3219                 }
3220                 txi->flags |= IEEE80211_TX_STAT_ACK;
3221         }
3222         ieee80211_tx_status_irqsafe(data2->hw, skb);
3223         return 0;
3224 out:
3225         return -EINVAL;
3226
3227 }
3228
3229 static int hwsim_cloned_frame_received_nl(struct sk_buff *skb_2,
3230                                           struct genl_info *info)
3231 {
3232         struct mac80211_hwsim_data *data2;
3233         struct ieee80211_rx_status rx_status;
3234         const u8 *dst;
3235         int frame_data_len;
3236         void *frame_data;
3237         struct sk_buff *skb = NULL;
3238
3239         if (!info->attrs[HWSIM_ATTR_ADDR_RECEIVER] ||
3240             !info->attrs[HWSIM_ATTR_FRAME] ||
3241             !info->attrs[HWSIM_ATTR_RX_RATE] ||
3242             !info->attrs[HWSIM_ATTR_SIGNAL])
3243                 goto out;
3244
3245         dst = (void *)nla_data(info->attrs[HWSIM_ATTR_ADDR_RECEIVER]);
3246         frame_data_len = nla_len(info->attrs[HWSIM_ATTR_FRAME]);
3247         frame_data = (void *)nla_data(info->attrs[HWSIM_ATTR_FRAME]);
3248
3249         /* Allocate new skb here */
3250         skb = alloc_skb(frame_data_len, GFP_KERNEL);
3251         if (skb == NULL)
3252                 goto err;
3253
3254         if (frame_data_len > IEEE80211_MAX_DATA_LEN)
3255                 goto err;
3256
3257         /* Copy the data */
3258         skb_put_data(skb, frame_data, frame_data_len);
3259
3260         data2 = get_hwsim_data_ref_from_addr(dst);
3261         if (!data2)
3262                 goto out;
3263
3264         if (hwsim_net_get_netgroup(genl_info_net(info)) != data2->netgroup)
3265                 goto out;
3266
3267         if (info->snd_portid != data2->wmediumd)
3268                 goto out;
3269
3270         /* check if radio is configured properly */
3271
3272         if (data2->idle || !data2->started)
3273                 goto out;
3274
3275         /* A frame is received from user space */
3276         memset(&rx_status, 0, sizeof(rx_status));
3277         if (info->attrs[HWSIM_ATTR_FREQ]) {
3278                 /* throw away off-channel packets, but allow both the temporary
3279                  * ("hw" scan/remain-on-channel) and regular channel, since the
3280                  * internal datapath also allows this
3281                  */
3282                 mutex_lock(&data2->mutex);
3283                 rx_status.freq = nla_get_u32(info->attrs[HWSIM_ATTR_FREQ]);
3284
3285                 if (rx_status.freq != data2->channel->center_freq &&
3286                     (!data2->tmp_chan ||
3287                      rx_status.freq != data2->tmp_chan->center_freq)) {
3288                         mutex_unlock(&data2->mutex);
3289                         goto out;
3290                 }
3291                 mutex_unlock(&data2->mutex);
3292         } else {
3293                 rx_status.freq = data2->channel->center_freq;
3294         }
3295
3296         rx_status.band = data2->channel->band;
3297         rx_status.rate_idx = nla_get_u32(info->attrs[HWSIM_ATTR_RX_RATE]);
3298         rx_status.signal = nla_get_u32(info->attrs[HWSIM_ATTR_SIGNAL]);
3299
3300         memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status));
3301         data2->rx_pkts++;
3302         data2->rx_bytes += skb->len;
3303         ieee80211_rx_irqsafe(data2->hw, skb);
3304
3305         return 0;
3306 err:
3307         pr_debug("mac80211_hwsim: error occurred in %s\n", __func__);
3308 out:
3309         dev_kfree_skb(skb);
3310         return -EINVAL;
3311 }
3312
3313 static int hwsim_register_received_nl(struct sk_buff *skb_2,
3314                                       struct genl_info *info)
3315 {
3316         struct net *net = genl_info_net(info);
3317         struct mac80211_hwsim_data *data;
3318         int chans = 1;
3319
3320         spin_lock_bh(&hwsim_radio_lock);
3321         list_for_each_entry(data, &hwsim_radios, list)
3322                 chans = max(chans, data->channels);
3323         spin_unlock_bh(&hwsim_radio_lock);
3324
3325         /* In the future we should revise the userspace API and allow it
3326          * to set a flag that it does support multi-channel, then we can
3327          * let this pass conditionally on the flag.
3328          * For current userspace, prohibit it since it won't work right.
3329          */
3330         if (chans > 1)
3331                 return -EOPNOTSUPP;
3332
3333         if (hwsim_net_get_wmediumd(net))
3334                 return -EBUSY;
3335
3336         hwsim_register_wmediumd(net, info->snd_portid);
3337
3338         pr_debug("mac80211_hwsim: received a REGISTER, "
3339                "switching to wmediumd mode with pid %d\n", info->snd_portid);
3340
3341         return 0;
3342 }
3343
3344 /* ensures ciphers only include ciphers listed in 'hwsim_ciphers' array */
3345 static bool hwsim_known_ciphers(const u32 *ciphers, int n_ciphers)
3346 {
3347         int i;
3348
3349         for (i = 0; i < n_ciphers; i++) {
3350                 int j;
3351                 int found = 0;
3352
3353                 for (j = 0; j < ARRAY_SIZE(hwsim_ciphers); j++) {
3354                         if (ciphers[i] == hwsim_ciphers[j]) {
3355                                 found = 1;
3356                                 break;
3357                         }
3358                 }
3359
3360                 if (!found)
3361                         return false;
3362         }
3363
3364         return true;
3365 }
3366
3367 static int hwsim_new_radio_nl(struct sk_buff *msg, struct genl_info *info)
3368 {
3369         struct hwsim_new_radio_params param = { 0 };
3370         const char *hwname = NULL;
3371         int ret;
3372
3373         param.reg_strict = info->attrs[HWSIM_ATTR_REG_STRICT_REG];
3374         param.p2p_device = info->attrs[HWSIM_ATTR_SUPPORT_P2P_DEVICE];
3375         param.channels = channels;
3376         param.destroy_on_close =
3377                 info->attrs[HWSIM_ATTR_DESTROY_RADIO_ON_CLOSE];
3378
3379         if (info->attrs[HWSIM_ATTR_CHANNELS])
3380                 param.channels = nla_get_u32(info->attrs[HWSIM_ATTR_CHANNELS]);
3381
3382         if (param.channels < 1) {
3383                 GENL_SET_ERR_MSG(info, "must have at least one channel");
3384                 return -EINVAL;
3385         }
3386
3387         if (param.channels > CFG80211_MAX_NUM_DIFFERENT_CHANNELS) {
3388                 GENL_SET_ERR_MSG(info, "too many channels specified");
3389                 return -EINVAL;
3390         }
3391
3392         if (info->attrs[HWSIM_ATTR_NO_VIF])
3393                 param.no_vif = true;
3394
3395         if (info->attrs[HWSIM_ATTR_USE_CHANCTX])
3396                 param.use_chanctx = true;
3397         else
3398                 param.use_chanctx = (param.channels > 1);
3399
3400         if (info->attrs[HWSIM_ATTR_REG_HINT_ALPHA2])
3401                 param.reg_alpha2 =
3402                         nla_data(info->attrs[HWSIM_ATTR_REG_HINT_ALPHA2]);
3403
3404         if (info->attrs[HWSIM_ATTR_REG_CUSTOM_REG]) {
3405                 u32 idx = nla_get_u32(info->attrs[HWSIM_ATTR_REG_CUSTOM_REG]);
3406
3407                 if (idx >= ARRAY_SIZE(hwsim_world_regdom_custom))
3408                         return -EINVAL;
3409
3410                 idx = array_index_nospec(idx,
3411                                          ARRAY_SIZE(hwsim_world_regdom_custom));
3412                 param.regd = hwsim_world_regdom_custom[idx];
3413         }
3414
3415         if (info->attrs[HWSIM_ATTR_PERM_ADDR]) {
3416                 if (!is_valid_ether_addr(
3417                                 nla_data(info->attrs[HWSIM_ATTR_PERM_ADDR]))) {
3418                         GENL_SET_ERR_MSG(info,"MAC is no valid source addr");
3419                         NL_SET_BAD_ATTR(info->extack,
3420                                         info->attrs[HWSIM_ATTR_PERM_ADDR]);
3421                         return -EINVAL;
3422                 }
3423
3424                 param.perm_addr = nla_data(info->attrs[HWSIM_ATTR_PERM_ADDR]);
3425         }
3426
3427         if (info->attrs[HWSIM_ATTR_IFTYPE_SUPPORT]) {
3428                 param.iftypes =
3429                         nla_get_u32(info->attrs[HWSIM_ATTR_IFTYPE_SUPPORT]);
3430
3431                 if (param.iftypes & ~HWSIM_IFTYPE_SUPPORT_MASK) {
3432                         NL_SET_ERR_MSG_ATTR(info->extack,
3433                                             info->attrs[HWSIM_ATTR_IFTYPE_SUPPORT],
3434                                             "cannot support more iftypes than kernel");
3435                         return -EINVAL;
3436                 }
3437         } else {
3438                 param.iftypes = HWSIM_IFTYPE_SUPPORT_MASK;
3439         }
3440
3441         /* ensure both flag and iftype support is honored */
3442         if (param.p2p_device ||
3443             param.iftypes & BIT(NL80211_IFTYPE_P2P_DEVICE)) {
3444                 param.iftypes |= BIT(NL80211_IFTYPE_P2P_DEVICE);
3445                 param.p2p_device = true;
3446         }
3447
3448         if (info->attrs[HWSIM_ATTR_CIPHER_SUPPORT]) {
3449                 u32 len = nla_len(info->attrs[HWSIM_ATTR_CIPHER_SUPPORT]);
3450
3451                 param.ciphers =
3452                         nla_data(info->attrs[HWSIM_ATTR_CIPHER_SUPPORT]);
3453
3454                 if (len % sizeof(u32)) {
3455                         NL_SET_ERR_MSG_ATTR(info->extack,
3456                                             info->attrs[HWSIM_ATTR_CIPHER_SUPPORT],
3457                                             "bad cipher list length");
3458                         return -EINVAL;
3459                 }
3460
3461                 param.n_ciphers = len / sizeof(u32);
3462
3463                 if (param.n_ciphers > ARRAY_SIZE(hwsim_ciphers)) {
3464                         NL_SET_ERR_MSG_ATTR(info->extack,
3465                                             info->attrs[HWSIM_ATTR_CIPHER_SUPPORT],
3466                                             "too many ciphers specified");
3467                         return -EINVAL;
3468                 }
3469
3470                 if (!hwsim_known_ciphers(param.ciphers, param.n_ciphers)) {
3471                         NL_SET_ERR_MSG_ATTR(info->extack,
3472                                             info->attrs[HWSIM_ATTR_CIPHER_SUPPORT],
3473                                             "unsupported ciphers specified");
3474                         return -EINVAL;
3475                 }
3476         }
3477
3478         if (info->attrs[HWSIM_ATTR_RADIO_NAME]) {
3479                 hwname = kasprintf(GFP_KERNEL, "%.*s",
3480                                    nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
3481                                    (char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]));
3482                 if (!hwname)
3483                         return -ENOMEM;
3484                 param.hwname = hwname;
3485         }
3486
3487         ret = mac80211_hwsim_new_radio(info, &param);
3488         kfree(hwname);
3489         return ret;
3490 }
3491
3492 static int hwsim_del_radio_nl(struct sk_buff *msg, struct genl_info *info)
3493 {
3494         struct mac80211_hwsim_data *data;
3495         s64 idx = -1;
3496         const char *hwname = NULL;
3497
3498         if (info->attrs[HWSIM_ATTR_RADIO_ID]) {
3499                 idx = nla_get_u32(info->attrs[HWSIM_ATTR_RADIO_ID]);
3500         } else if (info->attrs[HWSIM_ATTR_RADIO_NAME]) {
3501                 hwname = kasprintf(GFP_KERNEL, "%.*s",
3502                                    nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
3503                                    (char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]));
3504                 if (!hwname)
3505                         return -ENOMEM;
3506         } else
3507                 return -EINVAL;
3508
3509         spin_lock_bh(&hwsim_radio_lock);
3510         list_for_each_entry(data, &hwsim_radios, list) {
3511                 if (idx >= 0) {
3512                         if (data->idx != idx)
3513                                 continue;
3514                 } else {
3515                         if (!hwname ||
3516                             strcmp(hwname, wiphy_name(data->hw->wiphy)))
3517                                 continue;
3518                 }
3519
3520                 if (!net_eq(wiphy_net(data->hw->wiphy), genl_info_net(info)))
3521                         continue;
3522
3523                 list_del(&data->list);
3524                 rhashtable_remove_fast(&hwsim_radios_rht, &data->rht,
3525                                        hwsim_rht_params);
3526                 hwsim_radios_generation++;
3527                 spin_unlock_bh(&hwsim_radio_lock);
3528                 mac80211_hwsim_del_radio(data, wiphy_name(data->hw->wiphy),
3529                                          info);
3530                 kfree(hwname);
3531                 return 0;
3532         }
3533         spin_unlock_bh(&hwsim_radio_lock);
3534
3535         kfree(hwname);
3536         return -ENODEV;
3537 }
3538
3539 static int hwsim_get_radio_nl(struct sk_buff *msg, struct genl_info *info)
3540 {
3541         struct mac80211_hwsim_data *data;
3542         struct sk_buff *skb;
3543         int idx, res = -ENODEV;
3544
3545         if (!info->attrs[HWSIM_ATTR_RADIO_ID])
3546                 return -EINVAL;
3547         idx = nla_get_u32(info->attrs[HWSIM_ATTR_RADIO_ID]);
3548
3549         spin_lock_bh(&hwsim_radio_lock);
3550         list_for_each_entry(data, &hwsim_radios, list) {
3551                 if (data->idx != idx)
3552                         continue;
3553
3554                 if (!net_eq(wiphy_net(data->hw->wiphy), genl_info_net(info)))
3555                         continue;
3556
3557                 skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
3558                 if (!skb) {
3559                         res = -ENOMEM;
3560                         goto out_err;
3561                 }
3562
3563                 res = mac80211_hwsim_get_radio(skb, data, info->snd_portid,
3564                                                info->snd_seq, NULL, 0);
3565                 if (res < 0) {
3566                         nlmsg_free(skb);
3567                         goto out_err;
3568                 }
3569
3570                 res = genlmsg_reply(skb, info);
3571                 break;
3572         }
3573
3574 out_err:
3575         spin_unlock_bh(&hwsim_radio_lock);
3576
3577         return res;
3578 }
3579
3580 static int hwsim_dump_radio_nl(struct sk_buff *skb,
3581                                struct netlink_callback *cb)
3582 {
3583         int last_idx = cb->args[0] - 1;
3584         struct mac80211_hwsim_data *data = NULL;
3585         int res = 0;
3586         void *hdr;
3587
3588         spin_lock_bh(&hwsim_radio_lock);
3589         cb->seq = hwsim_radios_generation;
3590
3591         if (last_idx >= hwsim_radio_idx-1)
3592                 goto done;
3593
3594         list_for_each_entry(data, &hwsim_radios, list) {
3595                 if (data->idx <= last_idx)
3596                         continue;
3597
3598                 if (!net_eq(wiphy_net(data->hw->wiphy), sock_net(skb->sk)))
3599                         continue;
3600
3601                 res = mac80211_hwsim_get_radio(skb, data,
3602                                                NETLINK_CB(cb->skb).portid,
3603                                                cb->nlh->nlmsg_seq, cb,
3604                                                NLM_F_MULTI);
3605                 if (res < 0)
3606                         break;
3607
3608                 last_idx = data->idx;
3609         }
3610
3611         cb->args[0] = last_idx + 1;
3612
3613         /* list changed, but no new element sent, set interrupted flag */
3614         if (skb->len == 0 && cb->prev_seq && cb->seq != cb->prev_seq) {
3615                 hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid,
3616                                   cb->nlh->nlmsg_seq, &hwsim_genl_family,
3617                                   NLM_F_MULTI, HWSIM_CMD_GET_RADIO);
3618                 if (!hdr)
3619                         res = -EMSGSIZE;
3620                 genl_dump_check_consistent(cb, hdr);
3621                 genlmsg_end(skb, hdr);
3622         }
3623
3624 done:
3625         spin_unlock_bh(&hwsim_radio_lock);
3626         return res ?: skb->len;
3627 }
3628
3629 /* Generic Netlink operations array */
3630 static const struct genl_ops hwsim_ops[] = {
3631         {
3632                 .cmd = HWSIM_CMD_REGISTER,
3633                 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3634                 .doit = hwsim_register_received_nl,
3635                 .flags = GENL_UNS_ADMIN_PERM,
3636         },
3637         {
3638                 .cmd = HWSIM_CMD_FRAME,
3639                 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3640                 .doit = hwsim_cloned_frame_received_nl,
3641         },
3642         {
3643                 .cmd = HWSIM_CMD_TX_INFO_FRAME,
3644                 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3645                 .doit = hwsim_tx_info_frame_received_nl,
3646         },
3647         {
3648                 .cmd = HWSIM_CMD_NEW_RADIO,
3649                 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3650                 .doit = hwsim_new_radio_nl,
3651                 .flags = GENL_UNS_ADMIN_PERM,
3652         },
3653         {
3654                 .cmd = HWSIM_CMD_DEL_RADIO,
3655                 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3656                 .doit = hwsim_del_radio_nl,
3657                 .flags = GENL_UNS_ADMIN_PERM,
3658         },
3659         {
3660                 .cmd = HWSIM_CMD_GET_RADIO,
3661                 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3662                 .doit = hwsim_get_radio_nl,
3663                 .dumpit = hwsim_dump_radio_nl,
3664         },
3665 };
3666
3667 static struct genl_family hwsim_genl_family __ro_after_init = {
3668         .name = "MAC80211_HWSIM",
3669         .version = 1,
3670         .maxattr = HWSIM_ATTR_MAX,
3671         .policy = hwsim_genl_policy,
3672         .netnsok = true,
3673         .module = THIS_MODULE,
3674         .ops = hwsim_ops,
3675         .n_ops = ARRAY_SIZE(hwsim_ops),
3676         .mcgrps = hwsim_mcgrps,
3677         .n_mcgrps = ARRAY_SIZE(hwsim_mcgrps),
3678 };
3679
3680 static void remove_user_radios(u32 portid)
3681 {
3682         struct mac80211_hwsim_data *entry, *tmp;
3683         LIST_HEAD(list);
3684
3685         spin_lock_bh(&hwsim_radio_lock);
3686         list_for_each_entry_safe(entry, tmp, &hwsim_radios, list) {
3687                 if (entry->destroy_on_close && entry->portid == portid) {
3688                         list_move(&entry->list, &list);
3689                         rhashtable_remove_fast(&hwsim_radios_rht, &entry->rht,
3690                                                hwsim_rht_params);
3691                         hwsim_radios_generation++;
3692                 }
3693         }
3694         spin_unlock_bh(&hwsim_radio_lock);
3695
3696         list_for_each_entry_safe(entry, tmp, &list, list) {
3697                 list_del(&entry->list);
3698                 mac80211_hwsim_del_radio(entry, wiphy_name(entry->hw->wiphy),
3699                                          NULL);
3700         }
3701 }
3702
3703 static int mac80211_hwsim_netlink_notify(struct notifier_block *nb,
3704                                          unsigned long state,
3705                                          void *_notify)
3706 {
3707         struct netlink_notify *notify = _notify;
3708
3709         if (state != NETLINK_URELEASE)
3710                 return NOTIFY_DONE;
3711
3712         remove_user_radios(notify->portid);
3713
3714         if (notify->portid == hwsim_net_get_wmediumd(notify->net)) {
3715                 printk(KERN_INFO "mac80211_hwsim: wmediumd released netlink"
3716                        " socket, switching to perfect channel medium\n");
3717                 hwsim_register_wmediumd(notify->net, 0);
3718         }
3719         return NOTIFY_DONE;
3720
3721 }
3722
3723 static struct notifier_block hwsim_netlink_notifier = {
3724         .notifier_call = mac80211_hwsim_netlink_notify,
3725 };
3726
3727 static int __init hwsim_init_netlink(void)
3728 {
3729         int rc;
3730
3731         printk(KERN_INFO "mac80211_hwsim: initializing netlink\n");
3732
3733         rc = genl_register_family(&hwsim_genl_family);
3734         if (rc)
3735                 goto failure;
3736
3737         rc = netlink_register_notifier(&hwsim_netlink_notifier);
3738         if (rc) {
3739                 genl_unregister_family(&hwsim_genl_family);
3740                 goto failure;
3741         }
3742
3743         return 0;
3744
3745 failure:
3746         pr_debug("mac80211_hwsim: error occurred in %s\n", __func__);
3747         return -EINVAL;
3748 }
3749
3750 static __net_init int hwsim_init_net(struct net *net)
3751 {
3752         return hwsim_net_set_netgroup(net);
3753 }
3754
3755 static void __net_exit hwsim_exit_net(struct net *net)
3756 {
3757         struct mac80211_hwsim_data *data, *tmp;
3758         LIST_HEAD(list);
3759
3760         spin_lock_bh(&hwsim_radio_lock);
3761         list_for_each_entry_safe(data, tmp, &hwsim_radios, list) {
3762                 if (!net_eq(wiphy_net(data->hw->wiphy), net))
3763                         continue;
3764
3765                 /* Radios created in init_net are returned to init_net. */
3766                 if (data->netgroup == hwsim_net_get_netgroup(&init_net))
3767                         continue;
3768
3769                 list_move(&data->list, &list);
3770                 rhashtable_remove_fast(&hwsim_radios_rht, &data->rht,
3771                                        hwsim_rht_params);
3772                 hwsim_radios_generation++;
3773         }
3774         spin_unlock_bh(&hwsim_radio_lock);
3775
3776         list_for_each_entry_safe(data, tmp, &list, list) {
3777                 list_del(&data->list);
3778                 mac80211_hwsim_del_radio(data,
3779                                          wiphy_name(data->hw->wiphy),
3780                                          NULL);
3781         }
3782
3783         ida_simple_remove(&hwsim_netgroup_ida, hwsim_net_get_netgroup(net));
3784 }
3785
3786 static struct pernet_operations hwsim_net_ops = {
3787         .init = hwsim_init_net,
3788         .exit = hwsim_exit_net,
3789         .id   = &hwsim_net_id,
3790         .size = sizeof(struct hwsim_net),
3791 };
3792
3793 static void hwsim_exit_netlink(void)
3794 {
3795         /* unregister the notifier */
3796         netlink_unregister_notifier(&hwsim_netlink_notifier);
3797         /* unregister the family */
3798         genl_unregister_family(&hwsim_genl_family);
3799 }
3800
3801 static int __init init_mac80211_hwsim(void)
3802 {
3803         int i, err;
3804
3805         if (radios < 0 || radios > 100)
3806                 return -EINVAL;
3807
3808         if (channels < 1)
3809                 return -EINVAL;
3810
3811         spin_lock_init(&hwsim_radio_lock);
3812
3813         err = rhashtable_init(&hwsim_radios_rht, &hwsim_rht_params);
3814         if (err)
3815                 return err;
3816
3817         err = register_pernet_device(&hwsim_net_ops);
3818         if (err)
3819                 goto out_free_rht;
3820
3821         err = platform_driver_register(&mac80211_hwsim_driver);
3822         if (err)
3823                 goto out_unregister_pernet;
3824
3825         err = hwsim_init_netlink();
3826         if (err)
3827                 goto out_unregister_driver;
3828
3829         hwsim_class = class_create(THIS_MODULE, "mac80211_hwsim");
3830         if (IS_ERR(hwsim_class)) {
3831                 err = PTR_ERR(hwsim_class);
3832                 goto out_exit_netlink;
3833         }
3834
3835         for (i = 0; i < radios; i++) {
3836                 struct hwsim_new_radio_params param = { 0 };
3837
3838                 param.channels = channels;
3839
3840                 switch (regtest) {
3841                 case HWSIM_REGTEST_DIFF_COUNTRY:
3842                         if (i < ARRAY_SIZE(hwsim_alpha2s))
3843                                 param.reg_alpha2 = hwsim_alpha2s[i];
3844                         break;
3845                 case HWSIM_REGTEST_DRIVER_REG_FOLLOW:
3846                         if (!i)
3847                                 param.reg_alpha2 = hwsim_alpha2s[0];
3848                         break;
3849                 case HWSIM_REGTEST_STRICT_ALL:
3850                         param.reg_strict = true;
3851                 case HWSIM_REGTEST_DRIVER_REG_ALL:
3852                         param.reg_alpha2 = hwsim_alpha2s[0];
3853                         break;
3854                 case HWSIM_REGTEST_WORLD_ROAM:
3855                         if (i == 0)
3856                                 param.regd = &hwsim_world_regdom_custom_01;
3857                         break;
3858                 case HWSIM_REGTEST_CUSTOM_WORLD:
3859                         param.regd = &hwsim_world_regdom_custom_01;
3860                         break;
3861                 case HWSIM_REGTEST_CUSTOM_WORLD_2:
3862                         if (i == 0)
3863                                 param.regd = &hwsim_world_regdom_custom_01;
3864                         else if (i == 1)
3865                                 param.regd = &hwsim_world_regdom_custom_02;
3866                         break;
3867                 case HWSIM_REGTEST_STRICT_FOLLOW:
3868                         if (i == 0) {
3869                                 param.reg_strict = true;
3870                                 param.reg_alpha2 = hwsim_alpha2s[0];
3871                         }
3872                         break;
3873                 case HWSIM_REGTEST_STRICT_AND_DRIVER_REG:
3874                         if (i == 0) {
3875                                 param.reg_strict = true;
3876                                 param.reg_alpha2 = hwsim_alpha2s[0];
3877                         } else if (i == 1) {
3878                                 param.reg_alpha2 = hwsim_alpha2s[1];
3879                         }
3880                         break;
3881                 case HWSIM_REGTEST_ALL:
3882                         switch (i) {
3883                         case 0:
3884                                 param.regd = &hwsim_world_regdom_custom_01;
3885                                 break;
3886                         case 1:
3887                                 param.regd = &hwsim_world_regdom_custom_02;
3888                                 break;
3889                         case 2:
3890                                 param.reg_alpha2 = hwsim_alpha2s[0];
3891                                 break;
3892                         case 3:
3893                                 param.reg_alpha2 = hwsim_alpha2s[1];
3894                                 break;
3895                         case 4:
3896                                 param.reg_strict = true;
3897                                 param.reg_alpha2 = hwsim_alpha2s[2];
3898                                 break;
3899                         }
3900                         break;
3901                 default:
3902                         break;
3903                 }
3904
3905                 param.p2p_device = support_p2p_device;
3906                 param.use_chanctx = channels > 1;
3907                 param.iftypes = HWSIM_IFTYPE_SUPPORT_MASK;
3908                 if (param.p2p_device)
3909                         param.iftypes |= BIT(NL80211_IFTYPE_P2P_DEVICE);
3910
3911                 err = mac80211_hwsim_new_radio(NULL, &param);
3912                 if (err < 0)
3913                         goto out_free_radios;
3914         }
3915
3916         hwsim_mon = alloc_netdev(0, "hwsim%d", NET_NAME_UNKNOWN,
3917                                  hwsim_mon_setup);
3918         if (hwsim_mon == NULL) {
3919                 err = -ENOMEM;
3920                 goto out_free_radios;
3921         }
3922
3923         rtnl_lock();
3924         err = dev_alloc_name(hwsim_mon, hwsim_mon->name);
3925         if (err < 0) {
3926                 rtnl_unlock();
3927                 goto out_free_radios;
3928         }
3929
3930         err = register_netdevice(hwsim_mon);
3931         if (err < 0) {
3932                 rtnl_unlock();
3933                 goto out_free_mon;
3934         }
3935         rtnl_unlock();
3936
3937         return 0;
3938
3939 out_free_mon:
3940         free_netdev(hwsim_mon);
3941 out_free_radios:
3942         mac80211_hwsim_free();
3943 out_exit_netlink:
3944         hwsim_exit_netlink();
3945 out_unregister_driver:
3946         platform_driver_unregister(&mac80211_hwsim_driver);
3947 out_unregister_pernet:
3948         unregister_pernet_device(&hwsim_net_ops);
3949 out_free_rht:
3950         rhashtable_destroy(&hwsim_radios_rht);
3951         return err;
3952 }
3953 module_init(init_mac80211_hwsim);
3954
3955 static void __exit exit_mac80211_hwsim(void)
3956 {
3957         pr_debug("mac80211_hwsim: unregister radios\n");
3958
3959         hwsim_exit_netlink();
3960
3961         mac80211_hwsim_free();
3962
3963         rhashtable_destroy(&hwsim_radios_rht);
3964         unregister_netdev(hwsim_mon);
3965         platform_driver_unregister(&mac80211_hwsim_driver);
3966         unregister_pernet_device(&hwsim_net_ops);
3967 }
3968 module_exit(exit_mac80211_hwsim);