tests: wpa_supplicant P2P_LO_START and P2P_LO_STOP commands
[mech_eap.git] / tests / hwsim / test_ap_pmf.py
1 # Protected management frames tests
2 # Copyright (c) 2013, 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 time
9 import logging
10 logger = logging.getLogger()
11
12 import hwsim_utils
13 import hostapd
14 from wlantest import Wlantest
15 from wpasupplicant import WpaSupplicant
16
17 @remote_compatible
18 def test_ap_pmf_required(dev, apdev):
19     """WPA2-PSK AP with PMF required"""
20     ssid = "test-pmf-required"
21     params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
22     params["wpa_key_mgmt"] = "WPA-PSK-SHA256";
23     params["ieee80211w"] = "2";
24     hapd = hostapd.add_ap(apdev[0], params)
25     Wlantest.setup(hapd)
26     wt = Wlantest()
27     wt.flush()
28     wt.add_passphrase("12345678")
29     key_mgmt = hapd.get_config()['key_mgmt']
30     if key_mgmt.split(' ')[0] != "WPA-PSK-SHA256":
31         raise Exception("Unexpected GET_CONFIG(key_mgmt): " + key_mgmt)
32     dev[0].connect(ssid, psk="12345678", ieee80211w="1",
33                    key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
34                    scan_freq="2412")
35     if "[WPA2-PSK-SHA256-CCMP]" not in dev[0].request("SCAN_RESULTS"):
36         raise Exception("Scan results missing RSN element info")
37     hwsim_utils.test_connectivity(dev[0], hapd)
38     dev[1].connect(ssid, psk="12345678", ieee80211w="2",
39                    key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
40                    scan_freq="2412")
41     hwsim_utils.test_connectivity(dev[1], hapd)
42     hapd.request("SA_QUERY " + dev[0].p2p_interface_addr())
43     hapd.request("SA_QUERY " + dev[1].p2p_interface_addr())
44     wt.require_ap_pmf_mandatory(apdev[0]['bssid'])
45     wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
46     wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
47     time.sleep(0.1)
48     if wt.get_sta_counter("valid_saqueryresp_tx", apdev[0]['bssid'],
49                           dev[0].p2p_interface_addr()) < 1:
50         raise Exception("STA did not reply to SA Query")
51     if wt.get_sta_counter("valid_saqueryresp_tx", apdev[0]['bssid'],
52                           dev[1].p2p_interface_addr()) < 1:
53         raise Exception("STA did not reply to SA Query")
54
55 @remote_compatible
56 def test_ap_pmf_optional(dev, apdev):
57     """WPA2-PSK AP with PMF optional"""
58     ssid = "test-pmf-optional"
59     params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
60     params["wpa_key_mgmt"] = "WPA-PSK";
61     params["ieee80211w"] = "1";
62     hapd = hostapd.add_ap(apdev[0], params)
63     Wlantest.setup(hapd)
64     wt = Wlantest()
65     wt.flush()
66     wt.add_passphrase("12345678")
67     dev[0].connect(ssid, psk="12345678", ieee80211w="1",
68                    key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
69                    scan_freq="2412")
70     hwsim_utils.test_connectivity(dev[0], hapd)
71     dev[1].connect(ssid, psk="12345678", ieee80211w="2",
72                    key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
73                    scan_freq="2412")
74     hwsim_utils.test_connectivity(dev[1], hapd)
75     wt.require_ap_pmf_optional(apdev[0]['bssid'])
76     wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
77     wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
78
79 @remote_compatible
80 def test_ap_pmf_optional_2akm(dev, apdev):
81     """WPA2-PSK AP with PMF optional (2 AKMs)"""
82     ssid = "test-pmf-optional-2akm"
83     params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
84     params["wpa_key_mgmt"] = "WPA-PSK WPA-PSK-SHA256";
85     params["ieee80211w"] = "1";
86     hapd = hostapd.add_ap(apdev[0], params)
87     Wlantest.setup(hapd)
88     wt = Wlantest()
89     wt.flush()
90     wt.add_passphrase("12345678")
91     dev[0].connect(ssid, psk="12345678", ieee80211w="1",
92                    key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
93                    scan_freq="2412")
94     hwsim_utils.test_connectivity(dev[0], hapd)
95     dev[1].connect(ssid, psk="12345678", ieee80211w="2",
96                    key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
97                    scan_freq="2412")
98     hwsim_utils.test_connectivity(dev[1], hapd)
99     wt.require_ap_pmf_optional(apdev[0]['bssid'])
100     wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
101     wt.require_sta_key_mgmt(apdev[0]['bssid'], dev[0].p2p_interface_addr(),
102                             "PSK-SHA256")
103     wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
104     wt.require_sta_key_mgmt(apdev[0]['bssid'], dev[1].p2p_interface_addr(),
105                             "PSK-SHA256")
106
107 @remote_compatible
108 def test_ap_pmf_negative(dev, apdev):
109     """WPA2-PSK AP without PMF (negative test)"""
110     ssid = "test-pmf-negative"
111     params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
112     hapd = hostapd.add_ap(apdev[0], params)
113     Wlantest.setup(hapd)
114     wt = Wlantest()
115     wt.flush()
116     wt.add_passphrase("12345678")
117     dev[0].connect(ssid, psk="12345678", ieee80211w="1",
118                    key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
119                    scan_freq="2412")
120     hwsim_utils.test_connectivity(dev[0], hapd)
121     try:
122         dev[1].connect(ssid, psk="12345678", ieee80211w="2",
123                        key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
124                        scan_freq="2412")
125         hwsim_utils.test_connectivity(dev[1], hapd)
126         raise Exception("PMF required STA connected to no PMF AP")
127     except Exception, e:
128         logger.debug("Ignore expected exception: " + str(e))
129     wt.require_ap_no_pmf(apdev[0]['bssid'])
130
131 @remote_compatible
132 def test_ap_pmf_assoc_comeback(dev, apdev):
133     """WPA2-PSK AP with PMF association comeback"""
134     ssid = "assoc-comeback"
135     params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
136     params["wpa_key_mgmt"] = "WPA-PSK-SHA256";
137     params["ieee80211w"] = "2";
138     hapd = hostapd.add_ap(apdev[0], params)
139     Wlantest.setup(hapd)
140     wt = Wlantest()
141     wt.flush()
142     wt.add_passphrase("12345678")
143     dev[0].connect(ssid, psk="12345678", ieee80211w="1",
144                    key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
145                    scan_freq="2412")
146     hapd.set("ext_mgmt_frame_handling", "1")
147     dev[0].request("DISCONNECT")
148     dev[0].wait_disconnected(timeout=10)
149     hapd.set("ext_mgmt_frame_handling", "0")
150     dev[0].request("REASSOCIATE")
151     dev[0].wait_connected(timeout=10, error="Timeout on re-connection")
152     if wt.get_sta_counter("assocresp_comeback", apdev[0]['bssid'],
153                           dev[0].p2p_interface_addr()) < 1:
154         raise Exception("AP did not use association comeback request")
155
156 @remote_compatible
157 def test_ap_pmf_assoc_comeback2(dev, apdev):
158     """WPA2-PSK AP with PMF association comeback (using DROP_SA)"""
159     ssid = "assoc-comeback"
160     params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
161     params["wpa_key_mgmt"] = "WPA-PSK";
162     params["ieee80211w"] = "1";
163     hapd = hostapd.add_ap(apdev[0], params)
164     Wlantest.setup(hapd)
165     wt = Wlantest()
166     wt.flush()
167     wt.add_passphrase("12345678")
168     dev[0].connect(ssid, psk="12345678", ieee80211w="2",
169                    key_mgmt="WPA-PSK", proto="WPA2", scan_freq="2412")
170     if "OK" not in dev[0].request("DROP_SA"):
171         raise Exception("DROP_SA failed")
172     dev[0].request("REASSOCIATE")
173     dev[0].wait_connected(timeout=10, error="Timeout on re-connection")
174     if wt.get_sta_counter("reassocresp_comeback", apdev[0]['bssid'],
175                           dev[0].p2p_interface_addr()) < 1:
176         raise Exception("AP did not use reassociation comeback request")
177
178 def test_ap_pmf_sta_sa_query(dev, apdev):
179     """WPA2-PSK AP with station using SA Query"""
180     ssid = "assoc-comeback"
181     addr = dev[0].own_addr()
182
183     wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
184     wpas.interface_add("wlan5", drv_params="use_monitor=1")
185     id = wpas.add_network()
186     wpas.set_network(id, "mode", "2")
187     wpas.set_network_quoted(id, "ssid", ssid)
188     wpas.set_network(id, "proto", "WPA2")
189     wpas.set_network(id, "key_mgmt", "WPA-PSK-SHA256")
190     wpas.set_network(id, "ieee80211w", "2")
191     wpas.set_network_quoted(id, "psk", "12345678")
192     wpas.set_network(id, "pairwise", "CCMP")
193     wpas.set_network(id, "group", "CCMP")
194     wpas.set_network(id, "frequency", "2412")
195     wpas.connect_network(id)
196     bssid = wpas.own_addr()
197     wpas.dump_monitor()
198
199     Wlantest.setup(wpas)
200     wt = Wlantest()
201     wt.flush()
202     wt.add_passphrase("12345678")
203
204     dev[0].connect(ssid, psk="12345678", ieee80211w="1",
205                    key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
206                    scan_freq="2412")
207     wpas.dump_monitor()
208     wpas.request("DEAUTHENTICATE " + addr + " test=0")
209     wpas.dump_monitor()
210     wpas.request("DISASSOCIATE " + addr + " test=0")
211     wpas.dump_monitor()
212     ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=1)
213     if ev is not None:
214         raise Exception("Unexpected disconnection")
215
216     wpas.request("DEAUTHENTICATE " + addr + " reason=6 test=0")
217     wpas.dump_monitor()
218     wpas.request("DISASSOCIATE " + addr + " reason=7 test=0")
219     wpas.dump_monitor()
220     ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=1)
221     if ev is not None:
222         raise Exception("Unexpected disconnection")
223     if wt.get_sta_counter("valid_saqueryreq_tx", bssid, addr) < 1:
224         raise Exception("STA did not send SA Query")
225     if wt.get_sta_counter("valid_saqueryresp_rx", bssid, addr) < 1:
226         raise Exception("AP did not reply to SA Query")
227     wpas.dump_monitor()
228
229 def test_ap_pmf_sta_sa_query_no_response(dev, apdev):
230     """WPA2-PSK AP with station using SA Query and getting no response"""
231     ssid = "assoc-comeback"
232     addr = dev[0].own_addr()
233
234     wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
235     wpas.interface_add("wlan5", drv_params="use_monitor=1")
236     id = wpas.add_network()
237     wpas.set_network(id, "mode", "2")
238     wpas.set_network_quoted(id, "ssid", ssid)
239     wpas.set_network(id, "proto", "WPA2")
240     wpas.set_network(id, "key_mgmt", "WPA-PSK-SHA256")
241     wpas.set_network(id, "ieee80211w", "2")
242     wpas.set_network_quoted(id, "psk", "12345678")
243     wpas.set_network(id, "pairwise", "CCMP")
244     wpas.set_network(id, "group", "CCMP")
245     wpas.set_network(id, "frequency", "2412")
246     wpas.connect_network(id)
247     bssid = wpas.own_addr()
248     wpas.dump_monitor()
249
250     dev[0].connect(ssid, psk="12345678", ieee80211w="1",
251                    key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
252                    scan_freq="2412")
253     wpas.dump_monitor()
254     wpas.request("DEAUTHENTICATE " + addr + " test=0")
255     wpas.dump_monitor()
256     wpas.request("DISASSOCIATE " + addr + " test=0")
257     wpas.dump_monitor()
258     ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=1)
259     if ev is not None:
260         raise Exception("Unexpected disconnection")
261
262     wpas.request("SET ext_mgmt_frame_handling 1")
263     wpas.request("DEAUTHENTICATE " + addr + " reason=6 test=0")
264     wpas.dump_monitor()
265     wpas.request("DISASSOCIATE " + addr + " reason=7 test=0")
266     wpas.dump_monitor()
267     dev[0].wait_disconnected()
268     wpas.dump_monitor()
269     wpas.request("SET ext_mgmt_frame_handling 0")
270     dev[0].wait_connected()
271     wpas.dump_monitor()
272
273 def test_ap_pmf_sta_unprot_deauth_burst(dev, apdev):
274     """WPA2-PSK AP with station receiving burst of unprotected Deauthentication frames"""
275     ssid = "deauth-attack"
276     addr = dev[0].own_addr()
277
278     wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
279     wpas.interface_add("wlan5", drv_params="use_monitor=1")
280     id = wpas.add_network()
281     wpas.set_network(id, "mode", "2")
282     wpas.set_network_quoted(id, "ssid", ssid)
283     wpas.set_network(id, "proto", "WPA2")
284     wpas.set_network(id, "key_mgmt", "WPA-PSK-SHA256")
285     wpas.set_network(id, "ieee80211w", "2")
286     wpas.set_network_quoted(id, "psk", "12345678")
287     wpas.set_network(id, "pairwise", "CCMP")
288     wpas.set_network(id, "group", "CCMP")
289     wpas.set_network(id, "frequency", "2412")
290     wpas.connect_network(id)
291     bssid = wpas.own_addr()
292
293     Wlantest.setup(wpas)
294     wt = Wlantest()
295     wt.flush()
296     wt.add_passphrase("12345678")
297
298     dev[0].connect(ssid, psk="12345678", ieee80211w="1",
299                    key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
300                    scan_freq="2412")
301
302     for i in range(0, 10):
303         wpas.request("DEAUTHENTICATE " + addr + " reason=6 test=0")
304         wpas.request("DISASSOCIATE " + addr + " reason=7 test=0")
305     ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=1)
306     if ev is not None:
307         raise Exception("Unexpected disconnection")
308     num_req = wt.get_sta_counter("valid_saqueryreq_tx", bssid, addr)
309     num_resp = wt.get_sta_counter("valid_saqueryresp_rx", bssid, addr)
310     if num_req < 1:
311         raise Exception("STA did not send SA Query")
312     if num_resp < 1:
313         raise Exception("AP did not reply to SA Query")
314     if num_req > 1:
315         raise Exception("STA initiated too many SA Query procedures (%d)" % num_req)
316
317     time.sleep(10)
318     for i in range(0, 5):
319         wpas.request("DEAUTHENTICATE " + addr + " reason=6 test=0")
320         wpas.request("DISASSOCIATE " + addr + " reason=7 test=0")
321     ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=1)
322     if ev is not None:
323         raise Exception("Unexpected disconnection")
324     num_req = wt.get_sta_counter("valid_saqueryreq_tx", bssid, addr)
325     num_resp = wt.get_sta_counter("valid_saqueryresp_rx", bssid, addr)
326     if num_req != 2 or num_resp != 2:
327         raise Exception("Unexpected number of SA Query procedures (req=%d resp=%d)" % (num_req, num_resp))
328
329 def test_ap_pmf_required_eap(dev, apdev):
330     """WPA2-EAP AP with PMF required"""
331     ssid = "test-pmf-required-eap"
332     params = hostapd.wpa2_eap_params(ssid=ssid)
333     params["wpa_key_mgmt"] = "WPA-EAP-SHA256";
334     params["ieee80211w"] = "2";
335     hapd = hostapd.add_ap(apdev[0], params)
336     key_mgmt = hapd.get_config()['key_mgmt']
337     if key_mgmt.split(' ')[0] != "WPA-EAP-SHA256":
338         raise Exception("Unexpected GET_CONFIG(key_mgmt): " + key_mgmt)
339     dev[0].connect("test-pmf-required-eap", key_mgmt="WPA-EAP-SHA256",
340                    ieee80211w="2", eap="PSK", identity="psk.user@example.com",
341                    password_hex="0123456789abcdef0123456789abcdef",
342                    scan_freq="2412")
343     dev[1].connect("test-pmf-required-eap", key_mgmt="WPA-EAP WPA-EAP-SHA256",
344                    ieee80211w="1", eap="PSK", identity="psk.user@example.com",
345                    password_hex="0123456789abcdef0123456789abcdef",
346                    scan_freq="2412")
347
348 def test_ap_pmf_optional_eap(dev, apdev):
349     """WPA2EAP AP with PMF optional"""
350     params = hostapd.wpa2_eap_params(ssid="test-wpa2-eap")
351     params["ieee80211w"] = "1";
352     hapd = hostapd.add_ap(apdev[0], params)
353     dev[0].connect("test-wpa2-eap", key_mgmt="WPA-EAP", eap="TTLS",
354                    identity="pap user", anonymous_identity="ttls",
355                    password="password",
356                    ca_cert="auth_serv/ca.pem", phase2="auth=PAP",
357                    ieee80211w="1", scan_freq="2412")
358     dev[1].connect("test-wpa2-eap", key_mgmt="WPA-EAP WPA-EAP-SHA256",
359                    eap="TTLS", identity="pap user", anonymous_identity="ttls",
360                    password="password",
361                    ca_cert="auth_serv/ca.pem", phase2="auth=PAP",
362                    ieee80211w="2", scan_freq="2412")
363
364 @remote_compatible
365 def test_ap_pmf_required_sha1(dev, apdev):
366     """WPA2-PSK AP with PMF required with SHA1 AKM"""
367     ssid = "test-pmf-required-sha1"
368     params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
369     params["wpa_key_mgmt"] = "WPA-PSK";
370     params["ieee80211w"] = "2";
371     hapd = hostapd.add_ap(apdev[0], params)
372     Wlantest.setup(hapd)
373     wt = Wlantest()
374     wt.flush()
375     wt.add_passphrase("12345678")
376     key_mgmt = hapd.get_config()['key_mgmt']
377     if key_mgmt.split(' ')[0] != "WPA-PSK":
378         raise Exception("Unexpected GET_CONFIG(key_mgmt): " + key_mgmt)
379     dev[0].connect(ssid, psk="12345678", ieee80211w="2",
380                    key_mgmt="WPA-PSK", proto="WPA2", scan_freq="2412")
381     if "[WPA2-PSK-CCMP]" not in dev[0].request("SCAN_RESULTS"):
382         raise Exception("Scan results missing RSN element info")
383     hwsim_utils.test_connectivity(dev[0], hapd)
384
385 @remote_compatible
386 def test_ap_pmf_toggle(dev, apdev):
387     """WPA2-PSK AP with PMF optional and changing PMF on reassociation"""
388     try:
389         _test_ap_pmf_toggle(dev, apdev)
390     finally:
391         dev[0].request("SET reassoc_same_bss_optim 0")
392
393 def _test_ap_pmf_toggle(dev, apdev):
394     ssid = "test-pmf-optional"
395     params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
396     params["wpa_key_mgmt"] = "WPA-PSK";
397     params["ieee80211w"] = "1";
398     params["assoc_sa_query_max_timeout"] = "1"
399     params["assoc_sa_query_retry_timeout"] = "1"
400     hapd = hostapd.add_ap(apdev[0], params)
401     Wlantest.setup(hapd)
402     wt = Wlantest()
403     wt.flush()
404     wt.add_passphrase("12345678")
405     bssid = apdev[0]['bssid']
406     addr = dev[0].own_addr()
407     dev[0].request("SET reassoc_same_bss_optim 1")
408     id = dev[0].connect(ssid, psk="12345678", ieee80211w="1",
409                         key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
410                         scan_freq="2412")
411     wt.require_ap_pmf_optional(bssid)
412     wt.require_sta_pmf(bssid, addr)
413     sta = hapd.get_sta(addr)
414     if '[MFP]' not in sta['flags']:
415         raise Exception("MFP flag not present for STA")
416
417     dev[0].set_network(id, "ieee80211w", "0")
418     dev[0].request("REASSOCIATE")
419     dev[0].wait_connected()
420     wt.require_sta_no_pmf(bssid, addr)
421     sta = hapd.get_sta(addr)
422     if '[MFP]' in sta['flags']:
423         raise Exception("MFP flag unexpectedly present for STA")
424     err, data = hapd.cmd_execute(['iw', 'dev', apdev[0]['ifname'], 'station',
425                                   'get', addr])
426     if "yes" in [l for l in data.splitlines() if "MFP" in l][0]:
427         raise Exception("Kernel STA entry had MFP enabled")
428
429     dev[0].set_network(id, "ieee80211w", "1")
430     dev[0].request("REASSOCIATE")
431     dev[0].wait_connected()
432     wt.require_sta_pmf(bssid, addr)
433     sta = hapd.get_sta(addr)
434     if '[MFP]' not in sta['flags']:
435         raise Exception("MFP flag not present for STA")
436     err, data = hapd.cmd_execute(['iw', 'dev', apdev[0]['ifname'], 'station',
437                                   'get', addr])
438     if "yes" not in [l for l in data.splitlines() if "MFP" in l][0]:
439         raise Exception("Kernel STA entry did not have MFP enabled")
440
441 @remote_compatible
442 def test_ap_pmf_required_sta_no_pmf(dev, apdev):
443     """WPA2-PSK AP with PMF required and PMF disabled on STA"""
444     ssid = "test-pmf-required"
445     params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
446     params["wpa_key_mgmt"] = "WPA-PSK-SHA256";
447     params["ieee80211w"] = "2";
448     hapd = hostapd.add_ap(apdev[0], params)
449
450     # Disable PMF on the station and try to connect
451     dev[0].connect(ssid, psk="12345678", ieee80211w="0",
452                    key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2",
453                    scan_freq="2412", wait_connect=False)
454     ev = dev[0].wait_event(["CTRL-EVENT-NETWORK-NOT-FOUND",
455                             "CTRL-EVENT-ASSOC-REJECT"], timeout=2)
456     if ev is None:
457         raise Exception("No connection result")
458     if "CTRL-EVENT-ASSOC-REJECT" in ev:
459         raise Exception("Tried to connect to PMF required AP without PMF enabled")
460     dev[0].request("REMOVE_NETWORK all")