qcacld-3.0: Extend Tdls external mode config support

Current implementation of external mode requires supplicant to
send tdls peer mac address. On matching of stats tdls implict
link procedure is trigger for configured peer.

Fix, to allow both configured peer and other peer that supports
tdls to establish the tdls link.

Change-Id: I8f65e6dcc9dec565623ac2d8d2c77e12570f8bfb
CRs-Fixed: 2733830
This commit is contained in:
Pankaj Singh
2020-07-24 16:55:20 +05:30
committed by snandini
parent b605d0ab03
commit af44671317
4 changed files with 48 additions and 14 deletions

View File

@@ -544,15 +544,24 @@
/*
* <ini>
* gTDLSPuapsdPTIWindow - This ini is used to configure peer traffic indication
* window.
* @Min: 1
* @Max: 5
* @Default: 2
* gTDLSExternalControl - Enable external TDLS control.
* @Min: 0
* @Max: 2
* @Default: 1
*
* This ini is used to configure buffering time in number of beacon intervals.
* This ini is used to enable/disable external TDLS control.
* TDLS external control works with TDLS implicit trigger. TDLS external
* control allows a user to add a MAC address of potential TDLS peers so
* that the CLD driver can initiate implicit TDLS setup to only those peers
* when criteria for TDLS setup (throughput and RSSI threshold) is met.
* There are two flavors of external control supported. If control default
* is set 1 it means strict external control where only for configured
* tdls peer mac address tdls link will be established. If control default
* is set 2 liberal tdls external control is needed which means
* tdls link will be established with configured peer mac address as well
* as any other peer which supports tdls.
*
* Related: gEnableTDLSSupport.
* Related: gEnableTDLSSupport, gEnableTDLSImplicitTrigger.
*
* Supported Feature: TDLS
*

View File

@@ -397,6 +397,11 @@ struct tx_frame {
qdf_timer_t tx_timer;
};
enum tdls_configured_external_control {
TDLS_STRICT_EXTERNAL_CONTROL = 1,
TDLS_LIBERAL_EXTERNAL_CONTROL = 2,
};
/**
* enum tdls_feature_bit
* @TDLS_FEATURE_OFF_CHANNEL: tdls off channel
@@ -406,7 +411,8 @@ struct tx_frame {
* @TDLS_FEATURE_SCAN: tdls scan
* @TDLS_FEATURE_ENABLE: tdls enabled
* @TDLS_FEAUTRE_IMPLICIT_TRIGGER: tdls implicit trigger
* @TDLS_FEATURE_EXTERNAL_CONTROL: tdls external control
* @TDLS_FEATURE_EXTERNAL_CONTROL: enforce strict tdls external control
* @TDLS_FEATURE_LIBERAL_EXTERNAL_CONTROL: liberal external tdls control
*/
enum tdls_feature_bit {
TDLS_FEATURE_OFF_CHANNEL,
@@ -416,7 +422,8 @@ enum tdls_feature_bit {
TDLS_FEATURE_SCAN,
TDLS_FEATURE_ENABLE,
TDLS_FEAUTRE_IMPLICIT_TRIGGER,
TDLS_FEATURE_EXTERNAL_CONTROL
TDLS_FEATURE_EXTERNAL_CONTROL,
TDLS_FEATURE_LIBERAL_EXTERNAL_CONTROL,
};
#define TDLS_IS_OFF_CHANNEL_ENABLED(flags) \
@@ -435,6 +442,8 @@ enum tdls_feature_bit {
CHECK_BIT(flags, TDLS_FEAUTRE_IMPLICIT_TRIGGER)
#define TDLS_IS_EXTERNAL_CONTROL_ENABLED(flags) \
CHECK_BIT(flags, TDLS_FEATURE_EXTERNAL_CONTROL)
#define TDLS_IS_LIBERAL_EXTERNAL_CONTROL_ENABLED(flags) \
CHECK_BIT(flags, TDLS_FEATURE_LIBERAL_EXTERNAL_CONTROL)
/**
* struct tdls_user_config - TDLS user configuration
@@ -495,7 +504,7 @@ struct tdls_user_config {
bool tdls_off_chan_enable;
bool tdls_off_chan_enable_orig;
bool tdls_wmm_mode_enable;
bool tdls_external_control;
uint8_t tdls_external_control;
bool tdls_implicit_trigger_enable;
bool tdls_scan_enable;
bool tdls_sleep_sta_enable;