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 17 18def wait_ap_ready(dev): 19 ev = dev.wait_event(["CTRL-EVENT-CONNECTED"]) 20 if ev is None: 21 raise Exception("AP failed to start") 22 23def test_wpas_ap_open(dev): 24 """wpa_supplicant AP mode - open network""" 25 if "FAIL" not in dev[0].request("DEAUTHENTICATE 00:11:22:33:44:55"): 26 raise Exception("Unexpected DEAUTHENTICATE accepted") 27 if "FAIL" not in dev[0].request("DISASSOCIATE 00:11:22:33:44:55"): 28 raise Exception("Unexpected DISASSOCIATE accepted") 29 if "FAIL" not in dev[0].request("CHAN_SWITCH 0 2432"): 30 raise Exception("Unexpected CHAN_SWITCH accepted") 31 32 id = dev[0].add_network() 33 dev[0].set_network(id, "mode", "2") 34 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 35 dev[0].set_network(id, "key_mgmt", "NONE") 36 dev[0].set_network(id, "frequency", "2412") 37 dev[0].set_network(id, "scan_freq", "2412") 38 dev[0].select_network(id) 39 wait_ap_ready(dev[0]) 40 41 if "FAIL" not in dev[0].request("DEAUTHENTICATE foo"): 42 raise Exception("Invalid DEAUTHENTICATE accepted") 43 if "FAIL" not in dev[0].request("DISASSOCIATE foo"): 44 raise Exception("Invalid DISASSOCIATE accepted") 45 46 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 47 dev[2].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 48 hwsim_utils.test_connectivity(dev[0], dev[1]) 49 hwsim_utils.test_connectivity(dev[1], dev[2]) 50 51 addr1 = dev[1].p2p_interface_addr() 52 addr2 = dev[2].p2p_interface_addr() 53 addrs = [addr1, addr2] 54 sta = dev[0].get_sta(None) 55 if sta['addr'] not in addrs: 56 raise Exception("Unexpected STA address") 57 sta1 = dev[0].get_sta(sta['addr']) 58 if sta1['addr'] not in addrs: 59 raise Exception("Unexpected STA address") 60 sta2 = dev[0].get_sta(sta['addr'], next=True) 61 if sta2['addr'] not in addrs: 62 raise Exception("Unexpected STA2 address") 63 sta3 = dev[0].get_sta(sta2['addr'], next=True) 64 if len(sta3) != 0: 65 raise Exception("Unexpected STA iteration result (did not stop)") 66 67 status = dev[0].get_status() 68 if status['mode'] != "AP": 69 raise Exception("Unexpected status mode") 70 71 dev[1].dump_monitor() 72 dev[2].dump_monitor() 73 dev[0].request("DEAUTHENTICATE " + addr1) 74 dev[0].request("DISASSOCIATE " + addr2) 75 dev[1].wait_disconnected(timeout=10) 76 dev[2].wait_disconnected(timeout=10) 77 dev[1].wait_connected(timeout=10, error="Reconnection timed out") 78 dev[2].wait_connected(timeout=10, error="Reconnection timed out") 79 dev[1].request("DISCONNECT") 80 dev[2].request("DISCONNECT") 81 82def test_wpas_ap_open_isolate(dev): 83 """wpa_supplicant AP mode - open network with client isolation""" 84 try: 85 dev[0].set("ap_isolate", "1") 86 id = dev[0].add_network() 87 dev[0].set_network(id, "mode", "2") 88 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 89 dev[0].set_network(id, "key_mgmt", "NONE") 90 dev[0].set_network(id, "frequency", "2412") 91 dev[0].set_network(id, "scan_freq", "2412") 92 dev[0].select_network(id) 93 wait_ap_ready(dev[0]) 94 95 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 96 dev[2].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 97 hwsim_utils.test_connectivity(dev[0], dev[1]) 98 hwsim_utils.test_connectivity(dev[0], dev[2]) 99 hwsim_utils.test_connectivity(dev[1], dev[2], success_expected=False, 100 timeout=1) 101 finally: 102 dev[0].set("ap_isolate", "0") 103 104@remote_compatible 105def test_wpas_ap_wep(dev): 106 """wpa_supplicant AP mode - WEP""" 107 check_wep_capa(dev[0]) 108 id = dev[0].add_network() 109 dev[0].set_network(id, "mode", "2") 110 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wep") 111 dev[0].set_network(id, "key_mgmt", "NONE") 112 dev[0].set_network(id, "frequency", "2412") 113 dev[0].set_network(id, "scan_freq", "2412") 114 dev[0].set_network_quoted(id, "wep_key0", "hello") 115 dev[0].select_network(id) 116 wait_ap_ready(dev[0]) 117 118 dev[1].connect("wpas-ap-wep", key_mgmt="NONE", wep_key0='"hello"', 119 scan_freq="2412") 120 hwsim_utils.test_connectivity(dev[0], dev[1]) 121 dev[1].request("DISCONNECT") 122 123@remote_compatible 124def test_wpas_ap_no_ssid(dev): 125 """wpa_supplicant AP mode - invalid network configuration""" 126 id = dev[0].add_network() 127 dev[0].set_network(id, "mode", "2") 128 dev[0].set_network(id, "key_mgmt", "NONE") 129 dev[0].set_network(id, "frequency", "2412") 130 dev[0].set_network(id, "scan_freq", "2412") 131 dev[0].select_network(id) 132 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1) 133 if ev is not None: 134 raise Exception("Unexpected AP start") 135 136@remote_compatible 137def test_wpas_ap_default_frequency(dev): 138 """wpa_supplicant AP mode - default frequency""" 139 id = dev[0].add_network() 140 dev[0].set_network(id, "mode", "2") 141 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 142 dev[0].set_network(id, "key_mgmt", "NONE") 143 dev[0].set_network(id, "scan_freq", "2412") 144 dev[0].select_network(id) 145 wait_ap_ready(dev[0]) 146 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2462") 147 dev[1].request("DISCONNECT") 148 149@remote_compatible 150def test_wpas_ap_invalid_frequency(dev): 151 """wpa_supplicant AP mode - invalid frequency configuration""" 152 id = dev[0].add_network() 153 dev[0].set_network(id, "mode", "2") 154 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 155 dev[0].set_network(id, "key_mgmt", "NONE") 156 dev[0].set_network(id, "frequency", "2413") 157 dev[0].set_network(id, "scan_freq", "2412") 158 dev[0].select_network(id) 159 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1) 160 if ev is not None: 161 raise Exception("Unexpected AP start") 162 163def test_wpas_ap_wps(dev): 164 """wpa_supplicant AP mode - WPS operations""" 165 id = dev[0].add_network() 166 dev[0].set_network(id, "mode", "2") 167 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps") 168 dev[0].set_network_quoted(id, "psk", "1234567890") 169 dev[0].set_network(id, "frequency", "2412") 170 dev[0].set_network(id, "scan_freq", "2412") 171 dev[0].select_network(id) 172 wait_ap_ready(dev[0]) 173 bssid = dev[0].p2p_interface_addr() 174 175 logger.info("Test PBC mode start/stop") 176 if "FAIL" not in dev[0].request("WPS_CANCEL"): 177 raise Exception("Unexpected WPS_CANCEL success") 178 dev[0].request("WPS_PBC") 179 ev = dev[0].wait_event(["WPS-PBC-ACTIVE"]) 180 if ev is None: 181 raise Exception("PBC mode start timeout") 182 if "OK" not in dev[0].request("WPS_CANCEL"): 183 raise Exception("Unexpected WPS_CANCEL failure") 184 ev = dev[0].wait_event(["WPS-TIMEOUT"]) 185 if ev is None: 186 raise Exception("PBC mode disabling timeout") 187 188 logger.info("Test PBC protocol run") 189 dev[0].request("WPS_PBC") 190 ev = dev[0].wait_event(["WPS-PBC-ACTIVE"]) 191 if ev is None: 192 raise Exception("PBC mode start timeout") 193 dev[1].request("WPS_PBC") 194 dev[1].wait_connected(timeout=30, error="WPS PBC operation timed out") 195 hwsim_utils.test_connectivity(dev[0], dev[1]) 196 197 logger.info("Test AP PIN to learn configuration") 198 pin = dev[0].request("WPS_AP_PIN random") 199 if "FAIL" in pin: 200 raise Exception("Could not generate random AP PIN") 201 if pin not in dev[0].request("WPS_AP_PIN get"): 202 raise Exception("Could not fetch current AP PIN") 203 dev[2].wps_reg(bssid, pin) 204 hwsim_utils.test_connectivity(dev[1], dev[2]) 205 206 dev[1].request("REMOVE_NETWORK all") 207 dev[2].request("REMOVE_NETWORK all") 208 209 logger.info("Test AP PIN operations") 210 dev[0].request("WPS_AP_PIN disable") 211 dev[0].request("WPS_AP_PIN set " + pin + " 1") 212 time.sleep(1.1) 213 if "FAIL" not in dev[0].request("WPS_AP_PIN get"): 214 raise Exception("AP PIN unexpectedly still enabled") 215 216 pin = dev[1].wps_read_pin() 217 dev[0].request("WPS_PIN any " + pin) 218 dev[1].request("WPS_PIN any " + pin) 219 dev[1].wait_connected(timeout=30) 220 dev[1].request("REMOVE_NETWORK all") 221 dev[1].dump_monitor() 222 223 dev[0].request("WPS_PIN any " + pin + " 100") 224 dev[1].request("WPS_PIN any " + pin) 225 dev[1].wait_connected(timeout=30) 226 dev[1].request("REMOVE_NETWORK all") 227 dev[1].dump_monitor() 228 229 dev[0].request("WPS_AP_PIN set 12345670") 230 dev[0].dump_monitor() 231 232 runs = ("88887777", "12340000", "00000000", "12345670") 233 for pin in runs: 234 logger.info("Try AP PIN " + pin) 235 dev[2].dump_monitor() 236 dev[2].request("WPS_REG " + bssid + " " + pin) 237 ev = dev[2].wait_event(["WPS-SUCCESS", "WPS-FAIL msg"], timeout=15) 238 if ev is None: 239 raise Exception("WPS operation timed out") 240 if "WPS-SUCCESS" in ev: 241 raise Exception("WPS operation succeeded unexpectedly") 242 dev[2].wait_disconnected(timeout=10) 243 dev[2].request("WPS_CANCEL") 244 dev[2].request("REMOVE_NETWORK all") 245 ev = dev[0].wait_event(["WPS-AP-SETUP-LOCKED"]) 246 if ev is None: 247 raise Exception("WPS AP PIN not locked") 248 249 dev[0].dump_monitor() 250 logger.info("Test random AP PIN timeout") 251 pin = dev[0].request("WPS_AP_PIN random 1") 252 if "FAIL" in pin: 253 raise Exception("Could not generate random AP PIN") 254 res = dev[0].request("WPS_AP_PIN get") 255 if pin not in res: 256 raise Exception("Could not fetch current AP PIN") 257 for i in range(10): 258 time.sleep(0.2) 259 res = dev[0].request("WPS_AP_PIN get") 260 if "FAIL" in res: 261 break 262 if "FAIL" not in res: 263 raise Exception("WPS_AP_PIN random timeout did not work") 264 265 if "FAIL" not in dev[0].request("WPS_AP_PIN foo"): 266 raise Exception("Invalid WPS_AP_PIN command not rejected") 267 if "FAIL" not in dev[0].request("WPS_AP_PIN set"): 268 raise Exception("Invalid WPS_AP_PIN command not rejected") 269 270def test_wpas_ap_wps_frag(dev): 271 """wpa_supplicant AP mode - WPS operations with fragmentation""" 272 id = dev[0].add_network() 273 dev[0].set_network(id, "mode", "2") 274 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps") 275 dev[0].set_network_quoted(id, "psk", "1234567890") 276 dev[0].set_network(id, "frequency", "2412") 277 dev[0].set_network(id, "scan_freq", "2412") 278 dev[0].set_network(id, "fragment_size", "300") 279 dev[0].select_network(id) 280 wait_ap_ready(dev[0]) 281 bssid = dev[0].own_addr() 282 283 pin = dev[1].wps_read_pin() 284 dev[0].request("WPS_PIN any " + pin) 285 dev[1].scan_for_bss(bssid, freq="2412") 286 dev[1].request("WPS_PIN " + bssid + " " + pin) 287 dev[1].wait_connected(timeout=30) 288 289def test_wpas_ap_wps_pbc_overlap(dev): 290 """wpa_supplicant AP mode - WPS operations with PBC overlap""" 291 id = dev[0].add_network() 292 dev[0].set_network(id, "mode", "2") 293 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps") 294 dev[0].set_network_quoted(id, "psk", "1234567890") 295 dev[0].set_network(id, "frequency", "2412") 296 dev[0].set_network(id, "scan_freq", "2412") 297 dev[0].select_network(id) 298 wait_ap_ready(dev[0]) 299 bssid = dev[0].p2p_interface_addr() 300 301 dev[1].scan_for_bss(bssid, freq="2412") 302 dev[1].dump_monitor() 303 dev[2].scan_for_bss(bssid, freq="2412") 304 dev[2].dump_monitor() 305 dev[0].request("WPS_PBC") 306 dev[1].request("WPS_PBC " + bssid) 307 dev[2].request("WPS_PBC " + bssid) 308 309 ev = dev[1].wait_event(["WPS-M2D"], timeout=15) 310 if ev is None: 311 raise Exception("PBC session overlap not detected (dev1)") 312 if "config_error=12" not in ev: 313 raise Exception("PBC session overlap not correctly reported (dev1)") 314 315 ev = dev[2].wait_event(["WPS-M2D"], timeout=15) 316 if ev is None: 317 raise Exception("PBC session overlap not detected (dev2)") 318 if "config_error=12" not in ev: 319 raise Exception("PBC session overlap not correctly reported (dev2)") 320 321 if "FAIL-PBC-OVERLAP" not in dev[0].request("WPS_PBC"): 322 raise Exception("WPS_PBC(AP) accepted during overlap") 323 if "FAIL-PBC-OVERLAP" not in dev[0].request("WPS_PBC any"): 324 raise Exception("WPS_PBC(AP) accepted during overlap") 325 dev[0].request("WPS_CANCEL") 326 dev[1].request("WPS_CANCEL") 327 dev[2].request("WPS_CANCEL") 328 329@remote_compatible 330def test_wpas_ap_wps_disabled(dev): 331 """wpa_supplicant AP mode - WPS disabled""" 332 id = dev[0].add_network() 333 dev[0].set_network(id, "mode", "2") 334 dev[0].set_network_quoted(id, "ssid", "wpas-ap-no-wps") 335 dev[0].set_network_quoted(id, "psk", "12345678") 336 dev[0].set_network(id, "frequency", "2412") 337 dev[0].set_network(id, "scan_freq", "2412") 338 dev[0].set_network(id, "wps_disabled", "1") 339 dev[0].select_network(id) 340 wait_ap_ready(dev[0]) 341 342 dev[1].connect("wpas-ap-no-wps", psk="12345678", scan_freq="2412") 343 dev[1].request("DISCONNECT") 344 dev[1].wait_disconnected() 345 346def test_wpas_ap_dfs(dev): 347 """wpa_supplicant AP mode - DFS""" 348 if dev[0].get_mcc() > 1: 349 raise HwsimSkip("DFS is not supported with multi channel contexts") 350 351 try: 352 _test_wpas_ap_dfs(dev) 353 finally: 354 set_country("00") 355 dev[0].request("SET country 00") 356 dev[1].flush_scan_cache() 357 358def _test_wpas_ap_dfs(dev): 359 set_country("US") 360 dev[0].request("SET country US") 361 id = dev[0].add_network() 362 dev[0].set_network(id, "mode", "2") 363 dev[0].set_network_quoted(id, "ssid", "wpas-ap-dfs") 364 dev[0].set_network(id, "key_mgmt", "NONE") 365 dev[0].set_network(id, "frequency", "5260") 366 dev[0].set_network(id, "scan_freq", "5260") 367 dev[0].select_network(id) 368 369 ev = dev[0].wait_event(["DFS-CAC-START"]) 370 if ev is None: 371 # For now, assume DFS is not supported by all kernel builds. 372 raise HwsimSkip("CAC did not start - assume not supported") 373 374 ev = dev[0].wait_event(["DFS-CAC-COMPLETED"], timeout=70) 375 if ev is None: 376 raise Exception("CAC did not complete") 377 if "success=1" not in ev: 378 raise Exception("CAC failed") 379 if "freq=5260" not in ev: 380 raise Exception("Unexpected DFS freq result") 381 382 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"]) 383 if ev is None: 384 raise Exception("AP failed to start") 385 386 dev[1].connect("wpas-ap-dfs", key_mgmt="NONE") 387 dev[1].wait_regdom(country_ie=True) 388 dev[0].request("DISCONNECT") 389 dev[1].disconnect_and_stop_scan() 390 391@remote_compatible 392def test_wpas_ap_disable(dev): 393 """wpa_supplicant AP mode - DISABLE_NETWORK""" 394 id = dev[0].add_network() 395 dev[0].set_network(id, "mode", "2") 396 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 397 dev[0].set_network(id, "key_mgmt", "NONE") 398 dev[0].set_network(id, "scan_freq", "2412") 399 dev[0].select_network(id) 400 401 ev = dev[0].wait_event(["AP-ENABLED"]) 402 if ev is None: 403 raise Exception("AP-ENABLED event not seen") 404 wait_ap_ready(dev[0]) 405 dev[0].request("DISABLE_NETWORK %d" % id) 406 ev = dev[0].wait_event(["AP-DISABLED"]) 407 if ev is None: 408 raise Exception("AP-DISABLED event not seen") 409 dev[0].wait_disconnected() 410 411def test_wpas_ap_acs(dev): 412 """wpa_supplicant AP mode - ACS""" 413 res = dev[0].get_capability("acs") 414 if res is None or "ACS" not in res: 415 raise HwsimSkip("ACS not supported") 416 417 # For now, make sure the last operating channel was on 2.4 GHz band to get 418 # sufficient survey data from mac80211_hwsim. 419 id = dev[0].add_network() 420 dev[0].set_network(id, "mode", "2") 421 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 422 dev[0].set_network(id, "key_mgmt", "NONE") 423 dev[0].set_network(id, "frequency", "2412") 424 dev[0].set_network(id, "scan_freq", "2412") 425 dev[0].select_network(id) 426 wait_ap_ready(dev[0]) 427 dev[0].request("REMOVE_NETWORK all") 428 dev[0].wait_disconnected() 429 430 id = dev[0].add_network() 431 dev[0].set_network(id, "mode", "2") 432 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 433 dev[0].set_network(id, "key_mgmt", "NONE") 434 dev[0].set_network(id, "frequency", "2417") 435 dev[0].set_network(id, "scan_freq", "2417") 436 dev[0].set_network(id, "acs", "1") 437 dev[0].select_network(id) 438 wait_ap_ready(dev[0]) 439 440 # ACS prefers channels 1, 6, 11 441 freq = dev[0].get_status_field('freq') 442 if freq == "2417": 443 raise Exception("Unexpected operating channel selected") 444 445 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq=freq) 446 447@remote_compatible 448def test_wpas_ap_and_assoc_req_p2p_ie(dev): 449 """wpa_supplicant AP mode - unexpected P2P IE in Association Request""" 450 try: 451 _test_wpas_ap_and_assoc_req_p2p_ie(dev) 452 finally: 453 dev[1].request("VENDOR_ELEM_REMOVE 13 *") 454 dev[0].request("P2P_SET disabled 0") 455 456def _test_wpas_ap_and_assoc_req_p2p_ie(dev): 457 dev[0].request("P2P_SET disabled 1") 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", "2412") 463 dev[0].set_network(id, "scan_freq", "2412") 464 dev[0].select_network(id) 465 wait_ap_ready(dev[0]) 466 467 dev[1].request("VENDOR_ELEM_ADD 13 dd04506f9a09") 468 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 469 dev[1].request("DISCONNECT") 470 dev[1].wait_disconnected() 471 472 dev[0].request("DISCONNECT") 473 dev[0].wait_disconnected() 474 475@remote_compatible 476def test_wpas_ap_open_ht_disabled(dev): 477 """wpa_supplicant AP mode - open network and HT disabled""" 478 id = dev[0].add_network() 479 dev[0].set_network(id, "mode", "2") 480 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 481 dev[0].set_network(id, "key_mgmt", "NONE") 482 dev[0].set_network(id, "frequency", "2412") 483 dev[0].set_network(id, "scan_freq", "2412") 484 dev[0].set_network(id, "disable_ht", "1") 485 dev[0].select_network(id) 486 wait_ap_ready(dev[0]) 487 488 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 489 hwsim_utils.test_connectivity(dev[0], dev[1]) 490 491def test_wpas_ap_failures(dev): 492 """wpa_supplicant AP mode - failures""" 493 # No SSID configured for AP mode 494 id = dev[0].add_network() 495 dev[0].set_network(id, "mode", "2") 496 dev[0].set_network(id, "key_mgmt", "NONE") 497 dev[0].set_network(id, "frequency", "2412") 498 dev[0].set_network(id, "scan_freq", "2412") 499 dev[0].select_network(id) 500 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=0.1) 501 if ev is not None: 502 raise Exception("Unexpected connection event") 503 dev[0].request("REMOVE_NETWORK all") 504 505 # Invalid pbss value(2) for AP mode 506 dev[0].dump_monitor() 507 id = dev[0].add_network() 508 dev[0].set_network(id, "mode", "2") 509 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 510 dev[0].set_network(id, "key_mgmt", "NONE") 511 dev[0].set_network(id, "frequency", "2412") 512 dev[0].set_network(id, "scan_freq", "2412") 513 dev[0].set_network(id, "pbss", "2") 514 dev[0].select_network(id) 515 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED", 516 "CTRL-EVENT-DISCONNECTED"], timeout=0.1) 517 if ev is not None and "CTRL-EVENT-CONNECTED" in ev: 518 raise Exception("Unexpected connection event(2)") 519 dev[0].request("REMOVE_NETWORK all") 520 521def test_wpas_ap_oom(dev): 522 """wpa_supplicant AP mode - OOM""" 523 id = dev[0].add_network() 524 dev[0].set_network(id, "mode", "2") 525 dev[0].set_network_quoted(id, "ssid", "wpas-ap") 526 dev[0].set_network_quoted(id, "psk", "1234567890") 527 dev[0].set_network(id, "frequency", "2412") 528 dev[0].set_network(id, "scan_freq", "2412") 529 with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"): 530 dev[0].select_network(id) 531 dev[0].wait_disconnected() 532 dev[0].request("REMOVE_NETWORK all") 533 534 id = dev[0].add_network() 535 dev[0].set_network(id, "mode", "2") 536 dev[0].set_network_quoted(id, "ssid", "wpas-ap") 537 dev[0].set_network(id, "psk", "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef") 538 dev[0].set_network(id, "frequency", "2412") 539 dev[0].set_network(id, "scan_freq", "2412") 540 with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"): 541 dev[0].select_network(id) 542 dev[0].wait_disconnected() 543 dev[0].request("REMOVE_NETWORK all") 544 545 if "WEP40" in dev[0].get_capability("group"): 546 id = dev[0].add_network() 547 dev[0].set_network(id, "mode", "2") 548 dev[0].set_network_quoted(id, "ssid", "wpas-ap") 549 dev[0].set_network(id, "key_mgmt", "NONE") 550 dev[0].set_network_quoted(id, "wep_key0", "hello") 551 dev[0].set_network(id, "frequency", "2412") 552 dev[0].set_network(id, "scan_freq", "2412") 553 with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"): 554 dev[0].select_network(id) 555 dev[0].wait_disconnected() 556 dev[0].request("REMOVE_NETWORK all") 557 558 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5') 559 wpas.interface_add("wlan5") 560 wpas.request("SET manufacturer test") 561 wpas.request("SET model_name test") 562 wpas.request("SET model_number test") 563 wpas.request("SET serial_number test") 564 wpas.request("SET serial_number test") 565 wpas.request("SET serial_number test") 566 wpas.request("SET ap_vendor_elements dd0411223301") 567 id = wpas.add_network() 568 wpas.set_network(id, "mode", "2") 569 wpas.set_network_quoted(id, "ssid", "wpas-ap") 570 wpas.set_network(id, "key_mgmt", "NONE") 571 wpas.set_network(id, "frequency", "2412") 572 wpas.set_network(id, "scan_freq", "2412") 573 574 for i in range(5): 575 with alloc_fail(wpas, i, "=wpa_supplicant_conf_ap"): 576 wpas.select_network(id) 577 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED", 578 "CTRL-EVENT-DISCONNECTED"], timeout=1) 579 wpas.request("DISCONNECT") 580 wpas.wait_disconnected() 581 582def test_wpas_ap_params(dev): 583 """wpa_supplicant AP mode - parameters""" 584 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5') 585 wpas.interface_add("wlan5") 586 wpas.request("SET manufacturer test") 587 wpas.request("SET model_name test") 588 wpas.request("SET model_number test") 589 wpas.request("SET serial_number test") 590 wpas.request("SET serial_number test") 591 wpas.request("SET serial_number test") 592 wpas.request("SET ap_vendor_elements dd0411223301") 593 id = wpas.add_network() 594 wpas.set_network(id, "mode", "2") 595 wpas.set_network_quoted(id, "ssid", "wpas-ap") 596 wpas.set_network(id, "key_mgmt", "NONE") 597 wpas.set_network(id, "frequency", "2412") 598 wpas.set_network(id, "scan_freq", "2412") 599 wpas.select_network(id) 600 wpas.wait_connected() 601 wpas.request("DISCONNECT") 602 wpas.wait_disconnected() 603 604 wpas.request("SET beacon_int 200 3") 605 wpas.request("SET dtim_period 3") 606 wpas.select_network(id) 607 wpas.wait_connected() 608 wpas.request("DISCONNECT") 609 wpas.wait_disconnected() 610 611 wpas.set_network(id, "beacon_int", "300") 612 wpas.set_network(id, "dtim_period", "2") 613 wpas.select_network(id) 614 wpas.wait_connected() 615 if "---- AP ----" not in wpas.request("PMKSA"): 616 raise Exception("AP section missing from PMKSA output") 617 if "OK" not in wpas.request("PMKSA_FLUSH"): 618 raise Exception("PMKSA_FLUSH failed") 619 wpas.request("DISCONNECT") 620 wpas.wait_disconnected() 621 622def test_wpas_ap_global_sta(dev): 623 """wpa_supplicant AP mode - STA commands on global control interface""" 624 id = dev[0].add_network() 625 dev[0].set_network(id, "mode", "2") 626 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 627 dev[0].set_network(id, "key_mgmt", "NONE") 628 dev[0].set_network(id, "frequency", "2412") 629 dev[0].set_network(id, "scan_freq", "2412") 630 dev[0].select_network(id) 631 wait_ap_ready(dev[0]) 632 633 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 634 635 addr1 = dev[1].own_addr() 636 res = dev[0].global_request("STA " + addr1) 637 if "UNKNOWN COMMAND" in res: 638 raise Exception("STA command not known on global control interface") 639 res = dev[0].global_request("STA-FIRST") 640 if "UNKNOWN COMMAND" in res: 641 raise Exception("STA-FIRST command not known on global control interface") 642 res = dev[0].global_request("STA-NEXT " + addr1) 643 if "UNKNOWN COMMAND" in res: 644 raise Exception("STA-NEXT command not known on global control interface") 645 dev[1].request("DISCONNECT") 646 dev[1].wait_disconnected() 647 dev[0].request("DISCONNECT") 648 dev[0].wait_disconnected() 649 650def test_wpas_ap_5ghz(dev): 651 """wpa_supplicant AP mode - 5 GHz""" 652 try: 653 _test_wpas_ap_5ghz(dev) 654 finally: 655 set_country("00") 656 dev[0].request("SET country 00") 657 dev[1].flush_scan_cache() 658 659def _test_wpas_ap_5ghz(dev): 660 set_country("US") 661 dev[0].request("SET country US") 662 id = dev[0].add_network() 663 dev[0].set_network(id, "mode", "2") 664 dev[0].set_network_quoted(id, "ssid", "wpas-ap-5ghz") 665 dev[0].set_network(id, "key_mgmt", "NONE") 666 dev[0].set_network(id, "frequency", "5180") 667 dev[0].set_network(id, "scan_freq", "5180") 668 dev[0].select_network(id) 669 wait_ap_ready(dev[0]) 670 671 dev[1].connect("wpas-ap-5ghz", key_mgmt="NONE", scan_freq="5180") 672 dev[1].request("DISCONNECT") 673 dev[1].wait_disconnected() 674 675def test_wpas_ap_open_vht80(dev): 676 """wpa_supplicant AP mode - VHT 80 MHz""" 677 id = dev[0].add_network() 678 dev[0].set("country", "FI") 679 try: 680 dev[0].set_network(id, "mode", "2") 681 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 682 dev[0].set_network(id, "key_mgmt", "NONE") 683 dev[0].set_network(id, "frequency", "5180") 684 dev[0].set_network(id, "scan_freq", "5180") 685 dev[0].set_network(id, "vht", "1") 686 dev[0].set_network(id, "vht_center_freq1", "5210") 687 dev[0].set_network(id, "max_oper_chwidth", "1") 688 dev[0].set_network(id, "ht40", "1") 689 dev[0].select_network(id) 690 wait_ap_ready(dev[0]) 691 692 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="5180") 693 sig = dev[1].request("SIGNAL_POLL").splitlines() 694 hwsim_utils.test_connectivity(dev[0], dev[1]) 695 dev[1].request("DISCONNECT") 696 dev[1].wait_disconnected() 697 if "FREQUENCY=5180" not in sig: 698 raise Exception("Unexpected SIGNAL_POLL value(1): " + str(sig)) 699 if "WIDTH=80 MHz" not in sig: 700 raise Exception("Unexpected SIGNAL_POLL value(2): " + str(sig)) 701 finally: 702 set_country("00") 703 dev[0].set("country", "00") 704 dev[1].flush_scan_cache() 705 706def test_wpas_ap_no_ht(dev): 707 """wpa_supplicant AP mode - HT disabled""" 708 id = dev[0].add_network() 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", "2412") 713 dev[0].set_network(id, "scan_freq", "2412") 714 dev[0].set_network(id, "ht", "0") 715 dev[0].set_network(id, "wps_disabled", "1") 716 dev[0].select_network(id) 717 wait_ap_ready(dev[0]) 718 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 719 sig = dev[1].request("SIGNAL_POLL").splitlines() 720 dev[1].request("DISCONNECT") 721 dev[1].wait_disconnected() 722 dev[0].request("REMOVE_NETWORK all") 723 dev[0].wait_disconnected() 724 725 id = dev[0].add_network() 726 dev[0].set_network(id, "mode", "2") 727 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 728 dev[0].set_network(id, "key_mgmt", "NONE") 729 dev[0].set_network(id, "frequency", "2412") 730 dev[0].set_network(id, "scan_freq", "2412") 731 dev[0].set_network(id, "wps_disabled", "1") 732 dev[0].select_network(id) 733 wait_ap_ready(dev[0]) 734 dev[1].flush_scan_cache() 735 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 736 sig2 = dev[1].request("SIGNAL_POLL").splitlines() 737 dev[1].request("DISCONNECT") 738 dev[1].wait_disconnected() 739 dev[0].request("REMOVE_NETWORK all") 740 dev[0].wait_disconnected() 741 742 if "WIDTH=20 MHz (no HT)" not in sig: 743 raise Exception("HT was not disabled: " + str(sig)) 744 if "WIDTH=20 MHz" not in sig2: 745 raise Exception("HT was not enabled: " + str(sig2)) 746 747def test_wpas_ap_async_fail(dev): 748 """wpa_supplicant AP mode - Async failure""" 749 id = dev[0].add_network() 750 dev[0].set("country", "FI") 751 try: 752 dev[0].set_network(id, "mode", "2") 753 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 754 dev[0].set_network(id, "key_mgmt", "NONE") 755 dev[0].set_network(id, "frequency", "5180") 756 dev[0].set_network(id, "scan_freq", "5180") 757 dev[0].set_network(id, "vht", "1") 758 dev[0].set_network(id, "vht_center_freq1", "5210") 759 dev[0].set_network(id, "max_oper_chwidth", "1") 760 dev[0].set_network(id, "ht40", "1") 761 762 with alloc_fail(dev[0], 1, 763 "nl80211_get_scan_results;ieee80211n_check_scan"): 764 dev[0].select_network(id) 765 dev[0].wait_disconnected() 766 finally: 767 clear_regdom_dev(dev) 768 769def test_wpas_ap_sae(dev): 770 """wpa_supplicant AP mode - SAE using psk""" 771 run_wpas_ap_sae(dev, False) 772 773def test_wpas_ap_sae_password(dev): 774 """wpa_supplicant AP mode - SAE using sae_password""" 775 run_wpas_ap_sae(dev, True) 776 777def test_wpas_ap_sae_pwe_1(dev): 778 """wpa_supplicant AP mode - SAE using sae_password and sae_pwe=1""" 779 try: 780 dev[0].set("sae_pwe", "1") 781 dev[1].set("sae_pwe", "1") 782 run_wpas_ap_sae(dev, True, sae_password_id=True) 783 finally: 784 dev[0].set("sae_pwe", "0") 785 dev[1].set("sae_pwe", "0") 786 787def run_wpas_ap_sae(dev, sae_password, sae_password_id=False): 788 if "SAE" not in dev[0].get_capability("auth_alg"): 789 raise HwsimSkip("SAE not supported") 790 if "SAE" not in dev[1].get_capability("auth_alg"): 791 raise HwsimSkip("SAE not supported") 792 dev[0].request("SET sae_groups ") 793 id = dev[0].add_network() 794 dev[0].set_network(id, "mode", "2") 795 dev[0].set_network_quoted(id, "ssid", "wpas-ap-sae") 796 dev[0].set_network(id, "proto", "WPA2") 797 dev[0].set_network(id, "key_mgmt", "SAE") 798 dev[0].set_network(id, "pairwise", "CCMP") 799 dev[0].set_network(id, "group", "CCMP") 800 if sae_password: 801 dev[0].set_network_quoted(id, "sae_password", "12345678") 802 else: 803 dev[0].set_network_quoted(id, "psk", "12345678") 804 if sae_password_id: 805 pw_id = "pw id" 806 dev[0].set_network_quoted(id, "sae_password_id", pw_id) 807 else: 808 pw_id = None 809 dev[0].set_network(id, "frequency", "2412") 810 dev[0].set_network(id, "scan_freq", "2412") 811 dev[0].set_network(id, "wps_disabled", "1") 812 dev[0].select_network(id) 813 wait_ap_ready(dev[0]) 814 815 dev[1].request("SET sae_groups ") 816 dev[1].connect("wpas-ap-sae", key_mgmt="SAE", sae_password="12345678", 817 sae_password_id=pw_id, scan_freq="2412") 818 819def test_wpas_ap_scan(dev, apdev): 820 """wpa_supplicant AP mode and scanning""" 821 dev[0].flush_scan_cache() 822 823 hapd = hostapd.add_ap(apdev[0], {"ssid": "open"}) 824 bssid = hapd.own_addr() 825 826 id = dev[0].add_network() 827 dev[0].set_network(id, "mode", "2") 828 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 829 dev[0].set_network(id, "key_mgmt", "NONE") 830 dev[0].set_network(id, "frequency", "2412") 831 dev[0].set_network(id, "scan_freq", "2412") 832 dev[0].select_network(id) 833 wait_ap_ready(dev[0]) 834 dev[0].dump_monitor() 835 836 if "OK" not in dev[0].request("SCAN freq=2412"): 837 raise Exception("SCAN command not accepted") 838 ev = dev[0].wait_event(["CTRL-EVENT-SCAN-RESULTS", 839 "CTRL-EVENT-SCAN-FAILED"], 15) 840 if ev is None: 841 raise Exception("Scan result timed out") 842 if "CTRL-EVENT-SCAN-FAILED ret=-95" in ev: 843 # Scanning in AP mode not supported 844 return 845 if "CTRL-EVENT-SCAN-FAILED" in ev: 846 raise Exception("Unexpected scan failure reason: " + ev) 847 if "CTRL-EVENT-SCAN-RESULTS" in ev: 848 bss = dev[0].get_bss(bssid) 849 if not bss: 850 raise Exception("AP not found in scan") 851 852def test_wpas_ap_sae(dev): 853 """wpa_supplicant AP mode - SAE using psk""" 854 run_wpas_ap_sae(dev, False) 855 856def test_wpas_ap_sae_and_psk_transition_disable(dev): 857 """wpa_supplicant AP mode - SAE+PSK transition disable indication""" 858 if "SAE" not in dev[0].get_capability("auth_alg"): 859 raise HwsimSkip("SAE not supported") 860 if "SAE" not in dev[1].get_capability("auth_alg"): 861 raise HwsimSkip("SAE not supported") 862 dev[0].set("sae_groups", "") 863 id = dev[0].add_network() 864 dev[0].set_network(id, "mode", "2") 865 dev[0].set_network_quoted(id, "ssid", "wpas-ap-sae") 866 dev[0].set_network(id, "proto", "WPA2") 867 dev[0].set_network(id, "key_mgmt", "SAE") 868 dev[0].set_network(id, "transition_disable", "1") 869 dev[0].set_network(id, "ieee80211w", "1") 870 dev[0].set_network(id, "pairwise", "CCMP") 871 dev[0].set_network(id, "group", "CCMP") 872 dev[0].set_network_quoted(id, "psk", "12345678") 873 dev[0].set_network(id, "frequency", "2412") 874 dev[0].set_network(id, "scan_freq", "2412") 875 dev[0].set_network(id, "wps_disabled", "1") 876 dev[0].select_network(id) 877 wait_ap_ready(dev[0]) 878 879 dev[1].set("sae_groups", "") 880 dev[1].connect("wpas-ap-sae", key_mgmt="SAE WPA-PSK", 881 psk="12345678", ieee80211w="1", 882 scan_freq="2412") 883 ev = dev[1].wait_event(["TRANSITION-DISABLE"], timeout=1) 884 if ev is None: 885 raise Exception("Transition disable not indicated") 886 if ev.split(' ')[1] != "01": 887 raise Exception("Unexpected transition disable bitmap: " + ev) 888 889 val = dev[1].get_network(id, "ieee80211w") 890 if val != "2": 891 raise Exception("Unexpected ieee80211w value: " + val) 892 val = dev[1].get_network(id, "key_mgmt") 893 if val != "SAE": 894 raise Exception("Unexpected key_mgmt value: " + val) 895 val = dev[1].get_network(id, "group") 896 if val != "CCMP": 897 raise Exception("Unexpected group value: " + val) 898 val = dev[1].get_network(id, "proto") 899 if val != "RSN": 900 raise Exception("Unexpected proto value: " + val) 901 902 dev[1].request("DISCONNECT") 903 dev[1].wait_disconnected() 904 dev[1].request("RECONNECT") 905 dev[1].wait_connected() 906 907def test_wpas_ap_vendor_elems(dev): 908 """wpa_supplicant AP mode - vendor elements""" 909 id = dev[0].add_network() 910 dev[0].set_network(id, "mode", "2") 911 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open") 912 dev[0].set_network(id, "key_mgmt", "NONE") 913 dev[0].set_network(id, "frequency", "2412") 914 dev[0].set_network(id, "scan_freq", "2412") 915 dev[0].select_network(id) 916 wait_ap_ready(dev[0]) 917 918 beacon_elems = "dd0411223301" 919 dev[0].set("ap_vendor_elements", beacon_elems) 920 dev[0].set("ap_assocresp_elements", "dd0411223302") 921 if "OK" not in dev[0].request("UPDATE_BEACON"): 922 raise Exception("UPDATE_BEACON failed") 923 924 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412") 925 bss = dev[1].get_bss(dev[0].own_addr()) 926 if beacon_elems not in bss['ie']: 927 raise Exception("Vendor element not visible in scan results") 928