3 # wpa_supplicant AP mode tests
4 # Copyright (c) 2014, Qualcomm Atheros, Inc.
6 # This software may be distributed under the terms of the BSD license.
7 # See README for more details.
11 logger = logging.getLogger()
15 def test_wpas_ap_open(dev):
16 """wpa_supplicant AP mode - open network"""
17 id = dev[0].add_network()
18 dev[0].set_network(id, "mode", "2")
19 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
20 dev[0].set_network(id, "key_mgmt", "NONE")
21 dev[0].set_network(id, "frequency", "2412")
22 dev[0].set_network(id, "scan_freq", "2412")
23 dev[0].select_network(id)
25 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
26 dev[2].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
27 hwsim_utils.test_connectivity(dev[0].ifname, dev[1].ifname)
28 hwsim_utils.test_connectivity(dev[1].ifname, dev[2].ifname)
30 addr1 = dev[1].p2p_interface_addr()
31 addr2 = dev[2].p2p_interface_addr()
32 addrs = [ addr1, addr2 ]
33 sta = dev[0].get_sta(None)
34 if sta['addr'] not in addrs:
35 raise Exception("Unexpected STA address")
36 sta1 = dev[0].get_sta(sta['addr'])
37 if sta1['addr'] not in addrs:
38 raise Exception("Unexpected STA address")
39 sta2 = dev[0].get_sta(sta['addr'], next=True)
40 if sta2['addr'] not in addrs:
41 raise Exception("Unexpected STA2 address")
42 sta3 = dev[0].get_sta(sta2['addr'], next=True)
44 raise Exception("Unexpected STA iteration result (did not stop)")
46 status = dev[0].get_status()
47 if status['mode'] != "AP":
48 raise Exception("Unexpected status mode")
52 dev[0].request("DEAUTHENTICATE " + addr1)
53 dev[0].request("DISASSOCIATE " + addr2)
54 ev = dev[1].wait_event(["CTRL-EVENT-DISCONNECTED"])
56 raise Exception("Disconnection timed out")
57 ev = dev[2].wait_event(["CTRL-EVENT-DISCONNECTED"])
59 raise Exception("Disconnection timed out")
60 ev = dev[1].wait_event(["CTRL-EVENT-CONNECTED"])
62 raise Exception("Reconnection timed out")
63 ev = dev[2].wait_event(["CTRL-EVENT-CONNECTED"])
65 raise Exception("Reconnection timed out")
67 def test_wpas_ap_wep(dev):
68 """wpa_supplicant AP mode - WEP"""
69 id = dev[0].add_network()
70 dev[0].set_network(id, "mode", "2")
71 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wep")
72 dev[0].set_network(id, "key_mgmt", "NONE")
73 dev[0].set_network(id, "frequency", "2412")
74 dev[0].set_network(id, "scan_freq", "2412")
75 dev[0].set_network_quoted(id, "wep_key0", "hello")
76 dev[0].select_network(id)
78 dev[1].connect("wpas-ap-wep", key_mgmt="NONE", wep_key0='"hello"',
80 hwsim_utils.test_connectivity(dev[0].ifname, dev[1].ifname)
82 def test_wpas_ap_no_ssid(dev):
83 """wpa_supplicant AP mode - invalid network configuration"""
84 id = dev[0].add_network()
85 dev[0].set_network(id, "mode", "2")
86 dev[0].set_network(id, "key_mgmt", "NONE")
87 dev[0].set_network(id, "frequency", "2412")
88 dev[0].set_network(id, "scan_freq", "2412")
89 dev[0].select_network(id)
90 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
92 raise Exception("Unexpected AP start")
94 def test_wpas_ap_default_frequency(dev):
95 """wpa_supplicant AP mode - default frequency"""
96 id = dev[0].add_network()
97 dev[0].set_network(id, "mode", "2")
98 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
99 dev[0].set_network(id, "key_mgmt", "NONE")
100 dev[0].set_network(id, "scan_freq", "2412")
101 dev[0].select_network(id)
102 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"])
104 raise Exception("AP failed to start")
105 dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2462")
107 def test_wpas_ap_invalid_frequency(dev):
108 """wpa_supplicant AP mode - invalid frequency configuration"""
109 id = dev[0].add_network()
110 dev[0].set_network(id, "mode", "2")
111 dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
112 dev[0].set_network(id, "key_mgmt", "NONE")
113 dev[0].set_network(id, "frequency", "2413")
114 dev[0].set_network(id, "scan_freq", "2412")
115 dev[0].select_network(id)
116 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
118 raise Exception("Unexpected AP start")
120 def test_wpas_ap_wps(dev):
121 """wpa_supplicant AP mode - WPS operations"""
122 id = dev[0].add_network()
123 dev[0].set_network(id, "mode", "2")
124 dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
125 dev[0].set_network_quoted(id, "psk", "1234567890")
126 dev[0].set_network(id, "frequency", "2412")
127 dev[0].set_network(id, "scan_freq", "2412")
128 dev[0].select_network(id)
129 ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"])
131 raise Exception("AP start timeout")
132 bssid = dev[0].p2p_interface_addr()
134 logger.info("Test PBC mode start/stop")
135 if "FAIL" not in dev[0].request("WPS_CANCEL"):
136 raise Exception("Unexpected WPS_CANCEL success")
137 dev[0].request("WPS_PBC")
138 ev = dev[0].wait_event(["WPS-PBC-ACTIVE"])
140 raise Exception("PBC mode start timeout")
141 if "OK" not in dev[0].request("WPS_CANCEL"):
142 raise Exception("Unexpected WPS_CANCEL failure")
143 ev = dev[0].wait_event(["WPS-TIMEOUT"])
145 raise Exception("PBC mode disabling timeout")
147 logger.info("Test PBC protocol run")
148 dev[0].request("WPS_PBC")
149 ev = dev[0].wait_event(["WPS-PBC-ACTIVE"])
151 raise Exception("PBC mode start timeout")
152 dev[1].request("WPS_PBC")
153 ev = dev[1].wait_event(["CTRL-EVENT-CONNECTED"], timeout=30)
155 raise Exception("WPS PBC operation timed out")
156 hwsim_utils.test_connectivity(dev[0].ifname, dev[1].ifname)
158 logger.info("Test AP PIN to learn configuration")
159 pin = dev[0].request("WPS_AP_PIN random")
161 raise Exception("Could not generate random AP PIN")
162 if pin not in dev[0].request("WPS_AP_PIN get"):
163 raise Exception("Could not fetch current AP PIN")
164 dev[2].wps_reg(bssid, pin)
165 hwsim_utils.test_connectivity(dev[1].ifname, dev[2].ifname)
167 dev[1].request("REMOVE_NETWORK all")
168 dev[2].request("REMOVE_NETWORK all")
170 logger.info("Test AP PIN operations")
171 dev[0].request("WPS_AP_PIN disable")
172 dev[0].request("WPS_AP_PIN set " + pin + " 1")
174 if "FAIL" not in dev[0].request("WPS_AP_PIN get"):
175 raise Exception("AP PIN unexpectedly still enabled")
177 pin = dev[1].wps_read_pin()
178 dev[0].request("WPS_PIN any " + pin)
179 dev[1].request("WPS_PIN any " + pin)
180 ev = dev[1].wait_event(["CTRL-EVENT-CONNECTED"], timeout=30)
182 raise Exception("Association with the AP timed out")
183 dev[1].request("REMOVE_NETWORK all")
184 dev[1].dump_monitor()
186 dev[0].request("WPS_AP_PIN set 12345670")
187 dev[0].dump_monitor()
189 runs = ("88887777", "12340000", "00000000", "12345670")
191 logger.info("Try AP PIN " + pin)
192 dev[2].dump_monitor()
193 dev[2].request("WPS_REG " + bssid + " " + pin)
194 ev = dev[2].wait_event(["WPS-SUCCESS", "WPS-FAIL msg"], timeout=15)
196 raise Exception("WPS operation timed out")
197 if "WPS-SUCCESS" in ev:
198 raise Exception("WPS operation succeeded unexpectedly")
199 ev = dev[2].wait_event(["CTRL-EVENT-DISCONNECTED"])
201 raise Exception("Timeout while waiting for disconnection")
202 dev[2].request("WPS_CANCEL")
203 dev[2].request("REMOVE_NETWORK all")
204 ev = dev[0].wait_event(["WPS-AP-SETUP-LOCKED"])
206 raise Exception("WPS AP PIN not locked")