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 7 from remotehost import remote_compatible 8 import logging 9 logger = logging.getLogger() 10 import time 11 import re 12 import subprocess 13 14 import hwsim_utils 15 from utils import * 16 17 def connect_ibss_cmd(dev, id, freq=2412): 18 dev.dump_monitor() 19 dev.select_network(id, freq=str(freq)) 20 21 def 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 31 def 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 38 def 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 51 def 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 83 def 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 87 def add_ibss_rsn_tkip(dev, ssid): 88 return add_ibss(dev, ssid, "12345678", "RSN", "WPA-PSK", "TKIP", "TKIP") 89 90 def add_ibss_wpa_none(dev, ssid): 91 return add_ibss(dev, ssid, "12345678", "WPA", "WPA-NONE", "TKIP", "TKIP") 92 93 def add_ibss_wpa_none_ccmp(dev, ssid): 94 return add_ibss(dev, ssid, "12345678", "WPA", "WPA-NONE", "CCMP", "CCMP") 95 96 def 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 161 def 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 190 def 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 261 def 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 302 def 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 339 def 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 dev[0].request("DISCONNECT") 359 dev[1].request("DISCONNECT") 360 finally: 361 dev[0].request("AP_SCAN 1") 362 dev[1].request("AP_SCAN 1") 363 dev[0].flush_scan_cache() 364 dev[1].flush_scan_cache() 365 366 def test_ibss_open_retry(dev): 367 """IBSS open (no security) with cfg80211 retry workaround""" 368 subprocess.check_call(['iw', 'dev', dev[0].ifname, 'set', 'type', 'adhoc']) 369 subprocess.check_call(['iw', 'dev', dev[0].ifname, 'ibss', 'join', 370 'ibss-test', '2412', 'HT20', 'fixed-freq', 371 '02:22:33:44:55:66']) 372 ssid = "ibss" 373 try: 374 dev[0].request("AP_SCAN 2") 375 id = add_ibss(dev[0], ssid, key_mgmt="NONE", beacon_int="150", 376 bssid="02:33:44:55:66:77", scan_freq=2412) 377 #connect_ibss_cmd(dev[0], id) 378 dev[0].request("REASSOCIATE") 379 bssid0 = wait_ibss_connection(dev[0]) 380 381 subprocess.check_call(['iw', 'dev', dev[0].ifname, 'ibss', 'leave']) 382 time.sleep(1) 383 dev[0].request("DISCONNECT") 384 finally: 385 dev[0].request("AP_SCAN 1") 386 387 def test_ibss_rsn_tkip(dev): 388 """IBSS RSN with TKIP as the cipher""" 389 skip_without_tkip(dev[0]) 390 skip_without_tkip(dev[1]) 391 ssid = "ibss-rsn-tkip" 392 393 id = add_ibss_rsn_tkip(dev[0], ssid) 394 connect_ibss_cmd(dev[0], id) 395 bssid0 = wait_ibss_connection(dev[0]) 396 397 id = add_ibss_rsn_tkip(dev[1], ssid) 398 connect_ibss_cmd(dev[1], id) 399 bssid1 = wait_ibss_connection(dev[1]) 400 if bssid0 != bssid1: 401 logger.info("STA0 BSSID " + bssid0 + " differs from STA1 BSSID " + bssid1) 402 # try to merge with a scan 403 dev[1].scan() 404 wait_4way_handshake(dev[0], dev[1]) 405 wait_4way_handshake(dev[1], dev[0]) 406 407 def test_ibss_wep(dev): 408 """IBSS with WEP""" 409 check_wep_capa(dev[0]) 410 check_wep_capa(dev[1]) 411 412 ssid = "ibss-wep" 413 414 id = add_ibss(dev[0], ssid, key_mgmt="NONE", wep_key0='"hello"') 415 connect_ibss_cmd(dev[0], id) 416 bssid0 = wait_ibss_connection(dev[0]) 417 418 id = add_ibss(dev[1], ssid, key_mgmt="NONE", wep_key0='"hello"') 419 connect_ibss_cmd(dev[1], id) 420 bssid1 = wait_ibss_connection(dev[1]) 421 422 @remote_compatible 423 def test_ibss_rsn_error_case(dev): 424 """IBSS RSN regression test for IBSS_RSN prior IBSS setup""" 425 if "FAIL" not in dev[0].request("IBSS_RSN 02:03:04:05:06:07"): 426 raise Exception("Unexpected IBSS_RSN result") 427 428 def test_ibss_5ghz(dev): 429 """IBSS on 5 GHz band""" 430 try: 431 _test_ibss_5ghz(dev) 432 finally: 433 subprocess.call(['iw', 'reg', 'set', '00']) 434 dev[0].flush_scan_cache() 435 dev[1].flush_scan_cache() 436 437 def _test_ibss_5ghz(dev): 438 subprocess.call(['iw', 'reg', 'set', 'US']) 439 for i in range(2): 440 for j in range(5): 441 ev = dev[i].wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=5) 442 if ev is None: 443 raise Exception("No regdom change event") 444 if "alpha2=US" in ev: 445 break 446 dev[i].dump_monitor() 447 448 ssid = "ibss" 449 id = add_ibss(dev[0], ssid, key_mgmt="NONE", beacon_int="150", freq=5180) 450 connect_ibss_cmd(dev[0], id, freq=5180) 451 bssid0 = wait_ibss_connection(dev[0]) 452 453 dev[1].scan_for_bss(bssid0, freq=5180) 454 id = add_ibss(dev[1], ssid, key_mgmt="NONE", beacon_int="200", freq=5180) 455 connect_ibss_cmd(dev[1], id, freq=5180) 456 bssid1 = wait_ibss_connection(dev[1]) 457 if bssid0 != bssid1: 458 logger.info("STA0 BSSID " + bssid0 + " differs from STA1 BSSID " + bssid1) 459 460 dev[0].request("DISCONNECT") 461 dev[1].request("DISCONNECT") 462 dev[0].dump_monitor() 463 dev[1].dump_monitor() 464 465 def test_ibss_vht_80p80(dev): 466 """IBSS on VHT 80+80 MHz channel""" 467 try: 468 _test_ibss_vht_80p80(dev) 469 finally: 470 subprocess.call(['iw', 'reg', 'set', '00']) 471 dev[0].flush_scan_cache() 472 dev[1].flush_scan_cache() 473 474 def _test_ibss_vht_80p80(dev): 475 subprocess.call(['iw', 'reg', 'set', 'US']) 476 for i in range(2): 477 for j in range(5): 478 ev = dev[i].wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=5) 479 if ev is None: 480 raise Exception("No regdom change event") 481 if "alpha2=US" in ev: 482 break 483 dev[i].dump_monitor() 484 485 ssid = "ibss" 486 id = add_ibss(dev[0], ssid, key_mgmt="NONE", freq=5180, chwidth=3) 487 connect_ibss_cmd(dev[0], id, freq=5180) 488 bssid0 = wait_ibss_connection(dev[0]) 489 sig = dev[0].request("SIGNAL_POLL").splitlines() 490 if "FREQUENCY=5180" not in sig: 491 raise Exception("Unexpected SIGNAL_POLL value(1): " + str(sig)) 492 if "WIDTH=80+80 MHz" not in sig: 493 raise Exception("Unexpected SIGNAL_POLL value(2): " + str(sig)) 494 if "CENTER_FRQ1=5210" not in sig: 495 raise Exception("Unexpected SIGNAL_POLL value(3): " + str(sig)) 496 if "CENTER_FRQ2=5775" not in sig: 497 raise Exception("Unexpected SIGNAL_POLL value(4): " + str(sig)) 498 499 dev[1].scan_for_bss(bssid0, freq=5180) 500 id = add_ibss(dev[1], ssid, key_mgmt="NONE", freq=5180, chwidth=3) 501 connect_ibss_cmd(dev[1], id, freq=5180) 502 bssid1 = wait_ibss_connection(dev[1]) 503 if bssid0 != bssid1: 504 logger.info("STA0 BSSID " + bssid0 + " differs from STA1 BSSID " + bssid1) 505 506 sig = dev[1].request("SIGNAL_POLL").splitlines() 507 if "FREQUENCY=5180" not in sig: 508 raise Exception("Unexpected SIGNAL_POLL value(1b): " + str(sig)) 509 logger.info("STA1 SIGNAL_POLL: " + str(sig)) 510 # For now, don't report errors on joining STA failing to get 80+80 MHZ 511 # since mac80211 missed functionality for that to work. 512 513 dev[0].request("DISCONNECT") 514 dev[1].request("DISCONNECT") 515 dev[0].dump_monitor() 516 dev[1].dump_monitor() 517 518 def test_ibss_rsn_oom(dev): 519 """IBSS RSN OOM during wpa_init""" 520 with alloc_fail(dev[0], 1, "wpa_init"): 521 ssid = "ibss-rsn" 522 id = add_ibss_rsn(dev[0], ssid, scan_freq=2412) 523 connect_ibss_cmd(dev[0], id) 524 bssid0 = wait_ibss_connection(dev[0]) 525 dev[0].request("REMOVE_NETWORK all") 526 dev[0].dump_monitor() 527 528 with alloc_fail(dev[0], 1, "=ibss_rsn_init"): 529 ssid = "ibss-rsn" 530 id = add_ibss_rsn(dev[0], ssid, scan_freq=2412) 531 connect_ibss_cmd(dev[0], id) 532 bssid0 = wait_ibss_connection(dev[0]) 533 dev[0].request("REMOVE_NETWORK all") 534 dev[0].dump_monitor() 535 536 def send_eapol_rx(dev, dst): 537 if "OK" not in dev.request("EAPOL_RX %s 0203005f02008a001000000000000000013a54fb19d8a785f5986bdc2ba800553550bc9513e6603eb50809154588c22b110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" % dst): 538 raise Exception("EAPOL_RX for %s failed" % dst) 539 540 def test_ibss_rsn_eapol_trigger(dev): 541 """IBSS RSN and EAPOL trigger for a new peer""" 542 ssid = "ibss-rsn" 543 544 id = add_ibss_rsn(dev[0], ssid, scan_freq=2412) 545 connect_ibss_cmd(dev[0], id) 546 bssid0 = wait_ibss_connection(dev[0]) 547 548 send_eapol_rx(dev[0], "02:ff:00:00:00:01") 549 send_eapol_rx(dev[0], "02:ff:00:00:00:01") 550 551 dst = "02:ff:00:00:00:01" 552 logger.info("Too short EAPOL frame") 553 if "OK" not in dev[0].request("EAPOL_RX %s 0203005e02008a001000000000000000013a54fb19d8a785f5986bdc2ba800553550bc9513e6603eb50809154588c22b1100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" % dst): 554 raise Exception("EAPOL_RX for %s failed" % dst) 555 logger.info("RSN: EAPOL frame (type 255) discarded, not a Key frame") 556 if "OK" not in dev[0].request("EAPOL_RX %s 02ff005f02008a001000000000000000013a54fb19d8a785f5986bdc2ba800553550bc9513e6603eb50809154588c22b110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" % dst): 557 raise Exception("EAPOL_RX for %s failed" % dst) 558 logger.info("RSN: EAPOL frame payload size 96 invalid (frame size 99)") 559 if "OK" not in dev[0].request("EAPOL_RX %s 0203006002008a001000000000000000013a54fb19d8a785f5986bdc2ba800553550bc9513e6603eb50809154588c22b110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" % dst): 560 raise Exception("EAPOL_RX for %s failed" % dst) 561 logger.info("RSN: EAPOL-Key type (255) unknown, discarded") 562 if "OK" not in dev[0].request("EAPOL_RX %s 0203005fff008a001000000000000000013a54fb19d8a785f5986bdc2ba800553550bc9513e6603eb50809154588c22b110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" % dst): 563 raise Exception("EAPOL_RX for %s failed" % dst) 564 565 with alloc_fail(dev[0], 1, "ibss_rsn_rx_eapol"): 566 send_eapol_rx(dev[0], "02:ff:00:00:00:02") 567 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 568 569 with alloc_fail(dev[0], 1, "wpa_auth_sta_init;ibss_rsn_auth_init"): 570 send_eapol_rx(dev[0], "02:ff:00:00:00:03") 571 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 572 573 with alloc_fail(dev[0], 1, "=ibss_rsn_peer_init"): 574 send_eapol_rx(dev[0], "02:ff:00:00:00:04") 575 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 576 577 with alloc_fail(dev[0], 1, "ibss_rsn_process_rx_eapol"): 578 send_eapol_rx(dev[0], "02:ff:00:00:00:05") 579 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 580 581 with alloc_fail(dev[0], 1, 582 "wpa_sm_set_assoc_wpa_ie_default;ibss_rsn_supp_init"): 583 send_eapol_rx(dev[0], "02:ff:00:00:00:06") 584 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 585 586 with alloc_fail(dev[0], 1, "wpa_sm_init;ibss_rsn_supp_init"): 587 send_eapol_rx(dev[0], "02:ff:00:00:00:07") 588 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 589 590 with alloc_fail(dev[0], 1, "=ibss_rsn_supp_init"): 591 send_eapol_rx(dev[0], "02:ff:00:00:00:08") 592 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 593 594 with alloc_fail(dev[0], 1, "supp_alloc_eapol"): 595 send_eapol_rx(dev[0], "02:ff:00:00:00:09") 596 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 597 598 with alloc_fail(dev[0], 1, "wpa_validate_wpa_ie;ibss_rsn_auth_init"): 599 send_eapol_rx(dev[0], "02:ff:00:00:00:0a") 600 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL") 601 602 logger.info("RSN: Timeout on waiting Authentication frame response") 603 if "OK" not in dev[0].request("IBSS_RSN 02:ff:00:00:00:0b"): 604 raise Exception("Unexpected IBSS_RSN result") 605 time.sleep(1.1) 606