1. 30 11月, 2010 1 次提交
    • J
      mac80211: Fix frame injection using non-AP vif · 7dff3125
      Jouni Malinen 提交于
      In order for frame injection to work properly for some use cases
      (e.g., finding the station entry and keys for encryption), mac80211
      needs to find the correct sdata entry. This works when the main vif
      is in AP mode, but commit a2c1e3da
      broke this particular use case for station main vif. While this type of
      injection is quite unusual operation, it has some uses and we should fix
      it. Do this by changing the monitor vif sdata selection to allow station
      vif to be selected instead of limiting it to just AP vifs. We still need
      to skip some iftypes to avoid selecting unsuitable vif for injection.
      Signed-off-by: NJouni Malinen <jouni.malinen@atheros.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      7dff3125
  2. 07 10月, 2010 1 次提交
  3. 06 10月, 2010 1 次提交
  4. 15 9月, 2010 1 次提交
  5. 28 8月, 2010 3 次提交
  6. 26 8月, 2010 2 次提交
  7. 17 8月, 2010 1 次提交
  8. 29 7月, 2010 1 次提交
  9. 27 7月, 2010 1 次提交
    • J
      mac80211: fix sta assignment · ec25acc4
      Johannes Berg 提交于
      I just had the following:
      WARNING: at drivers/net/wireless/iwlwifi/iwl-agn-tx.c:574 iwlagn_tx_skb+0x1576/0x15f0 [iwlagn]()
      Call Trace:
       <IRQ>  [<ffffffff8105c5df>] warn_slowpath_common+0x7f/0xc0
       [<ffffffff8105c63a>] warn_slowpath_null+0x1a/0x20
       [<ffffffffa0290b46>] iwlagn_tx_skb+0x1576/0x15f0 [iwlagn]
       [<ffffffffa027076c>] iwl_mac_tx+0x5c/0x260 [iwlagn]
       [<ffffffffa01bdf5b>] __ieee80211_tx+0x10b/0x1a0 [mac80211]
       [<ffffffffa01bfb86>] ieee80211_tx_pending+0x186/0x2d0 [mac80211]
       [<ffffffff81062ea5>] tasklet_action+0x125/0x130
       [<ffffffff810634a6>] __do_softirq+0x106/0x270
       [<ffffffff8100c09c>] call_softirq+0x1c/0x30
      iwlagn 0000:02:00.0: Attempting to modify non-existing station 107
      
      Note that 107 == 0x6b which is slab poison.
      
      The reason is that mac80211 passed a freed station
      pointer to mac80211, because as it happened iwlwifi
      reset itself while mac80211 was disconnecting from
      the network.
      
      It turns out that we do take care to look up the
      station pointer in ieee80211_tx_pending_skb, but
      then don't use it, which obviously is a bug. Fix
      this by removing the ieee80211_tx_h_sta handler
      and assigning the station pointer directly.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      ec25acc4
  10. 15 6月, 2010 2 次提交
  11. 08 5月, 2010 1 次提交
  12. 28 4月, 2010 1 次提交
    • S
      mac80211: fix rts threshold check · a2c40249
      Shanyu Zhao 提交于
      Currently whenever rts thresold is set, every packet will use RTS
      protection no matter its size exceeds the threshold or not. This is
      due to a bug in the rts threshold check.
      	if (len > tx->local->hw.wiphy->rts_threshold) {
      		txrc.rts = rts = true;
      	}
      Basically it is comparing an int (len) and a u32 (rts_threshold),
      and the variable len is assigned as:
      	len = min_t(int, tx->skb->len + FCS_LEN,
      			 tx->local->hw.wiphy->frag_threshold);
      However, when frag_threshold is "-1", len is always "-1", which is
      0xffffffff therefore rts is always set to true.
      
      CC: stable@kernel.org
      Signed-off-by: NShanyu Zhao <shanyu.zhao@intel.com>
      Reviewed-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      a2c40249
  13. 20 4月, 2010 1 次提交
  14. 08 4月, 2010 1 次提交
  15. 01 4月, 2010 1 次提交
    • J
      mac80211: Fix BIP to be used only with group-addressed frames · ecbcd324
      Jouni Malinen 提交于
      BIP (part of IEEE 802.11w) is only supposed to be used with
      group-addressed frames. We ended up picking it as a default mechanism
      for every management whenever we did not have a STA entry for the
      destination (e.g., for Probe Response to a STA that is not
      associated). While the extra MMIE in the end of management frames
      should not break frames completed in most cases, there is no point in
      doing this. Fix key selection to pick the default management key only
      if the frame is sent to multicast/broadcast address and the frame is a
      robust management frame.
      Signed-off-by: NJouni Malinen <j@w1.fi>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      ecbcd324
  16. 31 3月, 2010 1 次提交
    • J
      mac80211: move netdev queue enabling to correct spot · 7236fe29
      Johannes Berg 提交于
      "mac80211: fix skb buffering issue" still left a race
      between enabling the hardware queues and the virtual
      interface queues. In hindsight it's totally obvious
      that enabling the netdev queues for a hardware queue
      when the hardware queue is enabled is wrong, because
      it could well possible that we can fill the hw queue
      with packets we already have pending. Thus, we must
      only enable the netdev queues once all the pending
      packets have been processed and sent off to the device.
      
      In testing, I haven't been able to trigger this race
      condition, but it's clearly there, possibly only when
      aggregation is being enabled.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      Cc: stable@kernel.org
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      7236fe29
  17. 25 3月, 2010 1 次提交
  18. 09 2月, 2010 2 次提交
    • J
      mac80211: allow station add/remove to sleep · 34e89507
      Johannes Berg 提交于
      Many drivers would like to sleep during station
      addition and removal, and currently have a high
      complexity there from not being able to.
      
      This introduces two new callbacks sta_add() and
      sta_remove() that drivers can implement instead
      of using sta_notify() and that can sleep, and
      the new sta_add() callback is also allowed to
      fail.
      
      The reason we didn't do this previously is that
      the IBSS code wants to insert stations from the
      RX path, which is a tasklet, so cannot sleep.
      This patch will keep the station allocation in
      that path, but moves adding the station to the
      driver out of line. Since the addition can now
      fail, we can have IBSS peer structs the driver
      rejected -- in that case we still talk to the
      station but never tell the driver about it in
      the control.sta pointer. If there will ever be
      a driver that has a low limit on the number of
      stations and that cannot talk to any stations
      that are not known to it, we need to do come up
      with a new strategy of handling larger IBSSs,
      maybe quicker expiry or rejecting peers.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      34e89507
    • J
      wireless: update radiotap parser · 33e5a2f7
      Johannes Berg 提交于
      Upstream radiotap has adopted the namespace
      proposal David Young made and I then took care
      of, for which I had adapted the radiotap parser
      as a library outside the kernel. This brings
      the in-kernel parser up to speed.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      33e5a2f7
  19. 02 2月, 2010 2 次提交
  20. 26 1月, 2010 1 次提交
    • J
      mac80211: fix sw crypto · 382b1655
      Johannes Berg 提交于
      What a stupid mistake. In
      
          commit 813d7669
          Author: Johannes Berg <johannes@sipsolutions.net>
          Date:   Sun Jan 17 01:47:58 2010 +0100
      
              mac80211: move control.hw_key assignment
      
      I inserted code testing the wrong flags field,
      which means that the test is almost always true
      (it's really testing for the peer's WMM support)
      and thus the later parts of the stack assume hw
      crypto will be done even if that's not true.
      
      Obviously, that broke software crypto. Maxim
      said so specifically, and Jochen probably uses
      some cipher that iwl3945 doesn't support in
      hardware, which might also explain that Maxim
      reports that even hw crypto is broken.
      
      Fix this to test the right flags field.
      Reported-by: NMaxim Levitsky <maximlevitsky@gmail.com>
      Reported-by: NJochen Friedrich <jochen@scram.de>
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      382b1655
  21. 24 1月, 2010 1 次提交
  22. 23 1月, 2010 1 次提交
  23. 20 1月, 2010 4 次提交
  24. 13 1月, 2010 7 次提交
    • K
      mac80211: check uapsd state for dynamic power save · 0c74211d
      Kalle Valo 提交于
      To make U-APSD client mode effective, we must not wake up from dynamic power
      save when transmitting frames. So if dynamic power save is enabled, it needs
      check the queue the transmitted packet is in and decide if we need to wake
      up or not.
      
      In a perfect world, where all packets would have correct QoS tags, U-APSD
      enabled queues should not trigger wakeup from power save. But in the real
      world, where very few packets have correct QoS tags, this won't work. For
      example, if only voip class has U-APSD enabled and we send a packet in voip
      class, but the packets we receive are in best effort class, we would receive
      the packets with the legacy power save method. And that would increase
      latencies too much from a voip application point of view.
      
      The workaround is to enable U-APSD for all qeueus and still use dynamic ps
      wakeup for all other queues except voip. That way we can still save power
      with a voip application and not sacrifice latency. Normal traffic (in
      background, best effort or video class) would still trigger wakeup from
      dynamic power save.
      Signed-off-by: NKalle Valo <kalle.valo@nokia.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      0c74211d
    • K
      mac80211: create tx handler for dynamic ps · 5c1b98a5
      Kalle Valo 提交于
      Currently dynamic ps check is in ieee80211_xmit(), but it's cleaner
      to have a separate tx handler for this. Also this is a prerequisite for
      U-APSD client mode which needs to know the queue frame is in.
      
      Also need_dynamic_ps() function is embedded to the tx handler.
      
      No functional changes expect that the code is run in a later phase than
      originally.
      Signed-off-by: NKalle Valo <kalle.valo@nokia.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      5c1b98a5
    • F
      mac80211: do not transmit frames on unconfigured 4-addr vlan interfaces · 3f0e0b22
      Felix Fietkau 提交于
      If frames are transmitted on 4-addr ap vlan interfaces with no station,
      they end up being transmitted unencrypted, even if the ap interface
      uses WPA. This patch add some sanity checking to make sure that this
      does not happen.
      Signed-off-by: NFelix Fietkau <nbd@openwrt.org>
      Cc: stable@kernel.org
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      3f0e0b22
    • K
      mac80211: create Probe Request template · 05e54ea6
      Kalle Valo 提交于
      Certain type of hardware, for example wl1251 and wl1271, need a template
      for the Probe Request. Create a function ieee80211_probereq_get() which
      creates the template and drivers send it to hardware.
      Signed-off-by: NKalle Valo <kalle.valo@nokia.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      05e54ea6
    • K
      mac80211: add functions to create PS Poll and Nullfunc templates · 7044cc56
      Kalle Valo 提交于
      Some hardware, for example wl1251 and wl1271, handle the transmission
      of power save related frames in hardware, but the driver is responsible
      for creating the templates. It's better to create the templates in mac80211,
      that way all drivers can benefit from this.
      
      Add two new functions, ieee80211_pspoll_get() and ieee80211_nullfunc_get()
      which drivers need to call to get the frame. Drivers are also responsible
      for updating the templates after each association.
      
      Also new struct ieee80211_hdr_3addr is added to ieee80211.h to make it
      easy to calculate length of the Nullfunc frame.
      Signed-off-by: NKalle Valo <kalle.valo@nokia.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      7044cc56
    • J
      cfg80211/mac80211: Use more generic bitrate mask for rate control · 37eb0b16
      Jouni Malinen 提交于
      Extend struct cfg80211_bitrate_mask to actually use a bitfield mask
      instead of just a single fixed or maximum rate index. This change
      itself does not modify the behavior (except for debugfs files), but it
      prepares cfg80211 and mac80211 for a new nl80211 command for setting
      which rates can be used in TX rate control.
      
      Since frames are now going through the rate control algorithm
      unconditionally, the internal IEEE80211_TX_INTFL_RCALGO flag can now
      be removed. The RC implementations can use the rate_idx_mask value to
      optimize their behavior if only a single rate is enabled.
      
      The old max_rate_idx in struct ieee80211_tx_rate_control is maintained
      (but commented as deprecated) for backwards compatibility with existing
      RC implementations. Once these implementations have been updated to
      use the more generic rate_idx_mask, the max_rate_idx value can be
      removed.
      Signed-off-by: NJouni Malinen <jouni.malinen@atheros.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      37eb0b16
    • J
      mac80211: Select lowest rate based on basic rate set in AP mode · e00cfce0
      Jouni Malinen 提交于
      If the basic rate set is configured to not include the lowest rate
      (e.g., basic rate set = 6, 12, 24 Mbps in IEEE 802.11g mode), the AP
      should not send out broadcast frames at 1 Mbps. This type of
      configuration can be used to optimize channel usage in cases where
      there is no need for backwards compatibility with IEEE 802.11b-only
      devices.
      
      In AP mode, mac80211 was unconditionally using the lowest rate for
      Beacon frames and similarly, with all rate control algorithms that use
      rate_control_send_low(), the lowest rate ended up being used for all
      broadcast frames (and all unicast frames that are sent before
      association). Change this to take into account the basic rate
      configuration in AP mode, i.e., use the lowest rate in the basic rate
      set instead of the lowest supported rate when selecting the rate.
      Signed-off-by: NJouni Malinen <jouni.malinen@atheros.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      e00cfce0
  25. 06 1月, 2010 1 次提交
    • J
      mac80211: fix skb buffering issue · cf0277e7
      Johannes Berg 提交于
      Since I removed the master netdev, we've been
      keeping internal queues only, and even before
      that we never told the networking stack above
      the virtual interfaces about congestion. This
      means that packets are queued in mac80211 and
      the upper layers never know, possibly leading
      to memory exhaustion and other problems.
      
      This patch makes all interfaces multiqueue and
      uses ndo_select_queue to put the packets into
      queues per AC. Additionally, when the driver
      stops a queue, we now stop all corresponding
      queues for the virtual interfaces as well.
      
      The injection case will use VO by default for
      non-data frames, and BE for data frames, but
      downgrade any data frames according to ACM. It
      needs to be fleshed out in the future to allow
      chosing the queue/AC in radiotap.
      Reported-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Cc: stable@kernel.org [2.6.32]
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      cf0277e7