# This software may be distributed under the terms of the BSD license.
# See README for more details.
+import logging
+logger = logging.getLogger()
+import struct
+
import hostapd
import hwsim_utils
ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=2)
if ev is None:
raise Exception("Timeout on reconnection")
+
+def test_ap_open_assoc_timeout(dev, apdev):
+ """AP timing out association"""
+ ssid = "test"
+ hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "open" })
+ dev[0].scan(freq="2412")
+ hapd.set("ext_mgmt_frame_handling", "1")
+ dev[0].connect("open", key_mgmt="NONE", scan_freq="2412",
+ wait_connect=False)
+ for i in range(0, 10):
+ req = hapd.mgmt_rx()
+ if req is None:
+ raise Exception("MGMT RX wait timed out")
+ if req['subtype'] == 11:
+ break
+ req = None
+ if not req:
+ raise Exception("Authentication frame not received")
+
+ resp = {}
+ resp['fc'] = req['fc']
+ resp['da'] = req['sa']
+ resp['sa'] = req['da']
+ resp['bssid'] = req['bssid']
+ resp['payload'] = struct.pack('<HHH', 0, 2, 0)
+ hapd.mgmt_tx(resp)
+
+ assoc = 0
+ for i in range(0, 10):
+ req = hapd.mgmt_rx()
+ if req is None:
+ raise Exception("MGMT RX wait timed out")
+ if req['subtype'] == 0:
+ assoc += 1
+ if assoc == 3:
+ break
+ if assoc != 3:
+ raise Exception("Association Request frames not received: assoc=%d" % assoc)
+ hapd.set("ext_mgmt_frame_handling", "0")
+ ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=15)
+ if ev is None:
+ raise Exception("Timeout on connection")