[RFC PATCH 12/34] API to process ranging capabilities from USD PR IE
Peddolla Harshavardhan Reddy
peddolla at qti.qualcomm.com
Thu May 15 00:17:35 PDT 2025
Signed-off-by: Peddolla Harshavardhan Reddy <peddolla at qti.qualcomm.com>
---
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 ae4c0e7a8..a4f36df6a 100644
--- a/src/common/proximity_ranging.c
+++ b/src/common/proximity_ranging.c
@@ -694,6 +694,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)
{
@@ -709,6 +755,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);
@@ -719,5 +772,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 84535a8b6..28cbc197d 100644
--- a/src/common/proximity_ranging.h
+++ b/src/common/proximity_ranging.h
@@ -193,6 +193,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
More information about the Hostap
mailing list