Add Non EHT SCS Capability in (Re)Association Request frames
Set WFA capability to allow non-EHT SCS Traffic support in association elements when the AP advertises support for non-EHT SCS Traffic support via Beacon or Probe Response frame. This capability is upper layer functionality and as such, does not need a separate driver capability indication or configuration, but indicate this only if the AP supports the feature to minimize risk of interoperability issues with a new information element. Signed-off-by: Purushottam Kushwaha <quic_pkushwah@quicinc.com>
This commit is contained in:
parent
12154861e2
commit
c437665041
3 changed files with 29 additions and 0 deletions
|
@ -2857,6 +2857,7 @@ enum dscp_policy_request_type {
|
|||
/* Wi-Fi Alliance Capabilities element - Capabilities field */
|
||||
#define WFA_CAPA_QM_DSCP_POLICY BIT(0)
|
||||
#define WFA_CAPA_QM_UNSOLIC_DSCP BIT(1)
|
||||
#define WFA_CAPA_QM_NON_EHT_SCS_TRAFFIC_DESC BIT(2)
|
||||
|
||||
struct ieee80211_neighbor_ap_info {
|
||||
u8 tbtt_info_hdr;
|
||||
|
|
|
@ -3173,6 +3173,29 @@ int wpa_is_fils_sk_pfs_supported(struct wpa_supplicant *wpa_s)
|
|||
#endif /* CONFIG_FILS */
|
||||
|
||||
|
||||
bool wpa_is_non_eht_scs_traffic_desc_supported(struct wpa_bss *bss)
|
||||
{
|
||||
const u8 *wfa_capa;
|
||||
|
||||
if (!bss)
|
||||
return false;
|
||||
|
||||
/* Get WFA capability from Beacon or Probe Response frame elements */
|
||||
wfa_capa = wpa_bss_get_vendor_ie(bss, WFA_CAPA_IE_VENDOR_TYPE);
|
||||
if (!wfa_capa)
|
||||
wfa_capa = wpa_bss_get_vendor_ie_beacon(
|
||||
bss, WFA_CAPA_IE_VENDOR_TYPE);
|
||||
|
||||
if (!wfa_capa || wfa_capa[1] < 6 || wfa_capa[6] < 1 ||
|
||||
!(wfa_capa[7] & WFA_CAPA_QM_NON_EHT_SCS_TRAFFIC_DESC)) {
|
||||
/* AP does not enable QM non EHT traffic description policy */
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static int wpas_populate_wfa_capa(struct wpa_supplicant *wpa_s,
|
||||
struct wpa_bss *bss,
|
||||
u8 *wpa_ie, size_t wpa_ie_len,
|
||||
|
@ -3186,6 +3209,9 @@ static int wpas_populate_wfa_capa(struct wpa_supplicant *wpa_s,
|
|||
if (wpa_s->enable_dscp_policy_capa)
|
||||
wfa_capa[0] |= WFA_CAPA_QM_DSCP_POLICY;
|
||||
|
||||
if (wpa_is_non_eht_scs_traffic_desc_supported(bss))
|
||||
wfa_capa[0] |= WFA_CAPA_QM_NON_EHT_SCS_TRAFFIC_DESC;
|
||||
|
||||
if (!wfa_capa[0])
|
||||
return wpa_ie_len;
|
||||
|
||||
|
|
|
@ -1918,4 +1918,6 @@ void wpas_pasn_auth_trigger(struct wpa_supplicant *wpa_s,
|
|||
struct pasn_auth *pasn_auth);
|
||||
void wpas_pasn_auth_work_done(struct wpa_supplicant *wpa_s, int status);
|
||||
|
||||
bool wpa_is_non_eht_scs_traffic_desc_supported(struct wpa_bss *bss);
|
||||
|
||||
#endif /* WPA_SUPPLICANT_I_H */
|
||||
|
|
Loading…
Reference in a new issue