1. 18 6月, 2013 1 次提交
  2. 11 6月, 2013 1 次提交
    • T
      mac80211: fix mesh deadlock · ecccd072
      Thomas Pedersen 提交于
      The patch "cfg80211/mac80211: use cfg80211 wdev mutex in
      mac80211" introduced several deadlocks by converting the
      ifmsh->mtx to wdev->mtx. Solve these by:
      
      1. drop the cancel_work_sync() in ieee80211_stop_mesh().
         Instead make the mesh work conditional on whether the mesh
         is running or not.
      2. lock the mesh work with sdata_lock() to protect beacon
         updates and prevent races with wdev->mesh_id_len or
         cfg80211.
      Signed-off-by: NThomas Pedersen <thomas@cozybit.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      ecccd072
  3. 25 5月, 2013 1 次提交
    • J
      cfg80211/mac80211: use cfg80211 wdev mutex in mac80211 · 8d61ffa5
      Johannes Berg 提交于
      Using separate locks in cfg80211 and mac80211 has always
      caused issues, for example having to unlock in places in
      mac80211 to call cfg80211, which even needed a framework
      to make cfg80211 calls after some functions returned etc.
      
      Additionally, I suspect some issues people have reported
      with the cfg80211 state getting confused could be due to
      such issues, when cfg80211 is asking mac80211 to change
      state but mac80211 is in the process of telling cfg80211
      that the state changed (in another way.)
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      8d61ffa5
  4. 16 4月, 2013 1 次提交
    • J
      mac80211: parse VHT channel switch IEs · b2e506bf
      Johannes Berg 提交于
      VHT introduces multiple IEs that need to be parsed for a
      wide bandwidth channel switch. Two are (currently) needed
      in mac80211:
       * wide bandwidth channel switch element
       * channel switch wrapper element
      
      The former is contained in the latter for beacons and probe
      responses, but not for the spectrum management action frames
      so the IE parser needs a new argument to differentiate them.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      b2e506bf
  5. 11 4月, 2013 1 次提交
  6. 06 3月, 2013 3 次提交
  7. 18 2月, 2013 2 次提交
  8. 15 2月, 2013 4 次提交
    • J
      mac80211: clean up mesh code · bf7cd94d
      Johannes Berg 提交于
      There's various code with strange indentation,
      questionable loop and locking constructs, etc.
      
      The bigger change is moving the "sdata" argument
      to the first argument of all functions, like all
      other mac80211 functions that have one.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      bf7cd94d
    • T
      mac80211: cache mesh beacon · 2b5e1967
      Thomas Pedersen 提交于
      Previously, the entire mesh beacon would be generated each
      time the beacon timer fired. Instead generate a beacon
      head and tail (so the TIM can easily be inserted when mesh
      power save is on) when starting a mesh or the MBSS
      parameters change.
      
      Also add a mutex for protecting beacon updates and
      preventing leaks.
      Signed-off-by: NThomas Pedersen <thomas@cozybit.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      2b5e1967
    • J
      mac80211: stop toggling IEEE80211_HT_CAP_SUP_WIDTH_20_40 · e1a0c6b3
      Johannes Berg 提交于
      For VHT, many more bandwidth changes are possible. As a first
      step, stop toggling the IEEE80211_HT_CAP_SUP_WIDTH_20_40 flag
      in the HT capabilities and instead introduce a bandwidth field
      indicating the currently usable bandwidth to transmit to the
      station. Of course, make all drivers use it.
      
      To achieve this, make ieee80211_ht_cap_ie_to_sta_ht_cap() get
      the station as an argument, rather than the new capabilities,
      so it can set up the new bandwidth field.
      
      If the station is a VHT station and VHT bandwidth is in use,
      also set the bandwidth accordingly.
      
      Doing this allows us to get rid of the supports_40mhz flag as
      the HT capabilities now reflect the true capability instead of
      the current setting.
      
      While at it, also fix ieee80211_ht_cap_ie_to_sta_ht_cap() to not
      ignore HT cap overrides when MCS TX isn't supported (not that it
      really happens...)
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      e1a0c6b3
    • T
      mac80211: consolidate MBSS change notification · 39886b61
      Thomas Pedersen 提交于
      A few mesh utility functions will call
      ieee80211_bss_info_change_notify(), and then the caller
      might notify the driver of the same change again. Avoid
      this redundancy by propagating the BSS changes and
      generally calling bss_info_change_notify() once per
      change.
      Signed-off-by: NThomas Pedersen <thomas@cozybit.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      39886b61
  9. 12 2月, 2013 1 次提交
    • T
      mac80211: fix mesh sta teardown · 45b5028e
      Thomas Pedersen 提交于
      The patch "mac80211: clean up mesh sta allocation warning"
      moved some mesh initialization into a path which is only
      called when the kernel handles peering. This causes a hang
      when mac80211 tries to clean up a userspace-allocated
      station entry and delete a timer which has never been
      initialized.
      
      To avoid this, only do any mesh sta peering teardown if
      the kernel is actually handling it.
      
      The same is true when quiescing before suspend.
      Signed-off-by: NThomas Pedersen <thomas@cozybit.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      45b5028e
  10. 05 2月, 2013 2 次提交
    • T
      mac80211: stop plink timer only on mesh interfaces · aa5a1b8e
      Thomas Pedersen 提交于
      Since mesh_plink_quiesce() would unconditionally delete
      the plink timer, and the timer initialization was recently
      moved into the mesh code path, suspending with a non-mesh
      interface now causes a crash. Fix this by only deleting
      the plink timer for mesh interfaces.
      Reported-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Tested-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NThomas Pedersen <thomas@cozybit.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      aa5a1b8e
    • M
      mac80211: mesh power save basics · 3f52b7e3
      Marco Porsch 提交于
      Add routines to
      - maintain a PS mode for each peer and a non-peer PS mode
      - indicate own PS mode in transmitted frames
      - track neighbor STAs power modes
      - buffer frames when neighbors are in PS mode
      - add TIM and Awake Window IE to beacons
      - release frames in Mesh Peer Service Periods
      
      Add local_pm to sta_info to represent the link-specific power
      mode at this station towards the remote station. When a peer
      link is established, use the default power mode stored in mesh
      config. Update the PS status if the peering status of a neighbor
      changes.
      Maintain a mesh power mode for non-peer mesh STAs. Set the
      non-peer power mode to active mode during peering. Authenticated
      mesh peering is currently not working when either node is
      configured to be in power save mode.
      
      Indicate the current power mode in transmitted frames. Use QoS
      Nulls to indicate mesh power mode transitions.
      For performance reasons, calls to the function setting the frame
      flags are placed in HWMP routing routines, as there the STA
      pointer is already available.
      
      Add peer_pm to sta_info to represent the peer's link-specific
      power mode towards the local station. Add nonpeer_pm to
      represent the peer's power mode towards all non-peer stations.
      Track power modes based on received frames.
      
      Add the ps_data structure to ieee80211_if_mesh (for TIM map, PS
      neighbor counter and group-addressed frame buffer).
      
      Set WLAN_STA_PS flag for STA in PS mode to use the unicast frame
      buffering routines in the tx path. Update num_sta_ps to buffer
      and release group-addressed frames after DTIM beacons.
      
      Announce the awake window duration in beacons if in light or
      deep sleep mode towards any peer or non-peer. Create a TIM IE
      similarly to AP mode and add it to mesh beacons. Parse received
      Awake Window IEs and check TIM IEs for buffered frames.
      
      Release frames towards peers in mesh Peer Service Periods. Use
      the corresponding trigger frames and monitor the MPSP status.
      Append a QoS Null as trigger frame if neccessary to properly end
      the MPSP. Currently, in HT channels MPSPs behave imperfectly and
      show large delay spikes and frame losses.
      Signed-off-by: NMarco Porsch <marco@cozybit.com>
      Signed-off-by: NIvan Bezyazychnyy <ivan.bezyazychnyy@gmail.com>
      Signed-off-by: NMike Krinkin <krinkin.m.u@gmail.com>
      Signed-off-by: NMax Filippov <jcmvbkbc@gmail.com>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      3f52b7e3
  11. 30 1月, 2013 1 次提交
  12. 28 1月, 2013 1 次提交
  13. 24 1月, 2013 2 次提交
  14. 17 1月, 2013 1 次提交
  15. 28 11月, 2012 1 次提交
  16. 26 11月, 2012 2 次提交
  17. 17 10月, 2012 2 次提交
  18. 14 9月, 2012 1 次提交
  19. 20 8月, 2012 1 次提交
    • J
      mac80211: mesh: don't use global channel type · 466f310d
      Johannes Berg 提交于
      Using local->_oper_channel_type in the mesh code is
      completely wrong as this value is the combination
      of the various interface channel types and can be
      a different value from the mesh interface in case
      there are multiple virtual interfaces.
      
      Use sdata->vif.bss_conf.channel_type instead as it
      tracks the per-vif channel type.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      466f310d
  20. 14 8月, 2012 1 次提交
  21. 04 8月, 2012 2 次提交
  22. 31 7月, 2012 2 次提交
  23. 11 7月, 2012 1 次提交
  24. 28 6月, 2012 1 次提交
  25. 24 6月, 2012 1 次提交
    • J
      mac80211: clean up debugging · bdcbd8e0
      Johannes Berg 提交于
      There are a few things that make the logging and
      debugging in mac80211 less useful than it should
      be right now:
       * a lot of messages should be pr_info, not pr_debug
       * wholesale use of pr_debug makes it require *both*
         Kconfig and dynamic configuration
       * there are still a lot of ifdefs
       * the style is very inconsistent, sometimes the
         sdata->name is printed in front
      
      Clean up everything, introducing new macros and
      separating out the station MLME debugging into
      a new Kconfig symbol.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      bdcbd8e0
  26. 06 6月, 2012 1 次提交
  27. 17 5月, 2012 1 次提交
  28. 16 5月, 2012 1 次提交