Add changes to parse part of Proximity Ranging IE corresponding to the Proximity Ranging capability attribute and store the corresponding data in a structure. This attribute IE contains capabilities such as EDCA based ranging support, NTB based ranging support and such. Signed-off-by: Peddolla Harshavardhan Reddy <peddolla@xxxxxxxxxxxxxxxx> --- src/common/proximity_ranging.c | 56 ++++++++++++++++++++++++++++++++++ src/common/proximity_ranging.h | 2 ++ 2 files changed, 58 insertions(+) diff --git a/src/common/proximity_ranging.c b/src/common/proximity_ranging.c index 8e1d79f84..24ca92c2b 100644 --- a/src/common/proximity_ranging.c +++ b/src/common/proximity_ranging.c @@ -692,6 +692,52 @@ static int pr_parse_ies(const u8 *data, size_t len, struct pr_message *msg) } + + +static void pr_process_ranging_capabilities(const u8 *caps, size_t caps_len, + struct pr_capabilities *pr_caps) +{ + const u8 *pos; + + if (!caps || caps_len < 34) { + wpa_printf(MSG_ERROR, "PR: Invalid args in PR capabilities"); + return; + } + + pos = caps; + + if (*pos & PR_EDCA_BASED_RANGING) + pr_caps->edca_support = true; + if (*pos & PR_NTB_SECURE_LTF_BASED_RANGING) { + pr_caps->secure_he_ltf = true; + pr_caps->ntb_support = true; + } + if (*pos & PR_NTB_OPEN_BASED_RANGING) + pr_caps->ntb_support = true; + + pos++; + pr_caps->pasn_type = *pos; + + pos++; + + if (*pos & BIT(0)) + pr_caps->support_6ghz = true; + else + pr_caps->support_6ghz = false; + + pos++; + + os_memset(pr_caps->device_name, 0, WPS_DEV_NAME_MAX_LEN + 1); + os_memcpy(pr_caps->device_name, pos, WPS_DEV_NAME_MAX_LEN); + + wpa_printf(MSG_INFO, "PR: Device name=%s, edca capability=%u, ntb capability= %u," + " secure ltf capability= %u, 6Ghz support= %u", + pr_caps->device_name, pr_caps->edca_support, + pr_caps->ntb_support, pr_caps->secure_he_ltf, + pr_caps->support_6ghz); +} + + void pr_process_usd_elems(struct pr_data *pr, const u8 *ies, u16 ies_len, const u8 *peer_addr, unsigned int freq) { @@ -707,6 +753,13 @@ void pr_process_usd_elems(struct pr_data *pr, const u8 *ies, u16 ies_len, return; } + if (!msg.pr_capability) { + wpa_printf(MSG_DEBUG, + "PR: Ranging caps not present, Ignoring proximity device"); + pr_parse_free(&msg); + return; + } + dev = pr_create_device(pr, peer_addr); if (!dev) { pr_parse_free(&msg); @@ -717,5 +770,8 @@ void pr_process_usd_elems(struct pr_data *pr, const u8 *ies, u16 ies_len, os_get_reltime(&dev->last_seen); dev->listen_freq = freq; + pr_process_ranging_capabilities(msg.pr_capability, + msg.pr_capability_len, &dev->pr_caps); + pr_parse_free(&msg); } diff --git a/src/common/proximity_ranging.h b/src/common/proximity_ranging.h index b666bf3de..7661f4b2e 100644 --- a/src/common/proximity_ranging.h +++ b/src/common/proximity_ranging.h @@ -241,6 +241,8 @@ struct pr_device { */ u8 pr_device_addr[ETH_ALEN]; + struct pr_capabilities pr_caps; + /* Password to be used in PASN-SAE by the Seeker * This is updated with valid password if DIRA matches for the peer */ -- 2.34.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap