1# wpa_supplicant AP mode tests 2# Copyright (c) 2014, Qualcomm Atheros, Inc. 3# 4# This software may be distributed under the terms of the BSD license. 5# See README for more details. 6 7import hostapd 8from remotehost import remote_compatible 9import time 10import logging 11logger = logging.getLogger() 12 13import hwsim_utils 14from utils import * 15from wpasupplicant import WpaSupplicant 16from test_p2p_channel import set_country 17from test_ap_psk import find_wpas_process, read_process_memory, verify_not_present, get_key_locations 18 19def wait_ap_ready(dev): 20 ev = dev.wait_event(["CTRL-EVENT-CONNECTED"]) 21 if ev is None: 22 raise Exception("AP failed to start") 23 24def set_regdom(dev, country): 25 dev.set("country", country) 26 for i in range(5): 27 ev = dev.wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=5) 28 if not ev: 29 return 30 if "alpha2=" + country in ev: 31 return 32 logger.info("No regdom change event indicated") 33 34def log_channel_info(dev): 35 gen = dev.get_status_field('wifi_generation') 36 if gen: 37 logger.info("Wi-Fi Generation: " + gen) 38 sig = dev.request("SIGNAL_POLL").splitlines() 39 logger.info(sig) 40 41def test_wpas_ap_open(dev): 42 """wpa_supplicant AP mode - open network""" 43 if "FAIL" not in dev[0].request("DEAUTHENTICATE 00:11:22:33:44:55"): 44 raise Exception("Unexpected DEAUTHENTICATE accepted") 45 if "FAIL" not in dev[0].request("DISASSOCIATE 00:11:22:33:44:55"): 46 raise Exception("Unexpected DISASSOCIATE accepted") 47 if "FAIL" not in dev[0].request("CHAN_SWITCH 0 2432"): 48 raise Exception("Unexpected CHAN_SWITCH accepted") 49 50 id = dev[0].add_network() 51 dev[0].set_network(id, "mode", "2") 52 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 53 dev[0].set_network(id, "key_mgmt", "NONE") 54 dev[0].set_network(id, "frequency", "2412") 55 dev[0].set_network(id, "scan_freq", "2412") 56 dev[0].select_network(id) 57 wait_ap_ready(dev[0]) 58 59 if "FAIL" not in dev[0].request("DEAUTHENTICATE foo"): 60 raise Exception("Invalid DEAUTHENTICATE accepted") 61 if "FAIL" not in dev[0].request("DISASSOCIATE foo"): 62 raise Exception("Invalid DISASSOCIATE accepted") 63 64 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 65 dev[2].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 66 hwsim_utils.test_connectivity(dev[0], dev[1]) 67 hwsim_utils.test_connectivity(dev[1], dev[2]) 68 69 addr1 = dev[1].p2p_interface_addr() 70 addr2 = dev[2].p2p_interface_addr() 71 addrs = [addr1, addr2] 72 sta = dev[0].get_sta(None) 73 if sta['addr'] not in addrs: 74 raise Exception("Unexpected STA address") 75 sta1 = dev[0].get_sta(sta['addr']) 76 if sta1['addr'] not in addrs: 77 raise Exception("Unexpected STA address") 78 sta2 = dev[0].get_sta(sta['addr'], next=True) 79 if sta2['addr'] not in addrs: 80 raise Exception("Unexpected STA2 address") 81 sta3 = dev[0].get_sta(sta2['addr'], next=True) 82 if len(sta3) != 0: 83 raise Exception("Unexpected STA iteration result (did not stop)") 84 85 status = dev[0].get_status() 86 if status['mode'] != "AP": 87 raise Exception("Unexpected status mode") 88 89 dev[1].dump_monitor() 90 dev[2].dump_monitor() 91 dev[0].request("DEAUTHENTICATE " + addr1) 92 dev[0].request("DISASSOCIATE " + addr2) 93 dev[1].wait_disconnected(timeout=10) 94 dev[2].wait_disconnected(timeout=10) 95 dev[1].wait_connected(timeout=10, error="Reconnection timed out") 96 dev[2].wait_connected(timeout=10, error="Reconnection timed out") 97 dev[1].request("DISCONNECT") 98 dev[2].request("DISCONNECT") 99 100def test_wpas_ap_open_isolate(dev): 101 """wpa_supplicant AP mode - open network with client isolation""" 102 try: 103 dev[0].set("ap_isolate", "1") 104 id = dev[0].add_network() 105 dev[0].set_network(id, "mode", "2") 106 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 107 dev[0].set_network(id, "key_mgmt", "NONE") 108 dev[0].set_network(id, "frequency", "2412") 109 dev[0].set_network(id, "scan_freq", "2412") 110 dev[0].select_network(id) 111 wait_ap_ready(dev[0]) 112 113 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 114 dev[2].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 115 hwsim_utils.test_connectivity(dev[0], dev[1]) 116 hwsim_utils.test_connectivity(dev[0], dev[2]) 117 hwsim_utils.test_connectivity(dev[1], dev[2], success_expected=False, 118 timeout=1) 119 finally: 120 dev[0].set("ap_isolate", "0") 121 122@remote_compatible 123def test_wpas_ap_wep(dev): 124 """wpa_supplicant AP mode - WEP""" 125 check_wep_capa(dev[0]) 126 id = dev[0].add_network() 127 dev[0].set_network(id, "mode", "2") 128 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wep") 129 dev[0].set_network(id, "key_mgmt", "NONE") 130 dev[0].set_network(id, "frequency", "2412") 131 dev[0].set_network(id, "scan_freq", "2412") 132 dev[0].set_network_quoted(id, "wep_key0", "hello") 133 dev[0].select_network(id) 134 wait_ap_ready(dev[0]) 135 136 dev[1].connect("wpas-ap-wep", key_mgmt="NONE", wep_key0='"hello"', 137 scan_freq="2412") 138 hwsim_utils.test_connectivity(dev[0], dev[1]) 139 dev[1].request("DISCONNECT") 140 141@remote_compatible 142def test_wpas_ap_no_ssid(dev): 143 """wpa_supplicant AP mode - invalid network configuration""" 144 id = dev[0].add_network() 145 dev[0].set_network(id, "mode", "2") 146 dev[0].set_network(id, "key_mgmt", "NONE") 147 dev[0].set_network(id, "frequency", "2412") 148 dev[0].set_network(id, "scan_freq", "2412") 149 dev[0].select_network(id) 150 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1) 151 if ev is not None: 152 raise Exception("Unexpected AP start") 153 154@remote_compatible 155def test_wpas_ap_default_frequency(dev): 156 """wpa_supplicant AP mode - default frequency""" 157 id = dev[0].add_network() 158 dev[0].set_network(id, "mode", "2") 159 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 160 dev[0].set_network(id, "key_mgmt", "NONE") 161 dev[0].set_network(id, "scan_freq", "2412") 162 dev[0].select_network(id) 163 wait_ap_ready(dev[0]) 164 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2462") 165 dev[1].request("DISCONNECT") 166 167@remote_compatible 168def test_wpas_ap_invalid_frequency(dev): 169 """wpa_supplicant AP mode - invalid frequency configuration""" 170 id = dev[0].add_network() 171 dev[0].set_network(id, "mode", "2") 172 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 173 dev[0].set_network(id, "key_mgmt", "NONE") 174 dev[0].set_network(id, "frequency", "2413") 175 dev[0].set_network(id, "scan_freq", "2412") 176 dev[0].select_network(id) 177 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1) 178 if ev is not None: 179 raise Exception("Unexpected AP start") 180 181def test_wpas_ap_wps(dev): 182 """wpa_supplicant AP mode - WPS operations""" 183 id = dev[0].add_network() 184 dev[0].set_network(id, "mode", "2") 185 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps") 186 dev[0].set_network_quoted(id, "psk", "1234567890") 187 dev[0].set_network(id, "frequency", "2412") 188 dev[0].set_network(id, "scan_freq", "2412") 189 dev[0].select_network(id) 190 wait_ap_ready(dev[0]) 191 bssid = dev[0].p2p_interface_addr() 192 193 logger.info("Test PBC mode start/stop") 194 if "FAIL" not in dev[0].request("WPS_CANCEL"): 195 raise Exception("Unexpected WPS_CANCEL success") 196 dev[0].request("WPS_PBC") 197 ev = dev[0].wait_event(["WPS-PBC-ACTIVE"]) 198 if ev is None: 199 raise Exception("PBC mode start timeout") 200 if "OK" not in dev[0].request("WPS_CANCEL"): 201 raise Exception("Unexpected WPS_CANCEL failure") 202 ev = dev[0].wait_event(["WPS-TIMEOUT"]) 203 if ev is None: 204 raise Exception("PBC mode disabling timeout") 205 206 logger.info("Test PBC protocol run") 207 dev[0].request("WPS_PBC") 208 ev = dev[0].wait_event(["WPS-PBC-ACTIVE"]) 209 if ev is None: 210 raise Exception("PBC mode start timeout") 211 dev[1].request("WPS_PBC") 212 dev[1].wait_connected(timeout=30, error="WPS PBC operation timed out") 213 dev[0].wait_sta(addr=dev[1].own_addr()) 214 hwsim_utils.test_connectivity(dev[0], dev[1]) 215 216 logger.info("Test AP PIN to learn configuration") 217 pin = dev[0].request("WPS_AP_PIN random") 218 if "FAIL" in pin: 219 raise Exception("Could not generate random AP PIN") 220 if pin not in dev[0].request("WPS_AP_PIN get"): 221 raise Exception("Could not fetch current AP PIN") 222 dev[2].wps_reg(bssid, pin) 223 dev[0].wait_sta(addr=dev[2].own_addr()) 224 hwsim_utils.test_connectivity(dev[1], dev[2]) 225 226 dev[1].request("REMOVE_NETWORK all") 227 dev[2].request("REMOVE_NETWORK all") 228 dev[0].wait_sta_disconnect() 229 dev[0].wait_sta_disconnect() 230 231 logger.info("Test AP PIN operations") 232 dev[0].request("WPS_AP_PIN disable") 233 dev[0].request("WPS_AP_PIN set " + pin + " 1") 234 time.sleep(1.1) 235 if "FAIL" not in dev[0].request("WPS_AP_PIN get"): 236 raise Exception("AP PIN unexpectedly still enabled") 237 238 pin = dev[1].wps_read_pin() 239 dev[0].request("WPS_PIN any " + pin) 240 dev[1].request("WPS_PIN any " + pin) 241 dev[1].wait_connected(timeout=30) 242 dev[0].wait_sta(addr=dev[1].own_addr()) 243 dev[1].request("REMOVE_NETWORK all") 244 dev[1].wait_disconnected() 245 dev[0].wait_sta_disconnect(addr=dev[1].own_addr()) 246 dev[1].dump_monitor() 247 248 dev[0].request("WPS_PIN any " + pin + " 100") 249 dev[1].request("WPS_PIN any " + pin) 250 dev[1].wait_connected(timeout=30) 251 dev[0].wait_sta(addr=dev[1].own_addr()) 252 dev[1].request("REMOVE_NETWORK all") 253 dev[1].wait_disconnected() 254 dev[0].wait_sta_disconnect(addr=dev[1].own_addr()) 255 dev[1].dump_monitor() 256 257 dev[0].request("WPS_AP_PIN set 12345670") 258 dev[0].dump_monitor() 259 260 runs = ("88887777", "12340000", "00000000", "12345670") 261 for pin in runs: 262 logger.info("Try AP PIN " + pin) 263 dev[2].dump_monitor() 264 dev[2].request("WPS_REG " + bssid + " " + pin) 265 ev = dev[2].wait_event(["WPS-SUCCESS", "WPS-FAIL msg"], timeout=15) 266 if ev is None: 267 raise Exception("WPS operation timed out") 268 if "WPS-SUCCESS" in ev: 269 raise Exception("WPS operation succeeded unexpectedly") 270 dev[2].wait_disconnected(timeout=10) 271 dev[2].request("WPS_CANCEL") 272 dev[2].request("REMOVE_NETWORK all") 273 ev = dev[0].wait_event(["WPS-AP-SETUP-LOCKED"]) 274 if ev is None: 275 raise Exception("WPS AP PIN not locked") 276 277 dev[0].dump_monitor() 278 logger.info("Test random AP PIN timeout") 279 pin = dev[0].request("WPS_AP_PIN random 1") 280 if "FAIL" in pin: 281 raise Exception("Could not generate random AP PIN") 282 res = dev[0].request("WPS_AP_PIN get") 283 if pin not in res: 284 raise Exception("Could not fetch current AP PIN") 285 for i in range(10): 286 time.sleep(0.2) 287 res = dev[0].request("WPS_AP_PIN get") 288 if "FAIL" in res: 289 break 290 if "FAIL" not in res: 291 raise Exception("WPS_AP_PIN random timeout did not work") 292 293 if "FAIL" not in dev[0].request("WPS_AP_PIN foo"): 294 raise Exception("Invalid WPS_AP_PIN command not rejected") 295 if "FAIL" not in dev[0].request("WPS_AP_PIN set"): 296 raise Exception("Invalid WPS_AP_PIN command not rejected") 297 298def test_wpas_ap_wps_frag(dev): 299 """wpa_supplicant AP mode - WPS operations with fragmentation""" 300 id = dev[0].add_network() 301 dev[0].set_network(id, "mode", "2") 302 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps") 303 dev[0].set_network_quoted(id, "psk", "1234567890") 304 dev[0].set_network(id, "frequency", "2412") 305 dev[0].set_network(id, "scan_freq", "2412") 306 dev[0].set_network(id, "fragment_size", "300") 307 dev[0].select_network(id) 308 wait_ap_ready(dev[0]) 309 bssid = dev[0].own_addr() 310 311 pin = dev[1].wps_read_pin() 312 dev[0].request("WPS_PIN any " + pin) 313 dev[1].scan_for_bss(bssid, freq="2412") 314 dev[1].request("WPS_PIN " + bssid + " " + pin) 315 dev[1].wait_connected(timeout=30) 316 317def test_wpas_ap_wps_pbc_overlap(dev): 318 """wpa_supplicant AP mode - WPS operations with PBC overlap""" 319 id = dev[0].add_network() 320 dev[0].set_network(id, "mode", "2") 321 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps") 322 dev[0].set_network_quoted(id, "psk", "1234567890") 323 dev[0].set_network(id, "frequency", "2412") 324 dev[0].set_network(id, "scan_freq", "2412") 325 dev[0].select_network(id) 326 wait_ap_ready(dev[0]) 327 bssid = dev[0].p2p_interface_addr() 328 329 dev[1].scan_for_bss(bssid, freq="2412") 330 dev[1].dump_monitor() 331 dev[2].scan_for_bss(bssid, freq="2412") 332 dev[2].dump_monitor() 333 dev[0].request("WPS_PBC") 334 dev[1].request("WPS_PBC " + bssid) 335 dev[2].request("WPS_PBC " + bssid) 336 337 ev = dev[1].wait_event(["WPS-M2D"], timeout=15) 338 if ev is None: 339 raise Exception("PBC session overlap not detected (dev1)") 340 if "config_error=12" not in ev: 341 raise Exception("PBC session overlap not correctly reported (dev1)") 342 343 ev = dev[2].wait_event(["WPS-M2D"], timeout=15) 344 if ev is None: 345 raise Exception("PBC session overlap not detected (dev2)") 346 if "config_error=12" not in ev: 347 raise Exception("PBC session overlap not correctly reported (dev2)") 348 349 if "FAIL-PBC-OVERLAP" not in dev[0].request("WPS_PBC"): 350 raise Exception("WPS_PBC(AP) accepted during overlap") 351 if "FAIL-PBC-OVERLAP" not in dev[0].request("WPS_PBC any"): 352 raise Exception("WPS_PBC(AP) accepted during overlap") 353 dev[0].request("WPS_CANCEL") 354 dev[1].request("WPS_CANCEL") 355 dev[2].request("WPS_CANCEL") 356 357@remote_compatible 358def test_wpas_ap_wps_disabled(dev): 359 """wpa_supplicant AP mode - WPS disabled""" 360 id = dev[0].add_network() 361 dev[0].set_network(id, "mode", "2") 362 dev[0].set_network_quoted(id, "ssid", "wpas-ap-no-wps") 363 dev[0].set_network_quoted(id, "psk", "12345678") 364 dev[0].set_network(id, "frequency", "2412") 365 dev[0].set_network(id, "scan_freq", "2412") 366 dev[0].set_network(id, "wps_disabled", "1") 367 dev[0].select_network(id) 368 wait_ap_ready(dev[0]) 369 370 dev[1].connect("wpas-ap-no-wps", psk="12345678", scan_freq="2412") 371 dev[1].request("DISCONNECT") 372 dev[1].wait_disconnected() 373 374def test_wpas_ap_dfs(dev): 375 """wpa_supplicant AP mode - DFS""" 376 if dev[0].get_mcc() > 1: 377 raise HwsimSkip("DFS is not supported with multi channel contexts") 378 379 try: 380 _test_wpas_ap_dfs(dev) 381 finally: 382 set_country("00") 383 dev[0].request("SET country 00") 384 dev[1].flush_scan_cache() 385 386def _test_wpas_ap_dfs(dev): 387 set_country("US") 388 dev[0].request("SET country US") 389 id = dev[0].add_network() 390 dev[0].set_network(id, "mode", "2") 391 dev[0].set_network_quoted(id, "ssid", "wpas-ap-dfs") 392 dev[0].set_network(id, "key_mgmt", "NONE") 393 dev[0].set_network(id, "frequency", "5260") 394 dev[0].set_network(id, "scan_freq", "5260") 395 dev[0].select_network(id) 396 397 ev = dev[0].wait_event(["DFS-CAC-START"]) 398 if ev is None: 399 # For now, assume DFS is not supported by all kernel builds. 400 raise HwsimSkip("CAC did not start - assume not supported") 401 402 ev = dev[0].wait_event(["DFS-CAC-COMPLETED"], timeout=70) 403 if ev is None: 404 raise Exception("CAC did not complete") 405 if "success=1" not in ev: 406 raise Exception("CAC failed") 407 if "freq=5260" not in ev: 408 raise Exception("Unexpected DFS freq result") 409 410 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"]) 411 if ev is None: 412 raise Exception("AP failed to start") 413 414 dev[1].connect("wpas-ap-dfs", key_mgmt="NONE", timeout=30) 415 dev[1].wait_regdom(country_ie=True) 416 dev[0].request("DISCONNECT") 417 dev[1].disconnect_and_stop_scan() 418 419@remote_compatible 420def test_wpas_ap_disable(dev): 421 """wpa_supplicant AP mode - DISABLE_NETWORK""" 422 id = dev[0].add_network() 423 dev[0].set_network(id, "mode", "2") 424 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 425 dev[0].set_network(id, "key_mgmt", "NONE") 426 dev[0].set_network(id, "scan_freq", "2412") 427 dev[0].select_network(id) 428 429 ev = dev[0].wait_event(["AP-ENABLED"]) 430 if ev is None: 431 raise Exception("AP-ENABLED event not seen") 432 wait_ap_ready(dev[0]) 433 dev[0].request("DISABLE_NETWORK %d" % id) 434 ev = dev[0].wait_event(["AP-DISABLED"]) 435 if ev is None: 436 raise Exception("AP-DISABLED event not seen") 437 dev[0].wait_disconnected() 438 439def test_wpas_ap_acs(dev): 440 """wpa_supplicant AP mode - ACS""" 441 res = dev[0].get_capability("acs") 442 if res is None or "ACS" not in res: 443 raise HwsimSkip("ACS not supported") 444 445 # For now, make sure the last operating channel was on 2.4 GHz band to get 446 # sufficient survey data from mac80211_hwsim. 447 id = dev[0].add_network() 448 dev[0].set_network(id, "mode", "2") 449 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 450 dev[0].set_network(id, "key_mgmt", "NONE") 451 dev[0].set_network(id, "frequency", "2412") 452 dev[0].set_network(id, "scan_freq", "2412") 453 dev[0].select_network(id) 454 wait_ap_ready(dev[0]) 455 dev[0].request("REMOVE_NETWORK all") 456 dev[0].wait_disconnected() 457 458 id = dev[0].add_network() 459 dev[0].set_network(id, "mode", "2") 460 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 461 dev[0].set_network(id, "key_mgmt", "NONE") 462 dev[0].set_network(id, "frequency", "2417") 463 dev[0].set_network(id, "scan_freq", "2417") 464 dev[0].set_network(id, "acs", "1") 465 dev[0].select_network(id) 466 wait_ap_ready(dev[0]) 467 468 # ACS prefers channels 1, 6, 11 469 freq = dev[0].get_status_field('freq') 470 if freq == "2417": 471 raise Exception("Unexpected operating channel selected") 472 473 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq=freq) 474 475@remote_compatible 476def test_wpas_ap_and_assoc_req_p2p_ie(dev): 477 """wpa_supplicant AP mode - unexpected P2P IE in Association Request""" 478 try: 479 _test_wpas_ap_and_assoc_req_p2p_ie(dev) 480 finally: 481 dev[1].request("VENDOR_ELEM_REMOVE 13 *") 482 dev[0].request("P2P_SET disabled 0") 483 484def _test_wpas_ap_and_assoc_req_p2p_ie(dev): 485 dev[0].request("P2P_SET disabled 1") 486 id = dev[0].add_network() 487 dev[0].set_network(id, "mode", "2") 488 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 489 dev[0].set_network(id, "key_mgmt", "NONE") 490 dev[0].set_network(id, "frequency", "2412") 491 dev[0].set_network(id, "scan_freq", "2412") 492 dev[0].select_network(id) 493 wait_ap_ready(dev[0]) 494 495 dev[1].request("VENDOR_ELEM_ADD 13 dd04506f9a09") 496 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 497 dev[1].request("DISCONNECT") 498 dev[1].wait_disconnected() 499 500 dev[0].request("DISCONNECT") 501 dev[0].wait_disconnected() 502 503@remote_compatible 504def test_wpas_ap_open_ht_disabled(dev): 505 """wpa_supplicant AP mode - open network and HT disabled""" 506 id = dev[0].add_network() 507 dev[0].set_network(id, "mode", "2") 508 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 509 dev[0].set_network(id, "key_mgmt", "NONE") 510 dev[0].set_network(id, "frequency", "2412") 511 dev[0].set_network(id, "scan_freq", "2412") 512 dev[0].set_network(id, "disable_ht", "1") 513 dev[0].select_network(id) 514 wait_ap_ready(dev[0]) 515 516 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 517 hwsim_utils.test_connectivity(dev[0], dev[1]) 518 519def test_wpas_ap_failures(dev): 520 """wpa_supplicant AP mode - failures""" 521 # No SSID configured for AP mode 522 id = dev[0].add_network() 523 dev[0].set_network(id, "mode", "2") 524 dev[0].set_network(id, "key_mgmt", "NONE") 525 dev[0].set_network(id, "frequency", "2412") 526 dev[0].set_network(id, "scan_freq", "2412") 527 dev[0].select_network(id) 528 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=0.1) 529 if ev is not None: 530 raise Exception("Unexpected connection event") 531 dev[0].request("REMOVE_NETWORK all") 532 533 # Invalid pbss value(2) for AP mode 534 dev[0].dump_monitor() 535 id = dev[0].add_network() 536 dev[0].set_network(id, "mode", "2") 537 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 538 dev[0].set_network(id, "key_mgmt", "NONE") 539 dev[0].set_network(id, "frequency", "2412") 540 dev[0].set_network(id, "scan_freq", "2412") 541 dev[0].set_network(id, "pbss", "2") 542 dev[0].select_network(id) 543 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED", 544 "CTRL-EVENT-DISCONNECTED"], timeout=0.1) 545 if ev is not None and "CTRL-EVENT-CONNECTED" in ev: 546 raise Exception("Unexpected connection event(2)") 547 dev[0].request("REMOVE_NETWORK all") 548 549def test_wpas_ap_oom(dev): 550 """wpa_supplicant AP mode - OOM""" 551 id = dev[0].add_network() 552 dev[0].set_network(id, "mode", "2") 553 dev[0].set_network_quoted(id, "ssid", "wpas-ap") 554 dev[0].set_network_quoted(id, "psk", "1234567890") 555 dev[0].set_network(id, "frequency", "2412") 556 dev[0].set_network(id, "scan_freq", "2412") 557 with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"): 558 dev[0].select_network(id) 559 dev[0].wait_disconnected() 560 dev[0].request("REMOVE_NETWORK all") 561 562 id = dev[0].add_network() 563 dev[0].set_network(id, "mode", "2") 564 dev[0].set_network_quoted(id, "ssid", "wpas-ap") 565 dev[0].set_network(id, "psk", "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef") 566 dev[0].set_network(id, "frequency", "2412") 567 dev[0].set_network(id, "scan_freq", "2412") 568 with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"): 569 dev[0].select_network(id) 570 dev[0].wait_disconnected() 571 dev[0].request("REMOVE_NETWORK all") 572 573 if "WEP40" in dev[0].get_capability("group"): 574 id = dev[0].add_network() 575 dev[0].set_network(id, "mode", "2") 576 dev[0].set_network_quoted(id, "ssid", "wpas-ap") 577 dev[0].set_network(id, "key_mgmt", "NONE") 578 dev[0].set_network_quoted(id, "wep_key0", "hello") 579 dev[0].set_network(id, "frequency", "2412") 580 dev[0].set_network(id, "scan_freq", "2412") 581 with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"): 582 dev[0].select_network(id) 583 dev[0].wait_disconnected() 584 dev[0].request("REMOVE_NETWORK all") 585 586 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5') 587 wpas.interface_add("wlan5") 588 wpas.request("SET manufacturer test") 589 wpas.request("SET model_name test") 590 wpas.request("SET model_number test") 591 wpas.request("SET serial_number test") 592 wpas.request("SET serial_number test") 593 wpas.request("SET serial_number test") 594 wpas.request("SET ap_vendor_elements dd0411223301") 595 id = wpas.add_network() 596 wpas.set_network(id, "mode", "2") 597 wpas.set_network_quoted(id, "ssid", "wpas-ap") 598 wpas.set_network(id, "key_mgmt", "NONE") 599 wpas.set_network(id, "frequency", "2412") 600 wpas.set_network(id, "scan_freq", "2412") 601 602 for i in range(5): 603 with alloc_fail(wpas, i, "=wpa_supplicant_conf_ap"): 604 wpas.select_network(id) 605 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED", 606 "CTRL-EVENT-DISCONNECTED"], timeout=1) 607 wpas.request("DISCONNECT") 608 wpas.wait_disconnected() 609 610def test_wpas_ap_params(dev): 611 """wpa_supplicant AP mode - parameters""" 612 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5') 613 wpas.interface_add("wlan5") 614 wpas.request("SET manufacturer test") 615 wpas.request("SET model_name test") 616 wpas.request("SET model_number test") 617 wpas.request("SET serial_number test") 618 wpas.request("SET serial_number test") 619 wpas.request("SET serial_number test") 620 wpas.request("SET ap_vendor_elements dd0411223301") 621 id = wpas.add_network() 622 wpas.set_network(id, "mode", "2") 623 wpas.set_network_quoted(id, "ssid", "wpas-ap") 624 wpas.set_network(id, "key_mgmt", "NONE") 625 wpas.set_network(id, "frequency", "2412") 626 wpas.set_network(id, "scan_freq", "2412") 627 wpas.select_network(id) 628 wpas.wait_connected() 629 wpas.request("DISCONNECT") 630 wpas.wait_disconnected() 631 632 wpas.request("SET beacon_int 200 3") 633 wpas.request("SET dtim_period 3") 634 wpas.select_network(id) 635 wpas.wait_connected() 636 wpas.request("DISCONNECT") 637 wpas.wait_disconnected() 638 639 wpas.set_network(id, "beacon_int", "300") 640 wpas.set_network(id, "dtim_period", "2") 641 wpas.select_network(id) 642 wpas.wait_connected() 643 if "---- AP ----" not in wpas.request("PMKSA"): 644 raise Exception("AP section missing from PMKSA output") 645 if "OK" not in wpas.request("PMKSA_FLUSH"): 646 raise Exception("PMKSA_FLUSH failed") 647 wpas.request("DISCONNECT") 648 wpas.wait_disconnected() 649 650def test_wpas_ap_global_sta(dev): 651 """wpa_supplicant AP mode - STA commands on global control interface""" 652 id = dev[0].add_network() 653 dev[0].set_network(id, "mode", "2") 654 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 655 dev[0].set_network(id, "key_mgmt", "NONE") 656 dev[0].set_network(id, "frequency", "2412") 657 dev[0].set_network(id, "scan_freq", "2412") 658 dev[0].select_network(id) 659 wait_ap_ready(dev[0]) 660 661 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 662 663 addr1 = dev[1].own_addr() 664 res = dev[0].global_request("STA " + addr1) 665 if "UNKNOWN COMMAND" in res: 666 raise Exception("STA command not known on global control interface") 667 res = dev[0].global_request("STA-FIRST") 668 if "UNKNOWN COMMAND" in res: 669 raise Exception("STA-FIRST command not known on global control interface") 670 res = dev[0].global_request("STA-NEXT " + addr1) 671 if "UNKNOWN COMMAND" in res: 672 raise Exception("STA-NEXT command not known on global control interface") 673 dev[1].request("DISCONNECT") 674 dev[1].wait_disconnected() 675 dev[0].request("DISCONNECT") 676 dev[0].wait_disconnected() 677 678def test_wpas_ap_5ghz(dev): 679 """wpa_supplicant AP mode - 5 GHz""" 680 try: 681 _test_wpas_ap_5ghz(dev) 682 finally: 683 set_country("00") 684 dev[0].request("SET country 00") 685 dev[1].flush_scan_cache() 686 687def _test_wpas_ap_5ghz(dev): 688 set_country("US") 689 dev[0].request("SET country US") 690 id = dev[0].add_network() 691 dev[0].set_network(id, "mode", "2") 692 dev[0].set_network_quoted(id, "ssid", "wpas-ap-5ghz") 693 dev[0].set_network(id, "key_mgmt", "NONE") 694 dev[0].set_network(id, "frequency", "5180") 695 dev[0].set_network(id, "scan_freq", "5180") 696 dev[0].select_network(id) 697 wait_ap_ready(dev[0]) 698 699 dev[1].connect("wpas-ap-5ghz", key_mgmt="NONE", scan_freq="5180") 700 log_channel_info(dev[1]) 701 dev[1].request("DISCONNECT") 702 dev[1].wait_disconnected() 703 704def test_wpas_ap_open_ht40(dev): 705 """wpa_supplicant AP mode - HT 40 MHz""" 706 id = dev[0].add_network() 707 set_regdom(dev[0], "FI") 708 try: 709 dev[0].set_network(id, "mode", "2") 710 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 711 dev[0].set_network(id, "key_mgmt", "NONE") 712 dev[0].set_network(id, "frequency", "5180") 713 dev[0].set_network(id, "scan_freq", "5180") 714 dev[0].set_network(id, "ht40", "1") 715 dev[0].select_network(id) 716 wait_ap_ready(dev[0]) 717 718 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="5180") 719 log_channel_info(dev[1]) 720 sig = dev[1].request("SIGNAL_POLL").splitlines() 721 hwsim_utils.test_connectivity(dev[0], dev[1]) 722 dev[1].request("DISCONNECT") 723 dev[1].wait_disconnected() 724 if "FREQUENCY=5180" not in sig: 725 raise Exception("Unexpected SIGNAL_POLL value(1): " + str(sig)) 726 if "WIDTH=40 MHz" not in sig: 727 raise Exception("Unexpected SIGNAL_POLL value(2): " + str(sig)) 728 finally: 729 set_country("00") 730 dev[0].set("country", "00") 731 dev[1].flush_scan_cache() 732 733def test_wpas_ap_open_vht80(dev): 734 """wpa_supplicant AP mode - VHT 80 MHz""" 735 id = dev[0].add_network() 736 set_regdom(dev[0], "FI") 737 try: 738 dev[0].set_network(id, "mode", "2") 739 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 740 dev[0].set_network(id, "key_mgmt", "NONE") 741 dev[0].set_network(id, "frequency", "5180") 742 dev[0].set_network(id, "scan_freq", "5180") 743 dev[0].set_network(id, "vht", "1") 744 dev[0].set_network(id, "vht_center_freq1", "5210") 745 dev[0].set_network(id, "max_oper_chwidth", "1") 746 dev[0].set_network(id, "ht40", "1") 747 dev[0].select_network(id) 748 wait_ap_ready(dev[0]) 749 750 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="5180") 751 log_channel_info(dev[1]) 752 sig = dev[1].request("SIGNAL_POLL").splitlines() 753 hwsim_utils.test_connectivity(dev[0], dev[1]) 754 dev[1].request("DISCONNECT") 755 dev[1].wait_disconnected() 756 if "FREQUENCY=5180" not in sig: 757 raise Exception("Unexpected SIGNAL_POLL value(1): " + str(sig)) 758 if "WIDTH=80 MHz" not in sig: 759 raise Exception("Unexpected SIGNAL_POLL value(2): " + str(sig)) 760 finally: 761 set_country("00") 762 dev[0].set("country", "00") 763 dev[1].flush_scan_cache() 764 765def test_wpas_ap_open_vht80_us(dev): 766 """wpa_supplicant AP mode - VHT 80 MHz (US) channel 149""" 767 run_wpas_ap_open_vht80_us(dev, 5745, 5775, 1) 768 769def test_wpas_ap_open_vht80_us_153(dev): 770 """wpa_supplicant AP mode - VHT 80 MHz (US) channel 153""" 771 run_wpas_ap_open_vht80_us(dev, 5765, 5775, -1) 772 773def test_wpas_ap_open_vht80_us_157(dev): 774 """wpa_supplicant AP mode - VHT 80 MHz (US) channel 157""" 775 run_wpas_ap_open_vht80_us(dev, 5785, 5775, 1) 776 777def test_wpas_ap_open_vht80_us_161(dev): 778 """wpa_supplicant AP mode - VHT 80 MHz (US) channel 161""" 779 run_wpas_ap_open_vht80_us(dev, 5805, 5775, -1) 780 781def run_wpas_ap_open_vht80_us(dev, freq, center_freq, ht40): 782 id = dev[0].add_network() 783 set_regdom(dev[0], "US") 784 try: 785 dev[0].set_network(id, "mode", "2") 786 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 787 dev[0].set_network(id, "key_mgmt", "NONE") 788 dev[0].set_network(id, "frequency", str(freq)) 789 dev[0].set_network(id, "scan_freq", str(freq)) 790 dev[0].set_network(id, "vht", "1") 791 dev[0].set_network(id, "vht_center_freq1", str(center_freq)) 792 dev[0].set_network(id, "max_oper_chwidth", "1") 793 dev[0].set_network(id, "ht40", str(ht40)) 794 dev[0].select_network(id) 795 wait_ap_ready(dev[0]) 796 797 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq=str(freq)) 798 log_channel_info(dev[1]) 799 sig = dev[1].request("SIGNAL_POLL").splitlines() 800 hwsim_utils.test_connectivity(dev[0], dev[1]) 801 dev[1].request("DISCONNECT") 802 dev[1].wait_disconnected() 803 if "FREQUENCY=" + str(freq) not in sig: 804 raise Exception("Unexpected SIGNAL_POLL value(1): " + str(sig)) 805 if "WIDTH=80 MHz" not in sig: 806 raise Exception("Unexpected SIGNAL_POLL value(2): " + str(sig)) 807 finally: 808 dev[0].request("REMOVE_NETWORK all") 809 dev[0].wait_disconnected() 810 set_country("00") 811 dev[0].set("country", "00") 812 dev[1].flush_scan_cache() 813 814def test_wpas_ap_no_ht(dev): 815 """wpa_supplicant AP mode - HT disabled""" 816 id = dev[0].add_network() 817 dev[0].set_network(id, "mode", "2") 818 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 819 dev[0].set_network(id, "key_mgmt", "NONE") 820 dev[0].set_network(id, "frequency", "2412") 821 dev[0].set_network(id, "scan_freq", "2412") 822 dev[0].set_network(id, "ht", "0") 823 dev[0].set_network(id, "wps_disabled", "1") 824 dev[0].select_network(id) 825 wait_ap_ready(dev[0]) 826 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 827 sig = dev[1].request("SIGNAL_POLL").splitlines() 828 dev[1].request("DISCONNECT") 829 dev[1].wait_disconnected() 830 dev[0].request("REMOVE_NETWORK all") 831 dev[0].wait_disconnected() 832 833 id = dev[0].add_network() 834 dev[0].set_network(id, "mode", "2") 835 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 836 dev[0].set_network(id, "key_mgmt", "NONE") 837 dev[0].set_network(id, "frequency", "2412") 838 dev[0].set_network(id, "scan_freq", "2412") 839 dev[0].set_network(id, "wps_disabled", "1") 840 dev[0].select_network(id) 841 wait_ap_ready(dev[0]) 842 dev[1].flush_scan_cache() 843 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 844 sig2 = dev[1].request("SIGNAL_POLL").splitlines() 845 dev[1].request("DISCONNECT") 846 dev[1].wait_disconnected() 847 dev[0].request("REMOVE_NETWORK all") 848 dev[0].wait_disconnected() 849 850 if "WIDTH=20 MHz (no HT)" not in sig: 851 raise Exception("HT was not disabled: " + str(sig)) 852 if "WIDTH=20 MHz" not in sig2: 853 raise Exception("HT was not enabled: " + str(sig2)) 854 855def test_wpas_ap_async_fail(dev): 856 """wpa_supplicant AP mode - Async failure""" 857 id = dev[0].add_network() 858 set_regdom(dev[0], "FI") 859 try: 860 dev[0].set_network(id, "mode", "2") 861 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 862 dev[0].set_network(id, "key_mgmt", "NONE") 863 dev[0].set_network(id, "frequency", "5180") 864 dev[0].set_network(id, "scan_freq", "5180") 865 dev[0].set_network(id, "vht", "1") 866 dev[0].set_network(id, "vht_center_freq1", "5210") 867 dev[0].set_network(id, "max_oper_chwidth", "1") 868 dev[0].set_network(id, "ht40", "1") 869 870 with alloc_fail(dev[0], 1, 871 "nl80211_get_scan_results;ieee80211n_check_scan"): 872 dev[0].select_network(id) 873 dev[0].wait_disconnected() 874 finally: 875 dev[0].set("country", "00") 876 clear_regdom_dev(dev) 877 878def test_wpas_ap_sae(dev): 879 """wpa_supplicant AP mode - SAE using psk""" 880 run_wpas_ap_sae(dev, False) 881 882def test_wpas_ap_sae_pmf1(dev): 883 """wpa_supplicant AP mode - SAE using psk and pmf=1""" 884 try: 885 dev[0].set("pmf", "1") 886 run_wpas_ap_sae(dev, False, pmf=2) 887 finally: 888 dev[0].set("pmf", "0") 889 890def test_wpas_ap_sae_pmf2(dev): 891 """wpa_supplicant AP mode - SAE using psk and pmf=2""" 892 try: 893 dev[0].set("pmf", "2") 894 run_wpas_ap_sae(dev, False, pmf=1) 895 finally: 896 dev[0].set("pmf", "0") 897 898def test_wpas_ap_sae_password(dev): 899 """wpa_supplicant AP mode - SAE using sae_password""" 900 run_wpas_ap_sae(dev, True) 901 902def test_wpas_ap_sae_pwe_1(dev): 903 """wpa_supplicant AP mode - SAE using sae_password and sae_pwe=1""" 904 try: 905 dev[0].set("sae_pwe", "1") 906 dev[1].set("sae_pwe", "1") 907 run_wpas_ap_sae(dev, True, sae_password_id=True) 908 finally: 909 dev[0].set("sae_pwe", "0") 910 dev[1].set("sae_pwe", "0") 911 912def run_wpas_ap_sae(dev, sae_password, sae_password_id=False, pmf=0): 913 check_sae_capab(dev[0]) 914 check_sae_capab(dev[1]) 915 dev[0].request("SET sae_groups ") 916 id = dev[0].add_network() 917 dev[0].set_network(id, "mode", "2") 918 dev[0].set_network_quoted(id, "ssid", "wpas-ap-sae") 919 dev[0].set_network(id, "proto", "WPA2") 920 dev[0].set_network(id, "key_mgmt", "SAE") 921 dev[0].set_network(id, "pairwise", "CCMP") 922 dev[0].set_network(id, "group", "CCMP") 923 if sae_password: 924 dev[0].set_network_quoted(id, "sae_password", "12345678") 925 else: 926 dev[0].set_network_quoted(id, "psk", "12345678") 927 if sae_password_id: 928 pw_id = "pw id" 929 dev[0].set_network_quoted(id, "sae_password_id", pw_id) 930 else: 931 pw_id = None 932 dev[0].set_network(id, "frequency", "2412") 933 dev[0].set_network(id, "scan_freq", "2412") 934 dev[0].set_network(id, "wps_disabled", "1") 935 dev[0].select_network(id) 936 wait_ap_ready(dev[0]) 937 938 dev[1].request("SET sae_groups ") 939 dev[1].connect("wpas-ap-sae", key_mgmt="SAE", sae_password="12345678", 940 sae_password_id=pw_id, scan_freq="2412", ieee80211w=str(pmf)) 941 942def test_wpas_ap_scan(dev, apdev): 943 """wpa_supplicant AP mode and scanning""" 944 dev[0].flush_scan_cache() 945 946 hapd = hostapd.add_ap(apdev[0], {"ssid": "open"}) 947 bssid = hapd.own_addr() 948 949 id = dev[0].add_network() 950 dev[0].set_network(id, "mode", "2") 951 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 952 dev[0].set_network(id, "key_mgmt", "NONE") 953 dev[0].set_network(id, "frequency", "2412") 954 dev[0].set_network(id, "scan_freq", "2412") 955 dev[0].select_network(id) 956 wait_ap_ready(dev[0]) 957 dev[0].dump_monitor() 958 959 if "OK" not in dev[0].request("SCAN freq=2412"): 960 raise Exception("SCAN command not accepted") 961 ev = dev[0].wait_event(["CTRL-EVENT-SCAN-RESULTS", 962 "CTRL-EVENT-SCAN-FAILED"], 15) 963 if ev is None: 964 raise Exception("Scan result timed out") 965 if "CTRL-EVENT-SCAN-FAILED ret=-95" in ev: 966 # Scanning in AP mode not supported 967 return 968 if "CTRL-EVENT-SCAN-FAILED" in ev: 969 raise Exception("Unexpected scan failure reason: " + ev) 970 if "CTRL-EVENT-SCAN-RESULTS" in ev: 971 bss = dev[0].get_bss(bssid) 972 if not bss: 973 raise Exception("AP not found in scan") 974 975def test_wpas_ap_sae(dev): 976 """wpa_supplicant AP mode - SAE using psk""" 977 run_wpas_ap_sae(dev, False) 978 979def test_wpas_ap_sae_and_psk_transition_disable(dev): 980 """wpa_supplicant AP mode - SAE+PSK transition disable indication""" 981 check_sae_capab(dev[0]) 982 check_sae_capab(dev[1]) 983 dev[0].set("sae_groups", "") 984 id = dev[0].add_network() 985 dev[0].set_network(id, "mode", "2") 986 dev[0].set_network_quoted(id, "ssid", "wpas-ap-sae") 987 dev[0].set_network(id, "proto", "WPA2") 988 dev[0].set_network(id, "key_mgmt", "SAE") 989 dev[0].set_network(id, "transition_disable", "1") 990 dev[0].set_network(id, "ieee80211w", "1") 991 dev[0].set_network(id, "pairwise", "CCMP") 992 dev[0].set_network(id, "group", "CCMP") 993 dev[0].set_network_quoted(id, "psk", "12345678") 994 dev[0].set_network(id, "frequency", "2412") 995 dev[0].set_network(id, "scan_freq", "2412") 996 dev[0].set_network(id, "wps_disabled", "1") 997 dev[0].select_network(id) 998 wait_ap_ready(dev[0]) 999 1000 dev[1].set("sae_groups", "") 1001 dev[1].connect("wpas-ap-sae", key_mgmt="SAE WPA-PSK", 1002 psk="12345678", ieee80211w="1", 1003 scan_freq="2412", wait_connect=False) 1004 ev = dev[1].wait_event(["TRANSITION-DISABLE"], timeout=15) 1005 if ev is None: 1006 raise Exception("Transition disable not indicated") 1007 if ev.split(' ')[1] != "01": 1008 raise Exception("Unexpected transition disable bitmap: " + ev) 1009 1010 val = dev[1].get_network(id, "ieee80211w") 1011 if val != "2": 1012 raise Exception("Unexpected ieee80211w value: " + val) 1013 val = dev[1].get_network(id, "key_mgmt") 1014 if val != "SAE": 1015 raise Exception("Unexpected key_mgmt value: " + val) 1016 val = dev[1].get_network(id, "group") 1017 if val != "CCMP": 1018 raise Exception("Unexpected group value: " + val) 1019 val = dev[1].get_network(id, "proto") 1020 if val != "RSN": 1021 raise Exception("Unexpected proto value: " + val) 1022 1023 dev[1].request("DISCONNECT") 1024 dev[1].wait_disconnected() 1025 dev[1].request("RECONNECT") 1026 dev[1].wait_connected() 1027 1028def test_wpas_ap_vendor_elems(dev): 1029 """wpa_supplicant AP mode - vendor elements""" 1030 id = dev[0].add_network() 1031 dev[0].set_network(id, "mode", "2") 1032 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 1033 dev[0].set_network(id, "key_mgmt", "NONE") 1034 dev[0].set_network(id, "frequency", "2412") 1035 dev[0].set_network(id, "scan_freq", "2412") 1036 dev[0].select_network(id) 1037 wait_ap_ready(dev[0]) 1038 1039 try: 1040 beacon_elems = "dd0411223301" 1041 dev[0].set("ap_vendor_elements", beacon_elems) 1042 dev[0].set("ap_assocresp_elements", "dd0411223302") 1043 if "OK" not in dev[0].request("UPDATE_BEACON"): 1044 raise Exception("UPDATE_BEACON failed") 1045 1046 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 1047 bss = dev[1].get_bss(dev[0].own_addr()) 1048 if beacon_elems not in bss['ie']: 1049 raise Exception("Vendor element not visible in scan results") 1050 finally: 1051 dev[0].set("ap_vendor_elements", "") 1052 dev[0].set("ap_assocresp_elements", "") 1053 1054def test_wpas_ap_lifetime_in_memory(dev, apdev, params): 1055 """wpa_supplicant AP mode and PSK/PTK lifetime in memory""" 1056 run_wpas_ap_lifetime_in_memory(dev, apdev, params, False) 1057 1058def test_wpas_ap_lifetime_in_memory2(dev, apdev, params): 1059 """wpa_supplicant AP mode and PSK/PTK lifetime in memory (raw PSK)""" 1060 run_wpas_ap_lifetime_in_memory(dev, apdev, params, True) 1061 1062def run_wpas_ap_lifetime_in_memory(dev, apdev, params, raw): 1063 ssid = "test-wpa2-psk" 1064 passphrase = 'qwertyuiop' 1065 psk = '602e323e077bc63bd80307ef4745b754b0ae0a925c2638ecd13a794b9527b9e6' 1066 pmk = binascii.unhexlify(psk) 1067 1068 pid = find_wpas_process(dev[0]) 1069 1070 id = dev[0].add_network() 1071 dev[0].set_network(id, "mode", "2") 1072 dev[0].set_network_quoted(id, "ssid", ssid) 1073 dev[0].set_network(id, "proto", "WPA2") 1074 dev[0].set_network(id, "pairwise", "CCMP") 1075 dev[0].set_network(id, "group", "CCMP") 1076 if raw: 1077 dev[0].set_network(id, "psk", psk) 1078 else: 1079 dev[0].set_network_quoted(id, "psk", passphrase) 1080 dev[0].set_network(id, "frequency", "2412") 1081 dev[0].set_network(id, "scan_freq", "2412") 1082 1083 logger.info("Checking keys in memory after network profile configuration") 1084 buf = read_process_memory(pid, pmk) 1085 get_key_locations(buf, pmk, "PMK") 1086 1087 dev[0].select_network(id) 1088 wait_ap_ready(dev[0]) 1089 1090 logger.info("Checking keys in memory after AP start") 1091 buf = read_process_memory(pid, pmk) 1092 get_key_locations(buf, pmk, "PMK") 1093 1094 dev[1].connect(ssid, psk=passphrase, scan_freq="2412") 1095 dev[0].wait_sta() 1096 1097 buf = read_process_memory(pid, pmk) 1098 1099 dev[1].request("DISCONNECT") 1100 dev[1].wait_disconnected() 1101 dev[0].wait_sta_disconnect() 1102 time.sleep(1) 1103 1104 buf2 = read_process_memory(pid, pmk) 1105 1106 dev[0].request("REMOVE_NETWORK all") 1107 dev[0].wait_disconnected() 1108 1109 buf3 = read_process_memory(pid, pmk) 1110 1111 dev[1].relog() 1112 ptk = None 1113 gtk = None 1114 with open(os.path.join(params['logdir'], 'log1'), 'r') as f: 1115 for l in f.readlines(): 1116 if "WPA: PTK - hexdump" in l: 1117 val = l.strip().split(':')[3].replace(' ', '') 1118 ptk = binascii.unhexlify(val) 1119 if "WPA: Group Key - hexdump" in l: 1120 val = l.strip().split(':')[3].replace(' ', '') 1121 gtk = binascii.unhexlify(val) 1122 if not pmk or not ptk or not gtk: 1123 raise Exception("Could not find keys from debug log") 1124 if len(gtk) != 16: 1125 raise Exception("Unexpected GTK length") 1126 1127 kck = ptk[0:16] 1128 kek = ptk[16:32] 1129 tk = ptk[32:48] 1130 1131 logger.info("Checking keys in memory while associated") 1132 get_key_locations(buf, pmk, "PMK") 1133 if pmk not in buf: 1134 raise HwsimSkip("PMK not found while associated") 1135 if kck not in buf: 1136 raise Exception("KCK not found while associated") 1137 if kek not in buf: 1138 raise Exception("KEK not found while associated") 1139 #if tk in buf: 1140 # raise Exception("TK found from memory") 1141 1142 logger.info("Checking keys in memory after disassociation") 1143 get_key_locations(buf2, pmk, "PMK") 1144 1145 # Note: PMK/PSK is still present in network configuration and GTK is still 1146 # in use. 1147 1148 fname = params['prefix'] + '.memctx-' 1149 verify_not_present(buf2, kck, fname, "KCK") 1150 verify_not_present(buf2, kek, fname, "KEK") 1151 verify_not_present(buf2, tk, fname, "TK") 1152 get_key_locations(buf2, gtk, "GTK") 1153 1154 logger.info("Checking keys in memory after network profile removal") 1155 get_key_locations(buf3, pmk, "PMK") 1156 1157 verify_not_present(buf3, pmk, fname, "PMK") 1158 verify_not_present(buf3, kck, fname, "KCK") 1159 verify_not_present(buf3, kek, fname, "KEK") 1160 verify_not_present(buf3, tk, fname, "TK") 1161 get_key_locations(buf3, gtk, "GTK") 1162 verify_not_present(buf3, gtk, fname, "GTK") 1163 1164def check_acl(dev, num_accept, num_deny): 1165 accept = dev.request("ACCEPT_ACL SHOW").splitlines() 1166 logger.info("accept entries: " + str(accept)) 1167 if len(accept) != num_accept: 1168 raise Exception("Unexpected number of accept entries") 1169 deny = dev.request("DENY_ACL SHOW").splitlines() 1170 logger.info("deny entries: " + str(deny)) 1171 if len(deny) != num_deny: 1172 raise Exception("Unexpected number of deny entries") 1173 1174def test_wpas_ap_acl_mgmt(dev): 1175 """wpa_supplicant AP mode - ACL management""" 1176 id = dev[0].add_network() 1177 dev[0].set_network(id, "mode", "2") 1178 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 1179 dev[0].set_network(id, "key_mgmt", "NONE") 1180 dev[0].set_network(id, "frequency", "2412") 1181 dev[0].set_network(id, "scan_freq", "2412") 1182 dev[0].select_network(id) 1183 wait_ap_ready(dev[0]) 1184 1185 addr1 = dev[1].own_addr() 1186 addr2 = dev[2].own_addr() 1187 1188 check_acl(dev[0], 0, 0) 1189 if "OK" not in dev[0].request("ACCEPT_ACL ADD_MAC " + addr1): 1190 raise Exception("ACCEPT_ACL ADD_MAC failed") 1191 check_acl(dev[0], 1, 0) 1192 1193 dev[2].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412", 1194 wait_connect=False) 1195 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 1196 ev = dev[2].wait_event(["CTRL-EVENT-CONNECTED"], timeout=2) 1197 if ev: 1198 raise Exception("Unexpected connection") 1199 dev[2].request("DISCONNECT") 1200 1201 if "OK" not in dev[0].request("DENY_ACL ADD_MAC " + addr1): 1202 raise Exception("DENY_ACL ADD_MAC failed") 1203 dev[1].wait_disconnected() 1204 dev[1].request("DISCONNECT") 1205 1206 check_acl(dev[0], 1, 1) 1207 if "OK" not in dev[0].request("ACCEPT_ACL CLEAR"): 1208 raise Exception("Failed to clear accept ACL") 1209 check_acl(dev[0], 0, 1) 1210 if "OK" not in dev[0].request("DENY_ACL CLEAR"): 1211 raise Exception("Failed to clear deny ACL") 1212 check_acl(dev[0], 0, 0) 1213