1 # wpa_supplicant AP mode tests
2 # Copyright (c) 2014, Qualcomm Atheros, Inc.
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
9 logger = logging.getLogger()
13 def wait_ap_ready(dev):
14 ev = dev.wait_event(["CTRL-EVENT-CONNECTED"])
16 raise Exception("AP failed to start")
18 def test_wpas_ap_open(dev):
19 """wpa_supplicant AP mode - open network"""
20 id = dev[0].add_network()
21 dev[0].set_network(id, "mode", "2")
22 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
23 dev[0].set_network(id, "key_mgmt", "NONE")
24 dev[0].set_network(id, "frequency", "2412")
25 dev[0].set_network(id, "scan_freq", "2412")
26 dev[0].select_network(id)
29 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
30 dev[2].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
31 hwsim_utils.test_connectivity(dev[0].ifname, dev[1].ifname)
32 hwsim_utils.test_connectivity(dev[1].ifname, dev[2].ifname)
34 addr1 = dev[1].p2p_interface_addr()
35 addr2 = dev[2].p2p_interface_addr()
36 addrs = [ addr1, addr2 ]
37 sta = dev[0].get_sta(None)
38 if sta['addr'] not in addrs:
39 raise Exception("Unexpected STA address")
40 sta1 = dev[0].get_sta(sta['addr'])
41 if sta1['addr'] not in addrs:
42 raise Exception("Unexpected STA address")
43 sta2 = dev[0].get_sta(sta['addr'], next=True)
44 if sta2['addr'] not in addrs:
45 raise Exception("Unexpected STA2 address")
46 sta3 = dev[0].get_sta(sta2['addr'], next=True)
48 raise Exception("Unexpected STA iteration result (did not stop)")
50 status = dev[0].get_status()
51 if status['mode'] != "AP":
52 raise Exception("Unexpected status mode")
56 dev[0].request("DEAUTHENTICATE " + addr1)
57 dev[0].request("DISASSOCIATE " + addr2)
58 ev = dev[1].wait_event(["CTRL-EVENT-DISCONNECTED"])
60 raise Exception("Disconnection timed out")
61 ev = dev[2].wait_event(["CTRL-EVENT-DISCONNECTED"])
63 raise Exception("Disconnection timed out")
64 ev = dev[1].wait_event(["CTRL-EVENT-CONNECTED"])
66 raise Exception("Reconnection timed out")
67 ev = dev[2].wait_event(["CTRL-EVENT-CONNECTED"])
69 raise Exception("Reconnection timed out")
70 dev[1].request("DISCONNECT")
71 dev[2].request("DISCONNECT")
73 def test_wpas_ap_wep(dev):
74 """wpa_supplicant AP mode - WEP"""
75 id = dev[0].add_network()
76 dev[0].set_network(id, "mode", "2")
77 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wep")
78 dev[0].set_network(id, "key_mgmt", "NONE")
79 dev[0].set_network(id, "frequency", "2412")
80 dev[0].set_network(id, "scan_freq", "2412")
81 dev[0].set_network_quoted(id, "wep_key0", "hello")
82 dev[0].select_network(id)
85 dev[1].connect("wpas-ap-wep", key_mgmt="NONE", wep_key0='"hello"',
87 hwsim_utils.test_connectivity(dev[0].ifname, dev[1].ifname)
88 dev[1].request("DISCONNECT")
90 def test_wpas_ap_no_ssid(dev):
91 """wpa_supplicant AP mode - invalid network configuration"""
92 id = dev[0].add_network()
93 dev[0].set_network(id, "mode", "2")
94 dev[0].set_network(id, "key_mgmt", "NONE")
95 dev[0].set_network(id, "frequency", "2412")
96 dev[0].set_network(id, "scan_freq", "2412")
97 dev[0].select_network(id)
98 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
100 raise Exception("Unexpected AP start")
102 def test_wpas_ap_default_frequency(dev):
103 """wpa_supplicant AP mode - default frequency"""
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, "scan_freq", "2412")
109 dev[0].select_network(id)
110 wait_ap_ready(dev[0])
111 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2462")
112 dev[1].request("DISCONNECT")
114 def test_wpas_ap_invalid_frequency(dev):
115 """wpa_supplicant AP mode - invalid frequency configuration"""
116 id = dev[0].add_network()
117 dev[0].set_network(id, "mode", "2")
118 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
119 dev[0].set_network(id, "key_mgmt", "NONE")
120 dev[0].set_network(id, "frequency", "2413")
121 dev[0].set_network(id, "scan_freq", "2412")
122 dev[0].select_network(id)
123 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
125 raise Exception("Unexpected AP start")
127 def test_wpas_ap_wps(dev):
128 """wpa_supplicant AP mode - WPS operations"""
129 id = dev[0].add_network()
130 dev[0].set_network(id, "mode", "2")
131 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
132 dev[0].set_network_quoted(id, "psk", "1234567890")
133 dev[0].set_network(id, "frequency", "2412")
134 dev[0].set_network(id, "scan_freq", "2412")
135 dev[0].select_network(id)
136 wait_ap_ready(dev[0])
137 bssid = dev[0].p2p_interface_addr()
139 logger.info("Test PBC mode start/stop")
140 if "FAIL" not in dev[0].request("WPS_CANCEL"):
141 raise Exception("Unexpected WPS_CANCEL success")
142 dev[0].request("WPS_PBC")
143 ev = dev[0].wait_event(["WPS-PBC-ACTIVE"])
145 raise Exception("PBC mode start timeout")
146 if "OK" not in dev[0].request("WPS_CANCEL"):
147 raise Exception("Unexpected WPS_CANCEL failure")
148 ev = dev[0].wait_event(["WPS-TIMEOUT"])
150 raise Exception("PBC mode disabling timeout")
152 logger.info("Test PBC protocol run")
153 dev[0].request("WPS_PBC")
154 ev = dev[0].wait_event(["WPS-PBC-ACTIVE"])
156 raise Exception("PBC mode start timeout")
157 dev[1].request("WPS_PBC")
158 ev = dev[1].wait_event(["CTRL-EVENT-CONNECTED"], timeout=30)
160 raise Exception("WPS PBC operation timed out")
161 hwsim_utils.test_connectivity(dev[0].ifname, dev[1].ifname)
163 logger.info("Test AP PIN to learn configuration")
164 pin = dev[0].request("WPS_AP_PIN random")
166 raise Exception("Could not generate random AP PIN")
167 if pin not in dev[0].request("WPS_AP_PIN get"):
168 raise Exception("Could not fetch current AP PIN")
169 dev[2].wps_reg(bssid, pin)
170 hwsim_utils.test_connectivity(dev[1].ifname, dev[2].ifname)
172 dev[1].request("REMOVE_NETWORK all")
173 dev[2].request("REMOVE_NETWORK all")
175 logger.info("Test AP PIN operations")
176 dev[0].request("WPS_AP_PIN disable")
177 dev[0].request("WPS_AP_PIN set " + pin + " 1")
179 if "FAIL" not in dev[0].request("WPS_AP_PIN get"):
180 raise Exception("AP PIN unexpectedly still enabled")
182 pin = dev[1].wps_read_pin()
183 dev[0].request("WPS_PIN any " + pin)
184 dev[1].request("WPS_PIN any " + pin)
185 ev = dev[1].wait_event(["CTRL-EVENT-CONNECTED"], timeout=30)
187 raise Exception("Association with the AP timed out")
188 dev[1].request("REMOVE_NETWORK all")
189 dev[1].dump_monitor()
191 dev[0].request("WPS_AP_PIN set 12345670")
192 dev[0].dump_monitor()
194 runs = ("88887777", "12340000", "00000000", "12345670")
196 logger.info("Try AP PIN " + pin)
197 dev[2].dump_monitor()
198 dev[2].request("WPS_REG " + bssid + " " + pin)
199 ev = dev[2].wait_event(["WPS-SUCCESS", "WPS-FAIL msg"], timeout=15)
201 raise Exception("WPS operation timed out")
202 if "WPS-SUCCESS" in ev:
203 raise Exception("WPS operation succeeded unexpectedly")
204 ev = dev[2].wait_event(["CTRL-EVENT-DISCONNECTED"])
206 raise Exception("Timeout while waiting for disconnection")
207 dev[2].request("WPS_CANCEL")
208 dev[2].request("REMOVE_NETWORK all")
209 ev = dev[0].wait_event(["WPS-AP-SETUP-LOCKED"])
211 raise Exception("WPS AP PIN not locked")