]>
git.ipfire.org Git - thirdparty/hostap.git/blob - tests/hwsim/test_wpas_ap.py
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 if "FAIL" not in dev
[0].request("DEAUTHENTICATE 00:11:22:33:44:55"):
21 raise Exception("Unexpected DEAUTHENTICATE accepted")
22 if "FAIL" not in dev
[0].request("DISASSOCIATE 00:11:22:33:44:55"):
23 raise Exception("Unexpected DISASSOCIATE accepted")
24 if "FAIL" not in dev
[0].request("CHAN_SWITCH 0 2432"):
25 raise Exception("Unexpected CHAN_SWITCH accepted")
27 id = dev
[0].add_network()
28 dev
[0].set_network(id, "mode", "2")
29 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
30 dev
[0].set_network(id, "key_mgmt", "NONE")
31 dev
[0].set_network(id, "frequency", "2412")
32 dev
[0].set_network(id, "scan_freq", "2412")
33 dev
[0].select_network(id)
36 if "FAIL" not in dev
[0].request("DEAUTHENTICATE foo"):
37 raise Exception("Invalid DEAUTHENTICATE accepted")
38 if "FAIL" not in dev
[0].request("DISASSOCIATE foo"):
39 raise Exception("Invalid DISASSOCIATE accepted")
41 dev
[1].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2412")
42 dev
[2].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2412")
43 hwsim_utils
.test_connectivity(dev
[0], dev
[1])
44 hwsim_utils
.test_connectivity(dev
[1], dev
[2])
46 addr1
= dev
[1].p2p_interface_addr()
47 addr2
= dev
[2].p2p_interface_addr()
48 addrs
= [ addr1
, addr2
]
49 sta
= dev
[0].get_sta(None)
50 if sta
['addr'] not in addrs
:
51 raise Exception("Unexpected STA address")
52 sta1
= dev
[0].get_sta(sta
['addr'])
53 if sta1
['addr'] not in addrs
:
54 raise Exception("Unexpected STA address")
55 sta2
= dev
[0].get_sta(sta
['addr'], next
=True)
56 if sta2
['addr'] not in addrs
:
57 raise Exception("Unexpected STA2 address")
58 sta3
= dev
[0].get_sta(sta2
['addr'], next
=True)
60 raise Exception("Unexpected STA iteration result (did not stop)")
62 status
= dev
[0].get_status()
63 if status
['mode'] != "AP":
64 raise Exception("Unexpected status mode")
68 dev
[0].request("DEAUTHENTICATE " + addr1
)
69 dev
[0].request("DISASSOCIATE " + addr2
)
70 dev
[1].wait_disconnected(timeout
=10)
71 dev
[2].wait_disconnected(timeout
=10)
72 dev
[1].wait_connected(timeout
=10, error
="Reconnection timed out")
73 dev
[2].wait_connected(timeout
=10, error
="Reconnection timed out")
74 dev
[1].request("DISCONNECT")
75 dev
[2].request("DISCONNECT")
77 def test_wpas_ap_wep(dev
):
78 """wpa_supplicant AP mode - WEP"""
79 id = dev
[0].add_network()
80 dev
[0].set_network(id, "mode", "2")
81 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-wep")
82 dev
[0].set_network(id, "key_mgmt", "NONE")
83 dev
[0].set_network(id, "frequency", "2412")
84 dev
[0].set_network(id, "scan_freq", "2412")
85 dev
[0].set_network_quoted(id, "wep_key0", "hello")
86 dev
[0].select_network(id)
89 dev
[1].connect("wpas-ap-wep", key_mgmt
="NONE", wep_key0
='"hello"',
91 hwsim_utils
.test_connectivity(dev
[0], dev
[1])
92 dev
[1].request("DISCONNECT")
94 def test_wpas_ap_no_ssid(dev
):
95 """wpa_supplicant AP mode - invalid network configuration"""
96 id = dev
[0].add_network()
97 dev
[0].set_network(id, "mode", "2")
98 dev
[0].set_network(id, "key_mgmt", "NONE")
99 dev
[0].set_network(id, "frequency", "2412")
100 dev
[0].set_network(id, "scan_freq", "2412")
101 dev
[0].select_network(id)
102 ev
= dev
[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout
=1)
104 raise Exception("Unexpected AP start")
106 def test_wpas_ap_default_frequency(dev
):
107 """wpa_supplicant AP mode - default frequency"""
108 id = dev
[0].add_network()
109 dev
[0].set_network(id, "mode", "2")
110 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
111 dev
[0].set_network(id, "key_mgmt", "NONE")
112 dev
[0].set_network(id, "scan_freq", "2412")
113 dev
[0].select_network(id)
114 wait_ap_ready(dev
[0])
115 dev
[1].connect("wpas-ap-open", key_mgmt
="NONE", scan_freq
="2462")
116 dev
[1].request("DISCONNECT")
118 def test_wpas_ap_invalid_frequency(dev
):
119 """wpa_supplicant AP mode - invalid frequency configuration"""
120 id = dev
[0].add_network()
121 dev
[0].set_network(id, "mode", "2")
122 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-open")
123 dev
[0].set_network(id, "key_mgmt", "NONE")
124 dev
[0].set_network(id, "frequency", "2413")
125 dev
[0].set_network(id, "scan_freq", "2412")
126 dev
[0].select_network(id)
127 ev
= dev
[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout
=1)
129 raise Exception("Unexpected AP start")
131 def test_wpas_ap_wps(dev
):
132 """wpa_supplicant AP mode - WPS operations"""
133 id = dev
[0].add_network()
134 dev
[0].set_network(id, "mode", "2")
135 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
136 dev
[0].set_network_quoted(id, "psk", "1234567890")
137 dev
[0].set_network(id, "frequency", "2412")
138 dev
[0].set_network(id, "scan_freq", "2412")
139 dev
[0].select_network(id)
140 wait_ap_ready(dev
[0])
141 bssid
= dev
[0].p2p_interface_addr()
143 logger
.info("Test PBC mode start/stop")
144 if "FAIL" not in dev
[0].request("WPS_CANCEL"):
145 raise Exception("Unexpected WPS_CANCEL success")
146 dev
[0].request("WPS_PBC")
147 ev
= dev
[0].wait_event(["WPS-PBC-ACTIVE"])
149 raise Exception("PBC mode start timeout")
150 if "OK" not in dev
[0].request("WPS_CANCEL"):
151 raise Exception("Unexpected WPS_CANCEL failure")
152 ev
= dev
[0].wait_event(["WPS-TIMEOUT"])
154 raise Exception("PBC mode disabling timeout")
156 logger
.info("Test PBC protocol run")
157 dev
[0].request("WPS_PBC")
158 ev
= dev
[0].wait_event(["WPS-PBC-ACTIVE"])
160 raise Exception("PBC mode start timeout")
161 dev
[1].request("WPS_PBC")
162 dev
[1].wait_connected(timeout
=30, error
="WPS PBC operation timed out")
163 hwsim_utils
.test_connectivity(dev
[0], dev
[1])
165 logger
.info("Test AP PIN to learn configuration")
166 pin
= dev
[0].request("WPS_AP_PIN random")
168 raise Exception("Could not generate random AP PIN")
169 if pin
not in dev
[0].request("WPS_AP_PIN get"):
170 raise Exception("Could not fetch current AP PIN")
171 dev
[2].wps_reg(bssid
, pin
)
172 hwsim_utils
.test_connectivity(dev
[1], dev
[2])
174 dev
[1].request("REMOVE_NETWORK all")
175 dev
[2].request("REMOVE_NETWORK all")
177 logger
.info("Test AP PIN operations")
178 dev
[0].request("WPS_AP_PIN disable")
179 dev
[0].request("WPS_AP_PIN set " + pin
+ " 1")
181 if "FAIL" not in dev
[0].request("WPS_AP_PIN get"):
182 raise Exception("AP PIN unexpectedly still enabled")
184 pin
= dev
[1].wps_read_pin()
185 dev
[0].request("WPS_PIN any " + pin
)
186 dev
[1].request("WPS_PIN any " + pin
)
187 dev
[1].wait_connected(timeout
=30)
188 dev
[1].request("REMOVE_NETWORK all")
189 dev
[1].dump_monitor()
191 dev
[0].request("WPS_PIN any " + pin
+ " 100")
192 dev
[1].request("WPS_PIN any " + pin
)
193 dev
[1].wait_connected(timeout
=30)
194 dev
[1].request("REMOVE_NETWORK all")
195 dev
[1].dump_monitor()
197 dev
[0].request("WPS_AP_PIN set 12345670")
198 dev
[0].dump_monitor()
200 runs
= ("88887777", "12340000", "00000000", "12345670")
202 logger
.info("Try AP PIN " + pin
)
203 dev
[2].dump_monitor()
204 dev
[2].request("WPS_REG " + bssid
+ " " + pin
)
205 ev
= dev
[2].wait_event(["WPS-SUCCESS", "WPS-FAIL msg"], timeout
=15)
207 raise Exception("WPS operation timed out")
208 if "WPS-SUCCESS" in ev
:
209 raise Exception("WPS operation succeeded unexpectedly")
210 dev
[2].wait_disconnected(timeout
=10)
211 dev
[2].request("WPS_CANCEL")
212 dev
[2].request("REMOVE_NETWORK all")
213 ev
= dev
[0].wait_event(["WPS-AP-SETUP-LOCKED"])
215 raise Exception("WPS AP PIN not locked")
217 dev
[0].dump_monitor()
218 logger
.info("Test random AP PIN timeout")
219 pin
= dev
[0].request("WPS_AP_PIN random 1")
221 raise Exception("Could not generate random AP PIN")
222 res
= dev
[0].request("WPS_AP_PIN get")
224 raise Exception("Could not fetch current AP PIN")
227 res
= dev
[0].request("WPS_AP_PIN get")
230 if "FAIL" not in res
:
231 raise Exception("WPS_AP_PIN random timeout did not work")
233 if "FAIL" not in dev
[0].request("WPS_AP_PIN foo"):
234 raise Exception("Invalid WPS_AP_PIN command not rejected")
235 if "FAIL" not in dev
[0].request("WPS_AP_PIN set"):
236 raise Exception("Invalid WPS_AP_PIN command not rejected")
238 def test_wpas_ap_wps_pbc_overlap(dev
):
239 """wpa_supplicant AP mode - WPS operations with PBC overlap"""
240 id = dev
[0].add_network()
241 dev
[0].set_network(id, "mode", "2")
242 dev
[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
243 dev
[0].set_network_quoted(id, "psk", "1234567890")
244 dev
[0].set_network(id, "frequency", "2412")
245 dev
[0].set_network(id, "scan_freq", "2412")
246 dev
[0].select_network(id)
247 wait_ap_ready(dev
[0])
248 bssid
= dev
[0].p2p_interface_addr()
250 dev
[1].scan_for_bss(bssid
, freq
="2412")
251 dev
[1].dump_monitor()
252 dev
[2].scan_for_bss(bssid
, freq
="2412")
253 dev
[2].dump_monitor()
254 dev
[0].request("WPS_PBC")
255 dev
[1].request("WPS_PBC " + bssid
)
256 dev
[2].request("WPS_PBC " + bssid
)
258 ev
= dev
[1].wait_event(["WPS-M2D"], timeout
=15)
260 raise Exception("PBC session overlap not detected (dev1)")
261 if "config_error=12" not in ev
:
262 raise Exception("PBC session overlap not correctly reported (dev1)")
264 ev
= dev
[2].wait_event(["WPS-M2D"], timeout
=15)
266 raise Exception("PBC session overlap not detected (dev2)")
267 if "config_error=12" not in ev
:
268 raise Exception("PBC session overlap not correctly reported (dev2)")
270 if "FAIL-PBC-OVERLAP" not in dev
[0].request("WPS_PBC"):
271 raise Exception("WPS_PBC(AP) accepted during overlap")
272 if "FAIL-PBC-OVERLAP" not in dev
[0].request("WPS_PBC any"):
273 raise Exception("WPS_PBC(AP) accepted during overlap")
274 dev
[0].request("WPS_CANCEL")
275 dev
[1].request("WPS_CANCEL")
276 dev
[2].request("WPS_CANCEL")