1. 30 Nov, 2009 1 commit
    • Johannes Berg's avatar
      mac80211: fix spurious delBA handling · 827d42c9
      Johannes Berg authored
      Lennert Buytenhek noticed that delBA handling in mac80211
      was broken and has remotely triggerable problems, some of
      which are due to some code shuffling I did that ended up
      changing the order in which things were done -- this was
      
        commit d75636ef
        Author: Johannes Berg <johannes@sipsolutions.net>
        Date:   Tue Feb 10 21:25:53 2009 +0100
      
          mac80211: RX aggregation: clean up stop session
      
      and other parts were already present in the original
      
        commit d92684e6
      
      
        Author: Ron Rindjunsky <ron.rindjunsky@intel.com>
        Date:   Mon Jan 28 14:07:22 2008 +0200
      
            mac80211: A-MPDU Tx add delBA from recipient support
      
      The first problem is that I moved a BUG_ON before various
      checks -- thereby making it possible to hit. As the comment
      indicates, the BUG_ON can be removed since the ampdu_action
      callback must already exist when the state is != IDLE.
      
      The second problem isn't easily exploitable but there's a
      race condition due to unconditionally setting the state to
      OPERATIONAL when a delBA frame is received, even when no
      aggregation session was ever initiated. All the drivers
      accept stopping the session even then, but that opens a
      race window where crashes could happen before the driver
      accepts it. Right now, a WARN_ON may happen with non-HT
      drivers, while the race opens only for HT drivers.
      
      For this case, there are two things necessary to fix it:
       1) don't process spurious delBA frames, and be more careful
          about the session state; don't drop the lock
      
       2) HT drivers need to be prepared to handle a session stop
          even before the session was really started -- this is
          true for all drivers (that support aggregation) but
          iwlwifi which can be fixed easily. The other HT drivers
          (ath9k and ar9170) are behaving properly already.
      Reported-by: default avatarLennert Buytenhek <buytenh@marvell.com>
      Cc: stable@kernel.org
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      827d42c9
  2. 19 Nov, 2009 1 commit
    • Johannes Berg's avatar
      mac80211: fix resume · ceb99fe0
      Johannes Berg authored
      
      
      When mac80211 resumes, it currently first sets suspended
      to false so the driver can start doing things and we can
      receive frames.
      
      However, if we actually receive frames then it can end
      up starting some work which adds timers and then later
      runs into a BUG_ON in the timer code because it tries
      add_timer() on a pending timer.
      
      Fix this by keeping track of the resuming process by
      introducing a new variable 'resuming' which gets set to
      true early on instead of setting 'suspended' to false,
      and allow queueing work but not receiving frames while
      resuming.
      Reported-by: default avatarMaxim Levitsky <maximlevitsky@gmail.com>
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      ceb99fe0
  3. 01 Sep, 2009 1 commit
  4. 28 Aug, 2009 3 commits
  5. 20 Aug, 2009 2 commits
  6. 14 Aug, 2009 4 commits
  7. 04 Aug, 2009 3 commits
    • Igor Perminov's avatar
      mac80211: FIF_PSPOLL filter flag · e3b90ca2
      Igor Perminov authored
      
      
      When an interface is configured in the AP mode, the mac80211
      implementation doesn't inform the driver to receive PS Poll frames.
      It leads to inability to communicate with power-saving stations
      reliably.
      The FIF_CONTROL flag isn't passed by mac80211 to
      ieee80211_ops.configure_filter when an interface is in the AP mode.
      And it's ok, because we don't want to receive ACK frames and other
      control ones, but only PS Poll ones.
      
      This patch introduces the FIF_PSPOLL filter flag in addition to
      FIF_CONTROL, which means for the driver "pass PS Poll frames".
      
      This flag is passed to the driver:
      A) When an interface is configured in the AP mode.
      B) In all cases, when the FIF_CONTROL flag was passed earlier (in
      addition to it).
      Signed-off-by: default avatarIgor Perminov <igor.perminov@inbox.ru>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      e3b90ca2
    • Maxim Levitsky's avatar
      mac80211: Retry probe request few times · a43abf29
      Maxim Levitsky authored
      
      
      Retry 5 times  (chosen arbitary ), before assuming
      that station is out of range.
      
      Fixes frequent disassociations while connected to weak,
      and sometimes even strong access points.
      Signed-off-by: default avatarMaxim Levitky <maximlevitsky@gmail.com>
      Acked-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      a43abf29
    • Luis R. Rodriguez's avatar
      mac80211: redefine usage of the mac80211 workqueue · 42935eca
      Luis R. Rodriguez authored
      
      
      The mac80211 workqueue exists to enable mac80211 and drivers
      to queue their own work on a single threaded workqueue. mac80211
      takes care to flush the workqueue during suspend but we never
      really had requirements on drivers for how they should use
      the workqueue in consideration for suspend.
      
      We extend mac80211 to document how the mac80211 workqueue should
      be used, how it should not be used and finally move raw access to
      the workqueue to mac80211 only. Drivers and mac80211 use helpers
      to queue work onto the mac80211 workqueue:
      
        * ieee80211_queue_work()
        * ieee80211_queue_delayed_work()
      
      These helpers will now warn if mac80211 already completed its
      suspend cycle and someone is trying to queue work. mac80211
      flushes the mac80211 workqueue prior to suspend a few times,
      but we haven't taken the care to ensure drivers won't add more
      work after suspend. To help with this we add a warning when
      someone tries to add work and mac80211 already completed the
      suspend cycle.
      
      Drivers should ensure they cancel any work or delayed work
      in the mac80211 stop() callback.
      Signed-off-by: default avatarLuis R. Rodriguez <lrodriguez@atheros.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      42935eca
  8. 29 Jul, 2009 1 commit
  9. 27 Jul, 2009 4 commits
  10. 24 Jul, 2009 3 commits
    • Johannes Berg's avatar
      mac80211: remove master netdev · 3b8d81e0
      Johannes Berg authored
      
      
      With the internal 'pending' queue system in place, we can simply
      put packets there instead of pushing them off to the master dev,
      getting rid of the master interface completely.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      3b8d81e0
    • Johannes Berg's avatar
      mac80211: monitor the connection · b291ba11
      Johannes Berg authored
      
      
      With the recent MLME rework I accidentally removed the connection
      monitoring code. In order to add it back, this patch will add new
      code to monitor both for beacon loss and for the connection actually
      working, with possibly separate triggers.
      
      When no unicast frames have been received from the AP for (currently)
      two seconds, we will send the AP a probe request. Also, when we don't
      see beacons from the AP for two seconds, we do the same (but those
      times need not be the same due to the way the code is now written).
      
      Additionally, clean up the parameters to the ieee80211_set_disassoc()
      function that I need here, those are all useless except sdata.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      b291ba11
    • Johannes Berg's avatar
      cfg80211: rework key operation · fffd0934
      Johannes Berg authored
      
      
      This reworks the key operation in cfg80211, and now only
      allows, from userspace, configuring keys (via nl80211)
      after the connection has been established (in managed
      mode), the IBSS been joined (in IBSS mode), at any time
      (in AP[_VLAN] modes) or never for all the other modes.
      
      In order to do shared key authentication correctly, it
      is now possible to give a WEP key to the AUTH command.
      To configure static WEP keys, these are given to the
      CONNECT or IBSS_JOIN command directly, for a userspace
      SME it is assumed it will configure it properly after
      the connection has been established.
      
      Since mac80211 used to check the default key in IBSS
      mode to see whether or not the network is protected,
      it needs an update in that area, as well as an update
      to make use of the WEP key passed to auth() for shared
      key authentication.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      fffd0934
  11. 10 Jul, 2009 8 commits
  12. 15 Jun, 2009 2 commits
    • Johannes Berg's avatar
      mac80211: disconnect when user changes channel · 7e9debe9
      Johannes Berg authored
      
      
      If we do not disconnect when a channel switch is requested,
      we end up eventually detection beacon loss from the AP and
      then disconnecting, without ever really telling the AP, so
      we might just as well disconnect right away.
      
      Additionally, this fixes a problem with iwlwifi where the
      driver will clear some internal state on channel changes
      like this and then get confused when we actually go clear
      that state from mac80211.
      
      It may look like this patch drops the no-IBSS check, but
      that is already handled by cfg80211 in the wext handler it
      provides for IBSS (cfg80211_ibss_wext_siwfreq).
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      7e9debe9
    • Johannes Berg's avatar
      mac80211: add queue debugfs file · db2e6bd4
      Johannes Berg authored
      
      
      I suspect that some driver bugs can cause queues to be
      stopped while they shouldn't be, but it's hard to find
      out whether that is the case or not without having any
      visible information about the queues. This adds a file
      to debugfs that allows us to see the queues' statuses.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      db2e6bd4
  13. 10 Jun, 2009 1 commit
    • Johannes Berg's avatar
      mac80211: do not pass PS frames out of mac80211 again · 8f77f384
      Johannes Berg authored
      
      
      In order to handle powersave frames properly we had needed
      to pass these out to the device queues again, and introduce
      the skb->requeue bit. This, however, also has unnecessary
      overhead by needing to 'clean up' already tried frames, and
      this clean-up code is also buggy when software encryption
      is used.
      
      Instead of sending the frames via the master netdev queue
      again, simply put them into the pending queue. This also
      fixes a problem where frames for that particular station
      could be reordered when some were still on the software
      queues and older ones are re-injected into the software
      queue after them.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      8f77f384
  14. 22 May, 2009 1 commit
  15. 20 May, 2009 3 commits
  16. 13 May, 2009 2 commits