[RFC 97/97] tests: Add data_path flag verification to NDP tests
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Tue Apr 28 13:06:38 PDT 2026
Set data_path=1 in NAN_PUBLISH for data path tests and verify the
data_path flag in NAN-DISCOVERY-RESULT events.
Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
tests/hwsim/test_nan.py | 36 ++++++++++++++++++++++++------------
1 file changed, 24 insertions(+), 12 deletions(-)
diff --git a/tests/hwsim/test_nan.py b/tests/hwsim/test_nan.py
index 8735d140fc..e2d3f4960a 100644
--- a/tests/hwsim/test_nan.py
+++ b/tests/hwsim/test_nan.py
@@ -99,7 +99,7 @@ class NanDevice:
def publish(self, service_name, ssi=None, unsolicited=1, solicited=1,
sync=1, match_filter_rx=None, match_filter_tx=None,
close_proximity=0, pbm=0, nd_pmk=None, cipher_suites=None,
- ttl=None):
+ ttl=None, data_path=False):
cmd = f"NAN_PUBLISH service_name={service_name} sync={sync} srv_proto_type=2 fsd=0"
@@ -130,6 +130,9 @@ class NanDevice:
if ttl is not None:
cmd += f" ttl={ttl}"
+ if data_path:
+ cmd += " data_path=1"
+
return self.wpas.request(cmd)
def schedule_config(self, *chans, map_id=1):
@@ -316,7 +319,7 @@ def split_nan_event(ev):
vals[name] = val
return vals
-def nan_sync_verify_event(ev, addr, pid, sid, ssi):
+def nan_sync_verify_event(ev, addr, pid, sid, ssi, data_path=None):
data = split_nan_event(ev)
if data['srv_proto_type'] != '2':
@@ -334,6 +337,9 @@ def nan_sync_verify_event(ev, addr, pid, sid, ssi):
if data['address'] != addr:
raise Exception("Unexpected peer_addr: " + ev)
+ if data_path is not None and int(data.get('data_path', 0)) != int(data_path):
+ raise Exception(f"Unexpected data_path: got {data.get('data_path')}, expected {int(data_path)} in event: " + ev)
+
def nan_ndp_verify_event(ev, peer_nmi, publish_inst_id=None, init_ndi=None,
ssi=None, csid=None):
"""Verify NAN-NDP-REQUEST event format and content"""
@@ -1080,7 +1086,7 @@ def test_nan_sched(dev, apdev, params):
set_country("00")
def _nan_discover_service(pub, sub, service_name, pssi, sssi, ttl=None,
- csid=None, gtk_csid=None):
+ csid=None, gtk_csid=None, data_path=False):
paddr = pub.wpas.own_addr()
saddr = sub.wpas.own_addr()
@@ -1090,7 +1096,8 @@ def _nan_discover_service(pub, sub, service_name, pssi, sssi, ttl=None,
if gtk_csid is not None:
cipher_suites += f",{gtk_csid}"
- pid = pub.publish(service_name, ssi=pssi, ttl=ttl, cipher_suites=cipher_suites)
+ pid = pub.publish(service_name, ssi=pssi, ttl=ttl, cipher_suites=cipher_suites,
+ data_path=data_path)
sid = sub.subscribe(service_name, ssi=sssi, active=0)
logger.info(f"Publish ID: {pid}, Subscribe ID: {sid}")
@@ -1099,7 +1106,7 @@ def _nan_discover_service(pub, sub, service_name, pssi, sssi, ttl=None,
if ev is None:
raise Exception(f"NAN-DISCOVERY-RESULT event not seen for {service_name}")
- nan_sync_verify_event(ev, paddr, pid, sid, pssi)
+ nan_sync_verify_event(ev, paddr, pid, sid, pssi, data_path=data_path)
return pid, sid, paddr, saddr
@@ -1258,7 +1265,8 @@ def _run_nan_dp(counter=False, csid=None, wrong_pwd=False, use_pmk=False,
sssi = "ddbbccaa001122334455667788"
pid, sid, paddr, saddr= _nan_discover_service(pub, sub, "test_service", pssi, sssi,
- csid=csid, gtk_csid=gtk_csid)
+ csid=csid, gtk_csid=gtk_csid,
+ data_path=True)
# Log peer info (specific to this test)
peer_schedule = pub.wpas.request("NAN_PEER_INFO " + saddr + " schedule")
@@ -1369,7 +1377,8 @@ def _run_nan_dp_2_ndps(secure_ndp2=False):
sssi = "ddbbccaa001122334455667788"
# First NDP (always open)
- pid1, sid1, paddr, saddr = _nan_discover_service(pub, sub, "test_service1", pssi, sssi)
+ pid1, sid1, paddr, saddr = _nan_discover_service(pub, sub, "test_service1", pssi, sssi,
+ data_path=True)
ndp_id1, init_ndi1 = _nan_ndp_request_and_accept(pub, sub, pid1, sid1, paddr, saddr,
req_ssi="aabbcc", resp_ssi="ddeeff",
@@ -1378,7 +1387,8 @@ def _run_nan_dp_2_ndps(secure_ndp2=False):
logger.info("NDP1 (open) connection established successfully")
# Second NDP (open or secure based on secure_ndp2)
- pid2, sid2, _, _ = _nan_discover_service(pub, sub, "test_service2", pssi, sssi)
+ pid2, sid2, _, _ = _nan_discover_service(pub, sub, "test_service2", pssi, sssi,
+ data_path=True)
ndp_id2, init_ndi2 = _nan_ndp_request_and_accept(pub, sub, pid2, sid2, paddr, saddr,
req_ssi="112233", resp_ssi="445566",
@@ -1781,7 +1791,7 @@ def _run_nan_pairing_bootstrap_ndp(pairing_type, password=None, csid=1):
pssi = "aabbccdd"
sssi = "ddbbccaa"
- pid = pub.publish("test_service", ssi=pssi, unsolicited=0, pbm=0x1)
+ pid = pub.publish("test_service", ssi=pssi, unsolicited=0, pbm=0x1, data_path=True)
sid = sub.subscribe("test_service", ssi=sssi)
logger.info(f"Publish ID: {pid}, Subscribe ID: {sid}")
@@ -1790,7 +1800,7 @@ def _run_nan_pairing_bootstrap_ndp(pairing_type, password=None, csid=1):
if ev is None:
raise Exception("NAN-DISCOVERY-RESULT event not seen")
- nan_sync_verify_event(ev, paddr, pid, sid, pssi)
+ nan_sync_verify_event(ev, paddr, pid, sid, pssi, data_path=True)
ev = pub.wpas.wait_event(["NAN-REPLIED"], timeout=2)
if ev is None:
@@ -1833,7 +1843,7 @@ def _run_nan_pairing_bootstrap_ndp(pairing_type, password=None, csid=1):
if ev is None:
raise Exception("NAN-DISCOVERY-RESULT event not seen")
- nan_sync_verify_event(ev, paddr, pid, sid, pssi)
+ nan_sync_verify_event(ev, paddr, pid, sid, pssi, data_path=True)
ev = pub.wpas.wait_event(["NAN-REPLIED"], timeout=2)
if ev is None:
@@ -1861,7 +1871,8 @@ def _run_nan_ndp_reconnect_after_terminate():
sssi = "ddbbccaa001122334455667788"
# First service discovery and NDP
- pid, sid, paddr, saddr = _nan_discover_service(pub, sub, "test_service", pssi, sssi, ttl=10)
+ pid, sid, paddr, saddr = _nan_discover_service(pub, sub, "test_service", pssi, sssi,
+ ttl=10, data_path=True)
logger.info("Starting first NDP connection...")
ndp_id1, init_ndi1 = _nan_ndp_request_and_accept(pub, sub, pid, sid, paddr, saddr,
@@ -2058,3 +2069,4 @@ def test_nan_override_potential_availability(dev, apdev, params):
# test execution.
if potential != old_potential:
raise Exception("Potential availability did not revert to original after clearing override")
+
--
2.53.0
More information about the Hostap
mailing list