BACKPORT: nl80211: Add NL command to support TID speicific configurations

Add the new NL80211_CMD_SET_TID_CONFIG command to support
data TID specific configuration. Per TID configuration is
passed in the nested NL80211_ATTR_TID_CONFIG attribute.

This patch adds support to configure per TID noack policy
through the NL80211_TID_CONFIG_ATTR_NOACK attribute.

Bug: 154782456
Signed-off-by: Tamizh chelvam <tamizhr@codeaurora.org>
Link: https://lore.kernel.org/r/1579506687-18296-2-git-send-email-tamizhr@codeaurora.org
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Change-Id: Ia2e2c125aaba64571453838baac052014e386cd6
(cherry picked from commit 77f576deaa393b54a0f2ca8ab1ab5b2d3c6b971b)
Signed-off-by: Vamsi Krishna <vamsin@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Tamizh chelvam 2020-01-20 13:21:22 +05:30 • committed by Greg Kroah-Hartman
commit 7a59f8cab6
5 changed files with 320 additions and 0 deletions

View file

@ -264,6 +264,27 @@
* %NL80211_ATTR_VLAN_ID.
*/
/**
* DOC: TID configuration
*
* TID configuration support can be advertised by drivers by setting
* @NL80211_EXT_FEATURE_PER_TID_* and/or @NL80211_EXT_FEATURE_PER_STA_* config
* mentioned in &enum nl80211_tid_config_attr.
* Needed configuration parameters are mentioned in
* &enum nl80211_tid_config_attr and it will be passed using
* %NL80211_CMD_SET_TID_CONFIG through %NL80211_ATTR_TID_CONFIG.
* If the configuration needs to be applied for specific peer then MAC address
* of the peer needs to be passed in %NL80211_ATT_MAC, otherwise the
* configuration will be applied for all the connected peers in the vif except
* the peer which has peer specific configuration for the TID.
* And the peer specific configuration will be overridden if
* %NL80211_TID_CONFIG_ATTR_OVERRIDE flag is set.
* All this configurations are valid only for STA's current connection
* i.e. the configurations will be reset to default when the STA connects back
* after disconnection/roaming, and this configuration will be cleared when
* the interface goes down.
*/
/**
* enum nl80211_commands - supported nl80211 commands
*
@ -1117,6 +1138,9 @@
* peer MAC address and %NL80211_ATTR_FRAME is used to specify the frame
* content. The frame is ethernet data.
*
* @NL80211_CMD_SET_TID_CONFIG: Data frame TID specific configuration
* is passed using %NL80211_ATTR_TID_CONFIG attribute.
*
* @NL80211_CMD_MAX: highest used command number
* @__NL80211_CMD_AFTER_LAST: internal use
*/
@ -1341,6 +1365,8 @@ enum nl80211_commands {
NL80211_CMD_PROBE_MESH_LINK,
NL80211_CMD_SET_TID_CONFIG,
/* add new commands above here */
/* used to define NL80211_CMD_MAX below */
@ -2401,6 +2427,9 @@ enum nl80211_commands {
* %NL80211_ATTR_AKM_SUITES are default capabilities if AKM suites not
* advertised for a specific interface type.
*
* @NL80211_ATTR_TID_CONFIG: TID specific configuration in a
* nested attribute with &enum nl80211_tid_config_attr sub-attributes.
*
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use
@ -2869,6 +2898,8 @@ enum nl80211_attrs {
NL80211_ATTR_IFTYPE_AKM_SUITES,
NL80211_ATTR_TID_CONFIG,
/* add attributes here, update the policy in nl80211.c */
__NL80211_ATTR_AFTER_LAST,
@ -4709,6 +4740,40 @@ enum nl80211_tx_power_setting {
NL80211_TX_POWER_FIXED,
};
/**
* enum nl80211_tid_config - TID config state
* @NL80211_TID_CONFIG_ENABLE: Enable config for the TID
* @NL80211_TID_CONFIG_DISABLE: Disable config for the TID
*/
enum nl80211_tid_config {
NL80211_TID_CONFIG_ENABLE,
NL80211_TID_CONFIG_DISABLE,
};
/* enum nl80211_tid_config_attr - TID specific configuration.
* @NL80211_TID_CONFIG_ATTR_OVERRIDE: flag attribue, if no peer
* is selected, if set indicates that the new configuration overrides
* all previous peer configurations, otherwise previous peer specific
* configurations should be left untouched. If peer is selected then
* it will reset particular TID configuration of that peer and it will
* not accept other TID config attributes along with peer.
* @NL80211_TID_CONFIG_ATTR_TIDS: a bitmask value of TIDs(bit 0 to 7)
* Its type is u8.
* @NL80211_TID_CONFIG_ATTR_NOACK: Configure ack policy for the TID.
* specified in %NL80211_TID_CONFIG_ATTR_TID. see %enum nl80211_tid_config.
* Its type is u8.
*/
enum nl80211_tid_config_attr {
__NL80211_TID_CONFIG_ATTR_INVALID,
NL80211_TID_CONFIG_ATTR_OVERRIDE,
NL80211_TID_CONFIG_ATTR_TIDS,
NL80211_TID_CONFIG_ATTR_NOACK,
/* keep last */
__NL80211_TID_CONFIG_ATTR_AFTER_LAST,
NL80211_TID_CONFIG_ATTR_MAX = __NL80211_TID_CONFIG_ATTR_AFTER_LAST - 1
};
/**
* enum nl80211_packet_pattern_attr - packet pattern attribute
* @__NL80211_PKTPAT_INVALID: invalid number for nested attribute
@ -5523,6 +5588,10 @@ enum nl80211_feature_flags {
* @NL80211_EXT_FEATURE_VLAN_OFFLOAD: The driver supports a single netdev
* with VLAN tagged frames and separate VLAN-specific netdevs added using
* vconfig similarly to the Ethernet case.
* @NL80211_EXT_FEATURE_PER_TID_NOACK_CONFIG: Driver supports per TID NoAck
* policy functionality.
* @NL80211_EXT_FEATURE_PER_STA_NOACK_CONFIG: Driver supports STA specific NoAck
* policy functionality.
*
* @NL80211_EXT_FEATURE_BEACON_PROTECTION: The driver supports Beacon protection
* and can receive key configuration for BIGTK using key indexes 6 and 7.
@ -5575,6 +5644,8 @@ enum nl80211_ext_feature_index {
NL80211_EXT_FEATURE_VLAN_OFFLOAD,
NL80211_EXT_FEATURE_AQL,
NL80211_EXT_FEATURE_BEACON_PROTECTION,
NL80211_EXT_FEATURE_PER_TID_NOACK_CONFIG,
NL80211_EXT_FEATURE_PER_STA_NOACK_CONFIG,
/* add new features before the definition below */
NUM_NL80211_EXT_FEATURES,