[RFC PATCH 14/34] API to process NTB capabilities from USD PR IE

Peddolla Harshavardhan Reddy peddolla at qti.qualcomm.com
Thu May 15 00:17:37 PDT 2025


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 5f322881f..27b9c2c9b 100644
--- a/src/common/proximity_ranging.c
+++ b/src/common/proximity_ranging.c
@@ -816,6 +816,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.reg_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)
 {
@@ -838,6 +876,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);
@@ -856,5 +901,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 8bc5fe0eb..5d5ec0dc3 100644
--- a/src/common/proximity_ranging.h
+++ b/src/common/proximity_ranging.h
@@ -195,6 +195,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