cfg80211: Expose TXQ stats and parameters to userspace
This adds support for exporting the mac80211 TXQ stats via nl80211 by way of a nested TXQ stats attribute, as well as for configuring the quantum and limits that were previously only changeable through debugfs. This commit adds just the nl80211 API, a subsequent commit adds support to mac80211 itself. Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:

committed by
Johannes Berg

parent
cc60dbbfed
commit
52539ca89f
@@ -1079,6 +1079,37 @@ struct sta_bss_parameters {
|
||||
u16 beacon_interval;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct cfg80211_txq_stats - TXQ statistics for this TID
|
||||
* @filled: bitmap of flags using the bits of &enum nl80211_txq_stats to
|
||||
* indicate the relevant values in this struct are filled
|
||||
* @backlog_bytes: total number of bytes currently backlogged
|
||||
* @backlog_packets: total number of packets currently backlogged
|
||||
* @flows: number of new flows seen
|
||||
* @drops: total number of packets dropped
|
||||
* @ecn_marks: total number of packets marked with ECN CE
|
||||
* @overlimit: number of drops due to queue space overflow
|
||||
* @overmemory: number of drops due to memory limit overflow
|
||||
* @collisions: number of hash collisions
|
||||
* @tx_bytes: total number of bytes dequeued
|
||||
* @tx_packets: total number of packets dequeued
|
||||
* @max_flows: maximum number of flows supported
|
||||
*/
|
||||
struct cfg80211_txq_stats {
|
||||
u32 filled;
|
||||
u32 backlog_bytes;
|
||||
u32 backlog_packets;
|
||||
u32 flows;
|
||||
u32 drops;
|
||||
u32 ecn_marks;
|
||||
u32 overlimit;
|
||||
u32 overmemory;
|
||||
u32 collisions;
|
||||
u32 tx_bytes;
|
||||
u32 tx_packets;
|
||||
u32 max_flows;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct cfg80211_tid_stats - per-TID statistics
|
||||
* @filled: bitmap of flags using the bits of &enum nl80211_tid_stats to
|
||||
@@ -1088,6 +1119,7 @@ struct sta_bss_parameters {
|
||||
* @tx_msdu_retries: number of retries (not counting the first) for
|
||||
* transmitted MSDUs
|
||||
* @tx_msdu_failed: number of failed transmitted MSDUs
|
||||
* @txq_stats: TXQ statistics
|
||||
*/
|
||||
struct cfg80211_tid_stats {
|
||||
u32 filled;
|
||||
@@ -1095,6 +1127,7 @@ struct cfg80211_tid_stats {
|
||||
u64 tx_msdu;
|
||||
u64 tx_msdu_retries;
|
||||
u64 tx_msdu_failed;
|
||||
struct cfg80211_txq_stats txq_stats;
|
||||
};
|
||||
|
||||
#define IEEE80211_MAX_CHAINS 4
|
||||
@@ -2204,6 +2237,9 @@ enum cfg80211_connect_params_changed {
|
||||
* @WIPHY_PARAM_RTS_THRESHOLD: wiphy->rts_threshold has changed
|
||||
* @WIPHY_PARAM_COVERAGE_CLASS: coverage class changed
|
||||
* @WIPHY_PARAM_DYN_ACK: dynack has been enabled
|
||||
* @WIPHY_PARAM_TXQ_LIMIT: TXQ packet limit has been changed
|
||||
* @WIPHY_PARAM_TXQ_MEMORY_LIMIT: TXQ memory limit has been changed
|
||||
* @WIPHY_PARAM_TXQ_QUANTUM: TXQ scheduler quantum
|
||||
*/
|
||||
enum wiphy_params_flags {
|
||||
WIPHY_PARAM_RETRY_SHORT = 1 << 0,
|
||||
@@ -2212,6 +2248,9 @@ enum wiphy_params_flags {
|
||||
WIPHY_PARAM_RTS_THRESHOLD = 1 << 3,
|
||||
WIPHY_PARAM_COVERAGE_CLASS = 1 << 4,
|
||||
WIPHY_PARAM_DYN_ACK = 1 << 5,
|
||||
WIPHY_PARAM_TXQ_LIMIT = 1 << 6,
|
||||
WIPHY_PARAM_TXQ_MEMORY_LIMIT = 1 << 7,
|
||||
WIPHY_PARAM_TXQ_QUANTUM = 1 << 8,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -2964,6 +3003,9 @@ struct cfg80211_external_auth_params {
|
||||
*
|
||||
* @set_multicast_to_unicast: configure multicast to unicast conversion for BSS
|
||||
*
|
||||
* @get_txq_stats: Get TXQ stats for interface or phy. If wdev is %NULL, this
|
||||
* function should return phy stats, and interface stats otherwise.
|
||||
*
|
||||
* @set_pmk: configure the PMK to be used for offloaded 802.1X 4-Way handshake.
|
||||
* If not deleted through @del_pmk the PMK remains valid until disconnect
|
||||
* upon which the driver should clear it.
|
||||
@@ -3265,6 +3307,10 @@ struct cfg80211_ops {
|
||||
struct net_device *dev,
|
||||
const bool enabled);
|
||||
|
||||
int (*get_txq_stats)(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev,
|
||||
struct cfg80211_txq_stats *txqstats);
|
||||
|
||||
int (*set_pmk)(struct wiphy *wiphy, struct net_device *dev,
|
||||
const struct cfg80211_pmk_conf *conf);
|
||||
int (*del_pmk)(struct wiphy *wiphy, struct net_device *dev,
|
||||
@@ -3943,6 +3989,10 @@ struct wiphy {
|
||||
|
||||
u8 nan_supported_bands;
|
||||
|
||||
u32 txq_limit;
|
||||
u32 txq_memory_limit;
|
||||
u32 txq_quantum;
|
||||
|
||||
char priv[0] __aligned(NETDEV_ALIGN);
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user