qcacld-3.0: Allow roaming between same OWE profile AP's

Currently, firmware can roam between owe security SSID's
even though open SSID is different for both of the AP's.
This commit adds support to restrict roaming between the
same OWE profile AP's which means if the device needs to
roam then target AP's open SSID and owe SSID should match
with current AP.

Change-Id: Ib59127a90cab9ee6626b018d581edbf76ad89856
CRs-Fixed: 3025667
这个提交包含在:
abhinav kumar
2021-08-27 17:56:05 +05:30
提交者 Madan Koyyalamudi
父节点 24c3e1a25e
当前提交 04389c608d
修改 7 个文件,包含 186 行新增1 行删除

查看文件

@@ -4013,10 +4013,11 @@ send_roam_scan_offload_ap_profile_cmd_tlv(wmi_unified_t wmi_handle,
wmi_ap_profile *profile;
wmi_roam_score_delta_param *score_delta_param;
wmi_roam_cnd_min_rssi_param *min_rssi_param;
wmi_owe_ap_profile *owe_ap_profile;
enum roam_trigger_reason trig_reason;
len = sizeof(wmi_roam_ap_profile_fixed_param) + sizeof(wmi_ap_profile);
len += sizeof(*score_param);
len += sizeof(*score_param) + WMI_TLV_HDR_SIZE;
if (!wmi_service_enabled(wmi_handle,
wmi_service_configure_roam_trigger_param_support)) {
@@ -4024,7 +4025,15 @@ send_roam_scan_offload_ap_profile_cmd_tlv(wmi_unified_t wmi_handle,
len += NUM_OF_ROAM_TRIGGERS * sizeof(*score_delta_param);
len += WMI_TLV_HDR_SIZE;
len += NUM_OF_ROAM_MIN_RSSI * sizeof(*min_rssi_param);
} else {
len += 2 * WMI_TLV_HDR_SIZE;
}
if (ap_profile->owe_ap_profile.is_owe_transition_conn) {
len += WMI_TLV_HDR_SIZE;
len += sizeof(*owe_ap_profile);
}
buf = wmi_buf_alloc(wmi_handle, len);
if (!buf)
return QDF_STATUS_E_NOMEM;
@@ -4268,7 +4277,52 @@ send_roam_scan_offload_ap_profile_cmd_tlv(wmi_unified_t wmi_handle,
convert_roam_trigger_reason(trig_reason);
min_rssi_param->candidate_min_rssi =
ap_profile->min_rssi_params[MIN_RSSI_2G_TO_5G_ROAM].min_rssi;
buf_ptr += sizeof(*min_rssi_param);
} else {
/* set zero TLV's for roam_score_delta_param_list */
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
WMITLV_GET_STRUCT_TLVLEN(0));
buf_ptr += WMI_TLV_HDR_SIZE;
/* set zero TLV's for roam_cnd_min_rssi_param_list */
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
WMITLV_GET_STRUCT_TLVLEN(0));
buf_ptr += WMI_TLV_HDR_SIZE;
}
/* set zero TLV's for roam_cnd_vendor_scoring_param */
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
WMITLV_GET_STRUCT_TLVLEN(0));
buf_ptr += WMI_TLV_HDR_SIZE;
if (ap_profile->owe_ap_profile.is_owe_transition_conn) {
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
sizeof(*owe_ap_profile));
buf_ptr += WMI_TLV_HDR_SIZE;
owe_ap_profile = (wmi_owe_ap_profile *)buf_ptr;
WMITLV_SET_HDR(&owe_ap_profile->tlv_header,
WMITLV_TAG_STRUC_wmi_owe_ap_profile,
WMITLV_GET_STRUCT_TLVLEN(wmi_owe_ap_profile));
owe_ap_profile->open_ssid_for_owe_transition.ssid_len =
ap_profile->owe_ap_profile.ssid.length;
qdf_mem_copy(owe_ap_profile->open_ssid_for_owe_transition.ssid,
ap_profile->owe_ap_profile.ssid.ssid,
ap_profile->owe_ap_profile.ssid.length);
wmi_debug("[OWE_TRANSITION]: open ssid:%.*s",
owe_ap_profile->open_ssid_for_owe_transition.ssid_len,
(char *)owe_ap_profile->open_ssid_for_owe_transition.ssid);
buf_ptr += sizeof(*owe_ap_profile);
} else {
/* set zero TLV's for owe_ap_profile */
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
WMITLV_GET_STRUCT_TLVLEN(0));
buf_ptr += WMI_TLV_HDR_SIZE;
}
wmi_mtrace(WMI_ROAM_AP_PROFILE, NO_SESSION, 0);
status = wmi_unified_cmd_send(wmi_handle, buf,
len, WMI_ROAM_AP_PROFILE);