[rdk-b][mt7986][wifi-hal][Refactor RadioVapInfoMap]
[Description]
Refactor RadioVapInfoMap. Add error handler and support more value.
[Release-log]
N/A
Change-Id: I4a9da931efbb2a63e5bdf58145d7d9057f09ceb5
diff --git a/src/wifi/wifi_hal.c b/src/wifi/wifi_hal.c
index db6a775..5a0d033 100644
--- a/src/wifi/wifi_hal.c
+++ b/src/wifi/wifi_hal.c
@@ -11646,102 +11646,188 @@
static int array_index_to_vap_index(UINT radioIndex, int arrayIndex)
{
- if (radioIndex != 0 && radioIndex != 1)
- {
- printf("%s: Wrong radio index (%d)\n", __func__, index);
- return -1;
+ int max_radio_num = 0;
+
+ wifi_getMaxRadioNumber(&max_radio_num);
+ if (radioIndex >= max_radio_num || radioIndex < 0) {
+ fprintf(stderr, "%s: Wrong radio index (%d)\n", __func__, radioIndex);
+ return RETURN_ERR;
}
- // XXX: hardcode vap indexes for now (0,1 - home, 2,3 - backhaul 6,7 - onboard)
- // XXX : assumed radioIndex for 2.4 is 0 radioIndex for 5G is 1
+ return (arrayIndex * max_radio_num) + radioIndex;
+}
- return (arrayIndex * 2) + radioIndex;
+wifi_bitrate_t beaconRate_string_to_enum(char *beaconRate) {
+ if (strncmp(beaconRate, "1Mbps", 5) == 0)
+ return WIFI_BITRATE_1MBPS;
+ else if (strncmp(beaconRate, "2Mbps", 5) == 0)
+ return WIFI_BITRATE_2MBPS;
+ else if (strncmp(beaconRate, "5.5Mbps", 7) == 0)
+ return WIFI_BITRATE_5_5MBPS;
+ else if (strncmp(beaconRate, "6Mbps", 5) == 0)
+ return WIFI_BITRATE_6MBPS;
+ else if (strncmp(beaconRate, "9Mbps", 5) == 0)
+ return WIFI_BITRATE_9MBPS;
+ else if (strncmp(beaconRate, "11Mbps", 6) == 0)
+ return WIFI_BITRATE_11MBPS;
+ else if (strncmp(beaconRate, "12Mbps", 6) == 0)
+ return WIFI_BITRATE_12MBPS;
+ else if (strncmp(beaconRate, "18Mbps", 6) == 0)
+ return WIFI_BITRATE_18MBPS;
+ else if (strncmp(beaconRate, "24Mbps", 6) == 0)
+ return WIFI_BITRATE_24MBPS;
+ else if (strncmp(beaconRate, "36Mbps", 6) == 0)
+ return WIFI_BITRATE_36MBPS;
+ else if (strncmp(beaconRate, "48Mbps", 6) == 0)
+ return WIFI_BITRATE_48MBPS;
+ else if (strncmp(beaconRate, "54Mbps", 6) == 0)
+ return WIFI_BITRATE_54MBPS;
+ return WIFI_BITRATE_DEFAULT;
}
INT wifi_getRadioVapInfoMap(wifi_radio_index_t index, wifi_vap_info_map_t *map)
{
- INT ret;
- int i;
- BOOL enabled = false;
- char buf[256];
- wifi_secur_list *secur_item;
- int vap_index;
- INT mode;
- map->num_vaps = 5; // XXX: this is a hack. For both radio let's support 5 vaps for now
+ INT mode = 0;
+ INT ret = -1;
+ INT output = 0;
+ int i = 0;
+ int vap_index = 0;
+ BOOL enabled = FALSE;
+ char buf[256] = {0};
+ wifi_vap_security_t security;
+ map->num_vaps = 5; // Hardcoded
WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
printf("Entering %s index = %d\n", __func__, (int)index);
- map->vap_array[index].radio_index = index;
for (i = 0; i < 5; i++)
{
+ map->vap_array[i].radio_index = index;
+
vap_index = array_index_to_vap_index(index, i);
if (vap_index < 0)
- {
return RETURN_ERR;
- }
- strncpy(map->vap_array[i].bridge_name, "brlan0", sizeof(map->vap_array[i].bridge_name) - 1);
+ strcpy(map->vap_array[i].bridge_name, BRIDGE_NAME);
map->vap_array[i].vap_index = vap_index;
memset(buf, 0, sizeof(buf));
+ ret = wifi_getApName(vap_index, buf);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getApName return error\n", __func__);
+ return RETURN_ERR;
+ }
+ snprintf(map->vap_array[i].vap_name, sizeof(map->vap_array[i].vap_name), "%s", buf);
+
+ memset(buf, 0, sizeof(buf));
- wifi_getApName(vap_index, buf); // XXX: error handling
- strncpy(map->vap_array[i].vap_name, buf, sizeof(map->vap_array[i].vap_name) - 1);
+ ret = wifi_getSSIDNameStatus(vap_index, buf);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getSSIDNameStatus return error\n", __func__);
+ return RETURN_ERR;
+ }
+ snprintf(map->vap_array[i].u.bss_info.ssid, sizeof(map->vap_array[i].u.bss_info.ssid), "%s", buf);
ret = wifi_getSSIDEnable(vap_index, &enabled);
- if (ret != RETURN_OK)
- {
- printf("%s: failed to get SSIDEnable for index %d\n", __func__, i);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getSSIDEnable return error\n", __func__);
return RETURN_ERR;
}
map->vap_array[i].u.bss_info.enabled = enabled;
- memset(buf, 0, sizeof(buf));
- wifi_getBaseBSSID(vap_index, buf);
- sscanf(buf, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
- &map->vap_array[i].u.bss_info.bssid[0],
- &map->vap_array[i].u.bss_info.bssid[1],
- &map->vap_array[i].u.bss_info.bssid[2],
- &map->vap_array[i].u.bss_info.bssid[3],
- &map->vap_array[i].u.bss_info.bssid[4],
- &map->vap_array[i].u.bss_info.bssid[5]); // XXX: handle error
-
- wifi_getApSsidAdvertisementEnable(vap_index, &enabled); // XXX: error handling
+ ret = wifi_getApSsidAdvertisementEnable(vap_index, &enabled);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getApSsidAdvertisementEnable return error\n", __func__);
+ return RETURN_ERR;
+ }
map->vap_array[i].u.bss_info.showSsid = enabled;
+
+ ret = wifi_getApIsolationEnable(vap_index, &enabled);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getApIsolationEnable return error\n", __func__);
+ return RETURN_ERR;
+ }
+ map->vap_array[i].u.bss_info.isolation = enabled;
+
+ ret = wifi_getApMaxAssociatedDevices(vap_index, &output);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getApMaxAssociatedDevices return error\n", __func__);
+ return RETURN_ERR;
+ }
+ map->vap_array[i].u.bss_info.bssMaxSta = output;
+
+ ret = wifi_getBSSTransitionActivation(vap_index, &enabled);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getBSSTransitionActivation return error\n", __func__);
+ return RETURN_ERR;
+ }
+ map->vap_array[i].u.bss_info.bssTransitionActivated = enabled;
- wifi_getApMacAddressControlMode(vap_index, &mode); // XXX: handle errors
- if (mode == 0) map->vap_array[i].u.bss_info.mac_filter_enable = false;
- else map->vap_array[i].u.bss_info.mac_filter_enable = true;
+ ret = wifi_getNeighborReportActivation(vap_index, &enabled);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getNeighborReportActivation return error\n", __func__);
+ return RETURN_ERR;
+ }
+ map->vap_array[i].u.bss_info.nbrReportActivated = enabled;
- if (mode == 1) map->vap_array[i].u.bss_info.mac_filter_mode = wifi_mac_filter_mode_white_list;
- else if (mode == 2) map->vap_array[i].u.bss_info.mac_filter_mode = wifi_mac_filter_mode_black_list; // XXX: handle wrong mode
+ ret = wifi_getApSecurity(vap_index, &security);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getApSecurity return error\n", __func__);
+ return RETURN_ERR;
+ }
+ map->vap_array[i].u.bss_info.security = security;
- memset(buf, 0, sizeof(buf));
- wifi_getSSIDNameStatus(vap_index, buf); // XXX: error handling
- strncpy(map->vap_array[i].u.bss_info.ssid, buf, sizeof(map->vap_array[i].u.bss_info.ssid) - 1);
+ ret = wifi_getApMacAddressControlMode(vap_index, &mode);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getApMacAddressControlMode return error\n", __func__);
+ return RETURN_ERR;
+ }
+ if (mode == 0)
+ map->vap_array[i].u.bss_info.mac_filter_enable = FALSE;
+ else
+ map->vap_array[i].u.bss_info.mac_filter_enable = TRUE;
+ if (mode == 1)
+ map->vap_array[i].u.bss_info.mac_filter_mode = wifi_mac_filter_mode_white_list;
+ else if (mode == 2)
+ map->vap_array[i].u.bss_info.mac_filter_mode = wifi_mac_filter_mode_black_list;
- wifi_getApSecurityModeEnabled(vap_index, buf);
+ ret = wifi_getApWmmEnable(vap_index, &enabled);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getApWmmEnable return error\n", __func__);
+ return RETURN_ERR;
+ }
+ map->vap_array[i].u.bss_info.wmm_enabled = enabled;
- if (!(secur_item = wifi_get_item_by_str(ARRAY_AND_SIZE(map_security), buf)))
- {
- printf("%s: ssid_index %d: Failed to decode security mode (%s)\n", __func__, vap_index, buf);
+ ret = wifi_getApUAPSDCapability(vap_index, &enabled);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getApUAPSDCapability return error\n", __func__);
return RETURN_ERR;
}
- map->vap_array[i].u.bss_info.security.mode = secur_item->key;
+ map->vap_array[i].u.bss_info.UAPSDEnabled = enabled;
memset(buf, 0, sizeof(buf));
- wifi_getApSecurityKeyPassphrase(vap_index, buf); // XXX: error handling
- strncpy(map->vap_array[i].u.bss_info.security.u.key.key, buf, sizeof(map->vap_array[i].u.bss_info.security.u.key.key) - 1);
-
- wifi_getNeighborReportActivation(vap_index, &enabled); // XXX: error handling
- map->vap_array[i].u.bss_info.nbrReportActivated = enabled;
+ ret = wifi_getApBeaconRate(vap_index, buf);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getApBeaconRate return error\n", __func__);
+ return RETURN_ERR;
+ }
+ map->vap_array[i].u.bss_info.beaconRate = beaconRate_string_to_enum(buf);
- wifi_getBSSTransitionActivation(vap_index, &enabled); // XXX: error handling
- map->vap_array[i].u.bss_info.bssTransitionActivated = enabled;
+ memset(buf, 0, sizeof(buf));
+ ret = wifi_getBaseBSSID(vap_index, buf);
+ if (ret != RETURN_OK) {
+ printf("%s: wifi_getBaseBSSID return error\n", __func__);
+ return RETURN_ERR;
+ }
+ sscanf(buf, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
+ &map->vap_array[i].u.bss_info.bssid[0],
+ &map->vap_array[i].u.bss_info.bssid[1],
+ &map->vap_array[i].u.bss_info.bssid[2],
+ &map->vap_array[i].u.bss_info.bssid[3],
+ &map->vap_array[i].u.bss_info.bssid[4],
+ &map->vap_array[i].u.bss_info.bssid[5]);
- wifi_getApIsolationEnable(vap_index, &enabled);
- map->vap_array[i].u.bss_info.isolation = enabled;
+ // TODO: wps, noack
}
WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
return RETURN_OK;