]> git.ipfire.org Git - thirdparty/hostap.git/blame - tests/hwsim/hwsim_utils.py
tests: Remove unused import subprocess
[thirdparty/hostap.git] / tests / hwsim / hwsim_utils.py
CommitLineData
a311c61d 1# hwsim testing utilities
8a9a3b34 2# Copyright (c) 2013-2014, Jouni Malinen <j@w1.fi>
a311c61d
JM
3#
4# This software may be distributed under the terms of the BSD license.
5# See README for more details.
6
280cd8a9 7import os
8a9a3b34 8import time
a311c61d 9import logging
c9aa4308 10logger = logging.getLogger()
a311c61d 11
ce9c8c40
JM
12from wpasupplicant import WpaSupplicant
13
1131a1c8 14def run_connectivity_test(dev1, dev2, tos, dev1group=False, dev2group=False,
f77d6d4b 15 ifname1=None, ifname2=None, config=True, timeout=5):
ce9c8c40
JM
16 addr1 = dev1.own_addr()
17 if not dev1group and isinstance(dev1, WpaSupplicant):
18 addr1 = dev1.get_driver_status_field('addr')
19
20 addr2 = dev2.own_addr()
21 if not dev2group and isinstance(dev2, WpaSupplicant):
22 addr2 = dev2.get_driver_status_field('addr')
23
1d0b5a04
JM
24 dev1.dump_monitor()
25 dev2.dump_monitor()
26
e2f3f023
JA
27 if dev1.hostname is None and dev2.hostname is None:
28 broadcast_retry_c = 1
29 else:
30 broadcast_retry_c = 10
31
ce9c8c40 32 try:
6d930a1e
JM
33 if config:
34 cmd = "DATA_TEST_CONFIG 1"
35 if ifname1:
36 cmd = cmd + " ifname=" + ifname1
37 if dev1group:
38 res = dev1.group_request(cmd)
39 else:
40 res = dev1.request(cmd)
41 if "OK" not in res:
42 raise Exception("Failed to enable data test functionality")
43
44 cmd = "DATA_TEST_CONFIG 1"
45 if ifname2:
46 cmd = cmd + " ifname=" + ifname2
47 if dev2group:
48 res = dev2.group_request(cmd)
49 else:
50 res = dev2.request(cmd)
51 if "OK" not in res:
52 raise Exception("Failed to enable data test functionality")
ce9c8c40
JM
53
54 cmd = "DATA_TEST_TX {} {} {}".format(addr2, addr1, tos)
55 if dev1group:
56 dev1.group_request(cmd)
57 else:
58 dev1.request(cmd)
59 if dev2group:
f77d6d4b 60 ev = dev2.wait_group_event(["DATA-TEST-RX"], timeout=timeout)
ce9c8c40 61 else:
f77d6d4b 62 ev = dev2.wait_event(["DATA-TEST-RX"], timeout=timeout)
ce9c8c40
JM
63 if ev is None:
64 raise Exception("dev1->dev2 unicast data delivery failed")
65 if "DATA-TEST-RX {} {}".format(addr2, addr1) not in ev:
66 raise Exception("Unexpected dev1->dev2 unicast data result")
67
68 cmd = "DATA_TEST_TX ff:ff:ff:ff:ff:ff {} {}".format(addr1, tos)
e2f3f023
JA
69 for i in xrange(broadcast_retry_c):
70 try:
71 if dev1group:
72 dev1.group_request(cmd)
73 else:
74 dev1.request(cmd)
75 if dev2group:
76 ev = dev2.wait_group_event(["DATA-TEST-RX"],
77 timeout=timeout)
78 else:
79 ev = dev2.wait_event(["DATA-TEST-RX"], timeout=timeout)
80 if ev is None:
81 raise Exception("dev1->dev2 broadcast data delivery failed")
82 if "DATA-TEST-RX ff:ff:ff:ff:ff:ff {}".format(addr1) not in ev:
83 raise Exception("Unexpected dev1->dev2 broadcast data result")
84 break
85 except Exception as e:
86 if i == broadcast_retry_c - 1:
87 raise
ce9c8c40
JM
88
89 cmd = "DATA_TEST_TX {} {} {}".format(addr1, addr2, tos)
90 if dev2group:
91 dev2.group_request(cmd)
92 else:
93 dev2.request(cmd)
94 if dev1group:
f77d6d4b 95 ev = dev1.wait_group_event(["DATA-TEST-RX"], timeout=timeout)
ce9c8c40 96 else:
f77d6d4b 97 ev = dev1.wait_event(["DATA-TEST-RX"], timeout=timeout)
ce9c8c40
JM
98 if ev is None:
99 raise Exception("dev2->dev1 unicast data delivery failed")
100 if "DATA-TEST-RX {} {}".format(addr1, addr2) not in ev:
101 raise Exception("Unexpected dev2->dev1 unicast data result")
102
103 cmd = "DATA_TEST_TX ff:ff:ff:ff:ff:ff {} {}".format(addr2, tos)
e2f3f023
JA
104 for i in xrange(broadcast_retry_c):
105 try:
106 if dev2group:
107 dev2.group_request(cmd)
108 else:
109 dev2.request(cmd)
110 if dev1group:
111 ev = dev1.wait_group_event(["DATA-TEST-RX"],
112 timeout=timeout)
113 else:
114 ev = dev1.wait_event(["DATA-TEST-RX"], timeout=timeout)
115 if ev is None:
116 raise Exception("dev2->dev1 broadcast data delivery failed")
117 if "DATA-TEST-RX ff:ff:ff:ff:ff:ff {}".format(addr2) not in ev:
118 raise Exception("Unexpected dev2->dev1 broadcast data result")
119 break
120 except Exception as e:
121 if i == broadcast_retry_c - 1:
122 raise
ce9c8c40 123 finally:
6d930a1e
JM
124 if config:
125 if dev1group:
126 dev1.group_request("DATA_TEST_CONFIG 0")
127 else:
128 dev1.request("DATA_TEST_CONFIG 0")
129 if dev2group:
130 dev2.group_request("DATA_TEST_CONFIG 0")
131 else:
132 dev2.request("DATA_TEST_CONFIG 0")
ce9c8c40 133
1131a1c8
JM
134def test_connectivity(dev1, dev2, dscp=None, tos=None, max_tries=1,
135 dev1group=False, dev2group=False,
f77d6d4b 136 ifname1=None, ifname2=None, config=True, timeout=5):
ce9c8c40
JM
137 if dscp:
138 tos = dscp << 2
139 if not tos:
140 tos = 0
141
142 success = False
143 last_err = None
144 for i in range(0, max_tries):
145 try:
1131a1c8 146 run_connectivity_test(dev1, dev2, tos, dev1group, dev2group,
f77d6d4b
JM
147 ifname1, ifname2, config=config,
148 timeout=timeout)
ce9c8c40
JM
149 success = True
150 break
151 except Exception, e:
152 last_err = e
153 if i + 1 < max_tries:
154 time.sleep(1)
155 if not success:
156 raise Exception(last_err)
a8375c94 157
1131a1c8
JM
158def test_connectivity_iface(dev1, dev2, ifname, dscp=None, tos=None,
159 max_tries=1):
160 test_connectivity(dev1, dev2, dscp, tos, ifname2=ifname,
161 max_tries=max_tries)
a8375c94 162
65249f6c 163def test_connectivity_p2p(dev1, dev2, dscp=None, tos=None):
ce9c8c40 164 test_connectivity(dev1, dev2, dscp, tos, dev1group=True, dev2group=True)
81266da7 165
65249f6c 166def test_connectivity_p2p_sta(dev1, dev2, dscp=None, tos=None):
ce9c8c40 167 test_connectivity(dev1, dev2, dscp, tos, dev1group=True, dev2group=False)
b162675f 168
65249f6c 169def test_connectivity_sta(dev1, dev2, dscp=None, tos=None):
ce9c8c40 170 test_connectivity(dev1, dev2, dscp, tos)
d0007ac9
JB
171
172(PS_DISABLED, PS_ENABLED, PS_AUTO_POLL, PS_MANUAL_POLL) = range(4)
173
174def set_powersave(dev, val):
175 phy = dev.get_driver_status_field("phyname")
f1100581
JA
176 fname = '/sys/kernel/debug/ieee80211/%s/hwsim/ps' % phy
177 data = '%d' % val
178 (res, data) = dev.cmd_execute(["echo", data, ">", fname], shell=True)
179 if res != 0:
180 raise Exception("Failed to set power save for device")