sta_info.c 41.0 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/*
 * Copyright 2002-2005, Instant802 Networks, Inc.
 * Copyright 2006-2007	Jiri Benc <jbenc@suse.cz>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#include <linux/module.h>
#include <linux/init.h>
#include <linux/netdevice.h>
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/skbuff.h>
#include <linux/if_arp.h>
17
#include <linux/timer.h>
18
#include <linux/rtnetlink.h>
19 20 21

#include <net/mac80211.h>
#include "ieee80211_i.h"
22
#include "driver-ops.h"
J
Johannes Berg 已提交
23
#include "rate.h"
24
#include "sta_info.h"
J
Jiri Benc 已提交
25
#include "debugfs_sta.h"
26
#include "mesh.h"
27
#include "wme.h"
28

29 30 31 32 33 34 35
/**
 * DOC: STA information lifetime rules
 *
 * STA info structures (&struct sta_info) are managed in a hash table
 * for faster lookup and a list for iteration. They are managed using
 * RCU, i.e. access to the list and hash table is protected by RCU.
 *
36 37 38 39 40 41 42 43
 * Upon allocating a STA info structure with sta_info_alloc(), the caller
 * owns that structure. It must then insert it into the hash table using
 * either sta_info_insert() or sta_info_insert_rcu(); only in the latter
 * case (which acquires an rcu read section but must not be called from
 * within one) will the pointer still be valid after the call. Note that
 * the caller may not do much with the STA info before inserting it, in
 * particular, it may not start any mesh peer link management or add
 * encryption keys.
44 45 46
 *
 * When the insertion fails (sta_info_insert()) returns non-zero), the
 * structure will have been freed by sta_info_insert()!
47
 *
48
 * Station entries are added by mac80211 when you establish a link with a
49 50
 * peer. This means different things for the different type of interfaces
 * we support. For a regular station this mean we add the AP sta when we
L
Lucas De Marchi 已提交
51
 * receive an association response from the AP. For IBSS this occurs when
52
 * get to know about a peer on the same IBSS. For WDS we add the sta for
L
Lucas De Marchi 已提交
53
 * the peer immediately upon device open. When using AP mode we add stations
54
 * for each respective station upon request from userspace through nl80211.
55
 *
56 57
 * In order to remove a STA info structure, various sta_info_destroy_*()
 * calls are available.
58
 *
59 60 61 62
 * There is no concept of ownership on a STA entry, each structure is
 * owned by the global hash table/list until it is removed. All users of
 * the structure need to be RCU protected so that the structure won't be
 * freed before they are done using it.
63
 */
64 65

/* Caller must hold local->sta_lock */
66 67
static int sta_info_hash_del(struct ieee80211_local *local,
			     struct sta_info *sta)
68 69 70
{
	struct sta_info *s;

J
Johannes Berg 已提交
71 72
	s = rcu_dereference_protected(local->sta_hash[STA_HASH(sta->sta.addr)],
				      lockdep_is_held(&local->sta_lock));
73
	if (!s)
74 75
		return -ENOENT;
	if (s == sta) {
76
		RCU_INIT_POINTER(local->sta_hash[STA_HASH(sta->sta.addr)],
77
				   s->hnext);
78
		return 0;
79 80
	}

J
Johannes Berg 已提交
81 82 83 84 85
	while (rcu_access_pointer(s->hnext) &&
	       rcu_access_pointer(s->hnext) != sta)
		s = rcu_dereference_protected(s->hnext,
					lockdep_is_held(&local->sta_lock));
	if (rcu_access_pointer(s->hnext)) {
86
		RCU_INIT_POINTER(s->hnext, sta->hnext);
87 88
		return 0;
	}
89

90
	return -ENOENT;
91 92
}

93
/* protected by RCU */
94 95
struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata,
			      const u8 *addr)
96
{
97
	struct ieee80211_local *local = sdata->local;
98 99
	struct sta_info *sta;

100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
	sta = rcu_dereference_check(local->sta_hash[STA_HASH(addr)],
				    lockdep_is_held(&local->sta_lock) ||
				    lockdep_is_held(&local->sta_mtx));
	while (sta) {
		if (sta->sdata == sdata && !sta->dummy &&
		    memcmp(sta->sta.addr, addr, ETH_ALEN) == 0)
			break;
		sta = rcu_dereference_check(sta->hnext,
					    lockdep_is_held(&local->sta_lock) ||
					    lockdep_is_held(&local->sta_mtx));
	}
	return sta;
}

/* get a station info entry even if it is a dummy station*/
struct sta_info *sta_info_get_rx(struct ieee80211_sub_if_data *sdata,
			      const u8 *addr)
{
	struct ieee80211_local *local = sdata->local;
	struct sta_info *sta;

121 122 123
	sta = rcu_dereference_check(local->sta_hash[STA_HASH(addr)],
				    lockdep_is_held(&local->sta_lock) ||
				    lockdep_is_held(&local->sta_mtx));
124
	while (sta) {
125 126
		if (sta->sdata == sdata &&
		    memcmp(sta->sta.addr, addr, ETH_ALEN) == 0)
127
			break;
128 129 130
		sta = rcu_dereference_check(sta->hnext,
					    lockdep_is_held(&local->sta_lock) ||
					    lockdep_is_held(&local->sta_mtx));
131
	}
132 133 134
	return sta;
}

135 136 137 138 139 140 141 142 143 144
/*
 * Get sta info either from the specified interface
 * or from one of its vlans
 */
struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata,
				  const u8 *addr)
{
	struct ieee80211_local *local = sdata->local;
	struct sta_info *sta;

145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
	sta = rcu_dereference_check(local->sta_hash[STA_HASH(addr)],
				    lockdep_is_held(&local->sta_lock) ||
				    lockdep_is_held(&local->sta_mtx));
	while (sta) {
		if ((sta->sdata == sdata ||
		     (sta->sdata->bss && sta->sdata->bss == sdata->bss)) &&
		    !sta->dummy &&
		    memcmp(sta->sta.addr, addr, ETH_ALEN) == 0)
			break;
		sta = rcu_dereference_check(sta->hnext,
					    lockdep_is_held(&local->sta_lock) ||
					    lockdep_is_held(&local->sta_mtx));
	}
	return sta;
}

/*
 * Get sta info either from the specified interface
 * or from one of its vlans (including dummy stations)
 */
struct sta_info *sta_info_get_bss_rx(struct ieee80211_sub_if_data *sdata,
				  const u8 *addr)
{
	struct ieee80211_local *local = sdata->local;
	struct sta_info *sta;

171 172 173
	sta = rcu_dereference_check(local->sta_hash[STA_HASH(addr)],
				    lockdep_is_held(&local->sta_lock) ||
				    lockdep_is_held(&local->sta_mtx));
174 175
	while (sta) {
		if ((sta->sdata == sdata ||
176
		     (sta->sdata->bss && sta->sdata->bss == sdata->bss)) &&
177 178
		    memcmp(sta->sta.addr, addr, ETH_ALEN) == 0)
			break;
179 180 181
		sta = rcu_dereference_check(sta->hnext,
					    lockdep_is_held(&local->sta_lock) ||
					    lockdep_is_held(&local->sta_mtx));
182 183 184 185
	}
	return sta;
}

186 187
struct sta_info *sta_info_get_by_idx(struct ieee80211_sub_if_data *sdata,
				     int idx)
188
{
189
	struct ieee80211_local *local = sdata->local;
190 191 192
	struct sta_info *sta;
	int i = 0;

193
	list_for_each_entry_rcu(sta, &local->sta_list, list) {
194
		if (sdata != sta->sdata)
195
			continue;
196 197 198 199
		if (i < idx) {
			++i;
			continue;
		}
200
		return sta;
201 202 203 204
	}

	return NULL;
}
205

206
/**
207
 * sta_info_free - free STA
208
 *
R
Randy Dunlap 已提交
209
 * @local: pointer to the global information
210 211 212
 * @sta: STA info to free
 *
 * This function must undo everything done by sta_info_alloc()
213 214 215
 * that may happen before sta_info_insert(). It may only be
 * called when sta_info_insert() has not been attempted (and
 * if that fails, the station is freed anyway.)
216
 */
217
void sta_info_free(struct ieee80211_local *local, struct sta_info *sta)
218
{
219 220 221 222
	if (sta->rate_ctrl) {
		rate_control_free_sta(sta);
		rate_control_put(sta->rate_ctrl);
	}
223 224

#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
J
Joe Perches 已提交
225
	wiphy_debug(local->hw.wiphy, "Destroyed STA %pM\n", sta->sta.addr);
226 227 228 229 230
#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */

	kfree(sta);
}

231 232 233
/* Caller must hold local->sta_lock */
static void sta_info_hash_add(struct ieee80211_local *local,
			      struct sta_info *sta)
234
{
235
	sta->hnext = local->sta_hash[STA_HASH(sta->sta.addr)];
236
	RCU_INIT_POINTER(local->sta_hash[STA_HASH(sta->sta.addr)], sta);
237 238
}

239 240 241 242 243 244 245 246 247
static void sta_unblock(struct work_struct *wk)
{
	struct sta_info *sta;

	sta = container_of(wk, struct sta_info, drv_unblock_wk);

	if (sta->dead)
		return;

J
Johannes Berg 已提交
248
	if (!test_sta_flag(sta, WLAN_STA_PS_STA))
249
		ieee80211_sta_ps_deliver_wakeup(sta);
J
Johannes Berg 已提交
250 251
	else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) {
		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
252 253

		local_bh_disable();
254
		ieee80211_sta_ps_deliver_poll_response(sta);
255
		local_bh_enable();
J
Johannes Berg 已提交
256 257
	} else if (test_and_clear_sta_flag(sta, WLAN_STA_UAPSD)) {
		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
258 259

		local_bh_disable();
J
Johannes Berg 已提交
260
		ieee80211_sta_ps_deliver_uapsd(sta);
261
		local_bh_enable();
262
	} else
J
Johannes Berg 已提交
263
		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
264 265
}

266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282
static int sta_prepare_rate_control(struct ieee80211_local *local,
				    struct sta_info *sta, gfp_t gfp)
{
	if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL)
		return 0;

	sta->rate_ctrl = rate_control_get(local->rate_ctrl);
	sta->rate_ctrl_priv = rate_control_alloc_sta(sta->rate_ctrl,
						     &sta->sta, gfp);
	if (!sta->rate_ctrl_priv) {
		rate_control_put(sta->rate_ctrl);
		return -ENOMEM;
	}

	return 0;
}

J
Johannes Berg 已提交
283 284
struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
				u8 *addr, gfp_t gfp)
285
{
286
	struct ieee80211_local *local = sdata->local;
287
	struct sta_info *sta;
288
	struct timespec uptime;
289
	int i;
290

291
	sta = kzalloc(sizeof(*sta) + local->hw.sta_data_size, gfp);
292
	if (!sta)
J
Johannes Berg 已提交
293
		return NULL;
294

295
	spin_lock_init(&sta->lock);
296
	INIT_WORK(&sta->drv_unblock_wk, sta_unblock);
J
Johannes Berg 已提交
297
	INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
298
	mutex_init(&sta->ampdu_mlme.mtx);
299

300
	memcpy(sta->sta.addr, addr, ETH_ALEN);
301 302
	sta->local = local;
	sta->sdata = sdata;
303
	sta->last_rx = jiffies;
304

305 306
	do_posix_clock_monotonic_gettime(&uptime);
	sta->last_connected = uptime.tv_sec;
307 308
	ewma_init(&sta->avg_signal, 1024, 8);

309
	if (sta_prepare_rate_control(local, sta, gfp)) {
310
		kfree(sta);
J
Johannes Berg 已提交
311
		return NULL;
312 313
	}

314
	for (i = 0; i < STA_TID_NUM; i++) {
315 316 317 318 319
		/*
		 * timer_to_tid must be initialized with identity mapping
		 * to enable session_timer's data differentiation. See
		 * sta_rx_agg_session_timer_expired for usage.
		 */
320 321
		sta->timer_to_tid[i] = i;
	}
322 323 324 325
	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
		skb_queue_head_init(&sta->ps_tx_buf[i]);
		skb_queue_head_init(&sta->tx_filtered[i]);
	}
J
Johannes Berg 已提交
326

327
	for (i = 0; i < NUM_RX_DATA_QUEUES; i++)
328
		sta->last_seq_ctrl[i] = cpu_to_le16(USHRT_MAX);
329

J
Johannes Berg 已提交
330
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
J
Joe Perches 已提交
331
	wiphy_debug(local->hw.wiphy, "Allocated STA %pM\n", sta->sta.addr);
J
Johannes Berg 已提交
332 333
#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */

334
#ifdef CONFIG_MAC80211_MESH
335
	sta->plink_state = NL80211_PLINK_LISTEN;
336 337 338
	init_timer(&sta->plink_timer);
#endif

J
Johannes Berg 已提交
339 340 341
	return sta;
}

342 343
static int sta_info_finish_insert(struct sta_info *sta,
				bool async, bool dummy_reinsert)
J
Johannes Berg 已提交
344 345 346
{
	struct ieee80211_local *local = sta->local;
	struct ieee80211_sub_if_data *sdata = sta->sdata;
347
	struct station_info sinfo;
J
Johannes Berg 已提交
348
	unsigned long flags;
349
	int err = 0;
J
Johannes Berg 已提交
350

351
	lockdep_assert_held(&local->sta_mtx);
352

353 354 355 356 357 358 359 360 361 362 363
	if (!sta->dummy || dummy_reinsert) {
		/* notify driver */
		err = drv_sta_add(local, sdata, &sta->sta);
		if (err) {
			if (!async)
				return err;
			printk(KERN_DEBUG "%s: failed to add IBSS STA %pM to "
					  "driver (%d) - keeping it anyway.\n",
			       sdata->name, sta->sta.addr, err);
		} else {
			sta->uploaded = true;
364
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
365 366 367 368
			if (async)
				wiphy_debug(local->hw.wiphy,
					    "Finished adding IBSS STA %pM\n",
					    sta->sta.addr);
369
#endif
370 371 372
		}

		sdata = sta->sdata;
373 374
	}

375 376 377 378 379
	if (!dummy_reinsert) {
		if (!async) {
			local->num_sta++;
			local->sta_generation++;
			smp_mb();
380

381 382 383 384 385
			/* make the station visible */
			spin_lock_irqsave(&local->sta_lock, flags);
			sta_info_hash_add(local, sta);
			spin_unlock_irqrestore(&local->sta_lock, flags);
		}
386

387 388 389
		list_add(&sta->list, &local->sta_list);
	} else {
		sta->dummy = false;
390 391
	}

392 393 394
	if (!sta->dummy) {
		ieee80211_sta_debugfs_add(sta);
		rate_control_add_sta_debugfs(sta);
395

396 397 398 399 400
		memset(&sinfo, 0, sizeof(sinfo));
		sinfo.filled = 0;
		sinfo.generation = local->sta_generation;
		cfg80211_new_sta(sdata->dev, sta->sta.addr, &sinfo, GFP_KERNEL);
	}
401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416

	return 0;
}

static void sta_info_finish_pending(struct ieee80211_local *local)
{
	struct sta_info *sta;
	unsigned long flags;

	spin_lock_irqsave(&local->sta_lock, flags);
	while (!list_empty(&local->sta_pending_list)) {
		sta = list_first_entry(&local->sta_pending_list,
				       struct sta_info, list);
		list_del(&sta->list);
		spin_unlock_irqrestore(&local->sta_lock, flags);

417
		sta_info_finish_insert(sta, true, false);
418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433

		spin_lock_irqsave(&local->sta_lock, flags);
	}
	spin_unlock_irqrestore(&local->sta_lock, flags);
}

static void sta_info_finish_work(struct work_struct *work)
{
	struct ieee80211_local *local =
		container_of(work, struct ieee80211_local, sta_finish_work);

	mutex_lock(&local->sta_mtx);
	sta_info_finish_pending(local);
	mutex_unlock(&local->sta_mtx);
}

434
static int sta_info_insert_check(struct sta_info *sta)
435 436 437
{
	struct ieee80211_sub_if_data *sdata = sta->sdata;

438 439 440 441 442
	/*
	 * Can't be a WARN_ON because it can be triggered through a race:
	 * something inserts a STA (on one CPU) without holding the RTNL
	 * and another CPU turns off the net device.
	 */
443 444
	if (unlikely(!ieee80211_sdata_running(sdata)))
		return -ENETDOWN;
445

446
	if (WARN_ON(compare_ether_addr(sta->sta.addr, sdata->vif.addr) == 0 ||
447 448 449 450 451 452 453 454 455 456 457 458 459 460
		    is_multicast_ether_addr(sta->sta.addr)))
		return -EINVAL;

	return 0;
}

static int sta_info_insert_ibss(struct sta_info *sta) __acquires(RCU)
{
	struct ieee80211_local *local = sta->local;
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	unsigned long flags;

	spin_lock_irqsave(&local->sta_lock, flags);
	/* check if STA exists already */
461
	if (sta_info_get_bss_rx(sdata, sta->sta.addr)) {
462
		spin_unlock_irqrestore(&local->sta_lock, flags);
463
		rcu_read_lock();
464
		return -EEXIST;
465
	}
466

467 468 469 470
	local->num_sta++;
	local->sta_generation++;
	smp_mb();
	sta_info_hash_add(local, sta);
471

472
	list_add_tail(&sta->list, &local->sta_pending_list);
473

474 475
	rcu_read_lock();
	spin_unlock_irqrestore(&local->sta_lock, flags);
476 477

#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
478 479
	wiphy_debug(local->hw.wiphy, "Added IBSS STA %pM\n",
			sta->sta.addr);
480 481
#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */

482
	ieee80211_queue_work(&local->hw, &local->sta_finish_work);
483

484 485 486 487 488 489 490 491 492 493 494 495 496
	return 0;
}

/*
 * should be called with sta_mtx locked
 * this function replaces the mutex lock
 * with a RCU lock
 */
static int sta_info_insert_non_ibss(struct sta_info *sta) __acquires(RCU)
{
	struct ieee80211_local *local = sta->local;
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	unsigned long flags;
497 498
	struct sta_info *exist_sta;
	bool dummy_reinsert = false;
499 500 501
	int err = 0;

	lockdep_assert_held(&local->sta_mtx);
502 503 504

	/*
	 * On first glance, this will look racy, because the code
505
	 * in this function, which inserts a station with sleeping,
506 507 508 509
	 * unlocks the sta_lock between checking existence in the
	 * hash table and inserting into it.
	 *
	 * However, it is not racy against itself because it keeps
510
	 * the mutex locked.
511 512
	 */

513
	spin_lock_irqsave(&local->sta_lock, flags);
514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530
	/*
	 * check if STA exists already.
	 * only accept a scenario of a second call to sta_info_insert_non_ibss
	 * with a dummy station entry that was inserted earlier
	 * in that case - assume that the dummy station flag should
	 * be removed.
	 */
	exist_sta = sta_info_get_bss_rx(sdata, sta->sta.addr);
	if (exist_sta) {
		if (exist_sta == sta && sta->dummy) {
			dummy_reinsert = true;
		} else {
			spin_unlock_irqrestore(&local->sta_lock, flags);
			mutex_unlock(&local->sta_mtx);
			rcu_read_lock();
			return -EEXIST;
		}
531
	}
532

533
	spin_unlock_irqrestore(&local->sta_lock, flags);
534

535
	err = sta_info_finish_insert(sta, false, dummy_reinsert);
536 537 538
	if (err) {
		mutex_unlock(&local->sta_mtx);
		rcu_read_lock();
539
		return err;
540
	}
541

542
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
543 544
	wiphy_debug(local->hw.wiphy, "Inserted %sSTA %pM\n",
			sta->dummy ? "dummy " : "", sta->sta.addr);
545 546
#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */

547 548 549
	/* move reference to rcu-protected */
	rcu_read_lock();
	mutex_unlock(&local->sta_mtx);
J
Jiri Benc 已提交
550

J
Johannes Berg 已提交
551 552 553
	if (ieee80211_vif_is_mesh(&sdata->vif))
		mesh_accept_plinks_update(sdata);

554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598
	return 0;
}

int sta_info_insert_rcu(struct sta_info *sta) __acquires(RCU)
{
	struct ieee80211_local *local = sta->local;
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	int err = 0;

	err = sta_info_insert_check(sta);
	if (err) {
		rcu_read_lock();
		goto out_free;
	}

	/*
	 * In ad-hoc mode, we sometimes need to insert stations
	 * from tasklet context from the RX path. To avoid races,
	 * always do so in that case -- see the comment below.
	 */
	if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
		err = sta_info_insert_ibss(sta);
		if (err)
			goto out_free;

		return 0;
	}

	/*
	 * It might seem that the function called below is in race against
	 * the function call above that atomically inserts the station... That,
	 * however, is not true because the above code can only
	 * be invoked for IBSS interfaces, and the below code will
	 * not be -- and the two do not race against each other as
	 * the hash table also keys off the interface.
	 */

	might_sleep();

	mutex_lock(&local->sta_mtx);

	err = sta_info_insert_non_ibss(sta);
	if (err)
		goto out_free;

J
Johannes Berg 已提交
599
	return 0;
600 601
 out_free:
	BUG_ON(!err);
602
	sta_info_free(local, sta);
603
	return err;
604 605
}

606 607 608 609 610 611 612 613 614
int sta_info_insert(struct sta_info *sta)
{
	int err = sta_info_insert_rcu(sta);

	rcu_read_unlock();

	return err;
}

615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633
/* Caller must hold sta->local->sta_mtx */
int sta_info_reinsert(struct sta_info *sta)
{
	struct ieee80211_local *local = sta->local;
	int err = 0;

	err = sta_info_insert_check(sta);
	if (err) {
		mutex_unlock(&local->sta_mtx);
		return err;
	}

	might_sleep();

	err = sta_info_insert_non_ibss(sta);
	rcu_read_unlock();
	return err;
}

634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651
static inline void __bss_tim_set(struct ieee80211_if_ap *bss, u16 aid)
{
	/*
	 * This format has been mandated by the IEEE specifications,
	 * so this line may not be changed to use the __set_bit() format.
	 */
	bss->tim[aid / 8] |= (1 << (aid % 8));
}

static inline void __bss_tim_clear(struct ieee80211_if_ap *bss, u16 aid)
{
	/*
	 * This format has been mandated by the IEEE specifications,
	 * so this line may not be changed to use the __clear_bit() format.
	 */
	bss->tim[aid / 8] &= ~(1 << (aid % 8));
}

652
static unsigned long ieee80211_tids_for_ac(int ac)
653
{
654 655 656 657 658 659 660 661 662 663 664 665 666
	/* If we ever support TIDs > 7, this obviously needs to be adjusted */
	switch (ac) {
	case IEEE80211_AC_VO:
		return BIT(6) | BIT(7);
	case IEEE80211_AC_VI:
		return BIT(4) | BIT(5);
	case IEEE80211_AC_BE:
		return BIT(0) | BIT(3);
	case IEEE80211_AC_BK:
		return BIT(1) | BIT(2);
	default:
		WARN_ON(1);
		return 0;
667
	}
668 669
}

J
Johannes Berg 已提交
670
void sta_info_recalc_tim(struct sta_info *sta)
671
{
J
Johannes Berg 已提交
672 673
	struct ieee80211_local *local = sta->local;
	struct ieee80211_if_ap *bss = sta->sdata->bss;
674
	unsigned long flags;
675 676 677
	bool indicate_tim = false;
	u8 ignore_for_tim = sta->sta.uapsd_queues;
	int ac;
678

J
Johannes Berg 已提交
679 680
	if (WARN_ON_ONCE(!sta->sdata->bss))
		return;
681

J
Johannes Berg 已提交
682 683 684
	/* No need to do anything if the driver does all */
	if (local->hw.flags & IEEE80211_HW_AP_LINK_PS)
		return;
685

J
Johannes Berg 已提交
686 687
	if (sta->dead)
		goto done;
688

689 690 691 692 693 694 695 696 697 698 699
	/*
	 * If all ACs are delivery-enabled then we should build
	 * the TIM bit for all ACs anyway; if only some are then
	 * we ignore those and build the TIM bit using only the
	 * non-enabled ones.
	 */
	if (ignore_for_tim == BIT(IEEE80211_NUM_ACS) - 1)
		ignore_for_tim = 0;

	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
		unsigned long tids;
700

701 702 703 704 705 706 707
		if (ignore_for_tim & BIT(ac))
			continue;

		indicate_tim |= !skb_queue_empty(&sta->tx_filtered[ac]) ||
				!skb_queue_empty(&sta->ps_tx_buf[ac]);
		if (indicate_tim)
			break;
708

709 710 711 712
		tids = ieee80211_tids_for_ac(ac);

		indicate_tim |=
			sta->driver_buffered_tids & tids;
713
	}
714

J
Johannes Berg 已提交
715 716
 done:
	spin_lock_irqsave(&local->sta_lock, flags);
717

718
	if (indicate_tim)
J
Johannes Berg 已提交
719 720 721
		__bss_tim_set(bss, sta->sta.aid);
	else
		__bss_tim_clear(bss, sta->sta.aid);
722

J
Johannes Berg 已提交
723 724
	if (local->ops->set_tim) {
		local->tim_in_locked_section = true;
725
		drv_set_tim(local, &sta->sta, indicate_tim);
J
Johannes Berg 已提交
726 727
		local->tim_in_locked_section = false;
	}
728

J
Johannes Berg 已提交
729
	spin_unlock_irqrestore(&local->sta_lock, flags);
730 731
}

732
static bool sta_info_buffer_expired(struct sta_info *sta, struct sk_buff *skb)
733
{
734
	struct ieee80211_tx_info *info;
735 736 737
	int timeout;

	if (!skb)
738
		return false;
739

740
	info = IEEE80211_SKB_CB(skb);
741 742

	/* Timeout: (2 * listen_interval * beacon_int * 1024 / 1000000) sec */
743 744 745
	timeout = (sta->listen_interval *
		   sta->sdata->vif.bss_conf.beacon_int *
		   32 / 15625) * HZ;
746 747
	if (timeout < STA_TX_BUFFER_EXPIRE)
		timeout = STA_TX_BUFFER_EXPIRE;
748
	return time_after(jiffies, info->control.jiffies + timeout);
749 750 751
}


752 753
static bool sta_info_cleanup_expire_buffered_ac(struct ieee80211_local *local,
						struct sta_info *sta, int ac)
754 755 756 757
{
	unsigned long flags;
	struct sk_buff *skb;

758 759 760 761 762 763 764 765
	/*
	 * First check for frames that should expire on the filtered
	 * queue. Frames here were rejected by the driver and are on
	 * a separate queue to avoid reordering with normal PS-buffered
	 * frames. They also aren't accounted for right now in the
	 * total_ps_buffered counter.
	 */
	for (;;) {
766 767
		spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
		skb = skb_peek(&sta->tx_filtered[ac]);
768
		if (sta_info_buffer_expired(sta, skb))
769
			skb = __skb_dequeue(&sta->tx_filtered[ac]);
770 771
		else
			skb = NULL;
772
		spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790

		/*
		 * Frames are queued in order, so if this one
		 * hasn't expired yet we can stop testing. If
		 * we actually reached the end of the queue we
		 * also need to stop, of course.
		 */
		if (!skb)
			break;
		dev_kfree_skb(skb);
	}

	/*
	 * Now also check the normal PS-buffered queue, this will
	 * only find something if the filtered queue was emptied
	 * since the filtered frames are all before the normal PS
	 * buffered frames.
	 */
791
	for (;;) {
792 793
		spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
		skb = skb_peek(&sta->ps_tx_buf[ac]);
794
		if (sta_info_buffer_expired(sta, skb))
795
			skb = __skb_dequeue(&sta->ps_tx_buf[ac]);
796
		else
797
			skb = NULL;
798
		spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
799

800 801 802 803 804
		/*
		 * frames are queued in order, so if this one
		 * hasn't expired yet (or we reached the end of
		 * the queue) we can stop testing
		 */
805
		if (!skb)
806
			break;
807 808

		local->total_ps_buffered--;
809
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
810 811
		printk(KERN_DEBUG "Buffered frame expired (STA %pM)\n",
		       sta->sta.addr);
812
#endif
813
		dev_kfree_skb(skb);
814
	}
815

816 817 818 819 820 821 822 823 824 825 826 827
	/*
	 * Finally, recalculate the TIM bit for this station -- it might
	 * now be clear because the station was too slow to retrieve its
	 * frames.
	 */
	sta_info_recalc_tim(sta);

	/*
	 * Return whether there are any frames still buffered, this is
	 * used to check whether the cleanup timer still needs to run,
	 * if there are no frames we don't need to rearm the timer.
	 */
828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846
	return !(skb_queue_empty(&sta->ps_tx_buf[ac]) &&
		 skb_queue_empty(&sta->tx_filtered[ac]));
}

static bool sta_info_cleanup_expire_buffered(struct ieee80211_local *local,
					     struct sta_info *sta)
{
	bool have_buffered = false;
	int ac;

	/* This is only necessary for stations on BSS interfaces */
	if (!sta->sdata->bss)
		return false;

	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
		have_buffered |=
			sta_info_cleanup_expire_buffered_ac(local, sta, ac);

	return have_buffered;
847 848
}

849
static int __must_check __sta_info_destroy(struct sta_info *sta)
850
{
851 852 853
	struct ieee80211_local *local;
	struct ieee80211_sub_if_data *sdata;
	unsigned long flags;
854
	int ret, i, ac;
855
	struct tid_ampdu_tx *tid_tx;
856

857
	might_sleep();
858

859 860
	if (!sta)
		return -ENOENT;
861

862 863
	local = sta->local;
	sdata = sta->sdata;
864

865 866 867 868 869 870
	/*
	 * Before removing the station from the driver and
	 * rate control, it might still start new aggregation
	 * sessions -- block that to make sure the tear-down
	 * will be sufficient.
	 */
J
Johannes Berg 已提交
871
	set_sta_flag(sta, WLAN_STA_BLOCK_BA);
872
	ieee80211_sta_tear_down_BA_sessions(sta, true);
873

874 875 876 877 878 879 880 881 882
	spin_lock_irqsave(&local->sta_lock, flags);
	ret = sta_info_hash_del(local, sta);
	/* this might still be the pending list ... which is fine */
	if (!ret)
		list_del(&sta->list);
	spin_unlock_irqrestore(&local->sta_lock, flags);
	if (ret)
		return ret;

883
	mutex_lock(&local->key_mtx);
884
	for (i = 0; i < NUM_DEFAULT_KEYS; i++)
J
Johannes Berg 已提交
885
		__ieee80211_key_free(key_mtx_dereference(local, sta->gtk[i]));
886
	if (sta->ptk)
J
Johannes Berg 已提交
887
		__ieee80211_key_free(key_mtx_dereference(local, sta->ptk));
888
	mutex_unlock(&local->key_mtx);
889 890 891

	sta->dead = true;

J
Johannes Berg 已提交
892 893
	if (test_sta_flag(sta, WLAN_STA_PS_STA) ||
	    test_sta_flag(sta, WLAN_STA_PS_DRIVER)) {
894 895
		BUG_ON(!sdata->bss);

J
Johannes Berg 已提交
896 897 898
		clear_sta_flag(sta, WLAN_STA_PS_STA);
		clear_sta_flag(sta, WLAN_STA_PS_DRIVER);

899
		atomic_dec(&sdata->bss->num_sta_ps);
J
Johannes Berg 已提交
900
		sta_info_recalc_tim(sta);
901 902 903 904 905 906
	}

	local->num_sta--;
	local->sta_generation++;

	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
907
		RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);
908

909 910 911
	while (sta->sta_state > IEEE80211_STA_NONE)
		sta_info_move_state(sta, sta->sta_state - 1);

912 913 914 915 916 917 918 919 920
	if (sta->uploaded) {
		if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
			sdata = container_of(sdata->bss,
					     struct ieee80211_sub_if_data,
					     u.ap);
		drv_sta_remove(local, sdata, &sta->sta);
		sdata = sta->sdata;
	}

921 922 923 924 925 926 927 928
	/*
	 * At this point, after we wait for an RCU grace period,
	 * neither mac80211 nor the driver can reference this
	 * sta struct any more except by still existing timers
	 * associated with this station that we clean up below.
	 */
	synchronize_rcu();

929 930 931 932 933
	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
		local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]);
		__skb_queue_purge(&sta->ps_tx_buf[ac]);
		__skb_queue_purge(&sta->tx_filtered[ac]);
	}
J
Johannes Berg 已提交
934

935
#ifdef CONFIG_MAC80211_MESH
936
	if (ieee80211_vif_is_mesh(&sdata->vif))
937 938 939 940
		mesh_accept_plinks_update(sdata);
#endif

#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
J
Joe Perches 已提交
941
	wiphy_debug(local->hw.wiphy, "Removed STA %pM\n", sta->sta.addr);
942 943 944
#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */
	cancel_work_sync(&sta->drv_unblock_wk);

945 946
	cfg80211_del_sta(sdata->dev, sta->sta.addr, GFP_KERNEL);

947 948 949 950 951 952 953 954 955 956
	rate_control_remove_sta_debugfs(sta);
	ieee80211_sta_debugfs_remove(sta);

#ifdef CONFIG_MAC80211_MESH
	if (ieee80211_vif_is_mesh(&sta->sdata->vif)) {
		mesh_plink_deactivate(sta);
		del_timer_sync(&sta->plink_timer);
	}
#endif

957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980
	/* There could be some memory leaks because of ampdu tx pending queue
	 * not being freed before destroying the station info.
	 *
	 * Make sure that such queues are purged before freeing the station
	 * info.
	 * TODO: We have to somehow postpone the full destruction
	 * until the aggregation stop completes. Refer
	 * http://thread.gmane.org/gmane.linux.kernel.wireless.general/81936
	 */
	for (i = 0; i < STA_TID_NUM; i++) {
		if (!sta->ampdu_mlme.tid_tx[i])
			continue;
		tid_tx = sta->ampdu_mlme.tid_tx[i];
		if (skb_queue_len(&tid_tx->pending)) {
#ifdef CONFIG_MAC80211_HT_DEBUG
			wiphy_debug(local->hw.wiphy, "TX A-MPDU  purging %d "
				"packets for tid=%d\n",
				skb_queue_len(&tid_tx->pending), i);
#endif /* CONFIG_MAC80211_HT_DEBUG */
			__skb_queue_purge(&tid_tx->pending);
		}
		kfree_rcu(tid_tx, rcu_head);
	}

981
	sta_info_free(local, sta);
982 983

	return 0;
J
Jiri Slaby 已提交
984 985
}

986
int sta_info_destroy_addr(struct ieee80211_sub_if_data *sdata, const u8 *addr)
J
Jiri Slaby 已提交
987
{
988 989
	struct sta_info *sta;
	int ret;
J
Jiri Slaby 已提交
990

991
	mutex_lock(&sdata->local->sta_mtx);
992
	sta = sta_info_get_rx(sdata, addr);
993 994
	ret = __sta_info_destroy(sta);
	mutex_unlock(&sdata->local->sta_mtx);
J
Jiri Slaby 已提交
995 996 997 998

	return ret;
}

999 1000
int sta_info_destroy_addr_bss(struct ieee80211_sub_if_data *sdata,
			      const u8 *addr)
J
Jiri Benc 已提交
1001
{
1002 1003
	struct sta_info *sta;
	int ret;
J
Jiri Benc 已提交
1004

1005
	mutex_lock(&sdata->local->sta_mtx);
1006
	sta = sta_info_get_bss_rx(sdata, addr);
1007 1008
	ret = __sta_info_destroy(sta);
	mutex_unlock(&sdata->local->sta_mtx);
1009

1010 1011
	return ret;
}
J
Jiri Benc 已提交
1012

1013 1014 1015 1016
static void sta_info_cleanup(unsigned long data)
{
	struct ieee80211_local *local = (struct ieee80211_local *) data;
	struct sta_info *sta;
1017
	bool timer_needed = false;
1018 1019 1020

	rcu_read_lock();
	list_for_each_entry_rcu(sta, &local->sta_list, list)
1021 1022
		if (sta_info_cleanup_expire_buffered(local, sta))
			timer_needed = true;
1023
	rcu_read_unlock();
J
Jiri Benc 已提交
1024

1025 1026
	if (local->quiescing)
		return;
1027

1028 1029 1030
	if (!timer_needed)
		return;

1031 1032
	mod_timer(&local->sta_cleanup,
		  round_jiffies(jiffies + STA_INFO_CLEANUP_INTERVAL));
J
Jiri Benc 已提交
1033 1034
}

1035 1036
void sta_info_init(struct ieee80211_local *local)
{
1037
	spin_lock_init(&local->sta_lock);
1038
	mutex_init(&local->sta_mtx);
1039
	INIT_LIST_HEAD(&local->sta_list);
1040 1041
	INIT_LIST_HEAD(&local->sta_pending_list);
	INIT_WORK(&local->sta_finish_work, sta_info_finish_work);
1042

1043 1044
	setup_timer(&local->sta_cleanup, sta_info_cleanup,
		    (unsigned long)local);
1045 1046 1047 1048 1049
}

void sta_info_stop(struct ieee80211_local *local)
{
	del_timer(&local->sta_cleanup);
1050
	sta_info_flush(local, NULL);
1051 1052 1053 1054
}

/**
 * sta_info_flush - flush matching STA entries from the STA table
1055 1056 1057
 *
 * Returns the number of removed STA entries.
 *
1058
 * @local: local interface data
1059
 * @sdata: matching rule for the net device (sta->dev) or %NULL to match all STAs
1060
 */
1061
int sta_info_flush(struct ieee80211_local *local,
1062
		   struct ieee80211_sub_if_data *sdata)
1063 1064
{
	struct sta_info *sta, *tmp;
1065
	int ret = 0;
1066

1067
	might_sleep();
1068

1069 1070 1071 1072
	mutex_lock(&local->sta_mtx);

	sta_info_finish_pending(local);

1073
	list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
1074 1075
		if (!sdata || sdata == sta->sdata)
			WARN_ON(__sta_info_destroy(sta));
1076
	}
1077
	mutex_unlock(&local->sta_mtx);
1078 1079

	return ret;
1080
}
J
Johannes Berg 已提交
1081

1082 1083 1084 1085 1086 1087
void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata,
			  unsigned long exp_time)
{
	struct ieee80211_local *local = sdata->local;
	struct sta_info *sta, *tmp;

1088
	mutex_lock(&local->sta_mtx);
1089 1090 1091
	list_for_each_entry_safe(sta, tmp, &local->sta_list, list)
		if (time_after(jiffies, sta->last_rx + exp_time)) {
#ifdef CONFIG_MAC80211_IBSS_DEBUG
1092
			printk(KERN_DEBUG "%s: expiring inactive STA %pM\n",
1093
			       sdata->name, sta->sta.addr);
1094
#endif
1095
			WARN_ON(__sta_info_destroy(sta));
1096
		}
1097
	mutex_unlock(&local->sta_mtx);
1098
}
1099

1100 1101 1102
struct ieee80211_sta *ieee80211_find_sta_by_ifaddr(struct ieee80211_hw *hw,
					       const u8 *addr,
					       const u8 *localaddr)
1103
{
1104
	struct sta_info *sta, *nxt;
1105

1106 1107 1108 1109
	/*
	 * Just return a random station if localaddr is NULL
	 * ... first in list.
	 */
1110
	for_each_sta_info(hw_to_local(hw), addr, sta, nxt) {
1111 1112 1113
		if (localaddr &&
		    compare_ether_addr(sta->sdata->vif.addr, localaddr) != 0)
			continue;
1114 1115
		if (!sta->uploaded)
			return NULL;
1116
		return &sta->sta;
1117 1118
	}

1119
	return NULL;
1120
}
1121
EXPORT_SYMBOL_GPL(ieee80211_find_sta_by_ifaddr);
1122 1123 1124 1125

struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif,
					 const u8 *addr)
{
1126
	struct sta_info *sta;
1127 1128 1129 1130

	if (!vif)
		return NULL;

1131 1132 1133 1134 1135 1136
	sta = sta_info_get_bss(vif_to_sdata(vif), addr);
	if (!sta)
		return NULL;

	if (!sta->uploaded)
		return NULL;
1137

1138
	return &sta->sta;
1139
}
1140
EXPORT_SYMBOL(ieee80211_find_sta);
1141

1142 1143 1144 1145
static void clear_sta_ps_flags(void *_sta)
{
	struct sta_info *sta = _sta;

J
Johannes Berg 已提交
1146 1147
	clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
	clear_sta_flag(sta, WLAN_STA_PS_STA);
1148 1149
}

1150 1151 1152 1153 1154
/* powersave support code */
void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
{
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	struct ieee80211_local *local = sdata->local;
1155 1156 1157
	struct sk_buff_head pending;
	int filtered = 0, buffered = 0, ac;

J
Johannes Berg 已提交
1158
	clear_sta_flag(sta, WLAN_STA_SP);
J
Johannes Berg 已提交
1159

1160 1161
	BUILD_BUG_ON(BITS_TO_LONGS(STA_TID_NUM) > 1);
	sta->driver_buffered_tids = 0;
1162

1163 1164
	if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS))
		drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta);
1165

1166
	skb_queue_head_init(&pending);
1167 1168

	/* Send all buffered frames to the station */
1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183
	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
		int count = skb_queue_len(&pending), tmp;

		skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending);
		tmp = skb_queue_len(&pending);
		filtered += tmp - count;
		count = tmp;

		skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending);
		tmp = skb_queue_len(&pending);
		buffered += tmp - count;
	}

	ieee80211_add_pending_skbs_fn(local, &pending, clear_sta_ps_flags, sta);

1184 1185
	local->total_ps_buffered -= buffered;

J
Johannes Berg 已提交
1186 1187
	sta_info_recalc_tim(sta);

1188 1189
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
	printk(KERN_DEBUG "%s: STA %pM aid %d sending %d filtered/%d PS frames "
1190
	       "since STA not sleeping anymore\n", sdata->name,
1191
	       sta->sta.addr, sta->sta.aid, filtered, buffered);
1192 1193 1194
#endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
}

1195 1196
static void ieee80211_send_null_response(struct ieee80211_sub_if_data *sdata,
					 struct sta_info *sta, int tid,
1197
					 enum ieee80211_frame_release_type reason)
1198 1199
{
	struct ieee80211_local *local = sdata->local;
1200
	struct ieee80211_qos_hdr *nullfunc;
1201
	struct sk_buff *skb;
1202 1203
	int size = sizeof(*nullfunc);
	__le16 fc;
J
Johannes Berg 已提交
1204
	bool qos = test_sta_flag(sta, WLAN_STA_WME);
1205
	struct ieee80211_tx_info *info;
1206

1207 1208 1209 1210 1211 1212 1213 1214 1215
	if (qos) {
		fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
				 IEEE80211_STYPE_QOS_NULLFUNC |
				 IEEE80211_FCTL_FROMDS);
	} else {
		size -= 2;
		fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
				 IEEE80211_STYPE_NULLFUNC |
				 IEEE80211_FCTL_FROMDS);
1216 1217
	}

1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230
	skb = dev_alloc_skb(local->hw.extra_tx_headroom + size);
	if (!skb)
		return;

	skb_reserve(skb, local->hw.extra_tx_headroom);

	nullfunc = (void *) skb_put(skb, size);
	nullfunc->frame_control = fc;
	nullfunc->duration_id = 0;
	memcpy(nullfunc->addr1, sta->sta.addr, ETH_ALEN);
	memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN);
	memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN);

1231 1232
	skb->priority = tid;
	skb_set_queue_mapping(skb, ieee802_1d_to_ac[tid]);
1233 1234 1235
	if (qos) {
		nullfunc->qos_ctrl = cpu_to_le16(tid);

1236
		if (reason == IEEE80211_FRAME_RELEASE_UAPSD)
1237 1238 1239 1240 1241 1242 1243 1244 1245
			nullfunc->qos_ctrl |=
				cpu_to_le16(IEEE80211_QOS_CTL_EOSP);
	}

	info = IEEE80211_SKB_CB(skb);

	/*
	 * Tell TX path to send this frame even though the
	 * STA may still remain is PS mode after this frame
1246 1247
	 * exchange. Also set EOSP to indicate this packet
	 * ends the poll/service period.
1248
	 */
1249 1250 1251
	info->flags |= IEEE80211_TX_CTL_POLL_RESPONSE |
		       IEEE80211_TX_STATUS_EOSP |
		       IEEE80211_TX_CTL_REQ_TX_STATUS;
1252

1253 1254
	drv_allow_buffered_frames(local, sta, BIT(tid), 1, reason, false);

1255 1256 1257
	ieee80211_xmit(sdata, skb);
}

J
Johannes Berg 已提交
1258 1259 1260 1261
static void
ieee80211_sta_ps_deliver_response(struct sta_info *sta,
				  int n_frames, u8 ignored_acs,
				  enum ieee80211_frame_release_type reason)
1262 1263 1264
{
	struct ieee80211_sub_if_data *sdata = sta->sdata;
	struct ieee80211_local *local = sdata->local;
1265
	bool found = false;
1266 1267
	bool more_data = false;
	int ac;
1268
	unsigned long driver_release_tids = 0;
J
Johannes Berg 已提交
1269
	struct sk_buff_head frames;
1270

1271
	/* Service or PS-Poll period starts */
J
Johannes Berg 已提交
1272
	set_sta_flag(sta, WLAN_STA_SP);
1273

J
Johannes Berg 已提交
1274
	__skb_queue_head_init(&frames);
1275 1276

	/*
J
Johannes Berg 已提交
1277
	 * Get response frame(s) and more data bit for it.
1278 1279
	 */
	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
1280 1281
		unsigned long tids;

J
Johannes Berg 已提交
1282
		if (ignored_acs & BIT(ac))
1283 1284
			continue;

1285 1286 1287 1288 1289 1290 1291
		tids = ieee80211_tids_for_ac(ac);

		if (!found) {
			driver_release_tids = sta->driver_buffered_tids & tids;
			if (driver_release_tids) {
				found = true;
			} else {
J
Johannes Berg 已提交
1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304
				struct sk_buff *skb;

				while (n_frames > 0) {
					skb = skb_dequeue(&sta->tx_filtered[ac]);
					if (!skb) {
						skb = skb_dequeue(
							&sta->ps_tx_buf[ac]);
						if (skb)
							local->total_ps_buffered--;
					}
					if (!skb)
						break;
					n_frames--;
1305
					found = true;
J
Johannes Berg 已提交
1306 1307
					__skb_queue_tail(&frames, skb);
				}
1308 1309
			}

1310 1311 1312 1313 1314
			/*
			 * If the driver has data on more than one TID then
			 * certainly there's more data if we release just a
			 * single frame now (from a single TID).
			 */
J
Johannes Berg 已提交
1315 1316
			if (reason == IEEE80211_FRAME_RELEASE_PSPOLL &&
			    hweight16(driver_release_tids) > 1) {
1317 1318 1319 1320 1321 1322
				more_data = true;
				driver_release_tids =
					BIT(ffs(driver_release_tids) - 1);
				break;
			}
		}
1323 1324 1325 1326 1327 1328

		if (!skb_queue_empty(&sta->tx_filtered[ac]) ||
		    !skb_queue_empty(&sta->ps_tx_buf[ac])) {
			more_data = true;
			break;
		}
1329 1330
	}

1331
	if (!found) {
1332
		int tid;
1333 1334

		/*
1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346
		 * For PS-Poll, this can only happen due to a race condition
		 * when we set the TIM bit and the station notices it, but
		 * before it can poll for the frame we expire it.
		 *
		 * For uAPSD, this is said in the standard (11.2.1.5 h):
		 *	At each unscheduled SP for a non-AP STA, the AP shall
		 *	attempt to transmit at least one MSDU or MMPDU, but no
		 *	more than the value specified in the Max SP Length field
		 *	in the QoS Capability element from delivery-enabled ACs,
		 *	that are destined for the non-AP STA.
		 *
		 * Since we have no other MSDU/MMPDU, transmit a QoS null frame.
1347 1348
		 */

1349 1350
		/* This will evaluate to 1, 3, 5 or 7. */
		tid = 7 - ((ffs(~ignored_acs) - 1) << 1);
1351

1352
		ieee80211_send_null_response(sdata, sta, tid, reason);
1353 1354
		return;
	}
1355

J
Johannes Berg 已提交
1356 1357 1358
	if (!driver_release_tids) {
		struct sk_buff_head pending;
		struct sk_buff *skb;
1359 1360
		int num = 0;
		u16 tids = 0;
1361

J
Johannes Berg 已提交
1362
		skb_queue_head_init(&pending);
1363

J
Johannes Berg 已提交
1364 1365 1366
		while ((skb = __skb_dequeue(&frames))) {
			struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
			struct ieee80211_hdr *hdr = (void *) skb->data;
1367 1368 1369
			u8 *qoshdr = NULL;

			num++;
1370

J
Johannes Berg 已提交
1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381
			/*
			 * Tell TX path to send this frame even though the
			 * STA may still remain is PS mode after this frame
			 * exchange.
			 */
			info->flags |= IEEE80211_TX_CTL_POLL_RESPONSE;

			/*
			 * Use MoreData flag to indicate whether there are
			 * more buffered frames for this STA
			 */
1382
			if (more_data || !skb_queue_empty(&frames))
J
Johannes Berg 已提交
1383 1384
				hdr->frame_control |=
					cpu_to_le16(IEEE80211_FCTL_MOREDATA);
1385 1386 1387
			else
				hdr->frame_control &=
					cpu_to_le16(~IEEE80211_FCTL_MOREDATA);
J
Johannes Berg 已提交
1388

1389 1390 1391 1392 1393
			if (ieee80211_is_data_qos(hdr->frame_control) ||
			    ieee80211_is_qos_nullfunc(hdr->frame_control))
				qoshdr = ieee80211_get_qos_ctl(hdr);

			/* set EOSP for the frame */
J
Johannes Berg 已提交
1394
			if (reason == IEEE80211_FRAME_RELEASE_UAPSD &&
1395 1396
			    qoshdr && skb_queue_empty(&frames))
				*qoshdr |= IEEE80211_QOS_CTL_EOSP;
1397

1398 1399 1400
			info->flags |= IEEE80211_TX_STATUS_EOSP |
				       IEEE80211_TX_CTL_REQ_TX_STATUS;

1401 1402 1403 1404 1405
			if (qoshdr)
				tids |= BIT(*qoshdr & IEEE80211_QOS_CTL_TID_MASK);
			else
				tids |= BIT(0);

J
Johannes Berg 已提交
1406 1407
			__skb_queue_tail(&pending, skb);
		}
1408

1409 1410 1411
		drv_allow_buffered_frames(local, sta, tids, num,
					  reason, more_data);

J
Johannes Berg 已提交
1412
		ieee80211_add_pending_skbs(local, &pending);
1413

J
Johannes Berg 已提交
1414
		sta_info_recalc_tim(sta);
1415 1416
	} else {
		/*
1417 1418 1419 1420 1421 1422 1423 1424 1425 1426
		 * We need to release a frame that is buffered somewhere in the
		 * driver ... it'll have to handle that.
		 * Note that, as per the comment above, it'll also have to see
		 * if there is more than just one frame on the specific TID that
		 * we're releasing from, and it needs to set the more-data bit
		 * accordingly if we tell it that there's no more data. If we do
		 * tell it there's more data, then of course the more-data bit
		 * needs to be set anyway.
		 */
		drv_release_buffered_frames(local, sta, driver_release_tids,
J
Johannes Berg 已提交
1427
					    n_frames, reason, more_data);
1428 1429 1430 1431 1432 1433 1434 1435

		/*
		 * Note that we don't recalculate the TIM bit here as it would
		 * most likely have no effect at all unless the driver told us
		 * that the TID became empty before returning here from the
		 * release function.
		 * Either way, however, when the driver tells us that the TID
		 * became empty we'll do the TIM recalculation.
1436 1437 1438 1439
		 */
	}
}

J
Johannes Berg 已提交
1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489
void ieee80211_sta_ps_deliver_poll_response(struct sta_info *sta)
{
	u8 ignore_for_response = sta->sta.uapsd_queues;

	/*
	 * If all ACs are delivery-enabled then we should reply
	 * from any of them, if only some are enabled we reply
	 * only from the non-enabled ones.
	 */
	if (ignore_for_response == BIT(IEEE80211_NUM_ACS) - 1)
		ignore_for_response = 0;

	ieee80211_sta_ps_deliver_response(sta, 1, ignore_for_response,
					  IEEE80211_FRAME_RELEASE_PSPOLL);
}

void ieee80211_sta_ps_deliver_uapsd(struct sta_info *sta)
{
	int n_frames = sta->sta.max_sp;
	u8 delivery_enabled = sta->sta.uapsd_queues;

	/*
	 * If we ever grow support for TSPEC this might happen if
	 * the TSPEC update from hostapd comes in between a trigger
	 * frame setting WLAN_STA_UAPSD in the RX path and this
	 * actually getting called.
	 */
	if (!delivery_enabled)
		return;

	switch (sta->sta.max_sp) {
	case 1:
		n_frames = 2;
		break;
	case 2:
		n_frames = 4;
		break;
	case 3:
		n_frames = 6;
		break;
	case 0:
		/* XXX: what is a good value? */
		n_frames = 8;
		break;
	}

	ieee80211_sta_ps_deliver_response(sta, n_frames, ~delivery_enabled,
					  IEEE80211_FRAME_RELEASE_UAPSD);
}

1490 1491 1492 1493 1494
void ieee80211_sta_block_awake(struct ieee80211_hw *hw,
			       struct ieee80211_sta *pubsta, bool block)
{
	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);

J
Johannes Berg 已提交
1495 1496
	trace_api_sta_block_awake(sta->local, pubsta, block);

1497
	if (block)
J
Johannes Berg 已提交
1498 1499
		set_sta_flag(sta, WLAN_STA_PS_DRIVER);
	else if (test_sta_flag(sta, WLAN_STA_PS_DRIVER))
1500 1501 1502
		ieee80211_queue_work(hw, &sta->drv_unblock_wk);
}
EXPORT_SYMBOL(ieee80211_sta_block_awake);
1503

1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528
void ieee80211_sta_eosp_irqsafe(struct ieee80211_sta *pubsta)
{
	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
	struct ieee80211_local *local = sta->local;
	struct sk_buff *skb;
	struct skb_eosp_msg_data *data;

	trace_api_eosp(local, pubsta);

	skb = alloc_skb(0, GFP_ATOMIC);
	if (!skb) {
		/* too bad ... but race is better than loss */
		clear_sta_flag(sta, WLAN_STA_SP);
		return;
	}

	data = (void *)skb->cb;
	memcpy(data->sta, pubsta->addr, ETH_ALEN);
	memcpy(data->iface, sta->sdata->vif.addr, ETH_ALEN);
	skb->pkt_type = IEEE80211_EOSP_MSG;
	skb_queue_tail(&local->skb_queue, skb);
	tasklet_schedule(&local->tasklet);
}
EXPORT_SYMBOL(ieee80211_sta_eosp_irqsafe);

1529 1530
void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta,
				u8 tid, bool buffered)
1531 1532 1533
{
	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);

1534
	if (WARN_ON(tid >= STA_TID_NUM))
1535 1536
		return;

1537 1538 1539 1540 1541
	if (buffered)
		set_bit(tid, &sta->driver_buffered_tids);
	else
		clear_bit(tid, &sta->driver_buffered_tids);

J
Johannes Berg 已提交
1542
	sta_info_recalc_tim(sta);
1543
}
1544
EXPORT_SYMBOL(ieee80211_sta_set_buffered);
1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569

int sta_info_move_state_checked(struct sta_info *sta,
				enum ieee80211_sta_state new_state)
{
	/* might_sleep(); -- for driver notify later, fix IBSS first */

	if (sta->sta_state == new_state)
		return 0;

	switch (new_state) {
	case IEEE80211_STA_NONE:
		if (sta->sta_state == IEEE80211_STA_AUTH)
			clear_bit(WLAN_STA_AUTH, &sta->_flags);
		else
			return -EINVAL;
		break;
	case IEEE80211_STA_AUTH:
		if (sta->sta_state == IEEE80211_STA_NONE)
			set_bit(WLAN_STA_AUTH, &sta->_flags);
		else if (sta->sta_state == IEEE80211_STA_ASSOC)
			clear_bit(WLAN_STA_ASSOC, &sta->_flags);
		else
			return -EINVAL;
		break;
	case IEEE80211_STA_ASSOC:
1570
		if (sta->sta_state == IEEE80211_STA_AUTH) {
1571
			set_bit(WLAN_STA_ASSOC, &sta->_flags);
1572 1573 1574
		} else if (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
			if (sta->sdata->vif.type == NL80211_IFTYPE_AP)
				atomic_dec(&sta->sdata->u.ap.num_sta_authorized);
1575
			clear_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
1576
		} else
1577 1578 1579
			return -EINVAL;
		break;
	case IEEE80211_STA_AUTHORIZED:
1580 1581 1582
		if (sta->sta_state == IEEE80211_STA_ASSOC) {
			if (sta->sdata->vif.type == NL80211_IFTYPE_AP)
				atomic_inc(&sta->sdata->u.ap.num_sta_authorized);
1583
			set_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
1584
		} else
1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597
			return -EINVAL;
		break;
	default:
		WARN(1, "invalid state %d", new_state);
		return -EINVAL;
	}

	printk(KERN_DEBUG "%s: moving STA %pM to state %d\n",
		sta->sdata->name, sta->sta.addr, new_state);
	sta->sta_state = new_state;

	return 0;
}