Search Linux Wireless

[PATCH RFC 0/7] wifi: cfg80211/mac80211: add support to handle per link statistics of multi-link station

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Current implementation of NL80211_CMD_GET_STATION does not work
for multi-link operation(MLO) since in case of MLO only deflink
(or one of the links) is considered and not all links.

Hence, add the link_sinfo structure to provide infrastructure
for link-level station statistics for multi-link operation(MLO).

Additionally, accumulated stats for MLO are included in a concise
manner to provide a comprehensive overview of the ML stations.

NOTE:
   1. Current code changes are done to get an early feedback on design.
   2. Once RFC patches are approved will add the required driver changes.
   3. Ath12k changes are included in this series for reference to other
      driver changes.

Current flow:

      +-------------------------+                                            
      |      From userspace -   |                                            
      | NL80211_CMD_GET_STATION |                                            
      |                         |                                            
      +-------------------------+                                            
                   |                                                         
                   |                                                         
 +---------------------------------------+                                   
 |        nl80211_get_station()          |                                   
 |                                       |                                   
 | 1. Locally define sinfo               |                                   
 | 2. call cfg80211 ops - .get_station() |                                   
 +---------------------------------------+                                   
                    |                                                        
                    |                                                         
+-------------------------------------------+                                
|          sta_set_sinfo()                  |                                
| 1. call mac80211 ops - .sta_statistics()  |                                
|    to fill sinfo structure                |                                
| 2. fill remaining sinfo structure, if     |                                
|    not filled from driver                 |                                
+-------------------------------------------+  


Proposed flow: (Changes in last block)

      +-------------------------+                                            
      |      From userspace -   |                                            
      | NL80211_CMD_GET_STATION |                                            
      |                         |                                            
      +-------------------------+                                            
                   |                                                         
                   |                                                         
 +---------------------------------------+                                   
 |        nl80211_get_station()          |                                   
 |                                       |                                   
 | 1. Locally define sinfo               |                                   
 | 2. call cfg80211 ops - .get_station() |                                   
 +---------------------------------------+ 
                   |
                   |
 +----------------------------------------------------------+
 |                 sta_set_sinfo()                          |
 |   1. fill sinfo structure- info related to station       |
 |   2. if MLO                                              |
 |      a. call sta_set_link_sinfo() for each valid link    |
 |         i. Call mac80211 ops- .link_sta_statistics()     |
 |            to fill link_sinfo structure                  |
 |         ii. fill remaining link_sinfo structure          |
 |      b. call sta_set_mld_info()- to fill accumulated     |
 |         stats at MLO level                               |
 |   3. if non-ML                                           |
 |      a. call sta_set_link_sinfo() for deflink            |
 |         i. Call mac80211 ops - .link_sta_statistics()    |
 |            to fill deflink link_sinfo structure          |
 |         ii. fill remaining link_sinfo structure          |
 +----------------------------------------------------------+

Alternate approach:
   - Keep sinfo structure as it is and use this for non-ML or
     accumulated statistics for ML station.
   - Add link sinfo for links with only certain link specific statistics.
   - Keep mac_op_sta_statistics at MLD level and let driver fill the
     MLO and link level data, if driver not filling let mac80211 fill
     the data.
   - Corresponding changes done to embed statistics into the NL message
     based on the sinfo/link_sinfo.
	 
pseudo code for alternate approach:

 - cfg80211/mac80211:
	structure sinfo {
	filled
	packets
	bytes
	etc... //retain the structure as it was there before
	add structure link_sinfo{
		filled
		packets
		bytes
		etc ... //all link level applicable fields
		}
	}
 - Call drv_sta_statistics at MLO level or deflink if non-ML and let
   driver fill MLO statistics and link level statistics.
 - Check if sinfo->filled is set if not fill the corresponding data
   in sinfo and link sinfo for MLO or sinfo for non-ML.

Why not considered this approach for implementation:

 - The required changes here to other drivers are minimal. However,
   since sinfo is retained, every field needs to be filled at the MLO
   level. MLO statistics for tx_duration, pertid, etc., may not be
   very useful.
 - If these elements are not filled for MLO, they will remain unused
   in sinfo.

Sarika Sharma (7):
  wifi: cfg80211: reorg sinfo structure elements for mesh
  wifi: cfg80211: reorg sinfo structure elements for MLO
  wifi: cfg80211: extend statistics for link level in sinfo
  wifi: cfg80211: add accumulated statistics for MLO links
  wifi: mac80211: add support to accumulate removed link statistics
  wifi: cfg80211: add additional MLO statistics
  wifi: ath12k: correctly fetch arsta for MLO

 drivers/net/wireless/ath/ath12k/mac.c |  51 +--
 include/net/cfg80211.h                | 204 ++++++----
 include/net/mac80211.h                |  21 +-
 net/mac80211/driver-ops.h             |  14 +-
 net/mac80211/ethtool.c                |  30 +-
 net/mac80211/ibss.c                   |   4 +-
 net/mac80211/sta_info.c               | 537 ++++++++++++++++++--------
 net/mac80211/sta_info.h               |  30 +-
 net/mac80211/trace.h                  |   2 +-
 net/mac80211/util.c                   |  18 +-
 net/wireless/nl80211.c                | 353 +++++++++++------
 net/wireless/trace.h                  |  33 +-
 net/wireless/util.c                   |  10 +-
 net/wireless/wext-compat.c            |  22 +-
 14 files changed, 889 insertions(+), 440 deletions(-)


base-commit: 7bf1659bad4e9413cdba132ef9cbd0caa9cabcc4
-- 
2.34.1





[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux