Linux Audio

Check our new training course

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