]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
tests: DPP2 connection status result
authorJouni Malinen <jouni@codeaurora.org>
Sun, 15 Sep 2019 13:19:45 +0000 (16:19 +0300)
committerJouni Malinen <j@w1.fi>
Mon, 16 Sep 2019 14:25:34 +0000 (17:25 +0300)
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
tests/hwsim/test_dpp.py
tests/hwsim/wpasupplicant.py

index 30eebdd67d8c53dfc2d796cab334bcfc90e6f267..5be82e53d286c163820e0fc554fa1db436b1d91c 100644 (file)
@@ -3666,6 +3666,7 @@ def wait_auth_success(responder, initiator, configurator=None, enrollee=None,
                       allow_configurator_failure=False,
                       require_configurator_failure=False,
                       timeout=5, stop_responder=False, stop_initiator=False):
+    res = {}
     ev = responder.wait_event(["DPP-AUTH-SUCCESS", "DPP-FAIL"], timeout=timeout)
     if ev is None or "DPP-AUTH-SUCCESS" not in ev:
         raise Exception("DPP authentication did not succeed (Responder)")
@@ -3681,6 +3682,8 @@ def wait_auth_success(responder, initiator, configurator=None, enrollee=None,
             raise Exception("DPP configuration did not succeed (Configurator")
         if "DPP-CONF-SENT" in ev and require_configurator_failure:
             raise Exception("DPP configuration succeeded (Configurator)")
+        if "DPP-CONF-SENT" in ev and "wait_conn_status=1" in ev:
+            res['wait_conn_status'] = True
     if enrollee:
         ev = enrollee.wait_event(["DPP-CONF-RECEIVED",
                                   "DPP-CONF-FAILED"], timeout=5)
@@ -3692,6 +3695,7 @@ def wait_auth_success(responder, initiator, configurator=None, enrollee=None,
         responder.request("DPP_STOP_LISTEN")
     if stop_initiator:
         initiator.request("DPP_STOP_LISTEN")
+    return res
 
 def wait_conf_completion(configurator, enrollee):
     ev = configurator.wait_event(["DPP-CONF-SENT"], timeout=5)
@@ -4675,3 +4679,94 @@ def run_dpp_controller_rx_errors(dev, apdev):
         except socket.timeout:
             pass
         sock.close()
+
+def test_dpp_conn_status_success(dev, apdev):
+    """DPP connection status - success"""
+    try:
+        run_dpp_conn_status(dev, apdev)
+    finally:
+        dev[0].set("dpp_config_processing", "0")
+
+def test_dpp_conn_status_wrong_passphrase(dev, apdev):
+    """DPP connection status - wrong passphrase"""
+    try:
+        run_dpp_conn_status(dev, apdev, result=2)
+    finally:
+        dev[0].set("dpp_config_processing", "0")
+
+def test_dpp_conn_status_no_ap(dev, apdev):
+    """DPP connection status - no AP"""
+    try:
+        run_dpp_conn_status(dev, apdev, result=10)
+    finally:
+        dev[0].set("dpp_config_processing", "0")
+
+def test_dpp_conn_status_connector_mismatch(dev, apdev):
+    """DPP connection status - invalid Connector"""
+    try:
+        run_dpp_conn_status(dev, apdev, result=8)
+    finally:
+        dev[0].set("dpp_config_processing", "0")
+
+def run_dpp_conn_status(dev, apdev, result=0):
+    check_dpp_capab(dev[0], min_ver=2)
+    check_dpp_capab(dev[1], min_ver=2)
+
+    if result != 10:
+        if result == 7 or result == 8:
+            params = {"ssid": "dpp-status",
+                      "wpa": "2",
+                      "wpa_key_mgmt": "DPP",
+                      "ieee80211w": "2",
+                      "rsn_pairwise": "CCMP",
+                      "dpp_connector": params1_ap_connector,
+                      "dpp_csign": params1_csign,
+                      "dpp_netaccesskey": params1_ap_netaccesskey}
+        else:
+            if result == 2:
+                passphrase = "wrong passphrase"
+            else:
+                passphrase = "secret passphrase"
+            params = hostapd.wpa2_params(ssid="dpp-status",
+                                         passphrase=passphrase)
+        try:
+            hapd = hostapd.add_ap(apdev[0], params)
+        except:
+            raise HwsimSkip("DPP not supported")
+
+    dev[0].request("SET sae_groups ")
+    dev[0].set("dpp_config_processing", "2")
+    id0 = dev[0].dpp_bootstrap_gen(chan="81/1", mac=True)
+    uri0 = dev[0].request("DPP_BOOTSTRAP_GET_URI %d" % id0)
+
+    dev[0].dpp_listen(2412)
+    if result == 7 or result == 8:
+        conf = 'sta-dpp'
+        passphrase = None
+        configurator = dev[1].dpp_configurator_add()
+    else:
+        conf = 'sta-psk'
+        passphrase = "secret passphrase"
+        configurator = None
+    dev[1].dpp_auth_init(uri=uri0, conf=conf, ssid="dpp-status",
+                         passphrase=passphrase, configurator=configurator,
+                         conn_status=True)
+    res = wait_auth_success(dev[0], dev[1], configurator=dev[1],
+                            enrollee=dev[0])
+    if 'wait_conn_status' not in res:
+        raise Exception("Configurator did not request connection status")
+
+    ev = dev[1].wait_event(["DPP-CONN-STATUS-RESULT"], timeout=20)
+    if ev is None:
+        raise Exception("No connection status reported")
+    if "timeout" in ev:
+        raise Exception("Connection status result timeout")
+    if "result=%d" % result not in ev:
+        raise Exception("Unexpected connection status result: " + ev)
+    if "ssid=dpp-status" not in ev:
+        raise Exception("SSID not reported")
+
+    if result == 0:
+        dev[0].wait_connected()
+    if result == 10 and "channel_list=" not in ev:
+        raise Exception("Channel list not reported for no-AP")
index 8972ac12b836e740e679ff437d3512f160bc1c67..5549b7be444191b78c2601c20d9b21fdcd8b18be 100644 (file)
@@ -1458,7 +1458,7 @@ class WpaSupplicant:
     def dpp_auth_init(self, peer=None, uri=None, conf=None, configurator=None,
                       extra=None, own=None, role=None, neg_freq=None,
                       ssid=None, passphrase=None, expect_fail=False,
-                      tcp_addr=None, tcp_port=None):
+                      tcp_addr=None, tcp_port=None, conn_status=False):
         cmd = "DPP_AUTH_INIT"
         if peer is None:
             peer = self.dpp_qr_code(uri)
@@ -1483,6 +1483,8 @@ class WpaSupplicant:
             cmd += " tcp_addr=" + tcp_addr
         if tcp_port:
             cmd += " tcp_port=" + tcp_port
+        if conn_status:
+            cmd += " conn_status=1"
         res = self.request(cmd)
         if expect_fail:
             if "FAIL" not in res: