[RFC 56/97] tests: Test NAN management interface creation with an address

Andrei Otcheretianski andrei.otcheretianski at intel.com
Tue Apr 28 13:05:57 PDT 2026


From: Ilan Peer <ilan.peer at intel.com>

Add test to verify that a NAN management interface can be created
with an address assigned to it. Verify that the expected addresses
are used.

Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
 tests/hwsim/test_nan.py      | 27 +++++++++++++++++++++++++--
 tests/hwsim/wpasupplicant.py |  4 +++-
 2 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/tests/hwsim/test_nan.py b/tests/hwsim/test_nan.py
index 2c21110a15..24da9dc629 100644
--- a/tests/hwsim/test_nan.py
+++ b/tests/hwsim/test_nan.py
@@ -43,11 +43,12 @@ def check_nan_capab(dev):
         raise HwsimSkip(f"NAN not supported: {capa}")
 
 class NanDevice:
-    def __init__(self, dev, ifname, ndi_name=None):
+    def __init__(self, dev, ifname, ndi_name=None, nmi_addr=None):
         self.dev = dev
         self.ifname = ifname
         self.wpas = None
         self.ndi_name = ndi_name
+        self.nmi_addr = nmi_addr
 
     def __enter__(self):
         self.start()
@@ -60,7 +61,7 @@ class NanDevice:
         check_nan_capab(self.dev)
 
         logger.info(f"NAN device starting on {self.ifname}")
-        self.dev.interface_add(self.ifname, if_type="nan", create=True)
+        self.dev.interface_add(self.ifname, if_type="nan", create=True, addr=self.nmi_addr)
         self.wpas = WpaSupplicant(ifname=self.ifname)
         self.set("master_pref", "10")
         self.set("dual_band", "0")
@@ -396,6 +397,28 @@ def test_nan_sync_active_subscribe(dev, apdev, params):
                            pssi="aabbccdd", sssi="ddbbccaa",
                            unsolicited=0)
 
+def test_nan_sync_with_nmi_addresses(dev, apdev, params):
+    """NAN synchronized active subscribe and solicited publish with NMI addresses"""
+    pnmi_addr = "40:00:00:00:17:00"
+    snmi_addr = "40:00:00:00:18:00"
+
+    with hwsim_nan_radios(count=2) as [wpas1, wpas2], \
+            NanDevice(wpas1, "nan0", nmi_addr=pnmi_addr) as pub, \
+            NanDevice(wpas2, "nan1", nmi_addr=snmi_addr) as sub:
+
+        paddr = pub.wpas.own_addr()
+        saddr = sub.wpas.own_addr()
+
+        if paddr != pnmi_addr:
+            raise Exception(f"Publisher NMI address mismatch: got {paddr}, expected {pnmi_addr}")
+
+        if saddr != snmi_addr:
+            raise Exception(f"Subscriber NMI address mismatch: got {saddr}, expected {snmi_addr}")
+
+        nan_sync_discovery(pub, sub, "test_service",
+                           pssi="aabbccdd", sssi="ddbbccaa",
+                           unsolicited=0)
+
 def test_nan_sync_followup(dev, apdev, params):
     """NAN synchronized active subscribe and solicited publish"""
     with hwsim_nan_radios(count=2) as [wpas1, wpas2], \
diff --git a/tests/hwsim/wpasupplicant.py b/tests/hwsim/wpasupplicant.py
index c6090f2c62..36854fb343 100644
--- a/tests/hwsim/wpasupplicant.py
+++ b/tests/hwsim/wpasupplicant.py
@@ -222,7 +222,7 @@ class WpaSupplicant:
 
     def interface_add(self, ifname, config="", driver="nl80211",
                       drv_params=None, br_ifname=None, create=False,
-                      set_ifname=True, all_params=False, if_type=None):
+                      set_ifname=True, all_params=False, if_type=None, addr=None):
         status, groups = self.host.execute(["id"])
         if status != 0:
             group = "admin"
@@ -242,6 +242,8 @@ class WpaSupplicant:
             cmd += '\tcreate'
             if if_type:
                 cmd += '\t' + if_type
+                if addr is not None:
+                    cmd += '\t' + addr
         if all_params and not create:
             if not br_ifname:
                 cmd += '\t'
-- 
2.53.0




More information about the Hostap mailing list