linux/net/mac80211/tx.c
<<
>>
Prefs
   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 * 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 "driver-ops.h"
  29#include "led.h"
  30#include "mesh.h"
  31#include "wep.h"
  32#include "wpa.h"
  33#include "wme.h"
  34#include "rate.h"
  35
  36#define IEEE80211_TX_OK         0
  37#define IEEE80211_TX_AGAIN      1
  38#define IEEE80211_TX_PENDING    2
  39
  40/* misc utils */
  41
  42static __le16 ieee80211_duration(struct ieee80211_tx_data *tx, int group_addr,
  43                                 int next_frag_len)
  44{
  45        int rate, mrate, erp, dur, i;
  46        struct ieee80211_rate *txrate;
  47        struct ieee80211_local *local = tx->local;
  48        struct ieee80211_supported_band *sband;
  49        struct ieee80211_hdr *hdr;
  50        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
  51
  52        /* assume HW handles this */
  53        if (info->control.rates[0].flags & IEEE80211_TX_RC_MCS)
  54                return 0;
  55
  56        /* uh huh? */
  57        if (WARN_ON_ONCE(info->control.rates[0].idx < 0))
  58                return 0;
  59
  60        sband = local->hw.wiphy->bands[tx->channel->band];
  61        txrate = &sband->bitrates[info->control.rates[0].idx];
  62
  63        erp = txrate->flags & IEEE80211_RATE_ERP_G;
  64
  65        /*
  66         * data and mgmt (except PS Poll):
  67         * - during CFP: 32768
  68         * - during contention period:
  69         *   if addr1 is group address: 0
  70         *   if more fragments = 0 and addr1 is individual address: time to
  71         *      transmit one ACK plus SIFS
  72         *   if more fragments = 1 and addr1 is individual address: time to
  73         *      transmit next fragment plus 2 x ACK plus 3 x SIFS
  74         *
  75         * IEEE 802.11, 9.6:
  76         * - control response frame (CTS or ACK) shall be transmitted using the
  77         *   same rate as the immediately previous frame in the frame exchange
  78         *   sequence, if this rate belongs to the PHY mandatory rates, or else
  79         *   at the highest possible rate belonging to the PHY rates in the
  80         *   BSSBasicRateSet
  81         */
  82        hdr = (struct ieee80211_hdr *)tx->skb->data;
  83        if (ieee80211_is_ctl(hdr->frame_control)) {
  84                /* TODO: These control frames are not currently sent by
  85                 * mac80211, but should they be implemented, this function
  86                 * needs to be updated to support duration field calculation.
  87                 *
  88                 * RTS: time needed to transmit pending data/mgmt frame plus
  89                 *    one CTS frame plus one ACK frame plus 3 x SIFS
  90                 * CTS: duration of immediately previous RTS minus time
  91                 *    required to transmit CTS and its SIFS
  92                 * ACK: 0 if immediately previous directed data/mgmt had
  93                 *    more=0, with more=1 duration in ACK frame is duration
  94                 *    from previous frame minus time needed to transmit ACK
  95                 *    and its SIFS
  96                 * PS Poll: BIT(15) | BIT(14) | aid
  97                 */
  98                return 0;
  99        }
 100
 101        /* data/mgmt */
 102        if (0 /* FIX: data/mgmt during CFP */)
 103                return cpu_to_le16(32768);
 104
 105        if (group_addr) /* Group address as the destination - no ACK */
 106                return 0;
 107
 108        /* Individual destination address:
 109         * IEEE 802.11, Ch. 9.6 (after IEEE 802.11g changes)
 110         * CTS and ACK frames shall be transmitted using the highest rate in
 111         * basic rate set that is less than or equal to the rate of the
 112         * immediately previous frame and that is using the same modulation
 113         * (CCK or OFDM). If no basic rate set matches with these requirements,
 114         * the highest mandatory rate of the PHY that is less than or equal to
 115         * the rate of the previous frame is used.
 116         * Mandatory rates for IEEE 802.11g PHY: 1, 2, 5.5, 11, 6, 12, 24 Mbps
 117         */
 118        rate = -1;
 119        /* use lowest available if everything fails */
 120        mrate = sband->bitrates[0].bitrate;
 121        for (i = 0; i < sband->n_bitrates; i++) {
 122                struct ieee80211_rate *r = &sband->bitrates[i];
 123
 124                if (r->bitrate > txrate->bitrate)
 125                        break;
 126
 127                if (tx->sdata->vif.bss_conf.basic_rates & BIT(i))
 128                        rate = r->bitrate;
 129
 130                switch (sband->band) {
 131                case IEEE80211_BAND_2GHZ: {
 132                        u32 flag;
 133                        if (tx->sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
 134                                flag = IEEE80211_RATE_MANDATORY_G;
 135                        else
 136                                flag = IEEE80211_RATE_MANDATORY_B;
 137                        if (r->flags & flag)
 138                                mrate = r->bitrate;
 139                        break;
 140                }
 141                case IEEE80211_BAND_5GHZ:
 142                        if (r->flags & IEEE80211_RATE_MANDATORY_A)
 143                                mrate = r->bitrate;
 144                        break;
 145                case IEEE80211_NUM_BANDS:
 146                        WARN_ON(1);
 147                        break;
 148                }
 149        }
 150        if (rate == -1) {
 151                /* No matching basic rate found; use highest suitable mandatory
 152                 * PHY rate */
 153                rate = mrate;
 154        }
 155
 156        /* Time needed to transmit ACK
 157         * (10 bytes + 4-byte FCS = 112 bits) plus SIFS; rounded up
 158         * to closest integer */
 159
 160        dur = ieee80211_frame_duration(local, 10, rate, erp,
 161                                tx->sdata->vif.bss_conf.use_short_preamble);
 162
 163        if (next_frag_len) {
 164                /* Frame is fragmented: duration increases with time needed to
 165                 * transmit next fragment plus ACK and 2 x SIFS. */
 166                dur *= 2; /* ACK + SIFS */
 167                /* next fragment */
 168                dur += ieee80211_frame_duration(local, next_frag_len,
 169                                txrate->bitrate, erp,
 170                                tx->sdata->vif.bss_conf.use_short_preamble);
 171        }
 172
 173        return cpu_to_le16(dur);
 174}
 175
 176static int inline is_ieee80211_device(struct ieee80211_local *local,
 177                                      struct net_device *dev)
 178{
 179        return local == wdev_priv(dev->ieee80211_ptr);
 180}
 181
 182/* tx handlers */
 183
 184static ieee80211_tx_result debug_noinline
 185ieee80211_tx_h_check_assoc(struct ieee80211_tx_data *tx)
 186{
 187
 188        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data;
 189        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
 190        u32 sta_flags;
 191
 192        if (unlikely(info->flags & IEEE80211_TX_CTL_INJECTED))
 193                return TX_CONTINUE;
 194
 195        if (unlikely(test_bit(SCAN_OFF_CHANNEL, &tx->local->scanning)) &&
 196            !ieee80211_is_probe_req(hdr->frame_control) &&
 197            !ieee80211_is_nullfunc(hdr->frame_control))
 198                /*
 199                 * When software scanning only nullfunc frames (to notify
 200                 * the sleep state to the AP) and probe requests (for the
 201                 * active scan) are allowed, all other frames should not be
 202                 * sent and we should not get here, but if we do
 203                 * nonetheless, drop them to avoid sending them
 204                 * off-channel. See the link below and
 205                 * ieee80211_start_scan() for more.
 206                 *
 207                 * http://article.gmane.org/gmane.linux.kernel.wireless.general/30089
 208                 */
 209                return TX_DROP;
 210
 211        if (tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT)
 212                return TX_CONTINUE;
 213
 214        if (tx->flags & IEEE80211_TX_PS_BUFFERED)
 215                return TX_CONTINUE;
 216
 217        sta_flags = tx->sta ? get_sta_flags(tx->sta) : 0;
 218
 219        if (likely(tx->flags & IEEE80211_TX_UNICAST)) {
 220                if (unlikely(!(sta_flags & WLAN_STA_ASSOC) &&
 221                             tx->sdata->vif.type != NL80211_IFTYPE_ADHOC &&
 222                             ieee80211_is_data(hdr->frame_control))) {
 223#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
 224                        printk(KERN_DEBUG "%s: dropped data frame to not "
 225                               "associated station %pM\n",
 226                               tx->dev->name, hdr->addr1);
 227#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */
 228                        I802_DEBUG_INC(tx->local->tx_handlers_drop_not_assoc);
 229                        return TX_DROP;
 230                }
 231        } else {
 232                if (unlikely(ieee80211_is_data(hdr->frame_control) &&
 233                             tx->local->num_sta == 0 &&
 234                             tx->sdata->vif.type != NL80211_IFTYPE_ADHOC)) {
 235                        /*
 236                         * No associated STAs - no need to send multicast
 237                         * frames.
 238                         */
 239                        return TX_DROP;
 240                }
 241                return TX_CONTINUE;
 242        }
 243
 244        return TX_CONTINUE;
 245}
 246
 247/* This function is called whenever the AP is about to exceed the maximum limit
 248 * of buffered frames for power saving STAs. This situation should not really
 249 * happen often during normal operation, so dropping the oldest buffered packet
 250 * from each queue should be OK to make some room for new frames. */
 251static void purge_old_ps_buffers(struct ieee80211_local *local)
 252{
 253        int total = 0, purged = 0;
 254        struct sk_buff *skb;
 255        struct ieee80211_sub_if_data *sdata;
 256        struct sta_info *sta;
 257
 258        /*
 259         * virtual interfaces are protected by RCU
 260         */
 261        rcu_read_lock();
 262
 263        list_for_each_entry_rcu(sdata, &local->interfaces, list) {
 264                struct ieee80211_if_ap *ap;
 265                if (sdata->vif.type != NL80211_IFTYPE_AP)
 266                        continue;
 267                ap = &sdata->u.ap;
 268                skb = skb_dequeue(&ap->ps_bc_buf);
 269                if (skb) {
 270                        purged++;
 271                        dev_kfree_skb(skb);
 272                }
 273                total += skb_queue_len(&ap->ps_bc_buf);
 274        }
 275
 276        list_for_each_entry_rcu(sta, &local->sta_list, list) {
 277                skb = skb_dequeue(&sta->ps_tx_buf);
 278                if (skb) {
 279                        purged++;
 280                        dev_kfree_skb(skb);
 281                }
 282                total += skb_queue_len(&sta->ps_tx_buf);
 283        }
 284
 285        rcu_read_unlock();
 286
 287        local->total_ps_buffered = total;
 288#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
 289        printk(KERN_DEBUG "%s: PS buffers full - purged %d frames\n",
 290               wiphy_name(local->hw.wiphy), purged);
 291#endif
 292}
 293
 294static ieee80211_tx_result
 295ieee80211_tx_h_multicast_ps_buf(struct ieee80211_tx_data *tx)
 296{
 297        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
 298        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data;
 299
 300        /*
 301         * broadcast/multicast frame
 302         *
 303         * If any of the associated stations is in power save mode,
 304         * the frame is buffered to be sent after DTIM beacon frame.
 305         * This is done either by the hardware or us.
 306         */
 307
 308        /* powersaving STAs only in AP/VLAN mode */
 309        if (!tx->sdata->bss)
 310                return TX_CONTINUE;
 311
 312        /* no buffering for ordered frames */
 313        if (ieee80211_has_order(hdr->frame_control))
 314                return TX_CONTINUE;
 315
 316        /* no stations in PS mode */
 317        if (!atomic_read(&tx->sdata->bss->num_sta_ps))
 318                return TX_CONTINUE;
 319
 320        /* buffered in hardware */
 321        if (!(tx->local->hw.flags & IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING)) {
 322                info->flags |= IEEE80211_TX_CTL_SEND_AFTER_DTIM;
 323
 324                return TX_CONTINUE;
 325        }
 326
 327        /* buffered in mac80211 */
 328        if (tx->local->total_ps_buffered >= TOTAL_MAX_TX_BUFFER)
 329                purge_old_ps_buffers(tx->local);
 330
 331        if (skb_queue_len(&tx->sdata->bss->ps_bc_buf) >= AP_MAX_BC_BUFFER) {
 332#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
 333                if (net_ratelimit())
 334                        printk(KERN_DEBUG "%s: BC TX buffer full - dropping the oldest frame\n",
 335                               tx->dev->name);
 336#endif
 337                dev_kfree_skb(skb_dequeue(&tx->sdata->bss->ps_bc_buf));
 338        } else
 339                tx->local->total_ps_buffered++;
 340
 341        skb_queue_tail(&tx->sdata->bss->ps_bc_buf, tx->skb);
 342
 343        return TX_QUEUED;
 344}
 345
 346static int ieee80211_use_mfp(__le16 fc, struct sta_info *sta,
 347                             struct sk_buff *skb)
 348{
 349        if (!ieee80211_is_mgmt(fc))
 350                return 0;
 351
 352        if (sta == NULL || !test_sta_flags(sta, WLAN_STA_MFP))
 353                return 0;
 354
 355        if (!ieee80211_is_robust_mgmt_frame((struct ieee80211_hdr *)
 356                                            skb->data))
 357                return 0;
 358
 359        return 1;
 360}
 361
 362static ieee80211_tx_result
 363ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx)
 364{
 365        struct sta_info *sta = tx->sta;
 366        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
 367        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data;
 368        u32 staflags;
 369
 370        if (unlikely(!sta || ieee80211_is_probe_resp(hdr->frame_control)
 371                        || ieee80211_is_auth(hdr->frame_control)
 372                        || ieee80211_is_assoc_resp(hdr->frame_control)
 373                        || ieee80211_is_reassoc_resp(hdr->frame_control)))
 374                return TX_CONTINUE;
 375
 376        staflags = get_sta_flags(sta);
 377
 378        if (unlikely((staflags & WLAN_STA_PS) &&
 379                     !(info->flags & IEEE80211_TX_CTL_PSPOLL_RESPONSE))) {
 380#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
 381                printk(KERN_DEBUG "STA %pM aid %d: PS buffer (entries "
 382                       "before %d)\n",
 383                       sta->sta.addr, sta->sta.aid,
 384                       skb_queue_len(&sta->ps_tx_buf));
 385#endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
 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#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
 391                        if (net_ratelimit()) {
 392                                printk(KERN_DEBUG "%s: STA %pM TX "
 393                                       "buffer full - dropping oldest frame\n",
 394                                       tx->dev->name, sta->sta.addr);
 395                        }
 396#endif
 397                        dev_kfree_skb(old);
 398                } else
 399                        tx->local->total_ps_buffered++;
 400
 401                /* Queue frame to be sent after STA sends an PS Poll frame */
 402                if (skb_queue_empty(&sta->ps_tx_buf))
 403                        sta_info_set_tim_bit(sta);
 404
 405                info->control.jiffies = jiffies;
 406                info->control.vif = &tx->sdata->vif;
 407                info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
 408                skb_queue_tail(&sta->ps_tx_buf, tx->skb);
 409                return TX_QUEUED;
 410        }
 411#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
 412        else if (unlikely(test_sta_flags(sta, WLAN_STA_PS))) {
 413                printk(KERN_DEBUG "%s: STA %pM in PS mode, but pspoll "
 414                       "set -> send frame\n", tx->dev->name,
 415                       sta->sta.addr);
 416        }
 417#endif /* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
 418
 419        return TX_CONTINUE;
 420}
 421
 422static ieee80211_tx_result debug_noinline
 423ieee80211_tx_h_ps_buf(struct ieee80211_tx_data *tx)
 424{
 425        if (unlikely(tx->flags & IEEE80211_TX_PS_BUFFERED))
 426                return TX_CONTINUE;
 427
 428        if (tx->flags & IEEE80211_TX_UNICAST)
 429                return ieee80211_tx_h_unicast_ps_buf(tx);
 430        else
 431                return ieee80211_tx_h_multicast_ps_buf(tx);
 432}
 433
 434static ieee80211_tx_result debug_noinline
 435ieee80211_tx_h_select_key(struct ieee80211_tx_data *tx)
 436{
 437        struct ieee80211_key *key = NULL;
 438        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
 439        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data;
 440
 441        if (unlikely(info->flags & IEEE80211_TX_INTFL_DONT_ENCRYPT))
 442                tx->key = NULL;
 443        else if (tx->sta && (key = rcu_dereference(tx->sta->key)))
 444                tx->key = key;
 445        else if (ieee80211_is_mgmt(hdr->frame_control) &&
 446                 (key = rcu_dereference(tx->sdata->default_mgmt_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->skb->protocol != cpu_to_be16(ETH_P_PAE)) &&
 452                 !(info->flags & IEEE80211_TX_CTL_INJECTED) &&
 453                 (!ieee80211_is_robust_mgmt_frame(hdr) ||
 454                  (ieee80211_is_action(hdr->frame_control) &&
 455                   tx->sta && test_sta_flags(tx->sta, WLAN_STA_MFP)))) {
 456                I802_DEBUG_INC(tx->local->tx_handlers_drop_unencrypted);
 457                return TX_DROP;
 458        } else
 459                tx->key = NULL;
 460
 461        if (tx->key) {
 462                tx->key->tx_rx_count++;
 463                /* TODO: add threshold stuff again */
 464
 465                switch (tx->key->conf.alg) {
 466                case ALG_WEP:
 467                        if (ieee80211_is_auth(hdr->frame_control))
 468                                break;
 469                case ALG_TKIP:
 470                        if (!ieee80211_is_data_present(hdr->frame_control))
 471                                tx->key = NULL;
 472                        break;
 473                case ALG_CCMP:
 474                        if (!ieee80211_is_data_present(hdr->frame_control) &&
 475                            !ieee80211_use_mfp(hdr->frame_control, tx->sta,
 476                                               tx->skb))
 477                                tx->key = NULL;
 478                        break;
 479                case ALG_AES_CMAC:
 480                        if (!ieee80211_is_mgmt(hdr->frame_control))
 481                                tx->key = NULL;
 482                        break;
 483                }
 484        }
 485
 486        if (!tx->key || !(tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE))
 487                info->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT;
 488
 489        return TX_CONTINUE;
 490}
 491
 492static ieee80211_tx_result debug_noinline
 493ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
 494{
 495        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
 496        struct ieee80211_hdr *hdr = (void *)tx->skb->data;
 497        struct ieee80211_supported_band *sband;
 498        struct ieee80211_rate *rate;
 499        int i, len;
 500        bool inval = false, rts = false, short_preamble = false;
 501        struct ieee80211_tx_rate_control txrc;
 502        u32 sta_flags;
 503
 504        memset(&txrc, 0, sizeof(txrc));
 505
 506        sband = tx->local->hw.wiphy->bands[tx->channel->band];
 507
 508        len = min_t(int, tx->skb->len + FCS_LEN,
 509                         tx->local->hw.wiphy->frag_threshold);
 510
 511        /* set up the tx rate control struct we give the RC algo */
 512        txrc.hw = local_to_hw(tx->local);
 513        txrc.sband = sband;
 514        txrc.bss_conf = &tx->sdata->vif.bss_conf;
 515        txrc.skb = tx->skb;
 516        txrc.reported_rate.idx = -1;
 517        txrc.max_rate_idx = tx->sdata->max_ratectrl_rateidx;
 518
 519        /* set up RTS protection if desired */
 520        if (len > tx->local->hw.wiphy->rts_threshold) {
 521                txrc.rts = rts = true;
 522        }
 523
 524        /*
 525         * Use short preamble if the BSS can handle it, but not for
 526         * management frames unless we know the receiver can handle
 527         * that -- the management frame might be to a station that
 528         * just wants a probe response.
 529         */
 530        if (tx->sdata->vif.bss_conf.use_short_preamble &&
 531            (ieee80211_is_data(hdr->frame_control) ||
 532             (tx->sta && test_sta_flags(tx->sta, WLAN_STA_SHORT_PREAMBLE))))
 533                txrc.short_preamble = short_preamble = true;
 534
 535        sta_flags = tx->sta ? get_sta_flags(tx->sta) : 0;
 536
 537        /*
 538         * Lets not bother rate control if we're associated and cannot
 539         * talk to the sta. This should not happen.
 540         */
 541        if (WARN(test_bit(SCAN_SW_SCANNING, &tx->local->scanning) &&
 542                 (sta_flags & WLAN_STA_ASSOC) &&
 543                 !rate_usable_index_exists(sband, &tx->sta->sta),
 544                 "%s: Dropped data frame as no usable bitrate found while "
 545                 "scanning and associated. Target station: "
 546                 "%pM on %d GHz band\n",
 547                 tx->dev->name, hdr->addr1,
 548                 tx->channel->band ? 5 : 2))
 549                return TX_DROP;
 550
 551        /*
 552         * If we're associated with the sta at this point we know we can at
 553         * least send the frame at the lowest bit rate.
 554         */
 555        rate_control_get_rate(tx->sdata, tx->sta, &txrc);
 556
 557        if (unlikely(info->control.rates[0].idx < 0))
 558                return TX_DROP;
 559
 560        if (txrc.reported_rate.idx < 0)
 561                txrc.reported_rate = info->control.rates[0];
 562
 563        if (tx->sta)
 564                tx->sta->last_tx_rate = txrc.reported_rate;
 565
 566        if (unlikely(!info->control.rates[0].count))
 567                info->control.rates[0].count = 1;
 568
 569        if (WARN_ON_ONCE((info->control.rates[0].count > 1) &&
 570                         (info->flags & IEEE80211_TX_CTL_NO_ACK)))
 571                info->control.rates[0].count = 1;
 572
 573        if (is_multicast_ether_addr(hdr->addr1)) {
 574                /*
 575                 * XXX: verify the rate is in the basic rateset
 576                 */
 577                return TX_CONTINUE;
 578        }
 579
 580        /*
 581         * set up the RTS/CTS rate as the fastest basic rate
 582         * that is not faster than the data rate
 583         *
 584         * XXX: Should this check all retry rates?
 585         */
 586        if (!(info->control.rates[0].flags & IEEE80211_TX_RC_MCS)) {
 587                s8 baserate = 0;
 588
 589                rate = &sband->bitrates[info->control.rates[0].idx];
 590
 591                for (i = 0; i < sband->n_bitrates; i++) {
 592                        /* must be a basic rate */
 593                        if (!(tx->sdata->vif.bss_conf.basic_rates & BIT(i)))
 594                                continue;
 595                        /* must not be faster than the data rate */
 596                        if (sband->bitrates[i].bitrate > rate->bitrate)
 597                                continue;
 598                        /* maximum */
 599                        if (sband->bitrates[baserate].bitrate <
 600                             sband->bitrates[i].bitrate)
 601                                baserate = i;
 602                }
 603
 604                info->control.rts_cts_rate_idx = baserate;
 605        }
 606
 607        for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
 608                /*
 609                 * make sure there's no valid rate following
 610                 * an invalid one, just in case drivers don't
 611                 * take the API seriously to stop at -1.
 612                 */
 613                if (inval) {
 614                        info->control.rates[i].idx = -1;
 615                        continue;
 616                }
 617                if (info->control.rates[i].idx < 0) {
 618                        inval = true;
 619                        continue;
 620                }
 621
 622                /*
 623                 * For now assume MCS is already set up correctly, this
 624                 * needs to be fixed.
 625                 */
 626                if (info->control.rates[i].flags & IEEE80211_TX_RC_MCS) {
 627                        WARN_ON(info->control.rates[i].idx > 76);
 628                        continue;
 629                }
 630
 631                /* set up RTS protection if desired */
 632                if (rts)
 633                        info->control.rates[i].flags |=
 634                                IEEE80211_TX_RC_USE_RTS_CTS;
 635
 636                /* RC is busted */
 637                if (WARN_ON_ONCE(info->control.rates[i].idx >=
 638                                 sband->n_bitrates)) {
 639                        info->control.rates[i].idx = -1;
 640                        continue;
 641                }
 642
 643                rate = &sband->bitrates[info->control.rates[i].idx];
 644
 645                /* set up short preamble */
 646                if (short_preamble &&
 647                    rate->flags & IEEE80211_RATE_SHORT_PREAMBLE)
 648                        info->control.rates[i].flags |=
 649                                IEEE80211_TX_RC_USE_SHORT_PREAMBLE;
 650
 651                /* set up G protection */
 652                if (!rts && tx->sdata->vif.bss_conf.use_cts_prot &&
 653                    rate->flags & IEEE80211_RATE_ERP_G)
 654                        info->control.rates[i].flags |=
 655                                IEEE80211_TX_RC_USE_CTS_PROTECT;
 656        }
 657
 658        return TX_CONTINUE;
 659}
 660
 661static ieee80211_tx_result debug_noinline
 662ieee80211_tx_h_misc(struct ieee80211_tx_data *tx)
 663{
 664        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
 665
 666        if (tx->sta)
 667                info->control.sta = &tx->sta->sta;
 668
 669        return TX_CONTINUE;
 670}
 671
 672static ieee80211_tx_result debug_noinline
 673ieee80211_tx_h_sequence(struct ieee80211_tx_data *tx)
 674{
 675        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
 676        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data;
 677        u16 *seq;
 678        u8 *qc;
 679        int tid;
 680
 681        /*
 682         * Packet injection may want to control the sequence
 683         * number, if we have no matching interface then we
 684         * neither assign one ourselves nor ask the driver to.
 685         */
 686        if (unlikely(info->control.vif->type == NL80211_IFTYPE_MONITOR))
 687                return TX_CONTINUE;
 688
 689        if (unlikely(ieee80211_is_ctl(hdr->frame_control)))
 690                return TX_CONTINUE;
 691
 692        if (ieee80211_hdrlen(hdr->frame_control) < 24)
 693                return TX_CONTINUE;
 694
 695        /*
 696         * Anything but QoS data that has a sequence number field
 697         * (is long enough) gets a sequence number from the global
 698         * counter.
 699         */
 700        if (!ieee80211_is_data_qos(hdr->frame_control)) {
 701                /* driver should assign sequence number */
 702                info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ;
 703                /* for pure STA mode without beacons, we can do it */
 704                hdr->seq_ctrl = cpu_to_le16(tx->sdata->sequence_number);
 705                tx->sdata->sequence_number += 0x10;
 706                return TX_CONTINUE;
 707        }
 708
 709        /*
 710         * This should be true for injected/management frames only, for
 711         * management frames we have set the IEEE80211_TX_CTL_ASSIGN_SEQ
 712         * above since they are not QoS-data frames.
 713         */
 714        if (!tx->sta)
 715                return TX_CONTINUE;
 716
 717        /* include per-STA, per-TID sequence counter */
 718
 719        qc = ieee80211_get_qos_ctl(hdr);
 720        tid = *qc & IEEE80211_QOS_CTL_TID_MASK;
 721        seq = &tx->sta->tid_seq[tid];
 722
 723        hdr->seq_ctrl = cpu_to_le16(*seq);
 724
 725        /* Increase the sequence number. */
 726        *seq = (*seq + 0x10) & IEEE80211_SCTL_SEQ;
 727
 728        return TX_CONTINUE;
 729}
 730
 731static int ieee80211_fragment(struct ieee80211_local *local,
 732                              struct sk_buff *skb, int hdrlen,
 733                              int frag_threshold)
 734{
 735        struct sk_buff *tail = skb, *tmp;
 736        int per_fragm = frag_threshold - hdrlen - FCS_LEN;
 737        int pos = hdrlen + per_fragm;
 738        int rem = skb->len - hdrlen - per_fragm;
 739
 740        if (WARN_ON(rem < 0))
 741                return -EINVAL;
 742
 743        while (rem) {
 744                int fraglen = per_fragm;
 745
 746                if (fraglen > rem)
 747                        fraglen = rem;
 748                rem -= fraglen;
 749                tmp = dev_alloc_skb(local->tx_headroom +
 750                                    frag_threshold +
 751                                    IEEE80211_ENCRYPT_HEADROOM +
 752                                    IEEE80211_ENCRYPT_TAILROOM);
 753                if (!tmp)
 754                        return -ENOMEM;
 755                tail->next = tmp;
 756                tail = tmp;
 757                skb_reserve(tmp, local->tx_headroom +
 758                                 IEEE80211_ENCRYPT_HEADROOM);
 759                /* copy control information */
 760                memcpy(tmp->cb, skb->cb, sizeof(tmp->cb));
 761                skb_copy_queue_mapping(tmp, skb);
 762                tmp->priority = skb->priority;
 763                tmp->dev = skb->dev;
 764
 765                /* copy header and data */
 766                memcpy(skb_put(tmp, hdrlen), skb->data, hdrlen);
 767                memcpy(skb_put(tmp, fraglen), skb->data + pos, fraglen);
 768
 769                pos += fraglen;
 770        }
 771
 772        skb->len = hdrlen + per_fragm;
 773        return 0;
 774}
 775
 776static ieee80211_tx_result debug_noinline
 777ieee80211_tx_h_fragment(struct ieee80211_tx_data *tx)
 778{
 779        struct sk_buff *skb = tx->skb;
 780        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 781        struct ieee80211_hdr *hdr = (void *)skb->data;
 782        int frag_threshold = tx->local->hw.wiphy->frag_threshold;
 783        int hdrlen;
 784        int fragnum;
 785
 786        if (!(tx->flags & IEEE80211_TX_FRAGMENTED))
 787                return TX_CONTINUE;
 788
 789        /*
 790         * Warn when submitting a fragmented A-MPDU frame and drop it.
 791         * This scenario is handled in ieee80211_tx_prepare but extra
 792         * caution taken here as fragmented ampdu may cause Tx stop.
 793         */
 794        if (WARN_ON(info->flags & IEEE80211_TX_CTL_AMPDU))
 795                return TX_DROP;
 796
 797        hdrlen = ieee80211_hdrlen(hdr->frame_control);
 798
 799        /* internal error, why is TX_FRAGMENTED set? */
 800        if (WARN_ON(skb->len + FCS_LEN <= frag_threshold))
 801                return TX_DROP;
 802
 803        /*
 804         * Now fragment the frame. This will allocate all the fragments and
 805         * chain them (using skb as the first fragment) to skb->next.
 806         * During transmission, we will remove the successfully transmitted
 807         * fragments from this list. When the low-level driver rejects one
 808         * of the fragments then we will simply pretend to accept the skb
 809         * but store it away as pending.
 810         */
 811        if (ieee80211_fragment(tx->local, skb, hdrlen, frag_threshold))
 812                return TX_DROP;
 813
 814        /* update duration/seq/flags of fragments */
 815        fragnum = 0;
 816        do {
 817                int next_len;
 818                const __le16 morefrags = cpu_to_le16(IEEE80211_FCTL_MOREFRAGS);
 819
 820                hdr = (void *)skb->data;
 821                info = IEEE80211_SKB_CB(skb);
 822
 823                if (skb->next) {
 824                        hdr->frame_control |= morefrags;
 825                        next_len = skb->next->len;
 826                        /*
 827                         * No multi-rate retries for fragmented frames, that
 828                         * would completely throw off the NAV at other STAs.
 829                         */
 830                        info->control.rates[1].idx = -1;
 831                        info->control.rates[2].idx = -1;
 832                        info->control.rates[3].idx = -1;
 833                        info->control.rates[4].idx = -1;
 834                        BUILD_BUG_ON(IEEE80211_TX_MAX_RATES != 5);
 835                        info->flags &= ~IEEE80211_TX_CTL_RATE_CTRL_PROBE;
 836                } else {
 837                        hdr->frame_control &= ~morefrags;
 838                        next_len = 0;
 839                }
 840                hdr->duration_id = ieee80211_duration(tx, 0, next_len);
 841                hdr->seq_ctrl |= cpu_to_le16(fragnum & IEEE80211_SCTL_FRAG);
 842                fragnum++;
 843        } while ((skb = skb->next));
 844
 845        return TX_CONTINUE;
 846}
 847
 848static ieee80211_tx_result debug_noinline
 849ieee80211_tx_h_stats(struct ieee80211_tx_data *tx)
 850{
 851        struct sk_buff *skb = tx->skb;
 852
 853        if (!tx->sta)
 854                return TX_CONTINUE;
 855
 856        tx->sta->tx_packets++;
 857        do {
 858                tx->sta->tx_fragments++;
 859                tx->sta->tx_bytes += skb->len;
 860        } while ((skb = skb->next));
 861
 862        return TX_CONTINUE;
 863}
 864
 865static ieee80211_tx_result debug_noinline
 866ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx)
 867{
 868        if (!tx->key)
 869                return TX_CONTINUE;
 870
 871        switch (tx->key->conf.alg) {
 872        case ALG_WEP:
 873                return ieee80211_crypto_wep_encrypt(tx);
 874        case ALG_TKIP:
 875                return ieee80211_crypto_tkip_encrypt(tx);
 876        case ALG_CCMP:
 877                return ieee80211_crypto_ccmp_encrypt(tx);
 878        case ALG_AES_CMAC:
 879                return ieee80211_crypto_aes_cmac_encrypt(tx);
 880        }
 881
 882        /* not reached */
 883        WARN_ON(1);
 884        return TX_DROP;
 885}
 886
 887static ieee80211_tx_result debug_noinline
 888ieee80211_tx_h_calculate_duration(struct ieee80211_tx_data *tx)
 889{
 890        struct sk_buff *skb = tx->skb;
 891        struct ieee80211_hdr *hdr;
 892        int next_len;
 893        bool group_addr;
 894
 895        do {
 896                hdr = (void *) skb->data;
 897                if (unlikely(ieee80211_is_pspoll(hdr->frame_control)))
 898                        break; /* must not overwrite AID */
 899                next_len = skb->next ? skb->next->len : 0;
 900                group_addr = is_multicast_ether_addr(hdr->addr1);
 901
 902                hdr->duration_id =
 903                        ieee80211_duration(tx, group_addr, next_len);
 904        } while ((skb = skb->next));
 905
 906        return TX_CONTINUE;
 907}
 908
 909/* actual transmit path */
 910
 911/*
 912 * deal with packet injection down monitor interface
 913 * with Radiotap Header -- only called for monitor mode interface
 914 */
 915static bool __ieee80211_parse_tx_radiotap(struct ieee80211_tx_data *tx,
 916                                          struct sk_buff *skb)
 917{
 918        /*
 919         * this is the moment to interpret and discard the radiotap header that
 920         * must be at the start of the packet injected in Monitor mode
 921         *
 922         * Need to take some care with endian-ness since radiotap
 923         * args are little-endian
 924         */
 925
 926        struct ieee80211_radiotap_iterator iterator;
 927        struct ieee80211_radiotap_header *rthdr =
 928                (struct ieee80211_radiotap_header *) skb->data;
 929        struct ieee80211_supported_band *sband;
 930        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 931        int ret = ieee80211_radiotap_iterator_init(&iterator, rthdr, skb->len);
 932
 933        sband = tx->local->hw.wiphy->bands[tx->channel->band];
 934
 935        info->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT;
 936        tx->flags &= ~IEEE80211_TX_FRAGMENTED;
 937
 938        /*
 939         * for every radiotap entry that is present
 940         * (ieee80211_radiotap_iterator_next returns -ENOENT when no more
 941         * entries present, or -EINVAL on error)
 942         */
 943
 944        while (!ret) {
 945                ret = ieee80211_radiotap_iterator_next(&iterator);
 946
 947                if (ret)
 948                        continue;
 949
 950                /* see if this argument is something we can use */
 951                switch (iterator.this_arg_index) {
 952                /*
 953                 * You must take care when dereferencing iterator.this_arg
 954                 * for multibyte types... the pointer is not aligned.  Use
 955                 * get_unaligned((type *)iterator.this_arg) to dereference
 956                 * iterator.this_arg for type "type" safely on all arches.
 957                */
 958                case IEEE80211_RADIOTAP_FLAGS:
 959                        if (*iterator.this_arg & IEEE80211_RADIOTAP_F_FCS) {
 960                                /*
 961                                 * this indicates that the skb we have been
 962                                 * handed has the 32-bit FCS CRC at the end...
 963                                 * we should react to that by snipping it off
 964                                 * because it will be recomputed and added
 965                                 * on transmission
 966                                 */
 967                                if (skb->len < (iterator.max_length + FCS_LEN))
 968                                        return false;
 969
 970                                skb_trim(skb, skb->len - FCS_LEN);
 971                        }
 972                        if (*iterator.this_arg & IEEE80211_RADIOTAP_F_WEP)
 973                                info->flags &= ~IEEE80211_TX_INTFL_DONT_ENCRYPT;
 974                        if (*iterator.this_arg & IEEE80211_RADIOTAP_F_FRAG)
 975                                tx->flags |= IEEE80211_TX_FRAGMENTED;
 976                        break;
 977
 978                /*
 979                 * Please update the file
 980                 * Documentation/networking/mac80211-injection.txt
 981                 * when parsing new fields here.
 982                 */
 983
 984                default:
 985                        break;
 986                }
 987        }
 988
 989        if (ret != -ENOENT) /* ie, if we didn't simply run out of fields */
 990                return false;
 991
 992        /*
 993         * remove the radiotap header
 994         * iterator->max_length was sanity-checked against
 995         * skb->len by iterator init
 996         */
 997        skb_pull(skb, iterator.max_length);
 998
 999        return true;
1000}
1001
1002/*
1003 * initialises @tx
1004 */
1005static ieee80211_tx_result
1006ieee80211_tx_prepare(struct ieee80211_sub_if_data *sdata,
1007                     struct ieee80211_tx_data *tx,
1008                     struct sk_buff *skb)
1009{
1010        struct ieee80211_local *local = sdata->local;
1011        struct ieee80211_hdr *hdr;
1012        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1013        int hdrlen, tid;
1014        u8 *qc, *state;
1015        bool queued = false;
1016
1017        memset(tx, 0, sizeof(*tx));
1018        tx->skb = skb;
1019        tx->dev = sdata->dev; /* use original interface */
1020        tx->local = local;
1021        tx->sdata = sdata;
1022        tx->channel = local->hw.conf.channel;
1023        /*
1024         * Set this flag (used below to indicate "automatic fragmentation"),
1025         * it will be cleared/left by radiotap as desired.
1026         */
1027        tx->flags |= IEEE80211_TX_FRAGMENTED;
1028
1029        /* process and remove the injection radiotap header */
1030        if (unlikely(info->flags & IEEE80211_TX_CTL_INJECTED)) {
1031                if (!__ieee80211_parse_tx_radiotap(tx, skb))
1032                        return TX_DROP;
1033
1034                /*
1035                 * __ieee80211_parse_tx_radiotap has now removed
1036                 * the radiotap header that was present and pre-filled
1037                 * 'tx' with tx control information.
1038                 */
1039        }
1040
1041        /*
1042         * If this flag is set to true anywhere, and we get here,
1043         * we are doing the needed processing, so remove the flag
1044         * now.
1045         */
1046        info->flags &= ~IEEE80211_TX_INTFL_NEED_TXPROCESSING;
1047
1048        hdr = (struct ieee80211_hdr *) skb->data;
1049
1050        tx->sta = sta_info_get(local, hdr->addr1);
1051
1052        if (tx->sta && ieee80211_is_data_qos(hdr->frame_control) &&
1053            (local->hw.flags & IEEE80211_HW_AMPDU_AGGREGATION)) {
1054                unsigned long flags;
1055                struct tid_ampdu_tx *tid_tx;
1056
1057                qc = ieee80211_get_qos_ctl(hdr);
1058                tid = *qc & IEEE80211_QOS_CTL_TID_MASK;
1059
1060                spin_lock_irqsave(&tx->sta->lock, flags);
1061                /*
1062                 * XXX: This spinlock could be fairly expensive, but see the
1063                 *      comment in agg-tx.c:ieee80211_agg_tx_operational().
1064                 *      One way to solve this would be to do something RCU-like
1065                 *      for managing the tid_tx struct and using atomic bitops
1066                 *      for the actual state -- by introducing an actual
1067                 *      'operational' bit that would be possible. It would
1068                 *      require changing ieee80211_agg_tx_operational() to
1069                 *      set that bit, and changing the way tid_tx is managed
1070                 *      everywhere, including races between that bit and
1071                 *      tid_tx going away (tid_tx being added can be easily
1072                 *      committed to memory before the 'operational' bit).
1073                 */
1074                tid_tx = tx->sta->ampdu_mlme.tid_tx[tid];
1075                state = &tx->sta->ampdu_mlme.tid_state_tx[tid];
1076                if (*state == HT_AGG_STATE_OPERATIONAL) {
1077                        info->flags |= IEEE80211_TX_CTL_AMPDU;
1078                } else if (*state != HT_AGG_STATE_IDLE) {
1079                        /* in progress */
1080                        queued = true;
1081                        info->control.vif = &sdata->vif;
1082                        info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
1083                        __skb_queue_tail(&tid_tx->pending, skb);
1084                }
1085                spin_unlock_irqrestore(&tx->sta->lock, flags);
1086
1087                if (unlikely(queued))
1088                        return TX_QUEUED;
1089        }
1090
1091        if (is_multicast_ether_addr(hdr->addr1)) {
1092                tx->flags &= ~IEEE80211_TX_UNICAST;
1093                info->flags |= IEEE80211_TX_CTL_NO_ACK;
1094        } else {
1095                tx->flags |= IEEE80211_TX_UNICAST;
1096                if (unlikely(local->wifi_wme_noack_test))
1097                        info->flags |= IEEE80211_TX_CTL_NO_ACK;
1098                else
1099                        info->flags &= ~IEEE80211_TX_CTL_NO_ACK;
1100        }
1101
1102        if (tx->flags & IEEE80211_TX_FRAGMENTED) {
1103                if ((tx->flags & IEEE80211_TX_UNICAST) &&
1104                    skb->len + FCS_LEN > local->hw.wiphy->frag_threshold &&
1105                    !(info->flags & IEEE80211_TX_CTL_AMPDU))
1106                        tx->flags |= IEEE80211_TX_FRAGMENTED;
1107                else
1108                        tx->flags &= ~IEEE80211_TX_FRAGMENTED;
1109        }
1110
1111        if (!tx->sta)
1112                info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT;
1113        else if (test_and_clear_sta_flags(tx->sta, WLAN_STA_CLEAR_PS_FILT))
1114                info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT;
1115
1116        hdrlen = ieee80211_hdrlen(hdr->frame_control);
1117        if (skb->len > hdrlen + sizeof(rfc1042_header) + 2) {
1118                u8 *pos = &skb->data[hdrlen + sizeof(rfc1042_header)];
1119                tx->ethertype = (pos[0] << 8) | pos[1];
1120        }
1121        info->flags |= IEEE80211_TX_CTL_FIRST_FRAGMENT;
1122
1123        return TX_CONTINUE;
1124}
1125
1126static int __ieee80211_tx(struct ieee80211_local *local,
1127                          struct sk_buff **skbp,
1128                          struct sta_info *sta,
1129                          bool txpending)
1130{
1131        struct sk_buff *skb = *skbp, *next;
1132        struct ieee80211_tx_info *info;
1133        struct ieee80211_sub_if_data *sdata;
1134        unsigned long flags;
1135        int ret, len;
1136        bool fragm = false;
1137
1138        while (skb) {
1139                int q = skb_get_queue_mapping(skb);
1140
1141                spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
1142                ret = IEEE80211_TX_OK;
1143                if (local->queue_stop_reasons[q] ||
1144                    (!txpending && !skb_queue_empty(&local->pending[q])))
1145                        ret = IEEE80211_TX_PENDING;
1146                spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
1147                if (ret != IEEE80211_TX_OK)
1148                        return ret;
1149
1150                info = IEEE80211_SKB_CB(skb);
1151
1152                if (fragm)
1153                        info->flags &= ~(IEEE80211_TX_CTL_CLEAR_PS_FILT |
1154                                         IEEE80211_TX_CTL_FIRST_FRAGMENT);
1155
1156                next = skb->next;
1157                len = skb->len;
1158
1159                if (next)
1160                        info->flags |= IEEE80211_TX_CTL_MORE_FRAMES;
1161
1162                sdata = vif_to_sdata(info->control.vif);
1163
1164                switch (sdata->vif.type) {
1165                case NL80211_IFTYPE_MONITOR:
1166                        info->control.vif = NULL;
1167                        break;
1168                case NL80211_IFTYPE_AP_VLAN:
1169                        info->control.vif = &container_of(sdata->bss,
1170                                struct ieee80211_sub_if_data, u.ap)->vif;
1171                        break;
1172                default:
1173                        /* keep */
1174                        break;
1175                }
1176
1177                ret = drv_tx(local, skb);
1178                if (WARN_ON(ret != NETDEV_TX_OK && skb->len != len)) {
1179                        dev_kfree_skb(skb);
1180                        ret = NETDEV_TX_OK;
1181                }
1182                if (ret != NETDEV_TX_OK) {
1183                        info->control.vif = &sdata->vif;
1184                        return IEEE80211_TX_AGAIN;
1185                }
1186
1187                *skbp = skb = next;
1188                ieee80211_led_tx(local, 1);
1189                fragm = true;
1190        }
1191
1192        return IEEE80211_TX_OK;
1193}
1194
1195/*
1196 * Invoke TX handlers, return 0 on success and non-zero if the
1197 * frame was dropped or queued.
1198 */
1199static int invoke_tx_handlers(struct ieee80211_tx_data *tx)
1200{
1201        struct sk_buff *skb = tx->skb;
1202        ieee80211_tx_result res = TX_DROP;
1203
1204#define CALL_TXH(txh)           \
1205        res = txh(tx);          \
1206        if (res != TX_CONTINUE) \
1207                goto txh_done;
1208
1209        CALL_TXH(ieee80211_tx_h_check_assoc)
1210        CALL_TXH(ieee80211_tx_h_ps_buf)
1211        CALL_TXH(ieee80211_tx_h_select_key)
1212        CALL_TXH(ieee80211_tx_h_michael_mic_add)
1213        CALL_TXH(ieee80211_tx_h_rate_ctrl)
1214        CALL_TXH(ieee80211_tx_h_misc)
1215        CALL_TXH(ieee80211_tx_h_sequence)
1216        CALL_TXH(ieee80211_tx_h_fragment)
1217        /* handlers after fragment must be aware of tx info fragmentation! */
1218        CALL_TXH(ieee80211_tx_h_stats)
1219        CALL_TXH(ieee80211_tx_h_encrypt)
1220        CALL_TXH(ieee80211_tx_h_calculate_duration)
1221#undef CALL_TXH
1222
1223 txh_done:
1224        if (unlikely(res == TX_DROP)) {
1225                I802_DEBUG_INC(tx->local->tx_handlers_drop);
1226                while (skb) {
1227                        struct sk_buff *next;
1228
1229                        next = skb->next;
1230                        dev_kfree_skb(skb);
1231                        skb = next;
1232                }
1233                return -1;
1234        } else if (unlikely(res == TX_QUEUED)) {
1235                I802_DEBUG_INC(tx->local->tx_handlers_queued);
1236                return -1;
1237        }
1238
1239        return 0;
1240}
1241
1242static void ieee80211_tx(struct ieee80211_sub_if_data *sdata,
1243                         struct sk_buff *skb, bool txpending)
1244{
1245        struct ieee80211_local *local = sdata->local;
1246        struct ieee80211_tx_data tx;
1247        ieee80211_tx_result res_prepare;
1248        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1249        struct sk_buff *next;
1250        unsigned long flags;
1251        int ret, retries;
1252        u16 queue;
1253
1254        queue = skb_get_queue_mapping(skb);
1255
1256        if (unlikely(skb->len < 10)) {
1257                dev_kfree_skb(skb);
1258                return;
1259        }
1260
1261        rcu_read_lock();
1262
1263        /* initialises tx */
1264        res_prepare = ieee80211_tx_prepare(sdata, &tx, skb);
1265
1266        if (unlikely(res_prepare == TX_DROP)) {
1267                dev_kfree_skb(skb);
1268                rcu_read_unlock();
1269                return;
1270        } else if (unlikely(res_prepare == TX_QUEUED)) {
1271                rcu_read_unlock();
1272                return;
1273        }
1274
1275        tx.channel = local->hw.conf.channel;
1276        info->band = tx.channel->band;
1277
1278        if (invoke_tx_handlers(&tx))
1279                goto out;
1280
1281        retries = 0;
1282 retry:
1283        ret = __ieee80211_tx(local, &tx.skb, tx.sta, txpending);
1284        switch (ret) {
1285        case IEEE80211_TX_OK:
1286                break;
1287        case IEEE80211_TX_AGAIN:
1288                /*
1289                 * Since there are no fragmented frames on A-MPDU
1290                 * queues, there's no reason for a driver to reject
1291                 * a frame there, warn and drop it.
1292                 */
1293                if (WARN_ON(info->flags & IEEE80211_TX_CTL_AMPDU))
1294                        goto drop;
1295                /* fall through */
1296        case IEEE80211_TX_PENDING:
1297                skb = tx.skb;
1298
1299                spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
1300
1301                if (local->queue_stop_reasons[queue] ||
1302                    !skb_queue_empty(&local->pending[queue])) {
1303                        /*
1304                         * if queue is stopped, queue up frames for later
1305                         * transmission from the tasklet
1306                         */
1307                        do {
1308                                next = skb->next;
1309                                skb->next = NULL;
1310                                if (unlikely(txpending))
1311                                        __skb_queue_head(&local->pending[queue],
1312                                                         skb);
1313                                else
1314                                        __skb_queue_tail(&local->pending[queue],
1315                                                         skb);
1316                        } while ((skb = next));
1317
1318                        spin_unlock_irqrestore(&local->queue_stop_reason_lock,
1319                                               flags);
1320                } else {
1321                        /*
1322                         * otherwise retry, but this is a race condition or
1323                         * a driver bug (which we warn about if it persists)
1324                         */
1325                        spin_unlock_irqrestore(&local->queue_stop_reason_lock,
1326                                               flags);
1327
1328                        retries++;
1329                        if (WARN(retries > 10, "tx refused but queue active\n"))
1330                                goto drop;
1331                        goto retry;
1332                }
1333        }
1334 out:
1335        rcu_read_unlock();
1336        return;
1337
1338 drop:
1339        rcu_read_unlock();
1340
1341        skb = tx.skb;
1342        while (skb) {
1343                next = skb->next;
1344                dev_kfree_skb(skb);
1345                skb = next;
1346        }
1347}
1348
1349/* device xmit handlers */
1350
1351static int ieee80211_skb_resize(struct ieee80211_local *local,
1352                                struct sk_buff *skb,
1353                                int head_need, bool may_encrypt)
1354{
1355        int tail_need = 0;
1356
1357        /*
1358         * This could be optimised, devices that do full hardware
1359         * crypto (including TKIP MMIC) need no tailroom... But we
1360         * have no drivers for such devices currently.
1361         */
1362        if (may_encrypt) {
1363                tail_need = IEEE80211_ENCRYPT_TAILROOM;
1364                tail_need -= skb_tailroom(skb);
1365                tail_need = max_t(int, tail_need, 0);
1366        }
1367
1368        if (head_need || tail_need) {
1369                /* Sorry. Can't account for this any more */
1370                skb_orphan(skb);
1371        }
1372
1373        if (skb_header_cloned(skb))
1374                I802_DEBUG_INC(local->tx_expand_skb_head_cloned);
1375        else
1376                I802_DEBUG_INC(local->tx_expand_skb_head);
1377
1378        if (pskb_expand_head(skb, head_need, tail_need, GFP_ATOMIC)) {
1379                printk(KERN_DEBUG "%s: failed to reallocate TX buffer\n",
1380                       wiphy_name(local->hw.wiphy));
1381                return -ENOMEM;
1382        }
1383
1384        /* update truesize too */
1385        skb->truesize += head_need + tail_need;
1386
1387        return 0;
1388}
1389
1390static void ieee80211_xmit(struct ieee80211_sub_if_data *sdata,
1391                           struct sk_buff *skb)
1392{
1393        struct ieee80211_local *local = sdata->local;
1394        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1395        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
1396        struct ieee80211_sub_if_data *tmp_sdata;
1397        int headroom;
1398        bool may_encrypt;
1399
1400        dev_hold(sdata->dev);
1401
1402        if ((local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) &&
1403            local->hw.conf.dynamic_ps_timeout > 0 &&
1404            !(local->scanning) && local->ps_sdata) {
1405                if (local->hw.conf.flags & IEEE80211_CONF_PS) {
1406                        ieee80211_stop_queues_by_reason(&local->hw,
1407                                        IEEE80211_QUEUE_STOP_REASON_PS);
1408                        ieee80211_queue_work(&local->hw,
1409                                        &local->dynamic_ps_disable_work);
1410                }
1411
1412                mod_timer(&local->dynamic_ps_timer, jiffies +
1413                        msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout));
1414        }
1415
1416        info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
1417
1418        if (unlikely(sdata->vif.type == NL80211_IFTYPE_MONITOR)) {
1419                int hdrlen;
1420                u16 len_rthdr;
1421
1422                info->flags |= IEEE80211_TX_CTL_INJECTED;
1423
1424                len_rthdr = ieee80211_get_radiotap_len(skb->data);
1425                hdr = (struct ieee80211_hdr *)(skb->data + len_rthdr);
1426                hdrlen = ieee80211_hdrlen(hdr->frame_control);
1427
1428                /* check the header is complete in the frame */
1429                if (likely(skb->len >= len_rthdr + hdrlen)) {
1430                        /*
1431                         * We process outgoing injected frames that have a
1432                         * local address we handle as though they are our
1433                         * own frames.
1434                         * This code here isn't entirely correct, the local
1435                         * MAC address is not necessarily enough to find
1436                         * the interface to use; for that proper VLAN/WDS
1437                         * support we will need a different mechanism.
1438                         */
1439
1440                        rcu_read_lock();
1441                        list_for_each_entry_rcu(tmp_sdata, &local->interfaces,
1442                                                list) {
1443                                if (!netif_running(tmp_sdata->dev))
1444                                        continue;
1445                                if (tmp_sdata->vif.type != NL80211_IFTYPE_AP)
1446                                        continue;
1447                                if (compare_ether_addr(tmp_sdata->dev->dev_addr,
1448                                                       hdr->addr2) == 0) {
1449                                        dev_hold(tmp_sdata->dev);
1450                                        dev_put(sdata->dev);
1451                                        sdata = tmp_sdata;
1452                                        break;
1453                                }
1454                        }
1455                        rcu_read_unlock();
1456                }
1457        }
1458
1459        may_encrypt = !(info->flags & IEEE80211_TX_INTFL_DONT_ENCRYPT);
1460
1461        headroom = local->tx_headroom;
1462        if (may_encrypt)
1463                headroom += IEEE80211_ENCRYPT_HEADROOM;
1464        headroom -= skb_headroom(skb);
1465        headroom = max_t(int, 0, headroom);
1466
1467        if (ieee80211_skb_resize(local, skb, headroom, may_encrypt)) {
1468                dev_kfree_skb(skb);
1469                dev_put(sdata->dev);
1470                return;
1471        }
1472
1473        info->control.vif = &sdata->vif;
1474
1475        if (ieee80211_vif_is_mesh(&sdata->vif) &&
1476            ieee80211_is_data(hdr->frame_control) &&
1477                !is_multicast_ether_addr(hdr->addr1))
1478                        if (mesh_nexthop_lookup(skb, sdata)) {
1479                                /* skb queued: don't free */
1480                                dev_put(sdata->dev);
1481                                return;
1482                        }
1483
1484        ieee80211_select_queue(local, skb);
1485        ieee80211_tx(sdata, skb, false);
1486        dev_put(sdata->dev);
1487}
1488
1489netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb,
1490                                         struct net_device *dev)
1491{
1492        struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
1493        struct ieee80211_channel *chan = local->hw.conf.channel;
1494        struct ieee80211_radiotap_header *prthdr =
1495                (struct ieee80211_radiotap_header *)skb->data;
1496        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1497        u16 len_rthdr;
1498
1499        /*
1500         * Frame injection is not allowed if beaconing is not allowed
1501         * or if we need radar detection. Beaconing is usually not allowed when
1502         * the mode or operation (Adhoc, AP, Mesh) does not support DFS.
1503         * Passive scan is also used in world regulatory domains where
1504         * your country is not known and as such it should be treated as
1505         * NO TX unless the channel is explicitly allowed in which case
1506         * your current regulatory domain would not have the passive scan
1507         * flag.
1508         *
1509         * Since AP mode uses monitor interfaces to inject/TX management
1510         * frames we can make AP mode the exception to this rule once it
1511         * supports radar detection as its implementation can deal with
1512         * radar detection by itself. We can do that later by adding a
1513         * monitor flag interfaces used for AP support.
1514         */
1515        if ((chan->flags & (IEEE80211_CHAN_NO_IBSS | IEEE80211_CHAN_RADAR |
1516             IEEE80211_CHAN_PASSIVE_SCAN)))
1517                goto fail;
1518
1519        /* check for not even having the fixed radiotap header part */
1520        if (unlikely(skb->len < sizeof(struct ieee80211_radiotap_header)))
1521                goto fail; /* too short to be possibly valid */
1522
1523        /* is it a header version we can trust to find length from? */
1524        if (unlikely(prthdr->it_version))
1525                goto fail; /* only version 0 is supported */
1526
1527        /* then there must be a radiotap header with a length we can use */
1528        len_rthdr = ieee80211_get_radiotap_len(skb->data);
1529
1530        /* does the skb contain enough to deliver on the alleged length? */
1531        if (unlikely(skb->len < len_rthdr))
1532                goto fail; /* skb too short for claimed rt header extent */
1533
1534        /*
1535         * fix up the pointers accounting for the radiotap
1536         * header still being in there.  We are being given
1537         * a precooked IEEE80211 header so no need for
1538         * normal processing
1539         */
1540        skb_set_mac_header(skb, len_rthdr);
1541        /*
1542         * these are just fixed to the end of the rt area since we
1543         * don't have any better information and at this point, nobody cares
1544         */
1545        skb_set_network_header(skb, len_rthdr);
1546        skb_set_transport_header(skb, len_rthdr);
1547
1548        memset(info, 0, sizeof(*info));
1549
1550        /* pass the radiotap header up to xmit */
1551        ieee80211_xmit(IEEE80211_DEV_TO_SUB_IF(dev), skb);
1552        return NETDEV_TX_OK;
1553
1554fail:
1555        dev_kfree_skb(skb);
1556        return NETDEV_TX_OK; /* meaning, we dealt with the skb */
1557}
1558
1559/**
1560 * ieee80211_subif_start_xmit - netif start_xmit function for Ethernet-type
1561 * subinterfaces (wlan#, WDS, and VLAN interfaces)
1562 * @skb: packet to be sent
1563 * @dev: incoming interface
1564 *
1565 * Returns: 0 on success (and frees skb in this case) or 1 on failure (skb will
1566 * not be freed, and caller is responsible for either retrying later or freeing
1567 * skb).
1568 *
1569 * This function takes in an Ethernet header and encapsulates it with suitable
1570 * IEEE 802.11 header based on which interface the packet is coming in. The
1571 * encapsulated packet will then be passed to master interface, wlan#.11, for
1572 * transmission (through low-level driver).
1573 */
1574netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
1575                                    struct net_device *dev)
1576{
1577        struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1578        struct ieee80211_local *local = sdata->local;
1579        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1580        int ret = NETDEV_TX_BUSY, head_need;
1581        u16 ethertype, hdrlen,  meshhdrlen = 0;
1582        __le16 fc;
1583        struct ieee80211_hdr hdr;
1584        struct ieee80211s_hdr mesh_hdr;
1585        const u8 *encaps_data;
1586        int encaps_len, skip_header_bytes;
1587        int nh_pos, h_pos;
1588        struct sta_info *sta;
1589        u32 sta_flags = 0;
1590
1591        if (unlikely(skb->len < ETH_HLEN)) {
1592                ret = NETDEV_TX_OK;
1593                goto fail;
1594        }
1595
1596        nh_pos = skb_network_header(skb) - skb->data;
1597        h_pos = skb_transport_header(skb) - skb->data;
1598
1599        /* convert Ethernet header to proper 802.11 header (based on
1600         * operation mode) */
1601        ethertype = (skb->data[12] << 8) | skb->data[13];
1602        fc = cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA);
1603
1604        switch (sdata->vif.type) {
1605        case NL80211_IFTYPE_AP:
1606        case NL80211_IFTYPE_AP_VLAN:
1607                fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS);
1608                /* DA BSSID SA */
1609                memcpy(hdr.addr1, skb->data, ETH_ALEN);
1610                memcpy(hdr.addr2, dev->dev_addr, ETH_ALEN);
1611                memcpy(hdr.addr3, skb->data + ETH_ALEN, ETH_ALEN);
1612                hdrlen = 24;
1613                break;
1614        case NL80211_IFTYPE_WDS:
1615                fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS);
1616                /* RA TA DA SA */
1617                memcpy(hdr.addr1, sdata->u.wds.remote_addr, ETH_ALEN);
1618                memcpy(hdr.addr2, dev->dev_addr, ETH_ALEN);
1619                memcpy(hdr.addr3, skb->data, ETH_ALEN);
1620                memcpy(hdr.addr4, skb->data + ETH_ALEN, ETH_ALEN);
1621                hdrlen = 30;
1622                break;
1623#ifdef CONFIG_MAC80211_MESH
1624        case NL80211_IFTYPE_MESH_POINT:
1625                if (!sdata->u.mesh.mshcfg.dot11MeshTTL) {
1626                        /* Do not send frames with mesh_ttl == 0 */
1627                        sdata->u.mesh.mshstats.dropped_frames_ttl++;
1628                        ret = NETDEV_TX_OK;
1629                        goto fail;
1630                }
1631
1632                if (compare_ether_addr(dev->dev_addr,
1633                                          skb->data + ETH_ALEN) == 0) {
1634                        hdrlen = ieee80211_fill_mesh_addresses(&hdr, &fc,
1635                                        skb->data, skb->data + ETH_ALEN);
1636                        meshhdrlen = ieee80211_new_mesh_header(&mesh_hdr,
1637                                        sdata, NULL, NULL, NULL);
1638                } else {
1639                        /* packet from other interface */
1640                        struct mesh_path *mppath;
1641                        int is_mesh_mcast = 1;
1642                        char *mesh_da;
1643
1644                        rcu_read_lock();
1645                        if (is_multicast_ether_addr(skb->data))
1646                                /* DA TA mSA AE:SA */
1647                                mesh_da = skb->data;
1648                        else {
1649                                mppath = mpp_path_lookup(skb->data, sdata);
1650                                if (mppath) {
1651                                        /* RA TA mDA mSA AE:DA SA */
1652                                        mesh_da = mppath->mpp;
1653                                        is_mesh_mcast = 0;
1654                                } else
1655                                        /* DA TA mSA AE:SA */
1656                                        mesh_da = dev->broadcast;
1657                        }
1658                        hdrlen = ieee80211_fill_mesh_addresses(&hdr, &fc,
1659                                        mesh_da, dev->dev_addr);
1660                        rcu_read_unlock();
1661                        if (is_mesh_mcast)
1662                                meshhdrlen =
1663                                        ieee80211_new_mesh_header(&mesh_hdr,
1664                                                        sdata,
1665                                                        skb->data + ETH_ALEN,
1666                                                        NULL,
1667                                                        NULL);
1668                        else
1669                                meshhdrlen =
1670                                        ieee80211_new_mesh_header(&mesh_hdr,
1671                                                        sdata,
1672                                                        NULL,
1673                                                        skb->data,
1674                                                        skb->data + ETH_ALEN);
1675
1676                }
1677                break;
1678#endif
1679        case NL80211_IFTYPE_STATION:
1680                fc |= cpu_to_le16(IEEE80211_FCTL_TODS);
1681                /* BSSID SA DA */
1682                memcpy(hdr.addr1, sdata->u.mgd.bssid, ETH_ALEN);
1683                memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN);
1684                memcpy(hdr.addr3, skb->data, ETH_ALEN);
1685                hdrlen = 24;
1686                break;
1687        case NL80211_IFTYPE_ADHOC:
1688                /* DA SA BSSID */
1689                memcpy(hdr.addr1, skb->data, ETH_ALEN);
1690                memcpy(hdr.addr2, skb->data + ETH_ALEN, ETH_ALEN);
1691                memcpy(hdr.addr3, sdata->u.ibss.bssid, ETH_ALEN);
1692                hdrlen = 24;
1693                break;
1694        default:
1695                ret = NETDEV_TX_OK;
1696                goto fail;
1697        }
1698
1699        /*
1700         * There's no need to try to look up the destination
1701         * if it is a multicast address (which can only happen
1702         * in AP mode)
1703         */
1704        if (!is_multicast_ether_addr(hdr.addr1)) {
1705                rcu_read_lock();
1706                sta = sta_info_get(local, hdr.addr1);
1707                /* XXX: in the future, use sdata to look up the sta */
1708                if (sta && sta->sdata == sdata)
1709                        sta_flags = get_sta_flags(sta);
1710                rcu_read_unlock();
1711        }
1712
1713        /* receiver and we are QoS enabled, use a QoS type frame */
1714        if ((sta_flags & WLAN_STA_WME) && local->hw.queues >= 4) {
1715                fc |= cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
1716                hdrlen += 2;
1717        }
1718
1719        /*
1720         * Drop unicast frames to unauthorised stations unless they are
1721         * EAPOL frames from the local station.
1722         */
1723        if (!ieee80211_vif_is_mesh(&sdata->vif) &&
1724                unlikely(!is_multicast_ether_addr(hdr.addr1) &&
1725                      !(sta_flags & WLAN_STA_AUTHORIZED) &&
1726                      !(ethertype == ETH_P_PAE &&
1727                       compare_ether_addr(dev->dev_addr,
1728                                          skb->data + ETH_ALEN) == 0))) {
1729#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
1730                if (net_ratelimit())
1731                        printk(KERN_DEBUG "%s: dropped frame to %pM"
1732                               " (unauthorized port)\n", dev->name,
1733                               hdr.addr1);
1734#endif
1735
1736                I802_DEBUG_INC(local->tx_handlers_drop_unauth_port);
1737
1738                ret = NETDEV_TX_OK;
1739                goto fail;
1740        }
1741
1742        hdr.frame_control = fc;
1743        hdr.duration_id = 0;
1744        hdr.seq_ctrl = 0;
1745
1746        skip_header_bytes = ETH_HLEN;
1747        if (ethertype == ETH_P_AARP || ethertype == ETH_P_IPX) {
1748                encaps_data = bridge_tunnel_header;
1749                encaps_len = sizeof(bridge_tunnel_header);
1750                skip_header_bytes -= 2;
1751        } else if (ethertype >= 0x600) {
1752                encaps_data = rfc1042_header;
1753                encaps_len = sizeof(rfc1042_header);
1754                skip_header_bytes -= 2;
1755        } else {
1756                encaps_data = NULL;
1757                encaps_len = 0;
1758        }
1759
1760        skb_pull(skb, skip_header_bytes);
1761        nh_pos -= skip_header_bytes;
1762        h_pos -= skip_header_bytes;
1763
1764        head_need = hdrlen + encaps_len + meshhdrlen - skb_headroom(skb);
1765
1766        /*
1767         * So we need to modify the skb header and hence need a copy of
1768         * that. The head_need variable above doesn't, so far, include
1769         * the needed header space that we don't need right away. If we
1770         * can, then we don't reallocate right now but only after the
1771         * frame arrives at the master device (if it does...)
1772         *
1773         * If we cannot, however, then we will reallocate to include all
1774         * the ever needed space. Also, if we need to reallocate it anyway,
1775         * make it big enough for everything we may ever need.
1776         */
1777
1778        if (head_need > 0 || skb_cloned(skb)) {
1779                head_need += IEEE80211_ENCRYPT_HEADROOM;
1780                head_need += local->tx_headroom;
1781                head_need = max_t(int, 0, head_need);
1782                if (ieee80211_skb_resize(local, skb, head_need, true))
1783                        goto fail;
1784        }
1785
1786        if (encaps_data) {
1787                memcpy(skb_push(skb, encaps_len), encaps_data, encaps_len);
1788                nh_pos += encaps_len;
1789                h_pos += encaps_len;
1790        }
1791
1792        if (meshhdrlen > 0) {
1793                memcpy(skb_push(skb, meshhdrlen), &mesh_hdr, meshhdrlen);
1794                nh_pos += meshhdrlen;
1795                h_pos += meshhdrlen;
1796        }
1797
1798        if (ieee80211_is_data_qos(fc)) {
1799                __le16 *qos_control;
1800
1801                qos_control = (__le16*) skb_push(skb, 2);
1802                memcpy(skb_push(skb, hdrlen - 2), &hdr, hdrlen - 2);
1803                /*
1804                 * Maybe we could actually set some fields here, for now just
1805                 * initialise to zero to indicate no special operation.
1806                 */
1807                *qos_control = 0;
1808        } else
1809                memcpy(skb_push(skb, hdrlen), &hdr, hdrlen);
1810
1811        nh_pos += hdrlen;
1812        h_pos += hdrlen;
1813
1814        dev->stats.tx_packets++;
1815        dev->stats.tx_bytes += skb->len;
1816
1817        /* Update skb pointers to various headers since this modified frame
1818         * is going to go through Linux networking code that may potentially
1819         * need things like pointer to IP header. */
1820        skb_set_mac_header(skb, 0);
1821        skb_set_network_header(skb, nh_pos);
1822        skb_set_transport_header(skb, h_pos);
1823
1824        memset(info, 0, sizeof(*info));
1825
1826        dev->trans_start = jiffies;
1827        ieee80211_xmit(sdata, skb);
1828
1829        return NETDEV_TX_OK;
1830
1831 fail:
1832        if (ret == NETDEV_TX_OK)
1833                dev_kfree_skb(skb);
1834
1835        return ret;
1836}
1837
1838
1839/*
1840 * ieee80211_clear_tx_pending may not be called in a context where
1841 * it is possible that it packets could come in again.
1842 */
1843void ieee80211_clear_tx_pending(struct ieee80211_local *local)
1844{
1845        int i;
1846
1847        for (i = 0; i < local->hw.queues; i++)
1848                skb_queue_purge(&local->pending[i]);
1849}
1850
1851static bool ieee80211_tx_pending_skb(struct ieee80211_local *local,
1852                                     struct sk_buff *skb)
1853{
1854        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1855        struct ieee80211_sub_if_data *sdata;
1856        struct sta_info *sta;
1857        struct ieee80211_hdr *hdr;
1858        int ret;
1859        bool result = true;
1860
1861        sdata = vif_to_sdata(info->control.vif);
1862
1863        if (info->flags & IEEE80211_TX_INTFL_NEED_TXPROCESSING) {
1864                ieee80211_tx(sdata, skb, true);
1865        } else {
1866                hdr = (struct ieee80211_hdr *)skb->data;
1867                sta = sta_info_get(local, hdr->addr1);
1868
1869                ret = __ieee80211_tx(local, &skb, sta, true);
1870                if (ret != IEEE80211_TX_OK)
1871                        result = false;
1872        }
1873
1874        return result;
1875}
1876
1877/*
1878 * Transmit all pending packets. Called from tasklet.
1879 */
1880void ieee80211_tx_pending(unsigned long data)
1881{
1882        struct ieee80211_local *local = (struct ieee80211_local *)data;
1883        unsigned long flags;
1884        int i;
1885        bool txok;
1886
1887        rcu_read_lock();
1888
1889        spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
1890        for (i = 0; i < local->hw.queues; i++) {
1891                /*
1892                 * If queue is stopped by something other than due to pending
1893                 * frames, or we have no pending frames, proceed to next queue.
1894                 */
1895                if (local->queue_stop_reasons[i] ||
1896                    skb_queue_empty(&local->pending[i]))
1897                        continue;
1898
1899                while (!skb_queue_empty(&local->pending[i])) {
1900                        struct sk_buff *skb = __skb_dequeue(&local->pending[i]);
1901                        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1902                        struct ieee80211_sub_if_data *sdata;
1903
1904                        if (WARN_ON(!info->control.vif)) {
1905                                kfree_skb(skb);
1906                                continue;
1907                        }
1908
1909                        sdata = vif_to_sdata(info->control.vif);
1910                        dev_hold(sdata->dev);
1911                        spin_unlock_irqrestore(&local->queue_stop_reason_lock,
1912                                                flags);
1913
1914                        txok = ieee80211_tx_pending_skb(local, skb);
1915                        dev_put(sdata->dev);
1916                        if (!txok)
1917                                __skb_queue_head(&local->pending[i], skb);
1918                        spin_lock_irqsave(&local->queue_stop_reason_lock,
1919                                          flags);
1920                        if (!txok)
1921                                break;
1922                }
1923        }
1924        spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
1925
1926        rcu_read_unlock();
1927}
1928
1929/* functions for drivers to get certain frames */
1930
1931static void ieee80211_beacon_add_tim(struct ieee80211_if_ap *bss,
1932                                     struct sk_buff *skb,
1933                                     struct beacon_data *beacon)
1934{
1935        u8 *pos, *tim;
1936        int aid0 = 0;
1937        int i, have_bits = 0, n1, n2;
1938
1939        /* Generate bitmap for TIM only if there are any STAs in power save
1940         * mode. */
1941        if (atomic_read(&bss->num_sta_ps) > 0)
1942                /* in the hope that this is faster than
1943                 * checking byte-for-byte */
1944                have_bits = !bitmap_empty((unsigned long*)bss->tim,
1945                                          IEEE80211_MAX_AID+1);
1946
1947        if (bss->dtim_count == 0)
1948                bss->dtim_count = beacon->dtim_period - 1;
1949        else
1950                bss->dtim_count--;
1951
1952        tim = pos = (u8 *) skb_put(skb, 6);
1953        *pos++ = WLAN_EID_TIM;
1954        *pos++ = 4;
1955        *pos++ = bss->dtim_count;
1956        *pos++ = beacon->dtim_period;
1957
1958        if (bss->dtim_count == 0 && !skb_queue_empty(&bss->ps_bc_buf))
1959                aid0 = 1;
1960
1961        if (have_bits) {
1962                /* Find largest even number N1 so that bits numbered 1 through
1963                 * (N1 x 8) - 1 in the bitmap are 0 and number N2 so that bits
1964                 * (N2 + 1) x 8 through 2007 are 0. */
1965                n1 = 0;
1966                for (i = 0; i < IEEE80211_MAX_TIM_LEN; i++) {
1967                        if (bss->tim[i]) {
1968                                n1 = i & 0xfe;
1969                                break;
1970                        }
1971                }
1972                n2 = n1;
1973                for (i = IEEE80211_MAX_TIM_LEN - 1; i >= n1; i--) {
1974                        if (bss->tim[i]) {
1975                                n2 = i;
1976                                break;
1977                        }
1978                }
1979
1980                /* Bitmap control */
1981                *pos++ = n1 | aid0;
1982                /* Part Virt Bitmap */
1983                memcpy(pos, bss->tim + n1, n2 - n1 + 1);
1984
1985                tim[1] = n2 - n1 + 4;
1986                skb_put(skb, n2 - n1);
1987        } else {
1988                *pos++ = aid0; /* Bitmap control */
1989                *pos++ = 0; /* Part Virt Bitmap */
1990        }
1991}
1992
1993struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
1994                                     struct ieee80211_vif *vif)
1995{
1996        struct ieee80211_local *local = hw_to_local(hw);
1997        struct sk_buff *skb = NULL;
1998        struct ieee80211_tx_info *info;
1999        struct ieee80211_sub_if_data *sdata = NULL;
2000        struct ieee80211_if_ap *ap = NULL;
2001        struct beacon_data *beacon;
2002        struct ieee80211_supported_band *sband;
2003        enum ieee80211_band band = local->hw.conf.channel->band;
2004
2005        sband = local->hw.wiphy->bands[band];
2006
2007        rcu_read_lock();
2008
2009        sdata = vif_to_sdata(vif);
2010
2011        if (sdata->vif.type == NL80211_IFTYPE_AP) {
2012                ap = &sdata->u.ap;
2013                beacon = rcu_dereference(ap->beacon);
2014                if (ap && beacon) {
2015                        /*
2016                         * headroom, head length,
2017                         * tail length and maximum TIM length
2018                         */
2019                        skb = dev_alloc_skb(local->tx_headroom +
2020                                            beacon->head_len +
2021                                            beacon->tail_len + 256);
2022                        if (!skb)
2023                                goto out;
2024
2025                        skb_reserve(skb, local->tx_headroom);
2026                        memcpy(skb_put(skb, beacon->head_len), beacon->head,
2027                               beacon->head_len);
2028
2029                        /*
2030                         * Not very nice, but we want to allow the driver to call
2031                         * ieee80211_beacon_get() as a response to the set_tim()
2032                         * callback. That, however, is already invoked under the
2033                         * sta_lock to guarantee consistent and race-free update
2034                         * of the tim bitmap in mac80211 and the driver.
2035                         */
2036                        if (local->tim_in_locked_section) {
2037                                ieee80211_beacon_add_tim(ap, skb, beacon);
2038                        } else {
2039                                unsigned long flags;
2040
2041                                spin_lock_irqsave(&local->sta_lock, flags);
2042                                ieee80211_beacon_add_tim(ap, skb, beacon);
2043                                spin_unlock_irqrestore(&local->sta_lock, flags);
2044                        }
2045
2046                        if (beacon->tail)
2047                                memcpy(skb_put(skb, beacon->tail_len),
2048                                       beacon->tail, beacon->tail_len);
2049                } else
2050                        goto out;
2051        } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
2052                struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
2053                struct ieee80211_hdr *hdr;
2054                struct sk_buff *presp = rcu_dereference(ifibss->presp);
2055
2056                if (!presp)
2057                        goto out;
2058
2059                skb = skb_copy(presp, GFP_ATOMIC);
2060                if (!skb)
2061                        goto out;
2062
2063                hdr = (struct ieee80211_hdr *) skb->data;
2064                hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
2065                                                 IEEE80211_STYPE_BEACON);
2066        } else if (ieee80211_vif_is_mesh(&sdata->vif)) {
2067                struct ieee80211_mgmt *mgmt;
2068                u8 *pos;
2069
2070                /* headroom, head length, tail length and maximum TIM length */
2071                skb = dev_alloc_skb(local->tx_headroom + 400);
2072                if (!skb)
2073                        goto out;
2074
2075                skb_reserve(skb, local->hw.extra_tx_headroom);
2076                mgmt = (struct ieee80211_mgmt *)
2077                        skb_put(skb, 24 + sizeof(mgmt->u.beacon));
2078                memset(mgmt, 0, 24 + sizeof(mgmt->u.beacon));
2079                mgmt->frame_control =
2080                    cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_BEACON);
2081                memset(mgmt->da, 0xff, ETH_ALEN);
2082                memcpy(mgmt->sa, sdata->dev->dev_addr, ETH_ALEN);
2083                /* BSSID is left zeroed, wildcard value */
2084                mgmt->u.beacon.beacon_int =
2085                        cpu_to_le16(sdata->vif.bss_conf.beacon_int);
2086                mgmt->u.beacon.capab_info = 0x0; /* 0x0 for MPs */
2087
2088                pos = skb_put(skb, 2);
2089                *pos++ = WLAN_EID_SSID;
2090                *pos++ = 0x0;
2091
2092                mesh_mgmt_ies_add(skb, sdata);
2093        } else {
2094                WARN_ON(1);
2095                goto out;
2096        }
2097
2098        info = IEEE80211_SKB_CB(skb);
2099
2100        info->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT;
2101        info->band = band;
2102        /*
2103         * XXX: For now, always use the lowest rate
2104         */
2105        info->control.rates[0].idx = 0;
2106        info->control.rates[0].count = 1;
2107        info->control.rates[1].idx = -1;
2108        info->control.rates[2].idx = -1;
2109        info->control.rates[3].idx = -1;
2110        info->control.rates[4].idx = -1;
2111        BUILD_BUG_ON(IEEE80211_TX_MAX_RATES != 5);
2112
2113        info->control.vif = vif;
2114
2115        info->flags |= IEEE80211_TX_CTL_NO_ACK;
2116        info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT;
2117        info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ;
2118 out:
2119        rcu_read_unlock();
2120        return skb;
2121}
2122EXPORT_SYMBOL(ieee80211_beacon_get);
2123
2124void ieee80211_rts_get(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2125                       const void *frame, size_t frame_len,
2126                       const struct ieee80211_tx_info *frame_txctl,
2127                       struct ieee80211_rts *rts)
2128{
2129        const struct ieee80211_hdr *hdr = frame;
2130
2131        rts->frame_control =
2132            cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_RTS);
2133        rts->duration = ieee80211_rts_duration(hw, vif, frame_len,
2134                                               frame_txctl);
2135        memcpy(rts->ra, hdr->addr1, sizeof(rts->ra));
2136        memcpy(rts->ta, hdr->addr2, sizeof(rts->ta));
2137}
2138EXPORT_SYMBOL(ieee80211_rts_get);
2139
2140void ieee80211_ctstoself_get(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2141                             const void *frame, size_t frame_len,
2142                             const struct ieee80211_tx_info *frame_txctl,
2143                             struct ieee80211_cts *cts)
2144{
2145        const struct ieee80211_hdr *hdr = frame;
2146
2147        cts->frame_control =
2148            cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTS);
2149        cts->duration = ieee80211_ctstoself_duration(hw, vif,
2150                                                     frame_len, frame_txctl);
2151        memcpy(cts->ra, hdr->addr1, sizeof(cts->ra));
2152}
2153EXPORT_SYMBOL(ieee80211_ctstoself_get);
2154
2155struct sk_buff *
2156ieee80211_get_buffered_bc(struct ieee80211_hw *hw,
2157                          struct ieee80211_vif *vif)
2158{
2159        struct ieee80211_local *local = hw_to_local(hw);
2160        struct sk_buff *skb = NULL;
2161        struct sta_info *sta;
2162        struct ieee80211_tx_data tx;
2163        struct ieee80211_sub_if_data *sdata;
2164        struct ieee80211_if_ap *bss = NULL;
2165        struct beacon_data *beacon;
2166        struct ieee80211_tx_info *info;
2167
2168        sdata = vif_to_sdata(vif);
2169        bss = &sdata->u.ap;
2170
2171        rcu_read_lock();
2172        beacon = rcu_dereference(bss->beacon);
2173
2174        if (sdata->vif.type != NL80211_IFTYPE_AP || !beacon || !beacon->head)
2175                goto out;
2176
2177        if (bss->dtim_count != 0)
2178                goto out; /* send buffered bc/mc only after DTIM beacon */
2179
2180        while (1) {
2181                skb = skb_dequeue(&bss->ps_bc_buf);
2182                if (!skb)
2183                        goto out;
2184                local->total_ps_buffered--;
2185
2186                if (!skb_queue_empty(&bss->ps_bc_buf) && skb->len >= 2) {
2187                        struct ieee80211_hdr *hdr =
2188                                (struct ieee80211_hdr *) skb->data;
2189                        /* more buffered multicast/broadcast frames ==> set
2190                         * MoreData flag in IEEE 802.11 header to inform PS
2191                         * STAs */
2192                        hdr->frame_control |=
2193                                cpu_to_le16(IEEE80211_FCTL_MOREDATA);
2194                }
2195
2196                if (!ieee80211_tx_prepare(sdata, &tx, skb))
2197                        break;
2198                dev_kfree_skb_any(skb);
2199        }
2200
2201        info = IEEE80211_SKB_CB(skb);
2202
2203        sta = tx.sta;
2204        tx.flags |= IEEE80211_TX_PS_BUFFERED;
2205        tx.channel = local->hw.conf.channel;
2206        info->band = tx.channel->band;
2207
2208        if (invoke_tx_handlers(&tx))
2209                skb = NULL;
2210 out:
2211        rcu_read_unlock();
2212
2213        return skb;
2214}
2215EXPORT_SYMBOL(ieee80211_get_buffered_bc);
2216
2217void ieee80211_tx_skb(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb,
2218                      int encrypt)
2219{
2220        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
2221        skb_set_mac_header(skb, 0);
2222        skb_set_network_header(skb, 0);
2223        skb_set_transport_header(skb, 0);
2224
2225        if (!encrypt)
2226                info->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT;
2227
2228        /*
2229         * The other path calling ieee80211_xmit is from the tasklet,
2230         * and while we can handle concurrent transmissions locking
2231         * requirements are that we do not come into tx with bhs on.
2232         */
2233        local_bh_disable();
2234        ieee80211_xmit(sdata, skb);
2235        local_bh_enable();
2236}
2237