Linux Audio

Check our new training course

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