[PATCH 14/34] PR: API to process NTB capabilities from USD PR IE
Peddolla Harshavardhan Reddy
peddolla at qti.qualcomm.com
Thu Jun 19 08:37:07 PDT 2025
Add changes to parse part of Proximity Ranging IE corresponding to the
NTB ranging capability attribute and store the corresponding
data in a structure. This attribute IE contains capabilities that tell
if the device can act as an NTB ranging initiator, NTB ranging
responder and list of channels on which the device supports NTB
ranging and other device specific capabilities.
Signed-off-by: Peddolla Harshavardhan Reddy <peddolla at qti.qualcomm.com>
---
src/common/proximity_ranging.c | 51 ++++++++++++++++++++++++++++++++++
src/common/proximity_ranging.h | 1 +
2 files changed, 52 insertions(+)
diff --git a/src/common/proximity_ranging.c b/src/common/proximity_ranging.c
index d2ad2ef98..1feeaede8 100644
--- a/src/common/proximity_ranging.c
+++ b/src/common/proximity_ranging.c
@@ -814,6 +814,44 @@ static void pr_process_edca_capabilities(const u8 *caps, size_t caps_len,
}
+static void pr_process_ntb_capabilities(const u8 *caps, size_t caps_len,
+ struct ntb_capabilities *ntb_caps,
+ bool secure_ltf)
+{
+ const u8 *pos, *end;
+
+ if (!caps)
+ return;
+
+ pos = caps;
+ end = caps + caps_len;
+
+ if (*pos & PR_ISTA_SUPPORT)
+ ntb_caps->ista_support = true;
+ if (*pos & PR_RSTA_SUPPORT)
+ ntb_caps->rsta_support = true;
+ if (secure_ltf)
+ ntb_caps->secure_he_ltf = true;
+
+ pos++;
+ ntb_caps->ntb_hw_caps = WPA_GET_BE32(pos);
+
+ pos += 4;
+ os_memcpy(ntb_caps->country, pos, 3);
+
+ pos += 3;
+ pr_process_channels(pos, end - pos, &ntb_caps->channels);
+
+ wpa_printf(MSG_INFO, "PR: NTB ISTA support=%u, NTB RSTA support=%u, "
+ "op classes count=%lu, secure HE-LTF=%u, country=%c%c",
+ ntb_caps->ista_support, ntb_caps->rsta_support,
+ ntb_caps->channels.op_classes,
+ ntb_caps->secure_he_ltf,
+ ntb_caps->country[0] ? ntb_caps->country[0] : '_',
+ ntb_caps->country[1] ? ntb_caps->country[1] : '_');
+}
+
+
void pr_process_usd_elems(struct pr_data *pr, const u8 *ies, u16 ies_len,
const u8 *peer_addr, unsigned int freq)
{
@@ -836,6 +874,13 @@ void pr_process_usd_elems(struct pr_data *pr, const u8 *ies, u16 ies_len,
return;
}
+ if (!msg.edca_capability && !msg.ntb_capability) {
+ wpa_printf(MSG_DEBUG,
+ "PR: EDCA caps not present, Ignoring proximity device");
+ pr_parse_free(&msg);
+ return;
+ }
+
dev = pr_create_device(pr, peer_addr);
if (!dev) {
pr_parse_free(&msg);
@@ -854,5 +899,11 @@ void pr_process_usd_elems(struct pr_data *pr, const u8 *ies, u16 ies_len,
msg.edca_capability_len,
&dev->edca_caps);
+ if (dev->pr_caps.ntb_support && msg.ntb_capability)
+ pr_process_ntb_capabilities(msg.ntb_capability,
+ msg.ntb_capability_len,
+ &dev->ntb_caps,
+ dev->pr_caps.secure_he_ltf);
+
pr_parse_free(&msg);
}
diff --git a/src/common/proximity_ranging.h b/src/common/proximity_ranging.h
index ab6c0f965..85a5727a3 100644
--- a/src/common/proximity_ranging.h
+++ b/src/common/proximity_ranging.h
@@ -213,6 +213,7 @@ struct pr_device {
struct pr_capabilities pr_caps;
struct edca_capabilities edca_caps;
+ struct ntb_capabilities ntb_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