OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [tags/] [linux-2.6/] [linux-2.6.24_or32_unified_v2.3/] [net/] [mac80211/] [tx.c] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 xianfeng
/*
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
 * Transmit and frame generation functions.
13
 */
14
 
15
#include <linux/kernel.h>
16
#include <linux/slab.h>
17
#include <linux/skbuff.h>
18
#include <linux/etherdevice.h>
19
#include <linux/bitmap.h>
20
#include <linux/rcupdate.h>
21
#include <net/net_namespace.h>
22
#include <net/ieee80211_radiotap.h>
23
#include <net/cfg80211.h>
24
#include <net/mac80211.h>
25
#include <asm/unaligned.h>
26
 
27
#include "ieee80211_i.h"
28
#include "ieee80211_led.h"
29
#include "wep.h"
30
#include "wpa.h"
31
#include "wme.h"
32
#include "ieee80211_rate.h"
33
 
34
#define IEEE80211_TX_OK         0
35
#define IEEE80211_TX_AGAIN      1
36
#define IEEE80211_TX_FRAG_AGAIN 2
37
 
38
/* misc utils */
39
 
40
static inline void ieee80211_include_sequence(struct ieee80211_sub_if_data *sdata,
41
                                              struct ieee80211_hdr *hdr)
42
{
43
        /* Set the sequence number for this frame. */
44
        hdr->seq_ctrl = cpu_to_le16(sdata->sequence);
45
 
46
        /* Increase the sequence number. */
47
        sdata->sequence = (sdata->sequence + 0x10) & IEEE80211_SCTL_SEQ;
48
}
49
 
50
#ifdef CONFIG_MAC80211_LOWTX_FRAME_DUMP
51
static void ieee80211_dump_frame(const char *ifname, const char *title,
52
                                 const struct sk_buff *skb)
53
{
54
        const struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
55
        u16 fc;
56
        int hdrlen;
57
        DECLARE_MAC_BUF(mac);
58
 
59
        printk(KERN_DEBUG "%s: %s (len=%d)", ifname, title, skb->len);
60
        if (skb->len < 4) {
61
                printk("\n");
62
                return;
63
        }
64
 
65
        fc = le16_to_cpu(hdr->frame_control);
66
        hdrlen = ieee80211_get_hdrlen(fc);
67
        if (hdrlen > skb->len)
68
                hdrlen = skb->len;
69
        if (hdrlen >= 4)
70
                printk(" FC=0x%04x DUR=0x%04x",
71
                       fc, le16_to_cpu(hdr->duration_id));
72
        if (hdrlen >= 10)
73
                printk(" A1=%s", print_mac(mac, hdr->addr1));
74
        if (hdrlen >= 16)
75
                printk(" A2=%s", print_mac(mac, hdr->addr2));
76
        if (hdrlen >= 24)
77
                printk(" A3=%s", print_mac(mac, hdr->addr3));
78
        if (hdrlen >= 30)
79
                printk(" A4=%s", print_mac(mac, hdr->addr4));
80
        printk("\n");
81
}
82
#else /* CONFIG_MAC80211_LOWTX_FRAME_DUMP */
83
static inline void ieee80211_dump_frame(const char *ifname, const char *title,
84
                                        struct sk_buff *skb)
85
{
86
}
87
#endif /* CONFIG_MAC80211_LOWTX_FRAME_DUMP */
88
 
89
static u16 ieee80211_duration(struct ieee80211_txrx_data *tx, int group_addr,
90
                              int next_frag_len)
91
{
92
        int rate, mrate, erp, dur, i;
93
        struct ieee80211_rate *txrate = tx->u.tx.rate;
94
        struct ieee80211_local *local = tx->local;
95
        struct ieee80211_hw_mode *mode = tx->u.tx.mode;
96
 
97
        erp = txrate->flags & IEEE80211_RATE_ERP;
98
 
99
        /*
100
         * data and mgmt (except PS Poll):
101
         * - during CFP: 32768
102
         * - during contention period:
103
         *   if addr1 is group address: 0
104
         *   if more fragments = 0 and addr1 is individual address: time to
105
         *      transmit one ACK plus SIFS
106
         *   if more fragments = 1 and addr1 is individual address: time to
107
         *      transmit next fragment plus 2 x ACK plus 3 x SIFS
108
         *
109
         * IEEE 802.11, 9.6:
110
         * - control response frame (CTS or ACK) shall be transmitted using the
111
         *   same rate as the immediately previous frame in the frame exchange
112
         *   sequence, if this rate belongs to the PHY mandatory rates, or else
113
         *   at the highest possible rate belonging to the PHY rates in the
114
         *   BSSBasicRateSet
115
         */
116
 
117
        if ((tx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_CTL) {
118
                /* TODO: These control frames are not currently sent by
119
                 * 80211.o, but should they be implemented, this function
120
                 * needs to be updated to support duration field calculation.
121
                 *
122
                 * RTS: time needed to transmit pending data/mgmt frame plus
123
                 *    one CTS frame plus one ACK frame plus 3 x SIFS
124
                 * CTS: duration of immediately previous RTS minus time
125
                 *    required to transmit CTS and its SIFS
126
                 * ACK: 0 if immediately previous directed data/mgmt had
127
                 *    more=0, with more=1 duration in ACK frame is duration
128
                 *    from previous frame minus time needed to transmit ACK
129
                 *    and its SIFS
130
                 * PS Poll: BIT(15) | BIT(14) | aid
131
                 */
132
                return 0;
133
        }
134
 
135
        /* data/mgmt */
136
        if (0 /* FIX: data/mgmt during CFP */)
137
                return 32768;
138
 
139
        if (group_addr) /* Group address as the destination - no ACK */
140
                return 0;
141
 
142
        /* Individual destination address:
143
         * IEEE 802.11, Ch. 9.6 (after IEEE 802.11g changes)
144
         * CTS and ACK frames shall be transmitted using the highest rate in
145
         * basic rate set that is less than or equal to the rate of the
146
         * immediately previous frame and that is using the same modulation
147
         * (CCK or OFDM). If no basic rate set matches with these requirements,
148
         * the highest mandatory rate of the PHY that is less than or equal to
149
         * the rate of the previous frame is used.
150
         * Mandatory rates for IEEE 802.11g PHY: 1, 2, 5.5, 11, 6, 12, 24 Mbps
151
         */
152
        rate = -1;
153
        mrate = 10; /* use 1 Mbps if everything fails */
154
        for (i = 0; i < mode->num_rates; i++) {
155
                struct ieee80211_rate *r = &mode->rates[i];
156
                if (r->rate > txrate->rate)
157
                        break;
158
 
159
                if (IEEE80211_RATE_MODULATION(txrate->flags) !=
160
                    IEEE80211_RATE_MODULATION(r->flags))
161
                        continue;
162
 
163
                if (r->flags & IEEE80211_RATE_BASIC)
164
                        rate = r->rate;
165
                else if (r->flags & IEEE80211_RATE_MANDATORY)
166
                        mrate = r->rate;
167
        }
168
        if (rate == -1) {
169
                /* No matching basic rate found; use highest suitable mandatory
170
                 * PHY rate */
171
                rate = mrate;
172
        }
173
 
174
        /* Time needed to transmit ACK
175
         * (10 bytes + 4-byte FCS = 112 bits) plus SIFS; rounded up
176
         * to closest integer */
177
 
178
        dur = ieee80211_frame_duration(local, 10, rate, erp,
179
                       tx->sdata->flags & IEEE80211_SDATA_SHORT_PREAMBLE);
180
 
181
        if (next_frag_len) {
182
                /* Frame is fragmented: duration increases with time needed to
183
                 * transmit next fragment plus ACK and 2 x SIFS. */
184
                dur *= 2; /* ACK + SIFS */
185
                /* next fragment */
186
                dur += ieee80211_frame_duration(local, next_frag_len,
187
                                txrate->rate, erp,
188
                                tx->sdata->flags &
189
                                        IEEE80211_SDATA_SHORT_PREAMBLE);
190
        }
191
 
192
        return dur;
193
}
194
 
195
static inline int __ieee80211_queue_stopped(const struct ieee80211_local *local,
196
                                            int queue)
197
{
198
        return test_bit(IEEE80211_LINK_STATE_XOFF, &local->state[queue]);
199
}
200
 
201
static inline int __ieee80211_queue_pending(const struct ieee80211_local *local,
202
                                            int queue)
203
{
204
        return test_bit(IEEE80211_LINK_STATE_PENDING, &local->state[queue]);
205
}
206
 
207
static int inline is_ieee80211_device(struct net_device *dev,
208
                                      struct net_device *master)
209
{
210
        return (wdev_priv(dev->ieee80211_ptr) ==
211
                wdev_priv(master->ieee80211_ptr));
212
}
213
 
214
/* tx handlers */
215
 
216
static ieee80211_txrx_result
217
ieee80211_tx_h_check_assoc(struct ieee80211_txrx_data *tx)
218
{
219
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
220
        struct sk_buff *skb = tx->skb;
221
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
222
#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */
223
        u32 sta_flags;
224
 
225
        if (unlikely(tx->flags & IEEE80211_TXRXD_TX_INJECTED))
226
                return TXRX_CONTINUE;
227
 
228
        if (unlikely(tx->local->sta_scanning != 0) &&
229
            ((tx->fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_MGMT ||
230
             (tx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_PROBE_REQ))
231
                return TXRX_DROP;
232
 
233
        if (tx->flags & IEEE80211_TXRXD_TXPS_BUFFERED)
234
                return TXRX_CONTINUE;
235
 
236
        sta_flags = tx->sta ? tx->sta->flags : 0;
237
 
238
        if (likely(tx->flags & IEEE80211_TXRXD_TXUNICAST)) {
239
                if (unlikely(!(sta_flags & WLAN_STA_ASSOC) &&
240
                             tx->sdata->type != IEEE80211_IF_TYPE_IBSS &&
241
                             (tx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) {
242
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
243
                        DECLARE_MAC_BUF(mac);
244
                        printk(KERN_DEBUG "%s: dropped data frame to not "
245
                               "associated station %s\n",
246
                               tx->dev->name, print_mac(mac, hdr->addr1));
247
#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */
248
                        I802_DEBUG_INC(tx->local->tx_handlers_drop_not_assoc);
249
                        return TXRX_DROP;
250
                }
251
        } else {
252
                if (unlikely((tx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA &&
253
                             tx->local->num_sta == 0 &&
254
                             tx->sdata->type != IEEE80211_IF_TYPE_IBSS)) {
255
                        /*
256
                         * No associated STAs - no need to send multicast
257
                         * frames.
258
                         */
259
                        return TXRX_DROP;
260
                }
261
                return TXRX_CONTINUE;
262
        }
263
 
264
        if (unlikely(/* !injected && */ tx->sdata->ieee802_1x &&
265
                     !(sta_flags & WLAN_STA_AUTHORIZED))) {
266
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
267
                DECLARE_MAC_BUF(mac);
268
                printk(KERN_DEBUG "%s: dropped frame to %s"
269
                       " (unauthorized port)\n", tx->dev->name,
270
                       print_mac(mac, hdr->addr1));
271
#endif
272
                I802_DEBUG_INC(tx->local->tx_handlers_drop_unauth_port);
273
                return TXRX_DROP;
274
        }
275
 
276
        return TXRX_CONTINUE;
277
}
278
 
279
static ieee80211_txrx_result
280
ieee80211_tx_h_sequence(struct ieee80211_txrx_data *tx)
281
{
282
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data;
283
 
284
        if (ieee80211_get_hdrlen(le16_to_cpu(hdr->frame_control)) >= 24)
285
                ieee80211_include_sequence(tx->sdata, hdr);
286
 
287
        return TXRX_CONTINUE;
288
}
289
 
290
/* This function is called whenever the AP is about to exceed the maximum limit
291
 * of buffered frames for power saving STAs. This situation should not really
292
 * happen often during normal operation, so dropping the oldest buffered packet
293
 * from each queue should be OK to make some room for new frames. */
294
static void purge_old_ps_buffers(struct ieee80211_local *local)
295
{
296
        int total = 0, purged = 0;
297
        struct sk_buff *skb;
298
        struct ieee80211_sub_if_data *sdata;
299
        struct sta_info *sta;
300
 
301
        /*
302
         * virtual interfaces are protected by RCU
303
         */
304
        rcu_read_lock();
305
 
306
        list_for_each_entry_rcu(sdata, &local->interfaces, list) {
307
                struct ieee80211_if_ap *ap;
308
                if (sdata->dev == local->mdev ||
309
                    sdata->type != IEEE80211_IF_TYPE_AP)
310
                        continue;
311
                ap = &sdata->u.ap;
312
                skb = skb_dequeue(&ap->ps_bc_buf);
313
                if (skb) {
314
                        purged++;
315
                        dev_kfree_skb(skb);
316
                }
317
                total += skb_queue_len(&ap->ps_bc_buf);
318
        }
319
        rcu_read_unlock();
320
 
321
        read_lock_bh(&local->sta_lock);
322
        list_for_each_entry(sta, &local->sta_list, list) {
323
                skb = skb_dequeue(&sta->ps_tx_buf);
324
                if (skb) {
325
                        purged++;
326
                        dev_kfree_skb(skb);
327
                }
328
                total += skb_queue_len(&sta->ps_tx_buf);
329
        }
330
        read_unlock_bh(&local->sta_lock);
331
 
332
        local->total_ps_buffered = total;
333
        printk(KERN_DEBUG "%s: PS buffers full - purged %d frames\n",
334
               wiphy_name(local->hw.wiphy), purged);
335
}
336
 
337
static inline ieee80211_txrx_result
338
ieee80211_tx_h_multicast_ps_buf(struct ieee80211_txrx_data *tx)
339
{
340
        /* broadcast/multicast frame */
341
        /* If any of the associated stations is in power save mode,
342
         * the frame is buffered to be sent after DTIM beacon frame */
343
        if ((tx->local->hw.flags & IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING) &&
344
            tx->sdata->type != IEEE80211_IF_TYPE_WDS &&
345
            tx->sdata->bss && atomic_read(&tx->sdata->bss->num_sta_ps) &&
346
            !(tx->fc & IEEE80211_FCTL_ORDER)) {
347
                if (tx->local->total_ps_buffered >= TOTAL_MAX_TX_BUFFER)
348
                        purge_old_ps_buffers(tx->local);
349
                if (skb_queue_len(&tx->sdata->bss->ps_bc_buf) >=
350
                    AP_MAX_BC_BUFFER) {
351
                        if (net_ratelimit()) {
352
                                printk(KERN_DEBUG "%s: BC TX buffer full - "
353
                                       "dropping the oldest frame\n",
354
                                       tx->dev->name);
355
                        }
356
                        dev_kfree_skb(skb_dequeue(&tx->sdata->bss->ps_bc_buf));
357
                } else
358
                        tx->local->total_ps_buffered++;
359
                skb_queue_tail(&tx->sdata->bss->ps_bc_buf, tx->skb);
360
                return TXRX_QUEUED;
361
        }
362
 
363
        return TXRX_CONTINUE;
364
}
365
 
366
static inline ieee80211_txrx_result
367
ieee80211_tx_h_unicast_ps_buf(struct ieee80211_txrx_data *tx)
368
{
369
        struct sta_info *sta = tx->sta;
370
        DECLARE_MAC_BUF(mac);
371
 
372
        if (unlikely(!sta ||
373
                     ((tx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT &&
374
                      (tx->fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_PROBE_RESP)))
375
                return TXRX_CONTINUE;
376
 
377
        if (unlikely((sta->flags & WLAN_STA_PS) && !sta->pspoll)) {
378
                struct ieee80211_tx_packet_data *pkt_data;
379
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
380
                printk(KERN_DEBUG "STA %s aid %d: PS buffer (entries "
381
                       "before %d)\n",
382
                       print_mac(mac, sta->addr), sta->aid,
383
                       skb_queue_len(&sta->ps_tx_buf));
384
#endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
385
                sta->flags |= WLAN_STA_TIM;
386
                if (tx->local->total_ps_buffered >= TOTAL_MAX_TX_BUFFER)
387
                        purge_old_ps_buffers(tx->local);
388
                if (skb_queue_len(&sta->ps_tx_buf) >= STA_MAX_TX_BUFFER) {
389
                        struct sk_buff *old = skb_dequeue(&sta->ps_tx_buf);
390
                        if (net_ratelimit()) {
391
                                printk(KERN_DEBUG "%s: STA %s TX "
392
                                       "buffer full - dropping oldest frame\n",
393
                                       tx->dev->name, print_mac(mac, sta->addr));
394
                        }
395
                        dev_kfree_skb(old);
396
                } else
397
                        tx->local->total_ps_buffered++;
398
                /* Queue frame to be sent after STA sends an PS Poll frame */
399
                if (skb_queue_empty(&sta->ps_tx_buf)) {
400
                        if (tx->local->ops->set_tim)
401
                                tx->local->ops->set_tim(local_to_hw(tx->local),
402
                                                       sta->aid, 1);
403
                        if (tx->sdata->bss)
404
                                bss_tim_set(tx->local, tx->sdata->bss, sta->aid);
405
                }
406
                pkt_data = (struct ieee80211_tx_packet_data *)tx->skb->cb;
407
                pkt_data->jiffies = jiffies;
408
                skb_queue_tail(&sta->ps_tx_buf, tx->skb);
409
                return TXRX_QUEUED;
410
        }
411
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
412
        else if (unlikely(sta->flags & WLAN_STA_PS)) {
413
                printk(KERN_DEBUG "%s: STA %s in PS mode, but pspoll "
414
                       "set -> send frame\n", tx->dev->name,
415
                       print_mac(mac, sta->addr));
416
        }
417
#endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
418
        sta->pspoll = 0;
419
 
420
        return TXRX_CONTINUE;
421
}
422
 
423
 
424
static ieee80211_txrx_result
425
ieee80211_tx_h_ps_buf(struct ieee80211_txrx_data *tx)
426
{
427
        if (unlikely(tx->flags & IEEE80211_TXRXD_TXPS_BUFFERED))
428
                return TXRX_CONTINUE;
429
 
430
        if (tx->flags & IEEE80211_TXRXD_TXUNICAST)
431
                return ieee80211_tx_h_unicast_ps_buf(tx);
432
        else
433
                return ieee80211_tx_h_multicast_ps_buf(tx);
434
}
435
 
436
 
437
 
438
 
439
static ieee80211_txrx_result
440
ieee80211_tx_h_select_key(struct ieee80211_txrx_data *tx)
441
{
442
        struct ieee80211_key *key;
443
 
444
        if (unlikely(tx->u.tx.control->flags & IEEE80211_TXCTL_DO_NOT_ENCRYPT))
445
                tx->key = NULL;
446
        else if (tx->sta && (key = rcu_dereference(tx->sta->key)))
447
                tx->key = key;
448
        else if ((key = rcu_dereference(tx->sdata->default_key)))
449
                tx->key = key;
450
        else if (tx->sdata->drop_unencrypted &&
451
                 !(tx->sdata->eapol && ieee80211_is_eapol(tx->skb))) {
452
                I802_DEBUG_INC(tx->local->tx_handlers_drop_unencrypted);
453
                return TXRX_DROP;
454
        } else {
455
                tx->key = NULL;
456
                tx->u.tx.control->flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT;
457
        }
458
 
459
        if (tx->key) {
460
                tx->key->tx_rx_count++;
461
                /* TODO: add threshold stuff again */
462
        }
463
 
464
        return TXRX_CONTINUE;
465
}
466
 
467
static ieee80211_txrx_result
468
ieee80211_tx_h_fragment(struct ieee80211_txrx_data *tx)
469
{
470
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) tx->skb->data;
471
        size_t hdrlen, per_fragm, num_fragm, payload_len, left;
472
        struct sk_buff **frags, *first, *frag;
473
        int i;
474
        u16 seq;
475
        u8 *pos;
476
        int frag_threshold = tx->local->fragmentation_threshold;
477
 
478
        if (!(tx->flags & IEEE80211_TXRXD_FRAGMENTED))
479
                return TXRX_CONTINUE;
480
 
481
        first = tx->skb;
482
 
483
        hdrlen = ieee80211_get_hdrlen(tx->fc);
484
        payload_len = first->len - hdrlen;
485
        per_fragm = frag_threshold - hdrlen - FCS_LEN;
486
        num_fragm = DIV_ROUND_UP(payload_len, per_fragm);
487
 
488
        frags = kzalloc(num_fragm * sizeof(struct sk_buff *), GFP_ATOMIC);
489
        if (!frags)
490
                goto fail;
491
 
492
        hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_MOREFRAGS);
493
        seq = le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ;
494
        pos = first->data + hdrlen + per_fragm;
495
        left = payload_len - per_fragm;
496
        for (i = 0; i < num_fragm - 1; i++) {
497
                struct ieee80211_hdr *fhdr;
498
                size_t copylen;
499
 
500
                if (left <= 0)
501
                        goto fail;
502
 
503
                /* reserve enough extra head and tail room for possible
504
                 * encryption */
505
                frag = frags[i] =
506
                        dev_alloc_skb(tx->local->tx_headroom +
507
                                      frag_threshold +
508
                                      IEEE80211_ENCRYPT_HEADROOM +
509
                                      IEEE80211_ENCRYPT_TAILROOM);
510
                if (!frag)
511
                        goto fail;
512
                /* Make sure that all fragments use the same priority so
513
                 * that they end up using the same TX queue */
514
                frag->priority = first->priority;
515
                skb_reserve(frag, tx->local->tx_headroom +
516
                                  IEEE80211_ENCRYPT_HEADROOM);
517
                fhdr = (struct ieee80211_hdr *) skb_put(frag, hdrlen);
518
                memcpy(fhdr, first->data, hdrlen);
519
                if (i == num_fragm - 2)
520
                        fhdr->frame_control &= cpu_to_le16(~IEEE80211_FCTL_MOREFRAGS);
521
                fhdr->seq_ctrl = cpu_to_le16(seq | ((i + 1) & IEEE80211_SCTL_FRAG));
522
                copylen = left > per_fragm ? per_fragm : left;
523
                memcpy(skb_put(frag, copylen), pos, copylen);
524
 
525
                pos += copylen;
526
                left -= copylen;
527
        }
528
        skb_trim(first, hdrlen + per_fragm);
529
 
530
        tx->u.tx.num_extra_frag = num_fragm - 1;
531
        tx->u.tx.extra_frag = frags;
532
 
533
        return TXRX_CONTINUE;
534
 
535
 fail:
536
        printk(KERN_DEBUG "%s: failed to fragment frame\n", tx->dev->name);
537
        if (frags) {
538
                for (i = 0; i < num_fragm - 1; i++)
539
                        if (frags[i])
540
                                dev_kfree_skb(frags[i]);
541
                kfree(frags);
542
        }
543
        I802_DEBUG_INC(tx->local->tx_handlers_drop_fragment);
544
        return TXRX_DROP;
545
}
546
 
547
static ieee80211_txrx_result
548
ieee80211_tx_h_encrypt(struct ieee80211_txrx_data *tx)
549
{
550
        if (!tx->key)
551
                return TXRX_CONTINUE;
552
 
553
        switch (tx->key->conf.alg) {
554
        case ALG_WEP:
555
                return ieee80211_crypto_wep_encrypt(tx);
556
        case ALG_TKIP:
557
                return ieee80211_crypto_tkip_encrypt(tx);
558
        case ALG_CCMP:
559
                return ieee80211_crypto_ccmp_encrypt(tx);
560
        }
561
 
562
        /* not reached */
563
        WARN_ON(1);
564
        return TXRX_DROP;
565
}
566
 
567
static ieee80211_txrx_result
568
ieee80211_tx_h_rate_ctrl(struct ieee80211_txrx_data *tx)
569
{
570
        struct rate_control_extra extra;
571
 
572
        if (likely(!tx->u.tx.rate)) {
573
                memset(&extra, 0, sizeof(extra));
574
                extra.mode = tx->u.tx.mode;
575
                extra.ethertype = tx->ethertype;
576
 
577
                tx->u.tx.rate = rate_control_get_rate(tx->local, tx->dev,
578
                                                      tx->skb, &extra);
579
                if (unlikely(extra.probe != NULL)) {
580
                        tx->u.tx.control->flags |=
581
                                IEEE80211_TXCTL_RATE_CTRL_PROBE;
582
                        tx->flags |= IEEE80211_TXRXD_TXPROBE_LAST_FRAG;
583
                        tx->u.tx.control->alt_retry_rate = tx->u.tx.rate->val;
584
                        tx->u.tx.rate = extra.probe;
585
                } else
586
                        tx->u.tx.control->alt_retry_rate = -1;
587
 
588
                if (!tx->u.tx.rate)
589
                        return TXRX_DROP;
590
        } else
591
                tx->u.tx.control->alt_retry_rate = -1;
592
 
593
        if (tx->u.tx.mode->mode == MODE_IEEE80211G &&
594
            (tx->sdata->flags & IEEE80211_SDATA_USE_PROTECTION) &&
595
            (tx->flags & IEEE80211_TXRXD_FRAGMENTED) && extra.nonerp) {
596
                tx->u.tx.last_frag_rate = tx->u.tx.rate;
597
                if (extra.probe)
598
                        tx->flags &= ~IEEE80211_TXRXD_TXPROBE_LAST_FRAG;
599
                else
600
                        tx->flags |= IEEE80211_TXRXD_TXPROBE_LAST_FRAG;
601
                tx->u.tx.rate = extra.nonerp;
602
                tx->u.tx.control->rate = extra.nonerp;
603
                tx->u.tx.control->flags &= ~IEEE80211_TXCTL_RATE_CTRL_PROBE;
604
        } else {
605
                tx->u.tx.last_frag_rate = tx->u.tx.rate;
606
                tx->u.tx.control->rate = tx->u.tx.rate;
607
        }
608
        tx->u.tx.control->tx_rate = tx->u.tx.rate->val;
609
 
610
        return TXRX_CONTINUE;
611
}
612
 
613
static ieee80211_txrx_result
614
ieee80211_tx_h_misc(struct ieee80211_txrx_data *tx)
615
{
616
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) tx->skb->data;
617
        u16 fc = le16_to_cpu(hdr->frame_control);
618
        u16 dur;
619
        struct ieee80211_tx_control *control = tx->u.tx.control;
620
        struct ieee80211_hw_mode *mode = tx->u.tx.mode;
621
 
622
        if (!control->retry_limit) {
623
                if (!is_multicast_ether_addr(hdr->addr1)) {
624
                        if (tx->skb->len + FCS_LEN > tx->local->rts_threshold
625
                            && tx->local->rts_threshold <
626
                                        IEEE80211_MAX_RTS_THRESHOLD) {
627
                                control->flags |=
628
                                        IEEE80211_TXCTL_USE_RTS_CTS;
629
                                control->flags |=
630
                                        IEEE80211_TXCTL_LONG_RETRY_LIMIT;
631
                                control->retry_limit =
632
                                        tx->local->long_retry_limit;
633
                        } else {
634
                                control->retry_limit =
635
                                        tx->local->short_retry_limit;
636
                        }
637
                } else {
638
                        control->retry_limit = 1;
639
                }
640
        }
641
 
642
        if (tx->flags & IEEE80211_TXRXD_FRAGMENTED) {
643
                /* Do not use multiple retry rates when sending fragmented
644
                 * frames.
645
                 * TODO: The last fragment could still use multiple retry
646
                 * rates. */
647
                control->alt_retry_rate = -1;
648
        }
649
 
650
        /* Use CTS protection for unicast frames sent using extended rates if
651
         * there are associated non-ERP stations and RTS/CTS is not configured
652
         * for the frame. */
653
        if (mode->mode == MODE_IEEE80211G &&
654
            (tx->u.tx.rate->flags & IEEE80211_RATE_ERP) &&
655
            (tx->flags & IEEE80211_TXRXD_TXUNICAST) &&
656
            (tx->sdata->flags & IEEE80211_SDATA_USE_PROTECTION) &&
657
            !(control->flags & IEEE80211_TXCTL_USE_RTS_CTS))
658
                control->flags |= IEEE80211_TXCTL_USE_CTS_PROTECT;
659
 
660
        /* Transmit data frames using short preambles if the driver supports
661
         * short preambles at the selected rate and short preambles are
662
         * available on the network at the current point in time. */
663
        if (((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) &&
664
            (tx->u.tx.rate->flags & IEEE80211_RATE_PREAMBLE2) &&
665
            (tx->sdata->flags & IEEE80211_SDATA_SHORT_PREAMBLE) &&
666
            (!tx->sta || (tx->sta->flags & WLAN_STA_SHORT_PREAMBLE))) {
667
                tx->u.tx.control->tx_rate = tx->u.tx.rate->val2;
668
        }
669
 
670
        /* Setup duration field for the first fragment of the frame. Duration
671
         * for remaining fragments will be updated when they are being sent
672
         * to low-level driver in ieee80211_tx(). */
673
        dur = ieee80211_duration(tx, is_multicast_ether_addr(hdr->addr1),
674
                                 (tx->flags & IEEE80211_TXRXD_FRAGMENTED) ?
675
                                 tx->u.tx.extra_frag[0]->len : 0);
676
        hdr->duration_id = cpu_to_le16(dur);
677
 
678
        if ((control->flags & IEEE80211_TXCTL_USE_RTS_CTS) ||
679
            (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT)) {
680
                struct ieee80211_rate *rate;
681
 
682
                /* Do not use multiple retry rates when using RTS/CTS */
683
                control->alt_retry_rate = -1;
684
 
685
                /* Use min(data rate, max base rate) as CTS/RTS rate */
686
                rate = tx->u.tx.rate;
687
                while (rate > mode->rates &&
688
                       !(rate->flags & IEEE80211_RATE_BASIC))
689
                        rate--;
690
 
691
                control->rts_cts_rate = rate->val;
692
                control->rts_rate = rate;
693
        }
694
 
695
        if (tx->sta) {
696
                tx->sta->tx_packets++;
697
                tx->sta->tx_fragments++;
698
                tx->sta->tx_bytes += tx->skb->len;
699
                if (tx->u.tx.extra_frag) {
700
                        int i;
701
                        tx->sta->tx_fragments += tx->u.tx.num_extra_frag;
702
                        for (i = 0; i < tx->u.tx.num_extra_frag; i++) {
703
                                tx->sta->tx_bytes +=
704
                                        tx->u.tx.extra_frag[i]->len;
705
                        }
706
                }
707
        }
708
 
709
        /*
710
         * Tell hardware to not encrypt when we had sw crypto.
711
         * Because we use the same flag to internally indicate that
712
         * no (software) encryption should be done, we have to set it
713
         * after all crypto handlers.
714
         */
715
        if (tx->key && !(tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE))
716
                tx->u.tx.control->flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT;
717
 
718
        return TXRX_CONTINUE;
719
}
720
 
721
static ieee80211_txrx_result
722
ieee80211_tx_h_load_stats(struct ieee80211_txrx_data *tx)
723
{
724
        struct ieee80211_local *local = tx->local;
725
        struct ieee80211_hw_mode *mode = tx->u.tx.mode;
726
        struct sk_buff *skb = tx->skb;
727
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
728
        u32 load = 0, hdrtime;
729
 
730
        /* TODO: this could be part of tx_status handling, so that the number
731
         * of retries would be known; TX rate should in that case be stored
732
         * somewhere with the packet */
733
 
734
        /* Estimate total channel use caused by this frame */
735
 
736
        /* 1 bit at 1 Mbit/s takes 1 usec; in channel_use values,
737
         * 1 usec = 1/8 * (1080 / 10) = 13.5 */
738
 
739
        if (mode->mode == MODE_IEEE80211A ||
740
            (mode->mode == MODE_IEEE80211G &&
741
             tx->u.tx.rate->flags & IEEE80211_RATE_ERP))
742
                hdrtime = CHAN_UTIL_HDR_SHORT;
743
        else
744
                hdrtime = CHAN_UTIL_HDR_LONG;
745
 
746
        load = hdrtime;
747
        if (!is_multicast_ether_addr(hdr->addr1))
748
                load += hdrtime;
749
 
750
        if (tx->u.tx.control->flags & IEEE80211_TXCTL_USE_RTS_CTS)
751
                load += 2 * hdrtime;
752
        else if (tx->u.tx.control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT)
753
                load += hdrtime;
754
 
755
        load += skb->len * tx->u.tx.rate->rate_inv;
756
 
757
        if (tx->u.tx.extra_frag) {
758
                int i;
759
                for (i = 0; i < tx->u.tx.num_extra_frag; i++) {
760
                        load += 2 * hdrtime;
761
                        load += tx->u.tx.extra_frag[i]->len *
762
                                tx->u.tx.rate->rate;
763
                }
764
        }
765
 
766
        /* Divide channel_use by 8 to avoid wrapping around the counter */
767
        load >>= CHAN_UTIL_SHIFT;
768
        local->channel_use_raw += load;
769
        if (tx->sta)
770
                tx->sta->channel_use_raw += load;
771
        tx->sdata->channel_use_raw += load;
772
 
773
        return TXRX_CONTINUE;
774
}
775
 
776
/* TODO: implement register/unregister functions for adding TX/RX handlers
777
 * into ordered list */
778
 
779
ieee80211_tx_handler ieee80211_tx_handlers[] =
780
{
781
        ieee80211_tx_h_check_assoc,
782
        ieee80211_tx_h_sequence,
783
        ieee80211_tx_h_ps_buf,
784
        ieee80211_tx_h_select_key,
785
        ieee80211_tx_h_michael_mic_add,
786
        ieee80211_tx_h_fragment,
787
        ieee80211_tx_h_encrypt,
788
        ieee80211_tx_h_rate_ctrl,
789
        ieee80211_tx_h_misc,
790
        ieee80211_tx_h_load_stats,
791
        NULL
792
};
793
 
794
/* actual transmit path */
795
 
796
/*
797
 * deal with packet injection down monitor interface
798
 * with Radiotap Header -- only called for monitor mode interface
799
 */
800
static ieee80211_txrx_result
801
__ieee80211_parse_tx_radiotap(struct ieee80211_txrx_data *tx,
802
                              struct sk_buff *skb)
803
{
804
        /*
805
         * this is the moment to interpret and discard the radiotap header that
806
         * must be at the start of the packet injected in Monitor mode
807
         *
808
         * Need to take some care with endian-ness since radiotap
809
         * args are little-endian
810
         */
811
 
812
        struct ieee80211_radiotap_iterator iterator;
813
        struct ieee80211_radiotap_header *rthdr =
814
                (struct ieee80211_radiotap_header *) skb->data;
815
        struct ieee80211_hw_mode *mode = tx->local->hw.conf.mode;
816
        int ret = ieee80211_radiotap_iterator_init(&iterator, rthdr, skb->len);
817
        struct ieee80211_tx_control *control = tx->u.tx.control;
818
 
819
        control->flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT;
820
        tx->flags |= IEEE80211_TXRXD_TX_INJECTED;
821
        tx->flags &= ~IEEE80211_TXRXD_FRAGMENTED;
822
 
823
        /*
824
         * for every radiotap entry that is present
825
         * (ieee80211_radiotap_iterator_next returns -ENOENT when no more
826
         * entries present, or -EINVAL on error)
827
         */
828
 
829
        while (!ret) {
830
                int i, target_rate;
831
 
832
                ret = ieee80211_radiotap_iterator_next(&iterator);
833
 
834
                if (ret)
835
                        continue;
836
 
837
                /* see if this argument is something we can use */
838
                switch (iterator.this_arg_index) {
839
                /*
840
                 * You must take care when dereferencing iterator.this_arg
841
                 * for multibyte types... the pointer is not aligned.  Use
842
                 * get_unaligned((type *)iterator.this_arg) to dereference
843
                 * iterator.this_arg for type "type" safely on all arches.
844
                */
845
                case IEEE80211_RADIOTAP_RATE:
846
                        /*
847
                         * radiotap rate u8 is in 500kbps units eg, 0x02=1Mbps
848
                         * ieee80211 rate int is in 100kbps units eg, 0x0a=1Mbps
849
                         */
850
                        target_rate = (*iterator.this_arg) * 5;
851
                        for (i = 0; i < mode->num_rates; i++) {
852
                                struct ieee80211_rate *r = &mode->rates[i];
853
 
854
                                if (r->rate == target_rate) {
855
                                        tx->u.tx.rate = r;
856
                                        break;
857
                                }
858
                        }
859
                        break;
860
 
861
                case IEEE80211_RADIOTAP_ANTENNA:
862
                        /*
863
                         * radiotap uses 0 for 1st ant, mac80211 is 1 for
864
                         * 1st ant
865
                         */
866
                        control->antenna_sel_tx = (*iterator.this_arg) + 1;
867
                        break;
868
 
869
                case IEEE80211_RADIOTAP_DBM_TX_POWER:
870
                        control->power_level = *iterator.this_arg;
871
                        break;
872
 
873
                case IEEE80211_RADIOTAP_FLAGS:
874
                        if (*iterator.this_arg & IEEE80211_RADIOTAP_F_FCS) {
875
                                /*
876
                                 * this indicates that the skb we have been
877
                                 * handed has the 32-bit FCS CRC at the end...
878
                                 * we should react to that by snipping it off
879
                                 * because it will be recomputed and added
880
                                 * on transmission
881
                                 */
882
                                if (skb->len < (iterator.max_length + FCS_LEN))
883
                                        return TXRX_DROP;
884
 
885
                                skb_trim(skb, skb->len - FCS_LEN);
886
                        }
887
                        if (*iterator.this_arg & IEEE80211_RADIOTAP_F_WEP)
888
                                control->flags &=
889
                                        ~IEEE80211_TXCTL_DO_NOT_ENCRYPT;
890
                        if (*iterator.this_arg & IEEE80211_RADIOTAP_F_FRAG)
891
                                tx->flags |= IEEE80211_TXRXD_FRAGMENTED;
892
                        break;
893
 
894
                /*
895
                 * Please update the file
896
                 * Documentation/networking/mac80211-injection.txt
897
                 * when parsing new fields here.
898
                 */
899
 
900
                default:
901
                        break;
902
                }
903
        }
904
 
905
        if (ret != -ENOENT) /* ie, if we didn't simply run out of fields */
906
                return TXRX_DROP;
907
 
908
        /*
909
         * remove the radiotap header
910
         * iterator->max_length was sanity-checked against
911
         * skb->len by iterator init
912
         */
913
        skb_pull(skb, iterator.max_length);
914
 
915
        return TXRX_CONTINUE;
916
}
917
 
918
/*
919
 * initialises @tx
920
 */
921
static ieee80211_txrx_result
922
__ieee80211_tx_prepare(struct ieee80211_txrx_data *tx,
923
                       struct sk_buff *skb,
924
                       struct net_device *dev,
925
                       struct ieee80211_tx_control *control)
926
{
927
        struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
928
        struct ieee80211_hdr *hdr;
929
        struct ieee80211_sub_if_data *sdata;
930
        ieee80211_txrx_result res = TXRX_CONTINUE;
931
 
932
        int hdrlen;
933
 
934
        memset(tx, 0, sizeof(*tx));
935
        tx->skb = skb;
936
        tx->dev = dev; /* use original interface */
937
        tx->local = local;
938
        tx->sdata = IEEE80211_DEV_TO_SUB_IF(dev);
939
        tx->u.tx.control = control;
940
        /*
941
         * Set this flag (used below to indicate "automatic fragmentation"),
942
         * it will be cleared/left by radiotap as desired.
943
         */
944
        tx->flags |= IEEE80211_TXRXD_FRAGMENTED;
945
 
946
        /* process and remove the injection radiotap header */
947
        sdata = IEEE80211_DEV_TO_SUB_IF(dev);
948
        if (unlikely(sdata->type == IEEE80211_IF_TYPE_MNTR)) {
949
                if (__ieee80211_parse_tx_radiotap(tx, skb) == TXRX_DROP)
950
                        return TXRX_DROP;
951
 
952
                /*
953
                 * __ieee80211_parse_tx_radiotap has now removed
954
                 * the radiotap header that was present and pre-filled
955
                 * 'tx' with tx control information.
956
                 */
957
        }
958
 
959
        hdr = (struct ieee80211_hdr *) skb->data;
960
 
961
        tx->sta = sta_info_get(local, hdr->addr1);
962
        tx->fc = le16_to_cpu(hdr->frame_control);
963
 
964
        if (is_multicast_ether_addr(hdr->addr1)) {
965
                tx->flags &= ~IEEE80211_TXRXD_TXUNICAST;
966
                control->flags |= IEEE80211_TXCTL_NO_ACK;
967
        } else {
968
                tx->flags |= IEEE80211_TXRXD_TXUNICAST;
969
                control->flags &= ~IEEE80211_TXCTL_NO_ACK;
970
        }
971
 
972
        if (tx->flags & IEEE80211_TXRXD_FRAGMENTED) {
973
                if ((tx->flags & IEEE80211_TXRXD_TXUNICAST) &&
974
                    skb->len + FCS_LEN > local->fragmentation_threshold &&
975
                    !local->ops->set_frag_threshold)
976
                        tx->flags |= IEEE80211_TXRXD_FRAGMENTED;
977
                else
978
                        tx->flags &= ~IEEE80211_TXRXD_FRAGMENTED;
979
        }
980
 
981
        if (!tx->sta)
982
                control->flags |= IEEE80211_TXCTL_CLEAR_DST_MASK;
983
        else if (tx->sta->clear_dst_mask) {
984
                control->flags |= IEEE80211_TXCTL_CLEAR_DST_MASK;
985
                tx->sta->clear_dst_mask = 0;
986
        }
987
 
988
        hdrlen = ieee80211_get_hdrlen(tx->fc);
989
        if (skb->len > hdrlen + sizeof(rfc1042_header) + 2) {
990
                u8 *pos = &skb->data[hdrlen + sizeof(rfc1042_header)];
991
                tx->ethertype = (pos[0] << 8) | pos[1];
992
        }
993
        control->flags |= IEEE80211_TXCTL_FIRST_FRAGMENT;
994
 
995
        return res;
996
}
997
 
998
/* Device in tx->dev has a reference added; use dev_put(tx->dev) when
999
 * finished with it.
1000
 *
1001
 * NB: @tx is uninitialised when passed in here
1002
 */
1003
static int ieee80211_tx_prepare(struct ieee80211_txrx_data *tx,
1004
                                struct sk_buff *skb,
1005
                                struct net_device *mdev,
1006
                                struct ieee80211_tx_control *control)
1007
{
1008
        struct ieee80211_tx_packet_data *pkt_data;
1009
        struct net_device *dev;
1010
 
1011
        pkt_data = (struct ieee80211_tx_packet_data *)skb->cb;
1012
        dev = dev_get_by_index(&init_net, pkt_data->ifindex);
1013
        if (unlikely(dev && !is_ieee80211_device(dev, mdev))) {
1014
                dev_put(dev);
1015
                dev = NULL;
1016
        }
1017
        if (unlikely(!dev))
1018
                return -ENODEV;
1019
        /* initialises tx with control */
1020
        __ieee80211_tx_prepare(tx, skb, dev, control);
1021
        return 0;
1022
}
1023
 
1024
static int __ieee80211_tx(struct ieee80211_local *local, struct sk_buff *skb,
1025
                          struct ieee80211_txrx_data *tx)
1026
{
1027
        struct ieee80211_tx_control *control = tx->u.tx.control;
1028
        int ret, i;
1029
 
1030
        if (!ieee80211_qdisc_installed(local->mdev) &&
1031
            __ieee80211_queue_stopped(local, 0)) {
1032
                netif_stop_queue(local->mdev);
1033
                return IEEE80211_TX_AGAIN;
1034
        }
1035
        if (skb) {
1036
                ieee80211_dump_frame(wiphy_name(local->hw.wiphy),
1037
                                     "TX to low-level driver", skb);
1038
                ret = local->ops->tx(local_to_hw(local), skb, control);
1039
                if (ret)
1040
                        return IEEE80211_TX_AGAIN;
1041
                local->mdev->trans_start = jiffies;
1042
                ieee80211_led_tx(local, 1);
1043
        }
1044
        if (tx->u.tx.extra_frag) {
1045
                control->flags &= ~(IEEE80211_TXCTL_USE_RTS_CTS |
1046
                                    IEEE80211_TXCTL_USE_CTS_PROTECT |
1047
                                    IEEE80211_TXCTL_CLEAR_DST_MASK |
1048
                                    IEEE80211_TXCTL_FIRST_FRAGMENT);
1049
                for (i = 0; i < tx->u.tx.num_extra_frag; i++) {
1050
                        if (!tx->u.tx.extra_frag[i])
1051
                                continue;
1052
                        if (__ieee80211_queue_stopped(local, control->queue))
1053
                                return IEEE80211_TX_FRAG_AGAIN;
1054
                        if (i == tx->u.tx.num_extra_frag) {
1055
                                control->tx_rate = tx->u.tx.last_frag_hwrate;
1056
                                control->rate = tx->u.tx.last_frag_rate;
1057
                                if (tx->flags & IEEE80211_TXRXD_TXPROBE_LAST_FRAG)
1058
                                        control->flags |=
1059
                                                IEEE80211_TXCTL_RATE_CTRL_PROBE;
1060
                                else
1061
                                        control->flags &=
1062
                                                ~IEEE80211_TXCTL_RATE_CTRL_PROBE;
1063
                        }
1064
 
1065
                        ieee80211_dump_frame(wiphy_name(local->hw.wiphy),
1066
                                             "TX to low-level driver",
1067
                                             tx->u.tx.extra_frag[i]);
1068
                        ret = local->ops->tx(local_to_hw(local),
1069
                                            tx->u.tx.extra_frag[i],
1070
                                            control);
1071
                        if (ret)
1072
                                return IEEE80211_TX_FRAG_AGAIN;
1073
                        local->mdev->trans_start = jiffies;
1074
                        ieee80211_led_tx(local, 1);
1075
                        tx->u.tx.extra_frag[i] = NULL;
1076
                }
1077
                kfree(tx->u.tx.extra_frag);
1078
                tx->u.tx.extra_frag = NULL;
1079
        }
1080
        return IEEE80211_TX_OK;
1081
}
1082
 
1083
static int ieee80211_tx(struct net_device *dev, struct sk_buff *skb,
1084
                        struct ieee80211_tx_control *control)
1085
{
1086
        struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
1087
        struct sta_info *sta;
1088
        ieee80211_tx_handler *handler;
1089
        struct ieee80211_txrx_data tx;
1090
        ieee80211_txrx_result res = TXRX_DROP, res_prepare;
1091
        int ret, i;
1092
 
1093
        WARN_ON(__ieee80211_queue_pending(local, control->queue));
1094
 
1095
        if (unlikely(skb->len < 10)) {
1096
                dev_kfree_skb(skb);
1097
                return 0;
1098
        }
1099
 
1100
        /* initialises tx */
1101
        res_prepare = __ieee80211_tx_prepare(&tx, skb, dev, control);
1102
 
1103
        if (res_prepare == TXRX_DROP) {
1104
                dev_kfree_skb(skb);
1105
                return 0;
1106
        }
1107
 
1108
        /*
1109
         * key references are protected using RCU and this requires that
1110
         * we are in a read-site RCU section during receive processing
1111
         */
1112
        rcu_read_lock();
1113
 
1114
        sta = tx.sta;
1115
        tx.u.tx.mode = local->hw.conf.mode;
1116
 
1117
        for (handler = local->tx_handlers; *handler != NULL;
1118
             handler++) {
1119
                res = (*handler)(&tx);
1120
                if (res != TXRX_CONTINUE)
1121
                        break;
1122
        }
1123
 
1124
        skb = tx.skb; /* handlers are allowed to change skb */
1125
 
1126
        if (sta)
1127
                sta_info_put(sta);
1128
 
1129
        if (unlikely(res == TXRX_DROP)) {
1130
                I802_DEBUG_INC(local->tx_handlers_drop);
1131
                goto drop;
1132
        }
1133
 
1134
        if (unlikely(res == TXRX_QUEUED)) {
1135
                I802_DEBUG_INC(local->tx_handlers_queued);
1136
                rcu_read_unlock();
1137
                return 0;
1138
        }
1139
 
1140
        if (tx.u.tx.extra_frag) {
1141
                for (i = 0; i < tx.u.tx.num_extra_frag; i++) {
1142
                        int next_len, dur;
1143
                        struct ieee80211_hdr *hdr =
1144
                                (struct ieee80211_hdr *)
1145
                                tx.u.tx.extra_frag[i]->data;
1146
 
1147
                        if (i + 1 < tx.u.tx.num_extra_frag) {
1148
                                next_len = tx.u.tx.extra_frag[i + 1]->len;
1149
                        } else {
1150
                                next_len = 0;
1151
                                tx.u.tx.rate = tx.u.tx.last_frag_rate;
1152
                                tx.u.tx.last_frag_hwrate = tx.u.tx.rate->val;
1153
                        }
1154
                        dur = ieee80211_duration(&tx, 0, next_len);
1155
                        hdr->duration_id = cpu_to_le16(dur);
1156
                }
1157
        }
1158
 
1159
retry:
1160
        ret = __ieee80211_tx(local, skb, &tx);
1161
        if (ret) {
1162
                struct ieee80211_tx_stored_packet *store =
1163
                        &local->pending_packet[control->queue];
1164
 
1165
                if (ret == IEEE80211_TX_FRAG_AGAIN)
1166
                        skb = NULL;
1167
                set_bit(IEEE80211_LINK_STATE_PENDING,
1168
                        &local->state[control->queue]);
1169
                smp_mb();
1170
                /* When the driver gets out of buffers during sending of
1171
                 * fragments and calls ieee80211_stop_queue, there is
1172
                 * a small window between IEEE80211_LINK_STATE_XOFF and
1173
                 * IEEE80211_LINK_STATE_PENDING flags are set. If a buffer
1174
                 * gets available in that window (i.e. driver calls
1175
                 * ieee80211_wake_queue), we would end up with ieee80211_tx
1176
                 * called with IEEE80211_LINK_STATE_PENDING. Prevent this by
1177
                 * continuing transmitting here when that situation is
1178
                 * possible to have happened. */
1179
                if (!__ieee80211_queue_stopped(local, control->queue)) {
1180
                        clear_bit(IEEE80211_LINK_STATE_PENDING,
1181
                                  &local->state[control->queue]);
1182
                        goto retry;
1183
                }
1184
                memcpy(&store->control, control,
1185
                       sizeof(struct ieee80211_tx_control));
1186
                store->skb = skb;
1187
                store->extra_frag = tx.u.tx.extra_frag;
1188
                store->num_extra_frag = tx.u.tx.num_extra_frag;
1189
                store->last_frag_hwrate = tx.u.tx.last_frag_hwrate;
1190
                store->last_frag_rate = tx.u.tx.last_frag_rate;
1191
                store->last_frag_rate_ctrl_probe =
1192
                        !!(tx.flags & IEEE80211_TXRXD_TXPROBE_LAST_FRAG);
1193
        }
1194
        rcu_read_unlock();
1195
        return 0;
1196
 
1197
 drop:
1198
        if (skb)
1199
                dev_kfree_skb(skb);
1200
        for (i = 0; i < tx.u.tx.num_extra_frag; i++)
1201
                if (tx.u.tx.extra_frag[i])
1202
                        dev_kfree_skb(tx.u.tx.extra_frag[i]);
1203
        kfree(tx.u.tx.extra_frag);
1204
        rcu_read_unlock();
1205
        return 0;
1206
}
1207
 
1208
/* device xmit handlers */
1209
 
1210
int ieee80211_master_start_xmit(struct sk_buff *skb,
1211
                                struct net_device *dev)
1212
{
1213
        struct ieee80211_tx_control control;
1214
        struct ieee80211_tx_packet_data *pkt_data;
1215
        struct net_device *odev = NULL;
1216
        struct ieee80211_sub_if_data *osdata;
1217
        int headroom;
1218
        int ret;
1219
 
1220
        /*
1221
         * copy control out of the skb so other people can use skb->cb
1222
         */
1223
        pkt_data = (struct ieee80211_tx_packet_data *)skb->cb;
1224
        memset(&control, 0, sizeof(struct ieee80211_tx_control));
1225
 
1226
        if (pkt_data->ifindex)
1227
                odev = dev_get_by_index(&init_net, pkt_data->ifindex);
1228
        if (unlikely(odev && !is_ieee80211_device(odev, dev))) {
1229
                dev_put(odev);
1230
                odev = NULL;
1231
        }
1232
        if (unlikely(!odev)) {
1233
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
1234
                printk(KERN_DEBUG "%s: Discarded packet with nonexistent "
1235
                       "originating device\n", dev->name);
1236
#endif
1237
                dev_kfree_skb(skb);
1238
                return 0;
1239
        }
1240
        osdata = IEEE80211_DEV_TO_SUB_IF(odev);
1241
 
1242
        headroom = osdata->local->tx_headroom + IEEE80211_ENCRYPT_HEADROOM;
1243
        if (skb_headroom(skb) < headroom) {
1244
                if (pskb_expand_head(skb, headroom, 0, GFP_ATOMIC)) {
1245
                        dev_kfree_skb(skb);
1246
                        dev_put(odev);
1247
                        return 0;
1248
                }
1249
        }
1250
 
1251
        control.ifindex = odev->ifindex;
1252
        control.type = osdata->type;
1253
        if (pkt_data->flags & IEEE80211_TXPD_REQ_TX_STATUS)
1254
                control.flags |= IEEE80211_TXCTL_REQ_TX_STATUS;
1255
        if (pkt_data->flags & IEEE80211_TXPD_DO_NOT_ENCRYPT)
1256
                control.flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT;
1257
        if (pkt_data->flags & IEEE80211_TXPD_REQUEUE)
1258
                control.flags |= IEEE80211_TXCTL_REQUEUE;
1259
        control.queue = pkt_data->queue;
1260
 
1261
        ret = ieee80211_tx(odev, skb, &control);
1262
        dev_put(odev);
1263
 
1264
        return ret;
1265
}
1266
 
1267
int ieee80211_monitor_start_xmit(struct sk_buff *skb,
1268
                                 struct net_device *dev)
1269
{
1270
        struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
1271
        struct ieee80211_tx_packet_data *pkt_data;
1272
        struct ieee80211_radiotap_header *prthdr =
1273
                (struct ieee80211_radiotap_header *)skb->data;
1274
        u16 len_rthdr;
1275
 
1276
        /* check for not even having the fixed radiotap header part */
1277
        if (unlikely(skb->len < sizeof(struct ieee80211_radiotap_header)))
1278
                goto fail; /* too short to be possibly valid */
1279
 
1280
        /* is it a header version we can trust to find length from? */
1281
        if (unlikely(prthdr->it_version))
1282
                goto fail; /* only version 0 is supported */
1283
 
1284
        /* then there must be a radiotap header with a length we can use */
1285
        len_rthdr = ieee80211_get_radiotap_len(skb->data);
1286
 
1287
        /* does the skb contain enough to deliver on the alleged length? */
1288
        if (unlikely(skb->len < len_rthdr))
1289
                goto fail; /* skb too short for claimed rt header extent */
1290
 
1291
        skb->dev = local->mdev;
1292
 
1293
        pkt_data = (struct ieee80211_tx_packet_data *)skb->cb;
1294
        memset(pkt_data, 0, sizeof(*pkt_data));
1295
        /* needed because we set skb device to master */
1296
        pkt_data->ifindex = dev->ifindex;
1297
 
1298
        pkt_data->flags |= IEEE80211_TXPD_DO_NOT_ENCRYPT;
1299
 
1300
        /*
1301
         * fix up the pointers accounting for the radiotap
1302
         * header still being in there.  We are being given
1303
         * a precooked IEEE80211 header so no need for
1304
         * normal processing
1305
         */
1306
        skb_set_mac_header(skb, len_rthdr);
1307
        /*
1308
         * these are just fixed to the end of the rt area since we
1309
         * don't have any better information and at this point, nobody cares
1310
         */
1311
        skb_set_network_header(skb, len_rthdr);
1312
        skb_set_transport_header(skb, len_rthdr);
1313
 
1314
        /* pass the radiotap header up to the next stage intact */
1315
        dev_queue_xmit(skb);
1316
        return NETDEV_TX_OK;
1317
 
1318
fail:
1319
        dev_kfree_skb(skb);
1320
        return NETDEV_TX_OK; /* meaning, we dealt with the skb */
1321
}
1322
 
1323
/**
1324
 * ieee80211_subif_start_xmit - netif start_xmit function for Ethernet-type
1325
 * subinterfaces (wlan#, WDS, and VLAN interfaces)
1326
 * @skb: packet to be sent
1327
 * @dev: incoming interface
1328
 *
1329
 * Returns: 0 on success (and frees skb in this case) or 1 on failure (skb will
1330
 * not be freed, and caller is responsible for either retrying later or freeing
1331
 * skb).
1332
 *
1333
 * This function takes in an Ethernet header and encapsulates it with suitable
1334
 * IEEE 802.11 header based on which interface the packet is coming in. The
1335
 * encapsulated packet will then be passed to master interface, wlan#.11, for
1336
 * transmission (through low-level driver).
1337
 */
1338
int ieee80211_subif_start_xmit(struct sk_buff *skb,
1339
                               struct net_device *dev)
1340
{
1341
        struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
1342
        struct ieee80211_tx_packet_data *pkt_data;
1343
        struct ieee80211_sub_if_data *sdata;
1344
        int ret = 1, head_need;
1345
        u16 ethertype, hdrlen, fc;
1346
        struct ieee80211_hdr hdr;
1347
        const u8 *encaps_data;
1348
        int encaps_len, skip_header_bytes;
1349
        int nh_pos, h_pos;
1350
        struct sta_info *sta;
1351
 
1352
        sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1353
        if (unlikely(skb->len < ETH_HLEN)) {
1354
                printk(KERN_DEBUG "%s: short skb (len=%d)\n",
1355
                       dev->name, skb->len);
1356
                ret = 0;
1357
                goto fail;
1358
        }
1359
 
1360
        nh_pos = skb_network_header(skb) - skb->data;
1361
        h_pos = skb_transport_header(skb) - skb->data;
1362
 
1363
        /* convert Ethernet header to proper 802.11 header (based on
1364
         * operation mode) */
1365
        ethertype = (skb->data[12] << 8) | skb->data[13];
1366
        /* TODO: handling for 802.1x authorized/unauthorized port */
1367
        fc = IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA;
1368
 
1369
        switch (sdata->type) {
1370
        case IEEE80211_IF_TYPE_AP:
1371
        case IEEE80211_IF_TYPE_VLAN:
1372
                fc |= IEEE80211_FCTL_FROMDS;
1373
                /* DA BSSID SA */
1374
                memcpy(hdr.addr1, skb->data, ETH_ALEN);
1375
                memcpy(hdr.addr2, dev->dev_addr, ETH_ALEN);
1376
                memcpy(hdr.addr3, skb->data + ETH_ALEN, ETH_ALEN);
1377
                hdrlen = 24;
1378
                break;
1379
        case IEEE80211_IF_TYPE_WDS:
1380
                fc |= IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS;
1381
                /* RA TA DA SA */
1382
                memcpy(hdr.addr1, sdata->u.wds.remote_addr, ETH_ALEN);
1383
                memcpy(hdr.addr2, dev->dev_addr, ETH_ALEN);
1384
                memcpy(hdr.addr3, skb->data, ETH_ALEN);
1385
                memcpy(hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN);
1386
                hdrlen = 30;
1387
                break;
1388
        case IEEE80211_IF_TYPE_STA:
1389
                fc |= IEEE80211_FCTL_TODS;
1390
                /* BSSID SA DA */
1391
                memcpy(hdr.addr1, sdata->u.sta.bssid, ETH_ALEN);
1392
                memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN);
1393
                memcpy(hdr.addr3, skb->data, ETH_ALEN);
1394
                hdrlen = 24;
1395
                break;
1396
        case IEEE80211_IF_TYPE_IBSS:
1397
                /* DA SA BSSID */
1398
                memcpy(hdr.addr1, skb->data, ETH_ALEN);
1399
                memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN);
1400
                memcpy(hdr.addr3, sdata->u.sta.bssid, ETH_ALEN);
1401
                hdrlen = 24;
1402
                break;
1403
        default:
1404
                ret = 0;
1405
                goto fail;
1406
        }
1407
 
1408
        /* receiver is QoS enabled, use a QoS type frame */
1409
        sta = sta_info_get(local, hdr.addr1);
1410
        if (sta) {
1411
                if (sta->flags & WLAN_STA_WME) {
1412
                        fc |= IEEE80211_STYPE_QOS_DATA;
1413
                        hdrlen += 2;
1414
                }
1415
                sta_info_put(sta);
1416
        }
1417
 
1418
        hdr.frame_control = cpu_to_le16(fc);
1419
        hdr.duration_id = 0;
1420
        hdr.seq_ctrl = 0;
1421
 
1422
        skip_header_bytes = ETH_HLEN;
1423
        if (ethertype == ETH_P_AARP || ethertype == ETH_P_IPX) {
1424
                encaps_data = bridge_tunnel_header;
1425
                encaps_len = sizeof(bridge_tunnel_header);
1426
                skip_header_bytes -= 2;
1427
        } else if (ethertype >= 0x600) {
1428
                encaps_data = rfc1042_header;
1429
                encaps_len = sizeof(rfc1042_header);
1430
                skip_header_bytes -= 2;
1431
        } else {
1432
                encaps_data = NULL;
1433
                encaps_len = 0;
1434
        }
1435
 
1436
        skb_pull(skb, skip_header_bytes);
1437
        nh_pos -= skip_header_bytes;
1438
        h_pos -= skip_header_bytes;
1439
 
1440
        /* TODO: implement support for fragments so that there is no need to
1441
         * reallocate and copy payload; it might be enough to support one
1442
         * extra fragment that would be copied in the beginning of the frame
1443
         * data.. anyway, it would be nice to include this into skb structure
1444
         * somehow
1445
         *
1446
         * There are few options for this:
1447
         * use skb->cb as an extra space for 802.11 header
1448
         * allocate new buffer if not enough headroom
1449
         * make sure that there is enough headroom in every skb by increasing
1450
         * build in headroom in __dev_alloc_skb() (linux/skbuff.h) and
1451
         * alloc_skb() (net/core/skbuff.c)
1452
         */
1453
        head_need = hdrlen + encaps_len + local->tx_headroom;
1454
        head_need -= skb_headroom(skb);
1455
 
1456
        /* We are going to modify skb data, so make a copy of it if happens to
1457
         * be cloned. This could happen, e.g., with Linux bridge code passing
1458
         * us broadcast frames. */
1459
 
1460
        if (head_need > 0 || skb_cloned(skb)) {
1461
#if 0
1462
                printk(KERN_DEBUG "%s: need to reallocate buffer for %d bytes "
1463
                       "of headroom\n", dev->name, head_need);
1464
#endif
1465
 
1466
                if (skb_cloned(skb))
1467
                        I802_DEBUG_INC(local->tx_expand_skb_head_cloned);
1468
                else
1469
                        I802_DEBUG_INC(local->tx_expand_skb_head);
1470
                /* Since we have to reallocate the buffer, make sure that there
1471
                 * is enough room for possible WEP IV/ICV and TKIP (8 bytes
1472
                 * before payload and 12 after). */
1473
                if (pskb_expand_head(skb, (head_need > 0 ? head_need + 8 : 8),
1474
                                     12, GFP_ATOMIC)) {
1475
                        printk(KERN_DEBUG "%s: failed to reallocate TX buffer"
1476
                               "\n", dev->name);
1477
                        goto fail;
1478
                }
1479
        }
1480
 
1481
        if (encaps_data) {
1482
                memcpy(skb_push(skb, encaps_len), encaps_data, encaps_len);
1483
                nh_pos += encaps_len;
1484
                h_pos += encaps_len;
1485
        }
1486
 
1487
        if (fc & IEEE80211_STYPE_QOS_DATA) {
1488
                __le16 *qos_control;
1489
 
1490
                qos_control = (__le16*) skb_push(skb, 2);
1491
                memcpy(skb_push(skb, hdrlen - 2), &hdr, hdrlen - 2);
1492
                /*
1493
                 * Maybe we could actually set some fields here, for now just
1494
                 * initialise to zero to indicate no special operation.
1495
                 */
1496
                *qos_control = 0;
1497
        } else
1498
                memcpy(skb_push(skb, hdrlen), &hdr, hdrlen);
1499
 
1500
        nh_pos += hdrlen;
1501
        h_pos += hdrlen;
1502
 
1503
        pkt_data = (struct ieee80211_tx_packet_data *)skb->cb;
1504
        memset(pkt_data, 0, sizeof(struct ieee80211_tx_packet_data));
1505
        pkt_data->ifindex = dev->ifindex;
1506
 
1507
        skb->dev = local->mdev;
1508
        dev->stats.tx_packets++;
1509
        dev->stats.tx_bytes += skb->len;
1510
 
1511
        /* Update skb pointers to various headers since this modified frame
1512
         * is going to go through Linux networking code that may potentially
1513
         * need things like pointer to IP header. */
1514
        skb_set_mac_header(skb, 0);
1515
        skb_set_network_header(skb, nh_pos);
1516
        skb_set_transport_header(skb, h_pos);
1517
 
1518
        dev->trans_start = jiffies;
1519
        dev_queue_xmit(skb);
1520
 
1521
        return 0;
1522
 
1523
 fail:
1524
        if (!ret)
1525
                dev_kfree_skb(skb);
1526
 
1527
        return ret;
1528
}
1529
 
1530
/*
1531
 * This is the transmit routine for the 802.11 type interfaces
1532
 * called by upper layers of the linux networking
1533
 * stack when it has a frame to transmit
1534
 */
1535
int ieee80211_mgmt_start_xmit(struct sk_buff *skb, struct net_device *dev)
1536
{
1537
        struct ieee80211_sub_if_data *sdata;
1538
        struct ieee80211_tx_packet_data *pkt_data;
1539
        struct ieee80211_hdr *hdr;
1540
        u16 fc;
1541
 
1542
        sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1543
 
1544
        if (skb->len < 10) {
1545
                dev_kfree_skb(skb);
1546
                return 0;
1547
        }
1548
 
1549
        if (skb_headroom(skb) < sdata->local->tx_headroom) {
1550
                if (pskb_expand_head(skb, sdata->local->tx_headroom,
1551
                                     0, GFP_ATOMIC)) {
1552
                        dev_kfree_skb(skb);
1553
                        return 0;
1554
                }
1555
        }
1556
 
1557
        hdr = (struct ieee80211_hdr *) skb->data;
1558
        fc = le16_to_cpu(hdr->frame_control);
1559
 
1560
        pkt_data = (struct ieee80211_tx_packet_data *) skb->cb;
1561
        memset(pkt_data, 0, sizeof(struct ieee80211_tx_packet_data));
1562
        pkt_data->ifindex = sdata->dev->ifindex;
1563
 
1564
        skb->priority = 20; /* use hardcoded priority for mgmt TX queue */
1565
        skb->dev = sdata->local->mdev;
1566
 
1567
        /*
1568
         * We're using the protocol field of the the frame control header
1569
         * to request TX callback for hostapd. BIT(1) is checked.
1570
         */
1571
        if ((fc & BIT(1)) == BIT(1)) {
1572
                pkt_data->flags |= IEEE80211_TXPD_REQ_TX_STATUS;
1573
                fc &= ~BIT(1);
1574
                hdr->frame_control = cpu_to_le16(fc);
1575
        }
1576
 
1577
        if (!(fc & IEEE80211_FCTL_PROTECTED))
1578
                pkt_data->flags |= IEEE80211_TXPD_DO_NOT_ENCRYPT;
1579
 
1580
        dev->stats.tx_packets++;
1581
        dev->stats.tx_bytes += skb->len;
1582
 
1583
        dev_queue_xmit(skb);
1584
 
1585
        return 0;
1586
}
1587
 
1588
/* helper functions for pending packets for when queues are stopped */
1589
 
1590
void ieee80211_clear_tx_pending(struct ieee80211_local *local)
1591
{
1592
        int i, j;
1593
        struct ieee80211_tx_stored_packet *store;
1594
 
1595
        for (i = 0; i < local->hw.queues; i++) {
1596
                if (!__ieee80211_queue_pending(local, i))
1597
                        continue;
1598
                store = &local->pending_packet[i];
1599
                kfree_skb(store->skb);
1600
                for (j = 0; j < store->num_extra_frag; j++)
1601
                        kfree_skb(store->extra_frag[j]);
1602
                kfree(store->extra_frag);
1603
                clear_bit(IEEE80211_LINK_STATE_PENDING, &local->state[i]);
1604
        }
1605
}
1606
 
1607
void ieee80211_tx_pending(unsigned long data)
1608
{
1609
        struct ieee80211_local *local = (struct ieee80211_local *)data;
1610
        struct net_device *dev = local->mdev;
1611
        struct ieee80211_tx_stored_packet *store;
1612
        struct ieee80211_txrx_data tx;
1613
        int i, ret, reschedule = 0;
1614
 
1615
        netif_tx_lock_bh(dev);
1616
        for (i = 0; i < local->hw.queues; i++) {
1617
                if (__ieee80211_queue_stopped(local, i))
1618
                        continue;
1619
                if (!__ieee80211_queue_pending(local, i)) {
1620
                        reschedule = 1;
1621
                        continue;
1622
                }
1623
                store = &local->pending_packet[i];
1624
                tx.u.tx.control = &store->control;
1625
                tx.u.tx.extra_frag = store->extra_frag;
1626
                tx.u.tx.num_extra_frag = store->num_extra_frag;
1627
                tx.u.tx.last_frag_hwrate = store->last_frag_hwrate;
1628
                tx.u.tx.last_frag_rate = store->last_frag_rate;
1629
                tx.flags = 0;
1630
                if (store->last_frag_rate_ctrl_probe)
1631
                        tx.flags |= IEEE80211_TXRXD_TXPROBE_LAST_FRAG;
1632
                ret = __ieee80211_tx(local, store->skb, &tx);
1633
                if (ret) {
1634
                        if (ret == IEEE80211_TX_FRAG_AGAIN)
1635
                                store->skb = NULL;
1636
                } else {
1637
                        clear_bit(IEEE80211_LINK_STATE_PENDING,
1638
                                  &local->state[i]);
1639
                        reschedule = 1;
1640
                }
1641
        }
1642
        netif_tx_unlock_bh(dev);
1643
        if (reschedule) {
1644
                if (!ieee80211_qdisc_installed(dev)) {
1645
                        if (!__ieee80211_queue_stopped(local, 0))
1646
                                netif_wake_queue(dev);
1647
                } else
1648
                        netif_schedule(dev);
1649
        }
1650
}
1651
 
1652
/* functions for drivers to get certain frames */
1653
 
1654
static void ieee80211_beacon_add_tim(struct ieee80211_local *local,
1655
                                     struct ieee80211_if_ap *bss,
1656
                                     struct sk_buff *skb)
1657
{
1658
        u8 *pos, *tim;
1659
        int aid0 = 0;
1660
        int i, have_bits = 0, n1, n2;
1661
 
1662
        /* Generate bitmap for TIM only if there are any STAs in power save
1663
         * mode. */
1664
        read_lock_bh(&local->sta_lock);
1665
        if (atomic_read(&bss->num_sta_ps) > 0)
1666
                /* in the hope that this is faster than
1667
                 * checking byte-for-byte */
1668
                have_bits = !bitmap_empty((unsigned long*)bss->tim,
1669
                                          IEEE80211_MAX_AID+1);
1670
 
1671
        if (bss->dtim_count == 0)
1672
                bss->dtim_count = bss->dtim_period - 1;
1673
        else
1674
                bss->dtim_count--;
1675
 
1676
        tim = pos = (u8 *) skb_put(skb, 6);
1677
        *pos++ = WLAN_EID_TIM;
1678
        *pos++ = 4;
1679
        *pos++ = bss->dtim_count;
1680
        *pos++ = bss->dtim_period;
1681
 
1682
        if (bss->dtim_count == 0 && !skb_queue_empty(&bss->ps_bc_buf))
1683
                aid0 = 1;
1684
 
1685
        if (have_bits) {
1686
                /* Find largest even number N1 so that bits numbered 1 through
1687
                 * (N1 x 8) - 1 in the bitmap are 0 and number N2 so that bits
1688
                 * (N2 + 1) x 8 through 2007 are 0. */
1689
                n1 = 0;
1690
                for (i = 0; i < IEEE80211_MAX_TIM_LEN; i++) {
1691
                        if (bss->tim[i]) {
1692
                                n1 = i & 0xfe;
1693
                                break;
1694
                        }
1695
                }
1696
                n2 = n1;
1697
                for (i = IEEE80211_MAX_TIM_LEN - 1; i >= n1; i--) {
1698
                        if (bss->tim[i]) {
1699
                                n2 = i;
1700
                                break;
1701
                        }
1702
                }
1703
 
1704
                /* Bitmap control */
1705
                *pos++ = n1 | aid0;
1706
                /* Part Virt Bitmap */
1707
                memcpy(pos, bss->tim + n1, n2 - n1 + 1);
1708
 
1709
                tim[1] = n2 - n1 + 4;
1710
                skb_put(skb, n2 - n1);
1711
        } else {
1712
                *pos++ = aid0; /* Bitmap control */
1713
                *pos++ = 0; /* Part Virt Bitmap */
1714
        }
1715
        read_unlock_bh(&local->sta_lock);
1716
}
1717
 
1718
struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw, int if_id,
1719
                                     struct ieee80211_tx_control *control)
1720
{
1721
        struct ieee80211_local *local = hw_to_local(hw);
1722
        struct sk_buff *skb;
1723
        struct net_device *bdev;
1724
        struct ieee80211_sub_if_data *sdata = NULL;
1725
        struct ieee80211_if_ap *ap = NULL;
1726
        struct ieee80211_rate *rate;
1727
        struct rate_control_extra extra;
1728
        u8 *b_head, *b_tail;
1729
        int bh_len, bt_len;
1730
 
1731
        bdev = dev_get_by_index(&init_net, if_id);
1732
        if (bdev) {
1733
                sdata = IEEE80211_DEV_TO_SUB_IF(bdev);
1734
                ap = &sdata->u.ap;
1735
                dev_put(bdev);
1736
        }
1737
 
1738
        if (!ap || sdata->type != IEEE80211_IF_TYPE_AP ||
1739
            !ap->beacon_head) {
1740
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
1741
                if (net_ratelimit())
1742
                        printk(KERN_DEBUG "no beacon data avail for idx=%d "
1743
                               "(%s)\n", if_id, bdev ? bdev->name : "N/A");
1744
#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */
1745
                return NULL;
1746
        }
1747
 
1748
        /* Assume we are generating the normal beacon locally */
1749
        b_head = ap->beacon_head;
1750
        b_tail = ap->beacon_tail;
1751
        bh_len = ap->beacon_head_len;
1752
        bt_len = ap->beacon_tail_len;
1753
 
1754
        skb = dev_alloc_skb(local->tx_headroom +
1755
                bh_len + bt_len + 256 /* maximum TIM len */);
1756
        if (!skb)
1757
                return NULL;
1758
 
1759
        skb_reserve(skb, local->tx_headroom);
1760
        memcpy(skb_put(skb, bh_len), b_head, bh_len);
1761
 
1762
        ieee80211_include_sequence(sdata, (struct ieee80211_hdr *)skb->data);
1763
 
1764
        ieee80211_beacon_add_tim(local, ap, skb);
1765
 
1766
        if (b_tail) {
1767
                memcpy(skb_put(skb, bt_len), b_tail, bt_len);
1768
        }
1769
 
1770
        if (control) {
1771
                memset(&extra, 0, sizeof(extra));
1772
                extra.mode = local->oper_hw_mode;
1773
 
1774
                rate = rate_control_get_rate(local, local->mdev, skb, &extra);
1775
                if (!rate) {
1776
                        if (net_ratelimit()) {
1777
                                printk(KERN_DEBUG "%s: ieee80211_beacon_get: no rate "
1778
                                       "found\n", wiphy_name(local->hw.wiphy));
1779
                        }
1780
                        dev_kfree_skb(skb);
1781
                        return NULL;
1782
                }
1783
 
1784
                control->tx_rate =
1785
                        ((sdata->flags & IEEE80211_SDATA_SHORT_PREAMBLE) &&
1786
                        (rate->flags & IEEE80211_RATE_PREAMBLE2)) ?
1787
                        rate->val2 : rate->val;
1788
                control->antenna_sel_tx = local->hw.conf.antenna_sel_tx;
1789
                control->power_level = local->hw.conf.power_level;
1790
                control->flags |= IEEE80211_TXCTL_NO_ACK;
1791
                control->retry_limit = 1;
1792
                control->flags |= IEEE80211_TXCTL_CLEAR_DST_MASK;
1793
        }
1794
 
1795
        ap->num_beacons++;
1796
        return skb;
1797
}
1798
EXPORT_SYMBOL(ieee80211_beacon_get);
1799
 
1800
void ieee80211_rts_get(struct ieee80211_hw *hw, int if_id,
1801
                       const void *frame, size_t frame_len,
1802
                       const struct ieee80211_tx_control *frame_txctl,
1803
                       struct ieee80211_rts *rts)
1804
{
1805
        const struct ieee80211_hdr *hdr = frame;
1806
        u16 fctl;
1807
 
1808
        fctl = IEEE80211_FTYPE_CTL | IEEE80211_STYPE_RTS;
1809
        rts->frame_control = cpu_to_le16(fctl);
1810
        rts->duration = ieee80211_rts_duration(hw, if_id, frame_len, frame_txctl);
1811
        memcpy(rts->ra, hdr->addr1, sizeof(rts->ra));
1812
        memcpy(rts->ta, hdr->addr2, sizeof(rts->ta));
1813
}
1814
EXPORT_SYMBOL(ieee80211_rts_get);
1815
 
1816
void ieee80211_ctstoself_get(struct ieee80211_hw *hw, int if_id,
1817
                             const void *frame, size_t frame_len,
1818
                             const struct ieee80211_tx_control *frame_txctl,
1819
                             struct ieee80211_cts *cts)
1820
{
1821
        const struct ieee80211_hdr *hdr = frame;
1822
        u16 fctl;
1823
 
1824
        fctl = IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTS;
1825
        cts->frame_control = cpu_to_le16(fctl);
1826
        cts->duration = ieee80211_ctstoself_duration(hw, if_id, frame_len, frame_txctl);
1827
        memcpy(cts->ra, hdr->addr1, sizeof(cts->ra));
1828
}
1829
EXPORT_SYMBOL(ieee80211_ctstoself_get);
1830
 
1831
struct sk_buff *
1832
ieee80211_get_buffered_bc(struct ieee80211_hw *hw, int if_id,
1833
                          struct ieee80211_tx_control *control)
1834
{
1835
        struct ieee80211_local *local = hw_to_local(hw);
1836
        struct sk_buff *skb;
1837
        struct sta_info *sta;
1838
        ieee80211_tx_handler *handler;
1839
        struct ieee80211_txrx_data tx;
1840
        ieee80211_txrx_result res = TXRX_DROP;
1841
        struct net_device *bdev;
1842
        struct ieee80211_sub_if_data *sdata;
1843
        struct ieee80211_if_ap *bss = NULL;
1844
 
1845
        bdev = dev_get_by_index(&init_net, if_id);
1846
        if (bdev) {
1847
                sdata = IEEE80211_DEV_TO_SUB_IF(bdev);
1848
                bss = &sdata->u.ap;
1849
                dev_put(bdev);
1850
        }
1851
        if (!bss || sdata->type != IEEE80211_IF_TYPE_AP || !bss->beacon_head)
1852
                return NULL;
1853
 
1854
        if (bss->dtim_count != 0)
1855
                return NULL; /* send buffered bc/mc only after DTIM beacon */
1856
        memset(control, 0, sizeof(*control));
1857
        while (1) {
1858
                skb = skb_dequeue(&bss->ps_bc_buf);
1859
                if (!skb)
1860
                        return NULL;
1861
                local->total_ps_buffered--;
1862
 
1863
                if (!skb_queue_empty(&bss->ps_bc_buf) && skb->len >= 2) {
1864
                        struct ieee80211_hdr *hdr =
1865
                                (struct ieee80211_hdr *) skb->data;
1866
                        /* more buffered multicast/broadcast frames ==> set
1867
                         * MoreData flag in IEEE 802.11 header to inform PS
1868
                         * STAs */
1869
                        hdr->frame_control |=
1870
                                cpu_to_le16(IEEE80211_FCTL_MOREDATA);
1871
                }
1872
 
1873
                if (!ieee80211_tx_prepare(&tx, skb, local->mdev, control))
1874
                        break;
1875
                dev_kfree_skb_any(skb);
1876
        }
1877
        sta = tx.sta;
1878
        tx.flags |= IEEE80211_TXRXD_TXPS_BUFFERED;
1879
        tx.u.tx.mode = local->hw.conf.mode;
1880
 
1881
        for (handler = local->tx_handlers; *handler != NULL; handler++) {
1882
                res = (*handler)(&tx);
1883
                if (res == TXRX_DROP || res == TXRX_QUEUED)
1884
                        break;
1885
        }
1886
        dev_put(tx.dev);
1887
        skb = tx.skb; /* handlers are allowed to change skb */
1888
 
1889
        if (res == TXRX_DROP) {
1890
                I802_DEBUG_INC(local->tx_handlers_drop);
1891
                dev_kfree_skb(skb);
1892
                skb = NULL;
1893
        } else if (res == TXRX_QUEUED) {
1894
                I802_DEBUG_INC(local->tx_handlers_queued);
1895
                skb = NULL;
1896
        }
1897
 
1898
        if (sta)
1899
                sta_info_put(sta);
1900
 
1901
        return skb;
1902
}
1903
EXPORT_SYMBOL(ieee80211_get_buffered_bc);

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.