qcacmn: MLO D1.5 - Process BSS param change count presence in STA Info

As part of a transition of basic MLO functionality to IEEE802.11be
D1.5, add definitions and receive processing for the signaling of the
presence of BSS Parameters Change Count subfield in STA Info field in
Per-STA Profile subelement in Basic Multi-Link element Link Info
field. This presence is signaled by a new bit in the STA Control
field of the corresponding Per-STA Profile subelement. Rename the
definition for BSS Parameters Change Count (sub)field size to make it
generic since it may occur in various protocol signaling areas
related to MLO.

Change-Id: Ieb17f65547b7106442369b51cd6bc303046a224a
CRs-Fixed: 3197012
Этот коммит содержится в:
Krishna Rao
2022-05-15 19:02:51 +05:30
коммит произвёл Madan Koyyalamudi
родитель e5a68d302f
Коммит 4ce7d8f466
3 изменённых файлов: 40 добавлений и 18 удалений

Просмотреть файл

@@ -157,15 +157,15 @@ util_parse_multi_link_ctrl(uint8_t *mlieseqpayload,
if (presence_bm & WLAN_ML_BV_CTRL_PBM_BSSPARAMCHANGECNT_P) {
if (mlieseqpayloadlen <
(parsed_payload_len +
WLAN_ML_BV_CINFO_BSSPARAMCHNGCNT_SIZE)) {
WLAN_ML_BSSPARAMCHNGCNT_SIZE)) {
mlo_err_rl("ML seq payload len %zu insufficient for BSS parameter change count size %u after parsed payload len %zu.",
mlieseqpayloadlen,
WLAN_ML_BV_CINFO_BSSPARAMCHNGCNT_SIZE,
WLAN_ML_BSSPARAMCHNGCNT_SIZE,
parsed_payload_len);
return QDF_STATUS_E_PROTO;
}
parsed_payload_len += WLAN_ML_BV_CINFO_BSSPARAMCHNGCNT_SIZE;
parsed_payload_len += WLAN_ML_BSSPARAMCHNGCNT_SIZE;
}
/* Check if Medium Sync Delay Info is present */
@@ -425,6 +425,23 @@ util_parse_bvmlie_perstaprofile_stactrl(uint8_t *subelempayload,
}
}
/* Check BSS Parameters Change Count Present bit */
if (QDF_GET_BITS(stacontrol,
WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_BSSPARAMCHNGCNTP_IDX,
WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_BSSPARAMCHNGCNTP_BITS)) {
if (subelempayloadlen <
(parsed_payload_len +
WLAN_ML_BSSPARAMCHNGCNT_SIZE)) {
mlo_err_rl("Length of subelement payload %zu octets not sufficient to contain BSS Parameters Change Count of size %u octets after parsed payload length of %zu octets.",
subelempayloadlen,
WLAN_ML_BSSPARAMCHNGCNT_SIZE,
parsed_payload_len);
return QDF_STATUS_E_PROTO;
}
parsed_payload_len += WLAN_ML_BSSPARAMCHNGCNT_SIZE;
}
/* Note: Some implementation versions of hostapd/wpa_supplicant may
* provide a per-STA profile without STA profile. Let the caller
* indicate whether a STA profile is required to be found. This may be
@@ -2358,7 +2375,7 @@ util_get_bvmlie_eml_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
if (presencebitmap & WLAN_ML_BV_CTRL_PBM_LINKIDINFO_P)
eml_cap_offset += WLAN_ML_BV_CINFO_LINKIDINFO_SIZE;
if (presencebitmap & WLAN_ML_BV_CTRL_PBM_BSSPARAMCHANGECNT_P)
eml_cap_offset += WLAN_ML_BV_CINFO_BSSPARAMCHNGCNT_SIZE;
eml_cap_offset += WLAN_ML_BSSPARAMCHNGCNT_SIZE;
if (presencebitmap & WLAN_ML_BV_CTRL_PBM_MEDIUMSYNCDELAYINFO_P)
eml_cap_offset += WLAN_ML_BV_CINFO_MEDMSYNCDELAYINFO_SIZE;
@@ -2569,7 +2586,7 @@ util_get_bvmlie_mldcap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
}
if (presencebitmap & WLAN_ML_BV_CTRL_PBM_BSSPARAMCHANGECNT_P) {
commoninfolen += WLAN_ML_BV_CINFO_BSSPARAMCHNGCNT_SIZE;
commoninfolen += WLAN_ML_BSSPARAMCHNGCNT_SIZE;
if ((sizeof(struct wlan_ie_multilink) + commoninfolen) >
mlieseqlen)