linux/net/mac80211/main.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 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10
  11#include <net/mac80211.h>
  12#include <net/ieee80211_radiotap.h>
  13#include <linux/module.h>
  14#include <linux/init.h>
  15#include <linux/netdevice.h>
  16#include <linux/types.h>
  17#include <linux/slab.h>
  18#include <linux/skbuff.h>
  19#include <linux/etherdevice.h>
  20#include <linux/if_arp.h>
  21#include <linux/wireless.h>
  22#include <linux/rtnetlink.h>
  23#include <linux/bitmap.h>
  24#include <linux/pm_qos_params.h>
  25#include <net/net_namespace.h>
  26#include <net/cfg80211.h>
  27
  28#include "ieee80211_i.h"
  29#include "driver-ops.h"
  30#include "rate.h"
  31#include "mesh.h"
  32#include "wep.h"
  33#include "wme.h"
  34#include "aes_ccm.h"
  35#include "led.h"
  36#include "cfg.h"
  37#include "debugfs.h"
  38#include "debugfs_netdev.h"
  39
  40/*
  41 * For seeing transmitted packets on monitor interfaces
  42 * we have a radiotap header too.
  43 */
  44struct ieee80211_tx_status_rtap_hdr {
  45        struct ieee80211_radiotap_header hdr;
  46        u8 rate;
  47        u8 padding_for_rate;
  48        __le16 tx_flags;
  49        u8 data_retries;
  50} __attribute__ ((packed));
  51
  52
  53void ieee80211_configure_filter(struct ieee80211_local *local)
  54{
  55        u64 mc;
  56        unsigned int changed_flags;
  57        unsigned int new_flags = 0;
  58
  59        if (atomic_read(&local->iff_promiscs))
  60                new_flags |= FIF_PROMISC_IN_BSS;
  61
  62        if (atomic_read(&local->iff_allmultis))
  63                new_flags |= FIF_ALLMULTI;
  64
  65        if (local->monitors || local->scanning)
  66                new_flags |= FIF_BCN_PRBRESP_PROMISC;
  67
  68        if (local->fif_fcsfail)
  69                new_flags |= FIF_FCSFAIL;
  70
  71        if (local->fif_plcpfail)
  72                new_flags |= FIF_PLCPFAIL;
  73
  74        if (local->fif_control)
  75                new_flags |= FIF_CONTROL;
  76
  77        if (local->fif_other_bss)
  78                new_flags |= FIF_OTHER_BSS;
  79
  80        if (local->fif_pspoll)
  81                new_flags |= FIF_PSPOLL;
  82
  83        spin_lock_bh(&local->filter_lock);
  84        changed_flags = local->filter_flags ^ new_flags;
  85
  86        mc = drv_prepare_multicast(local, local->mc_count, local->mc_list);
  87        spin_unlock_bh(&local->filter_lock);
  88
  89        /* be a bit nasty */
  90        new_flags |= (1<<31);
  91
  92        drv_configure_filter(local, changed_flags, &new_flags, mc);
  93
  94        WARN_ON(new_flags & (1<<31));
  95
  96        local->filter_flags = new_flags & ~(1<<31);
  97}
  98
  99static void ieee80211_reconfig_filter(struct work_struct *work)
 100{
 101        struct ieee80211_local *local =
 102                container_of(work, struct ieee80211_local, reconfig_filter);
 103
 104        ieee80211_configure_filter(local);
 105}
 106
 107int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
 108{
 109        struct ieee80211_channel *chan, *scan_chan;
 110        int ret = 0;
 111        int power;
 112        enum nl80211_channel_type channel_type;
 113
 114        might_sleep();
 115
 116        scan_chan = local->scan_channel;
 117
 118        if (scan_chan) {
 119                chan = scan_chan;
 120                channel_type = NL80211_CHAN_NO_HT;
 121        } else {
 122                chan = local->oper_channel;
 123                channel_type = local->oper_channel_type;
 124        }
 125
 126        if (chan != local->hw.conf.channel ||
 127            channel_type != local->hw.conf.channel_type) {
 128                local->hw.conf.channel = chan;
 129                local->hw.conf.channel_type = channel_type;
 130                changed |= IEEE80211_CONF_CHANGE_CHANNEL;
 131        }
 132
 133        if (scan_chan)
 134                power = chan->max_power;
 135        else
 136                power = local->power_constr_level ?
 137                        (chan->max_power - local->power_constr_level) :
 138                        chan->max_power;
 139
 140        if (local->user_power_level >= 0)
 141                power = min(power, local->user_power_level);
 142
 143        if (local->hw.conf.power_level != power) {
 144                changed |= IEEE80211_CONF_CHANGE_POWER;
 145                local->hw.conf.power_level = power;
 146        }
 147
 148        if (changed && local->open_count) {
 149                ret = drv_config(local, changed);
 150                /*
 151                 * Goal:
 152                 * HW reconfiguration should never fail, the driver has told
 153                 * us what it can support so it should live up to that promise.
 154                 *
 155                 * Current status:
 156                 * rfkill is not integrated with mac80211 and a
 157                 * configuration command can thus fail if hardware rfkill
 158                 * is enabled
 159                 *
 160                 * FIXME: integrate rfkill with mac80211 and then add this
 161                 * WARN_ON() back
 162                 *
 163                 */
 164                /* WARN_ON(ret); */
 165        }
 166
 167        return ret;
 168}
 169
 170void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
 171                                      u32 changed)
 172{
 173        struct ieee80211_local *local = sdata->local;
 174        static const u8 zero[ETH_ALEN] = { 0 };
 175
 176        if (!changed)
 177                return;
 178
 179        if (sdata->vif.type == NL80211_IFTYPE_STATION) {
 180                /*
 181                 * While not associated, claim a BSSID of all-zeroes
 182                 * so that drivers don't do any weird things with the
 183                 * BSSID at that time.
 184                 */
 185                if (sdata->vif.bss_conf.assoc)
 186                        sdata->vif.bss_conf.bssid = sdata->u.mgd.bssid;
 187                else
 188                        sdata->vif.bss_conf.bssid = zero;
 189        } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC)
 190                sdata->vif.bss_conf.bssid = sdata->u.ibss.bssid;
 191        else if (sdata->vif.type == NL80211_IFTYPE_AP)
 192                sdata->vif.bss_conf.bssid = sdata->dev->dev_addr;
 193        else if (ieee80211_vif_is_mesh(&sdata->vif)) {
 194                sdata->vif.bss_conf.bssid = zero;
 195        } else {
 196                WARN_ON(1);
 197                return;
 198        }
 199
 200        switch (sdata->vif.type) {
 201        case NL80211_IFTYPE_AP:
 202        case NL80211_IFTYPE_ADHOC:
 203        case NL80211_IFTYPE_MESH_POINT:
 204                break;
 205        default:
 206                /* do not warn to simplify caller in scan.c */
 207                changed &= ~BSS_CHANGED_BEACON_ENABLED;
 208                if (WARN_ON(changed & BSS_CHANGED_BEACON))
 209                        return;
 210                break;
 211        }
 212
 213        if (changed & BSS_CHANGED_BEACON_ENABLED) {
 214                if (local->quiescing || !netif_running(sdata->dev) ||
 215                    test_bit(SCAN_SW_SCANNING, &local->scanning)) {
 216                        sdata->vif.bss_conf.enable_beacon = false;
 217                } else {
 218                        /*
 219                         * Beacon should be enabled, but AP mode must
 220                         * check whether there is a beacon configured.
 221                         */
 222                        switch (sdata->vif.type) {
 223                        case NL80211_IFTYPE_AP:
 224                                sdata->vif.bss_conf.enable_beacon =
 225                                        !!rcu_dereference(sdata->u.ap.beacon);
 226                                break;
 227                        case NL80211_IFTYPE_ADHOC:
 228                                sdata->vif.bss_conf.enable_beacon =
 229                                        !!rcu_dereference(sdata->u.ibss.presp);
 230                                break;
 231                        case NL80211_IFTYPE_MESH_POINT:
 232                                sdata->vif.bss_conf.enable_beacon = true;
 233                                break;
 234                        default:
 235                                /* not reached */
 236                                WARN_ON(1);
 237                                break;
 238                        }
 239                }
 240        }
 241
 242        drv_bss_info_changed(local, &sdata->vif,
 243                             &sdata->vif.bss_conf, changed);
 244}
 245
 246u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata)
 247{
 248        sdata->vif.bss_conf.use_cts_prot = false;
 249        sdata->vif.bss_conf.use_short_preamble = false;
 250        sdata->vif.bss_conf.use_short_slot = false;
 251        return BSS_CHANGED_ERP_CTS_PROT |
 252               BSS_CHANGED_ERP_PREAMBLE |
 253               BSS_CHANGED_ERP_SLOT;
 254}
 255
 256void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw,
 257                                 struct sk_buff *skb)
 258{
 259        struct ieee80211_local *local = hw_to_local(hw);
 260        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 261        int tmp;
 262
 263        skb->pkt_type = IEEE80211_TX_STATUS_MSG;
 264        skb_queue_tail(info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS ?
 265                       &local->skb_queue : &local->skb_queue_unreliable, skb);
 266        tmp = skb_queue_len(&local->skb_queue) +
 267                skb_queue_len(&local->skb_queue_unreliable);
 268        while (tmp > IEEE80211_IRQSAFE_QUEUE_LIMIT &&
 269               (skb = skb_dequeue(&local->skb_queue_unreliable))) {
 270                dev_kfree_skb_irq(skb);
 271                tmp--;
 272                I802_DEBUG_INC(local->tx_status_drop);
 273        }
 274        tasklet_schedule(&local->tasklet);
 275}
 276EXPORT_SYMBOL(ieee80211_tx_status_irqsafe);
 277
 278static void ieee80211_tasklet_handler(unsigned long data)
 279{
 280        struct ieee80211_local *local = (struct ieee80211_local *) data;
 281        struct sk_buff *skb;
 282        struct ieee80211_ra_tid *ra_tid;
 283
 284        while ((skb = skb_dequeue(&local->skb_queue)) ||
 285               (skb = skb_dequeue(&local->skb_queue_unreliable))) {
 286                switch (skb->pkt_type) {
 287                case IEEE80211_RX_MSG:
 288                        /* Clear skb->pkt_type in order to not confuse kernel
 289                         * netstack. */
 290                        skb->pkt_type = 0;
 291                        ieee80211_rx(local_to_hw(local), skb);
 292                        break;
 293                case IEEE80211_TX_STATUS_MSG:
 294                        skb->pkt_type = 0;
 295                        ieee80211_tx_status(local_to_hw(local), skb);
 296                        break;
 297                case IEEE80211_DELBA_MSG:
 298                        ra_tid = (struct ieee80211_ra_tid *) &skb->cb;
 299                        ieee80211_stop_tx_ba_cb(local_to_hw(local),
 300                                                ra_tid->ra, ra_tid->tid);
 301                        dev_kfree_skb(skb);
 302                        break;
 303                case IEEE80211_ADDBA_MSG:
 304                        ra_tid = (struct ieee80211_ra_tid *) &skb->cb;
 305                        ieee80211_start_tx_ba_cb(local_to_hw(local),
 306                                                 ra_tid->ra, ra_tid->tid);
 307                        dev_kfree_skb(skb);
 308                        break ;
 309                default:
 310                        WARN(1, "mac80211: Packet is of unknown type %d\n",
 311                             skb->pkt_type);
 312                        dev_kfree_skb(skb);
 313                        break;
 314                }
 315        }
 316}
 317
 318static void ieee80211_handle_filtered_frame(struct ieee80211_local *local,
 319                                            struct sta_info *sta,
 320                                            struct sk_buff *skb)
 321{
 322        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 323
 324        /*
 325         * XXX: This is temporary!
 326         *
 327         *      The problem here is that when we get here, the driver will
 328         *      quite likely have pretty much overwritten info->control by
 329         *      using info->driver_data or info->rate_driver_data. Thus,
 330         *      when passing out the frame to the driver again, we would be
 331         *      passing completely bogus data since the driver would then
 332         *      expect a properly filled info->control. In mac80211 itself
 333         *      the same problem occurs, since we need info->control.vif
 334         *      internally.
 335         *
 336         *      To fix this, we should send the frame through TX processing
 337         *      again. However, it's not that simple, since the frame will
 338         *      have been software-encrypted (if applicable) already, and
 339         *      encrypting it again doesn't do much good. So to properly do
 340         *      that, we not only have to skip the actual 'raw' encryption
 341         *      (key selection etc. still has to be done!) but also the
 342         *      sequence number assignment since that impacts the crypto
 343         *      encapsulation, of course.
 344         *
 345         *      Hence, for now, fix the bug by just dropping the frame.
 346         */
 347        goto drop;
 348
 349        sta->tx_filtered_count++;
 350
 351        /*
 352         * Clear the TX filter mask for this STA when sending the next
 353         * packet. If the STA went to power save mode, this will happen
 354         * when it wakes up for the next time.
 355         */
 356        set_sta_flags(sta, WLAN_STA_CLEAR_PS_FILT);
 357
 358        /*
 359         * This code races in the following way:
 360         *
 361         *  (1) STA sends frame indicating it will go to sleep and does so
 362         *  (2) hardware/firmware adds STA to filter list, passes frame up
 363         *  (3) hardware/firmware processes TX fifo and suppresses a frame
 364         *  (4) we get TX status before having processed the frame and
 365         *      knowing that the STA has gone to sleep.
 366         *
 367         * This is actually quite unlikely even when both those events are
 368         * processed from interrupts coming in quickly after one another or
 369         * even at the same time because we queue both TX status events and
 370         * RX frames to be processed by a tasklet and process them in the
 371         * same order that they were received or TX status last. Hence, there
 372         * is no race as long as the frame RX is processed before the next TX
 373         * status, which drivers can ensure, see below.
 374         *
 375         * Note that this can only happen if the hardware or firmware can
 376         * actually add STAs to the filter list, if this is done by the
 377         * driver in response to set_tim() (which will only reduce the race
 378         * this whole filtering tries to solve, not completely solve it)
 379         * this situation cannot happen.
 380         *
 381         * To completely solve this race drivers need to make sure that they
 382         *  (a) don't mix the irq-safe/not irq-safe TX status/RX processing
 383         *      functions and
 384         *  (b) always process RX events before TX status events if ordering
 385         *      can be unknown, for example with different interrupt status
 386         *      bits.
 387         */
 388        if (test_sta_flags(sta, WLAN_STA_PS) &&
 389            skb_queue_len(&sta->tx_filtered) < STA_MAX_TX_BUFFER) {
 390                skb_queue_tail(&sta->tx_filtered, skb);
 391                return;
 392        }
 393
 394        if (!test_sta_flags(sta, WLAN_STA_PS) &&
 395            !(info->flags & IEEE80211_TX_INTFL_RETRIED)) {
 396                /* Software retry the packet once */
 397                info->flags |= IEEE80211_TX_INTFL_RETRIED;
 398                ieee80211_add_pending_skb(local, skb);
 399                return;
 400        }
 401
 402 drop:
 403#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
 404        if (net_ratelimit())
 405                printk(KERN_DEBUG "%s: dropped TX filtered frame, "
 406                       "queue_len=%d PS=%d @%lu\n",
 407                       wiphy_name(local->hw.wiphy),
 408                       skb_queue_len(&sta->tx_filtered),
 409                       !!test_sta_flags(sta, WLAN_STA_PS), jiffies);
 410#endif
 411        dev_kfree_skb(skb);
 412}
 413
 414void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
 415{
 416        struct sk_buff *skb2;
 417        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
 418        struct ieee80211_local *local = hw_to_local(hw);
 419        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 420        u16 frag, type;
 421        __le16 fc;
 422        struct ieee80211_supported_band *sband;
 423        struct ieee80211_tx_status_rtap_hdr *rthdr;
 424        struct ieee80211_sub_if_data *sdata;
 425        struct net_device *prev_dev = NULL;
 426        struct sta_info *sta;
 427        int retry_count = -1, i;
 428
 429        for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
 430                /* the HW cannot have attempted that rate */
 431                if (i >= hw->max_rates) {
 432                        info->status.rates[i].idx = -1;
 433                        info->status.rates[i].count = 0;
 434                }
 435
 436                retry_count += info->status.rates[i].count;
 437        }
 438        if (retry_count < 0)
 439                retry_count = 0;
 440
 441        rcu_read_lock();
 442
 443        sband = local->hw.wiphy->bands[info->band];
 444
 445        sta = sta_info_get(local, hdr->addr1);
 446
 447        if (sta) {
 448                if (!(info->flags & IEEE80211_TX_STAT_ACK) &&
 449                    test_sta_flags(sta, WLAN_STA_PS)) {
 450                        /*
 451                         * The STA is in power save mode, so assume
 452                         * that this TX packet failed because of that.
 453                         */
 454                        ieee80211_handle_filtered_frame(local, sta, skb);
 455                        rcu_read_unlock();
 456                        return;
 457                }
 458
 459                fc = hdr->frame_control;
 460
 461                if ((info->flags & IEEE80211_TX_STAT_AMPDU_NO_BACK) &&
 462                    (ieee80211_is_data_qos(fc))) {
 463                        u16 tid, ssn;
 464                        u8 *qc;
 465
 466                        qc = ieee80211_get_qos_ctl(hdr);
 467                        tid = qc[0] & 0xf;
 468                        ssn = ((le16_to_cpu(hdr->seq_ctrl) + 0x10)
 469                                                & IEEE80211_SCTL_SEQ);
 470                        ieee80211_send_bar(sta->sdata, hdr->addr1,
 471                                           tid, ssn);
 472                }
 473
 474                if (info->flags & IEEE80211_TX_STAT_TX_FILTERED) {
 475                        ieee80211_handle_filtered_frame(local, sta, skb);
 476                        rcu_read_unlock();
 477                        return;
 478                } else {
 479                        if (!(info->flags & IEEE80211_TX_STAT_ACK))
 480                                sta->tx_retry_failed++;
 481                        sta->tx_retry_count += retry_count;
 482                }
 483
 484                rate_control_tx_status(local, sband, sta, skb);
 485                if (ieee80211_vif_is_mesh(&sta->sdata->vif))
 486                        ieee80211s_update_metric(local, sta, skb);
 487        }
 488
 489        rcu_read_unlock();
 490
 491        ieee80211_led_tx(local, 0);
 492
 493        /* SNMP counters
 494         * Fragments are passed to low-level drivers as separate skbs, so these
 495         * are actually fragments, not frames. Update frame counters only for
 496         * the first fragment of the frame. */
 497
 498        frag = le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG;
 499        type = le16_to_cpu(hdr->frame_control) & IEEE80211_FCTL_FTYPE;
 500
 501        if (info->flags & IEEE80211_TX_STAT_ACK) {
 502                if (frag == 0) {
 503                        local->dot11TransmittedFrameCount++;
 504                        if (is_multicast_ether_addr(hdr->addr1))
 505                                local->dot11MulticastTransmittedFrameCount++;
 506                        if (retry_count > 0)
 507                                local->dot11RetryCount++;
 508                        if (retry_count > 1)
 509                                local->dot11MultipleRetryCount++;
 510                }
 511
 512                /* This counter shall be incremented for an acknowledged MPDU
 513                 * with an individual address in the address 1 field or an MPDU
 514                 * with a multicast address in the address 1 field of type Data
 515                 * or Management. */
 516                if (!is_multicast_ether_addr(hdr->addr1) ||
 517                    type == IEEE80211_FTYPE_DATA ||
 518                    type == IEEE80211_FTYPE_MGMT)
 519                        local->dot11TransmittedFragmentCount++;
 520        } else {
 521                if (frag == 0)
 522                        local->dot11FailedCount++;
 523        }
 524
 525        /* this was a transmitted frame, but now we want to reuse it */
 526        skb_orphan(skb);
 527
 528        /*
 529         * This is a bit racy but we can avoid a lot of work
 530         * with this test...
 531         */
 532        if (!local->monitors && !local->cooked_mntrs) {
 533                dev_kfree_skb(skb);
 534                return;
 535        }
 536
 537        /* send frame to monitor interfaces now */
 538
 539        if (skb_headroom(skb) < sizeof(*rthdr)) {
 540                printk(KERN_ERR "ieee80211_tx_status: headroom too small\n");
 541                dev_kfree_skb(skb);
 542                return;
 543        }
 544
 545        rthdr = (struct ieee80211_tx_status_rtap_hdr *)
 546                                skb_push(skb, sizeof(*rthdr));
 547
 548        memset(rthdr, 0, sizeof(*rthdr));
 549        rthdr->hdr.it_len = cpu_to_le16(sizeof(*rthdr));
 550        rthdr->hdr.it_present =
 551                cpu_to_le32((1 << IEEE80211_RADIOTAP_TX_FLAGS) |
 552                            (1 << IEEE80211_RADIOTAP_DATA_RETRIES) |
 553                            (1 << IEEE80211_RADIOTAP_RATE));
 554
 555        if (!(info->flags & IEEE80211_TX_STAT_ACK) &&
 556            !is_multicast_ether_addr(hdr->addr1))
 557                rthdr->tx_flags |= cpu_to_le16(IEEE80211_RADIOTAP_F_TX_FAIL);
 558
 559        /*
 560         * XXX: Once radiotap gets the bitmap reset thing the vendor
 561         *      extensions proposal contains, we can actually report
 562         *      the whole set of tries we did.
 563         */
 564        if ((info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) ||
 565            (info->status.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT))
 566                rthdr->tx_flags |= cpu_to_le16(IEEE80211_RADIOTAP_F_TX_CTS);
 567        else if (info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS)
 568                rthdr->tx_flags |= cpu_to_le16(IEEE80211_RADIOTAP_F_TX_RTS);
 569        if (info->status.rates[0].idx >= 0 &&
 570            !(info->status.rates[0].flags & IEEE80211_TX_RC_MCS))
 571                rthdr->rate = sband->bitrates[
 572                                info->status.rates[0].idx].bitrate / 5;
 573
 574        /* for now report the total retry_count */
 575        rthdr->data_retries = retry_count;
 576
 577        /* XXX: is this sufficient for BPF? */
 578        skb_set_mac_header(skb, 0);
 579        skb->ip_summed = CHECKSUM_UNNECESSARY;
 580        skb->pkt_type = PACKET_OTHERHOST;
 581        skb->protocol = htons(ETH_P_802_2);
 582        memset(skb->cb, 0, sizeof(skb->cb));
 583
 584        rcu_read_lock();
 585        list_for_each_entry_rcu(sdata, &local->interfaces, list) {
 586                if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
 587                        if (!netif_running(sdata->dev))
 588                                continue;
 589
 590                        if (prev_dev) {
 591                                skb2 = skb_clone(skb, GFP_ATOMIC);
 592                                if (skb2) {
 593                                        skb2->dev = prev_dev;
 594                                        netif_rx(skb2);
 595                                }
 596                        }
 597
 598                        prev_dev = sdata->dev;
 599                }
 600        }
 601        if (prev_dev) {
 602                skb->dev = prev_dev;
 603                netif_rx(skb);
 604                skb = NULL;
 605        }
 606        rcu_read_unlock();
 607        dev_kfree_skb(skb);
 608}
 609EXPORT_SYMBOL(ieee80211_tx_status);
 610
 611static void ieee80211_restart_work(struct work_struct *work)
 612{
 613        struct ieee80211_local *local =
 614                container_of(work, struct ieee80211_local, restart_work);
 615
 616        rtnl_lock();
 617        ieee80211_reconfig(local);
 618        rtnl_unlock();
 619}
 620
 621void ieee80211_restart_hw(struct ieee80211_hw *hw)
 622{
 623        struct ieee80211_local *local = hw_to_local(hw);
 624
 625        /* use this reason, __ieee80211_resume will unblock it */
 626        ieee80211_stop_queues_by_reason(hw,
 627                IEEE80211_QUEUE_STOP_REASON_SUSPEND);
 628
 629        schedule_work(&local->restart_work);
 630}
 631EXPORT_SYMBOL(ieee80211_restart_hw);
 632
 633struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
 634                                        const struct ieee80211_ops *ops)
 635{
 636        struct ieee80211_local *local;
 637        int priv_size, i;
 638        struct wiphy *wiphy;
 639
 640        /* Ensure 32-byte alignment of our private data and hw private data.
 641         * We use the wiphy priv data for both our ieee80211_local and for
 642         * the driver's private data
 643         *
 644         * In memory it'll be like this:
 645         *
 646         * +-------------------------+
 647         * | struct wiphy           |
 648         * +-------------------------+
 649         * | struct ieee80211_local  |
 650         * +-------------------------+
 651         * | driver's private data   |
 652         * +-------------------------+
 653         *
 654         */
 655        priv_size = ALIGN(sizeof(*local), NETDEV_ALIGN) + priv_data_len;
 656
 657        wiphy = wiphy_new(&mac80211_config_ops, priv_size);
 658
 659        if (!wiphy)
 660                return NULL;
 661
 662        wiphy->netnsok = true;
 663        wiphy->privid = mac80211_wiphy_privid;
 664
 665        /* Yes, putting cfg80211_bss into ieee80211_bss is a hack */
 666        wiphy->bss_priv_size = sizeof(struct ieee80211_bss) -
 667                               sizeof(struct cfg80211_bss);
 668
 669        local = wiphy_priv(wiphy);
 670
 671        local->hw.wiphy = wiphy;
 672
 673        local->hw.priv = (char *)local + ALIGN(sizeof(*local), NETDEV_ALIGN);
 674
 675        BUG_ON(!ops->tx);
 676        BUG_ON(!ops->start);
 677        BUG_ON(!ops->stop);
 678        BUG_ON(!ops->config);
 679        BUG_ON(!ops->add_interface);
 680        BUG_ON(!ops->remove_interface);
 681        BUG_ON(!ops->configure_filter);
 682        local->ops = ops;
 683
 684        /* set up some defaults */
 685        local->hw.queues = 1;
 686        local->hw.max_rates = 1;
 687        local->hw.conf.long_frame_max_tx_count = wiphy->retry_long;
 688        local->hw.conf.short_frame_max_tx_count = wiphy->retry_short;
 689        local->user_power_level = -1;
 690
 691        INIT_LIST_HEAD(&local->interfaces);
 692        mutex_init(&local->iflist_mtx);
 693        mutex_init(&local->scan_mtx);
 694
 695        spin_lock_init(&local->key_lock);
 696        spin_lock_init(&local->filter_lock);
 697        spin_lock_init(&local->queue_stop_reason_lock);
 698
 699        INIT_DELAYED_WORK(&local->scan_work, ieee80211_scan_work);
 700
 701        INIT_WORK(&local->restart_work, ieee80211_restart_work);
 702
 703        INIT_WORK(&local->reconfig_filter, ieee80211_reconfig_filter);
 704
 705        INIT_WORK(&local->dynamic_ps_enable_work,
 706                  ieee80211_dynamic_ps_enable_work);
 707        INIT_WORK(&local->dynamic_ps_disable_work,
 708                  ieee80211_dynamic_ps_disable_work);
 709        setup_timer(&local->dynamic_ps_timer,
 710                    ieee80211_dynamic_ps_timer, (unsigned long) local);
 711
 712        sta_info_init(local);
 713
 714        for (i = 0; i < IEEE80211_MAX_QUEUES; i++)
 715                skb_queue_head_init(&local->pending[i]);
 716        tasklet_init(&local->tx_pending_tasklet, ieee80211_tx_pending,
 717                     (unsigned long)local);
 718
 719        tasklet_init(&local->tasklet,
 720                     ieee80211_tasklet_handler,
 721                     (unsigned long) local);
 722
 723        skb_queue_head_init(&local->skb_queue);
 724        skb_queue_head_init(&local->skb_queue_unreliable);
 725
 726        spin_lock_init(&local->ampdu_lock);
 727
 728        return local_to_hw(local);
 729}
 730EXPORT_SYMBOL(ieee80211_alloc_hw);
 731
 732int ieee80211_register_hw(struct ieee80211_hw *hw)
 733{
 734        struct ieee80211_local *local = hw_to_local(hw);
 735        int result;
 736        enum ieee80211_band band;
 737        int channels, i, j, max_bitrates;
 738        bool supp_ht;
 739        static const u32 cipher_suites[] = {
 740                WLAN_CIPHER_SUITE_WEP40,
 741                WLAN_CIPHER_SUITE_WEP104,
 742                WLAN_CIPHER_SUITE_TKIP,
 743                WLAN_CIPHER_SUITE_CCMP,
 744
 745                /* keep last -- depends on hw flags! */
 746                WLAN_CIPHER_SUITE_AES_CMAC
 747        };
 748
 749        /*
 750         * generic code guarantees at least one band,
 751         * set this very early because much code assumes
 752         * that hw.conf.channel is assigned
 753         */
 754        channels = 0;
 755        max_bitrates = 0;
 756        supp_ht = false;
 757        for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
 758                struct ieee80211_supported_band *sband;
 759
 760                sband = local->hw.wiphy->bands[band];
 761                if (!sband)
 762                        continue;
 763                if (!local->oper_channel) {
 764                        /* init channel we're on */
 765                        local->hw.conf.channel =
 766                        local->oper_channel = &sband->channels[0];
 767                        local->hw.conf.channel_type = NL80211_CHAN_NO_HT;
 768                }
 769                channels += sband->n_channels;
 770
 771                if (max_bitrates < sband->n_bitrates)
 772                        max_bitrates = sband->n_bitrates;
 773                supp_ht = supp_ht || sband->ht_cap.ht_supported;
 774        }
 775
 776        local->int_scan_req = kzalloc(sizeof(*local->int_scan_req) +
 777                                      sizeof(void *) * channels, GFP_KERNEL);
 778        if (!local->int_scan_req)
 779                return -ENOMEM;
 780
 781        /* if low-level driver supports AP, we also support VLAN */
 782        if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_AP))
 783                local->hw.wiphy->interface_modes |= BIT(NL80211_IFTYPE_AP_VLAN);
 784
 785        /* mac80211 always supports monitor */
 786        local->hw.wiphy->interface_modes |= BIT(NL80211_IFTYPE_MONITOR);
 787
 788        if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
 789                local->hw.wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
 790        else if (local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC)
 791                local->hw.wiphy->signal_type = CFG80211_SIGNAL_TYPE_UNSPEC;
 792
 793        /*
 794         * Calculate scan IE length -- we need this to alloc
 795         * memory and to subtract from the driver limit. It
 796         * includes the (extended) supported rates and HT
 797         * information -- SSID is the driver's responsibility.
 798         */
 799        local->scan_ies_len = 4 + max_bitrates; /* (ext) supp rates */
 800        if (supp_ht)
 801                local->scan_ies_len += 2 + sizeof(struct ieee80211_ht_cap);
 802
 803        if (!local->ops->hw_scan) {
 804                /* For hw_scan, driver needs to set these up. */
 805                local->hw.wiphy->max_scan_ssids = 4;
 806                local->hw.wiphy->max_scan_ie_len = IEEE80211_MAX_DATA_LEN;
 807        }
 808
 809        /*
 810         * If the driver supports any scan IEs, then assume the
 811         * limit includes the IEs mac80211 will add, otherwise
 812         * leave it at zero and let the driver sort it out; we
 813         * still pass our IEs to the driver but userspace will
 814         * not be allowed to in that case.
 815         */
 816        if (local->hw.wiphy->max_scan_ie_len)
 817                local->hw.wiphy->max_scan_ie_len -= local->scan_ies_len;
 818
 819        local->hw.wiphy->cipher_suites = cipher_suites;
 820        local->hw.wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
 821        if (!(local->hw.flags & IEEE80211_HW_MFP_CAPABLE))
 822                local->hw.wiphy->n_cipher_suites--;
 823
 824        result = wiphy_register(local->hw.wiphy);
 825        if (result < 0)
 826                goto fail_wiphy_register;
 827
 828        /*
 829         * We use the number of queues for feature tests (QoS, HT) internally
 830         * so restrict them appropriately.
 831         */
 832        if (hw->queues > IEEE80211_MAX_QUEUES)
 833                hw->queues = IEEE80211_MAX_QUEUES;
 834
 835        local->workqueue =
 836                create_singlethread_workqueue(wiphy_name(local->hw.wiphy));
 837        if (!local->workqueue) {
 838                result = -ENOMEM;
 839                goto fail_workqueue;
 840        }
 841
 842        /*
 843         * The hardware needs headroom for sending the frame,
 844         * and we need some headroom for passing the frame to monitor
 845         * interfaces, but never both at the same time.
 846         */
 847        local->tx_headroom = max_t(unsigned int , local->hw.extra_tx_headroom,
 848                                   sizeof(struct ieee80211_tx_status_rtap_hdr));
 849
 850        debugfs_hw_add(local);
 851
 852        if (local->hw.max_listen_interval == 0)
 853                local->hw.max_listen_interval = 1;
 854
 855        local->hw.conf.listen_interval = local->hw.max_listen_interval;
 856
 857        result = sta_info_start(local);
 858        if (result < 0)
 859                goto fail_sta_info;
 860
 861        result = ieee80211_wep_init(local);
 862        if (result < 0) {
 863                printk(KERN_DEBUG "%s: Failed to initialize wep: %d\n",
 864                       wiphy_name(local->hw.wiphy), result);
 865                goto fail_wep;
 866        }
 867
 868        rtnl_lock();
 869
 870        result = ieee80211_init_rate_ctrl_alg(local,
 871                                              hw->rate_control_algorithm);
 872        if (result < 0) {
 873                printk(KERN_DEBUG "%s: Failed to initialize rate control "
 874                       "algorithm\n", wiphy_name(local->hw.wiphy));
 875                goto fail_rate;
 876        }
 877
 878        /* add one default STA interface if supported */
 879        if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION)) {
 880                result = ieee80211_if_add(local, "wlan%d", NULL,
 881                                          NL80211_IFTYPE_STATION, NULL);
 882                if (result)
 883                        printk(KERN_WARNING "%s: Failed to add default virtual iface\n",
 884                               wiphy_name(local->hw.wiphy));
 885        }
 886
 887        rtnl_unlock();
 888
 889        ieee80211_led_init(local);
 890
 891        /* alloc internal scan request */
 892        i = 0;
 893        local->int_scan_req->ssids = &local->scan_ssid;
 894        local->int_scan_req->n_ssids = 1;
 895        for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
 896                if (!hw->wiphy->bands[band])
 897                        continue;
 898                for (j = 0; j < hw->wiphy->bands[band]->n_channels; j++) {
 899                        local->int_scan_req->channels[i] =
 900                                &hw->wiphy->bands[band]->channels[j];
 901                        i++;
 902                }
 903        }
 904
 905        local->network_latency_notifier.notifier_call =
 906                ieee80211_max_network_latency;
 907        result = pm_qos_add_notifier(PM_QOS_NETWORK_LATENCY,
 908                                     &local->network_latency_notifier);
 909
 910        if (result) {
 911                rtnl_lock();
 912                goto fail_pm_qos;
 913        }
 914
 915        return 0;
 916
 917 fail_pm_qos:
 918        ieee80211_led_exit(local);
 919        ieee80211_remove_interfaces(local);
 920 fail_rate:
 921        rtnl_unlock();
 922        ieee80211_wep_free(local);
 923 fail_wep:
 924        sta_info_stop(local);
 925 fail_sta_info:
 926        debugfs_hw_del(local);
 927        destroy_workqueue(local->workqueue);
 928 fail_workqueue:
 929        wiphy_unregister(local->hw.wiphy);
 930 fail_wiphy_register:
 931        kfree(local->int_scan_req);
 932        return result;
 933}
 934EXPORT_SYMBOL(ieee80211_register_hw);
 935
 936void ieee80211_unregister_hw(struct ieee80211_hw *hw)
 937{
 938        struct ieee80211_local *local = hw_to_local(hw);
 939
 940        tasklet_kill(&local->tx_pending_tasklet);
 941        tasklet_kill(&local->tasklet);
 942
 943        pm_qos_remove_notifier(PM_QOS_NETWORK_LATENCY,
 944                               &local->network_latency_notifier);
 945
 946        rtnl_lock();
 947
 948        /*
 949         * At this point, interface list manipulations are fine
 950         * because the driver cannot be handing us frames any
 951         * more and the tasklet is killed.
 952         */
 953        ieee80211_remove_interfaces(local);
 954
 955        rtnl_unlock();
 956
 957        cancel_work_sync(&local->reconfig_filter);
 958
 959        ieee80211_clear_tx_pending(local);
 960        sta_info_stop(local);
 961        rate_control_deinitialize(local);
 962        debugfs_hw_del(local);
 963
 964        if (skb_queue_len(&local->skb_queue)
 965                        || skb_queue_len(&local->skb_queue_unreliable))
 966                printk(KERN_WARNING "%s: skb_queue not empty\n",
 967                       wiphy_name(local->hw.wiphy));
 968        skb_queue_purge(&local->skb_queue);
 969        skb_queue_purge(&local->skb_queue_unreliable);
 970
 971        destroy_workqueue(local->workqueue);
 972        wiphy_unregister(local->hw.wiphy);
 973        ieee80211_wep_free(local);
 974        ieee80211_led_exit(local);
 975        kfree(local->int_scan_req);
 976}
 977EXPORT_SYMBOL(ieee80211_unregister_hw);
 978
 979void ieee80211_free_hw(struct ieee80211_hw *hw)
 980{
 981        struct ieee80211_local *local = hw_to_local(hw);
 982
 983        mutex_destroy(&local->iflist_mtx);
 984        mutex_destroy(&local->scan_mtx);
 985
 986        wiphy_free(local->hw.wiphy);
 987}
 988EXPORT_SYMBOL(ieee80211_free_hw);
 989
 990static int __init ieee80211_init(void)
 991{
 992        struct sk_buff *skb;
 993        int ret;
 994
 995        BUILD_BUG_ON(sizeof(struct ieee80211_tx_info) > sizeof(skb->cb));
 996        BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, driver_data) +
 997                     IEEE80211_TX_INFO_DRIVER_DATA_SIZE > sizeof(skb->cb));
 998
 999        ret = rc80211_minstrel_init();
1000        if (ret)
1001                return ret;
1002
1003        ret = rc80211_pid_init();
1004        if (ret)
1005                return ret;
1006
1007        ieee80211_debugfs_netdev_init();
1008
1009        return 0;
1010}
1011
1012static void __exit ieee80211_exit(void)
1013{
1014        rc80211_pid_exit();
1015        rc80211_minstrel_exit();
1016
1017        /*
1018         * For key todo, it'll be empty by now but the work
1019         * might still be scheduled.
1020         */
1021        flush_scheduled_work();
1022
1023        if (mesh_allocated)
1024                ieee80211s_stop();
1025
1026        ieee80211_debugfs_netdev_exit();
1027}
1028
1029
1030subsys_initcall(ieee80211_init);
1031module_exit(ieee80211_exit);
1032
1033MODULE_DESCRIPTION("IEEE 802.11 subsystem");
1034MODULE_LICENSE("GPL");
1035