3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-11-25 17:59:25 +01:00

ie: parse DGAF Disable bit from HS20 indication element

This commit is contained in:
James Prestwood 2021-11-04 10:57:55 -07:00 committed by Denis Kenzior
parent fd85192a54
commit 6852cf0a3e
3 changed files with 13 additions and 6 deletions

View File

@ -2035,7 +2035,8 @@ int ie_build_roaming_consortium(const uint8_t *rc, size_t rc_len, uint8_t *to)
}
int ie_parse_hs20_indication(struct ie_tlv_iter *iter, uint8_t *version_out,
uint16_t *pps_mo_id_out, uint8_t *domain_id_out)
uint16_t *pps_mo_id_out, uint8_t *domain_id_out,
bool *dgaf_disable_out)
{
unsigned int len = ie_tlv_iter_get_length(iter);
const uint8_t *data = ie_tlv_iter_get_data(iter);
@ -2060,6 +2061,9 @@ int ie_parse_hs20_indication(struct ie_tlv_iter *iter, uint8_t *version_out,
if (pps_mo_present && domain_id_present)
return -EPROTOTYPE;
if (dgaf_disable_out)
*dgaf_disable_out = test_bit(&hs20_config, 0);
if (version_out)
*version_out = bit_field(hs20_config, 4, 4);
@ -2087,7 +2091,7 @@ int ie_parse_hs20_indication(struct ie_tlv_iter *iter, uint8_t *version_out,
int ie_parse_hs20_indication_from_data(const uint8_t *data, size_t len,
uint8_t *version, uint16_t *pps_mo_id,
uint8_t *domain_id)
uint8_t *domain_id, bool *dgaf_disable)
{
struct ie_tlv_iter iter;
@ -2099,7 +2103,8 @@ int ie_parse_hs20_indication_from_data(const uint8_t *data, size_t len,
if (ie_tlv_iter_get_tag(&iter) != IE_TYPE_VENDOR_SPECIFIC)
return -EPROTOTYPE;
return ie_parse_hs20_indication(&iter, version, pps_mo_id, domain_id);
return ie_parse_hs20_indication(&iter, version, pps_mo_id, domain_id,
dgaf_disable);
}
/*

View File

@ -616,10 +616,11 @@ int ie_parse_roaming_consortium_from_data(const uint8_t *data, size_t len,
int ie_build_roaming_consortium(const uint8_t *rc, size_t rc_len, uint8_t *to);
int ie_parse_hs20_indication(struct ie_tlv_iter *iter, uint8_t *version,
uint16_t *pps_mo_id, uint8_t *domain_id);
uint16_t *pps_mo_id, uint8_t *domain_id,
bool *dgaf_disable);
int ie_parse_hs20_indication_from_data(const uint8_t *data, size_t len,
uint8_t *version, uint16_t *pps_mo_id,
uint8_t *domain_id);
uint8_t *domain_id, bool *dgaf_disable);
int ie_build_hs20_indication(uint8_t version, uint8_t *to);
enum ie_rsnx_capability {

View File

@ -1071,7 +1071,8 @@ static void scan_parse_vendor_specific(struct scan_bss *bss, const void *data,
if (is_ie_wfa_ie(data, len, IE_WFA_OI_HS20_INDICATION)) {
if (ie_parse_hs20_indication_from_data(data - 2, len + 2,
&bss->hs20_version, NULL, NULL) < 0)
&bss->hs20_version, NULL, NULL,
NULL) < 0)
return;
bss->hs20_capable = true;