diff options
| author | Agrawal Ashish <ashishka@qti.qualcomm.com> | 2016-05-23 18:07:17 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-07-12 15:12:13 +0530 |
| commit | 329c3375edfcf5c434ed57fdec5dd27229611d8a (patch) | |
| tree | a30e4c591b5944f059d7334db24dd4c0b57c44dd | |
| parent | 66249f5e496cdae1b5d1f771b39ca277d70c4e3e (diff) | |
qcacld-2.0: Populate correct supported rates from hostapd.conf file
Currently driver populate default supported and extended supported
rates in beacons even if hostapd.conf file wants to change
supported and extended supported rates.
Fix this by parsing beacon head and tail to get supported
and extended rates and populate them in sap config.
Change-Id: I3226438b908a96f1b1bd3c2968a0c20eef81a799
CRs-Fixed: 1035768
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 27 | ||||
| -rw-r--r-- | CORE/SAP/inc/sapApi.h | 5 | ||||
| -rw-r--r-- | CORE/SAP/src/sapFsm.c | 16 | ||||
| -rw-r--r-- | CORE/SME/inc/csrApi.h | 4 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 89 |
5 files changed, 79 insertions, 62 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 799f89c9d963..7c731a5a8488 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -13934,6 +13934,33 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, } } + pIe = wlan_hdd_cfg80211_get_ie_ptr(&pMgmt_frame->u.beacon.variable[0], + pBeacon->head_len, WLAN_EID_SUPP_RATES); + if (pIe != NULL) { + pIe++; + pConfig->supported_rates.numRates = pIe[0]; + pIe++; + for (i = 0; i < pConfig->supported_rates.numRates; i++) + if (pIe[i]) { + pConfig->supported_rates.rate[i]= pIe[i]; + hddLog(LOG1, FL("Configured Supported rate is %2x"), + pConfig->supported_rates.rate[i]); + } + } + pIe = wlan_hdd_cfg80211_get_ie_ptr(pBeacon->tail, pBeacon->tail_len, + WLAN_EID_EXT_SUPP_RATES); + if (pIe != NULL) { + pIe++; + pConfig->extended_rates.numRates = pIe[0]; + pIe++; + for (i = 0; i < pConfig->extended_rates.numRates; i++) + if (pIe[i]){ + pConfig->extended_rates.rate[i]= pIe[i]; + hddLog(LOG1, FL("Configured extended Supported rate is %2x"), + pConfig->extended_rates.rate[i]); + } + } + wlan_hdd_set_sapHwmode(pHostapdAdapter); if (pHddCtx->cfg_ini->sap_force_11n_for_11ac) { diff --git a/CORE/SAP/inc/sapApi.h b/CORE/SAP/inc/sapApi.h index c64cb1bf7b79..9a8f915f8725 100644 --- a/CORE/SAP/inc/sapApi.h +++ b/CORE/SAP/inc/sapApi.h @@ -543,7 +543,6 @@ typedef struct sap_Config { v_PVOID_t pProbeRespBcnIEsBuffer; /* buffer for addn ies comes from hostapd*/ uint8_t sap_dot11mc; /* Specify if 11MC is enabled or disabled*/ enum sap_acs_dfs_mode acs_dfs_mode; - uint16_t beacon_tx_rate; uint8_t *vendor_ie; enum vendor_ie_access_policy vendor_ie_access_policy; @@ -552,8 +551,8 @@ typedef struct sap_Config { uint8_t short_retry_limit; uint8_t long_retry_limit; uint8_t ampdu_size; - tSirMacRateSet supp_rate_set; - tSirMacRateSet extended_rate_set; + tSirMacRateSet supported_rates; + tSirMacRateSet extended_rates; } tsap_Config_t; #ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c index f85bf9c34ffd..7d5d2390cc99 100644 --- a/CORE/SAP/src/sapFsm.c +++ b/CORE/SAP/src/sapFsm.c @@ -4137,6 +4137,22 @@ sapconvertToCsrProfile(tsap_Config_t *pconfig_params, eCsrRoamBssType bssType, t } profile->sap_dot11mc = pconfig_params->sap_dot11mc; + if (pconfig_params->supported_rates.numRates) { + vos_mem_copy(profile->supported_rates.rate, + pconfig_params->supported_rates.rate, + pconfig_params->supported_rates.numRates); + profile->supported_rates.numRates = + pconfig_params->supported_rates.numRates; + } + + if (pconfig_params->extended_rates.numRates) { + vos_mem_copy(profile->extended_rates.rate, + pconfig_params->extended_rates.rate, + pconfig_params->extended_rates.numRates); + profile->extended_rates.numRates = + pconfig_params->extended_rates.numRates; + } + return eSAP_STATUS_SUCCESS; /* Success. */ } diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index 953a54022542..3f7f473334b2 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -1018,8 +1018,8 @@ typedef struct tagCsrRoamProfile uint8_t sap_dot11mc; bool do_not_roam; uint16_t beacon_tx_rate; - tSirMacRateSet supp_rate_set; - tSirMacRateSet extended_rate_set; + tSirMacRateSet supported_rates; + tSirMacRateSet extended_rates; }tCsrRoamProfile; diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index 9873b8884de3..6f65413a57e9 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -6970,6 +6970,20 @@ eHalStatus csrRoamCopyProfile(tpAniSirGlobal pMac, tCsrRoamProfile *pDstProfile, sizeof(tSirAddIeParams)); pDstProfile->beacon_tx_rate = pSrcProfile->beacon_tx_rate; + if (pSrcProfile->supported_rates.numRates) { + vos_mem_copy(pDstProfile->supported_rates.rate, + pSrcProfile->supported_rates.rate, + pSrcProfile->supported_rates.numRates); + pDstProfile->supported_rates.numRates = + pSrcProfile->supported_rates.numRates; + } + if (pSrcProfile->extended_rates.numRates) { + vos_mem_copy(pDstProfile->extended_rates.rate, + pSrcProfile->extended_rates.rate, + pSrcProfile->extended_rates.numRates); + pDstProfile->extended_rates.numRates = + pSrcProfile->extended_rates.numRates; + } }while(0); @@ -12621,23 +12635,30 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf pParam->extendedRateSet.numRates = 0; + if (pProfile->supported_rates.numRates) { + pParam->operationalRateSet.numRates = + pProfile->supported_rates.numRates; + vos_mem_copy(pParam->operationalRateSet.rate, + pProfile->supported_rates.rate, + pProfile->supported_rates.numRates); + } + + if (pProfile->extended_rates.numRates) { + pParam->extendedRateSet.numRates = + pProfile->extended_rates.numRates; + vos_mem_copy(pParam->extendedRateSet.rate, + pProfile->extended_rates.rate, + pProfile->extended_rates.numRates); + } + + + switch ( nwType ) { default: smsLog(pMac, LOGE, FL("sees an unknown pSirNwType (%d)"), nwType); case eSIR_11A_NW_TYPE: - pParam->operationalRateSet.numRates = 8; - - pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_6 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_9; - pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_12 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_18; - pParam->operationalRateSet.rate[4] = SIR_MAC_RATE_24 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[5] = SIR_MAC_RATE_36; - pParam->operationalRateSet.rate[6] = SIR_MAC_RATE_48; - pParam->operationalRateSet.rate[7] = SIR_MAC_RATE_54; - if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel ) { channel = csrRoamGetIbssStartChannelNumber50( pMac ); @@ -12650,11 +12671,6 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf //We only do this here because csrRoamGetPhyModeBandForBss always picks 11a for AUTO nwType = eSIR_11B_NW_TYPE; channel = csrRoamGetIbssStartChannelNumber24( pMac ); - pParam->operationalRateSet.numRates = 4; - pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_1 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_2 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_5_5 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_11 | CSR_DOT11_BASIC_RATE_MASK; } } else @@ -12664,11 +12680,6 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf break; case eSIR_11B_NW_TYPE: - pParam->operationalRateSet.numRates = 4; - pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_1 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_2 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_5_5 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_11 | CSR_DOT11_BASIC_RATE_MASK; if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel ) { channel = csrRoamGetIbssStartChannelNumber24( pMac ); @@ -12680,42 +12691,6 @@ static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProf break; case eSIR_11G_NW_TYPE: - /* For P2P Client and P2P GO, disable 11b rates */ - if( (pProfile->csrPersona == VOS_P2P_CLIENT_MODE) || - (pProfile->csrPersona == VOS_P2P_GO_MODE) || - (eCSR_CFG_DOT11_MODE_11G_ONLY == pParam->uCfgDot11Mode) - ) - { - pParam->operationalRateSet.numRates = 8; - - pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_6 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_9; - pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_12 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_18; - pParam->operationalRateSet.rate[4] = SIR_MAC_RATE_24 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[5] = SIR_MAC_RATE_36; - pParam->operationalRateSet.rate[6] = SIR_MAC_RATE_48; - pParam->operationalRateSet.rate[7] = SIR_MAC_RATE_54; - } - else - { - pParam->operationalRateSet.numRates = 4; - pParam->operationalRateSet.rate[0] = SIR_MAC_RATE_1 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[1] = SIR_MAC_RATE_2 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[2] = SIR_MAC_RATE_5_5 | CSR_DOT11_BASIC_RATE_MASK; - pParam->operationalRateSet.rate[3] = SIR_MAC_RATE_11 | CSR_DOT11_BASIC_RATE_MASK; - - pParam->extendedRateSet.numRates = 8; - pParam->extendedRateSet.rate[0] = SIR_MAC_RATE_6; - pParam->extendedRateSet.rate[1] = SIR_MAC_RATE_9; - pParam->extendedRateSet.rate[2] = SIR_MAC_RATE_12; - pParam->extendedRateSet.rate[3] = SIR_MAC_RATE_18; - pParam->extendedRateSet.rate[4] = SIR_MAC_RATE_24; - pParam->extendedRateSet.rate[5] = SIR_MAC_RATE_36; - pParam->extendedRateSet.rate[6] = SIR_MAC_RATE_48; - pParam->extendedRateSet.rate[7] = SIR_MAC_RATE_54; - } - if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel ) { channel = csrRoamGetIbssStartChannelNumber24( pMac ); |
