1# IBSS test cases 2# Copyright (c) 2013-2015, Jouni Malinen <j@w1.fi> 3# 4# This software may be distributed under the terms of the BSD license. 5# See README for more details. 6 7from remotehost import remote_compatible 8import logging 9logger = logging.getLogger() 10import time 11import re 12import subprocess 13 14import hwsim_utils 15from utils import * 16 17def connect_ibss_cmd(dev, id, freq=2412): 18 dev.dump_monitor() 19 dev.select_network(id, freq=str(freq)) 20 21def wait_ibss_connection(dev): 22 logger.info(dev.ifname + " waiting for IBSS start/join to complete") 23 ev = dev.wait_connected(timeout=20, 24 error="Connection to the IBSS timed out") 25 exp = r'<.>(CTRL-EVENT-CONNECTED) - Connection to ([0-9a-f:]*) completed.*' 26 s = re.split(exp, ev) 27 if len(s) < 3: 28 return None 29 return s[2] 30 31def wait_4way_handshake(dev1, dev2): 32 logger.info(dev1.ifname + " waiting for 4-way handshake completion with " + dev2.ifname + " " + dev2.p2p_interface_addr()) 33 ev = dev1.wait_event(["IBSS-RSN-COMPLETED " + dev2.p2p_interface_addr()], 34 timeout=20) 35 if ev is None: 36 raise Exception("4-way handshake in IBSS timed out") 37 38def wait_4way_handshake2(dev1, dev2, dev3): 39 logger.info(dev1.ifname + " waiting for 4-way handshake completion with " + dev2.ifname + " " + dev2.p2p_interface_addr() + " and " + dev3.p2p_interface_addr()) 40 ev = dev1.wait_event(["IBSS-RSN-COMPLETED " + dev2.p2p_interface_addr(), 41 "IBSS-RSN-COMPLETED " + dev3.p2p_interface_addr()], 42 timeout=20) 43 if ev is None: 44 raise Exception("4-way handshake in IBSS timed out") 45 ev = dev1.wait_event(["IBSS-RSN-COMPLETED " + dev2.p2p_interface_addr(), 46 "IBSS-RSN-COMPLETED " + dev3.p2p_interface_addr()], 47 timeout=20) 48 if ev is None: 49 raise Exception("4-way handshake in IBSS timed out") 50 51def add_ibss(dev, ssid, psk=None, proto=None, key_mgmt=None, pairwise=None, 52 group=None, beacon_int=None, bssid=None, scan_freq=None, 53 wep_key0=None, freq=2412, chwidth=0, group_rekey=0): 54 id = dev.add_network() 55 dev.set_network(id, "mode", "1") 56 dev.set_network(id, "frequency", str(freq)) 57 if chwidth > 0: 58 dev.set_network(id, "max_oper_chwidth", str(chwidth)) 59 if scan_freq: 60 dev.set_network(id, "scan_freq", str(scan_freq)) 61 dev.set_network_quoted(id, "ssid", ssid) 62 if psk: 63 dev.set_network_quoted(id, "psk", psk) 64 if proto: 65 dev.set_network(id, "proto", proto) 66 if key_mgmt: 67 dev.set_network(id, "key_mgmt", key_mgmt) 68 if pairwise: 69 dev.set_network(id, "pairwise", pairwise) 70 if group: 71 dev.set_network(id, "group", group) 72 if beacon_int: 73 dev.set_network(id, "beacon_int", beacon_int) 74 if bssid: 75 dev.set_network(id, "bssid", bssid) 76 if wep_key0: 77 dev.set_network(id, "wep_key0", wep_key0) 78 if group_rekey: 79 dev.set_network(id, "group_rekey", str(group_rekey)) 80 dev.request("ENABLE_NETWORK " + str(id) + " no-connect") 81 return id 82 83def add_ibss_rsn(dev, ssid, group_rekey=0, scan_freq=None): 84 return add_ibss(dev, ssid, "12345678", "RSN", "WPA-PSK", "CCMP", "CCMP", 85 group_rekey=group_rekey, scan_freq=scan_freq) 86 87def add_ibss_rsn_tkip(dev, ssid): 88 return add_ibss(dev, ssid, "12345678", "RSN", "WPA-PSK", "TKIP", "TKIP") 89 90def add_ibss_wpa_none(dev, ssid): 91 return add_ibss(dev, ssid, "12345678", "WPA", "WPA-NONE", "TKIP", "TKIP") 92 93def add_ibss_wpa_none_ccmp(dev, ssid): 94 return add_ibss(dev, ssid, "12345678", "WPA", "WPA-NONE", "CCMP", "CCMP") 95 96def test_ibss_rsn(dev): 97 """IBSS RSN""" 98 ssid = "ibss-rsn" 99 100 logger.info("Start IBSS on the first STA") 101 id = add_ibss_rsn(dev[0], ssid) 102 # FIX: For now, this disables HT to avoid a strange issue with mac80211 103 # frame reordering during the final test_connectivity() call. Once that is 104 # figured out, these disable_ht=1 calls should be removed from the test 105 # case. 106 dev[0].set_network(id, "disable_ht", "1") 107 connect_ibss_cmd(dev[0], id) 108 bssid0 = wait_ibss_connection(dev[0]) 109 110 logger.info("Join two STAs to the IBSS") 111 112 id = add_ibss_rsn(dev[1], ssid) 113 dev[1].set_network(id, "disable_ht", "1") 114 connect_ibss_cmd(dev[1], id) 115 bssid1 = wait_ibss_connection(dev[1]) 116 if bssid0 != bssid1: 117 logger.info("STA0 BSSID " + bssid0 + " differs from STA1 BSSID " + bssid1) 118 # try to merge with a scan 119 dev[1].scan() 120 wait_4way_handshake(dev[0], dev[1]) 121 wait_4way_handshake(dev[1], dev[0]) 122 123 id = add_ibss_rsn(dev[2], ssid) 124 connect_ibss_cmd(dev[2], id) 125 bssid2 = wait_ibss_connection(dev[2]) 126 if bssid0 != bssid2: 127 logger.info("STA0 BSSID " + bssid0 + " differs from STA2 BSSID " + bssid2) 128 # try to merge with a scan 129 dev[2].scan() 130 wait_4way_handshake(dev[0], dev[2]) 131 wait_4way_handshake2(dev[2], dev[0], dev[1]) 132 133 # Allow some time for all peers to complete key setup 134 time.sleep(3) 135 hwsim_utils.test_connectivity(dev[0], dev[1]) 136 hwsim_utils.test_connectivity(dev[0], dev[2]) 137 hwsim_utils.test_connectivity(dev[1], dev[2]) 138 139 dev[1].request("REMOVE_NETWORK all") 140 time.sleep(1) 141 id = add_ibss_rsn(dev[1], ssid) 142 dev[1].set_network(id, "disable_ht", "1") 143 connect_ibss_cmd(dev[1], id) 144 bssid1 = wait_ibss_connection(dev[1]) 145 if bssid0 != bssid1: 146 logger.info("STA0 BSSID " + bssid0 + " differs from STA1 BSSID " + bssid1) 147 # try to merge with a scan 148 dev[1].scan() 149 wait_4way_handshake(dev[0], dev[1]) 150 wait_4way_handshake(dev[1], dev[0]) 151 time.sleep(3) 152 hwsim_utils.test_connectivity(dev[0], dev[1]) 153 154 if "OK" not in dev[0].request("IBSS_RSN " + dev[1].p2p_interface_addr()): 155 raise Exception("IBSS_RSN command failed") 156 157 key_mgmt = dev[0].get_status_field("key_mgmt") 158 if key_mgmt != "WPA2-PSK": 159 raise Exception("Unexpected STATUS key_mgmt: " + key_mgmt) 160 161def test_ibss_rsn_group_rekey(dev): 162 """IBSS RSN group rekeying""" 163 ssid = "ibss-rsn" 164 165 logger.info("Start IBSS on the first STA") 166 id = add_ibss_rsn(dev[0], ssid, group_rekey=4, scan_freq=2412) 167 connect_ibss_cmd(dev[0], id) 168 bssid0 = wait_ibss_connection(dev[0]) 169 dev[0].dump_monitor() 170 171 logger.info("Join two STAs to the IBSS") 172 173 dev[1].scan_for_bss(bssid0, freq=2412) 174 id = add_ibss_rsn(dev[1], ssid, scan_freq=2412) 175 connect_ibss_cmd(dev[1], id) 176 bssid1 = wait_ibss_connection(dev[1]) 177 if bssid0 != bssid1: 178 raise Exception("STA0 BSSID " + bssid0 + " differs from STA1 BSSID " + bssid1) 179 wait_4way_handshake(dev[0], dev[1]) 180 wait_4way_handshake(dev[1], dev[0]) 181 dev[0].dump_monitor() 182 dev[1].dump_monitor() 183 184 hwsim_utils.test_connectivity(dev[0], dev[1]) 185 ev = dev[1].wait_event(["RSN: Group rekeying completed"], timeout=10) 186 if ev is None: 187 raise Exception("No group rekeying reported") 188 hwsim_utils.test_connectivity(dev[0], dev[1]) 189 190def test_ibss_wpa_none(dev): 191 """IBSS WPA-None""" 192 skip_without_tkip(dev[0]) 193 skip_without_tkip(dev[1]) 194 skip_without_tkip(dev[2]) 195 ssid = "ibss-wpa-none" 196 197 logger.info("Start IBSS on the first STA") 198 id = add_ibss_wpa_none(dev[0], ssid) 199 connect_ibss_cmd(dev[0], id) 200 bssid0 = wait_ibss_connection(dev[0]) 201 202 # This is a bit ugly, but no one really cares about WPA-None, so there may 203 # not be enough justification to clean this up.. For now, wpa_supplicant 204 # will show two connection events with mac80211_hwsim where the first one 205 # comes with all zeros address. 206 if bssid0 == "00:00:00:00:00:00": 207 logger.info("Waiting for real BSSID on the first STA") 208 bssid0 = wait_ibss_connection(dev[0]) 209 210 logger.info("Join two STAs to the IBSS") 211 212 id = add_ibss_wpa_none(dev[1], ssid) 213 connect_ibss_cmd(dev[1], id) 214 id = add_ibss_wpa_none(dev[2], ssid) 215 connect_ibss_cmd(dev[2], id) 216 217 bssid1 = wait_ibss_connection(dev[1]) 218 if bssid0 != bssid1: 219 logger.info("STA0 BSSID " + bssid0 + " differs from STA1 BSSID " + bssid1) 220 bssid1 = wait_ibss_connection(dev[1]) 221 222 bssid2 = wait_ibss_connection(dev[2]) 223 if bssid0 != bssid2: 224 logger.info("STA0 BSSID " + bssid0 + " differs from STA2 BSSID " + bssid2) 225 bssid2 = wait_ibss_connection(dev[2]) 226 227 logger.info("bssid0=%s bssid1=%s bssid2=%s" % (bssid0, bssid1, bssid2)) 228 229 bss = dev[0].get_bss(bssid0) 230 if not bss: 231 bss = dev[1].get_bss(bssid1) 232 if not bss: 233 raise Exception("Could not find BSS entry for IBSS") 234 if 'flags' not in bss: 235 raise Exception("Could not get BSS flags from BSS table") 236 if "[WPA-None-TKIP]" not in bss['flags']: 237 raise Exception("Unexpected BSS flags: " + bss['flags']) 238 239 # Allow some time for all peers to complete key setup 240 time.sleep(1) 241 242 # This is supposed to work, but looks like WPA-None does not work with 243 # mac80211 currently.. 244 try: 245 hwsim_utils.test_connectivity(dev[0], dev[1]) 246 except Exception as e: 247 logger.info("Ignoring known connectivity failure: " + str(e)) 248 try: 249 hwsim_utils.test_connectivity(dev[0], dev[2]) 250 except Exception as e: 251 logger.info("Ignoring known connectivity failure: " + str(e)) 252 try: 253 hwsim_utils.test_connectivity(dev[1], dev[2]) 254 except Exception as e: 255 logger.info("Ignoring known connectivity failure: " + str(e)) 256 257 key_mgmt = dev[0].get_status_field("key_mgmt") 258 if key_mgmt != "WPA-NONE": 259 raise Exception("Unexpected STATUS key_mgmt: " + key_mgmt) 260 261def test_ibss_wpa_none_ccmp(dev): 262 """IBSS WPA-None/CCMP""" 263 skip_without_tkip(dev[0]) 264 skip_without_tkip(dev[1]) 265 ssid = "ibss-wpa-none" 266 267 logger.info("Start IBSS on the first STA") 268 id = add_ibss_wpa_none(dev[0], ssid) 269 connect_ibss_cmd(dev[0], id) 270 bssid0 = wait_ibss_connection(dev[0]) 271 272 # This is a bit ugly, but no one really cares about WPA-None, so there may 273 # not be enough justification to clean this up.. For now, wpa_supplicant 274 # will show two connection events with mac80211_hwsim where the first one 275 # comes with all zeros address. 276 if bssid0 == "00:00:00:00:00:00": 277 logger.info("Waiting for real BSSID on the first STA") 278 bssid0 = wait_ibss_connection(dev[0]) 279 280 281 logger.info("Join a STA to the IBSS") 282 id = add_ibss_wpa_none(dev[1], ssid) 283 connect_ibss_cmd(dev[1], id) 284 285 bssid1 = wait_ibss_connection(dev[1]) 286 if bssid0 != bssid1: 287 logger.info("STA0 BSSID " + bssid0 + " differs from STA1 BSSID " + bssid1) 288 bssid1 = wait_ibss_connection(dev[1]) 289 290 logger.info("bssid0=%s bssid1=%s" % (bssid0, bssid1)) 291 292 # Allow some time for all peers to complete key setup 293 time.sleep(1) 294 295 # This is supposed to work, but looks like WPA-None does not work with 296 # mac80211 currently.. 297 try: 298 hwsim_utils.test_connectivity(dev[0], dev[1]) 299 except Exception as e: 300 logger.info("Ignoring known connectivity failure: " + str(e)) 301 302def test_ibss_open(dev): 303 """IBSS open (no security)""" 304 ssid = "ibss" 305 id = add_ibss(dev[0], ssid, key_mgmt="NONE", beacon_int="150") 306 connect_ibss_cmd(dev[0], id) 307 bssid0 = wait_ibss_connection(dev[0]) 308 309 id = add_ibss(dev[1], ssid, key_mgmt="NONE", beacon_int="200") 310 connect_ibss_cmd(dev[1], id) 311 bssid1 = wait_ibss_connection(dev[1]) 312 if bssid0 != bssid1: 313 logger.info("STA0 BSSID " + bssid0 + " differs from STA1 BSSID " + bssid1) 314 315 res = dev[0].request("SCAN_RESULTS") 316 if "[IBSS]" not in res: 317 res = dev[1].request("SCAN_RESULTS") 318 if "[IBSS]" not in res: 319 raise Exception("IBSS flag missing from scan results: " + res) 320 bss = dev[0].get_bss(bssid0) 321 if not bss: 322 bss = dev[1].get_bss(bssid1) 323 if not bss: 324 raise Exception("Could not find BSS entry for IBSS") 325 if 'flags' not in bss: 326 raise Exception("Could not get BSS flags from BSS table") 327 if "[IBSS]" not in bss['flags']: 328 raise Exception("Unexpected BSS flags: " + bss['flags']) 329 330 freq0 = dev[0].get_status_field("freq") 331 freq1 = dev[1].get_status_field("freq") 332 if freq0 != "2412" or freq1 != "2412": 333 raise Exception("IBSS operating frequency not reported correctly (%s %s)" % (freq0, freq1)) 334 335 key_mgmt = dev[0].get_status_field("key_mgmt") 336 if key_mgmt != "NONE": 337 raise Exception("Unexpected STATUS key_mgmt: " + key_mgmt) 338 339def test_ibss_open_fixed_bssid(dev): 340 """IBSS open (no security) and fixed BSSID""" 341 ssid = "ibss" 342 bssid = "02:11:22:33:44:55" 343 try: 344 dev[0].request("AP_SCAN 2") 345 add_ibss(dev[0], ssid, key_mgmt="NONE", bssid=bssid, beacon_int="150") 346 dev[0].request("REASSOCIATE") 347 348 dev[1].request("AP_SCAN 2") 349 add_ibss(dev[1], ssid, key_mgmt="NONE", bssid=bssid, beacon_int="200") 350 dev[1].request("REASSOCIATE") 351 352 bssid0 = wait_ibss_connection(dev[0]) 353 bssid1 = wait_ibss_connection(dev[1]) 354 if bssid0 != bssid: 355 raise Exception("STA0 BSSID " + bssid0 + " differs from fixed BSSID " + bssid) 356 if bssid1 != bssid: 357 raise Exception("STA0 BSSID " + bssid0 + " differs from fixed BSSID " + bssid) 358 finally: 359 dev[0].request("AP_SCAN 1") 360 dev[1].request("AP_SCAN 1") 361 362def test_ibss_open_retry(dev): 363 """IBSS open (no security) with cfg80211 retry workaround""" 364 subprocess.check_call(['iw', 'dev', dev[0].ifname, 'set', 'type', 'adhoc']) 365 subprocess.check_call(['iw', 'dev', dev[0].ifname, 'ibss', 'join', 366 'ibss-test', '2412', 'HT20', 'fixed-freq', 367 '02:22:33:44:55:66']) 368 ssid = "ibss" 369 try: 370 dev[0].request("AP_SCAN 2") 371 id = add_ibss(dev[0], ssid, key_mgmt="NONE", beacon_int="150", 372 bssid="02:33:44:55:66:77", scan_freq=2412) 373 #connect_ibss_cmd(dev[0], id) 374 dev[0].request("REASSOCIATE") 375 bssid0 = wait_ibss_connection(dev[0]) 376 377 subprocess.check_call(['iw', 'dev', dev[0].ifname, 'ibss', 'leave']) 378 time.sleep(1) 379 dev[0].request("DISCONNECT") 380 finally: 381 dev[0].request("AP_SCAN 1") 382 383def test_ibss_rsn_tkip(dev): 384 """IBSS RSN with TKIP as the cipher""" 385 skip_without_tkip(dev[0]) 386 skip_without_tkip(dev[1]) 387 ssid = "ibss-rsn-tkip" 388 389 id = add_ibss_rsn_tkip(dev[0], ssid) 390 connect_ibss_cmd(dev[0], id) 391 bssid0 = wait_ibss_connection(dev[0]) 392 393 id = add_ibss_rsn_tkip(dev[1], ssid) 394 connect_ibss_cmd(dev[1], id) 395 bssid1 = wait_ibss_connection(dev[1]) 396 if bssid0 != bssid1: 397 logger.info("STA0 BSSID " + bssid0 + " differs from STA1 BSSID " + bssid1) 398 # try to merge with a scan 399 dev[1].scan() 400 wait_4way_handshake(dev[0], dev[1]) 401 wait_4way_handshake(dev[1], dev[0]) 402 403def test_ibss_wep(dev): 404 """IBSS with WEP""" 405 check_wep_capa(dev[0]) 406 check_wep_capa(dev[1]) 407 408 ssid = "ibss-wep" 409 410 id = add_ibss(dev[0], ssid, key_mgmt="NONE", wep_key0='"hello"') 411 connect_ibss_cmd(dev[0], id) 412 bssid0 = wait_ibss_connection(dev[0]) 413 414 id = add_ibss(dev[1], ssid, key_mgmt="NONE", wep_key0='"hello"') 415 connect_ibss_cmd(dev[1], id) 416 bssid1 = wait_ibss_connection(dev[1]) 417 418@remote_compatible 419def test_ibss_rsn_error_case(dev): 420 """IBSS RSN regression test for IBSS_RSN prior IBSS setup""" 421 if "FAIL" not in dev[0].request("IBSS_RSN 02:03:04:05:06:07"): 422 raise Exception("Unexpected IBSS_RSN result") 423 424def test_ibss_5ghz(dev): 425 """IBSS on 5 GHz band""" 426 try: 427 _test_ibss_5ghz(dev) 428 finally: 429 subprocess.call(['iw', 'reg', 'set', '00']) 430 dev[0].flush_scan_cache() 431 dev[1].flush_scan_cache() 432 433def _test_ibss_5ghz(dev): 434 subprocess.call(['iw', 'reg', 'set', 'US']) 435 for i in range(2): 436 for j in range(5): 437 ev = dev[i].wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=5) 438 if ev is None: 439 raise Exception("No regdom change event") 440 if "alpha2=US" in ev: 441 break 442 dev[i].dump_monitor() 443 444 ssid = "ibss" 445 id = add_ibss(dev[0], ssid, key_mgmt="NONE", beacon_int="150", freq=5180) 446 connect_ibss_cmd(dev[0], id, freq=5180) 447 bssid0 = wait_ibss_connection(dev[0]) 448 449 dev[1].scan_for_bss(bssid0, freq=5180) 450 id = add_ibss(dev[1], ssid, key_mgmt="NONE", beacon_int="200", freq=5180) 451 connect_ibss_cmd(dev[1], id, freq=5180) 452 bssid1 = wait_ibss_connection(dev[1]) 453 if bssid0 != bssid1: 454 logger.info("STA0 BSSID " + bssid0 + " differs from STA1 BSSID " + bssid1) 455 456 dev[0].request("DISCONNECT") 457 dev[1].request("DISCONNECT") 458 dev[0].dump_monitor() 459 dev[1].dump_monitor() 460 461def test_ibss_vht_80p80(dev): 462 """IBSS on VHT 80+80 MHz channel""" 463 try: 464 _test_ibss_vht_80p80(dev) 465 finally: 466 subprocess.call(['iw', 'reg', 'set', '00']) 467 dev[0].flush_scan_cache() 468 dev[1].flush_scan_cache() 469 470def _test_ibss_vht_80p80(dev): 471 subprocess.call(['iw', 'reg', 'set', 'US']) 472 for i in range(2): 473 for j in range(5): 474 ev = dev[i].wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=5) 475 if ev is None: 476 raise Exception("No regdom change event") 477 if "alpha2=US" in ev: 478 break 479 dev[i].dump_monitor() 480 481 ssid = "ibss" 482 id = add_ibss(dev[0], ssid, key_mgmt="NONE", freq=5180, chwidth=3) 483 connect_ibss_cmd(dev[0], id, freq=5180) 484 bssid0 = wait_ibss_connection(dev[0]) 485 sig = dev[0].request("SIGNAL_POLL").splitlines() 486 if "FREQUENCY=5180" not in sig: 487 raise Exception("Unexpected SIGNAL_POLL value(1): " + str(sig)) 488 if "WIDTH=80+80 MHz" not in sig: 489 raise Exception("Unexpected SIGNAL_POLL value(2): " + str(sig)) 490 if "CENTER_FRQ1=5210" not in sig: 491 raise Exception("Unexpected SIGNAL_POLL value(3): " + str(sig)) 492 if "CENTER_FRQ2=5775" not in sig: 493 raise Exception("Unexpected SIGNAL_POLL value(4): " + str(sig)) 494 495 dev[1].scan_for_bss(bssid0, freq=5180) 496 id = add_ibss(dev[1], ssid, key_mgmt="NONE", freq=5180, chwidth=3) 497 connect_ibss_cmd(dev[1], id, freq=5180) 498 bssid1 = wait_ibss_connection(dev[1]) 499 if bssid0 != bssid1: 500 logger.info("STA0 BSSID " + bssid0 + " differs from STA1 BSSID " + bssid1) 501 502 sig = dev[1].request("SIGNAL_POLL").splitlines() 503 if "FREQUENCY=5180" not in sig: 504 raise Exception("Unexpected SIGNAL_POLL value(1b): " + str(sig)) 505 logger.info("STA1 SIGNAL_POLL: " + str(sig)) 506 # For now, don't report errors on joining STA failing to get 80+80 MHZ 507 # since mac80211 missed functionality for that to work. 508 509 dev[0].request("DISCONNECT") 510 dev[1].request("DISCONNECT") 511 dev[0].dump_monitor() 512 dev[1].dump_monitor() 513 514def test_ibss_rsn_oom(dev): 515 """IBSS RSN OOM during wpa_init""" 516 with alloc_fail(dev[0], 1, "wpa_init"): 517 ssid = "ibss-rsn" 518 id = add_ibss_rsn(dev[0], ssid, scan_freq=2412) 519 connect_ibss_cmd(dev[0], id) 520 bssid0 = wait_ibss_connection(dev[0]) 521 dev[0].request("REMOVE_NETWORK all") 522 dev[0].dump_monitor() 523 524 with alloc_fail(dev[0], 1, "=ibss_rsn_init"): 525 ssid = "ibss-rsn" 526 id = add_ibss_rsn(dev[0], ssid, scan_freq=2412) 527 connect_ibss_cmd(dev[0], id) 528 bssid0 = wait_ibss_connection(dev[0]) 529 dev[0].request("REMOVE_NETWORK all") 530 dev[0].dump_monitor() 531 532def send_eapol_rx(dev, dst): 533 if "OK" not in dev.request("EAPOL_RX %s 0203005f02008a001000000000000000013a54fb19d8a785f5986bdc2ba800553550bc9513e6603eb50809154588c22b110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" % dst): 534 raise Exception("EAPOL_RX for %s failed" % dst) 535 536def test_ibss_rsn_eapol_trigger(dev): 537 """IBSS RSN and EAPOL trigger for a new peer""" 538 ssid = "ibss-rsn" 539 540 id = add_ibss_rsn(dev[0], ssid, scan_freq=2412) 541 connect_ibss_cmd(dev[0], id) 542 bssid0 = wait_ibss_connection(dev[0]) 543 544 send_eapol_rx(dev[0], "02:ff:00:00:00:01") 545 send_eapol_rx(dev[0], "02:ff:00:00:00:01") 546 547 dst = "02:ff:00:00:00:01" 548 logger.info("Too short EAPOL frame") 549 if "OK" not in dev[0].request("EAPOL_RX %s 0203005e02008a001000000000000000013a54fb19d8a785f5986bdc2ba800553550bc9513e6603eb50809154588c22b1100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" % dst): 550 raise Exception("EAPOL_RX for %s failed" % dst) 551 logger.info("RSN: EAPOL frame (type 255) discarded, not a Key frame") 552 if "OK" not in dev[0].request("EAPOL_RX %s 02ff005f02008a001000000000000000013a54fb19d8a785f5986bdc2ba800553550bc9513e6603eb50809154588c22b110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" % dst): 553 raise Exception("EAPOL_RX for %s failed" % dst) 554 logger.info("RSN: EAPOL frame payload size 96 invalid (frame size 99)") 555 if "OK" not in dev[0].request("EAPOL_RX %s 0203006002008a001000000000000000013a54fb19d8a785f5986bdc2ba800553550bc9513e6603eb50809154588c22b110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" % dst): 556 raise Exception("EAPOL_RX for %s failed" % dst) 557 logger.info("RSN: EAPOL-Key type (255) unknown, discarded") 558 if "OK" not in dev[0].request("EAPOL_RX %s 0203005fff008a001000000000000000013a54fb19d8a785f5986bdc2ba800553550bc9513e6603eb50809154588c22b110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" % dst): 559 raise Exception("EAPOL_RX for %s failed" % dst) 560 561 with alloc_fail(dev[0], 1, "ibss_rsn_rx_eapol"): 562 send_eapol_rx(dev[0], "02:ff:00:00:00:02") 563 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 564 565 with alloc_fail(dev[0], 1, "wpa_auth_sta_init;ibss_rsn_auth_init"): 566 send_eapol_rx(dev[0], "02:ff:00:00:00:03") 567 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 568 569 with alloc_fail(dev[0], 1, "=ibss_rsn_peer_init"): 570 send_eapol_rx(dev[0], "02:ff:00:00:00:04") 571 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 572 573 with alloc_fail(dev[0], 1, "ibss_rsn_process_rx_eapol"): 574 send_eapol_rx(dev[0], "02:ff:00:00:00:05") 575 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 576 577 with alloc_fail(dev[0], 1, 578 "wpa_sm_set_assoc_wpa_ie_default;ibss_rsn_supp_init"): 579 send_eapol_rx(dev[0], "02:ff:00:00:00:06") 580 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 581 582 with alloc_fail(dev[0], 1, "wpa_sm_init;ibss_rsn_supp_init"): 583 send_eapol_rx(dev[0], "02:ff:00:00:00:07") 584 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 585 586 with alloc_fail(dev[0], 1, "=ibss_rsn_supp_init"): 587 send_eapol_rx(dev[0], "02:ff:00:00:00:08") 588 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 589 590 with alloc_fail(dev[0], 1, "supp_alloc_eapol"): 591 send_eapol_rx(dev[0], "02:ff:00:00:00:09") 592 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 593 594 with alloc_fail(dev[0], 1, "wpa_validate_wpa_ie;ibss_rsn_auth_init"): 595 send_eapol_rx(dev[0], "02:ff:00:00:00:0a") 596 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 597 598 logger.info("RSN: Timeout on waiting Authentication frame response") 599 if "OK" not in dev[0].request("IBSS_RSN 02:ff:00:00:00:0b"): 600 raise Exception("Unexpected IBSS_RSN result") 601 time.sleep(1.1) 602