]> rtime.felk.cvut.cz Git - can-eth-gw-linux.git/blob - drivers/net/wireless/mac80211_hwsim.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
[can-eth-gw-linux.git] / drivers / net / wireless / mac80211_hwsim.c
1 /*
2  * mac80211_hwsim - software simulator of 802.11 radio(s) for mac80211
3  * Copyright (c) 2008, Jouni Malinen <j@w1.fi>
4  * Copyright (c) 2011, Javier Lopez <jlopex@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10
11 /*
12  * TODO:
13  * - Add TSF sync and fix IBSS beacon transmission by adding
14  *   competition for "air time" at TBTT
15  * - RX filtering based on filter configuration (data->rx_filter)
16  */
17
18 #include <linux/list.h>
19 #include <linux/slab.h>
20 #include <linux/spinlock.h>
21 #include <net/dst.h>
22 #include <net/xfrm.h>
23 #include <net/mac80211.h>
24 #include <net/ieee80211_radiotap.h>
25 #include <linux/if_arp.h>
26 #include <linux/rtnetlink.h>
27 #include <linux/etherdevice.h>
28 #include <linux/debugfs.h>
29 #include <linux/module.h>
30 #include <linux/ktime.h>
31 #include <net/genetlink.h>
32 #include "mac80211_hwsim.h"
33
34 #define WARN_QUEUE 100
35 #define MAX_QUEUE 200
36
37 MODULE_AUTHOR("Jouni Malinen");
38 MODULE_DESCRIPTION("Software simulator of 802.11 radio(s) for mac80211");
39 MODULE_LICENSE("GPL");
40
41 static u32 wmediumd_portid;
42
43 static int radios = 2;
44 module_param(radios, int, 0444);
45 MODULE_PARM_DESC(radios, "Number of simulated radios");
46
47 static int channels = 1;
48 module_param(channels, int, 0444);
49 MODULE_PARM_DESC(channels, "Number of concurrent channels");
50
51 /**
52  * enum hwsim_regtest - the type of regulatory tests we offer
53  *
54  * These are the different values you can use for the regtest
55  * module parameter. This is useful to help test world roaming
56  * and the driver regulatory_hint() call and combinations of these.
57  * If you want to do specific alpha2 regulatory domain tests simply
58  * use the userspace regulatory request as that will be respected as
59  * well without the need of this module parameter. This is designed
60  * only for testing the driver regulatory request, world roaming
61  * and all possible combinations.
62  *
63  * @HWSIM_REGTEST_DISABLED: No regulatory tests are performed,
64  *      this is the default value.
65  * @HWSIM_REGTEST_DRIVER_REG_FOLLOW: Used for testing the driver regulatory
66  *      hint, only one driver regulatory hint will be sent as such the
67  *      secondary radios are expected to follow.
68  * @HWSIM_REGTEST_DRIVER_REG_ALL: Used for testing the driver regulatory
69  *      request with all radios reporting the same regulatory domain.
70  * @HWSIM_REGTEST_DIFF_COUNTRY: Used for testing the drivers calling
71  *      different regulatory domains requests. Expected behaviour is for
72  *      an intersection to occur but each device will still use their
73  *      respective regulatory requested domains. Subsequent radios will
74  *      use the resulting intersection.
75  * @HWSIM_REGTEST_WORLD_ROAM: Used for testing the world roaming. We accomplish
76  *      this by using a custom beacon-capable regulatory domain for the first
77  *      radio. All other device world roam.
78  * @HWSIM_REGTEST_CUSTOM_WORLD: Used for testing the custom world regulatory
79  *      domain requests. All radios will adhere to this custom world regulatory
80  *      domain.
81  * @HWSIM_REGTEST_CUSTOM_WORLD_2: Used for testing 2 custom world regulatory
82  *      domain requests. The first radio will adhere to the first custom world
83  *      regulatory domain, the second one to the second custom world regulatory
84  *      domain. All other devices will world roam.
85  * @HWSIM_REGTEST_STRICT_FOLLOW_: Used for testing strict regulatory domain
86  *      settings, only the first radio will send a regulatory domain request
87  *      and use strict settings. The rest of the radios are expected to follow.
88  * @HWSIM_REGTEST_STRICT_ALL: Used for testing strict regulatory domain
89  *      settings. All radios will adhere to this.
90  * @HWSIM_REGTEST_STRICT_AND_DRIVER_REG: Used for testing strict regulatory
91  *      domain settings, combined with secondary driver regulatory domain
92  *      settings. The first radio will get a strict regulatory domain setting
93  *      using the first driver regulatory request and the second radio will use
94  *      non-strict settings using the second driver regulatory request. All
95  *      other devices should follow the intersection created between the
96  *      first two.
97  * @HWSIM_REGTEST_ALL: Used for testing every possible mix. You will need
98  *      at least 6 radios for a complete test. We will test in this order:
99  *      1 - driver custom world regulatory domain
100  *      2 - second custom world regulatory domain
101  *      3 - first driver regulatory domain request
102  *      4 - second driver regulatory domain request
103  *      5 - strict regulatory domain settings using the third driver regulatory
104  *          domain request
105  *      6 and on - should follow the intersection of the 3rd, 4rth and 5th radio
106  *                 regulatory requests.
107  */
108 enum hwsim_regtest {
109         HWSIM_REGTEST_DISABLED = 0,
110         HWSIM_REGTEST_DRIVER_REG_FOLLOW = 1,
111         HWSIM_REGTEST_DRIVER_REG_ALL = 2,
112         HWSIM_REGTEST_DIFF_COUNTRY = 3,
113         HWSIM_REGTEST_WORLD_ROAM = 4,
114         HWSIM_REGTEST_CUSTOM_WORLD = 5,
115         HWSIM_REGTEST_CUSTOM_WORLD_2 = 6,
116         HWSIM_REGTEST_STRICT_FOLLOW = 7,
117         HWSIM_REGTEST_STRICT_ALL = 8,
118         HWSIM_REGTEST_STRICT_AND_DRIVER_REG = 9,
119         HWSIM_REGTEST_ALL = 10,
120 };
121
122 /* Set to one of the HWSIM_REGTEST_* values above */
123 static int regtest = HWSIM_REGTEST_DISABLED;
124 module_param(regtest, int, 0444);
125 MODULE_PARM_DESC(regtest, "The type of regulatory test we want to run");
126
127 static const char *hwsim_alpha2s[] = {
128         "FI",
129         "AL",
130         "US",
131         "DE",
132         "JP",
133         "AL",
134 };
135
136 static const struct ieee80211_regdomain hwsim_world_regdom_custom_01 = {
137         .n_reg_rules = 4,
138         .alpha2 =  "99",
139         .reg_rules = {
140                 REG_RULE(2412-10, 2462+10, 40, 0, 20, 0),
141                 REG_RULE(2484-10, 2484+10, 40, 0, 20, 0),
142                 REG_RULE(5150-10, 5240+10, 40, 0, 30, 0),
143                 REG_RULE(5745-10, 5825+10, 40, 0, 30, 0),
144         }
145 };
146
147 static const struct ieee80211_regdomain hwsim_world_regdom_custom_02 = {
148         .n_reg_rules = 2,
149         .alpha2 =  "99",
150         .reg_rules = {
151                 REG_RULE(2412-10, 2462+10, 40, 0, 20, 0),
152                 REG_RULE(5725-10, 5850+10, 40, 0, 30,
153                         NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS),
154         }
155 };
156
157 struct hwsim_vif_priv {
158         u32 magic;
159         u8 bssid[ETH_ALEN];
160         bool assoc;
161         u16 aid;
162 };
163
164 #define HWSIM_VIF_MAGIC 0x69537748
165
166 static inline void hwsim_check_magic(struct ieee80211_vif *vif)
167 {
168         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
169         WARN(vp->magic != HWSIM_VIF_MAGIC,
170              "Invalid VIF (%p) magic %#x, %pM, %d/%d\n",
171              vif, vp->magic, vif->addr, vif->type, vif->p2p);
172 }
173
174 static inline void hwsim_set_magic(struct ieee80211_vif *vif)
175 {
176         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
177         vp->magic = HWSIM_VIF_MAGIC;
178 }
179
180 static inline void hwsim_clear_magic(struct ieee80211_vif *vif)
181 {
182         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
183         vp->magic = 0;
184 }
185
186 struct hwsim_sta_priv {
187         u32 magic;
188 };
189
190 #define HWSIM_STA_MAGIC 0x6d537749
191
192 static inline void hwsim_check_sta_magic(struct ieee80211_sta *sta)
193 {
194         struct hwsim_sta_priv *sp = (void *)sta->drv_priv;
195         WARN_ON(sp->magic != HWSIM_STA_MAGIC);
196 }
197
198 static inline void hwsim_set_sta_magic(struct ieee80211_sta *sta)
199 {
200         struct hwsim_sta_priv *sp = (void *)sta->drv_priv;
201         sp->magic = HWSIM_STA_MAGIC;
202 }
203
204 static inline void hwsim_clear_sta_magic(struct ieee80211_sta *sta)
205 {
206         struct hwsim_sta_priv *sp = (void *)sta->drv_priv;
207         sp->magic = 0;
208 }
209
210 struct hwsim_chanctx_priv {
211         u32 magic;
212 };
213
214 #define HWSIM_CHANCTX_MAGIC 0x6d53774a
215
216 static inline void hwsim_check_chanctx_magic(struct ieee80211_chanctx_conf *c)
217 {
218         struct hwsim_chanctx_priv *cp = (void *)c->drv_priv;
219         WARN_ON(cp->magic != HWSIM_CHANCTX_MAGIC);
220 }
221
222 static inline void hwsim_set_chanctx_magic(struct ieee80211_chanctx_conf *c)
223 {
224         struct hwsim_chanctx_priv *cp = (void *)c->drv_priv;
225         cp->magic = HWSIM_CHANCTX_MAGIC;
226 }
227
228 static inline void hwsim_clear_chanctx_magic(struct ieee80211_chanctx_conf *c)
229 {
230         struct hwsim_chanctx_priv *cp = (void *)c->drv_priv;
231         cp->magic = 0;
232 }
233
234 static struct class *hwsim_class;
235
236 static struct net_device *hwsim_mon; /* global monitor netdev */
237
238 #define CHAN2G(_freq)  { \
239         .band = IEEE80211_BAND_2GHZ, \
240         .center_freq = (_freq), \
241         .hw_value = (_freq), \
242         .max_power = 20, \
243 }
244
245 #define CHAN5G(_freq) { \
246         .band = IEEE80211_BAND_5GHZ, \
247         .center_freq = (_freq), \
248         .hw_value = (_freq), \
249         .max_power = 20, \
250 }
251
252 static const struct ieee80211_channel hwsim_channels_2ghz[] = {
253         CHAN2G(2412), /* Channel 1 */
254         CHAN2G(2417), /* Channel 2 */
255         CHAN2G(2422), /* Channel 3 */
256         CHAN2G(2427), /* Channel 4 */
257         CHAN2G(2432), /* Channel 5 */
258         CHAN2G(2437), /* Channel 6 */
259         CHAN2G(2442), /* Channel 7 */
260         CHAN2G(2447), /* Channel 8 */
261         CHAN2G(2452), /* Channel 9 */
262         CHAN2G(2457), /* Channel 10 */
263         CHAN2G(2462), /* Channel 11 */
264         CHAN2G(2467), /* Channel 12 */
265         CHAN2G(2472), /* Channel 13 */
266         CHAN2G(2484), /* Channel 14 */
267 };
268
269 static const struct ieee80211_channel hwsim_channels_5ghz[] = {
270         CHAN5G(5180), /* Channel 36 */
271         CHAN5G(5200), /* Channel 40 */
272         CHAN5G(5220), /* Channel 44 */
273         CHAN5G(5240), /* Channel 48 */
274
275         CHAN5G(5260), /* Channel 52 */
276         CHAN5G(5280), /* Channel 56 */
277         CHAN5G(5300), /* Channel 60 */
278         CHAN5G(5320), /* Channel 64 */
279
280         CHAN5G(5500), /* Channel 100 */
281         CHAN5G(5520), /* Channel 104 */
282         CHAN5G(5540), /* Channel 108 */
283         CHAN5G(5560), /* Channel 112 */
284         CHAN5G(5580), /* Channel 116 */
285         CHAN5G(5600), /* Channel 120 */
286         CHAN5G(5620), /* Channel 124 */
287         CHAN5G(5640), /* Channel 128 */
288         CHAN5G(5660), /* Channel 132 */
289         CHAN5G(5680), /* Channel 136 */
290         CHAN5G(5700), /* Channel 140 */
291
292         CHAN5G(5745), /* Channel 149 */
293         CHAN5G(5765), /* Channel 153 */
294         CHAN5G(5785), /* Channel 157 */
295         CHAN5G(5805), /* Channel 161 */
296         CHAN5G(5825), /* Channel 165 */
297 };
298
299 static const struct ieee80211_rate hwsim_rates[] = {
300         { .bitrate = 10 },
301         { .bitrate = 20, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
302         { .bitrate = 55, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
303         { .bitrate = 110, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
304         { .bitrate = 60 },
305         { .bitrate = 90 },
306         { .bitrate = 120 },
307         { .bitrate = 180 },
308         { .bitrate = 240 },
309         { .bitrate = 360 },
310         { .bitrate = 480 },
311         { .bitrate = 540 }
312 };
313
314 static spinlock_t hwsim_radio_lock;
315 static struct list_head hwsim_radios;
316
317 struct mac80211_hwsim_data {
318         struct list_head list;
319         struct ieee80211_hw *hw;
320         struct device *dev;
321         struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS];
322         struct ieee80211_channel channels_2ghz[ARRAY_SIZE(hwsim_channels_2ghz)];
323         struct ieee80211_channel channels_5ghz[ARRAY_SIZE(hwsim_channels_5ghz)];
324         struct ieee80211_rate rates[ARRAY_SIZE(hwsim_rates)];
325
326         struct mac_address addresses[2];
327
328         struct ieee80211_channel *tmp_chan;
329         struct delayed_work roc_done;
330         struct delayed_work hw_scan;
331         struct cfg80211_scan_request *hw_scan_request;
332         struct ieee80211_vif *hw_scan_vif;
333         int scan_chan_idx;
334
335         struct ieee80211_channel *channel;
336         unsigned long beacon_int; /* in jiffies unit */
337         unsigned int rx_filter;
338         bool started, idle, scanning;
339         struct mutex mutex;
340         struct timer_list beacon_timer;
341         enum ps_mode {
342                 PS_DISABLED, PS_ENABLED, PS_AUTO_POLL, PS_MANUAL_POLL
343         } ps;
344         bool ps_poll_pending;
345         struct dentry *debugfs;
346         struct dentry *debugfs_ps;
347
348         struct sk_buff_head pending;    /* packets pending */
349         /*
350          * Only radios in the same group can communicate together (the
351          * channel has to match too). Each bit represents a group. A
352          * radio can be in more then one group.
353          */
354         u64 group;
355         struct dentry *debugfs_group;
356
357         int power_level;
358
359         /* difference between this hw's clock and the real clock, in usecs */
360         u64 tsf_offset;
361 };
362
363
364 struct hwsim_radiotap_hdr {
365         struct ieee80211_radiotap_header hdr;
366         __le64 rt_tsft;
367         u8 rt_flags;
368         u8 rt_rate;
369         __le16 rt_channel;
370         __le16 rt_chbitmask;
371 } __packed;
372
373 /* MAC80211_HWSIM netlinf family */
374 static struct genl_family hwsim_genl_family = {
375         .id = GENL_ID_GENERATE,
376         .hdrsize = 0,
377         .name = "MAC80211_HWSIM",
378         .version = 1,
379         .maxattr = HWSIM_ATTR_MAX,
380 };
381
382 /* MAC80211_HWSIM netlink policy */
383
384 static struct nla_policy hwsim_genl_policy[HWSIM_ATTR_MAX + 1] = {
385         [HWSIM_ATTR_ADDR_RECEIVER] = { .type = NLA_UNSPEC,
386                                        .len = 6*sizeof(u8) },
387         [HWSIM_ATTR_ADDR_TRANSMITTER] = { .type = NLA_UNSPEC,
388                                           .len = 6*sizeof(u8) },
389         [HWSIM_ATTR_FRAME] = { .type = NLA_BINARY,
390                                .len = IEEE80211_MAX_DATA_LEN },
391         [HWSIM_ATTR_FLAGS] = { .type = NLA_U32 },
392         [HWSIM_ATTR_RX_RATE] = { .type = NLA_U32 },
393         [HWSIM_ATTR_SIGNAL] = { .type = NLA_U32 },
394         [HWSIM_ATTR_TX_INFO] = { .type = NLA_UNSPEC,
395                                  .len = IEEE80211_TX_MAX_RATES*sizeof(
396                                         struct hwsim_tx_rate)},
397         [HWSIM_ATTR_COOKIE] = { .type = NLA_U64 },
398 };
399
400 static netdev_tx_t hwsim_mon_xmit(struct sk_buff *skb,
401                                         struct net_device *dev)
402 {
403         /* TODO: allow packet injection */
404         dev_kfree_skb(skb);
405         return NETDEV_TX_OK;
406 }
407
408 static __le64 __mac80211_hwsim_get_tsf(struct mac80211_hwsim_data *data)
409 {
410         struct timeval tv = ktime_to_timeval(ktime_get_real());
411         u64 now = tv.tv_sec * USEC_PER_SEC + tv.tv_usec;
412         return cpu_to_le64(now + data->tsf_offset);
413 }
414
415 static u64 mac80211_hwsim_get_tsf(struct ieee80211_hw *hw,
416                 struct ieee80211_vif *vif)
417 {
418         struct mac80211_hwsim_data *data = hw->priv;
419         return le64_to_cpu(__mac80211_hwsim_get_tsf(data));
420 }
421
422 static void mac80211_hwsim_set_tsf(struct ieee80211_hw *hw,
423                 struct ieee80211_vif *vif, u64 tsf)
424 {
425         struct mac80211_hwsim_data *data = hw->priv;
426         struct timeval tv = ktime_to_timeval(ktime_get_real());
427         u64 now = tv.tv_sec * USEC_PER_SEC + tv.tv_usec;
428         data->tsf_offset = tsf - now;
429 }
430
431 static void mac80211_hwsim_monitor_rx(struct ieee80211_hw *hw,
432                                       struct sk_buff *tx_skb,
433                                       struct ieee80211_channel *chan)
434 {
435         struct mac80211_hwsim_data *data = hw->priv;
436         struct sk_buff *skb;
437         struct hwsim_radiotap_hdr *hdr;
438         u16 flags;
439         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_skb);
440         struct ieee80211_rate *txrate = ieee80211_get_tx_rate(hw, info);
441
442         if (!netif_running(hwsim_mon))
443                 return;
444
445         skb = skb_copy_expand(tx_skb, sizeof(*hdr), 0, GFP_ATOMIC);
446         if (skb == NULL)
447                 return;
448
449         hdr = (struct hwsim_radiotap_hdr *) skb_push(skb, sizeof(*hdr));
450         hdr->hdr.it_version = PKTHDR_RADIOTAP_VERSION;
451         hdr->hdr.it_pad = 0;
452         hdr->hdr.it_len = cpu_to_le16(sizeof(*hdr));
453         hdr->hdr.it_present = cpu_to_le32((1 << IEEE80211_RADIOTAP_FLAGS) |
454                                           (1 << IEEE80211_RADIOTAP_RATE) |
455                                           (1 << IEEE80211_RADIOTAP_TSFT) |
456                                           (1 << IEEE80211_RADIOTAP_CHANNEL));
457         hdr->rt_tsft = __mac80211_hwsim_get_tsf(data);
458         hdr->rt_flags = 0;
459         hdr->rt_rate = txrate->bitrate / 5;
460         hdr->rt_channel = cpu_to_le16(chan->center_freq);
461         flags = IEEE80211_CHAN_2GHZ;
462         if (txrate->flags & IEEE80211_RATE_ERP_G)
463                 flags |= IEEE80211_CHAN_OFDM;
464         else
465                 flags |= IEEE80211_CHAN_CCK;
466         hdr->rt_chbitmask = cpu_to_le16(flags);
467
468         skb->dev = hwsim_mon;
469         skb_set_mac_header(skb, 0);
470         skb->ip_summed = CHECKSUM_UNNECESSARY;
471         skb->pkt_type = PACKET_OTHERHOST;
472         skb->protocol = htons(ETH_P_802_2);
473         memset(skb->cb, 0, sizeof(skb->cb));
474         netif_rx(skb);
475 }
476
477
478 static void mac80211_hwsim_monitor_ack(struct ieee80211_channel *chan,
479                                        const u8 *addr)
480 {
481         struct sk_buff *skb;
482         struct hwsim_radiotap_hdr *hdr;
483         u16 flags;
484         struct ieee80211_hdr *hdr11;
485
486         if (!netif_running(hwsim_mon))
487                 return;
488
489         skb = dev_alloc_skb(100);
490         if (skb == NULL)
491                 return;
492
493         hdr = (struct hwsim_radiotap_hdr *) skb_put(skb, sizeof(*hdr));
494         hdr->hdr.it_version = PKTHDR_RADIOTAP_VERSION;
495         hdr->hdr.it_pad = 0;
496         hdr->hdr.it_len = cpu_to_le16(sizeof(*hdr));
497         hdr->hdr.it_present = cpu_to_le32((1 << IEEE80211_RADIOTAP_FLAGS) |
498                                           (1 << IEEE80211_RADIOTAP_CHANNEL));
499         hdr->rt_flags = 0;
500         hdr->rt_rate = 0;
501         hdr->rt_channel = cpu_to_le16(chan->center_freq);
502         flags = IEEE80211_CHAN_2GHZ;
503         hdr->rt_chbitmask = cpu_to_le16(flags);
504
505         hdr11 = (struct ieee80211_hdr *) skb_put(skb, 10);
506         hdr11->frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL |
507                                            IEEE80211_STYPE_ACK);
508         hdr11->duration_id = cpu_to_le16(0);
509         memcpy(hdr11->addr1, addr, ETH_ALEN);
510
511         skb->dev = hwsim_mon;
512         skb_set_mac_header(skb, 0);
513         skb->ip_summed = CHECKSUM_UNNECESSARY;
514         skb->pkt_type = PACKET_OTHERHOST;
515         skb->protocol = htons(ETH_P_802_2);
516         memset(skb->cb, 0, sizeof(skb->cb));
517         netif_rx(skb);
518 }
519
520
521 static bool hwsim_ps_rx_ok(struct mac80211_hwsim_data *data,
522                            struct sk_buff *skb)
523 {
524         switch (data->ps) {
525         case PS_DISABLED:
526                 return true;
527         case PS_ENABLED:
528                 return false;
529         case PS_AUTO_POLL:
530                 /* TODO: accept (some) Beacons by default and other frames only
531                  * if pending PS-Poll has been sent */
532                 return true;
533         case PS_MANUAL_POLL:
534                 /* Allow unicast frames to own address if there is a pending
535                  * PS-Poll */
536                 if (data->ps_poll_pending &&
537                     memcmp(data->hw->wiphy->perm_addr, skb->data + 4,
538                            ETH_ALEN) == 0) {
539                         data->ps_poll_pending = false;
540                         return true;
541                 }
542                 return false;
543         }
544
545         return true;
546 }
547
548
549 struct mac80211_hwsim_addr_match_data {
550         bool ret;
551         const u8 *addr;
552 };
553
554 static void mac80211_hwsim_addr_iter(void *data, u8 *mac,
555                                      struct ieee80211_vif *vif)
556 {
557         struct mac80211_hwsim_addr_match_data *md = data;
558         if (memcmp(mac, md->addr, ETH_ALEN) == 0)
559                 md->ret = true;
560 }
561
562
563 static bool mac80211_hwsim_addr_match(struct mac80211_hwsim_data *data,
564                                       const u8 *addr)
565 {
566         struct mac80211_hwsim_addr_match_data md;
567
568         if (memcmp(addr, data->hw->wiphy->perm_addr, ETH_ALEN) == 0)
569                 return true;
570
571         md.ret = false;
572         md.addr = addr;
573         ieee80211_iterate_active_interfaces_atomic(data->hw,
574                                                    IEEE80211_IFACE_ITER_NORMAL,
575                                                    mac80211_hwsim_addr_iter,
576                                                    &md);
577
578         return md.ret;
579 }
580
581 static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
582                                        struct sk_buff *my_skb,
583                                        int dst_portid)
584 {
585         struct sk_buff *skb;
586         struct mac80211_hwsim_data *data = hw->priv;
587         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) my_skb->data;
588         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(my_skb);
589         void *msg_head;
590         unsigned int hwsim_flags = 0;
591         int i;
592         struct hwsim_tx_rate tx_attempts[IEEE80211_TX_MAX_RATES];
593
594         if (data->ps != PS_DISABLED)
595                 hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM);
596         /* If the queue contains MAX_QUEUE skb's drop some */
597         if (skb_queue_len(&data->pending) >= MAX_QUEUE) {
598                 /* Droping until WARN_QUEUE level */
599                 while (skb_queue_len(&data->pending) >= WARN_QUEUE)
600                         skb_dequeue(&data->pending);
601         }
602
603         skb = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_ATOMIC);
604         if (skb == NULL)
605                 goto nla_put_failure;
606
607         msg_head = genlmsg_put(skb, 0, 0, &hwsim_genl_family, 0,
608                                HWSIM_CMD_FRAME);
609         if (msg_head == NULL) {
610                 printk(KERN_DEBUG "mac80211_hwsim: problem with msg_head\n");
611                 goto nla_put_failure;
612         }
613
614         if (nla_put(skb, HWSIM_ATTR_ADDR_TRANSMITTER,
615                     sizeof(struct mac_address), data->addresses[1].addr))
616                 goto nla_put_failure;
617
618         /* We get the skb->data */
619         if (nla_put(skb, HWSIM_ATTR_FRAME, my_skb->len, my_skb->data))
620                 goto nla_put_failure;
621
622         /* We get the flags for this transmission, and we translate them to
623            wmediumd flags  */
624
625         if (info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS)
626                 hwsim_flags |= HWSIM_TX_CTL_REQ_TX_STATUS;
627
628         if (info->flags & IEEE80211_TX_CTL_NO_ACK)
629                 hwsim_flags |= HWSIM_TX_CTL_NO_ACK;
630
631         if (nla_put_u32(skb, HWSIM_ATTR_FLAGS, hwsim_flags))
632                 goto nla_put_failure;
633
634         /* We get the tx control (rate and retries) info*/
635
636         for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
637                 tx_attempts[i].idx = info->status.rates[i].idx;
638                 tx_attempts[i].count = info->status.rates[i].count;
639         }
640
641         if (nla_put(skb, HWSIM_ATTR_TX_INFO,
642                     sizeof(struct hwsim_tx_rate)*IEEE80211_TX_MAX_RATES,
643                     tx_attempts))
644                 goto nla_put_failure;
645
646         /* We create a cookie to identify this skb */
647         if (nla_put_u64(skb, HWSIM_ATTR_COOKIE, (unsigned long) my_skb))
648                 goto nla_put_failure;
649
650         genlmsg_end(skb, msg_head);
651         genlmsg_unicast(&init_net, skb, dst_portid);
652
653         /* Enqueue the packet */
654         skb_queue_tail(&data->pending, my_skb);
655         return;
656
657 nla_put_failure:
658         printk(KERN_DEBUG "mac80211_hwsim: error occurred in %s\n", __func__);
659 }
660
661 static bool hwsim_chans_compat(struct ieee80211_channel *c1,
662                                struct ieee80211_channel *c2)
663 {
664         if (!c1 || !c2)
665                 return false;
666
667         return c1->center_freq == c2->center_freq;
668 }
669
670 struct tx_iter_data {
671         struct ieee80211_channel *channel;
672         bool receive;
673 };
674
675 static void mac80211_hwsim_tx_iter(void *_data, u8 *addr,
676                                    struct ieee80211_vif *vif)
677 {
678         struct tx_iter_data *data = _data;
679
680         if (!vif->chanctx_conf)
681                 return;
682
683         if (!hwsim_chans_compat(data->channel,
684                                 rcu_dereference(vif->chanctx_conf)->def.chan))
685                 return;
686
687         data->receive = true;
688 }
689
690 static bool mac80211_hwsim_tx_frame_no_nl(struct ieee80211_hw *hw,
691                                           struct sk_buff *skb,
692                                           struct ieee80211_channel *chan)
693 {
694         struct mac80211_hwsim_data *data = hw->priv, *data2;
695         bool ack = false;
696         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
697         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
698         struct ieee80211_rx_status rx_status;
699         struct ieee80211_rate *txrate = ieee80211_get_tx_rate(hw, info);
700
701         memset(&rx_status, 0, sizeof(rx_status));
702         rx_status.flag |= RX_FLAG_MACTIME_START;
703         rx_status.freq = chan->center_freq;
704         rx_status.band = chan->band;
705         rx_status.rate_idx = info->control.rates[0].idx;
706         if (info->control.rates[0].flags & IEEE80211_TX_RC_MCS)
707                 rx_status.flag |= RX_FLAG_HT;
708         if (info->control.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
709                 rx_status.flag |= RX_FLAG_40MHZ;
710         if (info->control.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
711                 rx_status.flag |= RX_FLAG_SHORT_GI;
712         /* TODO: simulate real signal strength (and optional packet loss) */
713         rx_status.signal = data->power_level - 50;
714
715         if (data->ps != PS_DISABLED)
716                 hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM);
717
718         /* release the skb's source info */
719         skb_orphan(skb);
720         skb_dst_drop(skb);
721         skb->mark = 0;
722         secpath_reset(skb);
723         nf_reset(skb);
724
725         /* Copy skb to all enabled radios that are on the current frequency */
726         spin_lock(&hwsim_radio_lock);
727         list_for_each_entry(data2, &hwsim_radios, list) {
728                 struct sk_buff *nskb;
729                 struct ieee80211_mgmt *mgmt;
730                 struct tx_iter_data tx_iter_data = {
731                         .receive = false,
732                         .channel = chan,
733                 };
734
735                 if (data == data2)
736                         continue;
737
738                 if (!data2->started || (data2->idle && !data2->tmp_chan) ||
739                     !hwsim_ps_rx_ok(data2, skb))
740                         continue;
741
742                 if (!(data->group & data2->group))
743                         continue;
744
745                 if (!hwsim_chans_compat(chan, data2->tmp_chan) &&
746                     !hwsim_chans_compat(chan, data2->channel)) {
747                         ieee80211_iterate_active_interfaces_atomic(
748                                 data2->hw, IEEE80211_IFACE_ITER_NORMAL,
749                                 mac80211_hwsim_tx_iter, &tx_iter_data);
750                         if (!tx_iter_data.receive)
751                                 continue;
752                 }
753
754                 /*
755                  * reserve some space for our vendor and the normal
756                  * radiotap header, since we're copying anyway
757                  */
758                 nskb = skb_copy_expand(skb, 64, 0, GFP_ATOMIC);
759                 if (nskb == NULL)
760                         continue;
761
762                 if (mac80211_hwsim_addr_match(data2, hdr->addr1))
763                         ack = true;
764
765                 /* set bcn timestamp relative to receiver mactime */
766                 rx_status.mactime =
767                                 le64_to_cpu(__mac80211_hwsim_get_tsf(data2));
768                 mgmt = (struct ieee80211_mgmt *) nskb->data;
769                 if (ieee80211_is_beacon(mgmt->frame_control) ||
770                     ieee80211_is_probe_resp(mgmt->frame_control))
771                         mgmt->u.beacon.timestamp = cpu_to_le64(
772                                 rx_status.mactime +
773                                 (data->tsf_offset - data2->tsf_offset) +
774                                 24 * 8 * 10 / txrate->bitrate);
775
776 #if 0
777                 /*
778                  * Don't enable this code by default as the OUI 00:00:00
779                  * is registered to Xerox so we shouldn't use it here, it
780                  * might find its way into pcap files.
781                  * Note that this code requires the headroom in the SKB
782                  * that was allocated earlier.
783                  */
784                 rx_status.vendor_radiotap_oui[0] = 0x00;
785                 rx_status.vendor_radiotap_oui[1] = 0x00;
786                 rx_status.vendor_radiotap_oui[2] = 0x00;
787                 rx_status.vendor_radiotap_subns = 127;
788                 /*
789                  * Radiotap vendor namespaces can (and should) also be
790                  * split into fields by using the standard radiotap
791                  * presence bitmap mechanism. Use just BIT(0) here for
792                  * the presence bitmap.
793                  */
794                 rx_status.vendor_radiotap_bitmap = BIT(0);
795                 /* We have 8 bytes of (dummy) data */
796                 rx_status.vendor_radiotap_len = 8;
797                 /* For testing, also require it to be aligned */
798                 rx_status.vendor_radiotap_align = 8;
799                 /* push the data */
800                 memcpy(skb_push(nskb, 8), "ABCDEFGH", 8);
801 #endif
802
803                 memcpy(IEEE80211_SKB_RXCB(nskb), &rx_status, sizeof(rx_status));
804                 ieee80211_rx_irqsafe(data2->hw, nskb);
805         }
806         spin_unlock(&hwsim_radio_lock);
807
808         return ack;
809 }
810
811 static void mac80211_hwsim_tx(struct ieee80211_hw *hw,
812                               struct ieee80211_tx_control *control,
813                               struct sk_buff *skb)
814 {
815         struct mac80211_hwsim_data *data = hw->priv;
816         struct ieee80211_tx_info *txi = IEEE80211_SKB_CB(skb);
817         struct ieee80211_chanctx_conf *chanctx_conf;
818         struct ieee80211_channel *channel;
819         bool ack;
820         u32 _portid;
821
822         if (WARN_ON(skb->len < 10)) {
823                 /* Should not happen; just a sanity check for addr1 use */
824                 dev_kfree_skb(skb);
825                 return;
826         }
827
828         if (channels == 1) {
829                 channel = data->channel;
830         } else if (txi->hw_queue == 4) {
831                 channel = data->tmp_chan;
832         } else {
833                 chanctx_conf = rcu_dereference(txi->control.vif->chanctx_conf);
834                 if (chanctx_conf)
835                         channel = chanctx_conf->def.chan;
836                 else
837                         channel = NULL;
838         }
839
840         if (WARN(!channel, "TX w/o channel - queue = %d\n", txi->hw_queue)) {
841                 dev_kfree_skb(skb);
842                 return;
843         }
844
845         if (data->idle && !data->tmp_chan) {
846                 wiphy_debug(hw->wiphy, "Trying to TX when idle - reject\n");
847                 dev_kfree_skb(skb);
848                 return;
849         }
850
851         if (txi->control.vif)
852                 hwsim_check_magic(txi->control.vif);
853         if (control->sta)
854                 hwsim_check_sta_magic(control->sta);
855
856         txi->rate_driver_data[0] = channel;
857
858         mac80211_hwsim_monitor_rx(hw, skb, channel);
859
860         /* wmediumd mode check */
861         _portid = ACCESS_ONCE(wmediumd_portid);
862
863         if (_portid)
864                 return mac80211_hwsim_tx_frame_nl(hw, skb, _portid);
865
866         /* NO wmediumd detected, perfect medium simulation */
867         ack = mac80211_hwsim_tx_frame_no_nl(hw, skb, channel);
868
869         if (ack && skb->len >= 16) {
870                 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
871                 mac80211_hwsim_monitor_ack(channel, hdr->addr2);
872         }
873
874         ieee80211_tx_info_clear_status(txi);
875
876         /* frame was transmitted at most favorable rate at first attempt */
877         txi->control.rates[0].count = 1;
878         txi->control.rates[1].idx = -1;
879
880         if (!(txi->flags & IEEE80211_TX_CTL_NO_ACK) && ack)
881                 txi->flags |= IEEE80211_TX_STAT_ACK;
882         ieee80211_tx_status_irqsafe(hw, skb);
883 }
884
885
886 static int mac80211_hwsim_start(struct ieee80211_hw *hw)
887 {
888         struct mac80211_hwsim_data *data = hw->priv;
889         wiphy_debug(hw->wiphy, "%s\n", __func__);
890         data->started = true;
891         return 0;
892 }
893
894
895 static void mac80211_hwsim_stop(struct ieee80211_hw *hw)
896 {
897         struct mac80211_hwsim_data *data = hw->priv;
898         data->started = false;
899         del_timer(&data->beacon_timer);
900         wiphy_debug(hw->wiphy, "%s\n", __func__);
901 }
902
903
904 static int mac80211_hwsim_add_interface(struct ieee80211_hw *hw,
905                                         struct ieee80211_vif *vif)
906 {
907         wiphy_debug(hw->wiphy, "%s (type=%d mac_addr=%pM)\n",
908                     __func__, ieee80211_vif_type_p2p(vif),
909                     vif->addr);
910         hwsim_set_magic(vif);
911
912         vif->cab_queue = 0;
913         vif->hw_queue[IEEE80211_AC_VO] = 0;
914         vif->hw_queue[IEEE80211_AC_VI] = 1;
915         vif->hw_queue[IEEE80211_AC_BE] = 2;
916         vif->hw_queue[IEEE80211_AC_BK] = 3;
917
918         return 0;
919 }
920
921
922 static int mac80211_hwsim_change_interface(struct ieee80211_hw *hw,
923                                            struct ieee80211_vif *vif,
924                                            enum nl80211_iftype newtype,
925                                            bool newp2p)
926 {
927         newtype = ieee80211_iftype_p2p(newtype, newp2p);
928         wiphy_debug(hw->wiphy,
929                     "%s (old type=%d, new type=%d, mac_addr=%pM)\n",
930                     __func__, ieee80211_vif_type_p2p(vif),
931                     newtype, vif->addr);
932         hwsim_check_magic(vif);
933
934         return 0;
935 }
936
937 static void mac80211_hwsim_remove_interface(
938         struct ieee80211_hw *hw, struct ieee80211_vif *vif)
939 {
940         wiphy_debug(hw->wiphy, "%s (type=%d mac_addr=%pM)\n",
941                     __func__, ieee80211_vif_type_p2p(vif),
942                     vif->addr);
943         hwsim_check_magic(vif);
944         hwsim_clear_magic(vif);
945 }
946
947 static void mac80211_hwsim_tx_frame(struct ieee80211_hw *hw,
948                                     struct sk_buff *skb,
949                                     struct ieee80211_channel *chan)
950 {
951         u32 _pid = ACCESS_ONCE(wmediumd_portid);
952
953         mac80211_hwsim_monitor_rx(hw, skb, chan);
954
955         if (_pid)
956                 return mac80211_hwsim_tx_frame_nl(hw, skb, _pid);
957
958         mac80211_hwsim_tx_frame_no_nl(hw, skb, chan);
959         dev_kfree_skb(skb);
960 }
961
962 static void mac80211_hwsim_beacon_tx(void *arg, u8 *mac,
963                                      struct ieee80211_vif *vif)
964 {
965         struct ieee80211_hw *hw = arg;
966         struct sk_buff *skb;
967
968         hwsim_check_magic(vif);
969
970         if (vif->type != NL80211_IFTYPE_AP &&
971             vif->type != NL80211_IFTYPE_MESH_POINT &&
972             vif->type != NL80211_IFTYPE_ADHOC)
973                 return;
974
975         skb = ieee80211_beacon_get(hw, vif);
976         if (skb == NULL)
977                 return;
978
979         mac80211_hwsim_tx_frame(hw, skb,
980                                 rcu_dereference(vif->chanctx_conf)->def.chan);
981 }
982
983
984 static void mac80211_hwsim_beacon(unsigned long arg)
985 {
986         struct ieee80211_hw *hw = (struct ieee80211_hw *) arg;
987         struct mac80211_hwsim_data *data = hw->priv;
988
989         if (!data->started)
990                 return;
991
992         ieee80211_iterate_active_interfaces_atomic(
993                 hw, IEEE80211_IFACE_ITER_NORMAL,
994                 mac80211_hwsim_beacon_tx, hw);
995
996         data->beacon_timer.expires = jiffies + data->beacon_int;
997         add_timer(&data->beacon_timer);
998 }
999
1000 static const char *hwsim_chantypes[] = {
1001         [NL80211_CHAN_NO_HT] = "noht",
1002         [NL80211_CHAN_HT20] = "ht20",
1003         [NL80211_CHAN_HT40MINUS] = "ht40-",
1004         [NL80211_CHAN_HT40PLUS] = "ht40+",
1005 };
1006
1007 static int mac80211_hwsim_config(struct ieee80211_hw *hw, u32 changed)
1008 {
1009         struct mac80211_hwsim_data *data = hw->priv;
1010         struct ieee80211_conf *conf = &hw->conf;
1011         static const char *smps_modes[IEEE80211_SMPS_NUM_MODES] = {
1012                 [IEEE80211_SMPS_AUTOMATIC] = "auto",
1013                 [IEEE80211_SMPS_OFF] = "off",
1014                 [IEEE80211_SMPS_STATIC] = "static",
1015                 [IEEE80211_SMPS_DYNAMIC] = "dynamic",
1016         };
1017
1018         wiphy_debug(hw->wiphy,
1019                     "%s (freq=%d/%s idle=%d ps=%d smps=%s)\n",
1020                     __func__,
1021                     conf->channel ? conf->channel->center_freq : 0,
1022                     hwsim_chantypes[conf->channel_type],
1023                     !!(conf->flags & IEEE80211_CONF_IDLE),
1024                     !!(conf->flags & IEEE80211_CONF_PS),
1025                     smps_modes[conf->smps_mode]);
1026
1027         data->idle = !!(conf->flags & IEEE80211_CONF_IDLE);
1028
1029         data->channel = conf->channel;
1030
1031         WARN_ON(data->channel && channels > 1);
1032
1033         data->power_level = conf->power_level;
1034         if (!data->started || !data->beacon_int)
1035                 del_timer(&data->beacon_timer);
1036         else
1037                 mod_timer(&data->beacon_timer, jiffies + data->beacon_int);
1038
1039         return 0;
1040 }
1041
1042
1043 static void mac80211_hwsim_configure_filter(struct ieee80211_hw *hw,
1044                                             unsigned int changed_flags,
1045                                             unsigned int *total_flags,u64 multicast)
1046 {
1047         struct mac80211_hwsim_data *data = hw->priv;
1048
1049         wiphy_debug(hw->wiphy, "%s\n", __func__);
1050
1051         data->rx_filter = 0;
1052         if (*total_flags & FIF_PROMISC_IN_BSS)
1053                 data->rx_filter |= FIF_PROMISC_IN_BSS;
1054         if (*total_flags & FIF_ALLMULTI)
1055                 data->rx_filter |= FIF_ALLMULTI;
1056
1057         *total_flags = data->rx_filter;
1058 }
1059
1060 static void mac80211_hwsim_bss_info_changed(struct ieee80211_hw *hw,
1061                                             struct ieee80211_vif *vif,
1062                                             struct ieee80211_bss_conf *info,
1063                                             u32 changed)
1064 {
1065         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
1066         struct mac80211_hwsim_data *data = hw->priv;
1067
1068         hwsim_check_magic(vif);
1069
1070         wiphy_debug(hw->wiphy, "%s(changed=0x%x)\n", __func__, changed);
1071
1072         if (changed & BSS_CHANGED_BSSID) {
1073                 wiphy_debug(hw->wiphy, "%s: BSSID changed: %pM\n",
1074                             __func__, info->bssid);
1075                 memcpy(vp->bssid, info->bssid, ETH_ALEN);
1076         }
1077
1078         if (changed & BSS_CHANGED_ASSOC) {
1079                 wiphy_debug(hw->wiphy, "  ASSOC: assoc=%d aid=%d\n",
1080                             info->assoc, info->aid);
1081                 vp->assoc = info->assoc;
1082                 vp->aid = info->aid;
1083         }
1084
1085         if (changed & BSS_CHANGED_BEACON_INT) {
1086                 wiphy_debug(hw->wiphy, "  BCNINT: %d\n", info->beacon_int);
1087                 data->beacon_int = 1024 * info->beacon_int / 1000 * HZ / 1000;
1088                 if (WARN_ON(!data->beacon_int))
1089                         data->beacon_int = 1;
1090                 if (data->started)
1091                         mod_timer(&data->beacon_timer,
1092                                   jiffies + data->beacon_int);
1093         }
1094
1095         if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1096                 wiphy_debug(hw->wiphy, "  ERP_CTS_PROT: %d\n",
1097                             info->use_cts_prot);
1098         }
1099
1100         if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1101                 wiphy_debug(hw->wiphy, "  ERP_PREAMBLE: %d\n",
1102                             info->use_short_preamble);
1103         }
1104
1105         if (changed & BSS_CHANGED_ERP_SLOT) {
1106                 wiphy_debug(hw->wiphy, "  ERP_SLOT: %d\n", info->use_short_slot);
1107         }
1108
1109         if (changed & BSS_CHANGED_HT) {
1110                 wiphy_debug(hw->wiphy, "  HT: op_mode=0x%x\n",
1111                             info->ht_operation_mode);
1112         }
1113
1114         if (changed & BSS_CHANGED_BASIC_RATES) {
1115                 wiphy_debug(hw->wiphy, "  BASIC_RATES: 0x%llx\n",
1116                             (unsigned long long) info->basic_rates);
1117         }
1118
1119         if (changed & BSS_CHANGED_TXPOWER)
1120                 wiphy_debug(hw->wiphy, "  TX Power: %d dBm\n", info->txpower);
1121 }
1122
1123 static int mac80211_hwsim_sta_add(struct ieee80211_hw *hw,
1124                                   struct ieee80211_vif *vif,
1125                                   struct ieee80211_sta *sta)
1126 {
1127         hwsim_check_magic(vif);
1128         hwsim_set_sta_magic(sta);
1129
1130         return 0;
1131 }
1132
1133 static int mac80211_hwsim_sta_remove(struct ieee80211_hw *hw,
1134                                      struct ieee80211_vif *vif,
1135                                      struct ieee80211_sta *sta)
1136 {
1137         hwsim_check_magic(vif);
1138         hwsim_clear_sta_magic(sta);
1139
1140         return 0;
1141 }
1142
1143 static void mac80211_hwsim_sta_notify(struct ieee80211_hw *hw,
1144                                       struct ieee80211_vif *vif,
1145                                       enum sta_notify_cmd cmd,
1146                                       struct ieee80211_sta *sta)
1147 {
1148         hwsim_check_magic(vif);
1149
1150         switch (cmd) {
1151         case STA_NOTIFY_SLEEP:
1152         case STA_NOTIFY_AWAKE:
1153                 /* TODO: make good use of these flags */
1154                 break;
1155         default:
1156                 WARN(1, "Invalid sta notify: %d\n", cmd);
1157                 break;
1158         }
1159 }
1160
1161 static int mac80211_hwsim_set_tim(struct ieee80211_hw *hw,
1162                                   struct ieee80211_sta *sta,
1163                                   bool set)
1164 {
1165         hwsim_check_sta_magic(sta);
1166         return 0;
1167 }
1168
1169 static int mac80211_hwsim_conf_tx(
1170         struct ieee80211_hw *hw,
1171         struct ieee80211_vif *vif, u16 queue,
1172         const struct ieee80211_tx_queue_params *params)
1173 {
1174         wiphy_debug(hw->wiphy,
1175                     "%s (queue=%d txop=%d cw_min=%d cw_max=%d aifs=%d)\n",
1176                     __func__, queue,
1177                     params->txop, params->cw_min,
1178                     params->cw_max, params->aifs);
1179         return 0;
1180 }
1181
1182 static int mac80211_hwsim_get_survey(
1183         struct ieee80211_hw *hw, int idx,
1184         struct survey_info *survey)
1185 {
1186         struct ieee80211_conf *conf = &hw->conf;
1187
1188         wiphy_debug(hw->wiphy, "%s (idx=%d)\n", __func__, idx);
1189
1190         if (idx != 0)
1191                 return -ENOENT;
1192
1193         /* Current channel */
1194         survey->channel = conf->channel;
1195
1196         /*
1197          * Magically conjured noise level --- this is only ok for simulated hardware.
1198          *
1199          * A real driver which cannot determine the real channel noise MUST NOT
1200          * report any noise, especially not a magically conjured one :-)
1201          */
1202         survey->filled = SURVEY_INFO_NOISE_DBM;
1203         survey->noise = -92;
1204
1205         return 0;
1206 }
1207
1208 #ifdef CONFIG_NL80211_TESTMODE
1209 /*
1210  * This section contains example code for using netlink
1211  * attributes with the testmode command in nl80211.
1212  */
1213
1214 /* These enums need to be kept in sync with userspace */
1215 enum hwsim_testmode_attr {
1216         __HWSIM_TM_ATTR_INVALID = 0,
1217         HWSIM_TM_ATTR_CMD       = 1,
1218         HWSIM_TM_ATTR_PS        = 2,
1219
1220         /* keep last */
1221         __HWSIM_TM_ATTR_AFTER_LAST,
1222         HWSIM_TM_ATTR_MAX       = __HWSIM_TM_ATTR_AFTER_LAST - 1
1223 };
1224
1225 enum hwsim_testmode_cmd {
1226         HWSIM_TM_CMD_SET_PS             = 0,
1227         HWSIM_TM_CMD_GET_PS             = 1,
1228         HWSIM_TM_CMD_STOP_QUEUES        = 2,
1229         HWSIM_TM_CMD_WAKE_QUEUES        = 3,
1230 };
1231
1232 static const struct nla_policy hwsim_testmode_policy[HWSIM_TM_ATTR_MAX + 1] = {
1233         [HWSIM_TM_ATTR_CMD] = { .type = NLA_U32 },
1234         [HWSIM_TM_ATTR_PS] = { .type = NLA_U32 },
1235 };
1236
1237 static int hwsim_fops_ps_write(void *dat, u64 val);
1238
1239 static int mac80211_hwsim_testmode_cmd(struct ieee80211_hw *hw,
1240                                        void *data, int len)
1241 {
1242         struct mac80211_hwsim_data *hwsim = hw->priv;
1243         struct nlattr *tb[HWSIM_TM_ATTR_MAX + 1];
1244         struct sk_buff *skb;
1245         int err, ps;
1246
1247         err = nla_parse(tb, HWSIM_TM_ATTR_MAX, data, len,
1248                         hwsim_testmode_policy);
1249         if (err)
1250                 return err;
1251
1252         if (!tb[HWSIM_TM_ATTR_CMD])
1253                 return -EINVAL;
1254
1255         switch (nla_get_u32(tb[HWSIM_TM_ATTR_CMD])) {
1256         case HWSIM_TM_CMD_SET_PS:
1257                 if (!tb[HWSIM_TM_ATTR_PS])
1258                         return -EINVAL;
1259                 ps = nla_get_u32(tb[HWSIM_TM_ATTR_PS]);
1260                 return hwsim_fops_ps_write(hwsim, ps);
1261         case HWSIM_TM_CMD_GET_PS:
1262                 skb = cfg80211_testmode_alloc_reply_skb(hw->wiphy,
1263                                                 nla_total_size(sizeof(u32)));
1264                 if (!skb)
1265                         return -ENOMEM;
1266                 if (nla_put_u32(skb, HWSIM_TM_ATTR_PS, hwsim->ps))
1267                         goto nla_put_failure;
1268                 return cfg80211_testmode_reply(skb);
1269         case HWSIM_TM_CMD_STOP_QUEUES:
1270                 ieee80211_stop_queues(hw);
1271                 return 0;
1272         case HWSIM_TM_CMD_WAKE_QUEUES:
1273                 ieee80211_wake_queues(hw);
1274                 return 0;
1275         default:
1276                 return -EOPNOTSUPP;
1277         }
1278
1279  nla_put_failure:
1280         kfree_skb(skb);
1281         return -ENOBUFS;
1282 }
1283 #endif
1284
1285 static int mac80211_hwsim_ampdu_action(struct ieee80211_hw *hw,
1286                                        struct ieee80211_vif *vif,
1287                                        enum ieee80211_ampdu_mlme_action action,
1288                                        struct ieee80211_sta *sta, u16 tid, u16 *ssn,
1289                                        u8 buf_size)
1290 {
1291         switch (action) {
1292         case IEEE80211_AMPDU_TX_START:
1293                 ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1294                 break;
1295         case IEEE80211_AMPDU_TX_STOP:
1296                 ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1297                 break;
1298         case IEEE80211_AMPDU_TX_OPERATIONAL:
1299                 break;
1300         case IEEE80211_AMPDU_RX_START:
1301         case IEEE80211_AMPDU_RX_STOP:
1302                 break;
1303         default:
1304                 return -EOPNOTSUPP;
1305         }
1306
1307         return 0;
1308 }
1309
1310 static void mac80211_hwsim_flush(struct ieee80211_hw *hw, bool drop)
1311 {
1312         /* Not implemented, queues only on kernel side */
1313 }
1314
1315 static void hw_scan_work(struct work_struct *work)
1316 {
1317         struct mac80211_hwsim_data *hwsim =
1318                 container_of(work, struct mac80211_hwsim_data, hw_scan.work);
1319         struct cfg80211_scan_request *req = hwsim->hw_scan_request;
1320         int dwell, i;
1321
1322         mutex_lock(&hwsim->mutex);
1323         if (hwsim->scan_chan_idx >= req->n_channels) {
1324                 wiphy_debug(hwsim->hw->wiphy, "hw scan complete\n");
1325                 ieee80211_scan_completed(hwsim->hw, false);
1326                 hwsim->hw_scan_request = NULL;
1327                 hwsim->hw_scan_vif = NULL;
1328                 hwsim->tmp_chan = NULL;
1329                 mutex_unlock(&hwsim->mutex);
1330                 return;
1331         }
1332
1333         wiphy_debug(hwsim->hw->wiphy, "hw scan %d MHz\n",
1334                     req->channels[hwsim->scan_chan_idx]->center_freq);
1335
1336         hwsim->tmp_chan = req->channels[hwsim->scan_chan_idx];
1337         if (hwsim->tmp_chan->flags & IEEE80211_CHAN_PASSIVE_SCAN ||
1338             !req->n_ssids) {
1339                 dwell = 120;
1340         } else {
1341                 dwell = 30;
1342                 /* send probes */
1343                 for (i = 0; i < req->n_ssids; i++) {
1344                         struct sk_buff *probe;
1345
1346                         probe = ieee80211_probereq_get(hwsim->hw,
1347                                                        hwsim->hw_scan_vif,
1348                                                        req->ssids[i].ssid,
1349                                                        req->ssids[i].ssid_len,
1350                                                        req->ie_len);
1351                         if (!probe)
1352                                 continue;
1353
1354                         if (req->ie_len)
1355                                 memcpy(skb_put(probe, req->ie_len), req->ie,
1356                                        req->ie_len);
1357
1358                         local_bh_disable();
1359                         mac80211_hwsim_tx_frame(hwsim->hw, probe,
1360                                                 hwsim->tmp_chan);
1361                         local_bh_enable();
1362                 }
1363         }
1364         ieee80211_queue_delayed_work(hwsim->hw, &hwsim->hw_scan,
1365                                      msecs_to_jiffies(dwell));
1366         hwsim->scan_chan_idx++;
1367         mutex_unlock(&hwsim->mutex);
1368 }
1369
1370 static int mac80211_hwsim_hw_scan(struct ieee80211_hw *hw,
1371                                   struct ieee80211_vif *vif,
1372                                   struct cfg80211_scan_request *req)
1373 {
1374         struct mac80211_hwsim_data *hwsim = hw->priv;
1375
1376         mutex_lock(&hwsim->mutex);
1377         if (WARN_ON(hwsim->tmp_chan || hwsim->hw_scan_request)) {
1378                 mutex_unlock(&hwsim->mutex);
1379                 return -EBUSY;
1380         }
1381         hwsim->hw_scan_request = req;
1382         hwsim->hw_scan_vif = vif;
1383         hwsim->scan_chan_idx = 0;
1384         mutex_unlock(&hwsim->mutex);
1385
1386         wiphy_debug(hw->wiphy, "hwsim hw_scan request\n");
1387
1388         ieee80211_queue_delayed_work(hwsim->hw, &hwsim->hw_scan, 0);
1389
1390         return 0;
1391 }
1392
1393 static void mac80211_hwsim_cancel_hw_scan(struct ieee80211_hw *hw,
1394                                           struct ieee80211_vif *vif)
1395 {
1396         struct mac80211_hwsim_data *hwsim = hw->priv;
1397
1398         wiphy_debug(hw->wiphy, "hwsim cancel_hw_scan\n");
1399
1400         cancel_delayed_work_sync(&hwsim->hw_scan);
1401
1402         mutex_lock(&hwsim->mutex);
1403         ieee80211_scan_completed(hwsim->hw, true);
1404         hwsim->tmp_chan = NULL;
1405         hwsim->hw_scan_request = NULL;
1406         hwsim->hw_scan_vif = NULL;
1407         mutex_unlock(&hwsim->mutex);
1408 }
1409
1410 static void mac80211_hwsim_sw_scan(struct ieee80211_hw *hw)
1411 {
1412         struct mac80211_hwsim_data *hwsim = hw->priv;
1413
1414         mutex_lock(&hwsim->mutex);
1415
1416         if (hwsim->scanning) {
1417                 printk(KERN_DEBUG "two hwsim sw_scans detected!\n");
1418                 goto out;
1419         }
1420
1421         printk(KERN_DEBUG "hwsim sw_scan request, prepping stuff\n");
1422         hwsim->scanning = true;
1423
1424 out:
1425         mutex_unlock(&hwsim->mutex);
1426 }
1427
1428 static void mac80211_hwsim_sw_scan_complete(struct ieee80211_hw *hw)
1429 {
1430         struct mac80211_hwsim_data *hwsim = hw->priv;
1431
1432         mutex_lock(&hwsim->mutex);
1433
1434         printk(KERN_DEBUG "hwsim sw_scan_complete\n");
1435         hwsim->scanning = false;
1436
1437         mutex_unlock(&hwsim->mutex);
1438 }
1439
1440 static void hw_roc_done(struct work_struct *work)
1441 {
1442         struct mac80211_hwsim_data *hwsim =
1443                 container_of(work, struct mac80211_hwsim_data, roc_done.work);
1444
1445         mutex_lock(&hwsim->mutex);
1446         ieee80211_remain_on_channel_expired(hwsim->hw);
1447         hwsim->tmp_chan = NULL;
1448         mutex_unlock(&hwsim->mutex);
1449
1450         wiphy_debug(hwsim->hw->wiphy, "hwsim ROC expired\n");
1451 }
1452
1453 static int mac80211_hwsim_roc(struct ieee80211_hw *hw,
1454                               struct ieee80211_vif *vif,
1455                               struct ieee80211_channel *chan,
1456                               int duration)
1457 {
1458         struct mac80211_hwsim_data *hwsim = hw->priv;
1459
1460         mutex_lock(&hwsim->mutex);
1461         if (WARN_ON(hwsim->tmp_chan || hwsim->hw_scan_request)) {
1462                 mutex_unlock(&hwsim->mutex);
1463                 return -EBUSY;
1464         }
1465
1466         hwsim->tmp_chan = chan;
1467         mutex_unlock(&hwsim->mutex);
1468
1469         wiphy_debug(hw->wiphy, "hwsim ROC (%d MHz, %d ms)\n",
1470                     chan->center_freq, duration);
1471
1472         ieee80211_ready_on_channel(hw);
1473
1474         ieee80211_queue_delayed_work(hw, &hwsim->roc_done,
1475                                      msecs_to_jiffies(duration));
1476         return 0;
1477 }
1478
1479 static int mac80211_hwsim_croc(struct ieee80211_hw *hw)
1480 {
1481         struct mac80211_hwsim_data *hwsim = hw->priv;
1482
1483         cancel_delayed_work_sync(&hwsim->roc_done);
1484
1485         mutex_lock(&hwsim->mutex);
1486         hwsim->tmp_chan = NULL;
1487         mutex_unlock(&hwsim->mutex);
1488
1489         wiphy_debug(hw->wiphy, "hwsim ROC canceled\n");
1490
1491         return 0;
1492 }
1493
1494 static int mac80211_hwsim_add_chanctx(struct ieee80211_hw *hw,
1495                                       struct ieee80211_chanctx_conf *ctx)
1496 {
1497         hwsim_set_chanctx_magic(ctx);
1498         wiphy_debug(hw->wiphy,
1499                     "add channel context control: %d MHz/width: %d/cfreqs:%d/%d MHz\n",
1500                     ctx->def.chan->center_freq, ctx->def.width,
1501                     ctx->def.center_freq1, ctx->def.center_freq2);
1502         return 0;
1503 }
1504
1505 static void mac80211_hwsim_remove_chanctx(struct ieee80211_hw *hw,
1506                                           struct ieee80211_chanctx_conf *ctx)
1507 {
1508         wiphy_debug(hw->wiphy,
1509                     "remove channel context control: %d MHz/width: %d/cfreqs:%d/%d MHz\n",
1510                     ctx->def.chan->center_freq, ctx->def.width,
1511                     ctx->def.center_freq1, ctx->def.center_freq2);
1512         hwsim_check_chanctx_magic(ctx);
1513         hwsim_clear_chanctx_magic(ctx);
1514 }
1515
1516 static void mac80211_hwsim_change_chanctx(struct ieee80211_hw *hw,
1517                                           struct ieee80211_chanctx_conf *ctx,
1518                                           u32 changed)
1519 {
1520         hwsim_check_chanctx_magic(ctx);
1521         wiphy_debug(hw->wiphy,
1522                     "change channel context control: %d MHz/width: %d/cfreqs:%d/%d MHz\n",
1523                     ctx->def.chan->center_freq, ctx->def.width,
1524                     ctx->def.center_freq1, ctx->def.center_freq2);
1525 }
1526
1527 static int mac80211_hwsim_assign_vif_chanctx(struct ieee80211_hw *hw,
1528                                              struct ieee80211_vif *vif,
1529                                              struct ieee80211_chanctx_conf *ctx)
1530 {
1531         hwsim_check_magic(vif);
1532         hwsim_check_chanctx_magic(ctx);
1533
1534         return 0;
1535 }
1536
1537 static void mac80211_hwsim_unassign_vif_chanctx(struct ieee80211_hw *hw,
1538                                                 struct ieee80211_vif *vif,
1539                                                 struct ieee80211_chanctx_conf *ctx)
1540 {
1541         hwsim_check_magic(vif);
1542         hwsim_check_chanctx_magic(ctx);
1543 }
1544
1545 static struct ieee80211_ops mac80211_hwsim_ops =
1546 {
1547         .tx = mac80211_hwsim_tx,
1548         .start = mac80211_hwsim_start,
1549         .stop = mac80211_hwsim_stop,
1550         .add_interface = mac80211_hwsim_add_interface,
1551         .change_interface = mac80211_hwsim_change_interface,
1552         .remove_interface = mac80211_hwsim_remove_interface,
1553         .config = mac80211_hwsim_config,
1554         .configure_filter = mac80211_hwsim_configure_filter,
1555         .bss_info_changed = mac80211_hwsim_bss_info_changed,
1556         .sta_add = mac80211_hwsim_sta_add,
1557         .sta_remove = mac80211_hwsim_sta_remove,
1558         .sta_notify = mac80211_hwsim_sta_notify,
1559         .set_tim = mac80211_hwsim_set_tim,
1560         .conf_tx = mac80211_hwsim_conf_tx,
1561         .get_survey = mac80211_hwsim_get_survey,
1562         CFG80211_TESTMODE_CMD(mac80211_hwsim_testmode_cmd)
1563         .ampdu_action = mac80211_hwsim_ampdu_action,
1564         .sw_scan_start = mac80211_hwsim_sw_scan,
1565         .sw_scan_complete = mac80211_hwsim_sw_scan_complete,
1566         .flush = mac80211_hwsim_flush,
1567         .get_tsf = mac80211_hwsim_get_tsf,
1568         .set_tsf = mac80211_hwsim_set_tsf,
1569 };
1570
1571
1572 static void mac80211_hwsim_free(void)
1573 {
1574         struct list_head tmplist, *i, *tmp;
1575         struct mac80211_hwsim_data *data, *tmpdata;
1576
1577         INIT_LIST_HEAD(&tmplist);
1578
1579         spin_lock_bh(&hwsim_radio_lock);
1580         list_for_each_safe(i, tmp, &hwsim_radios)
1581                 list_move(i, &tmplist);
1582         spin_unlock_bh(&hwsim_radio_lock);
1583
1584         list_for_each_entry_safe(data, tmpdata, &tmplist, list) {
1585                 debugfs_remove(data->debugfs_group);
1586                 debugfs_remove(data->debugfs_ps);
1587                 debugfs_remove(data->debugfs);
1588                 ieee80211_unregister_hw(data->hw);
1589                 device_unregister(data->dev);
1590                 ieee80211_free_hw(data->hw);
1591         }
1592         class_destroy(hwsim_class);
1593 }
1594
1595
1596 static struct device_driver mac80211_hwsim_driver = {
1597         .name = "mac80211_hwsim"
1598 };
1599
1600 static const struct net_device_ops hwsim_netdev_ops = {
1601         .ndo_start_xmit         = hwsim_mon_xmit,
1602         .ndo_change_mtu         = eth_change_mtu,
1603         .ndo_set_mac_address    = eth_mac_addr,
1604         .ndo_validate_addr      = eth_validate_addr,
1605 };
1606
1607 static void hwsim_mon_setup(struct net_device *dev)
1608 {
1609         dev->netdev_ops = &hwsim_netdev_ops;
1610         dev->destructor = free_netdev;
1611         ether_setup(dev);
1612         dev->tx_queue_len = 0;
1613         dev->type = ARPHRD_IEEE80211_RADIOTAP;
1614         memset(dev->dev_addr, 0, ETH_ALEN);
1615         dev->dev_addr[0] = 0x12;
1616 }
1617
1618
1619 static void hwsim_send_ps_poll(void *dat, u8 *mac, struct ieee80211_vif *vif)
1620 {
1621         struct mac80211_hwsim_data *data = dat;
1622         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
1623         struct sk_buff *skb;
1624         struct ieee80211_pspoll *pspoll;
1625
1626         if (!vp->assoc)
1627                 return;
1628
1629         wiphy_debug(data->hw->wiphy,
1630                     "%s: send PS-Poll to %pM for aid %d\n",
1631                     __func__, vp->bssid, vp->aid);
1632
1633         skb = dev_alloc_skb(sizeof(*pspoll));
1634         if (!skb)
1635                 return;
1636         pspoll = (void *) skb_put(skb, sizeof(*pspoll));
1637         pspoll->frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL |
1638                                             IEEE80211_STYPE_PSPOLL |
1639                                             IEEE80211_FCTL_PM);
1640         pspoll->aid = cpu_to_le16(0xc000 | vp->aid);
1641         memcpy(pspoll->bssid, vp->bssid, ETH_ALEN);
1642         memcpy(pspoll->ta, mac, ETH_ALEN);
1643
1644         rcu_read_lock();
1645         mac80211_hwsim_tx_frame(data->hw, skb,
1646                                 rcu_dereference(vif->chanctx_conf)->def.chan);
1647         rcu_read_unlock();
1648 }
1649
1650 static void hwsim_send_nullfunc(struct mac80211_hwsim_data *data, u8 *mac,
1651                                 struct ieee80211_vif *vif, int ps)
1652 {
1653         struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
1654         struct sk_buff *skb;
1655         struct ieee80211_hdr *hdr;
1656
1657         if (!vp->assoc)
1658                 return;
1659
1660         wiphy_debug(data->hw->wiphy,
1661                     "%s: send data::nullfunc to %pM ps=%d\n",
1662                     __func__, vp->bssid, ps);
1663
1664         skb = dev_alloc_skb(sizeof(*hdr));
1665         if (!skb)
1666                 return;
1667         hdr = (void *) skb_put(skb, sizeof(*hdr) - ETH_ALEN);
1668         hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
1669                                          IEEE80211_STYPE_NULLFUNC |
1670                                          (ps ? IEEE80211_FCTL_PM : 0));
1671         hdr->duration_id = cpu_to_le16(0);
1672         memcpy(hdr->addr1, vp->bssid, ETH_ALEN);
1673         memcpy(hdr->addr2, mac, ETH_ALEN);
1674         memcpy(hdr->addr3, vp->bssid, ETH_ALEN);
1675
1676         rcu_read_lock();
1677         mac80211_hwsim_tx_frame(data->hw, skb,
1678                                 rcu_dereference(vif->chanctx_conf)->def.chan);
1679         rcu_read_unlock();
1680 }
1681
1682
1683 static void hwsim_send_nullfunc_ps(void *dat, u8 *mac,
1684                                    struct ieee80211_vif *vif)
1685 {
1686         struct mac80211_hwsim_data *data = dat;
1687         hwsim_send_nullfunc(data, mac, vif, 1);
1688 }
1689
1690
1691 static void hwsim_send_nullfunc_no_ps(void *dat, u8 *mac,
1692                                       struct ieee80211_vif *vif)
1693 {
1694         struct mac80211_hwsim_data *data = dat;
1695         hwsim_send_nullfunc(data, mac, vif, 0);
1696 }
1697
1698
1699 static int hwsim_fops_ps_read(void *dat, u64 *val)
1700 {
1701         struct mac80211_hwsim_data *data = dat;
1702         *val = data->ps;
1703         return 0;
1704 }
1705
1706 static int hwsim_fops_ps_write(void *dat, u64 val)
1707 {
1708         struct mac80211_hwsim_data *data = dat;
1709         enum ps_mode old_ps;
1710
1711         if (val != PS_DISABLED && val != PS_ENABLED && val != PS_AUTO_POLL &&
1712             val != PS_MANUAL_POLL)
1713                 return -EINVAL;
1714
1715         old_ps = data->ps;
1716         data->ps = val;
1717
1718         if (val == PS_MANUAL_POLL) {
1719                 ieee80211_iterate_active_interfaces(data->hw,
1720                                                     IEEE80211_IFACE_ITER_NORMAL,
1721                                                     hwsim_send_ps_poll, data);
1722                 data->ps_poll_pending = true;
1723         } else if (old_ps == PS_DISABLED && val != PS_DISABLED) {
1724                 ieee80211_iterate_active_interfaces(data->hw,
1725                                                     IEEE80211_IFACE_ITER_NORMAL,
1726                                                     hwsim_send_nullfunc_ps,
1727                                                     data);
1728         } else if (old_ps != PS_DISABLED && val == PS_DISABLED) {
1729                 ieee80211_iterate_active_interfaces(data->hw,
1730                                                     IEEE80211_IFACE_ITER_NORMAL,
1731                                                     hwsim_send_nullfunc_no_ps,
1732                                                     data);
1733         }
1734
1735         return 0;
1736 }
1737
1738 DEFINE_SIMPLE_ATTRIBUTE(hwsim_fops_ps, hwsim_fops_ps_read, hwsim_fops_ps_write,
1739                         "%llu\n");
1740
1741
1742 static int hwsim_fops_group_read(void *dat, u64 *val)
1743 {
1744         struct mac80211_hwsim_data *data = dat;
1745         *val = data->group;
1746         return 0;
1747 }
1748
1749 static int hwsim_fops_group_write(void *dat, u64 val)
1750 {
1751         struct mac80211_hwsim_data *data = dat;
1752         data->group = val;
1753         return 0;
1754 }
1755
1756 DEFINE_SIMPLE_ATTRIBUTE(hwsim_fops_group,
1757                         hwsim_fops_group_read, hwsim_fops_group_write,
1758                         "%llx\n");
1759
1760 static struct mac80211_hwsim_data *get_hwsim_data_ref_from_addr(
1761                              struct mac_address *addr)
1762 {
1763         struct mac80211_hwsim_data *data;
1764         bool _found = false;
1765
1766         spin_lock_bh(&hwsim_radio_lock);
1767         list_for_each_entry(data, &hwsim_radios, list) {
1768                 if (memcmp(data->addresses[1].addr, addr,
1769                           sizeof(struct mac_address)) == 0) {
1770                         _found = true;
1771                         break;
1772                 }
1773         }
1774         spin_unlock_bh(&hwsim_radio_lock);
1775
1776         if (!_found)
1777                 return NULL;
1778
1779         return data;
1780 }
1781
1782 static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2,
1783                                            struct genl_info *info)
1784 {
1785
1786         struct ieee80211_hdr *hdr;
1787         struct mac80211_hwsim_data *data2;
1788         struct ieee80211_tx_info *txi;
1789         struct hwsim_tx_rate *tx_attempts;
1790         unsigned long ret_skb_ptr;
1791         struct sk_buff *skb, *tmp;
1792         struct mac_address *src;
1793         unsigned int hwsim_flags;
1794
1795         int i;
1796         bool found = false;
1797
1798         if (!info->attrs[HWSIM_ATTR_ADDR_TRANSMITTER] ||
1799            !info->attrs[HWSIM_ATTR_FLAGS] ||
1800            !info->attrs[HWSIM_ATTR_COOKIE] ||
1801            !info->attrs[HWSIM_ATTR_TX_INFO])
1802                 goto out;
1803
1804         src = (struct mac_address *)nla_data(
1805                                    info->attrs[HWSIM_ATTR_ADDR_TRANSMITTER]);
1806         hwsim_flags = nla_get_u32(info->attrs[HWSIM_ATTR_FLAGS]);
1807
1808         ret_skb_ptr = nla_get_u64(info->attrs[HWSIM_ATTR_COOKIE]);
1809
1810         data2 = get_hwsim_data_ref_from_addr(src);
1811
1812         if (data2 == NULL)
1813                 goto out;
1814
1815         /* look for the skb matching the cookie passed back from user */
1816         skb_queue_walk_safe(&data2->pending, skb, tmp) {
1817                 if ((unsigned long)skb == ret_skb_ptr) {
1818                         skb_unlink(skb, &data2->pending);
1819                         found = true;
1820                         break;
1821                 }
1822         }
1823
1824         /* not found */
1825         if (!found)
1826                 goto out;
1827
1828         /* Tx info received because the frame was broadcasted on user space,
1829          so we get all the necessary info: tx attempts and skb control buff */
1830
1831         tx_attempts = (struct hwsim_tx_rate *)nla_data(
1832                        info->attrs[HWSIM_ATTR_TX_INFO]);
1833
1834         /* now send back TX status */
1835         txi = IEEE80211_SKB_CB(skb);
1836
1837         ieee80211_tx_info_clear_status(txi);
1838
1839         for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
1840                 txi->status.rates[i].idx = tx_attempts[i].idx;
1841                 txi->status.rates[i].count = tx_attempts[i].count;
1842                 /*txi->status.rates[i].flags = 0;*/
1843         }
1844
1845         txi->status.ack_signal = nla_get_u32(info->attrs[HWSIM_ATTR_SIGNAL]);
1846
1847         if (!(hwsim_flags & HWSIM_TX_CTL_NO_ACK) &&
1848            (hwsim_flags & HWSIM_TX_STAT_ACK)) {
1849                 if (skb->len >= 16) {
1850                         hdr = (struct ieee80211_hdr *) skb->data;
1851                         mac80211_hwsim_monitor_ack(txi->rate_driver_data[0],
1852                                                    hdr->addr2);
1853                 }
1854                 txi->flags |= IEEE80211_TX_STAT_ACK;
1855         }
1856         ieee80211_tx_status_irqsafe(data2->hw, skb);
1857         return 0;
1858 out:
1859         return -EINVAL;
1860
1861 }
1862
1863 static int hwsim_cloned_frame_received_nl(struct sk_buff *skb_2,
1864                                           struct genl_info *info)
1865 {
1866
1867         struct mac80211_hwsim_data *data2;
1868         struct ieee80211_rx_status rx_status;
1869         struct mac_address *dst;
1870         int frame_data_len;
1871         char *frame_data;
1872         struct sk_buff *skb = NULL;
1873
1874         if (!info->attrs[HWSIM_ATTR_ADDR_RECEIVER] ||
1875             !info->attrs[HWSIM_ATTR_FRAME] ||
1876             !info->attrs[HWSIM_ATTR_RX_RATE] ||
1877             !info->attrs[HWSIM_ATTR_SIGNAL])
1878                 goto out;
1879
1880         dst = (struct mac_address *)nla_data(
1881                                    info->attrs[HWSIM_ATTR_ADDR_RECEIVER]);
1882
1883         frame_data_len = nla_len(info->attrs[HWSIM_ATTR_FRAME]);
1884         frame_data = (char *)nla_data(info->attrs[HWSIM_ATTR_FRAME]);
1885
1886         /* Allocate new skb here */
1887         skb = alloc_skb(frame_data_len, GFP_KERNEL);
1888         if (skb == NULL)
1889                 goto err;
1890
1891         if (frame_data_len <= IEEE80211_MAX_DATA_LEN) {
1892                 /* Copy the data */
1893                 memcpy(skb_put(skb, frame_data_len), frame_data,
1894                        frame_data_len);
1895         } else
1896                 goto err;
1897
1898         data2 = get_hwsim_data_ref_from_addr(dst);
1899
1900         if (data2 == NULL)
1901                 goto out;
1902
1903         /* check if radio is configured properly */
1904
1905         if (data2->idle || !data2->started)
1906                 goto out;
1907
1908         /*A frame is received from user space*/
1909         memset(&rx_status, 0, sizeof(rx_status));
1910         rx_status.freq = data2->channel->center_freq;
1911         rx_status.band = data2->channel->band;
1912         rx_status.rate_idx = nla_get_u32(info->attrs[HWSIM_ATTR_RX_RATE]);
1913         rx_status.signal = nla_get_u32(info->attrs[HWSIM_ATTR_SIGNAL]);
1914
1915         memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status));
1916         ieee80211_rx_irqsafe(data2->hw, skb);
1917
1918         return 0;
1919 err:
1920         printk(KERN_DEBUG "mac80211_hwsim: error occurred in %s\n", __func__);
1921         goto out;
1922 out:
1923         dev_kfree_skb(skb);
1924         return -EINVAL;
1925 }
1926
1927 static int hwsim_register_received_nl(struct sk_buff *skb_2,
1928                                       struct genl_info *info)
1929 {
1930         if (info == NULL)
1931                 goto out;
1932
1933         wmediumd_portid = info->snd_portid;
1934
1935         printk(KERN_DEBUG "mac80211_hwsim: received a REGISTER, "
1936                "switching to wmediumd mode with pid %d\n", info->snd_portid);
1937
1938         return 0;
1939 out:
1940         printk(KERN_DEBUG "mac80211_hwsim: error occurred in %s\n", __func__);
1941         return -EINVAL;
1942 }
1943
1944 /* Generic Netlink operations array */
1945 static struct genl_ops hwsim_ops[] = {
1946         {
1947                 .cmd = HWSIM_CMD_REGISTER,
1948                 .policy = hwsim_genl_policy,
1949                 .doit = hwsim_register_received_nl,
1950                 .flags = GENL_ADMIN_PERM,
1951         },
1952         {
1953                 .cmd = HWSIM_CMD_FRAME,
1954                 .policy = hwsim_genl_policy,
1955                 .doit = hwsim_cloned_frame_received_nl,
1956         },
1957         {
1958                 .cmd = HWSIM_CMD_TX_INFO_FRAME,
1959                 .policy = hwsim_genl_policy,
1960                 .doit = hwsim_tx_info_frame_received_nl,
1961         },
1962 };
1963
1964 static int mac80211_hwsim_netlink_notify(struct notifier_block *nb,
1965                                          unsigned long state,
1966                                          void *_notify)
1967 {
1968         struct netlink_notify *notify = _notify;
1969
1970         if (state != NETLINK_URELEASE)
1971                 return NOTIFY_DONE;
1972
1973         if (notify->portid == wmediumd_portid) {
1974                 printk(KERN_INFO "mac80211_hwsim: wmediumd released netlink"
1975                        " socket, switching to perfect channel medium\n");
1976                 wmediumd_portid = 0;
1977         }
1978         return NOTIFY_DONE;
1979
1980 }
1981
1982 static struct notifier_block hwsim_netlink_notifier = {
1983         .notifier_call = mac80211_hwsim_netlink_notify,
1984 };
1985
1986 static int hwsim_init_netlink(void)
1987 {
1988         int rc;
1989
1990         /* userspace test API hasn't been adjusted for multi-channel */
1991         if (channels > 1)
1992                 return 0;
1993
1994         printk(KERN_INFO "mac80211_hwsim: initializing netlink\n");
1995
1996         rc = genl_register_family_with_ops(&hwsim_genl_family,
1997                 hwsim_ops, ARRAY_SIZE(hwsim_ops));
1998         if (rc)
1999                 goto failure;
2000
2001         rc = netlink_register_notifier(&hwsim_netlink_notifier);
2002         if (rc)
2003                 goto failure;
2004
2005         return 0;
2006
2007 failure:
2008         printk(KERN_DEBUG "mac80211_hwsim: error occurred in %s\n", __func__);
2009         return -EINVAL;
2010 }
2011
2012 static void hwsim_exit_netlink(void)
2013 {
2014         int ret;
2015
2016         /* userspace test API hasn't been adjusted for multi-channel */
2017         if (channels > 1)
2018                 return;
2019
2020         printk(KERN_INFO "mac80211_hwsim: closing netlink\n");
2021         /* unregister the notifier */
2022         netlink_unregister_notifier(&hwsim_netlink_notifier);
2023         /* unregister the family */
2024         ret = genl_unregister_family(&hwsim_genl_family);
2025         if (ret)
2026                 printk(KERN_DEBUG "mac80211_hwsim: "
2027                        "unregister family %i\n", ret);
2028 }
2029
2030 static const struct ieee80211_iface_limit hwsim_if_limits[] = {
2031         { .max = 1, .types = BIT(NL80211_IFTYPE_ADHOC) },
2032         { .max = 2048,  .types = BIT(NL80211_IFTYPE_STATION) |
2033                                  BIT(NL80211_IFTYPE_P2P_CLIENT) |
2034 #ifdef CONFIG_MAC80211_MESH
2035                                  BIT(NL80211_IFTYPE_MESH_POINT) |
2036 #endif
2037                                  BIT(NL80211_IFTYPE_AP) |
2038                                  BIT(NL80211_IFTYPE_P2P_GO) },
2039         { .max = 1, .types = BIT(NL80211_IFTYPE_P2P_DEVICE) },
2040 };
2041
2042 static struct ieee80211_iface_combination hwsim_if_comb = {
2043         .limits = hwsim_if_limits,
2044         .n_limits = ARRAY_SIZE(hwsim_if_limits),
2045         .max_interfaces = 2048,
2046         .num_different_channels = 1,
2047 };
2048
2049 static int __init init_mac80211_hwsim(void)
2050 {
2051         int i, err = 0;
2052         u8 addr[ETH_ALEN];
2053         struct mac80211_hwsim_data *data;
2054         struct ieee80211_hw *hw;
2055         enum ieee80211_band band;
2056
2057         if (radios < 1 || radios > 100)
2058                 return -EINVAL;
2059
2060         if (channels < 1)
2061                 return -EINVAL;
2062
2063         if (channels > 1) {
2064                 hwsim_if_comb.num_different_channels = channels;
2065                 mac80211_hwsim_ops.hw_scan = mac80211_hwsim_hw_scan;
2066                 mac80211_hwsim_ops.cancel_hw_scan =
2067                         mac80211_hwsim_cancel_hw_scan;
2068                 mac80211_hwsim_ops.sw_scan_start = NULL;
2069                 mac80211_hwsim_ops.sw_scan_complete = NULL;
2070                 mac80211_hwsim_ops.remain_on_channel =
2071                         mac80211_hwsim_roc;
2072                 mac80211_hwsim_ops.cancel_remain_on_channel =
2073                         mac80211_hwsim_croc;
2074                 mac80211_hwsim_ops.add_chanctx =
2075                         mac80211_hwsim_add_chanctx;
2076                 mac80211_hwsim_ops.remove_chanctx =
2077                         mac80211_hwsim_remove_chanctx;
2078                 mac80211_hwsim_ops.change_chanctx =
2079                         mac80211_hwsim_change_chanctx;
2080                 mac80211_hwsim_ops.assign_vif_chanctx =
2081                         mac80211_hwsim_assign_vif_chanctx;
2082                 mac80211_hwsim_ops.unassign_vif_chanctx =
2083                         mac80211_hwsim_unassign_vif_chanctx;
2084         }
2085
2086         spin_lock_init(&hwsim_radio_lock);
2087         INIT_LIST_HEAD(&hwsim_radios);
2088
2089         hwsim_class = class_create(THIS_MODULE, "mac80211_hwsim");
2090         if (IS_ERR(hwsim_class))
2091                 return PTR_ERR(hwsim_class);
2092
2093         memset(addr, 0, ETH_ALEN);
2094         addr[0] = 0x02;
2095
2096         for (i = 0; i < radios; i++) {
2097                 printk(KERN_DEBUG "mac80211_hwsim: Initializing radio %d\n",
2098                        i);
2099                 hw = ieee80211_alloc_hw(sizeof(*data), &mac80211_hwsim_ops);
2100                 if (!hw) {
2101                         printk(KERN_DEBUG "mac80211_hwsim: ieee80211_alloc_hw "
2102                                "failed\n");
2103                         err = -ENOMEM;
2104                         goto failed;
2105                 }
2106                 data = hw->priv;
2107                 data->hw = hw;
2108
2109                 data->dev = device_create(hwsim_class, NULL, 0, hw,
2110                                           "hwsim%d", i);
2111                 if (IS_ERR(data->dev)) {
2112                         printk(KERN_DEBUG
2113                                "mac80211_hwsim: device_create "
2114                                "failed (%ld)\n", PTR_ERR(data->dev));
2115                         err = -ENOMEM;
2116                         goto failed_drvdata;
2117                 }
2118                 data->dev->driver = &mac80211_hwsim_driver;
2119                 skb_queue_head_init(&data->pending);
2120
2121                 SET_IEEE80211_DEV(hw, data->dev);
2122                 addr[3] = i >> 8;
2123                 addr[4] = i;
2124                 memcpy(data->addresses[0].addr, addr, ETH_ALEN);
2125                 memcpy(data->addresses[1].addr, addr, ETH_ALEN);
2126                 data->addresses[1].addr[0] |= 0x40;
2127                 hw->wiphy->n_addresses = 2;
2128                 hw->wiphy->addresses = data->addresses;
2129
2130                 hw->wiphy->iface_combinations = &hwsim_if_comb;
2131                 hw->wiphy->n_iface_combinations = 1;
2132
2133                 if (channels > 1) {
2134                         hw->wiphy->max_scan_ssids = 255;
2135                         hw->wiphy->max_scan_ie_len = IEEE80211_MAX_DATA_LEN;
2136                         hw->wiphy->max_remain_on_channel_duration = 1000;
2137                 }
2138
2139                 INIT_DELAYED_WORK(&data->roc_done, hw_roc_done);
2140                 INIT_DELAYED_WORK(&data->hw_scan, hw_scan_work);
2141
2142                 hw->channel_change_time = 1;
2143                 hw->queues = 5;
2144                 hw->offchannel_tx_hw_queue = 4;
2145                 hw->wiphy->interface_modes =
2146                         BIT(NL80211_IFTYPE_STATION) |
2147                         BIT(NL80211_IFTYPE_AP) |
2148                         BIT(NL80211_IFTYPE_P2P_CLIENT) |
2149                         BIT(NL80211_IFTYPE_P2P_GO) |
2150                         BIT(NL80211_IFTYPE_ADHOC) |
2151                         BIT(NL80211_IFTYPE_MESH_POINT) |
2152                         BIT(NL80211_IFTYPE_P2P_DEVICE);
2153
2154                 hw->flags = IEEE80211_HW_MFP_CAPABLE |
2155                             IEEE80211_HW_SIGNAL_DBM |
2156                             IEEE80211_HW_SUPPORTS_STATIC_SMPS |
2157                             IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS |
2158                             IEEE80211_HW_AMPDU_AGGREGATION |
2159                             IEEE80211_HW_WANT_MONITOR_VIF |
2160                             IEEE80211_HW_QUEUE_CONTROL;
2161
2162                 hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS |
2163                                     WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
2164
2165                 /* ask mac80211 to reserve space for magic */
2166                 hw->vif_data_size = sizeof(struct hwsim_vif_priv);
2167                 hw->sta_data_size = sizeof(struct hwsim_sta_priv);
2168
2169                 memcpy(data->channels_2ghz, hwsim_channels_2ghz,
2170                         sizeof(hwsim_channels_2ghz));
2171                 memcpy(data->channels_5ghz, hwsim_channels_5ghz,
2172                         sizeof(hwsim_channels_5ghz));
2173                 memcpy(data->rates, hwsim_rates, sizeof(hwsim_rates));
2174
2175                 for (band = IEEE80211_BAND_2GHZ; band < IEEE80211_NUM_BANDS; band++) {
2176                         struct ieee80211_supported_band *sband = &data->bands[band];
2177                         switch (band) {
2178                         case IEEE80211_BAND_2GHZ:
2179                                 sband->channels = data->channels_2ghz;
2180                                 sband->n_channels =
2181                                         ARRAY_SIZE(hwsim_channels_2ghz);
2182                                 sband->bitrates = data->rates;
2183                                 sband->n_bitrates = ARRAY_SIZE(hwsim_rates);
2184                                 break;
2185                         case IEEE80211_BAND_5GHZ:
2186                                 sband->channels = data->channels_5ghz;
2187                                 sband->n_channels =
2188                                         ARRAY_SIZE(hwsim_channels_5ghz);
2189                                 sband->bitrates = data->rates + 4;
2190                                 sband->n_bitrates = ARRAY_SIZE(hwsim_rates) - 4;
2191                                 break;
2192                         default:
2193                                 continue;
2194                         }
2195
2196                         sband->ht_cap.ht_supported = true;
2197                         sband->ht_cap.cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
2198                                 IEEE80211_HT_CAP_GRN_FLD |
2199                                 IEEE80211_HT_CAP_SGI_40 |
2200                                 IEEE80211_HT_CAP_DSSSCCK40;
2201                         sband->ht_cap.ampdu_factor = 0x3;
2202                         sband->ht_cap.ampdu_density = 0x6;
2203                         memset(&sband->ht_cap.mcs, 0,
2204                                sizeof(sband->ht_cap.mcs));
2205                         sband->ht_cap.mcs.rx_mask[0] = 0xff;
2206                         sband->ht_cap.mcs.rx_mask[1] = 0xff;
2207                         sband->ht_cap.mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
2208
2209                         hw->wiphy->bands[band] = sband;
2210
2211                         if (channels == 1)
2212                                 continue;
2213
2214                         sband->vht_cap.vht_supported = true;
2215                         sband->vht_cap.cap =
2216                                 IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 |
2217                                 IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ |
2218                                 IEEE80211_VHT_CAP_RXLDPC |
2219                                 IEEE80211_VHT_CAP_SHORT_GI_80 |
2220                                 IEEE80211_VHT_CAP_SHORT_GI_160 |
2221                                 IEEE80211_VHT_CAP_TXSTBC |
2222                                 IEEE80211_VHT_CAP_RXSTBC_1 |
2223                                 IEEE80211_VHT_CAP_RXSTBC_2 |
2224                                 IEEE80211_VHT_CAP_RXSTBC_3 |
2225                                 IEEE80211_VHT_CAP_RXSTBC_4 |
2226                                 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK;
2227                         sband->vht_cap.vht_mcs.rx_mcs_map =
2228                                 cpu_to_le16(IEEE80211_VHT_MCS_SUPPORT_0_8 << 0 |
2229                                             IEEE80211_VHT_MCS_SUPPORT_0_8 << 2 |
2230                                             IEEE80211_VHT_MCS_SUPPORT_0_9 << 4 |
2231                                             IEEE80211_VHT_MCS_SUPPORT_0_8 << 6 |
2232                                             IEEE80211_VHT_MCS_SUPPORT_0_8 << 8 |
2233                                             IEEE80211_VHT_MCS_SUPPORT_0_9 << 10 |
2234                                             IEEE80211_VHT_MCS_SUPPORT_0_9 << 12 |
2235                                             IEEE80211_VHT_MCS_SUPPORT_0_8 << 14);
2236                         sband->vht_cap.vht_mcs.tx_mcs_map =
2237                                 sband->vht_cap.vht_mcs.rx_mcs_map;
2238                 }
2239                 /* By default all radios are belonging to the first group */
2240                 data->group = 1;
2241                 mutex_init(&data->mutex);
2242
2243                 /* Enable frame retransmissions for lossy channels */
2244                 hw->max_rates = 4;
2245                 hw->max_rate_tries = 11;
2246
2247                 /* Work to be done prior to ieee80211_register_hw() */
2248                 switch (regtest) {
2249                 case HWSIM_REGTEST_DISABLED:
2250                 case HWSIM_REGTEST_DRIVER_REG_FOLLOW:
2251                 case HWSIM_REGTEST_DRIVER_REG_ALL:
2252                 case HWSIM_REGTEST_DIFF_COUNTRY:
2253                         /*
2254                          * Nothing to be done for driver regulatory domain
2255                          * hints prior to ieee80211_register_hw()
2256                          */
2257                         break;
2258                 case HWSIM_REGTEST_WORLD_ROAM:
2259                         if (i == 0) {
2260                                 hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY;
2261                                 wiphy_apply_custom_regulatory(hw->wiphy,
2262                                         &hwsim_world_regdom_custom_01);
2263                         }
2264                         break;
2265                 case HWSIM_REGTEST_CUSTOM_WORLD:
2266                         hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY;
2267                         wiphy_apply_custom_regulatory(hw->wiphy,
2268                                 &hwsim_world_regdom_custom_01);
2269                         break;
2270                 case HWSIM_REGTEST_CUSTOM_WORLD_2:
2271                         if (i == 0) {
2272                                 hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY;
2273                                 wiphy_apply_custom_regulatory(hw->wiphy,
2274                                         &hwsim_world_regdom_custom_01);
2275                         } else if (i == 1) {
2276                                 hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY;
2277                                 wiphy_apply_custom_regulatory(hw->wiphy,
2278                                         &hwsim_world_regdom_custom_02);
2279                         }
2280                         break;
2281                 case HWSIM_REGTEST_STRICT_ALL:
2282                         hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY;
2283                         break;
2284                 case HWSIM_REGTEST_STRICT_FOLLOW:
2285                 case HWSIM_REGTEST_STRICT_AND_DRIVER_REG:
2286                         if (i == 0)
2287                                 hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY;
2288                         break;
2289                 case HWSIM_REGTEST_ALL:
2290                         if (i == 0) {
2291                                 hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY;
2292                                 wiphy_apply_custom_regulatory(hw->wiphy,
2293                                         &hwsim_world_regdom_custom_01);
2294                         } else if (i == 1) {
2295                                 hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY;
2296                                 wiphy_apply_custom_regulatory(hw->wiphy,
2297                                         &hwsim_world_regdom_custom_02);
2298                         } else if (i == 4)
2299                                 hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY;
2300                         break;
2301                 default:
2302                         break;
2303                 }
2304
2305                 /* give the regulatory workqueue a chance to run */
2306                 if (regtest)
2307                         schedule_timeout_interruptible(1);
2308                 err = ieee80211_register_hw(hw);
2309                 if (err < 0) {
2310                         printk(KERN_DEBUG "mac80211_hwsim: "
2311                                "ieee80211_register_hw failed (%d)\n", err);
2312                         goto failed_hw;
2313                 }
2314
2315                 /* Work to be done after to ieee80211_register_hw() */
2316                 switch (regtest) {
2317                 case HWSIM_REGTEST_WORLD_ROAM:
2318                 case HWSIM_REGTEST_DISABLED:
2319                         break;
2320                 case HWSIM_REGTEST_DRIVER_REG_FOLLOW:
2321                         if (!i)
2322                                 regulatory_hint(hw->wiphy, hwsim_alpha2s[0]);
2323                         break;
2324                 case HWSIM_REGTEST_DRIVER_REG_ALL:
2325                 case HWSIM_REGTEST_STRICT_ALL:
2326                         regulatory_hint(hw->wiphy, hwsim_alpha2s[0]);
2327                         break;
2328                 case HWSIM_REGTEST_DIFF_COUNTRY:
2329                         if (i < ARRAY_SIZE(hwsim_alpha2s))
2330                                 regulatory_hint(hw->wiphy, hwsim_alpha2s[i]);
2331                         break;
2332                 case HWSIM_REGTEST_CUSTOM_WORLD:
2333                 case HWSIM_REGTEST_CUSTOM_WORLD_2:
2334                         /*
2335                          * Nothing to be done for custom world regulatory
2336                          * domains after to ieee80211_register_hw
2337                          */
2338                         break;
2339                 case HWSIM_REGTEST_STRICT_FOLLOW:
2340                         if (i == 0)
2341                                 regulatory_hint(hw->wiphy, hwsim_alpha2s[0]);
2342                         break;
2343                 case HWSIM_REGTEST_STRICT_AND_DRIVER_REG:
2344                         if (i == 0)
2345                                 regulatory_hint(hw->wiphy, hwsim_alpha2s[0]);
2346                         else if (i == 1)
2347                                 regulatory_hint(hw->wiphy, hwsim_alpha2s[1]);
2348                         break;
2349                 case HWSIM_REGTEST_ALL:
2350                         if (i == 2)
2351                                 regulatory_hint(hw->wiphy, hwsim_alpha2s[0]);
2352                         else if (i == 3)
2353                                 regulatory_hint(hw->wiphy, hwsim_alpha2s[1]);
2354                         else if (i == 4)
2355                                 regulatory_hint(hw->wiphy, hwsim_alpha2s[2]);
2356                         break;
2357                 default:
2358                         break;
2359                 }
2360
2361                 wiphy_debug(hw->wiphy, "hwaddr %pm registered\n",
2362                             hw->wiphy->perm_addr);
2363
2364                 data->debugfs = debugfs_create_dir("hwsim",
2365                                                    hw->wiphy->debugfsdir);
2366                 data->debugfs_ps = debugfs_create_file("ps", 0666,
2367                                                        data->debugfs, data,
2368                                                        &hwsim_fops_ps);
2369                 data->debugfs_group = debugfs_create_file("group", 0666,
2370                                                         data->debugfs, data,
2371                                                         &hwsim_fops_group);
2372
2373                 setup_timer(&data->beacon_timer, mac80211_hwsim_beacon,
2374                             (unsigned long) hw);
2375
2376                 list_add_tail(&data->list, &hwsim_radios);
2377         }
2378
2379         hwsim_mon = alloc_netdev(0, "hwsim%d", hwsim_mon_setup);
2380         if (hwsim_mon == NULL)
2381                 goto failed;
2382
2383         rtnl_lock();
2384
2385         err = dev_alloc_name(hwsim_mon, hwsim_mon->name);
2386         if (err < 0)
2387                 goto failed_mon;
2388
2389
2390         err = register_netdevice(hwsim_mon);
2391         if (err < 0)
2392                 goto failed_mon;
2393
2394         rtnl_unlock();
2395
2396         err = hwsim_init_netlink();
2397         if (err < 0)
2398                 goto failed_nl;
2399
2400         return 0;
2401
2402 failed_nl:
2403         printk(KERN_DEBUG "mac_80211_hwsim: failed initializing netlink\n");
2404         return err;
2405
2406 failed_mon:
2407         rtnl_unlock();
2408         free_netdev(hwsim_mon);
2409         mac80211_hwsim_free();
2410         return err;
2411
2412 failed_hw:
2413         device_unregister(data->dev);
2414 failed_drvdata:
2415         ieee80211_free_hw(hw);
2416 failed:
2417         mac80211_hwsim_free();
2418         return err;
2419 }
2420 module_init(init_mac80211_hwsim);
2421
2422 static void __exit exit_mac80211_hwsim(void)
2423 {
2424         printk(KERN_DEBUG "mac80211_hwsim: unregister radios\n");
2425
2426         hwsim_exit_netlink();
2427
2428         mac80211_hwsim_free();
2429         unregister_netdev(hwsim_mon);
2430 }
2431 module_exit(exit_mac80211_hwsim);