tests: DPP reconfiguration exchange
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
7f20a3ebda
commit
217656d098
1 changed files with 164 additions and 6 deletions
|
@ -4642,8 +4642,8 @@ def test_dpp_controller_relay_chirp(dev, apdev, params):
|
|||
dev[1].request("DPP_CONTROLLER_STOP")
|
||||
|
||||
def run_dpp_controller_relay(dev, apdev, params, chirp=False):
|
||||
check_dpp_capab(dev[0])
|
||||
check_dpp_capab(dev[1])
|
||||
check_dpp_capab(dev[0], min_ver=2)
|
||||
check_dpp_capab(dev[1], min_ver=2)
|
||||
prefix = "dpp_controller_relay"
|
||||
if chirp:
|
||||
prefix += "_chirp"
|
||||
|
@ -4653,9 +4653,8 @@ def run_dpp_controller_relay(dev, apdev, params, chirp=False):
|
|||
|
||||
# Controller
|
||||
conf_id = dev[1].dpp_configurator_add()
|
||||
if not chirp:
|
||||
dev[1].set("dpp_configurator_params",
|
||||
" conf=sta-dpp configurator=%d" % conf_id)
|
||||
dev[1].set("dpp_configurator_params",
|
||||
"conf=sta-dpp configurator=%d" % conf_id)
|
||||
id_c = dev[1].dpp_bootstrap_gen()
|
||||
uri_c = dev[1].request("DPP_BOOTSTRAP_GET_URI %d" % id_c)
|
||||
res = dev[1].request("DPP_BOOTSTRAP_INFO %d" % id_c)
|
||||
|
@ -4711,6 +4710,24 @@ def run_dpp_controller_relay(dev, apdev, params, chirp=False):
|
|||
wait_auth_success(dev[1], dev[0], configurator=dev[1], enrollee=dev[0],
|
||||
allow_enrollee_failure=True,
|
||||
allow_configurator_failure=True)
|
||||
ev = dev[0].wait_event(["DPP-NETWORK-ID"], timeout=1)
|
||||
if ev is None:
|
||||
raise Exception("DPP network id not reported")
|
||||
network = int(ev.split(' ')[1])
|
||||
dev[0].wait_connected()
|
||||
dev[0].dump_monitor()
|
||||
dev[0].request("DISCONNECT")
|
||||
dev[0].wait_disconnected()
|
||||
dev[0].dump_monitor()
|
||||
|
||||
if "OK" not in dev[0].request("DPP_RECONFIG %s" % network):
|
||||
raise Exception("Failed to start reconfiguration")
|
||||
ev = dev[0].wait_event(["DPP-NETWORK-ID"], timeout=15)
|
||||
if ev is None:
|
||||
raise Exception("DPP network id not reported for reconfiguration")
|
||||
network2 = int(ev.split(' ')[1])
|
||||
if network == network2:
|
||||
raise Exception("Network ID did not change")
|
||||
dev[0].wait_connected()
|
||||
|
||||
time.sleep(0.5)
|
||||
|
@ -5335,6 +5352,7 @@ def run_dpp_reconfig_connector(dev, apdev):
|
|||
|
||||
ssid = "reconfig"
|
||||
passphrase = "secret passphrase"
|
||||
passphrase2 = "another secret passphrase"
|
||||
params = hostapd.wpa2_params(ssid=ssid, passphrase=passphrase)
|
||||
hapd = hostapd.add_ap(apdev[0], params)
|
||||
|
||||
|
@ -5345,9 +5363,16 @@ def run_dpp_reconfig_connector(dev, apdev):
|
|||
configurator = dev[1].dpp_configurator_add()
|
||||
conf = 'sta-psk'
|
||||
dev[1].dpp_auth_init(uri=uri0, conf=conf, ssid=ssid,
|
||||
passphrase=passphrase, configurator=configurator)
|
||||
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")
|
||||
dev[1].dump_monitor()
|
||||
|
||||
ev = dev[0].wait_event(["DPP-CONFOBJ-SSID"], timeout=1)
|
||||
if ev is None:
|
||||
|
@ -5395,6 +5420,139 @@ def run_dpp_reconfig_connector(dev, apdev):
|
|||
raise Exception("net_access_key mismatch: %s %s" % (n_net_access_key,
|
||||
net_access_key))
|
||||
|
||||
dev[0].request("DISCONNECT")
|
||||
dev[0].wait_disconnected()
|
||||
|
||||
hapd.disable()
|
||||
hapd.set("wpa_passphrase", passphrase2)
|
||||
hapd.enable()
|
||||
|
||||
time.sleep(0.1)
|
||||
dev[0].dump_monitor()
|
||||
dev[1].dump_monitor()
|
||||
|
||||
dev[1].set("dpp_configurator_params",
|
||||
"conf=sta-psk ssid=%s pass=%s conn_status=1" % (binascii.hexlify(ssid.encode()).decode(), binascii.hexlify(passphrase2.encode()).decode()))
|
||||
dev[1].dpp_listen(2437)
|
||||
|
||||
if "OK" not in dev[0].request("DPP_RECONFIG %s" % id):
|
||||
raise Exception("Failed to start reconfiguration")
|
||||
ev = dev[0].wait_event(["DPP-TX "], timeout=10)
|
||||
if ev is None or "type=14" not in ev:
|
||||
raise Exception("Reconfig Announcement not sent")
|
||||
|
||||
ev = dev[1].wait_event(["DPP-RX"], timeout=5)
|
||||
if ev is None:
|
||||
raise Exception("DPP Reconfig Announcement not received")
|
||||
if "freq=2437 type=14" not in ev:
|
||||
raise Exception("Unexpected RX data for Reconfig Announcement: " + ev)
|
||||
|
||||
ev = dev[0].wait_event(["DPP-RX"], timeout=5)
|
||||
if ev is None or "freq=2437 type=15" not in ev:
|
||||
raise Exception("DPP Reconfig Authentication Request not received")
|
||||
|
||||
ev = dev[1].wait_event(["DPP-RX"], timeout=5)
|
||||
if ev is None or "freq=2437 type=16" not in ev:
|
||||
raise Exception("DPP Reconfig Authentication Response not received")
|
||||
|
||||
ev = dev[0].wait_event(["DPP-RX"], timeout=5)
|
||||
if ev is None or "freq=2437 type=17" not in ev:
|
||||
raise Exception("DPP Reconfig Authentication Confirm not received")
|
||||
|
||||
ev = dev[0].wait_event(["GAS-QUERY-START"], timeout=5)
|
||||
if ev is None or "freq=2437" not in ev:
|
||||
raise Exception("DPP Config Request (GAS) not transmitted")
|
||||
|
||||
ev = dev[1].wait_event(["DPP-CONF-REQ-RX"], timeout=5)
|
||||
if ev is None:
|
||||
raise Exception("DPP Config Request (GAS) not received")
|
||||
|
||||
ev = dev[0].wait_event(["GAS-QUERY-DONE"], timeout=5)
|
||||
if ev is None or "freq=2437" not in ev:
|
||||
raise Exception("DPP Config Response (GAS) not received")
|
||||
|
||||
ev = dev[1].wait_event(["DPP-RX"], timeout=5)
|
||||
if ev is None or "freq=2437 type=11" not in ev:
|
||||
raise Exception("DPP Config Result not received")
|
||||
|
||||
ev = dev[1].wait_event(["DPP-CONF-SENT"], timeout=5)
|
||||
if ev is None:
|
||||
raise Exception("DPP Config Response (GAS) not transmitted")
|
||||
|
||||
ev = dev[0].wait_event(["DPP-CONF-RECEIVED", "DPP-CONF-FAILED"], timeout=5)
|
||||
if ev is None:
|
||||
raise Exception("DPP config response reception result not indicated")
|
||||
if "DPP-CONF-RECEIVED" not in ev:
|
||||
raise Exception("Reconfiguration failed")
|
||||
|
||||
dev[0].wait_connected()
|
||||
|
||||
ev = dev[1].wait_event(["DPP-CONN-STATUS-RESULT"], timeout=20)
|
||||
if ev is None:
|
||||
raise Exception("No connection status reported")
|
||||
|
||||
def test_dpp_reconfig_hostapd_configurator(dev, apdev):
|
||||
"""DPP reconfiguration with hostapd as configurator"""
|
||||
try:
|
||||
run_dpp_reconfig_hostapd_configurator(dev, apdev)
|
||||
finally:
|
||||
dev[0].set("dpp_config_processing", "0", allow_fail=True)
|
||||
|
||||
def run_dpp_reconfig_hostapd_configurator(dev, apdev):
|
||||
ssid = "reconfig-ap"
|
||||
check_dpp_capab(dev[0], min_ver=2)
|
||||
hapd = hostapd.add_ap(apdev[0], {"ssid": "unconfigured"})
|
||||
check_dpp_capab(hapd, min_ver=2)
|
||||
conf_id = hapd.dpp_configurator_add()
|
||||
|
||||
cmd = "DPP_CONFIGURATOR_SIGN conf=ap-dpp configurator=%d ssid=%s" % (conf_id, binascii.hexlify(ssid.encode()).decode())
|
||||
res = hapd.request(cmd)
|
||||
if "FAIL" in res:
|
||||
raise Exception("Failed to generate own configuration")
|
||||
hapd.set("dpp_configurator_connectivity", "1")
|
||||
update_hapd_config(hapd)
|
||||
|
||||
id = dev[0].dpp_bootstrap_gen(chan="81/1", mac=True)
|
||||
uri = dev[0].request("DPP_BOOTSTRAP_GET_URI %d" % id)
|
||||
dev[0].set("dpp_config_processing", "2")
|
||||
dev[0].dpp_listen(2412)
|
||||
hapd.dpp_auth_init(uri=uri, conf="sta-dpp", configurator=conf_id,
|
||||
extra="expiry=%d" % (time.time() + 10), ssid=ssid)
|
||||
wait_auth_success(dev[0], hapd, configurator=hapd, enrollee=dev[0])
|
||||
ev = dev[0].wait_event(["DPP-NETWORK-ID"], timeout=1)
|
||||
if ev is None:
|
||||
raise Exception("DPP network id not reported")
|
||||
network = int(ev.split(' ')[1])
|
||||
dev[0].wait_connected()
|
||||
dev[0].request("DISCONNECT")
|
||||
dev[0].wait_disconnected()
|
||||
dev[0].dump_monitor()
|
||||
time.sleep(10)
|
||||
if "FAIL" in dev[0].request("PMKSA_FLUSH"):
|
||||
raise Exception("PMKSA_FLUSH failed")
|
||||
dev[0].request("RECONNECT")
|
||||
ev = dev[0].wait_event(["DPP-MISSING-CONNECTOR", "CTRL-EVENT-CONNECTED"],
|
||||
timeout=15)
|
||||
if ev is None or "DPP-MISSING-CONNECTOR" not in ev:
|
||||
raise Exception("Missing Connector not reported")
|
||||
if "netAccessKey expired" not in ev:
|
||||
raise Exception("netAccessKey expiry not indicated")
|
||||
dev[0].request("DISCONNECT")
|
||||
dev[0].dump_monitor()
|
||||
|
||||
hapd.set("dpp_configurator_params",
|
||||
"conf=sta-dpp configurator=%d ssid=%s" % (conf_id, binascii.hexlify(ssid.encode()).decode()))
|
||||
|
||||
if "OK" not in dev[0].request("DPP_RECONFIG %s" % network):
|
||||
raise Exception("Failed to start reconfiguration")
|
||||
ev = dev[0].wait_event(["DPP-NETWORK-ID"], timeout=15)
|
||||
if ev is None:
|
||||
raise Exception("DPP network id not reported for reconfiguration")
|
||||
network2 = int(ev.split(' ')[1])
|
||||
if network == network2:
|
||||
raise Exception("Network ID did not change")
|
||||
dev[0].wait_connected()
|
||||
|
||||
def test_dpp_qr_code_auth_rand_mac_addr(dev, apdev):
|
||||
"""DPP QR Code and authentication exchange (rand_mac_addr=1)"""
|
||||
flags = int(dev[0].get_driver_status_field('capa.flags'), 16)
|
||||
|
|
Loading…
Reference in a new issue