mac80211: only transition STAs ps->wake on data frames
[safe/jmp/linux-2.6] / net / mac80211 / rx.c
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  * Copyright 2007       Johannes Berg <johannes@sipsolutions.net>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  */
11
12 #include <linux/jiffies.h>
13 #include <linux/kernel.h>
14 #include <linux/skbuff.h>
15 #include <linux/netdevice.h>
16 #include <linux/etherdevice.h>
17 #include <linux/rcupdate.h>
18 #include <net/mac80211.h>
19 #include <net/ieee80211_radiotap.h>
20
21 #include "ieee80211_i.h"
22 #include "led.h"
23 #include "mesh.h"
24 #include "wep.h"
25 #include "wpa.h"
26 #include "tkip.h"
27 #include "wme.h"
28
29 static u8 ieee80211_sta_manage_reorder_buf(struct ieee80211_hw *hw,
30                                            struct tid_ampdu_rx *tid_agg_rx,
31                                            struct sk_buff *skb,
32                                            u16 mpdu_seq_num,
33                                            int bar_req);
34 /*
35  * monitor mode reception
36  *
37  * This function cleans up the SKB, i.e. it removes all the stuff
38  * only useful for monitoring.
39  */
40 static struct sk_buff *remove_monitor_info(struct ieee80211_local *local,
41                                            struct sk_buff *skb,
42                                            int rtap_len)
43 {
44         skb_pull(skb, rtap_len);
45
46         if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS) {
47                 if (likely(skb->len > FCS_LEN))
48                         skb_trim(skb, skb->len - FCS_LEN);
49                 else {
50                         /* driver bug */
51                         WARN_ON(1);
52                         dev_kfree_skb(skb);
53                         skb = NULL;
54                 }
55         }
56
57         return skb;
58 }
59
60 static inline int should_drop_frame(struct ieee80211_rx_status *status,
61                                     struct sk_buff *skb,
62                                     int present_fcs_len,
63                                     int radiotap_len)
64 {
65         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
66
67         if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC))
68                 return 1;
69         if (unlikely(skb->len < 16 + present_fcs_len + radiotap_len))
70                 return 1;
71         if (ieee80211_is_ctl(hdr->frame_control) &&
72             !ieee80211_is_pspoll(hdr->frame_control) &&
73             !ieee80211_is_back_req(hdr->frame_control))
74                 return 1;
75         return 0;
76 }
77
78 static int
79 ieee80211_rx_radiotap_len(struct ieee80211_local *local,
80                           struct ieee80211_rx_status *status)
81 {
82         int len;
83
84         /* always present fields */
85         len = sizeof(struct ieee80211_radiotap_header) + 9;
86
87         if (status->flag & RX_FLAG_TSFT)
88                 len += 8;
89         if (local->hw.flags & IEEE80211_HW_SIGNAL_DB ||
90             local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
91                 len += 1;
92         if (local->hw.flags & IEEE80211_HW_NOISE_DBM)
93                 len += 1;
94
95         if (len & 1) /* padding for RX_FLAGS if necessary */
96                 len++;
97
98         /* make sure radiotap starts at a naturally aligned address */
99         if (len % 8)
100                 len = roundup(len, 8);
101
102         return len;
103 }
104
105 /**
106  * ieee80211_add_rx_radiotap_header - add radiotap header
107  *
108  * add a radiotap header containing all the fields which the hardware provided.
109  */
110 static void
111 ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
112                                  struct sk_buff *skb,
113                                  struct ieee80211_rx_status *status,
114                                  struct ieee80211_rate *rate,
115                                  int rtap_len)
116 {
117         struct ieee80211_radiotap_header *rthdr;
118         unsigned char *pos;
119
120         rthdr = (struct ieee80211_radiotap_header *)skb_push(skb, rtap_len);
121         memset(rthdr, 0, rtap_len);
122
123         /* radiotap header, set always present flags */
124         rthdr->it_present =
125                 cpu_to_le32((1 << IEEE80211_RADIOTAP_FLAGS) |
126                             (1 << IEEE80211_RADIOTAP_RATE) |
127                             (1 << IEEE80211_RADIOTAP_CHANNEL) |
128                             (1 << IEEE80211_RADIOTAP_ANTENNA) |
129                             (1 << IEEE80211_RADIOTAP_RX_FLAGS));
130         rthdr->it_len = cpu_to_le16(rtap_len);
131
132         pos = (unsigned char *)(rthdr+1);
133
134         /* the order of the following fields is important */
135
136         /* IEEE80211_RADIOTAP_TSFT */
137         if (status->flag & RX_FLAG_TSFT) {
138                 *(__le64 *)pos = cpu_to_le64(status->mactime);
139                 rthdr->it_present |=
140                         cpu_to_le32(1 << IEEE80211_RADIOTAP_TSFT);
141                 pos += 8;
142         }
143
144         /* IEEE80211_RADIOTAP_FLAGS */
145         if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS)
146                 *pos |= IEEE80211_RADIOTAP_F_FCS;
147         if (status->flag & RX_FLAG_SHORTPRE)
148                 *pos |= IEEE80211_RADIOTAP_F_SHORTPRE;
149         pos++;
150
151         /* IEEE80211_RADIOTAP_RATE */
152         *pos = rate->bitrate / 5;
153         pos++;
154
155         /* IEEE80211_RADIOTAP_CHANNEL */
156         *(__le16 *)pos = cpu_to_le16(status->freq);
157         pos += 2;
158         if (status->band == IEEE80211_BAND_5GHZ)
159                 *(__le16 *)pos = cpu_to_le16(IEEE80211_CHAN_OFDM |
160                                              IEEE80211_CHAN_5GHZ);
161         else if (rate->flags & IEEE80211_RATE_ERP_G)
162                 *(__le16 *)pos = cpu_to_le16(IEEE80211_CHAN_OFDM |
163                                              IEEE80211_CHAN_2GHZ);
164         else
165                 *(__le16 *)pos = cpu_to_le16(IEEE80211_CHAN_CCK |
166                                              IEEE80211_CHAN_2GHZ);
167         pos += 2;
168
169         /* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */
170         if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) {
171                 *pos = status->signal;
172                 rthdr->it_present |=
173                         cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL);
174                 pos++;
175         }
176
177         /* IEEE80211_RADIOTAP_DBM_ANTNOISE */
178         if (local->hw.flags & IEEE80211_HW_NOISE_DBM) {
179                 *pos = status->noise;
180                 rthdr->it_present |=
181                         cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTNOISE);
182                 pos++;
183         }
184
185         /* IEEE80211_RADIOTAP_LOCK_QUALITY is missing */
186
187         /* IEEE80211_RADIOTAP_ANTENNA */
188         *pos = status->antenna;
189         pos++;
190
191         /* IEEE80211_RADIOTAP_DB_ANTSIGNAL */
192         if (local->hw.flags & IEEE80211_HW_SIGNAL_DB) {
193                 *pos = status->signal;
194                 rthdr->it_present |=
195                         cpu_to_le32(1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL);
196                 pos++;
197         }
198
199         /* IEEE80211_RADIOTAP_DB_ANTNOISE is not used */
200
201         /* IEEE80211_RADIOTAP_RX_FLAGS */
202         /* ensure 2 byte alignment for the 2 byte field as required */
203         if ((pos - (unsigned char *)rthdr) & 1)
204                 pos++;
205         /* FIXME: when radiotap gets a 'bad PLCP' flag use it here */
206         if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC))
207                 *(__le16 *)pos |= cpu_to_le16(IEEE80211_RADIOTAP_F_RX_BADFCS);
208         pos += 2;
209 }
210
211 /*
212  * This function copies a received frame to all monitor interfaces and
213  * returns a cleaned-up SKB that no longer includes the FCS nor the
214  * radiotap header the driver might have added.
215  */
216 static struct sk_buff *
217 ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
218                      struct ieee80211_rx_status *status,
219                      struct ieee80211_rate *rate)
220 {
221         struct ieee80211_sub_if_data *sdata;
222         int needed_headroom = 0;
223         struct sk_buff *skb, *skb2;
224         struct net_device *prev_dev = NULL;
225         int present_fcs_len = 0;
226         int rtap_len = 0;
227
228         /*
229          * First, we may need to make a copy of the skb because
230          *  (1) we need to modify it for radiotap (if not present), and
231          *  (2) the other RX handlers will modify the skb we got.
232          *
233          * We don't need to, of course, if we aren't going to return
234          * the SKB because it has a bad FCS/PLCP checksum.
235          */
236         if (status->flag & RX_FLAG_RADIOTAP)
237                 rtap_len = ieee80211_get_radiotap_len(origskb->data);
238         else
239                 /* room for the radiotap header based on driver features */
240                 needed_headroom = ieee80211_rx_radiotap_len(local, status);
241
242         if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS)
243                 present_fcs_len = FCS_LEN;
244
245         if (!local->monitors) {
246                 if (should_drop_frame(status, origskb, present_fcs_len,
247                                       rtap_len)) {
248                         dev_kfree_skb(origskb);
249                         return NULL;
250                 }
251
252                 return remove_monitor_info(local, origskb, rtap_len);
253         }
254
255         if (should_drop_frame(status, origskb, present_fcs_len, rtap_len)) {
256                 /* only need to expand headroom if necessary */
257                 skb = origskb;
258                 origskb = NULL;
259
260                 /*
261                  * This shouldn't trigger often because most devices have an
262                  * RX header they pull before we get here, and that should
263                  * be big enough for our radiotap information. We should
264                  * probably export the length to drivers so that we can have
265                  * them allocate enough headroom to start with.
266                  */
267                 if (skb_headroom(skb) < needed_headroom &&
268                     pskb_expand_head(skb, needed_headroom, 0, GFP_ATOMIC)) {
269                         dev_kfree_skb(skb);
270                         return NULL;
271                 }
272         } else {
273                 /*
274                  * Need to make a copy and possibly remove radiotap header
275                  * and FCS from the original.
276                  */
277                 skb = skb_copy_expand(origskb, needed_headroom, 0, GFP_ATOMIC);
278
279                 origskb = remove_monitor_info(local, origskb, rtap_len);
280
281                 if (!skb)
282                         return origskb;
283         }
284
285         /* if necessary, prepend radiotap information */
286         if (!(status->flag & RX_FLAG_RADIOTAP))
287                 ieee80211_add_rx_radiotap_header(local, skb, status, rate,
288                                                  needed_headroom);
289
290         skb_reset_mac_header(skb);
291         skb->ip_summed = CHECKSUM_UNNECESSARY;
292         skb->pkt_type = PACKET_OTHERHOST;
293         skb->protocol = htons(ETH_P_802_2);
294
295         list_for_each_entry_rcu(sdata, &local->interfaces, list) {
296                 if (!netif_running(sdata->dev))
297                         continue;
298
299                 if (sdata->vif.type != NL80211_IFTYPE_MONITOR)
300                         continue;
301
302                 if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES)
303                         continue;
304
305                 if (prev_dev) {
306                         skb2 = skb_clone(skb, GFP_ATOMIC);
307                         if (skb2) {
308                                 skb2->dev = prev_dev;
309                                 netif_rx(skb2);
310                         }
311                 }
312
313                 prev_dev = sdata->dev;
314                 sdata->dev->stats.rx_packets++;
315                 sdata->dev->stats.rx_bytes += skb->len;
316         }
317
318         if (prev_dev) {
319                 skb->dev = prev_dev;
320                 netif_rx(skb);
321         } else
322                 dev_kfree_skb(skb);
323
324         return origskb;
325 }
326
327
328 static void ieee80211_parse_qos(struct ieee80211_rx_data *rx)
329 {
330         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
331         int tid;
332
333         /* does the frame have a qos control field? */
334         if (ieee80211_is_data_qos(hdr->frame_control)) {
335                 u8 *qc = ieee80211_get_qos_ctl(hdr);
336                 /* frame has qos control */
337                 tid = *qc & IEEE80211_QOS_CTL_TID_MASK;
338                 if (*qc & IEEE80211_QOS_CONTROL_A_MSDU_PRESENT)
339                         rx->flags |= IEEE80211_RX_AMSDU;
340                 else
341                         rx->flags &= ~IEEE80211_RX_AMSDU;
342         } else {
343                 /*
344                  * IEEE 802.11-2007, 7.1.3.4.1 ("Sequence Number field"):
345                  *
346                  *      Sequence numbers for management frames, QoS data
347                  *      frames with a broadcast/multicast address in the
348                  *      Address 1 field, and all non-QoS data frames sent
349                  *      by QoS STAs are assigned using an additional single
350                  *      modulo-4096 counter, [...]
351                  *
352                  * We also use that counter for non-QoS STAs.
353                  */
354                 tid = NUM_RX_DATA_QUEUES - 1;
355         }
356
357         rx->queue = tid;
358         /* Set skb->priority to 1d tag if highest order bit of TID is not set.
359          * For now, set skb->priority to 0 for other cases. */
360         rx->skb->priority = (tid > 7) ? 0 : tid;
361 }
362
363 static void ieee80211_verify_ip_alignment(struct ieee80211_rx_data *rx)
364 {
365 #ifdef CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT
366         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
367         int hdrlen;
368
369         if (!ieee80211_is_data_present(hdr->frame_control))
370                 return;
371
372         /*
373          * Drivers are required to align the payload data in a way that
374          * guarantees that the contained IP header is aligned to a four-
375          * byte boundary. In the case of regular frames, this simply means
376          * aligning the payload to a four-byte boundary (because either
377          * the IP header is directly contained, or IV/RFC1042 headers that
378          * have a length divisible by four are in front of it.
379          *
380          * With A-MSDU frames, however, the payload data address must
381          * yield two modulo four because there are 14-byte 802.3 headers
382          * within the A-MSDU frames that push the IP header further back
383          * to a multiple of four again. Thankfully, the specs were sane
384          * enough this time around to require padding each A-MSDU subframe
385          * to a length that is a multiple of four.
386          *
387          * Padding like atheros hardware adds which is inbetween the 802.11
388          * header and the payload is not supported, the driver is required
389          * to move the 802.11 header further back in that case.
390          */
391         hdrlen = ieee80211_hdrlen(hdr->frame_control);
392         if (rx->flags & IEEE80211_RX_AMSDU)
393                 hdrlen += ETH_HLEN;
394         WARN_ON_ONCE(((unsigned long)(rx->skb->data + hdrlen)) & 3);
395 #endif
396 }
397
398
399 /* rx handlers */
400
401 static ieee80211_rx_result debug_noinline
402 ieee80211_rx_h_passive_scan(struct ieee80211_rx_data *rx)
403 {
404         struct ieee80211_local *local = rx->local;
405         struct sk_buff *skb = rx->skb;
406
407         if (unlikely(local->hw_scanning))
408                 return ieee80211_scan_rx(rx->sdata, skb, rx->status);
409
410         if (unlikely(local->sw_scanning)) {
411                 /* drop all the other packets during a software scan anyway */
412                 if (ieee80211_scan_rx(rx->sdata, skb, rx->status)
413                     != RX_QUEUED)
414                         dev_kfree_skb(skb);
415                 return RX_QUEUED;
416         }
417
418         if (unlikely(rx->flags & IEEE80211_RX_IN_SCAN)) {
419                 /* scanning finished during invoking of handlers */
420                 I802_DEBUG_INC(local->rx_handlers_drop_passive_scan);
421                 return RX_DROP_UNUSABLE;
422         }
423
424         return RX_CONTINUE;
425 }
426
427 static ieee80211_rx_result
428 ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx)
429 {
430         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
431         unsigned int hdrlen = ieee80211_hdrlen(hdr->frame_control);
432
433         if (ieee80211_is_data(hdr->frame_control)) {
434                 if (!ieee80211_has_a4(hdr->frame_control))
435                         return RX_DROP_MONITOR;
436                 if (memcmp(hdr->addr4, rx->dev->dev_addr, ETH_ALEN) == 0)
437                         return RX_DROP_MONITOR;
438         }
439
440         /* If there is not an established peer link and this is not a peer link
441          * establisment frame, beacon or probe, drop the frame.
442          */
443
444         if (!rx->sta || sta_plink_state(rx->sta) != PLINK_ESTAB) {
445                 struct ieee80211_mgmt *mgmt;
446
447                 if (!ieee80211_is_mgmt(hdr->frame_control))
448                         return RX_DROP_MONITOR;
449
450                 if (ieee80211_is_action(hdr->frame_control)) {
451                         mgmt = (struct ieee80211_mgmt *)hdr;
452                         if (mgmt->u.action.category != PLINK_CATEGORY)
453                                 return RX_DROP_MONITOR;
454                         return RX_CONTINUE;
455                 }
456
457                 if (ieee80211_is_probe_req(hdr->frame_control) ||
458                     ieee80211_is_probe_resp(hdr->frame_control) ||
459                     ieee80211_is_beacon(hdr->frame_control))
460                         return RX_CONTINUE;
461
462                 return RX_DROP_MONITOR;
463
464         }
465
466 #define msh_h_get(h, l) ((struct ieee80211s_hdr *) ((u8 *)h + l))
467
468         if (ieee80211_is_data(hdr->frame_control) &&
469             is_multicast_ether_addr(hdr->addr1) &&
470             mesh_rmc_check(hdr->addr4, msh_h_get(hdr, hdrlen), rx->sdata))
471                 return RX_DROP_MONITOR;
472 #undef msh_h_get
473
474         return RX_CONTINUE;
475 }
476
477
478 static ieee80211_rx_result debug_noinline
479 ieee80211_rx_h_check(struct ieee80211_rx_data *rx)
480 {
481         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
482
483         /* Drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.2.9) */
484         if (rx->sta && !is_multicast_ether_addr(hdr->addr1)) {
485                 if (unlikely(ieee80211_has_retry(hdr->frame_control) &&
486                              rx->sta->last_seq_ctrl[rx->queue] ==
487                              hdr->seq_ctrl)) {
488                         if (rx->flags & IEEE80211_RX_RA_MATCH) {
489                                 rx->local->dot11FrameDuplicateCount++;
490                                 rx->sta->num_duplicates++;
491                         }
492                         return RX_DROP_MONITOR;
493                 } else
494                         rx->sta->last_seq_ctrl[rx->queue] = hdr->seq_ctrl;
495         }
496
497         if (unlikely(rx->skb->len < 16)) {
498                 I802_DEBUG_INC(rx->local->rx_handlers_drop_short);
499                 return RX_DROP_MONITOR;
500         }
501
502         /* Drop disallowed frame classes based on STA auth/assoc state;
503          * IEEE 802.11, Chap 5.5.
504          *
505          * mac80211 filters only based on association state, i.e. it drops
506          * Class 3 frames from not associated stations. hostapd sends
507          * deauth/disassoc frames when needed. In addition, hostapd is
508          * responsible for filtering on both auth and assoc states.
509          */
510
511         if (ieee80211_vif_is_mesh(&rx->sdata->vif))
512                 return ieee80211_rx_mesh_check(rx);
513
514         if (unlikely((ieee80211_is_data(hdr->frame_control) ||
515                       ieee80211_is_pspoll(hdr->frame_control)) &&
516                      rx->sdata->vif.type != NL80211_IFTYPE_ADHOC &&
517                      (!rx->sta || !test_sta_flags(rx->sta, WLAN_STA_ASSOC)))) {
518                 if ((!ieee80211_has_fromds(hdr->frame_control) &&
519                      !ieee80211_has_tods(hdr->frame_control) &&
520                      ieee80211_is_data(hdr->frame_control)) ||
521                     !(rx->flags & IEEE80211_RX_RA_MATCH)) {
522                         /* Drop IBSS frames and frames for other hosts
523                          * silently. */
524                         return RX_DROP_MONITOR;
525                 }
526
527                 return RX_DROP_MONITOR;
528         }
529
530         return RX_CONTINUE;
531 }
532
533
534 static ieee80211_rx_result debug_noinline
535 ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
536 {
537         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
538         int keyidx;
539         int hdrlen;
540         ieee80211_rx_result result = RX_DROP_UNUSABLE;
541         struct ieee80211_key *stakey = NULL;
542
543         /*
544          * Key selection 101
545          *
546          * There are three types of keys:
547          *  - GTK (group keys)
548          *  - PTK (pairwise keys)
549          *  - STK (station-to-station pairwise keys)
550          *
551          * When selecting a key, we have to distinguish between multicast
552          * (including broadcast) and unicast frames, the latter can only
553          * use PTKs and STKs while the former always use GTKs. Unless, of
554          * course, actual WEP keys ("pre-RSNA") are used, then unicast
555          * frames can also use key indizes like GTKs. Hence, if we don't
556          * have a PTK/STK we check the key index for a WEP key.
557          *
558          * Note that in a regular BSS, multicast frames are sent by the
559          * AP only, associated stations unicast the frame to the AP first
560          * which then multicasts it on their behalf.
561          *
562          * There is also a slight problem in IBSS mode: GTKs are negotiated
563          * with each station, that is something we don't currently handle.
564          * The spec seems to expect that one negotiates the same key with
565          * every station but there's no such requirement; VLANs could be
566          * possible.
567          */
568
569         if (!ieee80211_has_protected(hdr->frame_control))
570                 return RX_CONTINUE;
571
572         /*
573          * No point in finding a key and decrypting if the frame is neither
574          * addressed to us nor a multicast frame.
575          */
576         if (!(rx->flags & IEEE80211_RX_RA_MATCH))
577                 return RX_CONTINUE;
578
579         if (rx->sta)
580                 stakey = rcu_dereference(rx->sta->key);
581
582         if (!is_multicast_ether_addr(hdr->addr1) && stakey) {
583                 rx->key = stakey;
584         } else {
585                 /*
586                  * The device doesn't give us the IV so we won't be
587                  * able to look up the key. That's ok though, we
588                  * don't need to decrypt the frame, we just won't
589                  * be able to keep statistics accurate.
590                  * Except for key threshold notifications, should
591                  * we somehow allow the driver to tell us which key
592                  * the hardware used if this flag is set?
593                  */
594                 if ((rx->status->flag & RX_FLAG_DECRYPTED) &&
595                     (rx->status->flag & RX_FLAG_IV_STRIPPED))
596                         return RX_CONTINUE;
597
598                 hdrlen = ieee80211_hdrlen(hdr->frame_control);
599
600                 if (rx->skb->len < 8 + hdrlen)
601                         return RX_DROP_UNUSABLE; /* TODO: count this? */
602
603                 /*
604                  * no need to call ieee80211_wep_get_keyidx,
605                  * it verifies a bunch of things we've done already
606                  */
607                 keyidx = rx->skb->data[hdrlen + 3] >> 6;
608
609                 rx->key = rcu_dereference(rx->sdata->keys[keyidx]);
610
611                 /*
612                  * RSNA-protected unicast frames should always be sent with
613                  * pairwise or station-to-station keys, but for WEP we allow
614                  * using a key index as well.
615                  */
616                 if (rx->key && rx->key->conf.alg != ALG_WEP &&
617                     !is_multicast_ether_addr(hdr->addr1))
618                         rx->key = NULL;
619         }
620
621         if (rx->key) {
622                 rx->key->tx_rx_count++;
623                 /* TODO: add threshold stuff again */
624         } else {
625                 return RX_DROP_MONITOR;
626         }
627
628         /* Check for weak IVs if possible */
629         if (rx->sta && rx->key->conf.alg == ALG_WEP &&
630             ieee80211_is_data(hdr->frame_control) &&
631             (!(rx->status->flag & RX_FLAG_IV_STRIPPED) ||
632              !(rx->status->flag & RX_FLAG_DECRYPTED)) &&
633             ieee80211_wep_is_weak_iv(rx->skb, rx->key))
634                 rx->sta->wep_weak_iv_count++;
635
636         switch (rx->key->conf.alg) {
637         case ALG_WEP:
638                 result = ieee80211_crypto_wep_decrypt(rx);
639                 break;
640         case ALG_TKIP:
641                 result = ieee80211_crypto_tkip_decrypt(rx);
642                 break;
643         case ALG_CCMP:
644                 result = ieee80211_crypto_ccmp_decrypt(rx);
645                 break;
646         }
647
648         /* either the frame has been decrypted or will be dropped */
649         rx->status->flag |= RX_FLAG_DECRYPTED;
650
651         return result;
652 }
653
654 static void ap_sta_ps_start(struct sta_info *sta)
655 {
656         struct ieee80211_sub_if_data *sdata = sta->sdata;
657
658         atomic_inc(&sdata->bss->num_sta_ps);
659         set_and_clear_sta_flags(sta, WLAN_STA_PS, WLAN_STA_PSPOLL);
660 #ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
661         printk(KERN_DEBUG "%s: STA %pM aid %d enters power save mode\n",
662                sdata->dev->name, sta->sta.addr, sta->sta.aid);
663 #endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
664 }
665
666 static int ap_sta_ps_end(struct sta_info *sta)
667 {
668         struct ieee80211_sub_if_data *sdata = sta->sdata;
669         struct ieee80211_local *local = sdata->local;
670         struct sk_buff *skb;
671         int sent = 0;
672
673         atomic_dec(&sdata->bss->num_sta_ps);
674
675         clear_sta_flags(sta, WLAN_STA_PS | WLAN_STA_PSPOLL);
676
677         if (!skb_queue_empty(&sta->ps_tx_buf))
678                 sta_info_clear_tim_bit(sta);
679
680 #ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
681         printk(KERN_DEBUG "%s: STA %pM aid %d exits power save mode\n",
682                sdata->dev->name, sta->sta.addr, sta->sta.aid);
683 #endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
684
685         /* Send all buffered frames to the station */
686         while ((skb = skb_dequeue(&sta->tx_filtered)) != NULL) {
687                 sent++;
688                 skb->requeue = 1;
689                 dev_queue_xmit(skb);
690         }
691         while ((skb = skb_dequeue(&sta->ps_tx_buf)) != NULL) {
692                 local->total_ps_buffered--;
693                 sent++;
694 #ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
695                 printk(KERN_DEBUG "%s: STA %pM aid %d send PS frame "
696                        "since STA not sleeping anymore\n", sdata->dev->name,
697                        sta->sta.addr, sta->sta.aid);
698 #endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
699                 skb->requeue = 1;
700                 dev_queue_xmit(skb);
701         }
702
703         return sent;
704 }
705
706 static ieee80211_rx_result debug_noinline
707 ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
708 {
709         struct sta_info *sta = rx->sta;
710         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
711
712         if (!sta)
713                 return RX_CONTINUE;
714
715         /* Update last_rx only for IBSS packets which are for the current
716          * BSSID to avoid keeping the current IBSS network alive in cases where
717          * other STAs are using different BSSID. */
718         if (rx->sdata->vif.type == NL80211_IFTYPE_ADHOC) {
719                 u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len,
720                                                 NL80211_IFTYPE_ADHOC);
721                 if (compare_ether_addr(bssid, rx->sdata->u.sta.bssid) == 0)
722                         sta->last_rx = jiffies;
723         } else
724         if (!is_multicast_ether_addr(hdr->addr1) ||
725             rx->sdata->vif.type == NL80211_IFTYPE_STATION) {
726                 /* Update last_rx only for unicast frames in order to prevent
727                  * the Probe Request frames (the only broadcast frames from a
728                  * STA in infrastructure mode) from keeping a connection alive.
729                  * Mesh beacons will update last_rx when if they are found to
730                  * match the current local configuration when processed.
731                  */
732                 sta->last_rx = jiffies;
733         }
734
735         if (!(rx->flags & IEEE80211_RX_RA_MATCH))
736                 return RX_CONTINUE;
737
738         sta->rx_fragments++;
739         sta->rx_bytes += rx->skb->len;
740         sta->last_signal = rx->status->signal;
741         sta->last_qual = rx->status->qual;
742         sta->last_noise = rx->status->noise;
743
744         /*
745          * Change STA power saving mode only at the end of a frame
746          * exchange sequence.
747          */
748         if (!ieee80211_has_morefrags(hdr->frame_control) &&
749             (rx->sdata->vif.type == NL80211_IFTYPE_AP ||
750              rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) {
751                 if (test_sta_flags(sta, WLAN_STA_PS)) {
752                         /*
753                          * Ignore doze->wake transitions that are
754                          * indicated by non-data frames, the standard
755                          * is unclear here, but for example going to
756                          * PS mode and then scanning would cause a
757                          * doze->wake transition for the probe request,
758                          * and that is clearly undesirable.
759                          */
760                         if (ieee80211_is_data(hdr->frame_control) &&
761                             !ieee80211_has_pm(hdr->frame_control))
762                                 rx->sent_ps_buffered += ap_sta_ps_end(sta);
763                 } else {
764                         if (ieee80211_has_pm(hdr->frame_control))
765                                 ap_sta_ps_start(sta);
766                 }
767         }
768
769         /* Drop data::nullfunc frames silently, since they are used only to
770          * control station power saving mode. */
771         if (ieee80211_is_nullfunc(hdr->frame_control)) {
772                 I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc);
773                 /* Update counter and free packet here to avoid counting this
774                  * as a dropped packed. */
775                 sta->rx_packets++;
776                 dev_kfree_skb(rx->skb);
777                 return RX_QUEUED;
778         }
779
780         return RX_CONTINUE;
781 } /* ieee80211_rx_h_sta_process */
782
783 static inline struct ieee80211_fragment_entry *
784 ieee80211_reassemble_add(struct ieee80211_sub_if_data *sdata,
785                          unsigned int frag, unsigned int seq, int rx_queue,
786                          struct sk_buff **skb)
787 {
788         struct ieee80211_fragment_entry *entry;
789         int idx;
790
791         idx = sdata->fragment_next;
792         entry = &sdata->fragments[sdata->fragment_next++];
793         if (sdata->fragment_next >= IEEE80211_FRAGMENT_MAX)
794                 sdata->fragment_next = 0;
795
796         if (!skb_queue_empty(&entry->skb_list)) {
797 #ifdef CONFIG_MAC80211_VERBOSE_DEBUG
798                 struct ieee80211_hdr *hdr =
799                         (struct ieee80211_hdr *) entry->skb_list.next->data;
800                 printk(KERN_DEBUG "%s: RX reassembly removed oldest "
801                        "fragment entry (idx=%d age=%lu seq=%d last_frag=%d "
802                        "addr1=%pM addr2=%pM\n",
803                        sdata->dev->name, idx,
804                        jiffies - entry->first_frag_time, entry->seq,
805                        entry->last_frag, hdr->addr1, hdr->addr2);
806 #endif
807                 __skb_queue_purge(&entry->skb_list);
808         }
809
810         __skb_queue_tail(&entry->skb_list, *skb); /* no need for locking */
811         *skb = NULL;
812         entry->first_frag_time = jiffies;
813         entry->seq = seq;
814         entry->rx_queue = rx_queue;
815         entry->last_frag = frag;
816         entry->ccmp = 0;
817         entry->extra_len = 0;
818
819         return entry;
820 }
821
822 static inline struct ieee80211_fragment_entry *
823 ieee80211_reassemble_find(struct ieee80211_sub_if_data *sdata,
824                           unsigned int frag, unsigned int seq,
825                           int rx_queue, struct ieee80211_hdr *hdr)
826 {
827         struct ieee80211_fragment_entry *entry;
828         int i, idx;
829
830         idx = sdata->fragment_next;
831         for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++) {
832                 struct ieee80211_hdr *f_hdr;
833
834                 idx--;
835                 if (idx < 0)
836                         idx = IEEE80211_FRAGMENT_MAX - 1;
837
838                 entry = &sdata->fragments[idx];
839                 if (skb_queue_empty(&entry->skb_list) || entry->seq != seq ||
840                     entry->rx_queue != rx_queue ||
841                     entry->last_frag + 1 != frag)
842                         continue;
843
844                 f_hdr = (struct ieee80211_hdr *)entry->skb_list.next->data;
845
846                 /*
847                  * Check ftype and addresses are equal, else check next fragment
848                  */
849                 if (((hdr->frame_control ^ f_hdr->frame_control) &
850                      cpu_to_le16(IEEE80211_FCTL_FTYPE)) ||
851                     compare_ether_addr(hdr->addr1, f_hdr->addr1) != 0 ||
852                     compare_ether_addr(hdr->addr2, f_hdr->addr2) != 0)
853                         continue;
854
855                 if (time_after(jiffies, entry->first_frag_time + 2 * HZ)) {
856                         __skb_queue_purge(&entry->skb_list);
857                         continue;
858                 }
859                 return entry;
860         }
861
862         return NULL;
863 }
864
865 static ieee80211_rx_result debug_noinline
866 ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx)
867 {
868         struct ieee80211_hdr *hdr;
869         u16 sc;
870         __le16 fc;
871         unsigned int frag, seq;
872         struct ieee80211_fragment_entry *entry;
873         struct sk_buff *skb;
874
875         hdr = (struct ieee80211_hdr *)rx->skb->data;
876         fc = hdr->frame_control;
877         sc = le16_to_cpu(hdr->seq_ctrl);
878         frag = sc & IEEE80211_SCTL_FRAG;
879
880         if (likely((!ieee80211_has_morefrags(fc) && frag == 0) ||
881                    (rx->skb)->len < 24 ||
882                    is_multicast_ether_addr(hdr->addr1))) {
883                 /* not fragmented */
884                 goto out;
885         }
886         I802_DEBUG_INC(rx->local->rx_handlers_fragments);
887
888         seq = (sc & IEEE80211_SCTL_SEQ) >> 4;
889
890         if (frag == 0) {
891                 /* This is the first fragment of a new frame. */
892                 entry = ieee80211_reassemble_add(rx->sdata, frag, seq,
893                                                  rx->queue, &(rx->skb));
894                 if (rx->key && rx->key->conf.alg == ALG_CCMP &&
895                     ieee80211_has_protected(fc)) {
896                         /* Store CCMP PN so that we can verify that the next
897                          * fragment has a sequential PN value. */
898                         entry->ccmp = 1;
899                         memcpy(entry->last_pn,
900                                rx->key->u.ccmp.rx_pn[rx->queue],
901                                CCMP_PN_LEN);
902                 }
903                 return RX_QUEUED;
904         }
905
906         /* This is a fragment for a frame that should already be pending in
907          * fragment cache. Add this fragment to the end of the pending entry.
908          */
909         entry = ieee80211_reassemble_find(rx->sdata, frag, seq, rx->queue, hdr);
910         if (!entry) {
911                 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag);
912                 return RX_DROP_MONITOR;
913         }
914
915         /* Verify that MPDUs within one MSDU have sequential PN values.
916          * (IEEE 802.11i, 8.3.3.4.5) */
917         if (entry->ccmp) {
918                 int i;
919                 u8 pn[CCMP_PN_LEN], *rpn;
920                 if (!rx->key || rx->key->conf.alg != ALG_CCMP)
921                         return RX_DROP_UNUSABLE;
922                 memcpy(pn, entry->last_pn, CCMP_PN_LEN);
923                 for (i = CCMP_PN_LEN - 1; i >= 0; i--) {
924                         pn[i]++;
925                         if (pn[i])
926                                 break;
927                 }
928                 rpn = rx->key->u.ccmp.rx_pn[rx->queue];
929                 if (memcmp(pn, rpn, CCMP_PN_LEN))
930                         return RX_DROP_UNUSABLE;
931                 memcpy(entry->last_pn, pn, CCMP_PN_LEN);
932         }
933
934         skb_pull(rx->skb, ieee80211_hdrlen(fc));
935         __skb_queue_tail(&entry->skb_list, rx->skb);
936         entry->last_frag = frag;
937         entry->extra_len += rx->skb->len;
938         if (ieee80211_has_morefrags(fc)) {
939                 rx->skb = NULL;
940                 return RX_QUEUED;
941         }
942
943         rx->skb = __skb_dequeue(&entry->skb_list);
944         if (skb_tailroom(rx->skb) < entry->extra_len) {
945                 I802_DEBUG_INC(rx->local->rx_expand_skb_head2);
946                 if (unlikely(pskb_expand_head(rx->skb, 0, entry->extra_len,
947                                               GFP_ATOMIC))) {
948                         I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag);
949                         __skb_queue_purge(&entry->skb_list);
950                         return RX_DROP_UNUSABLE;
951                 }
952         }
953         while ((skb = __skb_dequeue(&entry->skb_list))) {
954                 memcpy(skb_put(rx->skb, skb->len), skb->data, skb->len);
955                 dev_kfree_skb(skb);
956         }
957
958         /* Complete frame has been reassembled - process it now */
959         rx->flags |= IEEE80211_RX_FRAGMENTED;
960
961  out:
962         if (rx->sta)
963                 rx->sta->rx_packets++;
964         if (is_multicast_ether_addr(hdr->addr1))
965                 rx->local->dot11MulticastReceivedFrameCount++;
966         else
967                 ieee80211_led_rx(rx->local);
968         return RX_CONTINUE;
969 }
970
971 static ieee80211_rx_result debug_noinline
972 ieee80211_rx_h_ps_poll(struct ieee80211_rx_data *rx)
973 {
974         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(rx->dev);
975         struct sk_buff *skb;
976         int no_pending_pkts;
977         __le16 fc = ((struct ieee80211_hdr *)rx->skb->data)->frame_control;
978
979         if (likely(!rx->sta || !ieee80211_is_pspoll(fc) ||
980                    !(rx->flags & IEEE80211_RX_RA_MATCH)))
981                 return RX_CONTINUE;
982
983         if ((sdata->vif.type != NL80211_IFTYPE_AP) &&
984             (sdata->vif.type != NL80211_IFTYPE_AP_VLAN))
985                 return RX_DROP_UNUSABLE;
986
987         skb = skb_dequeue(&rx->sta->tx_filtered);
988         if (!skb) {
989                 skb = skb_dequeue(&rx->sta->ps_tx_buf);
990                 if (skb)
991                         rx->local->total_ps_buffered--;
992         }
993         no_pending_pkts = skb_queue_empty(&rx->sta->tx_filtered) &&
994                 skb_queue_empty(&rx->sta->ps_tx_buf);
995
996         if (skb) {
997                 struct ieee80211_hdr *hdr =
998                         (struct ieee80211_hdr *) skb->data;
999
1000                 /*
1001                  * Tell TX path to send one frame even though the STA may
1002                  * still remain is PS mode after this frame exchange.
1003                  */
1004                 set_sta_flags(rx->sta, WLAN_STA_PSPOLL);
1005
1006 #ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
1007                 printk(KERN_DEBUG "STA %pM aid %d: PS Poll (entries after %d)\n",
1008                        rx->sta->sta.addr, rx->sta->sta.aid,
1009                        skb_queue_len(&rx->sta->ps_tx_buf));
1010 #endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
1011
1012                 /* Use MoreData flag to indicate whether there are more
1013                  * buffered frames for this STA */
1014                 if (no_pending_pkts)
1015                         hdr->frame_control &= cpu_to_le16(~IEEE80211_FCTL_MOREDATA);
1016                 else
1017                         hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_MOREDATA);
1018
1019                 dev_queue_xmit(skb);
1020
1021                 if (no_pending_pkts)
1022                         sta_info_clear_tim_bit(rx->sta);
1023 #ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
1024         } else if (!rx->sent_ps_buffered) {
1025                 /*
1026                  * FIXME: This can be the result of a race condition between
1027                  *        us expiring a frame and the station polling for it.
1028                  *        Should we send it a null-func frame indicating we
1029                  *        have nothing buffered for it?
1030                  */
1031                 printk(KERN_DEBUG "%s: STA %pM sent PS Poll even "
1032                        "though there are no buffered frames for it\n",
1033                        rx->dev->name, rx->sta->sta.addr);
1034 #endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
1035         }
1036
1037         /* Free PS Poll skb here instead of returning RX_DROP that would
1038          * count as an dropped frame. */
1039         dev_kfree_skb(rx->skb);
1040
1041         return RX_QUEUED;
1042 }
1043
1044 static ieee80211_rx_result debug_noinline
1045 ieee80211_rx_h_remove_qos_control(struct ieee80211_rx_data *rx)
1046 {
1047         u8 *data = rx->skb->data;
1048         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)data;
1049
1050         if (!ieee80211_is_data_qos(hdr->frame_control))
1051                 return RX_CONTINUE;
1052
1053         /* remove the qos control field, update frame type and meta-data */
1054         memmove(data + IEEE80211_QOS_CTL_LEN, data,
1055                 ieee80211_hdrlen(hdr->frame_control) - IEEE80211_QOS_CTL_LEN);
1056         hdr = (struct ieee80211_hdr *)skb_pull(rx->skb, IEEE80211_QOS_CTL_LEN);
1057         /* change frame type to non QOS */
1058         hdr->frame_control &= ~cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
1059
1060         return RX_CONTINUE;
1061 }
1062
1063 static int
1064 ieee80211_802_1x_port_control(struct ieee80211_rx_data *rx)
1065 {
1066         if (unlikely(!rx->sta ||
1067             !test_sta_flags(rx->sta, WLAN_STA_AUTHORIZED)))
1068                 return -EACCES;
1069
1070         return 0;
1071 }
1072
1073 static int
1074 ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc)
1075 {
1076         /*
1077          * Pass through unencrypted frames if the hardware has
1078          * decrypted them already.
1079          */
1080         if (rx->status->flag & RX_FLAG_DECRYPTED)
1081                 return 0;
1082
1083         /* Drop unencrypted frames if key is set. */
1084         if (unlikely(!ieee80211_has_protected(fc) &&
1085                      !ieee80211_is_nullfunc(fc) &&
1086                      (rx->key || rx->sdata->drop_unencrypted)))
1087                 return -EACCES;
1088
1089         return 0;
1090 }
1091
1092 static int
1093 ieee80211_data_to_8023(struct ieee80211_rx_data *rx)
1094 {
1095         struct net_device *dev = rx->dev;
1096         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) rx->skb->data;
1097         u16 hdrlen, ethertype;
1098         u8 *payload;
1099         u8 dst[ETH_ALEN];
1100         u8 src[ETH_ALEN] __aligned(2);
1101         struct sk_buff *skb = rx->skb;
1102         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1103
1104         if (unlikely(!ieee80211_is_data_present(hdr->frame_control)))
1105                 return -1;
1106
1107         hdrlen = ieee80211_hdrlen(hdr->frame_control);
1108
1109         /* convert IEEE 802.11 header + possible LLC headers into Ethernet
1110          * header
1111          * IEEE 802.11 address fields:
1112          * ToDS FromDS Addr1 Addr2 Addr3 Addr4
1113          *   0     0   DA    SA    BSSID n/a
1114          *   0     1   DA    BSSID SA    n/a
1115          *   1     0   BSSID SA    DA    n/a
1116          *   1     1   RA    TA    DA    SA
1117          */
1118         memcpy(dst, ieee80211_get_DA(hdr), ETH_ALEN);
1119         memcpy(src, ieee80211_get_SA(hdr), ETH_ALEN);
1120
1121         switch (hdr->frame_control &
1122                 cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) {
1123         case __constant_cpu_to_le16(IEEE80211_FCTL_TODS):
1124                 if (unlikely(sdata->vif.type != NL80211_IFTYPE_AP &&
1125                              sdata->vif.type != NL80211_IFTYPE_AP_VLAN))
1126                         return -1;
1127                 break;
1128         case __constant_cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS):
1129                 if (unlikely(sdata->vif.type != NL80211_IFTYPE_WDS &&
1130                              sdata->vif.type != NL80211_IFTYPE_MESH_POINT))
1131                         return -1;
1132                 if (ieee80211_vif_is_mesh(&sdata->vif)) {
1133                         struct ieee80211s_hdr *meshdr = (struct ieee80211s_hdr *)
1134                                 (skb->data + hdrlen);
1135                         hdrlen += ieee80211_get_mesh_hdrlen(meshdr);
1136                         if (meshdr->flags & MESH_FLAGS_AE_A5_A6) {
1137                                 memcpy(dst, meshdr->eaddr1, ETH_ALEN);
1138                                 memcpy(src, meshdr->eaddr2, ETH_ALEN);
1139                         }
1140                 }
1141                 break;
1142         case __constant_cpu_to_le16(IEEE80211_FCTL_FROMDS):
1143                 if (sdata->vif.type != NL80211_IFTYPE_STATION ||
1144                     (is_multicast_ether_addr(dst) &&
1145                      !compare_ether_addr(src, dev->dev_addr)))
1146                         return -1;
1147                 break;
1148         case __constant_cpu_to_le16(0):
1149                 if (sdata->vif.type != NL80211_IFTYPE_ADHOC)
1150                         return -1;
1151                 break;
1152         }
1153
1154         if (unlikely(skb->len - hdrlen < 8))
1155                 return -1;
1156
1157         payload = skb->data + hdrlen;
1158         ethertype = (payload[6] << 8) | payload[7];
1159
1160         if (likely((compare_ether_addr(payload, rfc1042_header) == 0 &&
1161                     ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) ||
1162                    compare_ether_addr(payload, bridge_tunnel_header) == 0)) {
1163                 /* remove RFC1042 or Bridge-Tunnel encapsulation and
1164                  * replace EtherType */
1165                 skb_pull(skb, hdrlen + 6);
1166                 memcpy(skb_push(skb, ETH_ALEN), src, ETH_ALEN);
1167                 memcpy(skb_push(skb, ETH_ALEN), dst, ETH_ALEN);
1168         } else {
1169                 struct ethhdr *ehdr;
1170                 __be16 len;
1171
1172                 skb_pull(skb, hdrlen);
1173                 len = htons(skb->len);
1174                 ehdr = (struct ethhdr *) skb_push(skb, sizeof(struct ethhdr));
1175                 memcpy(ehdr->h_dest, dst, ETH_ALEN);
1176                 memcpy(ehdr->h_source, src, ETH_ALEN);
1177                 ehdr->h_proto = len;
1178         }
1179         return 0;
1180 }
1181
1182 /*
1183  * requires that rx->skb is a frame with ethernet header
1184  */
1185 static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx, __le16 fc)
1186 {
1187         static const u8 pae_group_addr[ETH_ALEN] __aligned(2)
1188                 = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x03 };
1189         struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data;
1190
1191         /*
1192          * Allow EAPOL frames to us/the PAE group address regardless
1193          * of whether the frame was encrypted or not.
1194          */
1195         if (ehdr->h_proto == htons(ETH_P_PAE) &&
1196             (compare_ether_addr(ehdr->h_dest, rx->dev->dev_addr) == 0 ||
1197              compare_ether_addr(ehdr->h_dest, pae_group_addr) == 0))
1198                 return true;
1199
1200         if (ieee80211_802_1x_port_control(rx) ||
1201             ieee80211_drop_unencrypted(rx, fc))
1202                 return false;
1203
1204         return true;
1205 }
1206
1207 /*
1208  * requires that rx->skb is a frame with ethernet header
1209  */
1210 static void
1211 ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
1212 {
1213         struct net_device *dev = rx->dev;
1214         struct ieee80211_local *local = rx->local;
1215         struct sk_buff *skb, *xmit_skb;
1216         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1217         struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data;
1218         struct sta_info *dsta;
1219
1220         skb = rx->skb;
1221         xmit_skb = NULL;
1222
1223         if ((sdata->vif.type == NL80211_IFTYPE_AP ||
1224              sdata->vif.type == NL80211_IFTYPE_AP_VLAN) &&
1225             !(sdata->flags & IEEE80211_SDATA_DONT_BRIDGE_PACKETS) &&
1226             (rx->flags & IEEE80211_RX_RA_MATCH)) {
1227                 if (is_multicast_ether_addr(ehdr->h_dest)) {
1228                         /*
1229                          * send multicast frames both to higher layers in
1230                          * local net stack and back to the wireless medium
1231                          */
1232                         xmit_skb = skb_copy(skb, GFP_ATOMIC);
1233                         if (!xmit_skb && net_ratelimit())
1234                                 printk(KERN_DEBUG "%s: failed to clone "
1235                                        "multicast frame\n", dev->name);
1236                 } else {
1237                         dsta = sta_info_get(local, skb->data);
1238                         if (dsta && dsta->sdata->dev == dev) {
1239                                 /*
1240                                  * The destination station is associated to
1241                                  * this AP (in this VLAN), so send the frame
1242                                  * directly to it and do not pass it to local
1243                                  * net stack.
1244                                  */
1245                                 xmit_skb = skb;
1246                                 skb = NULL;
1247                         }
1248                 }
1249         }
1250
1251         if (skb) {
1252                 /* deliver to local stack */
1253                 skb->protocol = eth_type_trans(skb, dev);
1254                 memset(skb->cb, 0, sizeof(skb->cb));
1255                 netif_rx(skb);
1256         }
1257
1258         if (xmit_skb) {
1259                 /* send to wireless media */
1260                 xmit_skb->protocol = htons(ETH_P_802_3);
1261                 skb_reset_network_header(xmit_skb);
1262                 skb_reset_mac_header(xmit_skb);
1263                 dev_queue_xmit(xmit_skb);
1264         }
1265 }
1266
1267 static ieee80211_rx_result debug_noinline
1268 ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
1269 {
1270         struct net_device *dev = rx->dev;
1271         struct ieee80211_local *local = rx->local;
1272         u16 ethertype;
1273         u8 *payload;
1274         struct sk_buff *skb = rx->skb, *frame = NULL;
1275         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1276         __le16 fc = hdr->frame_control;
1277         const struct ethhdr *eth;
1278         int remaining, err;
1279         u8 dst[ETH_ALEN];
1280         u8 src[ETH_ALEN];
1281
1282         if (unlikely(!ieee80211_is_data(fc)))
1283                 return RX_CONTINUE;
1284
1285         if (unlikely(!ieee80211_is_data_present(fc)))
1286                 return RX_DROP_MONITOR;
1287
1288         if (!(rx->flags & IEEE80211_RX_AMSDU))
1289                 return RX_CONTINUE;
1290
1291         err = ieee80211_data_to_8023(rx);
1292         if (unlikely(err))
1293                 return RX_DROP_UNUSABLE;
1294
1295         skb->dev = dev;
1296
1297         dev->stats.rx_packets++;
1298         dev->stats.rx_bytes += skb->len;
1299
1300         /* skip the wrapping header */
1301         eth = (struct ethhdr *) skb_pull(skb, sizeof(struct ethhdr));
1302         if (!eth)
1303                 return RX_DROP_UNUSABLE;
1304
1305         while (skb != frame) {
1306                 u8 padding;
1307                 __be16 len = eth->h_proto;
1308                 unsigned int subframe_len = sizeof(struct ethhdr) + ntohs(len);
1309
1310                 remaining = skb->len;
1311                 memcpy(dst, eth->h_dest, ETH_ALEN);
1312                 memcpy(src, eth->h_source, ETH_ALEN);
1313
1314                 padding = ((4 - subframe_len) & 0x3);
1315                 /* the last MSDU has no padding */
1316                 if (subframe_len > remaining)
1317                         return RX_DROP_UNUSABLE;
1318
1319                 skb_pull(skb, sizeof(struct ethhdr));
1320                 /* if last subframe reuse skb */
1321                 if (remaining <= subframe_len + padding)
1322                         frame = skb;
1323                 else {
1324                         frame = dev_alloc_skb(local->hw.extra_tx_headroom +
1325                                               subframe_len);
1326
1327                         if (frame == NULL)
1328                                 return RX_DROP_UNUSABLE;
1329
1330                         skb_reserve(frame, local->hw.extra_tx_headroom +
1331                                     sizeof(struct ethhdr));
1332                         memcpy(skb_put(frame, ntohs(len)), skb->data,
1333                                 ntohs(len));
1334
1335                         eth = (struct ethhdr *) skb_pull(skb, ntohs(len) +
1336                                                         padding);
1337                         if (!eth) {
1338                                 dev_kfree_skb(frame);
1339                                 return RX_DROP_UNUSABLE;
1340                         }
1341                 }
1342
1343                 skb_reset_network_header(frame);
1344                 frame->dev = dev;
1345                 frame->priority = skb->priority;
1346                 rx->skb = frame;
1347
1348                 payload = frame->data;
1349                 ethertype = (payload[6] << 8) | payload[7];
1350
1351                 if (likely((compare_ether_addr(payload, rfc1042_header) == 0 &&
1352                             ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) ||
1353                            compare_ether_addr(payload,
1354                                               bridge_tunnel_header) == 0)) {
1355                         /* remove RFC1042 or Bridge-Tunnel
1356                          * encapsulation and replace EtherType */
1357                         skb_pull(frame, 6);
1358                         memcpy(skb_push(frame, ETH_ALEN), src, ETH_ALEN);
1359                         memcpy(skb_push(frame, ETH_ALEN), dst, ETH_ALEN);
1360                 } else {
1361                         memcpy(skb_push(frame, sizeof(__be16)),
1362                                &len, sizeof(__be16));
1363                         memcpy(skb_push(frame, ETH_ALEN), src, ETH_ALEN);
1364                         memcpy(skb_push(frame, ETH_ALEN), dst, ETH_ALEN);
1365                 }
1366
1367                 if (!ieee80211_frame_allowed(rx, fc)) {
1368                         if (skb == frame) /* last frame */
1369                                 return RX_DROP_UNUSABLE;
1370                         dev_kfree_skb(frame);
1371                         continue;
1372                 }
1373
1374                 ieee80211_deliver_skb(rx);
1375         }
1376
1377         return RX_QUEUED;
1378 }
1379
1380 #ifdef CONFIG_MAC80211_MESH
1381 static ieee80211_rx_result
1382 ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
1383 {
1384         struct ieee80211_hdr *hdr;
1385         struct ieee80211s_hdr *mesh_hdr;
1386         unsigned int hdrlen;
1387         struct sk_buff *skb = rx->skb, *fwd_skb;
1388
1389         hdr = (struct ieee80211_hdr *) skb->data;
1390         hdrlen = ieee80211_hdrlen(hdr->frame_control);
1391         mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen);
1392
1393         if (!ieee80211_is_data(hdr->frame_control))
1394                 return RX_CONTINUE;
1395
1396         if (!mesh_hdr->ttl)
1397                 /* illegal frame */
1398                 return RX_DROP_MONITOR;
1399
1400         if (mesh_hdr->flags & MESH_FLAGS_AE_A5_A6){
1401                 struct ieee80211_sub_if_data *sdata;
1402                 struct mesh_path *mppath;
1403
1404                 sdata = IEEE80211_DEV_TO_SUB_IF(rx->dev);
1405                 rcu_read_lock();
1406                 mppath = mpp_path_lookup(mesh_hdr->eaddr2, sdata);
1407                 if (!mppath) {
1408                         mpp_path_add(mesh_hdr->eaddr2, hdr->addr4, sdata);
1409                 } else {
1410                         spin_lock_bh(&mppath->state_lock);
1411                         mppath->exp_time = jiffies;
1412                         if (compare_ether_addr(mppath->mpp, hdr->addr4) != 0)
1413                                 memcpy(mppath->mpp, hdr->addr4, ETH_ALEN);
1414                         spin_unlock_bh(&mppath->state_lock);
1415                 }
1416                 rcu_read_unlock();
1417         }
1418
1419         if (compare_ether_addr(rx->dev->dev_addr, hdr->addr3) == 0)
1420                 return RX_CONTINUE;
1421
1422         mesh_hdr->ttl--;
1423
1424         if (rx->flags & IEEE80211_RX_RA_MATCH) {
1425                 if (!mesh_hdr->ttl)
1426                         IEEE80211_IFSTA_MESH_CTR_INC(&rx->sdata->u.mesh,
1427                                                      dropped_frames_ttl);
1428                 else {
1429                         struct ieee80211_hdr *fwd_hdr;
1430                         fwd_skb = skb_copy(skb, GFP_ATOMIC);
1431
1432                         if (!fwd_skb && net_ratelimit())
1433                                 printk(KERN_DEBUG "%s: failed to clone mesh frame\n",
1434                                                    rx->dev->name);
1435
1436                         fwd_hdr =  (struct ieee80211_hdr *) fwd_skb->data;
1437                         /*
1438                          * Save TA to addr1 to send TA a path error if a
1439                          * suitable next hop is not found
1440                          */
1441                         memcpy(fwd_hdr->addr1, fwd_hdr->addr2, ETH_ALEN);
1442                         memcpy(fwd_hdr->addr2, rx->dev->dev_addr, ETH_ALEN);
1443                         fwd_skb->dev = rx->local->mdev;
1444                         fwd_skb->iif = rx->dev->ifindex;
1445                         dev_queue_xmit(fwd_skb);
1446                 }
1447         }
1448
1449         if (is_multicast_ether_addr(hdr->addr3) ||
1450             rx->dev->flags & IFF_PROMISC)
1451                 return RX_CONTINUE;
1452         else
1453                 return RX_DROP_MONITOR;
1454 }
1455 #endif
1456
1457 static ieee80211_rx_result debug_noinline
1458 ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
1459 {
1460         struct net_device *dev = rx->dev;
1461         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
1462         __le16 fc = hdr->frame_control;
1463         int err;
1464
1465         if (unlikely(!ieee80211_is_data(hdr->frame_control)))
1466                 return RX_CONTINUE;
1467
1468         if (unlikely(!ieee80211_is_data_present(hdr->frame_control)))
1469                 return RX_DROP_MONITOR;
1470
1471         err = ieee80211_data_to_8023(rx);
1472         if (unlikely(err))
1473                 return RX_DROP_UNUSABLE;
1474
1475         if (!ieee80211_frame_allowed(rx, fc))
1476                 return RX_DROP_MONITOR;
1477
1478         rx->skb->dev = dev;
1479
1480         dev->stats.rx_packets++;
1481         dev->stats.rx_bytes += rx->skb->len;
1482
1483         ieee80211_deliver_skb(rx);
1484
1485         return RX_QUEUED;
1486 }
1487
1488 static ieee80211_rx_result debug_noinline
1489 ieee80211_rx_h_ctrl(struct ieee80211_rx_data *rx)
1490 {
1491         struct ieee80211_local *local = rx->local;
1492         struct ieee80211_hw *hw = &local->hw;
1493         struct sk_buff *skb = rx->skb;
1494         struct ieee80211_bar *bar = (struct ieee80211_bar *)skb->data;
1495         struct tid_ampdu_rx *tid_agg_rx;
1496         u16 start_seq_num;
1497         u16 tid;
1498
1499         if (likely(!ieee80211_is_ctl(bar->frame_control)))
1500                 return RX_CONTINUE;
1501
1502         if (ieee80211_is_back_req(bar->frame_control)) {
1503                 if (!rx->sta)
1504                         return RX_CONTINUE;
1505                 tid = le16_to_cpu(bar->control) >> 12;
1506                 if (rx->sta->ampdu_mlme.tid_state_rx[tid]
1507                                         != HT_AGG_STATE_OPERATIONAL)
1508                         return RX_CONTINUE;
1509                 tid_agg_rx = rx->sta->ampdu_mlme.tid_rx[tid];
1510
1511                 start_seq_num = le16_to_cpu(bar->start_seq_num) >> 4;
1512
1513                 /* reset session timer */
1514                 if (tid_agg_rx->timeout) {
1515                         unsigned long expires =
1516                                 jiffies + (tid_agg_rx->timeout / 1000) * HZ;
1517                         mod_timer(&tid_agg_rx->session_timer, expires);
1518                 }
1519
1520                 /* manage reordering buffer according to requested */
1521                 /* sequence number */
1522                 rcu_read_lock();
1523                 ieee80211_sta_manage_reorder_buf(hw, tid_agg_rx, NULL,
1524                                                  start_seq_num, 1);
1525                 rcu_read_unlock();
1526                 return RX_DROP_UNUSABLE;
1527         }
1528
1529         return RX_CONTINUE;
1530 }
1531
1532 static ieee80211_rx_result debug_noinline
1533 ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
1534 {
1535         struct ieee80211_local *local = rx->local;
1536         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(rx->dev);
1537         struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data;
1538         int len = rx->skb->len;
1539
1540         if (!ieee80211_is_action(mgmt->frame_control))
1541                 return RX_CONTINUE;
1542
1543         if (!rx->sta)
1544                 return RX_DROP_MONITOR;
1545
1546         if (!(rx->flags & IEEE80211_RX_RA_MATCH))
1547                 return RX_DROP_MONITOR;
1548
1549         /* all categories we currently handle have action_code */
1550         if (len < IEEE80211_MIN_ACTION_SIZE + 1)
1551                 return RX_DROP_MONITOR;
1552
1553         switch (mgmt->u.action.category) {
1554         case WLAN_CATEGORY_BACK:
1555                 switch (mgmt->u.action.u.addba_req.action_code) {
1556                 case WLAN_ACTION_ADDBA_REQ:
1557                         if (len < (IEEE80211_MIN_ACTION_SIZE +
1558                                    sizeof(mgmt->u.action.u.addba_req)))
1559                                 return RX_DROP_MONITOR;
1560                         ieee80211_process_addba_request(local, rx->sta, mgmt, len);
1561                         break;
1562                 case WLAN_ACTION_ADDBA_RESP:
1563                         if (len < (IEEE80211_MIN_ACTION_SIZE +
1564                                    sizeof(mgmt->u.action.u.addba_resp)))
1565                                 return RX_DROP_MONITOR;
1566                         ieee80211_process_addba_resp(local, rx->sta, mgmt, len);
1567                         break;
1568                 case WLAN_ACTION_DELBA:
1569                         if (len < (IEEE80211_MIN_ACTION_SIZE +
1570                                    sizeof(mgmt->u.action.u.delba)))
1571                                 return RX_DROP_MONITOR;
1572                         ieee80211_process_delba(sdata, rx->sta, mgmt, len);
1573                         break;
1574                 }
1575                 break;
1576         case WLAN_CATEGORY_SPECTRUM_MGMT:
1577                 if (local->hw.conf.channel->band != IEEE80211_BAND_5GHZ)
1578                         return RX_DROP_MONITOR;
1579                 switch (mgmt->u.action.u.measurement.action_code) {
1580                 case WLAN_ACTION_SPCT_MSR_REQ:
1581                         if (len < (IEEE80211_MIN_ACTION_SIZE +
1582                                    sizeof(mgmt->u.action.u.measurement)))
1583                                 return RX_DROP_MONITOR;
1584                         ieee80211_process_measurement_req(sdata, mgmt, len);
1585                         break;
1586                 }
1587                 break;
1588         default:
1589                 return RX_CONTINUE;
1590         }
1591
1592         rx->sta->rx_packets++;
1593         dev_kfree_skb(rx->skb);
1594         return RX_QUEUED;
1595 }
1596
1597 static ieee80211_rx_result debug_noinline
1598 ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx)
1599 {
1600         struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(rx->dev);
1601
1602         if (!(rx->flags & IEEE80211_RX_RA_MATCH))
1603                 return RX_DROP_MONITOR;
1604
1605         if (ieee80211_vif_is_mesh(&sdata->vif))
1606                 return ieee80211_mesh_rx_mgmt(sdata, rx->skb, rx->status);
1607
1608         if (sdata->vif.type != NL80211_IFTYPE_STATION &&
1609             sdata->vif.type != NL80211_IFTYPE_ADHOC)
1610                 return RX_DROP_MONITOR;
1611
1612         if (sdata->flags & IEEE80211_SDATA_USERSPACE_MLME)
1613                 return RX_DROP_MONITOR;
1614
1615         ieee80211_sta_rx_mgmt(sdata, rx->skb, rx->status);
1616         return RX_QUEUED;
1617 }
1618
1619 static void ieee80211_rx_michael_mic_report(struct net_device *dev,
1620                                             struct ieee80211_hdr *hdr,
1621                                             struct ieee80211_rx_data *rx)
1622 {
1623         int keyidx;
1624         unsigned int hdrlen;
1625
1626         hdrlen = ieee80211_hdrlen(hdr->frame_control);
1627         if (rx->skb->len >= hdrlen + 4)
1628                 keyidx = rx->skb->data[hdrlen + 3] >> 6;
1629         else
1630                 keyidx = -1;
1631
1632         if (!rx->sta) {
1633                 /*
1634                  * Some hardware seem to generate incorrect Michael MIC
1635                  * reports; ignore them to avoid triggering countermeasures.
1636                  */
1637                 goto ignore;
1638         }
1639
1640         if (!ieee80211_has_protected(hdr->frame_control))
1641                 goto ignore;
1642
1643         if (rx->sdata->vif.type == NL80211_IFTYPE_AP && keyidx) {
1644                 /*
1645                  * APs with pairwise keys should never receive Michael MIC
1646                  * errors for non-zero keyidx because these are reserved for
1647                  * group keys and only the AP is sending real multicast
1648                  * frames in the BSS.
1649                  */
1650                 goto ignore;
1651         }
1652
1653         if (!ieee80211_is_data(hdr->frame_control) &&
1654             !ieee80211_is_auth(hdr->frame_control))
1655                 goto ignore;
1656
1657         mac80211_ev_michael_mic_failure(rx->sdata, keyidx, hdr);
1658  ignore:
1659         dev_kfree_skb(rx->skb);
1660         rx->skb = NULL;
1661 }
1662
1663 /* TODO: use IEEE80211_RX_FRAGMENTED */
1664 static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx)
1665 {
1666         struct ieee80211_sub_if_data *sdata;
1667         struct ieee80211_local *local = rx->local;
1668         struct ieee80211_rtap_hdr {
1669                 struct ieee80211_radiotap_header hdr;
1670                 u8 flags;
1671                 u8 rate;
1672                 __le16 chan_freq;
1673                 __le16 chan_flags;
1674         } __attribute__ ((packed)) *rthdr;
1675         struct sk_buff *skb = rx->skb, *skb2;
1676         struct net_device *prev_dev = NULL;
1677         struct ieee80211_rx_status *status = rx->status;
1678
1679         if (rx->flags & IEEE80211_RX_CMNTR_REPORTED)
1680                 goto out_free_skb;
1681
1682         if (skb_headroom(skb) < sizeof(*rthdr) &&
1683             pskb_expand_head(skb, sizeof(*rthdr), 0, GFP_ATOMIC))
1684                 goto out_free_skb;
1685
1686         rthdr = (void *)skb_push(skb, sizeof(*rthdr));
1687         memset(rthdr, 0, sizeof(*rthdr));
1688         rthdr->hdr.it_len = cpu_to_le16(sizeof(*rthdr));
1689         rthdr->hdr.it_present =
1690                 cpu_to_le32((1 << IEEE80211_RADIOTAP_FLAGS) |
1691                             (1 << IEEE80211_RADIOTAP_RATE) |
1692                             (1 << IEEE80211_RADIOTAP_CHANNEL));
1693
1694         rthdr->rate = rx->rate->bitrate / 5;
1695         rthdr->chan_freq = cpu_to_le16(status->freq);
1696
1697         if (status->band == IEEE80211_BAND_5GHZ)
1698                 rthdr->chan_flags = cpu_to_le16(IEEE80211_CHAN_OFDM |
1699                                                 IEEE80211_CHAN_5GHZ);
1700         else
1701                 rthdr->chan_flags = cpu_to_le16(IEEE80211_CHAN_DYN |
1702                                                 IEEE80211_CHAN_2GHZ);
1703
1704         skb_set_mac_header(skb, 0);
1705         skb->ip_summed = CHECKSUM_UNNECESSARY;
1706         skb->pkt_type = PACKET_OTHERHOST;
1707         skb->protocol = htons(ETH_P_802_2);
1708
1709         list_for_each_entry_rcu(sdata, &local->interfaces, list) {
1710                 if (!netif_running(sdata->dev))
1711                         continue;
1712
1713                 if (sdata->vif.type != NL80211_IFTYPE_MONITOR ||
1714                     !(sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES))
1715                         continue;
1716
1717                 if (prev_dev) {
1718                         skb2 = skb_clone(skb, GFP_ATOMIC);
1719                         if (skb2) {
1720                                 skb2->dev = prev_dev;
1721                                 netif_rx(skb2);
1722                         }
1723                 }
1724
1725                 prev_dev = sdata->dev;
1726                 sdata->dev->stats.rx_packets++;
1727                 sdata->dev->stats.rx_bytes += skb->len;
1728         }
1729
1730         if (prev_dev) {
1731                 skb->dev = prev_dev;
1732                 netif_rx(skb);
1733                 skb = NULL;
1734         } else
1735                 goto out_free_skb;
1736
1737         rx->flags |= IEEE80211_RX_CMNTR_REPORTED;
1738         return;
1739
1740  out_free_skb:
1741         dev_kfree_skb(skb);
1742 }
1743
1744
1745 static void ieee80211_invoke_rx_handlers(struct ieee80211_sub_if_data *sdata,
1746                                          struct ieee80211_rx_data *rx,
1747                                          struct sk_buff *skb)
1748 {
1749         ieee80211_rx_result res = RX_DROP_MONITOR;
1750
1751         rx->skb = skb;
1752         rx->sdata = sdata;
1753         rx->dev = sdata->dev;
1754
1755 #define CALL_RXH(rxh)                   \
1756         do {                            \
1757                 res = rxh(rx);          \
1758                 if (res != RX_CONTINUE) \
1759                         goto rxh_done;  \
1760         } while (0);
1761
1762         CALL_RXH(ieee80211_rx_h_passive_scan)
1763         CALL_RXH(ieee80211_rx_h_check)
1764         CALL_RXH(ieee80211_rx_h_decrypt)
1765         CALL_RXH(ieee80211_rx_h_sta_process)
1766         CALL_RXH(ieee80211_rx_h_defragment)
1767         CALL_RXH(ieee80211_rx_h_ps_poll)
1768         CALL_RXH(ieee80211_rx_h_michael_mic_verify)
1769         /* must be after MMIC verify so header is counted in MPDU mic */
1770         CALL_RXH(ieee80211_rx_h_remove_qos_control)
1771         CALL_RXH(ieee80211_rx_h_amsdu)
1772 #ifdef CONFIG_MAC80211_MESH
1773         if (ieee80211_vif_is_mesh(&sdata->vif))
1774                 CALL_RXH(ieee80211_rx_h_mesh_fwding);
1775 #endif
1776         CALL_RXH(ieee80211_rx_h_data)
1777         CALL_RXH(ieee80211_rx_h_ctrl)
1778         CALL_RXH(ieee80211_rx_h_action)
1779         CALL_RXH(ieee80211_rx_h_mgmt)
1780
1781 #undef CALL_RXH
1782
1783  rxh_done:
1784         switch (res) {
1785         case RX_DROP_MONITOR:
1786                 I802_DEBUG_INC(sdata->local->rx_handlers_drop);
1787                 if (rx->sta)
1788                         rx->sta->rx_dropped++;
1789                 /* fall through */
1790         case RX_CONTINUE:
1791                 ieee80211_rx_cooked_monitor(rx);
1792                 break;
1793         case RX_DROP_UNUSABLE:
1794                 I802_DEBUG_INC(sdata->local->rx_handlers_drop);
1795                 if (rx->sta)
1796                         rx->sta->rx_dropped++;
1797                 dev_kfree_skb(rx->skb);
1798                 break;
1799         case RX_QUEUED:
1800                 I802_DEBUG_INC(sdata->local->rx_handlers_queued);
1801                 break;
1802         }
1803 }
1804
1805 /* main receive path */
1806
1807 static int prepare_for_handlers(struct ieee80211_sub_if_data *sdata,
1808                                 u8 *bssid, struct ieee80211_rx_data *rx,
1809                                 struct ieee80211_hdr *hdr)
1810 {
1811         int multicast = is_multicast_ether_addr(hdr->addr1);
1812
1813         switch (sdata->vif.type) {
1814         case NL80211_IFTYPE_STATION:
1815                 if (!bssid)
1816                         return 0;
1817                 if (!ieee80211_bssid_match(bssid, sdata->u.sta.bssid)) {
1818                         if (!(rx->flags & IEEE80211_RX_IN_SCAN))
1819                                 return 0;
1820                         rx->flags &= ~IEEE80211_RX_RA_MATCH;
1821                 } else if (!multicast &&
1822                            compare_ether_addr(sdata->dev->dev_addr,
1823                                               hdr->addr1) != 0) {
1824                         if (!(sdata->dev->flags & IFF_PROMISC))
1825                                 return 0;
1826                         rx->flags &= ~IEEE80211_RX_RA_MATCH;
1827                 }
1828                 break;
1829         case NL80211_IFTYPE_ADHOC:
1830                 if (!bssid)
1831                         return 0;
1832                 if (ieee80211_is_beacon(hdr->frame_control)) {
1833                         return 1;
1834                 }
1835                 else if (!ieee80211_bssid_match(bssid, sdata->u.sta.bssid)) {
1836                         if (!(rx->flags & IEEE80211_RX_IN_SCAN))
1837                                 return 0;
1838                         rx->flags &= ~IEEE80211_RX_RA_MATCH;
1839                 } else if (!multicast &&
1840                            compare_ether_addr(sdata->dev->dev_addr,
1841                                               hdr->addr1) != 0) {
1842                         if (!(sdata->dev->flags & IFF_PROMISC))
1843                                 return 0;
1844                         rx->flags &= ~IEEE80211_RX_RA_MATCH;
1845                 } else if (!rx->sta)
1846                         rx->sta = ieee80211_ibss_add_sta(sdata, rx->skb,
1847                                                 bssid, hdr->addr2,
1848                                                 BIT(rx->status->rate_idx));
1849                 break;
1850         case NL80211_IFTYPE_MESH_POINT:
1851                 if (!multicast &&
1852                     compare_ether_addr(sdata->dev->dev_addr,
1853                                        hdr->addr1) != 0) {
1854                         if (!(sdata->dev->flags & IFF_PROMISC))
1855                                 return 0;
1856
1857                         rx->flags &= ~IEEE80211_RX_RA_MATCH;
1858                 }
1859                 break;
1860         case NL80211_IFTYPE_AP_VLAN:
1861         case NL80211_IFTYPE_AP:
1862                 if (!bssid) {
1863                         if (compare_ether_addr(sdata->dev->dev_addr,
1864                                                hdr->addr1))
1865                                 return 0;
1866                 } else if (!ieee80211_bssid_match(bssid,
1867                                         sdata->dev->dev_addr)) {
1868                         if (!(rx->flags & IEEE80211_RX_IN_SCAN))
1869                                 return 0;
1870                         rx->flags &= ~IEEE80211_RX_RA_MATCH;
1871                 }
1872                 break;
1873         case NL80211_IFTYPE_WDS:
1874                 if (bssid || !ieee80211_is_data(hdr->frame_control))
1875                         return 0;
1876                 if (compare_ether_addr(sdata->u.wds.remote_addr, hdr->addr2))
1877                         return 0;
1878                 break;
1879         case NL80211_IFTYPE_MONITOR:
1880                 /* take everything */
1881                 break;
1882         case NL80211_IFTYPE_UNSPECIFIED:
1883         case __NL80211_IFTYPE_AFTER_LAST:
1884                 /* should never get here */
1885                 WARN_ON(1);
1886                 break;
1887         }
1888
1889         return 1;
1890 }
1891
1892 /*
1893  * This is the actual Rx frames handler. as it blongs to Rx path it must
1894  * be called with rcu_read_lock protection.
1895  */
1896 static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
1897                                          struct sk_buff *skb,
1898                                          struct ieee80211_rx_status *status,
1899                                          struct ieee80211_rate *rate)
1900 {
1901         struct ieee80211_local *local = hw_to_local(hw);
1902         struct ieee80211_sub_if_data *sdata;
1903         struct ieee80211_hdr *hdr;
1904         struct ieee80211_rx_data rx;
1905         int prepares;
1906         struct ieee80211_sub_if_data *prev = NULL;
1907         struct sk_buff *skb_new;
1908         u8 *bssid;
1909
1910         hdr = (struct ieee80211_hdr *)skb->data;
1911         memset(&rx, 0, sizeof(rx));
1912         rx.skb = skb;
1913         rx.local = local;
1914
1915         rx.status = status;
1916         rx.rate = rate;
1917
1918         if (ieee80211_is_data(hdr->frame_control) || ieee80211_is_mgmt(hdr->frame_control))
1919                 local->dot11ReceivedFragmentCount++;
1920
1921         rx.sta = sta_info_get(local, hdr->addr2);
1922         if (rx.sta) {
1923                 rx.sdata = rx.sta->sdata;
1924                 rx.dev = rx.sta->sdata->dev;
1925         }
1926
1927         if ((status->flag & RX_FLAG_MMIC_ERROR)) {
1928                 ieee80211_rx_michael_mic_report(local->mdev, hdr, &rx);
1929                 return;
1930         }
1931
1932         if (unlikely(local->sw_scanning || local->hw_scanning))
1933                 rx.flags |= IEEE80211_RX_IN_SCAN;
1934
1935         ieee80211_parse_qos(&rx);
1936         ieee80211_verify_ip_alignment(&rx);
1937
1938         skb = rx.skb;
1939
1940         list_for_each_entry_rcu(sdata, &local->interfaces, list) {
1941                 if (!netif_running(sdata->dev))
1942                         continue;
1943
1944                 if (sdata->vif.type == NL80211_IFTYPE_MONITOR)
1945                         continue;
1946
1947                 bssid = ieee80211_get_bssid(hdr, skb->len, sdata->vif.type);
1948                 rx.flags |= IEEE80211_RX_RA_MATCH;
1949                 prepares = prepare_for_handlers(sdata, bssid, &rx, hdr);
1950
1951                 if (!prepares)
1952                         continue;
1953
1954                 /*
1955                  * frame is destined for this interface, but if it's not
1956                  * also for the previous one we handle that after the
1957                  * loop to avoid copying the SKB once too much
1958                  */
1959
1960                 if (!prev) {
1961                         prev = sdata;
1962                         continue;
1963                 }
1964
1965                 /*
1966                  * frame was destined for the previous interface
1967                  * so invoke RX handlers for it
1968                  */
1969
1970                 skb_new = skb_copy(skb, GFP_ATOMIC);
1971                 if (!skb_new) {
1972                         if (net_ratelimit())
1973                                 printk(KERN_DEBUG "%s: failed to copy "
1974                                        "multicast frame for %s\n",
1975                                        wiphy_name(local->hw.wiphy),
1976                                        prev->dev->name);
1977                         continue;
1978                 }
1979                 ieee80211_invoke_rx_handlers(prev, &rx, skb_new);
1980                 prev = sdata;
1981         }
1982         if (prev)
1983                 ieee80211_invoke_rx_handlers(prev, &rx, skb);
1984         else
1985                 dev_kfree_skb(skb);
1986 }
1987
1988 #define SEQ_MODULO 0x1000
1989 #define SEQ_MASK   0xfff
1990
1991 static inline int seq_less(u16 sq1, u16 sq2)
1992 {
1993         return ((sq1 - sq2) & SEQ_MASK) > (SEQ_MODULO >> 1);
1994 }
1995
1996 static inline u16 seq_inc(u16 sq)
1997 {
1998         return (sq + 1) & SEQ_MASK;
1999 }
2000
2001 static inline u16 seq_sub(u16 sq1, u16 sq2)
2002 {
2003         return (sq1 - sq2) & SEQ_MASK;
2004 }
2005
2006
2007 /*
2008  * As it function blongs to Rx path it must be called with
2009  * the proper rcu_read_lock protection for its flow.
2010  */
2011 static u8 ieee80211_sta_manage_reorder_buf(struct ieee80211_hw *hw,
2012                                            struct tid_ampdu_rx *tid_agg_rx,
2013                                            struct sk_buff *skb,
2014                                            u16 mpdu_seq_num,
2015                                            int bar_req)
2016 {
2017         struct ieee80211_local *local = hw_to_local(hw);
2018         struct ieee80211_rx_status status;
2019         u16 head_seq_num, buf_size;
2020         int index;
2021         struct ieee80211_supported_band *sband;
2022         struct ieee80211_rate *rate;
2023
2024         buf_size = tid_agg_rx->buf_size;
2025         head_seq_num = tid_agg_rx->head_seq_num;
2026
2027         /* frame with out of date sequence number */
2028         if (seq_less(mpdu_seq_num, head_seq_num)) {
2029                 dev_kfree_skb(skb);
2030                 return 1;
2031         }
2032
2033         /* if frame sequence number exceeds our buffering window size or
2034          * block Ack Request arrived - release stored frames */
2035         if ((!seq_less(mpdu_seq_num, head_seq_num + buf_size)) || (bar_req)) {
2036                 /* new head to the ordering buffer */
2037                 if (bar_req)
2038                         head_seq_num = mpdu_seq_num;
2039                 else
2040                         head_seq_num =
2041                                 seq_inc(seq_sub(mpdu_seq_num, buf_size));
2042                 /* release stored frames up to new head to stack */
2043                 while (seq_less(tid_agg_rx->head_seq_num, head_seq_num)) {
2044                         index = seq_sub(tid_agg_rx->head_seq_num,
2045                                 tid_agg_rx->ssn)
2046                                 % tid_agg_rx->buf_size;
2047
2048                         if (tid_agg_rx->reorder_buf[index]) {
2049                                 /* release the reordered frames to stack */
2050                                 memcpy(&status,
2051                                         tid_agg_rx->reorder_buf[index]->cb,
2052                                         sizeof(status));
2053                                 sband = local->hw.wiphy->bands[status.band];
2054                                 rate = &sband->bitrates[status.rate_idx];
2055                                 __ieee80211_rx_handle_packet(hw,
2056                                         tid_agg_rx->reorder_buf[index],
2057                                         &status, rate);
2058                                 tid_agg_rx->stored_mpdu_num--;
2059                                 tid_agg_rx->reorder_buf[index] = NULL;
2060                         }
2061                         tid_agg_rx->head_seq_num =
2062                                 seq_inc(tid_agg_rx->head_seq_num);
2063                 }
2064                 if (bar_req)
2065                         return 1;
2066         }
2067
2068         /* now the new frame is always in the range of the reordering */
2069         /* buffer window */
2070         index = seq_sub(mpdu_seq_num, tid_agg_rx->ssn)
2071                                 % tid_agg_rx->buf_size;
2072         /* check if we already stored this frame */
2073         if (tid_agg_rx->reorder_buf[index]) {
2074                 dev_kfree_skb(skb);
2075                 return 1;
2076         }
2077
2078         /* if arrived mpdu is in the right order and nothing else stored */
2079         /* release it immediately */
2080         if (mpdu_seq_num == tid_agg_rx->head_seq_num &&
2081                         tid_agg_rx->stored_mpdu_num == 0) {
2082                 tid_agg_rx->head_seq_num =
2083                         seq_inc(tid_agg_rx->head_seq_num);
2084                 return 0;
2085         }
2086
2087         /* put the frame in the reordering buffer */
2088         tid_agg_rx->reorder_buf[index] = skb;
2089         tid_agg_rx->stored_mpdu_num++;
2090         /* release the buffer until next missing frame */
2091         index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn)
2092                                                 % tid_agg_rx->buf_size;
2093         while (tid_agg_rx->reorder_buf[index]) {
2094                 /* release the reordered frame back to stack */
2095                 memcpy(&status, tid_agg_rx->reorder_buf[index]->cb,
2096                         sizeof(status));
2097                 sband = local->hw.wiphy->bands[status.band];
2098                 rate = &sband->bitrates[status.rate_idx];
2099                 __ieee80211_rx_handle_packet(hw, tid_agg_rx->reorder_buf[index],
2100                                              &status, rate);
2101                 tid_agg_rx->stored_mpdu_num--;
2102                 tid_agg_rx->reorder_buf[index] = NULL;
2103                 tid_agg_rx->head_seq_num = seq_inc(tid_agg_rx->head_seq_num);
2104                 index = seq_sub(tid_agg_rx->head_seq_num,
2105                         tid_agg_rx->ssn) % tid_agg_rx->buf_size;
2106         }
2107         return 1;
2108 }
2109
2110 static u8 ieee80211_rx_reorder_ampdu(struct ieee80211_local *local,
2111                                      struct sk_buff *skb)
2112 {
2113         struct ieee80211_hw *hw = &local->hw;
2114         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
2115         struct sta_info *sta;
2116         struct tid_ampdu_rx *tid_agg_rx;
2117         u16 sc;
2118         u16 mpdu_seq_num;
2119         u8 ret = 0;
2120         int tid;
2121
2122         sta = sta_info_get(local, hdr->addr2);
2123         if (!sta)
2124                 return ret;
2125
2126         /* filter the QoS data rx stream according to
2127          * STA/TID and check if this STA/TID is on aggregation */
2128         if (!ieee80211_is_data_qos(hdr->frame_control))
2129                 goto end_reorder;
2130
2131         tid = *ieee80211_get_qos_ctl(hdr) & IEEE80211_QOS_CTL_TID_MASK;
2132
2133         if (sta->ampdu_mlme.tid_state_rx[tid] != HT_AGG_STATE_OPERATIONAL)
2134                 goto end_reorder;
2135
2136         tid_agg_rx = sta->ampdu_mlme.tid_rx[tid];
2137
2138         /* qos null data frames are excluded */
2139         if (unlikely(hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_NULLFUNC)))
2140                 goto end_reorder;
2141
2142         /* new un-ordered ampdu frame - process it */
2143
2144         /* reset session timer */
2145         if (tid_agg_rx->timeout) {
2146                 unsigned long expires =
2147                         jiffies + (tid_agg_rx->timeout / 1000) * HZ;
2148                 mod_timer(&tid_agg_rx->session_timer, expires);
2149         }
2150
2151         /* if this mpdu is fragmented - terminate rx aggregation session */
2152         sc = le16_to_cpu(hdr->seq_ctrl);
2153         if (sc & IEEE80211_SCTL_FRAG) {
2154                 ieee80211_sta_stop_rx_ba_session(sta->sdata, sta->sta.addr,
2155                         tid, 0, WLAN_REASON_QSTA_REQUIRE_SETUP);
2156                 ret = 1;
2157                 goto end_reorder;
2158         }
2159
2160         /* according to mpdu sequence number deal with reordering buffer */
2161         mpdu_seq_num = (sc & IEEE80211_SCTL_SEQ) >> 4;
2162         ret = ieee80211_sta_manage_reorder_buf(hw, tid_agg_rx, skb,
2163                                                 mpdu_seq_num, 0);
2164  end_reorder:
2165         return ret;
2166 }
2167
2168 /*
2169  * This is the receive path handler. It is called by a low level driver when an
2170  * 802.11 MPDU is received from the hardware.
2171  */
2172 void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb,
2173                     struct ieee80211_rx_status *status)
2174 {
2175         struct ieee80211_local *local = hw_to_local(hw);
2176         struct ieee80211_rate *rate = NULL;
2177         struct ieee80211_supported_band *sband;
2178
2179         if (status->band < 0 ||
2180             status->band >= IEEE80211_NUM_BANDS) {
2181                 WARN_ON(1);
2182                 return;
2183         }
2184
2185         sband = local->hw.wiphy->bands[status->band];
2186
2187         if (!sband ||
2188             status->rate_idx < 0 ||
2189             status->rate_idx >= sband->n_bitrates) {
2190                 WARN_ON(1);
2191                 return;
2192         }
2193
2194         rate = &sband->bitrates[status->rate_idx];
2195
2196         /*
2197          * key references and virtual interfaces are protected using RCU
2198          * and this requires that we are in a read-side RCU section during
2199          * receive processing
2200          */
2201         rcu_read_lock();
2202
2203         /*
2204          * Frames with failed FCS/PLCP checksum are not returned,
2205          * all other frames are returned without radiotap header
2206          * if it was previously present.
2207          * Also, frames with less than 16 bytes are dropped.
2208          */
2209         skb = ieee80211_rx_monitor(local, skb, status, rate);
2210         if (!skb) {
2211                 rcu_read_unlock();
2212                 return;
2213         }
2214
2215         if (!ieee80211_rx_reorder_ampdu(local, skb))
2216                 __ieee80211_rx_handle_packet(hw, skb, status, rate);
2217
2218         rcu_read_unlock();
2219 }
2220 EXPORT_SYMBOL(__ieee80211_rx);
2221
2222 /* This is a version of the rx handler that can be called from hard irq
2223  * context. Post the skb on the queue and schedule the tasklet */
2224 void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb,
2225                           struct ieee80211_rx_status *status)
2226 {
2227         struct ieee80211_local *local = hw_to_local(hw);
2228
2229         BUILD_BUG_ON(sizeof(struct ieee80211_rx_status) > sizeof(skb->cb));
2230
2231         skb->dev = local->mdev;
2232         /* copy status into skb->cb for use by tasklet */
2233         memcpy(skb->cb, status, sizeof(*status));
2234         skb->pkt_type = IEEE80211_RX_MSG;
2235         skb_queue_tail(&local->skb_queue, skb);
2236         tasklet_schedule(&local->tasklet);
2237 }
2238 EXPORT_SYMBOL(ieee80211_rx_irqsafe);