Merge "[[RDKB][WIFI7][MT7990][SYNC][OSBNB00175215]MTK RDKB Beta2 - DataModel SSID interface order is not in compliance with CcspWiFiAgent]"
diff --git a/src/logan_wifi/wifi_hal.c b/src/logan_wifi/wifi_hal.c
index d8e558a..bb65d56 100644
--- a/src/logan_wifi/wifi_hal.c
+++ b/src/logan_wifi/wifi_hal.c
@@ -307,6 +307,10 @@
};
struct mld_configuration mld_config;
+wifi_hal_capability_t g_hal_cap;
+
+#define RUNTIME_MAX_RADIO g_phy_count
+
static int util_unii_5g_centerfreq(const char *ht_mode, int channel);
static int util_unii_6g_centerfreq(const char *ht_mode, int channel);
wifi_secur_list * wifi_get_item_by_key(wifi_secur_list *list, int list_sz, int key);
@@ -582,6 +586,7 @@
static char l1profile[32] = "/etc/wireless/l1profile.dat";
char main_prefix[MAX_NUM_RADIOS][IFNAMSIZ];
char ext_prefix[MAX_NUM_RADIOS][IFNAMSIZ];
+int g_phy_count = 0;
#define MAX_SSID_LEN 64
char default_ssid[MAX_NUM_RADIOS][MAX_SSID_LEN];;
int radio_band[MAX_NUM_RADIOS];
@@ -690,8 +695,8 @@
#define WMODE_CAP_2G(_x) \
(((_x) & (WMODE_B | WMODE_G | WMODE_GN | WMODE_AX_24G | WMODE_BE_24G)) != 0)
-static int array_index_to_vap_index(UINT radioIndex, int arrayIndex);
-static int vap_index_to_array_index(int vapIndex, int *radioIndex, int *arrayIndex);
+static int array_index_to_vap_index(UINT radioIndex, int arrayIndex, int *vap_index);
+static int vap_index_to_radio_array_index(int vapIndex, int *radioIndex, int *arrayIndex);
static int wifi_datfileRead(char *conf_file, char *param, char *output, int output_size);
int hwaddr_aton2(const char *txt, unsigned char *addr);
static int wifi_GetInterfaceName(int apIndex, char *interface_name);
@@ -702,7 +707,7 @@
char *output,
int output_size,
char *default_value);
-static int array_index_to_vap_index(UINT radioIndex, int arrayIndex);
+static int array_index_to_vap_index(UINT radioIndex, int arrayIndex, int *vap_index);
struct params
{
char * name;
@@ -835,6 +840,7 @@
char *token;
long mld_index;
unsigned char ap_index;
+ int vap_idx;
struct multi_link_device *mld;
BOOL ap_enable = 0;
struct bss_mlo_info ml_info;
@@ -842,7 +848,7 @@
wifi_debug(DEBUG_ERROR, "==========>\n");
memset(&mld_config, 0, sizeof(mld_config));
- for (band = 0; band < MAX_NUM_RADIOS; band++) {
+ for (band = 0; band < RUNTIME_MAX_RADIO; band++) {
res = snprintf(config_file, sizeof(config_file), "%s%d.dat", LOGAN_DAT_FILE, band);
if (os_snprintf_error(sizeof(config_file), res)) {
wifi_debug(DEBUG_ERROR, "Unexpected snprintf fail\n");
@@ -866,8 +872,11 @@
}
mld_set(mld_index, 1);
- ap_index = array_index_to_vap_index(band, bss_idx);
-
+ if (array_index_to_vap_index(band, bss_idx, &vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid band %d, bss_idx %d, skip it.\n", band, bss_idx);
+ continue;
+ }
+ ap_index = vap_idx;
mld = &(mld_config.mld[mld_index]);
mld->mld_index = mld_index;
// mld->type = mld_index <= MAX_ML_MLD_CNT ? AP_MLD_MULTI_LINK : AP_MLD_SINGLE_LINK;
@@ -1047,12 +1056,11 @@
INT wifi_eht_add_to_ap_mld(unsigned char mld_index, INT ap_index)
{
- int res;
+ int res, radio1, radio2, bss_idx;
// enum mld_type type;
struct multi_link_device *mld;
char interface_name[IF_NAME_SIZE] = {0};
unsigned char i;
- int max_radio_num;
if (ap_index < 0 || ap_index >= MAX_APS) {
wifi_debug(DEBUG_ERROR, "invalid ap_index %d\n", ap_index);
@@ -1096,17 +1104,24 @@
} else if (mld->type == AP_MLD_MULTI_LINK) {
#endif
/*check if a same band ap already has been joined before*/
- wifi_getMaxRadioNumber(&max_radio_num);
- if(max_radio_num == 0){
- return RETURN_ERR;
- }
for (i = 0; i < MAX_APS; i++) {
if(mld_ap_test(mld, i)) {
if (i == ap_index) {
wifi_debug(DEBUG_ERROR, "current ap(index=%d) has already joined current mld\n", i);
return RETURN_OK;
}
+
+ if (vap_index_to_radio_array_index(i, &radio1, &bss_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid vap index %d\n", i);
+ return RETURN_ERR;
+ }
+
+ if (vap_index_to_radio_array_index(ap_index, &radio2, &bss_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid vap index %d\n", i);
+ return RETURN_ERR;
+ }
- if ((i % max_radio_num) == (ap_index % max_radio_num)) {
+
+ if (radio1 == radio2) {
wifi_debug(DEBUG_ERROR, "same band ap(index=%d) has already joined current mld\n", i);
return RETURN_ERR;
}
@@ -1198,12 +1213,11 @@
INT wifi_eht_mld_ap_transfer(unsigned char old_mld_index,
unsigned char new_mld_index, INT ap_index)
{
- int res;
+ int res, radio1, radio2, bss_idx;
// enum mld_type type;
struct multi_link_device *mld, *old_mld;
char interface_name[IF_NAME_SIZE] = {0};
unsigned char i;
- int max_radio_num;
if (old_mld_index == new_mld_index) {
wifi_debug(DEBUG_ERROR, "same mld index %d\n", new_mld_index);
@@ -1245,17 +1259,25 @@
mld = &(mld_config.mld[new_mld_index]);
- wifi_getMaxRadioNumber(&max_radio_num);
- if(max_radio_num == 0){
- return RETURN_ERR;
- }
+
for (i = 0; i < MAX_APS; i++) {
if(mld_ap_test(mld, i)) {
if (i == ap_index) {
wifi_debug(DEBUG_ERROR, "current ap has already joined current mld\n");
return RETURN_OK;
}
+
+ if (vap_index_to_radio_array_index(i, &radio1, &bss_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid vap index %d\n", i);
+ return RETURN_ERR;
+ }
+
+ if (vap_index_to_radio_array_index(ap_index, &radio2, &bss_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid vap index %d\n", i);
+ return RETURN_ERR;
+ }
- if ((i % max_radio_num) == (ap_index % max_radio_num)) {
+
+ if (radio1 == radio2) {
wifi_debug(DEBUG_ERROR, "same band ap(index=%d) has already joined current mld\n", i);
return RETURN_ERR;
}
@@ -1282,7 +1304,7 @@
int res, vap_index, len = 0, bssidnum;
struct params MldGroup;
- if (band >= MAX_NUM_RADIOS) {
+ if (band >= RUNTIME_MAX_RADIO) {
wifi_debug(DEBUG_ERROR, "invalid band %u\n", band);
return RETURN_ERR;
}
@@ -1310,8 +1332,7 @@
}
for (bss_idx = 0; bss_idx < bssidnum; bss_idx++) {
- vap_index = array_index_to_vap_index(band, bss_idx);
- if (vap_index == RETURN_ERR) {
+ if (array_index_to_vap_index(band, bss_idx, &vap_index) != RETURN_OK) {
wifi_debug(DEBUG_ERROR, "invalide vap index, band=%d, bss_idx=%d\n", (int)band, (int)bss_idx);
break;
}
@@ -1336,7 +1357,7 @@
{
unsigned char band;
- for (band = 0; band < MAX_NUM_RADIOS; band++) {
+ for (band = 0; band < RUNTIME_MAX_RADIO; band++) {
wifi_eht_config_sync2_dat_by_radio(band);
}
}
@@ -1671,17 +1692,16 @@
long int nl80211_band = 0;
int i = 0;
int phyIndex = 0;
- int radioIndex = 0;
- int max_radio_num = 0;
+ int radioIndex = 0, bss_idx;
wifi_band band = band_invalid;
int res;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
- wifi_getMaxRadioNumber(&max_radio_num);
- if(max_radio_num == 0){
+ if (vap_index_to_radio_array_index(apIndex, &radioIndex, &bss_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid vap index %d\n", apIndex);
return RETURN_ERR;
}
- radioIndex = apIndex % max_radio_num;
+
phyIndex = radio_index_to_phy(radioIndex);
while (i < 10) {
res = _syscmd_secure(buf, sizeof(buf),
@@ -1920,8 +1940,13 @@
char buf[MAX_CMD_SIZE]={'\0'};
UCHAR channel = 0;
int res;
+ int main_vap_idx;
- if (wifi_GetInterfaceName(radio_index, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radio_index, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radio_index);
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
/*interface name to channel number*/
res = _syscmd_secure(buf, sizeof(buf), "iw dev %s info | grep -i 'channel' | cut -d ' ' -f2", interface_name);
@@ -2492,7 +2517,7 @@
}
if (get_value(card_profile, buf, band_profile, sizeof(band_profile)) < 0) {
/* LOG */
- break;
+ continue;
}
res = snprintf(buf, sizeof(buf), "INDEX%d_main_ifname", card_idx);
@@ -2524,6 +2549,7 @@
wmode = cfgmode_to_wmode(wireless_mode);
radio_band[phy_idx] = wlan_config_set_ch_band(wmode);
phy_idx++;
+ g_phy_count = phy_idx;
}
}
@@ -2548,7 +2574,10 @@
for (radio_idx = 0; radio_idx < MAX_NUM_RADIOS; radio_idx++) {
for (bss_idx = 0; bss_idx < LOGAN_MAX_NUM_VAP_PER_RADIO; bss_idx++) {
- ap_idx = array_index_to_vap_index(radio_idx, bss_idx);
+ if (array_index_to_vap_index(radio_idx, bss_idx, &ap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_idx %d, bss_idx %d\n", radio_idx, bss_idx);
+ continue;
+ }
res = snprintf(config_file, sizeof(config_file), "%s%d.conf", CONFIG_PREFIX, ap_idx);
if (os_snprintf_error(sizeof(config_file), res)) {
@@ -2643,7 +2672,10 @@
wifi_debug(DEBUG_ERROR, "band %d BssidNum %d\n", radio_idx, bss_num);
/*TBD: we need refine setup flow and mbss flow*/
for (bss_idx = 0; bss_idx < bss_num; bss_idx++) {
- ap_idx = array_index_to_vap_index(radio_idx, bss_idx);
+ if (array_index_to_vap_index(radio_idx, bss_idx, &ap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_idx %d, bss_idx %d\n", radio_idx, bss_idx);
+ continue;
+ }
res = _syscmd_secure(ret_buf, sizeof(ret_buf), "touch %s%d.psk", PSK_FILE, ap_idx);
if (res) {
@@ -2688,7 +2720,7 @@
int band_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
- for (radio_idx = 0; radio_idx < MAX_NUM_RADIOS; radio_idx++) {
+ for (radio_idx = 0; radio_idx < RUNTIME_MAX_RADIO; radio_idx++) {
band_idx = radio_index_to_band(radio_idx);
if (band_idx < 0) {
break;
@@ -2723,7 +2755,7 @@
int band_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
- for (radio_idx = 0; radio_idx < MAX_NUM_RADIOS; radio_idx++) {
+ for (radio_idx = 0; radio_idx < RUNTIME_MAX_RADIO; radio_idx++) {
band_idx = radio_index_to_band(radio_idx);
if (band_idx < 0) {
break;
@@ -2847,10 +2879,8 @@
unsigned char i = 0;
char file[MAX_SUB_CMD_SIZE] = {0};
FILE *f = NULL;
- INT radio_num = 0;
- wifi_getMaxRadioNumber(&radio_num);
- for (i = 0; i < radio_num; i++) {
+ for (i = 0; i < RUNTIME_MAX_RADIO; i++) {
res = snprintf(file, sizeof(file), "%s%d.txt", GUARD_INTERVAL_FILE, i);
if (os_snprintf_error(sizeof(file), res)) {
wifi_debug(DEBUG_ERROR, "Unexpected snprintf fail\n");
@@ -2907,10 +2937,8 @@
unsigned char i = 0;
char file[MAX_SUB_CMD_SIZE] = {0};
FILE *f = NULL;
- INT radio_num = 0;
- wifi_getMaxRadioNumber(&radio_num);
- for (i = 0; i < radio_num; i++) {
+ for (i = 0; i < RUNTIME_MAX_RADIO; i++) {
res = snprintf(file, sizeof(file), "%s%d.txt", MCS_FILE, i);
if (os_snprintf_error(sizeof(file), res)) {
wifi_debug(DEBUG_ERROR, "Unexpected snprintf fail\n");
@@ -3044,10 +3072,7 @@
INT wifi_down()
{
//TODO: turns off transmit power for the entire Wifi subsystem, for all radios
- int max_num_radios = 0;
- wifi_getMaxRadioNumber(&max_num_radios);
-
- for (int radioIndex = 0; radioIndex < max_num_radios; radioIndex++)
+ for (int radioIndex = 0; radioIndex < RUNTIME_MAX_RADIO; radioIndex++)
wifi_setRadioEnable(radioIndex, FALSE);
return RETURN_OK;
@@ -3161,10 +3186,15 @@
unsigned long tmp_ul;
size_t len = 0;
FILE *f = NULL;
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
res = _syscmd_secure(buf, sizeof(buf), "iw %s scan | grep signal | awk '{print $2}' | sort -n | tail -n1", interface_name);
@@ -3302,7 +3332,7 @@
{
if (NULL == output)
return RETURN_ERR;
- *output = MAX_NUM_RADIOS;
+ *output = RUNTIME_MAX_RADIO;
return RETURN_OK;
}
@@ -3322,22 +3352,20 @@
{
char interface_name[16] = {0};
char buf[128] = {0};
- int apIndex;
- int max_radio_num = 0;
+ int apIndex, bss_idx;
if (NULL == output_bool)
return RETURN_ERR;
*output_bool = FALSE;
- wifi_getMaxRadioNumber(&max_radio_num);
-
- if (radioIndex >= max_radio_num)
- return RETURN_ERR;
-
/* loop all interface in radio, if any is enable, reture true, else return false */
- for(apIndex = radioIndex; apIndex < MAX_APS; apIndex += max_radio_num)
+ for (bss_idx = 0; bss_idx < LOGAN_MAX_NUM_VAP_PER_RADIO; bss_idx++)
{
+ if (array_index_to_vap_index(radioIndex, bss_idx, &apIndex) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radioIndex %d, bss_idx %d\n", radioIndex, bss_idx);
+ continue;
+ }
if (wifi_GetInterfaceName(apIndex, interface_name) != RETURN_OK)
continue;
@@ -3503,19 +3531,21 @@
{
char interface_name[16] = {0};
char buf[MAX_BUF_SIZE] = {0};
- int apIndex;
- int max_radio_num = 0;
+ int apIndex, bss_idx;
int phyId = 0, res;
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
phyId = radio_index_to_phy(radioIndex);
- wifi_getMaxRadioNumber(&max_radio_num);
-
if(enable == FALSE) {
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ }
+
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
@@ -3533,9 +3563,15 @@
if(strncmp(buf, "OK", 2))
wifi_debug(DEBUG_ERROR, "Could not detach %s from hostapd daemon", interface_name);
} else {
- for (apIndex = radioIndex; apIndex < MAX_APS; apIndex += max_radio_num) {
- if (wifi_GetInterfaceName(apIndex, interface_name) != RETURN_OK)
+ for (bss_idx = 0; bss_idx < LOGAN_MAX_NUM_VAP_PER_RADIO; bss_idx++) {
+ if (array_index_to_vap_index(radioIndex, bss_idx, &apIndex) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radioIndex %d, bss_idx %d\n", radioIndex, bss_idx);
+ continue;
+ }
+ if (wifi_GetInterfaceName(apIndex, interface_name) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "!!!Fail to get name of apIndex[%d]\n", apIndex);
return RETURN_ERR;
+ }
memset(buf, 0, MAX_BUF_SIZE);
@@ -3581,9 +3617,15 @@
//Get the Radio Interface name from platform, eg "wlan0"
INT wifi_getRadioIfName(INT radioIndex, CHAR *output_string) //Tr181
{
- if (NULL == output_string || radioIndex>=MAX_NUM_RADIOS || radioIndex<0)
+ int main_vap_idx;
+
+ if (NULL == output_string || radioIndex>=RUNTIME_MAX_RADIO || radioIndex<0)
return RETURN_ERR;
- return wifi_GetInterfaceName(radioIndex, output_string);
+
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ }
+ return wifi_GetInterfaceName(main_vap_idx, output_string);
}
int mtk_get_vow_info_callback(struct nl_msg *msg, void *data)
@@ -3684,7 +3726,6 @@
INT wifi_setATMEnable(BOOL enable)
{
- int max_radio_num = 0;
int radio_idx = 0;
int bss_idx;
char dat_file[MAX_BUF_SIZE] = {0};
@@ -3692,8 +3733,7 @@
struct params params[3];
struct vow_group_en_param atc_en_param;
- wifi_getMaxRadioNumber(&max_radio_num);
- for (radio_idx = 0; radio_idx < max_radio_num; radio_idx++) {
+ for (radio_idx = 0; radio_idx < RUNTIME_MAX_RADIO; radio_idx++) {
if (mtk_wifi_set_air_time_management
(radio_idx, MTK_NL80211_VENDOR_ATTR_AP_VOW_ATF_EN_INFO,
NULL, (char *)&enable, 1, NULL)!= RETURN_OK) {
@@ -3740,7 +3780,6 @@
INT wifi_getATMEnable(BOOL *output_enable)
{
- int max_radio_num = 0;
int radio_idx = 0;
struct vow_info vow_info;
struct vow_info get_vow_info;
@@ -3749,7 +3788,6 @@
if (output_enable == NULL)
return RETURN_ERR;
- wifi_getMaxRadioNumber(&max_radio_num);
*output_enable = FALSE;
@@ -3758,7 +3796,7 @@
cb_data.out_buf = (char *)&vow_info;
cb_data.out_len = sizeof(struct vow_info);
- for (radio_idx = 0; radio_idx < max_radio_num; radio_idx++) {
+ for (radio_idx = 0; radio_idx < RUNTIME_MAX_RADIO; radio_idx++) {
if (mtk_wifi_set_air_time_management
(radio_idx, MTK_NL80211_VENDOR_ATTR_AP_VOW_GET_INFO,
mtk_get_vow_info_callback, (char *)&get_vow_info, sizeof(struct vow_info), &cb_data)!= RETURN_OK) {
@@ -4426,12 +4464,18 @@
struct nlattr * msg_data = NULL;
struct mtk_nl80211_param param;
struct mtk_nl80211_cb_data cb_data;
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
if (NULL == output_string || NULL == pureMode)
return RETURN_ERR;
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
if_idx = if_nametoindex(interface_name);
@@ -4634,6 +4678,7 @@
char dat_file[MAX_BUF_SIZE] = {0};
struct params params={0};
int res;
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s_%s:%d_%d\n", __func__, channelMode, pureMode, __LINE__);
@@ -4644,7 +4689,12 @@
return RETURN_ERR;
}
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
if_idx = if_nametoindex(interface_name);
@@ -5051,10 +5101,16 @@
struct nlattr * msg_data = NULL;
struct mtk_nl80211_param param;
UCHAR ext_ch = EXT_NONE;
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
if_idx = if_nametoindex(interface_name);
@@ -5498,7 +5554,7 @@
struct params list[2];
char str_idx[16];
char config_file[64];
- int max_num_radios = 0, res;
+ int res, bss_idx, vap_idx;
wifi_band band = band_invalid;
band = wifi_index_to_band(radioIndex);
@@ -5516,13 +5572,13 @@
list[1].name = "he_oper_centr_freq_seg0_idx";
list[1].value = str_idx;
- wifi_getMaxRadioNumber(&max_num_radios);
- if(max_num_radios== 0){
- return RETURN_ERR;
- }
- for(int i=0; i<=MAX_APS/max_num_radios; i++)
+ for (bss_idx = 0; bss_idx < LOGAN_MAX_NUM_VAP_PER_RADIO; bss_idx++)
{
- res = snprintf(config_file, sizeof(config_file), "%s%d.conf", CONFIG_PREFIX, radioIndex+(max_num_radios*i));
+ if (array_index_to_vap_index(radioIndex, bss_idx, &vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radioIndex[%d], bss_idx[%d]\n", radioIndex, bss_idx);
+ return RETURN_ERR;
+ }
+ res = snprintf(config_file, sizeof(config_file), "%s%d.conf", CONFIG_PREFIX, vap_idx);
if (os_snprintf_error(sizeof(config_file), res)) {
wifi_debug(DEBUG_ERROR, "Unexpected snprintf fail\n");
return RETURN_ERR;
@@ -5646,7 +5702,7 @@
memset(ret_buf, 0, sizeof(ret_buf));
- vap_index_to_array_index(apIndex, &radio_idx, &bss_idx);
+ vap_index_to_radio_array_index(apIndex, &radio_idx, &bss_idx);
/*prepare new config file*/
@@ -6069,12 +6125,18 @@
struct nlattr * msg_data = NULL;
struct mtk_nl80211_param param;
unsigned long checktime = 0;
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
if (NULL == output_ulong)
return RETURN_ERR;
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
if_idx = if_nametoindex(interface_name);
@@ -6131,10 +6193,16 @@
struct nl_msg *msg = NULL;
struct nlattr * msg_data = NULL;
struct mtk_nl80211_param param;
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
if_idx = if_nametoindex(interface_name);
@@ -6509,6 +6577,7 @@
int centr_channel = 0;
UINT mode_map = 0;
int freq=0, res;
+ int main_vap_idx;
if (output_string == NULL)
return RETURN_ERR;
@@ -6520,10 +6589,16 @@
band = wifi_index_to_band(radioIndex);
if (band == band_invalid)
return RETURN_ERR;
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
return RETURN_ERR;
+ }
- res = snprintf(config_file, sizeof(config_file), "%s%d.conf", CONFIG_PREFIX, radioIndex);
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
+ return RETURN_ERR;
+
+ res = snprintf(config_file, sizeof(config_file), "%s%d.conf", CONFIG_PREFIX, main_vap_idx);
if (os_snprintf_error(sizeof(config_file), res)) {
wifi_debug(DEBUG_ERROR, "Unexpected snprintf fail\n");
return RETURN_ERR;
@@ -6597,7 +6672,7 @@
char ext_channel[64] = {0};
unsigned char ext_ch;
char buf[128] = {0};
- int max_radio_num =0, ret = 0;
+ int ret = 0, bss_idx, vap_idx;
long int bandwidth = 0;
unsigned long channel = 0;
bool stbcEnable = FALSE;
@@ -6668,18 +6743,17 @@
}
wifi_datfileWrite(config_dat_file, ¶ms, 1);
- wifi_getMaxRadioNumber(&max_radio_num);
- if(max_radio_num== 0){
- return RETURN_ERR;
- }
- for(int i=0; i<=MAX_APS/max_radio_num; i++)
- {
- res = snprintf(config_file, sizeof(config_file), "%s%d.conf",CONFIG_PREFIX,radioIndex+(max_radio_num*i));
+ for (bss_idx = 0; bss_idx < LOGAN_MAX_NUM_VAP_PER_RADIO; bss_idx++) {
+ if (array_index_to_vap_index(radioIndex, bss_idx, &vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radioIndex[%d], bss_idx[%d]\n", radioIndex, bss_idx);
+ return RETURN_ERR;
+ }
+ res = snprintf(config_file, sizeof(config_file), "%s%d.conf", CONFIG_PREFIX, vap_idx);
if (os_snprintf_error(sizeof(config_file), res)) {
wifi_debug(DEBUG_ERROR, "Unexpected snprintf fail\n");
return RETURN_ERR;
}
- wifi_setRadioSTBCEnable(radioIndex+(max_radio_num*i), stbcEnable);
+ wifi_setRadioSTBCEnable(vap_idx, stbcEnable);
}
/*do ext_ch quicking setting*/
@@ -6905,17 +6979,22 @@
INT wifi_getRadioTransmitPower(INT radioIndex, ULONG *output_ulong) //RDKB
{
char interface_name[16] = {0};
-
char buf[16]={0};
char pwr_file[128]={0};
int res;
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
if(output_ulong == NULL)
return RETURN_ERR;
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
res = snprintf(pwr_file, sizeof(pwr_file), "%s%d.txt", POWER_PERCENTAGE, radio_index_to_band(radioIndex));
if (os_snprintf_error(sizeof(pwr_file), res)) {
@@ -6954,10 +7033,16 @@
struct mtk_nl80211_param param;
struct unl unl_ins;
int res;
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
// Get the Tx power supported list and check that is the input in the list
res = snprintf(txpower_str, sizeof(txpower_str), "%lu", TransmitPower);
@@ -7143,15 +7228,20 @@
INT wifi_getRadioBeaconPeriod(INT radioIndex, UINT *output)
{
char interface_name[16] = {0};
-
char buf[MAX_CMD_SIZE]={'\0'};
int res;
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
if(output == NULL)
return RETURN_ERR;
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
res = _syscmd_secure(buf, sizeof(buf), "hostapd_cli -i %s status | grep beacon_int | cut -d '=' -f2 | tr -d '\n'", interface_name);
@@ -7535,15 +7625,21 @@
CHAR interface_name[64] = {0};
BOOL iface_status = FALSE;
wifi_radioTrafficStats2_t radioTrafficStats = {0};
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n", __func__, __LINE__);
if (NULL == output_struct)
return RETURN_ERR;
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
- wifi_getApEnable(radioIndex, &iface_status);
+ wifi_getApEnable(main_vap_idx, &iface_status);
if (iface_status == TRUE)
wifi_halGetIfStats(interface_name, &radioTrafficStats);
@@ -7589,8 +7685,14 @@
struct nl_msg *msg = NULL;
struct nlattr * msg_data = NULL;
struct mtk_nl80211_param param;
+ int main_vap_idx;
+
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
- if (wifi_GetInterfaceName(radioIndex, inf_name) != RETURN_OK)
+ if (wifi_GetInterfaceName(main_vap_idx, inf_name) != RETURN_OK)
return RETURN_ERR;
if_idx = if_nametoindex(inf_name);
if (!if_idx) {
@@ -7641,8 +7743,14 @@
struct nl_msg *msg = NULL;
struct nlattr * msg_data = NULL;
struct mtk_nl80211_param param;
+ int main_vap_idx;
- if (wifi_GetInterfaceName(radioIndex, inf_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, inf_name) != RETURN_OK)
return RETURN_ERR;
if_idx = if_nametoindex(inf_name);
if (!if_idx) {
@@ -7702,14 +7810,16 @@
//Get the radio index assocated with this SSID entry
INT wifi_getSSIDRadioIndex(INT ssidIndex, INT *radioIndex)
{
+ int bss_idx;
+
if(NULL == radioIndex)
return RETURN_ERR;
- int max_radio_num = 0;
- wifi_getMaxRadioNumber(&max_radio_num);
- if(max_radio_num == 0){
+
+ if (vap_index_to_radio_array_index(ssidIndex, radioIndex, &bss_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid ssidIndex[%d]\n", ssidIndex);
return RETURN_ERR;
}
- *radioIndex = ssidIndex%max_radio_num;
+
return RETURN_OK;
}
@@ -7851,16 +7961,9 @@
BOOL status = false;
char buf[MAX_CMD_SIZE] = {0};
int apIndex, ret;
- int max_radio_num = 0;
- int radioIndex = 0;
+ int radioIndex = 0, bss_idx;
int res;
- wifi_getMaxRadioNumber(&max_radio_num);
- if(max_radio_num == 0){
- return RETURN_ERR;
- }
- radioIndex = ssidIndex % max_radio_num;
-
wifi_getApEnable(ssidIndex,&status);
// Do not apply when ssid index is disabled
if (status == false)
@@ -7879,8 +7982,16 @@
* when first created interface will be removed
* then all vaps other vaps on same phy are removed
* after calling setApEnable to false readd all enabled vaps */
- for(int i=0; i < MAX_APS/max_radio_num; i++) {
- apIndex = max_radio_num*i+radioIndex;
+ if (vap_index_to_radio_array_index(ssidIndex, &radioIndex, &bss_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid ssidIndex[%d]\n", ssidIndex);
+ return RETURN_ERR;
+ }
+
+ for (bss_idx=0; bss_idx < LOGAN_MAX_NUM_VAP_PER_RADIO; bss_idx++) {
+ if (array_index_to_vap_index(radioIndex, bss_idx, &apIndex) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radioIndex[%d] bss_idx[%d]\n", radioIndex, bss_idx);
+ continue;
+ }
if (wifi_GetInterfaceName(apIndex, interface_name) != RETURN_OK)
return RETURN_ERR;
@@ -7908,8 +8019,14 @@
char cmd[128] = {0};
char line[256] = {0};
int tmp = 0, arr_index = -1, res;
+ int main_vap_idx;
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
res = snprintf(cmd, sizeof(cmd), "iw dev %s survey dump | grep 'frequency\\|noise' | awk '{print $2}'", interface_name);
@@ -7964,13 +8081,19 @@
int phyId = 0, res;
unsigned long len, tmp;
unsigned int DTIM_count;
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s: %d\n", __func__, __LINE__);
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
- res = snprintf(file_name, sizeof(file_name), "%s%d.txt", ESSID_FILE, radioIndex);
+ res = snprintf(file_name, sizeof(file_name), "%s%d.txt", ESSID_FILE, main_vap_idx);
if (os_snprintf_error(sizeof(file_name), res)) {
wifi_debug(DEBUG_ERROR, "Unexpected snprintf fail\n");
return RETURN_ERR;
@@ -8901,8 +9024,14 @@
struct nl_msg *msg = NULL;
struct nlattr * msg_data = NULL;
struct mtk_nl80211_param param;
+ int main_vap_idx;
+
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
- if (wifi_GetInterfaceName(radioIndex, inf_name) != RETURN_OK)
+ if (wifi_GetInterfaceName(main_vap_idx, inf_name) != RETURN_OK)
return RETURN_ERR;
if_idx = if_nametoindex(inf_name);
/*init mtk nl80211 vendor cmd*/
@@ -8948,8 +9077,14 @@
struct nlattr * msg_data = NULL;
struct mtk_nl80211_param param;
int ret = -1;
+ int main_vap_idx;
+
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
- if (wifi_GetInterfaceName(radioIndex, inf_name) != RETURN_OK)
+ if (wifi_GetInterfaceName(main_vap_idx, inf_name) != RETURN_OK)
return RETURN_ERR;
if_idx = if_nametoindex(inf_name);
/*init mtk nl80211 vendor cmd*/
@@ -9586,13 +9721,20 @@
struct nlattr * msg_data = NULL;
struct mtk_nl80211_param param;
struct unl unl_ins;
+ int main_vap_idx;
if (radioIndex > MAX_APS) {
wifi_debug(DEBUG_ERROR, "Invalid apIndex %d\n", radioIndex);
return RETURN_ERR;
}
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
if_idx = if_nametoindex(interface_name);
@@ -9806,7 +9948,7 @@
return RETURN_ERR;
if (wifi_GetInterfaceName(apIndex, interface_name) != RETURN_OK) {
- vap_index_to_array_index(apIndex, &radio_idx, &bss_idx);
+ vap_index_to_radio_array_index(apIndex, &radio_idx, &bss_idx);
res = snprintf(output_string, IF_NAME_SIZE, "%s%d", ext_prefix[radio_idx], bss_idx); // For wifiagent generating data model.
} else
@@ -9824,7 +9966,7 @@
INT wifi_getIndexFromName(CHAR *inputSsidString, INT *output_int)
{
char buf[32] = {0};
- char ap_idx = 0;
+ int ap_idx = 0;
char *apIndex_str = NULL;
char radio_idx = 0;
char bss_idx = 0;
@@ -9866,7 +10008,10 @@
return RETURN_ERR;
}
- ap_idx = array_index_to_vap_index(radio_idx, bss_idx);
+ if(array_index_to_vap_index(radio_idx, bss_idx, &ap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_idx %d, bss_idx %d\n", radio_idx, bss_idx);
+ return RETURN_ERR;
+ }
if (ap_idx >= 0 && ap_idx < MAX_APS) {
printf("%s: hostapd conf not find, inf(%s), use inf idx(%d).\n",
@@ -10385,16 +10530,17 @@
// outputs the radio index for the specified ap. similar as wifi_getSsidRadioIndex
INT wifi_getApRadioIndex(INT apIndex, INT *output_int)
{
- int max_radio_num = 0;
+ int radioIndex, bss_idx;
if(NULL == output_int)
return RETURN_ERR;
- wifi_getMaxRadioNumber(&max_radio_num);
- if(max_radio_num == 0){
+ if (vap_index_to_radio_array_index(apIndex, &radioIndex, &bss_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid apIndex[%d]\n", apIndex);
return RETURN_ERR;
}
- *output_int = apIndex % max_radio_num;
+
+ *output_int = radioIndex;
return RETURN_OK;
}
@@ -11372,13 +11518,12 @@
char buf[MAX_BUF_SIZE] = {0};
BOOL status = FALSE;
- int max_radio_num = 0;
+ int radioIndex, bss_idx;
int phyId = 0;
int res;
wifi_getApEnable(apIndex, &status);
- wifi_getMaxRadioNumber(&max_radio_num);
if (enable == status)
return RETURN_OK;
@@ -11386,7 +11531,10 @@
return RETURN_ERR;
if (enable == TRUE) {
- int radioIndex = apIndex % max_radio_num;
+ if (vap_index_to_radio_array_index(apIndex, &radioIndex, &bss_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid apIndex[%d]\n", apIndex);
+ return RETURN_ERR;
+ }
phyId = radio_index_to_phy(radioIndex);
res = _syscmd_secure(buf, sizeof(buf), "ifconfig %s up", interface_name);
@@ -11404,7 +11552,7 @@
wifi_debug(DEBUG_ERROR, "_syscmd_secure fail\n");
}
} else {
- if (apIndex >= MAX_NUM_RADIOS) {
+ if (apIndex >= RUNTIME_MAX_RADIO) {
res = _syscmd_secure(buf, sizeof(buf), "hostapd_cli -i global raw REMOVE %s", interface_name);
if (res) {
wifi_debug(DEBUG_ERROR, "_syscmd_secure fail\n");
@@ -11672,17 +11820,16 @@
{
//get the running status from driver
char buf[128] = {0};
- int max_radio_num = 0, radioIndex = 0;
+ int radioIndex = 0, bss_idx;
int phyId = 0;
int res;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
- wifi_getMaxRadioNumber(&max_radio_num);
- if(max_radio_num == 0){
+ if (vap_index_to_radio_array_index(apIndex, &radioIndex, &bss_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid apIndex[%d]\n", apIndex);
return RETURN_ERR;
}
- radioIndex = apIndex % max_radio_num;
phyId = radio_index_to_phy(radioIndex);
res = _syscmd_secure(buf, sizeof(buf), "iw phy phy%d info | grep u-APSD", phyId);
@@ -14079,8 +14226,14 @@
char interface_name[16] = {0};
char buf[1024];
int res;
+ int main_vap_idx;
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
res = _syscmd_secure(buf, sizeof(buf), "iwconfig %s freq %d",interface_name,channel);
if (res) {
@@ -14822,6 +14975,7 @@
int center_chan = 0;
int center_freq1 = 0;
int res;
+ int main_vap_idx;
res = snprintf(config_file, sizeof(config_file), "%s%d.conf", CONFIG_PREFIX, radioIndex);
if (os_snprintf_error(sizeof(config_file), res)) {
@@ -14829,12 +14983,17 @@
return RETURN_ERR;
}
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
- band = wifi_index_to_band(radioIndex);
+ band = wifi_index_to_band(main_vap_idx);
width = channel_width_MHz > 20 ? channel_width_MHz : 20;
@@ -14957,6 +15116,7 @@
int res;
unsigned long len;
struct channels_noise *channels_noise_arr = NULL;
+ int main_vap_idx;
WIFI_ENTRY_EXIT_DEBUG("Inside %s: %d\n", __func__, __LINE__);
@@ -14982,7 +15142,12 @@
}
}
- if (wifi_GetInterfaceName(radio_index, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radio_index, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radio_index);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
phyId = radio_index_to_phy(radio_index);
@@ -16062,14 +16227,12 @@
{
char file_name[128] = {0};
FILE *f = NULL;
- int max_num_radios = 0;
int res, ret;
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
- wifi_getMaxRadioNumber(&max_num_radios);
if (essid == NULL || strlen(essid) == 0 || apIndex == -1) {
- for (int index = 0; index < max_num_radios; index++) {
+ for (int index = 0; index < RUNTIME_MAX_RADIO; index++) {
res = snprintf(file_name, sizeof(file_name), "%s%d.txt", ESSID_FILE, index);
if (os_snprintf_error(sizeof(file_name), res)) {
wifi_debug(DEBUG_ERROR, "Unexpected snprintf fail\n");
@@ -16198,9 +16361,15 @@
char if_name[IF_NAME_SIZE];
char interface_name[IF_NAME_SIZE] = {0};
int res;
+ int main_vap_idx;
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
+ return RETURN_ERR;
res = snprintf(if_name, sizeof(if_name), "%s", interface_name);
if (os_snprintf_error(sizeof(if_name), res)) {
@@ -16458,7 +16627,14 @@
{
Netlink nl;
char if_name[32];
- if (wifi_GetInterfaceName(radioIndex, if_name) != RETURN_OK)
+ int main_vap_idx;
+
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, if_name) != RETURN_OK)
return RETURN_ERR;
*output_array_size = sizeof(wifi_associated_dev_rate_info_rx_stats_t);
@@ -16602,8 +16778,14 @@
char if_name[IF_NAME_SIZE];
char interface_name[IF_NAME_SIZE] = {0};
int res;
+ int main_vap_idx;
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK)
return RETURN_ERR;
*output_array_size = sizeof(wifi_associated_dev_rate_info_tx_stats_t);
@@ -16818,6 +17000,7 @@
char cmd[MAX_CMD_SIZE] = {'\0'};
char interface_name[16] = {0};
int res;
+ int main_vap_idx;
ieee80211_channel_to_frequency(channel, &freqMHz);
if (freqMHz == -1) {
@@ -16825,7 +17008,12 @@
return -1;
}
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK) {
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK) {
wifi_debug(DEBUG_ERROR, "wifi_GetInterfaceName fail\n");
}
res = snprintf(cmd, sizeof(cmd), "iw dev %s survey dump | grep -A5 %d | tr -d '\\t'", interface_name, freqMHz);
@@ -16898,10 +17086,16 @@
Netlink nl;
wifi_channelStats_t_loc local[array_size];
char if_name[32];
+ int main_vap_idx;
local[0].array_size = array_size;
- if (wifi_GetInterfaceName(radioIndex, if_name) != RETURN_OK)
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, if_name) != RETURN_OK)
return RETURN_ERR;
nl.id = initSock80211(&nl);
@@ -17472,10 +17666,16 @@
struct mtk_nl80211_param param;
struct mtk_nl80211_cb_data cb_data;
wdev_ap_metric ap_metric;
+ int main_vap_idx;
/*init mtk nl80211 vendor cmd*/
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
- if (wifi_GetInterfaceName(radioIndex, inf_name) != RETURN_OK)
+ if (wifi_GetInterfaceName(main_vap_idx, inf_name) != RETURN_OK)
return RETURN_ERR;
if_idx = if_nametoindex(inf_name);
if (!if_idx) {
@@ -18489,7 +18689,7 @@
int index;
INT ret=0;
char buf[1024]="";
-
+ wifi_ParseProfile();
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
if(argc<3)
{
@@ -19848,7 +20048,10 @@
if (current_param.dtimPeriod != operationParam->dtimPeriod) {
for (i = 0; i < bss_num; i++) {
- ApIndex = array_index_to_vap_index(index, i);
+ if (array_index_to_vap_index(index, i, &ApIndex) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid index %d, i %d\n", index, i);
+ continue;
+ }
if (wifi_setApDTIMInterval(ApIndex, operationParam->dtimPeriod) != RETURN_OK) {
wifi_debug(DEBUG_ERROR, "wifi_setApDTIMInterval return error.\n");
goto err;
@@ -19858,7 +20061,11 @@
}
if (current_param.beaconInterval != operationParam->beaconInterval) {
for (i = 0; i < bss_num; i++) {
- ApIndex = array_index_to_vap_index(index, i);
+ if (array_index_to_vap_index(index, i, &ApIndex) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid index %d, i %d\n", index, i);
+ continue;
+ }
+
if (wifi_setRadioBeaconPeriod(ApIndex, operationParam->beaconInterval) != RETURN_OK) {
wifi_debug(DEBUG_ERROR, "wifi_setRadioBeaconPeriod return error.\n");
goto err;
@@ -19869,7 +20076,10 @@
if (current_param.operationalDataTransmitRates != operationParam->operationalDataTransmitRates) {
BitMapToTransmitRates(operationParam->operationalDataTransmitRates, buf, sizeof(buf));
for (i = 0; i < bss_num; i++) {
- ApIndex = array_index_to_vap_index(index, i);
+ if (array_index_to_vap_index(index, i, &ApIndex) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid index %d, i %d\n", index, i);
+ continue;
+ }
if (wifi_setRadioBasicDataTransmitRates(ApIndex, buf) != RETURN_OK) {
wifi_debug(DEBUG_ERROR, "wifi_setRadioBasicDataTransmitRates return error.\n");
goto err;
@@ -19879,7 +20089,10 @@
}
if (current_param.fragmentationThreshold != operationParam->fragmentationThreshold) {
for (i = 0; i < bss_num; i++) {
- ApIndex = array_index_to_vap_index(index, i);
+ if (array_index_to_vap_index(index, i, &ApIndex) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid index %d, i %d\n", index, i);
+ continue;
+ }
if (wifi_setRadioFragmentationThreshold(ApIndex, operationParam->fragmentationThreshold) != RETURN_OK) {
wifi_debug(DEBUG_ERROR, "wifi_setRadioFragmentationThreshold return error.\n");
goto err;
@@ -19890,7 +20103,10 @@
if (current_param.rtsThreshold != operationParam->rtsThreshold) {
for (i = 0; i < bss_num; i++) {
- ApIndex = array_index_to_vap_index(index, i);
+ if (array_index_to_vap_index(index, i, &ApIndex) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid index %d, i %d\n", index, i);
+ continue;
+ }
if (wifi_setApRtsThreshold(ApIndex, operationParam->rtsThreshold) != RETURN_OK) {
wifi_debug(DEBUG_ERROR, "wifi_setApRtsThreshold return error.\n");
goto err;
@@ -19957,7 +20173,10 @@
}
} else if (hapd_conf_change == TRUE) {
for (i = 0; i < bss_num; i++) {
- ApIndex = array_index_to_vap_index(index, i);
+ if (array_index_to_vap_index(index, i, &ApIndex) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid index %d, i %d\n", index, i);
+ continue;
+ }
wifi_quick_reload_ap(ApIndex);
}
}
@@ -20181,34 +20400,40 @@
return RETURN_OK;
}
-static int array_index_to_vap_index(UINT radioIndex, int arrayIndex)
+static int array_index_to_vap_index(UINT radioIndex, int arrayIndex, int *vap_index)
{
- int max_radio_num = 0;
-
- wifi_getMaxRadioNumber(&max_radio_num);
- if (radioIndex >= max_radio_num) {
- wifi_debug(DEBUG_ERROR, "Wrong radio index (%d)\n", radioIndex);
+ if (radioIndex > 2 || arrayIndex < 0 || arrayIndex >= LOGAN_MAX_NUM_VAP_PER_RADIO)
return RETURN_ERR;
- }
- return (arrayIndex * max_radio_num) + radioIndex;
-}
+ if (radioIndex < 2)
+ *vap_index = arrayIndex * 2 + radioIndex;
+ else if (radioIndex == 2)
+ *vap_index = (2 * LOGAN_MAX_NUM_VAP_PER_RADIO) + arrayIndex;
-static int vap_index_to_array_index(int vapIndex, int *radioIndex, int *arrayIndex)
-{
- int max_radio_num = 0;
+ return RETURN_OK;
+}
- if ((vapIndex < 0) || (vapIndex > MAX_NUM_VAP_PER_RADIO*MAX_NUM_RADIOS))
- return -1;
+/*
+ * 2.4G vap index: 0 2 4 6 8 10 12 14 ... (2*bss_idx)
+ * 5G vap index: 1 3 5 7 9 11 13 15 ... (2*bss_idx + 1)
+ * 6G vap index: 16 17 18 19 20 21 22 23 ... (2*LOGAN_MAX_NUM_VAP_PER_RADIO + bss_idx)
+ */
- wifi_getMaxRadioNumber(&max_radio_num);
- if(max_radio_num == 0){
+//static int vap_index_to_array_index(int vapIndex, int *radioIndex, int *arrayIndex)
+static int vap_index_to_radio_array_index(int vapIndex, int *radioIndex, int *arrayIndex)
+{
+ if (vapIndex >= MAX_APS || vapIndex < 0)
return RETURN_ERR;
+
+ if (vapIndex >= 0 && vapIndex < (2 * LOGAN_MAX_NUM_VAP_PER_RADIO)) {
+ *radioIndex = vapIndex % 2;
+ *arrayIndex = vapIndex / 2;
+ } else if (vapIndex >= (2 * LOGAN_MAX_NUM_VAP_PER_RADIO) && vapIndex < (3 * LOGAN_MAX_NUM_VAP_PER_RADIO)) {
+ *radioIndex = 2;
+ *arrayIndex = vapIndex - (2 * LOGAN_MAX_NUM_VAP_PER_RADIO);
}
- (*radioIndex) = vapIndex % max_radio_num;
- (*arrayIndex) = vapIndex / max_radio_num;
- return 0;
+ return RETURN_OK;
}
@@ -20317,9 +20542,8 @@
{
map->vap_array[i].radio_index = index;
- vap_index = array_index_to_vap_index(index, i);
- if (vap_index < 0) {
- res = RETURN_ERR;
+ if (array_index_to_vap_index(index, i, &vap_index) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid index %d, i %d\n", index, i);
continue;
}
@@ -20519,13 +20743,12 @@
char buf[MAX_BUF_SIZE] = {0};
BOOL status = FALSE;
- int max_radio_num = 0;
int phyId = 0;
+ int radioIndex, bss_idx;
int res;
wifi_getApEnable(apIndex, &status);
- wifi_getMaxRadioNumber(&max_radio_num);
if (enable == status)
return RETURN_OK;
@@ -20533,7 +20756,10 @@
return RETURN_ERR;
if (enable == TRUE) {
- int radioIndex = apIndex % max_radio_num;
+ if (vap_index_to_radio_array_index(apIndex, &radioIndex, &bss_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid apIndex[%d]\n", apIndex);
+ return RETURN_ERR;
+ }
phyId = radio_index_to_phy(radioIndex);
res = snprintf(config_file, MAX_BUF_SIZE, "%s%d.conf", CONFIG_PREFIX, apIndex);
if (os_snprintf_error(MAX_CMD_SIZE, res)) {
@@ -20938,6 +21164,7 @@
CHAR interface_name[16] = {0};
wifi_band band;
int res;
+ int main_vap_idx;
if(rcap == NULL)
{
@@ -21001,7 +21228,12 @@
rcap->csi.maxDevices = 8;
rcap->csi.soudingFrameSupported = TRUE;
- if (wifi_GetInterfaceName(radioIndex, interface_name) != RETURN_OK) {
+ if (array_index_to_vap_index(radioIndex, 0, &main_vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radio_index[%d]\n", radioIndex);
+ return RETURN_ERR;
+ }
+
+ if (wifi_GetInterfaceName(main_vap_idx, interface_name) != RETURN_OK) {
wifi_debug(DEBUG_ERROR, "wifi_GetInterfaceName fail\n");
}
res = snprintf(rcap->ifaceName, sizeof(interface_name), "%s",interface_name);
@@ -21071,11 +21303,9 @@
}
-wifi_hal_capability_t g_hal_cap;
-
INT wifi_getHalCapability(wifi_hal_capability_t *cap)
{
- INT status = 0, radioIndex = 0;
+ INT status = 0, radioIndex = 0, vap_idx;
char output[MAX_BUF_SIZE] = {0};
int iter = 0;
unsigned int j = 0;
@@ -21104,7 +21334,7 @@
for (j = 0; j < cap->wifi_prop.radiocap[radioIndex].maxNumberVAPs; j++)
{
- if (iter >= MAX_NUM_RADIOS * MAX_NUM_VAP_PER_RADIO)
+ if (iter >= RUNTIME_MAX_RADIO * MAX_NUM_VAP_PER_RADIO)
{
printf("%s: to many vaps for index map (%d)\n", __func__, iter);
return RETURN_ERR;
@@ -21113,7 +21343,12 @@
iface_info->phy_index = radioIndex; // XXX: parse phyX index instead
iface_info->rdk_radio_index = radioIndex;
+ if (array_index_to_vap_index(radioIndex, j, &vap_idx) != RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid radioIndex %d, j %d\n", radioIndex, j);
+ continue;
+ }
+
- iface_info->index = array_index_to_vap_index(radioIndex, j);
+ iface_info->index = vap_idx;
if (wifi_GetInterfaceName(iface_info->index, output))
strncpy(iface_info->interface_name, output, sizeof(iface_info->interface_name) - 1);
@@ -21697,7 +21932,7 @@
INT wifi_getRadioStatsEnable(INT radioIndex, BOOL *output_enable)
{
- if (NULL == output_enable || radioIndex >=MAX_NUM_RADIOS)
+ if (NULL == output_enable || radioIndex >=RUNTIME_MAX_RADIO)
return RETURN_ERR;
*output_enable=TRUE;
return RETURN_OK;
@@ -21709,12 +21944,11 @@
char buf[128] = {0};
char line[128] = {0};
FILE *f = NULL;
- int index = 0;
+ int index = 0, bss_idx;
int exp = 0;
int mantissa = 0;
int duration = 0;
int radio_index = 0;
- int max_radio_num = 0;
uint twt_wake_interval = 0;
int phyId = 0;
int res;
@@ -21722,12 +21956,10 @@
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
- wifi_getMaxRadioNumber(&max_radio_num);
- if(max_radio_num == 0){
+ if (vap_index_to_radio_array_index(ap_index, &radio_index, &bss_idx)!= RETURN_OK) {
+ wifi_debug(DEBUG_ERROR, "invalid ap_index[%d]\n", ap_index);
return RETURN_ERR;
}
- radio_index = ap_index % max_radio_num;
-
phyId = radio_index_to_phy(radio_index);
res = _syscmd_secure(buf, sizeof(buf),"cat /sys/kernel/debug/ieee80211/phy%d/mt76/twt_stats | wc -l", phyId);