1. 23 1月, 2015 13 次提交
    • J
      mac80211: support beacon statistics · 225b8189
      Johannes Berg 提交于
      For drivers without beacon filtering, support beacon statistics
      entirely, i.e. report the number of beacons and average signal.
      
      For drivers with beacon filtering, give them the number of beacons
      received by mac80211 -- in case the device reports only the number
      of filtered beacons then driver doesn't have to count all beacons
      again as mac80211 already does.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      225b8189
    • J
      mac80211: fix per-TID RX-MSDU counter · 3d6dc343
      Johannes Berg 提交于
      In the case of non-QoS association, the counter was actually
      wrong. The right index isn't security_idx but seqno_idx, as
      security_idx will be 0 for data frames, while 16 is needed.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      3d6dc343
    • J
      mac80211: tdls: disentangle HT supported conditions · c5309ba7
      Johannes Berg 提交于
      These conditions are rather difficult to follow, for example
      because "!sta" only exists to not crash in the case that we
      don't have a station pointer (WLAN_TDLS_SETUP_REQUEST) in
      which the additional condition (peer supports HT) doesn't
      actually matter anyway.
      
      Cleaning this up only duplicates two lines of code but makes
      the rest far easier to read, so do that.
      
      As a side effect, smatch stops complaining about the lack of
      a sta pointer test after the !sta (since the !sta goes away)
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      c5309ba7
    • J
      mac80211: tdls: remove shadowing variable · d6f5cc09
      Johannes Berg 提交于
      There's no need to use another local 'sta' variable as the
      original (outer scope) one isn't needed any more and has
      become invalid anyway when exiting the RCU read section.
      
      Remove the inner scope one and along with it the useless NULL
      initialization.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      d6f5cc09
    • J
      nl80211: suppress smatch warnings · 13874e4b
      Johannes Berg 提交于
      smatch warns that we once checked request->ssids in two functions
      and then unconditionally used it later again.
      
      This is actually fine, because the code has a relationship between
      attrs[NL80211_ATTR_SCAN_SSIDS], n_ssids and request->ssids, but
      smatch isn't smart enough to realize that.
      
      Suppress the warnings by always checking just n_ssids - that way
      smatch won't know that request->ssids could be NULL, and since it
      is only NULL when n_ssids is 0 we still check everything correctly.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      13874e4b
    • B
      Revert "mac80211: keep sending peer candidate events while in listen state" · 985e88b1
      Bob Copeland 提交于
      This reverts commit 2ae70efc.
      
      The new peer events that are generated by the change are causing problems
      with wpa_supplicant in userspace: wpa_s tries to restart SAE authentication
      with the peer when receiving the event, even though authentication may be in
      progress already, and it gets very confused.
      
      Revert back to the original operating mode, which is to only get events when
      there is no corresponding station entry.
      
      Cc: Nishikawa, Kenzoh <Kenzoh.Nishikawa@jp.sony.com>
      Cc: Masashi Honma <masashi.honma@gmail.com>
      Signed-off-by: NBob Copeland <me@bobcopeland.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      985e88b1
    • L
      mac80211: complete scan work immediately if quiesced or suspended · 332ff7fe
      Luciano Coelho 提交于
      It is possible that a deferred scan is queued after the queues are
      flushed in __ieee80211_suspend().  The deferred scan work may be
      scheduled by ROC or ieee80211_stop_poll().
      
      To make sure don't start a new scan while suspending, check whether
      we're quiescing or suspended and complete the scan immediately if
      that's the case.
      Signed-off-by: NLuciano Coelho <luciano.coelho@intel.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      332ff7fe
    • E
      mac80211: avoid races related to suspend flow · 4afaff17
      Emmanuel Grumbach 提交于
      When we go to suspend, there is complex set of states that
      avoids races. The quiescing variable is set whlie
      __ieee80211_suspend is running. Then suspended is set.
      The code makes sure there is no window without any of these
      flags.
      
      The problem is that workers can still be enqueued while we
      are quiescing. This leads to situations where the driver is
      already suspending and other flows like disassociation are
      handled by a worker.
      
      To fix this, we need to check quiescing and suspended flags
      in the worker itself and not only before enqueueing it.
      I also add here extensive documentation to ease the
      understanding of these complex issues.
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      4afaff17
    • E
      mac80211: synchronize_net() before flushing the queues · 14f2ae83
      Emmanuel Grumbach 提交于
      When mac80211 disconnects, it drops all the packets on the
      queues. This happens after the net stack has been notified
      that we have no link anymore (netif_carrier_off).
      netif_carrier_off ensures that no new packets are sent to
      xmit() callback, but we might have older packets in the
      middle of the Tx path. These packets will land in the
      driver's queues after the latter have been flushed.
      Synchronize_net() between netif_carrier_off and drv_flush()
      will fix this.
      
      Note that we can't call synchronize_net inside
      ieee80211_flush_queues since there are flows that call
      ieee80211_flush_queues and don't need synchronize_net()
      which is an expensive operation.
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      [reword comment to be more accurate]
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      14f2ae83
    • L
      nl80211: add an attribute to allow delaying the first scheduled scan cycle · 9c748934
      Luciano Coelho 提交于
      The userspace may want to delay the the first scheduled scan or
      net-detect cycle.  Add an optional attribute to the scheduled scan
      configuration to pass the delay to be (optionally) used by the driver.
      Signed-off-by: NLuciano Coelho <luciano.coelho@intel.com>
      [add the attribute to the policy to validate it]
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      9c748934
    • L
      mac80211: enable TPC through mac80211 stack · db82d8a9
      Lorenzo Bianconi 提交于
      Control per packet Transmit Power Control (TPC) in lower drivers
      according to TX power settings configured by the user. In particular TPC is
      enabled if value passed in enum nl80211_tx_power_setting is
      NL80211_TX_POWER_LIMITED (allow using less than specified from userspace),
      whereas TPC is disabled if nl80211_tx_power_setting is set to
      NL80211_TX_POWER_FIXED (use value configured from userspace)
      Signed-off-by: NLorenzo Bianconi <lorenzo.bianconi83@gmail.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      db82d8a9
    • V
      nl80211: Allow set network namespace by fd · 4b681c82
      Vadim Kochan 提交于
      Added new NL80211_ATTR_NETNS_FD which allows to
      set namespace via nl80211 by fd.
      Signed-off-by: NVadim Kochan <vadim4j@gmail.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      4b681c82
    • J
      mac80211: allow drivers to control software crypto · fa7e1fbc
      Johannes Berg 提交于
      Some drivers unfortunately cannot support software crypto, but
      mac80211 currently assumes that they do.
      
      This has the issue that if the hardware enabling fails for some
      reason, the software fallback is used, which won't work. This
      clearly isn't desirable, the error should be reported and the
      key setting refused.
      
      Support this in mac80211 by allowing drivers to set a new HW
      flag IEEE80211_HW_SW_CRYPTO_CONTROL, in which case mac80211 will
      only allow software fallback if the set_key() method returns 1.
      The driver will also need to advertise supported cipher suites
      so that mac80211 doesn't advertise any (future) software ciphers
      that the driver can't actually do.
      
      While at it, to make it easier to support this, refactor the
      ieee80211_init_cipher_suites() code.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      fa7e1fbc
  2. 22 1月, 2015 1 次提交
    • J
      mac80211: fix HW registration error paths · 54330bf6
      Johannes Berg 提交于
      Station info state is started in allocation, so should be
      destroyed on free (it's just a timer); rate control must
      be freed if anything afterwards fails to initialize.
      
      LED exit should be later, no need for locking there, but
      it needs to be done also when rate init failed.
      
      Also clean up the code by moving a label so the locking
      doesn't have to be done separately.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      54330bf6
  3. 20 1月, 2015 2 次提交
    • E
      mac80211: delete the assoc/auth timer upon suspend · c1e140bf
      Emmanuel Grumbach 提交于
      While suspending, we destroy the authentication /
      association that might be taking place. While doing so, we
      forgot to delete the timer which can be firing after
      local->suspended is already set, producing the warning below.
      
      Fix that by deleting the timer.
      
      [66722.825487] WARNING: CPU: 2 PID: 5612 at net/mac80211/util.c:755 ieee80211_can_queue_work.isra.18+0x32/0x40 [mac80211]()
      [66722.825487] queueing ieee80211 work while going to suspend
      [66722.825529] CPU: 2 PID: 5612 Comm: kworker/u16:69 Tainted: G        W  O  3.16.1+ #24
      [66722.825537] Workqueue: events_unbound async_run_entry_fn
      [66722.825545] Call Trace:
      [66722.825552]  <IRQ>  [<ffffffff817edbb2>] dump_stack+0x4d/0x66
      [66722.825556]  [<ffffffff81075cad>] warn_slowpath_common+0x7d/0xa0
      [66722.825572]  [<ffffffffa06b5b90>] ? ieee80211_sta_bcn_mon_timer+0x50/0x50 [mac80211]
      [66722.825573]  [<ffffffff81075d1c>] warn_slowpath_fmt+0x4c/0x50
      [66722.825586]  [<ffffffffa06977a2>] ieee80211_can_queue_work.isra.18+0x32/0x40 [mac80211]
      [66722.825598]  [<ffffffffa06977d5>] ieee80211_queue_work+0x25/0x50 [mac80211]
      [66722.825611]  [<ffffffffa06b5bac>] ieee80211_sta_timer+0x1c/0x20 [mac80211]
      [66722.825614]  [<ffffffff8108655a>] call_timer_fn+0x8a/0x300
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      c1e140bf
    • J
      Revert "wireless: Support of IFLA_INFO_KIND rtnl attribute" · 6e9f3fa4
      Johannes Berg 提交于
      This reverts commit ba1debdf.
      
      Oliver reported that it breaks network-manager, for some reason with
      this patch NM decides that the device isn't wireless but "generic"
      (ethernet), sees no carrier (as expected with wifi) and fails to do
      anything else with it.
      
      Revert this to unbreak userspace.
      Reported-by: NOliver Hartkopp <socketcan@hartkopp.net>
      Tested-by: NOliver Hartkopp <socketcan@hartkopp.net>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      6e9f3fa4
  4. 17 1月, 2015 1 次提交
  5. 16 1月, 2015 2 次提交
  6. 15 1月, 2015 2 次提交
  7. 14 1月, 2015 9 次提交
  8. 10 1月, 2015 1 次提交
  9. 09 1月, 2015 2 次提交
    • J
      mac80211: fix handling TIM IE when stations disconnect · 9b7a86f3
      Johannes Berg 提交于
      When a station disconnects with frames still pending, we clear
      the TIM bit, but too late - it's only cleared when the station
      is already removed from the driver, and thus the driver can get
      confused (and hwsim will loudly complain.)
      
      Fix this by clearing the TIM bit earlier, when the station has
      been unlinked but not removed from the driver yet. To do this,
      refactor the TIM recalculation to in that case ignore traffic
      and simply assume no pending traffic - this is correct for the
      disconnected station even though the frames haven't been freed
      yet at that point.
      
      This patch isn't needed for current drivers though as they don't
      check the station argument to the set_tim() operation and thus
      don't really run into the possible confusion.
      Reported-by: NJouni Malinen <j@w1.fi>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      9b7a86f3
    • J
      mac80211_hwsim: fix PS debugfs file locking · a809ca5e
      Johannes Berg 提交于
      The functions called within the iterators must be called with
      tasklets disabled, so use atomic iteration like the rest of
      the code and disable tasklets around the whole operation.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      a809ca5e
  10. 08 1月, 2015 7 次提交
    • J
      mac80211: provide per-TID RX/TX MSDU counters · 79c892b8
      Johannes Berg 提交于
      Implement the new counters cfg80211 can now advertise to userspace.
      The TX code is in the sequence number handler, which is a bit odd,
      but that place already knows the TID and frame type, so it was
      easiest and least impact there.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      79c892b8
    • J
      nl80211: support per-TID station statistics · 6de39808
      Johannes Berg 提交于
      The base for the current statistics is pretty mixed up, support
      exporting RX/TX statistics for MSDUs per TID. This (currently)
      covers received MSDUs, transmitted MSDUs and retries/failures
      thereof.
      
      Doing it per TID for MSDUs makes more sense than say only per AC
      because it's symmetric - we could export per-AC statistics for all
      frames (which AC we used for transmission can be determined also
      for management frames) but per TID is better and usually data
      frames are really the ones we care about. Also, on RX we can't
      determine the AC - but we do know the TID for any QoS MPDU we
      received.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      6de39808
    • J
      nl80211: clarify packet statistics descriptions · 8d791361
      Johannes Berg 提交于
      The current statistics we keep aren't very clear, some are on
      MPDUs and some on MSDUs/MMPDUs. Clarify the descriptions based
      on the counters mac80211 keeps.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      8d791361
    • J
      cfg80211: add nl80211 beacon-only statistics · a76b1942
      Johannes Berg 提交于
      Add these two values:
       * BEACON_RX: number of beacons received from this peer
       * BEACON_SIGNAL_AVG: signal strength average for beacons only
      
      These can then be used for Android Lollipop's statistics request.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      a76b1942
    • J
      cfg80211: remove enum station_info_flags · 319090bf
      Johannes Berg 提交于
      This is really just duplicating the list of information that's
      already available in the nl80211 attribute, so remove the list.
      Two small changes are needed:
       * remove STATION_INFO_ASSOC_REQ_IES complete, but the length
         (assoc_req_ies_len) can be used instead
       * add NL80211_STA_INFO_RX_DROP_MISC which exists internally
         but not in nl80211 yet
      
      This gets rid of the duplicate maintenance of the two lists.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      319090bf
    • J
      mac80211: allow drivers to provide most station statistics · 2b9a7e1b
      Johannes Berg 提交于
      In many cases, drivers can filter things like beacons that will
      skew statistics reported by mac80211. To get correct statistics
      in these cases, call drivers to obtain statistics and let them
      override all values, filling values from mac80211 if the driver
      didn't provide them. Not all of them make sense for the driver
      to fill, so some are still always done by mac80211.
      
      Note that this doesn't currently allow a driver to say "I know
      this value is wrong, don't report it at all", or to sum it up
      with a mac80211 value (as could be useful for "dropped misc"),
      that can be added if it turns out to be needed.
      
      This also gets rid of the get_rssi() method as is can now be
      implemented using sta_statistics().
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      2b9a7e1b
    • J
      mac80211: send statistics with delete station event · 6f7a8d26
      Johannes Berg 提交于
      Use the new cfg80211_del_sta_sinfo() function to send the
      statistics about the deleted station with the delete event.
      This lets userspace see how much traffic etc. the deleted
      station used.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      6f7a8d26