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 */
|
/* Wi-Fi Alliance Capabilities element - Capabilities field */
|
||||||
#define WFA_CAPA_QM_DSCP_POLICY BIT(0)
|
#define WFA_CAPA_QM_DSCP_POLICY BIT(0)
|
||||||
#define WFA_CAPA_QM_UNSOLIC_DSCP BIT(1)
|
#define WFA_CAPA_QM_UNSOLIC_DSCP BIT(1)
|
||||||
|
#define WFA_CAPA_QM_NON_EHT_SCS_TRAFFIC_DESC BIT(2)
|
||||||
|
|
||||||
struct ieee80211_neighbor_ap_info {
|
struct ieee80211_neighbor_ap_info {
|
||||||
u8 tbtt_info_hdr;
|
u8 tbtt_info_hdr;
|
||||||
|
|
|
@ -3173,6 +3173,29 @@ int wpa_is_fils_sk_pfs_supported(struct wpa_supplicant *wpa_s)
|
||||||
#endif /* CONFIG_FILS */
|
#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,
|
static int wpas_populate_wfa_capa(struct wpa_supplicant *wpa_s,
|
||||||
struct wpa_bss *bss,
|
struct wpa_bss *bss,
|
||||||
u8 *wpa_ie, size_t wpa_ie_len,
|
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)
|
if (wpa_s->enable_dscp_policy_capa)
|
||||||
wfa_capa[0] |= WFA_CAPA_QM_DSCP_POLICY;
|
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])
|
if (!wfa_capa[0])
|
||||||
return wpa_ie_len;
|
return wpa_ie_len;
|
||||||
|
|
||||||
|
|
|
@ -1918,4 +1918,6 @@ void wpas_pasn_auth_trigger(struct wpa_supplicant *wpa_s,
|
||||||
struct pasn_auth *pasn_auth);
|
struct pasn_auth *pasn_auth);
|
||||||
void wpas_pasn_auth_work_done(struct wpa_supplicant *wpa_s, int status);
|
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 */
|
#endif /* WPA_SUPPLICANT_I_H */
|
||||||
|
|
Loading…
Add table
Reference in a new issue