Skip to content
Draft
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
63 changes: 63 additions & 0 deletions include/wifi_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -1298,6 +1298,63 @@ typedef struct {
radio_metrics_policy_t radio_metrics_policy[EM_MAX_RADIO_POLICY];
} radio_metrics_policies_t;

typedef struct {
bool report_unassoc_sta;
unsigned int max_reporting_rate;
} unsuccessful_assoc_policy_t;

#define EM_MAX_QOS_MAC 16
typedef struct {
int num_mscs;
mac_addr_t mscs_mac[EM_MAX_QOS_MAC];
int num_scs;
mac_addr_t scs_mac[EM_MAX_QOS_MAC];
} qos_mgt_policy_t;

typedef struct {
unsigned short primary_vid;
unsigned char default_pcp;
} default_8021q_policy_t;

#define EM_MAX_SSIDS_TRAFFIC_SEP 8
typedef struct {
char ssid[33];
unsigned short vlan_id;
} ssid_vlan_info_t;

typedef struct {
int num_ssids;
ssid_vlan_info_t ssid_info[EM_MAX_SSIDS_TRAFFIC_SEP];
} traffic_separation_policy_t;

typedef struct {
mac_addr_t ruid;
int policy;
int util_threshold;
int rcpi_threshold;
} radio_steering_policy_t;

typedef struct {
int radio_count;
radio_steering_policy_t radio_steering_policy[EM_MAX_RADIO_POLICY];
} radio_steering_policies_t;

/* Bitmask flags for em_policy_cfg_params_t::present_mask (em_base.h) — used by the
* encoder to determine which policy sections to include. Zero = encode all. */
#define EM_POLICY_PRESENT_ALARM (1u << 0)
#define EM_POLICY_PRESENT_AP_METRICS (1u << 1)
#define EM_POLICY_PRESENT_LOCAL_STEERING (1u << 2)
#define EM_POLICY_PRESENT_BTM_STEERING (1u << 3)
#define EM_POLICY_PRESENT_BACKHAUL_BSS (1u << 4)
#define EM_POLICY_PRESENT_CHAN_SCAN (1u << 5)
#define EM_POLICY_PRESENT_RADIO_METRICS (1u << 6)
#define EM_POLICY_PRESENT_UNSUCCESS_ASSOC (1u << 7)
#define EM_POLICY_PRESENT_QOS_MGT (1u << 8)
#define EM_POLICY_PRESENT_8021Q (1u << 9)
#define EM_POLICY_PRESENT_TRAFFIC_SEP (1u << 10)
#define EM_POLICY_PRESENT_CLIENT_FILTERS (1u << 11)
#define EM_POLICY_PRESENT_RADIO_STEERING (1u << 12)

typedef struct {
alarm_report_policy_t alarm_report_policy;
ap_metrics_policy_t ap_metric_policy;
Expand All @@ -1306,6 +1363,12 @@ typedef struct {
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;
unsuccessful_assoc_policy_t unsuccess_assoc_policy;
qos_mgt_policy_t qos_mgt_policy;
default_8021q_policy_t default_8021q_policy;
// traffic_separation_policy_t traffic_separation_policy;
radio_steering_policies_t radio_steering_policies;
uint32_t em_policy_present_mask; /* EM_POLICY_PRESENT_* flags; 0 = encode all sections */
} em_config_t;

typedef struct {
Expand Down
109 changes: 100 additions & 9 deletions source/webconfig/wifi_decoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -6294,6 +6294,9 @@ webconfig_error_t decode_em_policy_object(const cJSON *em_cfg, em_config_t *em_c
const cJSON *param, *disallowed_sta_array, *sta_obj, *radio_metrics_obj;
const cJSON *policy_obj, *local_steering_policy, *btm_steering_policy, *backhaul_policy,
*channel_scan_policy, *radio_metrics_array;
const cJSON *unsuccess_assoc_policy, *qos_mgt_policy, *def_8021q_policy;
const cJSON *traffic_sep_policy, *client_filters_policy, *radio_steer_array, *radio_steer_obj;
char mac_str[32];

policy_obj = cJSON_GetObjectItem(em_cfg, "Policy");
if (policy_obj == NULL) {
Expand Down Expand Up @@ -6403,15 +6406,18 @@ webconfig_error_t decode_em_policy_object(const cJSON *em_cfg, em_config_t *em_c
return webconfig_error_decode;
}

decode_param_allow_optional_string(backhaul_policy, "BSSID", param);
strncpy((char *)em_config->backhaul_bss_config_policy.bssid, param->valuestring,
sizeof(bssid_t));

decode_param_allow_optional_string(backhaul_policy, "Profile-1 bSTA Disallowed", param);
em_config->backhaul_bss_config_policy.profile_1_bsta_disallowed = 0; // param->valuedouble;

decode_param_allow_optional_string(backhaul_policy, "Profile-2 bSTA Disallowed", param);
em_config->backhaul_bss_config_policy.profile_2_bsta_disallowed = 1; // param->valuedouble;
if (cJSON_IsArray(backhaul_policy) && cJSON_GetArraySize(backhaul_policy) > 0) {
const cJSON *bss_item = cJSON_GetArrayItem(backhaul_policy, 0);
decode_param_allow_optional_string(bss_item, "BSSID", param);
strncpy((char *)em_config->backhaul_bss_config_policy.bssid, param->valuestring,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

there is bug which we fixed here

sizeof(bssid_t));
decode_param_bool(bss_item, "Profile-1 bSTA Disallowed", param);
em_config->backhaul_bss_config_policy.profile_1_bsta_disallowed =
(param->type & cJSON_True) ? true : false;
decode_param_bool(bss_item, "Profile-2 bSTA Disallowed", param);
em_config->backhaul_bss_config_policy.profile_2_bsta_disallowed =
(param->type & cJSON_True) ? true : false;
}

// Channel Scan Reporting Policy
channel_scan_policy = cJSON_GetObjectItem(policy_obj, "Channel Scan Reporting Policy");
Expand Down Expand Up @@ -6467,6 +6473,91 @@ 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;
}

// Unsuccessful Association Policy
unsuccess_assoc_policy = cJSON_GetObjectItem(policy_obj, "Unsuccessful Association Policy");
if (unsuccess_assoc_policy != NULL) {
decode_param_bool(unsuccess_assoc_policy, "Report Unsuccessful Associations", param);
em_config->unsuccess_assoc_policy.report_unassoc_sta =
(param->type & cJSON_True) ? true : false;
decode_param_integer(unsuccess_assoc_policy, "Maximum Reporting Rate", param);
em_config->unsuccess_assoc_policy.max_reporting_rate = param->valuedouble;
}

// QoS Management Policy
qos_mgt_policy = cJSON_GetObjectItem(policy_obj, "QoS Management Policy");
if (qos_mgt_policy != NULL) {
const cJSON *mscs_arr = cJSON_GetObjectItem(qos_mgt_policy, "MSCS Disallowed STA List");
if (mscs_arr != NULL && cJSON_IsArray(mscs_arr)) {
em_config->qos_mgt_policy.num_mscs = cJSON_GetArraySize(mscs_arr);
for (int i = 0; i < em_config->qos_mgt_policy.num_mscs && i < EM_MAX_QOS_MAC; i++) {
const cJSON *mac_item = cJSON_GetArrayItem(mscs_arr, i);
str_to_mac_bytes(cJSON_GetStringValue(mac_item),
em_config->qos_mgt_policy.mscs_mac[i]);
}
}
const cJSON *scs_arr = cJSON_GetObjectItem(qos_mgt_policy, "SCS Disallowed STA List");
if (scs_arr != NULL && cJSON_IsArray(scs_arr)) {
em_config->qos_mgt_policy.num_scs = cJSON_GetArraySize(scs_arr);
for (int i = 0; i < em_config->qos_mgt_policy.num_scs && i < EM_MAX_QOS_MAC; i++) {
const cJSON *mac_item = cJSON_GetArrayItem(scs_arr, i);
str_to_mac_bytes(cJSON_GetStringValue(mac_item),
em_config->qos_mgt_policy.scs_mac[i]);
}
}
}

// Default 802.1Q Settings Policy
def_8021q_policy = cJSON_GetObjectItem(policy_obj, "Default 802.1Q Settings Policy");
if (def_8021q_policy != NULL) {
decode_param_integer(def_8021q_policy, "Primay VLAN ID", param);
em_config->default_8021q_policy.primary_vid = (unsigned short)param->valuedouble;
decode_param_integer(def_8021q_policy, "Default PCP", param);
em_config->default_8021q_policy.default_pcp = (unsigned char)param->valuedouble;
}

// Traffic Separation Policy
// traffic_sep_policy = cJSON_GetObjectItem(policy_obj, "Traffic Separation Policy");
// if (traffic_sep_policy != NULL) {
// const cJSON *ssid_arr = cJSON_GetObjectItem(traffic_sep_policy, "SSID List");
// if (ssid_arr != NULL && cJSON_IsArray(ssid_arr)) {
// em_config->traffic_separation_policy.num_ssids = cJSON_GetArraySize(ssid_arr);
// for (int i = 0; i < em_config->traffic_separation_policy.num_ssids &&
// i < EM_MAX_SSIDS_TRAFFIC_SEP; i++) {
// const cJSON *ssid_obj = cJSON_GetArrayItem(ssid_arr, i);
// decode_param_allow_optional_string(ssid_obj, "SSID", param);
// strncpy(em_config->traffic_separation_policy.ssid_info[i].ssid,
// param->valuestring,
// sizeof(em_config->traffic_separation_policy.ssid_info[i].ssid) - 1);
// decode_param_integer(ssid_obj, "VLAN ID", param);
// em_config->traffic_separation_policy.ssid_info[i].vlan_id =
// (unsigned short)param->valuedouble;
// }
// }
// }

// Radio Steering Parameters
radio_steer_array = cJSON_GetObjectItem(policy_obj, "Radio Steering Parameters");
if (radio_steer_array != NULL && cJSON_IsArray(radio_steer_array)) {
em_config->radio_steering_policies.radio_count = cJSON_GetArraySize(radio_steer_array);
for (int i = 0; i < em_config->radio_steering_policies.radio_count &&
i < EM_MAX_RADIO_POLICY; i++) {
radio_steer_obj = cJSON_GetArrayItem(radio_steer_array, i);
decode_param_allow_optional_string(radio_steer_obj, "ID", param);
str_to_mac_bytes(param->valuestring,
em_config->radio_steering_policies.radio_steering_policy[i].ruid);
decode_param_integer(radio_steer_obj, "Steering Policy", param);
em_config->radio_steering_policies.radio_steering_policy[i].policy =
(int)param->valuedouble;
decode_param_integer(radio_steer_obj, "Utilization Threshold", param);
em_config->radio_steering_policies.radio_steering_policy[i].util_threshold =
(int)param->valuedouble;
decode_param_integer(radio_steer_obj, "RCPI Threshold", param);
em_config->radio_steering_policies.radio_steering_policy[i].rcpi_threshold =
(int)param->valuedouble;
}
}

return webconfig_error_none;
}

Expand Down
9 changes: 8 additions & 1 deletion source/webconfig/wifi_easymesh_translator.c
Original file line number Diff line number Diff line change
Expand Up @@ -3087,9 +3087,13 @@ webconfig_error_t translate_policy_cfg_object_from_easymesh_to_em_cfg(webconfig_
sizeof(bssid_t));
policy_cfg->backhaul_bss_config_policy.profile_1_bsta_disallowed =
em_policy_cfg->bh_bss_cfg_policy.p1_bsta_disallowed;
policy_cfg->backhaul_bss_config_policy.profile_1_bsta_disallowed =
policy_cfg->backhaul_bss_config_policy.profile_2_bsta_disallowed =
em_policy_cfg->bh_bss_cfg_policy.p2_bsta_disallowed;

// default 802.1Q settings policy
policy_cfg->default_8021q_policy.primary_vid = em_policy_cfg->def_8021q_settings.primary_vlan_id;
policy_cfg->default_8021q_policy.default_pcp = em_policy_cfg->def_8021q_settings.default_pcp;

// channel scan reporting policy
policy_cfg->channel_scan_reporting_policy.report_independent_channel_scan =
em_policy_cfg->channel_scan_policy.rprt_ind_ch_scan;
Expand All @@ -3113,6 +3117,9 @@ webconfig_error_t translate_policy_cfg_object_from_easymesh_to_em_cfg(webconfig_
(em_policy_cfg->metrics_policy.radios[i].sta_policy >> 5) & 1;
}

/* store the received-sections bitmask so the encoder skips absent policy sections */
policy_cfg->em_policy_present_mask = em_policy_cfg->present_mask;

return webconfig_error_none;
}
#endif
Expand Down
Loading
Loading