mac80211: only transition STAs ps->wake on data frames
[deliverable/linux.git] / net / mac80211 / main.c
CommitLineData
f0706e82
JB
1/*
2 * Copyright 2002-2005, Instant802 Networks, Inc.
3 * Copyright 2005-2006, Devicescape Software, Inc.
4 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <net/mac80211.h>
12#include <net/ieee80211_radiotap.h>
13#include <linux/module.h>
14#include <linux/init.h>
15#include <linux/netdevice.h>
16#include <linux/types.h>
17#include <linux/slab.h>
18#include <linux/skbuff.h>
19#include <linux/etherdevice.h>
20#include <linux/if_arp.h>
21#include <linux/wireless.h>
22#include <linux/rtnetlink.h>
f0706e82 23#include <linux/bitmap.h>
881d966b 24#include <net/net_namespace.h>
f0706e82
JB
25#include <net/cfg80211.h>
26
f0706e82 27#include "ieee80211_i.h"
2c8dccc7 28#include "rate.h"
f7a92144 29#include "mesh.h"
f0706e82 30#include "wep.h"
f0706e82
JB
31#include "wme.h"
32#include "aes_ccm.h"
2c8dccc7 33#include "led.h"
e0eb6859 34#include "cfg.h"
e9f207f0
JB
35#include "debugfs.h"
36#include "debugfs_netdev.h"
f0706e82 37
b306f453
JB
38/*
39 * For seeing transmitted packets on monitor interfaces
40 * we have a radiotap header too.
41 */
42struct ieee80211_tx_status_rtap_hdr {
43 struct ieee80211_radiotap_header hdr;
e6a9854b
JB
44 u8 rate;
45 u8 padding_for_rate;
b306f453
JB
46 __le16 tx_flags;
47 u8 data_retries;
48} __attribute__ ((packed));
49
f0706e82 50
4150c572 51/* must be called under mdev tx lock */
0d143fe1 52void ieee80211_configure_filter(struct ieee80211_local *local)
4150c572
JB
53{
54 unsigned int changed_flags;
55 unsigned int new_flags = 0;
56
53918994 57 if (atomic_read(&local->iff_promiscs))
4150c572
JB
58 new_flags |= FIF_PROMISC_IN_BSS;
59
53918994 60 if (atomic_read(&local->iff_allmultis))
4150c572
JB
61 new_flags |= FIF_ALLMULTI;
62
63 if (local->monitors)
8cc9a739
MW
64 new_flags |= FIF_BCN_PRBRESP_PROMISC;
65
66 if (local->fif_fcsfail)
67 new_flags |= FIF_FCSFAIL;
68
69 if (local->fif_plcpfail)
70 new_flags |= FIF_PLCPFAIL;
71
72 if (local->fif_control)
73 new_flags |= FIF_CONTROL;
74
75 if (local->fif_other_bss)
76 new_flags |= FIF_OTHER_BSS;
4150c572
JB
77
78 changed_flags = local->filter_flags ^ new_flags;
79
80 /* be a bit nasty */
81 new_flags |= (1<<31);
82
83 local->ops->configure_filter(local_to_hw(local),
84 changed_flags, &new_flags,
85 local->mdev->mc_count,
86 local->mdev->mc_list);
87
88 WARN_ON(new_flags & (1<<31));
89
90 local->filter_flags = new_flags & ~(1<<31);
91}
92
b2c258fb 93/* master interface */
f0706e82 94
0d143fe1
JB
95static int header_parse_80211(const struct sk_buff *skb, unsigned char *haddr)
96{
97 memcpy(haddr, skb_mac_header(skb) + 10, ETH_ALEN); /* addr2 */
98 return ETH_ALEN;
99}
100
101static const struct header_ops ieee80211_header_ops = {
102 .create = eth_header,
103 .parse = header_parse_80211,
104 .rebuild = eth_rebuild_header,
105 .cache = eth_header_cache,
106 .cache_update = eth_header_cache_update,
107};
108
b2c258fb
JB
109static int ieee80211_master_open(struct net_device *dev)
110{
133b8226
JB
111 struct ieee80211_master_priv *mpriv = netdev_priv(dev);
112 struct ieee80211_local *local = mpriv->local;
b2c258fb
JB
113 struct ieee80211_sub_if_data *sdata;
114 int res = -EOPNOTSUPP;
f0706e82 115
79010420
JB
116 /* we hold the RTNL here so can safely walk the list */
117 list_for_each_entry(sdata, &local->interfaces, list) {
3e122be0 118 if (netif_running(sdata->dev)) {
b2c258fb
JB
119 res = 0;
120 break;
121 }
122 }
36d6825b
JB
123
124 if (res)
125 return res;
126
51cb6db0 127 netif_tx_start_all_queues(local->mdev);
36d6825b
JB
128
129 return 0;
b2c258fb 130}
f0706e82 131
b2c258fb 132static int ieee80211_master_stop(struct net_device *dev)
f0706e82 133{
133b8226
JB
134 struct ieee80211_master_priv *mpriv = netdev_priv(dev);
135 struct ieee80211_local *local = mpriv->local;
b2c258fb 136 struct ieee80211_sub_if_data *sdata;
f0706e82 137
79010420
JB
138 /* we hold the RTNL here so can safely walk the list */
139 list_for_each_entry(sdata, &local->interfaces, list)
3e122be0 140 if (netif_running(sdata->dev))
b2c258fb 141 dev_close(sdata->dev);
f0706e82 142
b2c258fb
JB
143 return 0;
144}
f0706e82 145
4150c572
JB
146static void ieee80211_master_set_multicast_list(struct net_device *dev)
147{
133b8226
JB
148 struct ieee80211_master_priv *mpriv = netdev_priv(dev);
149 struct ieee80211_local *local = mpriv->local;
4150c572
JB
150
151 ieee80211_configure_filter(local);
152}
153
b2c258fb
JB
154/* everything else */
155
9d139c81 156int ieee80211_if_config(struct ieee80211_sub_if_data *sdata, u32 changed)
b2c258fb 157{
9d139c81 158 struct ieee80211_local *local = sdata->local;
b2c258fb 159 struct ieee80211_if_conf conf;
b2c258fb 160
9d139c81
JB
161 if (WARN_ON(!netif_running(sdata->dev)))
162 return 0;
163
7a725f73
JB
164 if (WARN_ON(sdata->vif.type == NL80211_IFTYPE_AP_VLAN))
165 return -EINVAL;
166
9d139c81 167 if (!local->ops->config_interface)
f0706e82 168 return 0;
f0706e82 169
b2c258fb 170 memset(&conf, 0, sizeof(conf));
9d139c81
JB
171 conf.changed = changed;
172
05c914fe 173 if (sdata->vif.type == NL80211_IFTYPE_STATION ||
41bb73ee 174 sdata->vif.type == NL80211_IFTYPE_ADHOC)
4150c572 175 conf.bssid = sdata->u.sta.bssid;
41bb73ee 176 else if (sdata->vif.type == NL80211_IFTYPE_AP)
9d139c81 177 conf.bssid = sdata->dev->dev_addr;
41bb73ee 178 else if (ieee80211_vif_is_mesh(&sdata->vif)) {
9d139c81
JB
179 u8 zero[ETH_ALEN] = { 0 };
180 conf.bssid = zero;
9d139c81
JB
181 } else {
182 WARN_ON(1);
183 return -EINVAL;
f0706e82 184 }
f0706e82 185
9d139c81
JB
186 if (WARN_ON(!conf.bssid && (changed & IEEE80211_IFCC_BSSID)))
187 return -EINVAL;
f0706e82 188
9d139c81
JB
189 return local->ops->config_interface(local_to_hw(local),
190 &sdata->vif, &conf);
b2c258fb 191}
f0706e82 192
e8975581 193int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
b2c258fb 194{
b2c258fb
JB
195 struct ieee80211_channel *chan;
196 int ret = 0;
e8975581 197 int power;
f0706e82 198
cb121bad
JB
199 might_sleep();
200
c2b13452 201 if (local->sw_scanning)
b2c258fb 202 chan = local->scan_channel;
8318d78a 203 else
b2c258fb 204 chan = local->oper_channel;
f0706e82 205
e8975581
JB
206 if (chan != local->hw.conf.channel) {
207 local->hw.conf.channel = chan;
208 changed |= IEEE80211_CONF_CHANGE_CHANNEL;
209 }
210
8318d78a
JB
211
212 if (!local->hw.conf.power_level)
e8975581 213 power = chan->max_power;
8318d78a 214 else
e8975581
JB
215 power = min(chan->max_power, local->hw.conf.power_level);
216 if (local->hw.conf.power_level != power) {
217 changed |= IEEE80211_CONF_CHANGE_POWER;
218 local->hw.conf.power_level = power;
219 }
b2c258fb 220
e8975581
JB
221 if (changed && local->open_count) {
222 ret = local->ops->config(local_to_hw(local), changed);
d73782fd
JB
223 /*
224 * HW reconfiguration should never fail, the driver has told
225 * us what it can support so it should live up to that promise.
226 */
227 WARN_ON(ret);
228 }
f0706e82 229
b2c258fb
JB
230 return ret;
231}
f0706e82 232
471b3efd
JB
233void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
234 u32 changed)
d9430a32 235{
471b3efd
JB
236 struct ieee80211_local *local = sdata->local;
237
7a725f73
JB
238 if (WARN_ON(sdata->vif.type == NL80211_IFTYPE_AP_VLAN))
239 return;
240
471b3efd
JB
241 if (!changed)
242 return;
243
244 if (local->ops->bss_info_changed)
245 local->ops->bss_info_changed(local_to_hw(local),
246 &sdata->vif,
bda3933a 247 &sdata->vif.bss_conf,
471b3efd 248 changed);
d9430a32
DD
249}
250
f698d856 251u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata)
d9430a32 252{
bda3933a
JB
253 sdata->vif.bss_conf.use_cts_prot = false;
254 sdata->vif.bss_conf.use_short_preamble = false;
255 sdata->vif.bss_conf.use_short_slot = false;
7a5158ef
JB
256 return BSS_CHANGED_ERP_CTS_PROT |
257 BSS_CHANGED_ERP_PREAMBLE |
258 BSS_CHANGED_ERP_SLOT;
d9430a32
DD
259}
260
f0706e82 261void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw,
e039fa4a 262 struct sk_buff *skb)
f0706e82
JB
263{
264 struct ieee80211_local *local = hw_to_local(hw);
e039fa4a 265 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
f0706e82
JB
266 int tmp;
267
268 skb->dev = local->mdev;
f0706e82 269 skb->pkt_type = IEEE80211_TX_STATUS_MSG;
e039fa4a 270 skb_queue_tail(info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS ?
f0706e82
JB
271 &local->skb_queue : &local->skb_queue_unreliable, skb);
272 tmp = skb_queue_len(&local->skb_queue) +
273 skb_queue_len(&local->skb_queue_unreliable);
274 while (tmp > IEEE80211_IRQSAFE_QUEUE_LIMIT &&
275 (skb = skb_dequeue(&local->skb_queue_unreliable))) {
f0706e82
JB
276 dev_kfree_skb_irq(skb);
277 tmp--;
278 I802_DEBUG_INC(local->tx_status_drop);
279 }
280 tasklet_schedule(&local->tasklet);
281}
282EXPORT_SYMBOL(ieee80211_tx_status_irqsafe);
283
284static void ieee80211_tasklet_handler(unsigned long data)
285{
286 struct ieee80211_local *local = (struct ieee80211_local *) data;
287 struct sk_buff *skb;
288 struct ieee80211_rx_status rx_status;
eadc8d9e 289 struct ieee80211_ra_tid *ra_tid;
f0706e82
JB
290
291 while ((skb = skb_dequeue(&local->skb_queue)) ||
292 (skb = skb_dequeue(&local->skb_queue_unreliable))) {
293 switch (skb->pkt_type) {
294 case IEEE80211_RX_MSG:
295 /* status is in skb->cb */
296 memcpy(&rx_status, skb->cb, sizeof(rx_status));
51fb61e7 297 /* Clear skb->pkt_type in order to not confuse kernel
f0706e82
JB
298 * netstack. */
299 skb->pkt_type = 0;
300 __ieee80211_rx(local_to_hw(local), skb, &rx_status);
301 break;
302 case IEEE80211_TX_STATUS_MSG:
f0706e82 303 skb->pkt_type = 0;
e039fa4a 304 ieee80211_tx_status(local_to_hw(local), skb);
f0706e82 305 break;
eadc8d9e
RR
306 case IEEE80211_DELBA_MSG:
307 ra_tid = (struct ieee80211_ra_tid *) &skb->cb;
308 ieee80211_stop_tx_ba_cb(local_to_hw(local),
309 ra_tid->ra, ra_tid->tid);
310 dev_kfree_skb(skb);
311 break;
312 case IEEE80211_ADDBA_MSG:
313 ra_tid = (struct ieee80211_ra_tid *) &skb->cb;
314 ieee80211_start_tx_ba_cb(local_to_hw(local),
315 ra_tid->ra, ra_tid->tid);
316 dev_kfree_skb(skb);
317 break ;
f4ea83dd
JB
318 default:
319 WARN_ON(1);
f0706e82
JB
320 dev_kfree_skb(skb);
321 break;
322 }
323 }
324}
325
f0706e82
JB
326/* Remove added headers (e.g., QoS control), encryption header/MIC, etc. to
327 * make a prepared TX frame (one that has been given to hw) to look like brand
328 * new IEEE 802.11 frame that is ready to go through TX processing again.
d0f09804 329 */
f0706e82
JB
330static void ieee80211_remove_tx_extra(struct ieee80211_local *local,
331 struct ieee80211_key *key,
e039fa4a 332 struct sk_buff *skb)
f0706e82 333{
62bf1d76
HH
334 unsigned int hdrlen, iv_len, mic_len;
335 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
f0706e82 336
62bf1d76 337 hdrlen = ieee80211_hdrlen(hdr->frame_control);
f0706e82
JB
338
339 if (!key)
340 goto no_key;
341
8f20fc24 342 switch (key->conf.alg) {
f0706e82
JB
343 case ALG_WEP:
344 iv_len = WEP_IV_LEN;
345 mic_len = WEP_ICV_LEN;
346 break;
347 case ALG_TKIP:
348 iv_len = TKIP_IV_LEN;
349 mic_len = TKIP_ICV_LEN;
350 break;
351 case ALG_CCMP:
352 iv_len = CCMP_HDR_LEN;
353 mic_len = CCMP_MIC_LEN;
354 break;
355 default:
356 goto no_key;
357 }
358
62bf1d76 359 if (skb->len >= hdrlen + mic_len &&
11a843b7 360 !(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE))
f0706e82 361 skb_trim(skb, skb->len - mic_len);
62bf1d76 362 if (skb->len >= hdrlen + iv_len) {
f0706e82 363 memmove(skb->data + iv_len, skb->data, hdrlen);
62bf1d76 364 hdr = (struct ieee80211_hdr *)skb_pull(skb, iv_len);
f0706e82
JB
365 }
366
367no_key:
62bf1d76
HH
368 if (ieee80211_is_data_qos(hdr->frame_control)) {
369 hdr->frame_control &= ~cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
370 memmove(skb->data + IEEE80211_QOS_CTL_LEN, skb->data,
371 hdrlen - IEEE80211_QOS_CTL_LEN);
372 skb_pull(skb, IEEE80211_QOS_CTL_LEN);
f0706e82
JB
373 }
374}
375
d46e144b
JB
376static void ieee80211_handle_filtered_frame(struct ieee80211_local *local,
377 struct sta_info *sta,
e039fa4a 378 struct sk_buff *skb)
d46e144b
JB
379{
380 sta->tx_filtered_count++;
381
382 /*
383 * Clear the TX filter mask for this STA when sending the next
384 * packet. If the STA went to power save mode, this will happen
f6d97104 385 * when it wakes up for the next time.
d46e144b 386 */
07346f81 387 set_sta_flags(sta, WLAN_STA_CLEAR_PS_FILT);
d46e144b
JB
388
389 /*
390 * This code races in the following way:
391 *
392 * (1) STA sends frame indicating it will go to sleep and does so
393 * (2) hardware/firmware adds STA to filter list, passes frame up
394 * (3) hardware/firmware processes TX fifo and suppresses a frame
395 * (4) we get TX status before having processed the frame and
396 * knowing that the STA has gone to sleep.
397 *
398 * This is actually quite unlikely even when both those events are
399 * processed from interrupts coming in quickly after one another or
400 * even at the same time because we queue both TX status events and
401 * RX frames to be processed by a tasklet and process them in the
402 * same order that they were received or TX status last. Hence, there
403 * is no race as long as the frame RX is processed before the next TX
404 * status, which drivers can ensure, see below.
405 *
406 * Note that this can only happen if the hardware or firmware can
407 * actually add STAs to the filter list, if this is done by the
408 * driver in response to set_tim() (which will only reduce the race
409 * this whole filtering tries to solve, not completely solve it)
410 * this situation cannot happen.
411 *
412 * To completely solve this race drivers need to make sure that they
413 * (a) don't mix the irq-safe/not irq-safe TX status/RX processing
414 * functions and
415 * (b) always process RX events before TX status events if ordering
416 * can be unknown, for example with different interrupt status
417 * bits.
418 */
07346f81 419 if (test_sta_flags(sta, WLAN_STA_PS) &&
d46e144b 420 skb_queue_len(&sta->tx_filtered) < STA_MAX_TX_BUFFER) {
e039fa4a 421 ieee80211_remove_tx_extra(local, sta->key, skb);
d46e144b
JB
422 skb_queue_tail(&sta->tx_filtered, skb);
423 return;
424 }
425
8b30b1fe 426 if (!test_sta_flags(sta, WLAN_STA_PS) && !skb->requeue) {
d46e144b 427 /* Software retry the packet once */
8b30b1fe 428 skb->requeue = 1;
e039fa4a 429 ieee80211_remove_tx_extra(local, sta->key, skb);
d46e144b
JB
430 dev_queue_xmit(skb);
431 return;
432 }
433
f4ea83dd 434#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
d46e144b
JB
435 if (net_ratelimit())
436 printk(KERN_DEBUG "%s: dropped TX filtered frame, "
437 "queue_len=%d PS=%d @%lu\n",
438 wiphy_name(local->hw.wiphy),
439 skb_queue_len(&sta->tx_filtered),
07346f81 440 !!test_sta_flags(sta, WLAN_STA_PS), jiffies);
f4ea83dd 441#endif
d46e144b
JB
442 dev_kfree_skb(skb);
443}
444
e039fa4a 445void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
f0706e82
JB
446{
447 struct sk_buff *skb2;
448 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
449 struct ieee80211_local *local = hw_to_local(hw);
e039fa4a 450 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
f0706e82 451 u16 frag, type;
429a3805 452 __le16 fc;
4b7679a5 453 struct ieee80211_supported_band *sband;
b306f453
JB
454 struct ieee80211_tx_status_rtap_hdr *rthdr;
455 struct ieee80211_sub_if_data *sdata;
3d30d949 456 struct net_device *prev_dev = NULL;
429a3805 457 struct sta_info *sta;
e6a9854b
JB
458 int retry_count = -1, i;
459
460 for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
461 /* the HW cannot have attempted that rate */
462 if (i >= hw->max_rates) {
463 info->status.rates[i].idx = -1;
464 info->status.rates[i].count = 0;
465 }
466
467 retry_count += info->status.rates[i].count;
468 }
469 if (retry_count < 0)
470 retry_count = 0;
f0706e82 471
d0709a65
JB
472 rcu_read_lock();
473
e6a9854b
JB
474 sband = local->hw.wiphy->bands[info->band];
475
95dac040
JB
476 sta = sta_info_get(local, hdr->addr1);
477
478 if (sta) {
e6a9854b 479 if (!(info->flags & IEEE80211_TX_STAT_ACK) &&
95dac040
JB
480 test_sta_flags(sta, WLAN_STA_PS)) {
481 /*
482 * The STA is in power save mode, so assume
483 * that this TX packet failed because of that.
484 */
485 ieee80211_handle_filtered_frame(local, sta, skb);
486 rcu_read_unlock();
487 return;
f0706e82 488 }
f0706e82 489
95dac040
JB
490 fc = hdr->frame_control;
491
492 if ((info->flags & IEEE80211_TX_STAT_AMPDU_NO_BACK) &&
493 (ieee80211_is_data_qos(fc))) {
494 u16 tid, ssn;
495 u8 *qc;
429a3805 496
429a3805
RR
497 qc = ieee80211_get_qos_ctl(hdr);
498 tid = qc[0] & 0xf;
499 ssn = ((le16_to_cpu(hdr->seq_ctrl) + 0x10)
500 & IEEE80211_SCTL_SEQ);
f698d856 501 ieee80211_send_bar(sta->sdata, hdr->addr1,
429a3805
RR
502 tid, ssn);
503 }
429a3805 504
95dac040 505 if (info->flags & IEEE80211_TX_STAT_TX_FILTERED) {
e039fa4a 506 ieee80211_handle_filtered_frame(local, sta, skb);
d0709a65 507 rcu_read_unlock();
f0706e82 508 return;
95dac040 509 } else {
e6a9854b 510 if (!(info->flags & IEEE80211_TX_STAT_ACK))
95dac040 511 sta->tx_retry_failed++;
e6a9854b 512 sta->tx_retry_count += retry_count;
f0706e82 513 }
95dac040 514
4b7679a5 515 rate_control_tx_status(local, sband, sta, skb);
95dac040 516 }
f0706e82 517
d0709a65
JB
518 rcu_read_unlock();
519
f0706e82
JB
520 ieee80211_led_tx(local, 0);
521
522 /* SNMP counters
523 * Fragments are passed to low-level drivers as separate skbs, so these
524 * are actually fragments, not frames. Update frame counters only for
525 * the first fragment of the frame. */
526
527 frag = le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG;
528 type = le16_to_cpu(hdr->frame_control) & IEEE80211_FCTL_FTYPE;
529
e039fa4a 530 if (info->flags & IEEE80211_TX_STAT_ACK) {
f0706e82
JB
531 if (frag == 0) {
532 local->dot11TransmittedFrameCount++;
533 if (is_multicast_ether_addr(hdr->addr1))
534 local->dot11MulticastTransmittedFrameCount++;
e6a9854b 535 if (retry_count > 0)
f0706e82 536 local->dot11RetryCount++;
e6a9854b 537 if (retry_count > 1)
f0706e82
JB
538 local->dot11MultipleRetryCount++;
539 }
540
541 /* This counter shall be incremented for an acknowledged MPDU
542 * with an individual address in the address 1 field or an MPDU
543 * with a multicast address in the address 1 field of type Data
544 * or Management. */
545 if (!is_multicast_ether_addr(hdr->addr1) ||
546 type == IEEE80211_FTYPE_DATA ||
547 type == IEEE80211_FTYPE_MGMT)
548 local->dot11TransmittedFragmentCount++;
549 } else {
550 if (frag == 0)
551 local->dot11FailedCount++;
552 }
553
b306f453
JB
554 /* this was a transmitted frame, but now we want to reuse it */
555 skb_orphan(skb);
556
3d30d949
MW
557 /*
558 * This is a bit racy but we can avoid a lot of work
559 * with this test...
560 */
561 if (!local->monitors && !local->cooked_mntrs) {
f0706e82
JB
562 dev_kfree_skb(skb);
563 return;
564 }
565
b306f453 566 /* send frame to monitor interfaces now */
f0706e82 567
b306f453
JB
568 if (skb_headroom(skb) < sizeof(*rthdr)) {
569 printk(KERN_ERR "ieee80211_tx_status: headroom too small\n");
f0706e82
JB
570 dev_kfree_skb(skb);
571 return;
572 }
f0706e82 573
988c0f72 574 rthdr = (struct ieee80211_tx_status_rtap_hdr *)
b306f453
JB
575 skb_push(skb, sizeof(*rthdr));
576
577 memset(rthdr, 0, sizeof(*rthdr));
578 rthdr->hdr.it_len = cpu_to_le16(sizeof(*rthdr));
579 rthdr->hdr.it_present =
580 cpu_to_le32((1 << IEEE80211_RADIOTAP_TX_FLAGS) |
e6a9854b
JB
581 (1 << IEEE80211_RADIOTAP_DATA_RETRIES) |
582 (1 << IEEE80211_RADIOTAP_RATE));
b306f453 583
e039fa4a 584 if (!(info->flags & IEEE80211_TX_STAT_ACK) &&
b306f453
JB
585 !is_multicast_ether_addr(hdr->addr1))
586 rthdr->tx_flags |= cpu_to_le16(IEEE80211_RADIOTAP_F_TX_FAIL);
587
e6a9854b
JB
588 /*
589 * XXX: Once radiotap gets the bitmap reset thing the vendor
590 * extensions proposal contains, we can actually report
591 * the whole set of tries we did.
592 */
593 if ((info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) ||
594 (info->status.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT))
b306f453 595 rthdr->tx_flags |= cpu_to_le16(IEEE80211_RADIOTAP_F_TX_CTS);
e6a9854b 596 else if (info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS)
b306f453 597 rthdr->tx_flags |= cpu_to_le16(IEEE80211_RADIOTAP_F_TX_RTS);
e6a9854b
JB
598 if (info->status.rates[0].idx >= 0 &&
599 !(info->status.rates[0].flags & IEEE80211_TX_RC_MCS))
600 rthdr->rate = sband->bitrates[
601 info->status.rates[0].idx].bitrate / 5;
b306f453 602
e6a9854b
JB
603 /* for now report the total retry_count */
604 rthdr->data_retries = retry_count;
b306f453 605
3d30d949
MW
606 /* XXX: is this sufficient for BPF? */
607 skb_set_mac_header(skb, 0);
608 skb->ip_summed = CHECKSUM_UNNECESSARY;
609 skb->pkt_type = PACKET_OTHERHOST;
610 skb->protocol = htons(ETH_P_802_2);
611 memset(skb->cb, 0, sizeof(skb->cb));
612
79010420 613 rcu_read_lock();
79010420 614 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
05c914fe 615 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
b306f453
JB
616 if (!netif_running(sdata->dev))
617 continue;
3d30d949
MW
618
619 if (prev_dev) {
79010420 620 skb2 = skb_clone(skb, GFP_ATOMIC);
3d30d949
MW
621 if (skb2) {
622 skb2->dev = prev_dev;
623 netif_rx(skb2);
624 }
625 }
626
627 prev_dev = sdata->dev;
b306f453
JB
628 }
629 }
3d30d949
MW
630 if (prev_dev) {
631 skb->dev = prev_dev;
632 netif_rx(skb);
633 skb = NULL;
634 }
79010420 635 rcu_read_unlock();
3d30d949 636 dev_kfree_skb(skb);
f0706e82
JB
637}
638EXPORT_SYMBOL(ieee80211_tx_status);
639
f0706e82
JB
640struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
641 const struct ieee80211_ops *ops)
642{
f0706e82 643 struct ieee80211_local *local;
f0706e82
JB
644 int priv_size;
645 struct wiphy *wiphy;
646
647 /* Ensure 32-byte alignment of our private data and hw private data.
648 * We use the wiphy priv data for both our ieee80211_local and for
649 * the driver's private data
650 *
651 * In memory it'll be like this:
652 *
653 * +-------------------------+
654 * | struct wiphy |
655 * +-------------------------+
656 * | struct ieee80211_local |
657 * +-------------------------+
658 * | driver's private data |
659 * +-------------------------+
660 *
661 */
662 priv_size = ((sizeof(struct ieee80211_local) +
663 NETDEV_ALIGN_CONST) & ~NETDEV_ALIGN_CONST) +
664 priv_data_len;
665
666 wiphy = wiphy_new(&mac80211_config_ops, priv_size);
667
668 if (!wiphy)
669 return NULL;
670
671 wiphy->privid = mac80211_wiphy_privid;
672
673 local = wiphy_priv(wiphy);
674 local->hw.wiphy = wiphy;
675
676 local->hw.priv = (char *)local +
677 ((sizeof(struct ieee80211_local) +
678 NETDEV_ALIGN_CONST) & ~NETDEV_ALIGN_CONST);
679
4480f15c 680 BUG_ON(!ops->tx);
4150c572
JB
681 BUG_ON(!ops->start);
682 BUG_ON(!ops->stop);
4480f15c
JB
683 BUG_ON(!ops->config);
684 BUG_ON(!ops->add_interface);
4150c572
JB
685 BUG_ON(!ops->remove_interface);
686 BUG_ON(!ops->configure_filter);
f0706e82
JB
687 local->ops = ops;
688
e6a9854b
JB
689 /* set up some defaults */
690 local->hw.queues = 1;
691 local->hw.max_rates = 1;
f0706e82
JB
692 local->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD;
693 local->fragmentation_threshold = IEEE80211_MAX_FRAG_THRESHOLD;
9124b077
JB
694 local->hw.conf.long_frame_max_tx_count = 4;
695 local->hw.conf.short_frame_max_tx_count = 7;
e8975581 696 local->hw.conf.radio_enabled = true;
f0706e82 697
79010420 698 INIT_LIST_HEAD(&local->interfaces);
f0706e82 699
b16bd15c
JB
700 spin_lock_init(&local->key_lock);
701
c2b13452 702 INIT_DELAYED_WORK(&local->scan_work, ieee80211_scan_work);
f0706e82
JB
703
704 sta_info_init(local);
705
f0706e82
JB
706 tasklet_init(&local->tx_pending_tasklet, ieee80211_tx_pending,
707 (unsigned long)local);
708 tasklet_disable(&local->tx_pending_tasklet);
709
710 tasklet_init(&local->tasklet,
711 ieee80211_tasklet_handler,
712 (unsigned long) local);
713 tasklet_disable(&local->tasklet);
714
715 skb_queue_head_init(&local->skb_queue);
716 skb_queue_head_init(&local->skb_queue_unreliable);
717
718 return local_to_hw(local);
719}
720EXPORT_SYMBOL(ieee80211_alloc_hw);
721
722int ieee80211_register_hw(struct ieee80211_hw *hw)
723{
724 struct ieee80211_local *local = hw_to_local(hw);
f0706e82 725 int result;
8318d78a 726 enum ieee80211_band band;
96d51056 727 struct net_device *mdev;
133b8226 728 struct ieee80211_master_priv *mpriv;
8318d78a
JB
729
730 /*
731 * generic code guarantees at least one band,
732 * set this very early because much code assumes
733 * that hw.conf.channel is assigned
734 */
735 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
736 struct ieee80211_supported_band *sband;
737
738 sband = local->hw.wiphy->bands[band];
739 if (sband) {
740 /* init channel we're on */
741 local->hw.conf.channel =
742 local->oper_channel =
743 local->scan_channel = &sband->channels[0];
744 break;
745 }
746 }
f0706e82 747
f59ac048
LR
748 /* if low-level driver supports AP, we also support VLAN */
749 if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_AP))
750 local->hw.wiphy->interface_modes |= BIT(NL80211_IFTYPE_AP_VLAN);
751
752 /* mac80211 always supports monitor */
753 local->hw.wiphy->interface_modes |= BIT(NL80211_IFTYPE_MONITOR);
754
f0706e82
JB
755 result = wiphy_register(local->hw.wiphy);
756 if (result < 0)
757 return result;
758
e2530083
JB
759 /*
760 * We use the number of queues for feature tests (QoS, HT) internally
761 * so restrict them appropriately.
762 */
e2530083
JB
763 if (hw->queues > IEEE80211_MAX_QUEUES)
764 hw->queues = IEEE80211_MAX_QUEUES;
765 if (hw->ampdu_queues > IEEE80211_MAX_AMPDU_QUEUES)
766 hw->ampdu_queues = IEEE80211_MAX_AMPDU_QUEUES;
767 if (hw->queues < 4)
768 hw->ampdu_queues = 0;
e2530083 769
133b8226 770 mdev = alloc_netdev_mq(sizeof(struct ieee80211_master_priv),
e2530083
JB
771 "wmaster%d", ether_setup,
772 ieee80211_num_queues(hw));
96d51056
JB
773 if (!mdev)
774 goto fail_mdev_alloc;
775
133b8226
JB
776 mpriv = netdev_priv(mdev);
777 mpriv->local = local;
96d51056
JB
778 local->mdev = mdev;
779
3e122be0 780 ieee80211_rx_bss_list_init(local);
96d51056
JB
781
782 mdev->hard_start_xmit = ieee80211_master_start_xmit;
783 mdev->open = ieee80211_master_open;
784 mdev->stop = ieee80211_master_stop;
785 mdev->type = ARPHRD_IEEE80211;
786 mdev->header_ops = &ieee80211_header_ops;
787 mdev->set_multicast_list = ieee80211_master_set_multicast_list;
788
4ada424d
LR
789 local->hw.workqueue =
790 create_freezeable_workqueue(wiphy_name(local->hw.wiphy));
f0706e82
JB
791 if (!local->hw.workqueue) {
792 result = -ENOMEM;
793 goto fail_workqueue;
794 }
795
b306f453
JB
796 /*
797 * The hardware needs headroom for sending the frame,
798 * and we need some headroom for passing the frame to monitor
799 * interfaces, but never both at the same time.
800 */
33ccad35
JB
801 local->tx_headroom = max_t(unsigned int , local->hw.extra_tx_headroom,
802 sizeof(struct ieee80211_tx_status_rtap_hdr));
b306f453 803
e9f207f0
JB
804 debugfs_hw_add(local);
805
dc0ae30c
TW
806 if (local->hw.conf.beacon_int < 10)
807 local->hw.conf.beacon_int = 100;
f0706e82 808
ea95bba4
TW
809 if (local->hw.max_listen_interval == 0)
810 local->hw.max_listen_interval = 1;
811
812 local->hw.conf.listen_interval = local->hw.max_listen_interval;
813
566bfe5a
BR
814 local->wstats_flags |= local->hw.flags & (IEEE80211_HW_SIGNAL_UNSPEC |
815 IEEE80211_HW_SIGNAL_DB |
816 IEEE80211_HW_SIGNAL_DBM) ?
f0706e82 817 IW_QUAL_QUAL_UPDATED : IW_QUAL_QUAL_INVALID;
566bfe5a 818 local->wstats_flags |= local->hw.flags & IEEE80211_HW_NOISE_DBM ?
f0706e82 819 IW_QUAL_NOISE_UPDATED : IW_QUAL_NOISE_INVALID;
566bfe5a 820 if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
f0706e82
JB
821 local->wstats_flags |= IW_QUAL_DBM;
822
823 result = sta_info_start(local);
824 if (result < 0)
825 goto fail_sta_info;
826
827 rtnl_lock();
828 result = dev_alloc_name(local->mdev, local->mdev->name);
829 if (result < 0)
830 goto fail_dev;
831
832 memcpy(local->mdev->dev_addr, local->hw.wiphy->perm_addr, ETH_ALEN);
833 SET_NETDEV_DEV(local->mdev, wiphy_dev(local->hw.wiphy));
834
835 result = register_netdevice(local->mdev);
836 if (result < 0)
837 goto fail_dev;
838
830f9038
JB
839 result = ieee80211_init_rate_ctrl_alg(local,
840 hw->rate_control_algorithm);
f0706e82
JB
841 if (result < 0) {
842 printk(KERN_DEBUG "%s: Failed to initialize rate control "
dd1cd4c6 843 "algorithm\n", wiphy_name(local->hw.wiphy));
f0706e82
JB
844 goto fail_rate;
845 }
846
847 result = ieee80211_wep_init(local);
848
849 if (result < 0) {
023a04be
JF
850 printk(KERN_DEBUG "%s: Failed to initialize wep: %d\n",
851 wiphy_name(local->hw.wiphy), result);
f0706e82
JB
852 goto fail_wep;
853 }
854
51cb6db0 855 local->mdev->select_queue = ieee80211_select_queue;
f0706e82
JB
856
857 /* add one default STA interface */
3e122be0 858 result = ieee80211_if_add(local, "wlan%d", NULL,
05c914fe 859 NL80211_IFTYPE_STATION, NULL);
f0706e82
JB
860 if (result)
861 printk(KERN_WARNING "%s: Failed to add default virtual iface\n",
dd1cd4c6 862 wiphy_name(local->hw.wiphy));
f0706e82 863
f0706e82
JB
864 rtnl_unlock();
865
866 ieee80211_led_init(local);
867
868 return 0;
869
870fail_wep:
871 rate_control_deinitialize(local);
872fail_rate:
873 unregister_netdevice(local->mdev);
339a7c41 874 local->mdev = NULL;
f0706e82
JB
875fail_dev:
876 rtnl_unlock();
877 sta_info_stop(local);
878fail_sta_info:
e9f207f0 879 debugfs_hw_del(local);
f0706e82
JB
880 destroy_workqueue(local->hw.workqueue);
881fail_workqueue:
3e122be0
JB
882 if (local->mdev)
883 free_netdev(local->mdev);
96d51056 884fail_mdev_alloc:
f0706e82
JB
885 wiphy_unregister(local->hw.wiphy);
886 return result;
887}
888EXPORT_SYMBOL(ieee80211_register_hw);
889
f0706e82
JB
890void ieee80211_unregister_hw(struct ieee80211_hw *hw)
891{
892 struct ieee80211_local *local = hw_to_local(hw);
f0706e82
JB
893
894 tasklet_kill(&local->tx_pending_tasklet);
895 tasklet_kill(&local->tasklet);
896
897 rtnl_lock();
898
79010420
JB
899 /*
900 * At this point, interface list manipulations are fine
901 * because the driver cannot be handing us frames any
902 * more and the tasklet is killed.
903 */
5b2812e9 904
75636525
JB
905 /* First, we remove all virtual interfaces. */
906 ieee80211_remove_interfaces(local);
5b2812e9
JB
907
908 /* then, finally, remove the master interface */
3e122be0 909 unregister_netdevice(local->mdev);
f0706e82
JB
910
911 rtnl_unlock();
912
3e122be0 913 ieee80211_rx_bss_list_deinit(local);
f0706e82
JB
914 ieee80211_clear_tx_pending(local);
915 sta_info_stop(local);
916 rate_control_deinitialize(local);
e9f207f0 917 debugfs_hw_del(local);
f0706e82 918
f0706e82
JB
919 if (skb_queue_len(&local->skb_queue)
920 || skb_queue_len(&local->skb_queue_unreliable))
921 printk(KERN_WARNING "%s: skb_queue not empty\n",
dd1cd4c6 922 wiphy_name(local->hw.wiphy));
f0706e82
JB
923 skb_queue_purge(&local->skb_queue);
924 skb_queue_purge(&local->skb_queue_unreliable);
925
926 destroy_workqueue(local->hw.workqueue);
927 wiphy_unregister(local->hw.wiphy);
928 ieee80211_wep_free(local);
929 ieee80211_led_exit(local);
3e122be0 930 free_netdev(local->mdev);
f0706e82
JB
931}
932EXPORT_SYMBOL(ieee80211_unregister_hw);
933
934void ieee80211_free_hw(struct ieee80211_hw *hw)
935{
936 struct ieee80211_local *local = hw_to_local(hw);
937
f0706e82
JB
938 wiphy_free(local->hw.wiphy);
939}
940EXPORT_SYMBOL(ieee80211_free_hw);
941
f0706e82
JB
942static int __init ieee80211_init(void)
943{
944 struct sk_buff *skb;
945 int ret;
946
e039fa4a
JB
947 BUILD_BUG_ON(sizeof(struct ieee80211_tx_info) > sizeof(skb->cb));
948 BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, driver_data) +
c6a1fa12 949 IEEE80211_TX_INFO_DRIVER_DATA_SIZE > sizeof(skb->cb));
f0706e82 950
cccf129f
FF
951 ret = rc80211_minstrel_init();
952 if (ret)
953 return ret;
954
4b475898 955 ret = rc80211_pid_init();
ad018375 956 if (ret)
51cb6db0 957 return ret;
f0706e82 958
e9f207f0
JB
959 ieee80211_debugfs_netdev_init();
960
f0706e82
JB
961 return 0;
962}
963
f0706e82
JB
964static void __exit ieee80211_exit(void)
965{
4b475898 966 rc80211_pid_exit();
cccf129f 967 rc80211_minstrel_exit();
ac71c691 968
3b96766f
JB
969 /*
970 * For key todo, it'll be empty by now but the work
971 * might still be scheduled.
972 */
973 flush_scheduled_work();
974
f7a92144
LCC
975 if (mesh_allocated)
976 ieee80211s_stop();
902acc78 977
e9f207f0 978 ieee80211_debugfs_netdev_exit();
f0706e82
JB
979}
980
981
ca9938fe 982subsys_initcall(ieee80211_init);
f0706e82
JB
983module_exit(ieee80211_exit);
984
985MODULE_DESCRIPTION("IEEE 802.11 subsystem");
986MODULE_LICENSE("GPL");
This page took 0.280053 seconds and 5 git commands to generate.