Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions include/wifi_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -1192,13 +1192,27 @@ typedef struct {
radio_metrics_policy_t radio_metrics_policy[EM_MAX_RADIO_POLICY];
} radio_metrics_policies_t;

#define EM_MAX_SSID_LEN 33
typedef struct {
unsigned char ssid_len;
char ssid[EM_MAX_SSID_LEN];
unsigned short vlan_id;
} traffic_sep_policy_ssid_t;

#define EM_MAX_TRAFFIC_SEP_POLICY 5
typedef struct {
unsigned char ssids_num;
traffic_sep_policy_ssid_t ssids[EM_MAX_TRAFFIC_SEP_POLICY];
} traffic_sep_policy_t;

typedef struct {
ap_metrics_policy_t ap_metric_policy;
steering_disallowed_policy_t local_steering_dslw_policy;
steering_disallowed_policy_t btm_steering_dslw_policy;
backhaul_bss_config_policy_t backhaul_bss_config_policy;
channel_scan_reporting_policy_t channel_scan_reporting_policy;
radio_metrics_policies_t radio_metrics_policies;
traffic_sep_policy_t traffic_separation_policy;
} em_config_t;

typedef struct {
Expand Down
126 changes: 125 additions & 1 deletion source/core/wifi_ctrl_webconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -1881,6 +1881,111 @@ int webconfig_hal_multivap_apply(wifi_ctrl_t *ctrl, webconfig_subdoc_decoded_dat
return webconfig_hal_vap_apply_by_name(ctrl, data, vap_names, num_vaps);
}

#ifdef EM_APP
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this defined under EM_APP?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The encode, decode and translation functions are all defined under EM_APP in ccsp-one-wifi.

int webconfig_em_subdoc_config_apply(wifi_ctrl_t *ctrl, webconfig_subdoc_decoded_data_t *data)
{
vap_svc_t *svc;
UINT apIdx = 0, ret, index;
wifi_mgr_t *mgr = get_wifimgr_obj();
rdk_wifi_vap_info_t *rdk_vap_info;
wifi_vap_info_map_t tgt_vap_map;
wifi_vap_info_t *vapInfo = NULL;
char update_status[128];
for(index = 0; index < getTotalNumberVAPs(); index++)
{
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not as per coding guideline.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Multiple places the { is in the next line. It should be consistent with the coding guideline of having the { braces in the same line as that of for/if

int idx=0;
apIdx = VAP_INDEX(mgr->hal_cap, index);
vapInfo = get_wifidb_vap_parameters(apIdx);

if ((svc = get_svc_by_name(ctrl, vapInfo->vap_name)) == NULL) {
continue;
}

wifi_util_info_print(WIFI_CTRL,"%s:%d: ssids_num =%d \n",__func__, __LINE__,data->em_config.traffic_separation_policy.ssids_num);

if(isVapPrivate(apIdx))
{
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not correct coding guideline

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please correct everywhere

if((strncmp(vapInfo->u.bss_info.ssid,data->em_config.traffic_separation_policy.ssids[0].ssid,sizeof(data->em_config.traffic_separation_policy.ssids[0].ssid))==0)
&& (vapInfo->vlan_id == data->em_config.traffic_separation_policy.ssids[0].vlan_id))
{
continue;
}
strncpy(vapInfo->u.bss_info.ssid,data->em_config.traffic_separation_policy.ssids[0].ssid,sizeof(data->em_config.traffic_separation_policy.ssids[0].ssid));
vapInfo->vlan_id = data->em_config.traffic_separation_policy.ssids[0].vlan_id;
}
else if(isVapMesh(apIdx))
{
if((strncmp(vapInfo->u.bss_info.ssid,data->em_config.traffic_separation_policy.ssids[0].ssid,sizeof(data->em_config.traffic_separation_policy.ssids[0].ssid))==0)
&& (vapInfo->vlan_id == data->em_config.traffic_separation_policy.ssids[1].vlan_id))
{
continue;
}
strncpy(vapInfo->u.bss_info.ssid,data->em_config.traffic_separation_policy.ssids[1].ssid,sizeof(data->em_config.traffic_separation_policy.ssids[1].ssid));
vapInfo->vlan_id = data->em_config.traffic_separation_policy.ssids[1].vlan_id;
}
else if(isVapXhs(apIdx))
{
if((strncmp(vapInfo->u.bss_info.ssid,data->em_config.traffic_separation_policy.ssids[2].ssid,sizeof(data->em_config.traffic_separation_policy.ssids[0].ssid))==0)
&& (vapInfo->vlan_id == data->em_config.traffic_separation_policy.ssids[2].vlan_id))
{
continue;
}
strncpy(vapInfo->u.bss_info.ssid,data->em_config.traffic_separation_policy.ssids[2].ssid,sizeof(data->em_config.traffic_separation_policy.ssids[2].ssid));
vapInfo->vlan_id = data->em_config.traffic_separation_policy.ssids[2].vlan_id;
}
else if(isVapLnf(apIdx))
{
if(strncmp(vapInfo->u.bss_info.ssid,data->em_config.traffic_separation_policy.ssids[3].ssid,sizeof(data->em_config.traffic_separation_policy.ssids[0].ssid))==0)
{
continue;
}
strncpy(vapInfo->u.bss_info.ssid,data->em_config.traffic_separation_policy.ssids[3].ssid,sizeof(data->em_config.traffic_separation_policy.ssids[3].ssid));
vapInfo->vlan_id = data->em_config.traffic_separation_policy.ssids[3].vlan_id;
}
else if(isVapHotspot(apIdx))
{
if(strncmp(vapInfo->u.bss_info.ssid,data->em_config.traffic_separation_policy.ssids[4].ssid,sizeof(data->em_config.traffic_separation_policy.ssids[4].ssid))==0)
{
continue;
}
strncpy(vapInfo->u.bss_info.ssid,data->em_config.traffic_separation_policy.ssids[4].ssid,sizeof(data->em_config.traffic_separation_policy.ssids[4].ssid));
vapInfo->vlan_id = data->em_config.traffic_separation_policy.ssids[4].vlan_id;
}
else
{
wifi_util_error_print(WIFI_CTRL,"%s:%d: : No matching VAP type \n",__func__, __LINE__);
continue;
}

if(strlen(vapInfo->u.bss_info.ssid)==0)
{
wifi_util_error_print(WIFI_CTRL, "%s:%d Failed to get rdk vap info for index %d\n",__func__, __LINE__, apIdx);
continue;
}


memset(&tgt_vap_map, 0, sizeof(wifi_vap_info_map_t));
tgt_vap_map.num_vaps = 1;
memcpy(&tgt_vap_map.vap_array[0], vapInfo, sizeof(wifi_vap_info_t));
rdk_vap_info = get_wifidb_rdk_vap_info(apIdx);
if (rdk_vap_info == NULL) {
wifi_util_error_print(WIFI_CTRL, "%s:%d Failed to get rdk vap info for index %d\n",__func__, __LINE__, apIdx);
continue;
}
ret = svc->update_fn(svc, vapInfo->radio_index, &tgt_vap_map, rdk_vap_info);
memset(update_status, 0, sizeof(update_status));
snprintf(update_status, sizeof(update_status), "%s %s", vapInfo->vap_name, (ret == RETURN_OK)?"success":"fail");
apps_mgr_analytics_event(&ctrl->apps_mgr, wifi_event_type_webconfig, wifi_event_webconfig_hal_result, update_status);
if (ret != RETURN_OK) {
wifi_util_error_print(WIFI_CTRL,"%s:%d: Private vaps service update_fn failed \n",__func__, __LINE__);
} else {
wifi_util_dbg_print(WIFI_CTRL,"%s:%d: Private vaps service update_fn success apIdx %d \n",__func__,__LINE__,apIdx);
}
}
return RETURN_OK;
}
#endif

static int remove_all_mac_acl_entries_from_cache_and_db(rdk_wifi_vap_info_t *current_config)
{
if (current_config == NULL || current_config->acl_map == NULL) {
Expand Down Expand Up @@ -3066,7 +3171,26 @@ webconfig_error_t webconfig_ctrl_apply(webconfig_subdoc_t *doc, webconfig_subdoc
}
}
break;

#ifdef EM_APP
case webconfig_subdoc_type_em_config:
if (data->descriptor & webconfig_data_descriptor_encoded) {
if (ctrl->webconfig_state & radio_state_pending) {
ctrl->webconfig_state &= ~radio_state_pending;
ret = webconfig_bus_apply(ctrl, &data->u.encoded);
}
} else {
if (check_wifi_csa_sched_timeout_active_status(ctrl) == true) {
if (push_data_to_apply_pending_queue(data) != RETURN_OK) {
return webconfig_error_apply;
}
} else {
ctrl->webconfig_state |= radio_state_pending;
webconfig_analytic_event_data_to_hal_apply(data);
ret = webconfig_em_subdoc_config_apply(ctrl, &data->u.decoded);
}
}
break;
#endif
default:
break;
}
Expand Down
42 changes: 40 additions & 2 deletions source/webconfig/wifi_decoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -5776,9 +5776,9 @@ webconfig_error_t decode_sta_beacon_report_object(const cJSON *obj_sta_cfg,

webconfig_error_t decode_em_policy_object(const cJSON *em_cfg, em_config_t *em_config)
{
const cJSON *param, *disallowed_sta_array, *sta_obj, *radio_metrics_obj;
const cJSON *param, *disallowed_sta_array, *sta_obj, *radio_metrics_obj, *traffic_sep_obj;
const cJSON *policy_obj, *local_steering_policy, *btm_steering_policy, *backhaul_policy,
*channel_scan_policy, *radio_metrics_array;
*channel_scan_policy, *radio_metrics_array,*traffic_sep_policy, *traffic_sep_array;

policy_obj = cJSON_GetObjectItem(em_cfg, "Policy");
if (policy_obj == NULL) {
Expand Down Expand Up @@ -5927,6 +5927,44 @@ webconfig_error_t decode_em_policy_object(const cJSON *em_cfg, em_config_t *em_c
em_config->radio_metrics_policies.radio_metrics_policy[i].sta_status =
(param->type & cJSON_True) ? true : false;
}

// Traffic Separation Policy
traffic_sep_policy = cJSON_GetObjectItem(policy_obj, "Traffic Separation Policy");
if (traffic_sep_policy == NULL) {
wifi_util_error_print(WIFI_WEBCONFIG, "%s:%d: [TRAFFIC_SEP] Traffic Separation Policy is NULL\n",
__func__, __LINE__);
return webconfig_error_decode;
}

traffic_sep_array = cJSON_GetObjectItem(traffic_sep_policy, "Traffic Separation");
if (traffic_sep_array == NULL) {
wifi_util_error_print(WIFI_WEBCONFIG, "%s:%d: [TRAFFIC_SEP] NULL Json pointer\n", __func__, __LINE__);
}

if (cJSON_IsArray(traffic_sep_array) == false) {
wifi_util_error_print(WIFI_WEBCONFIG,"%s:%d:[TRAFFIC_SEP] Traffic Separation Policy object not present\n", __func__, __LINE__);
return webconfig_error_decode;
}
wifi_util_error_print(WIFI_WEBCONFIG, "%s:%d: [TRAFFIC_SEP] Traffic Separation count: %d\n", __func__, __LINE__,
cJSON_GetArraySize(traffic_sep_array));
em_config->traffic_separation_policy.ssids_num = cJSON_GetArraySize(traffic_sep_array);
for (int i = 0; i < em_config->traffic_separation_policy.ssids_num; i++) {
unsigned char ssid_len;
traffic_sep_obj = cJSON_GetArrayItem(traffic_sep_array, i);
decode_param_allow_optional_string(traffic_sep_obj, "SSID Name", param);
ssid_len = strlen(param->valuestring);
em_config->traffic_separation_policy.ssids[i].ssid_len = ssid_len;
strncpy(em_config->traffic_separation_policy.ssids[i].ssid, param->valuestring, ssid_len);
em_config->traffic_separation_policy.ssids[i].ssid[ssid_len] = '\0';

decode_param_integer(traffic_sep_obj, "VLAN ID", param);
em_config->traffic_separation_policy.ssids[i].vlan_id = param->valuedouble;

wifi_util_error_print(WIFI_WEBCONFIG, "%s:%d: [TRAFFIC_SEP] Traffic Separation SSID=%s, SSID Len=%d, VLAN=%d\n", __func__, __LINE__,
em_config->traffic_separation_policy.ssids[i].ssid, em_config->traffic_separation_policy.ssids[i].ssid_len,
em_config->traffic_separation_policy.ssids[i].vlan_id);
}

return webconfig_error_none;
}

Expand Down
24 changes: 22 additions & 2 deletions source/webconfig/wifi_easymesh_translator.c
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,9 @@ void default_em_device_info(em_device_info_t *device_info, em_ieee_1905_securit
strncpy(device_info->exec_env,"testEnv",strlen("testEnv"));
memset(device_info->primary_device_type,'\0',sizeof(device_info->primary_device_type));
memset(device_info->secondary_device_type,'\0',sizeof(device_info->secondary_device_type));
device_info->traffic_sep_cap = false;
device_info->traffic_sep_cap = true;
device_info->report_unsuccess_assocs = false;
device_info->traffic_sep_allowed = false;
device_info->traffic_sep_allowed = true;
device_info->svc_prio_allowed = false;
device_info->sta_steer_state = false;
device_info->coord_cac_allowed = false;
Expand Down Expand Up @@ -2717,6 +2717,26 @@ webconfig_error_t translate_policy_cfg_object_from_easymesh_to_em_cfg(webconfig_
(em_policy_cfg->metrics_policy.radios[i].sta_policy >> 5) & 1;
}

// Traffic Separation policy
policy_cfg->traffic_separation_policy.ssids_num = em_policy_cfg->traffic_separation_policy.ssids_num;
wifi_util_error_print(WIFI_WEBCONFIG, "%s:%d: [TRAFFIC_SEP] Traffic Separation policy ssids_num=%d\n", __func__, __LINE__,
em_policy_cfg->traffic_separation_policy.ssids_num);
for ( int i = 0; i < policy_cfg->traffic_separation_policy.ssids_num; i++) {
int len = em_policy_cfg->traffic_separation_policy.ssids[i].ssid_len;
memcpy(policy_cfg->traffic_separation_policy.ssids[i].ssid,
em_policy_cfg->traffic_separation_policy.ssids[i].ssid, len);

policy_cfg->traffic_separation_policy.ssids[i].ssid[len] = '\0';
policy_cfg->traffic_separation_policy.ssids[i].ssid_len = len;

policy_cfg->traffic_separation_policy.ssids[i].vlan_id = em_policy_cfg->traffic_separation_policy.ssids[i].vlan_id;

wifi_util_error_print(WIFI_WEBCONFIG, "%s:%d [TRAFFIC_SEP] SSID %s Len : %d VLAN %d\n", __func__, __LINE__,
policy_cfg->traffic_separation_policy.ssids[i].ssid,
policy_cfg->traffic_separation_policy.ssids[i].ssid_len,
policy_cfg->traffic_separation_policy.ssids[i].vlan_id);
}

return webconfig_error_none;
}
#endif
Expand Down
30 changes: 30 additions & 0 deletions source/webconfig/wifi_encoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -2836,6 +2836,36 @@ webconfig_error_t encode_em_config_object(const em_config_t *em_config, cJSON *e
em_config->radio_metrics_policies.radio_metrics_policy[i].sta_status);
}

// Traffic Separation Policy
param_obj = cJSON_CreateObject();
if (param_obj == NULL) {
wifi_util_dbg_print(WIFI_WEBCONFIG, "%s:%d:[TRAFFIC_SEP] json create object failed\n", __func__,
__LINE__);
}
cJSON_AddItemToObject(policy_obj, "Traffic Separation Policy", param_obj);
param_arr = cJSON_CreateArray();
if (param_arr == NULL) {
wifi_util_dbg_print(WIFI_WEBCONFIG, "%s:%d: [TRAFFIC_SEP] json create object failed\n", __func__,
__LINE__);
}
cJSON_AddItemToObject(param_obj, "Traffic Separation", param_arr);
wifi_util_dbg_print(WIFI_WEBCONFIG, "%s:%d [TRAFFIC_SEP] Traffic Separation num SSID %d\n", __func__, __LINE__,
em_config->traffic_separation_policy.ssids_num);
for (int i = 0; i < em_config->traffic_separation_policy.ssids_num; i++) {
param_obj = cJSON_CreateObject();
if (param_obj == NULL) {
wifi_util_dbg_print(WIFI_WEBCONFIG, "%s:%d:[TRAFFIC_SEP] json create object failed\n", __func__,
__LINE__);
}
cJSON_AddItemToArray(param_arr, param_obj);
cJSON_AddNumberToObject(param_obj, "VLAN ID", em_config->traffic_separation_policy.ssids[i].vlan_id);
cJSON_AddStringToObject(param_obj, "SSID Name", em_config->traffic_separation_policy.ssids[i].ssid);
wifi_util_dbg_print(WIFI_WEBCONFIG, "%s:%d: [TRAFFIC_SEP] Traffic Separation SSID=%s, SSID_LEN=%d, VLAN=%d\n", __func__, __LINE__,
em_config->traffic_separation_policy.ssids[i].ssid,
em_config->traffic_separation_policy.ssids[i].ssid_len,
em_config->traffic_separation_policy.ssids[i].vlan_id);
}

return webconfig_error_none;
}

Expand Down
Loading