tests: Get rid of the unnecessary add_tests() functions
[mech_eap.git] / tests / hwsim / test_ap_tdls.py
1 #!/usr/bin/python
2 #
3 # TDLS tests
4 # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
5 #
6 # This software may be distributed under the terms of the BSD license.
7 # See README for more details.
8
9 import time
10 import subprocess
11 import logging
12 logger = logging.getLogger(__name__)
13
14 import hwsim_utils
15 from hostapd import HostapdGlobal
16 from hostapd import Hostapd
17 import hostapd
18
19 ap_ifname = 'wlan2'
20
21 def start_ap_wpa2_psk(ifname):
22     params = hostapd.wpa2_params(ssid="test-wpa2-psk", passphrase="12345678")
23     hostapd.add_ap(ifname, params)
24
25 def connectivity(dev, ap_ifname):
26     hwsim_utils.test_connectivity_sta(dev[0], dev[1])
27     hwsim_utils.test_connectivity(dev[0].ifname, "wlan2")
28     hwsim_utils.test_connectivity(dev[1].ifname, "wlan2")
29
30 def connect_2sta(dev, ssid):
31     dev[0].connect(ssid, psk="12345678")
32     dev[1].connect(ssid, psk="12345678")
33     connectivity(dev, "wlan2")
34
35 def connect_2sta_wpa2_psk(dev):
36     connect_2sta(dev, "test-wpa2-psk")
37
38 def connect_2sta_wpa_psk(dev):
39     connect_2sta(dev, "test-wpa-psk")
40
41 def connect_2sta_wpa_psk_mixed(dev):
42     dev[0].connect("test-wpa-mixed-psk", psk="12345678", proto="WPA")
43     dev[1].connect("test-wpa-mixed-psk", psk="12345678", proto="WPA2")
44     connectivity(dev, "wlan2")
45
46 def connect_2sta_wep(dev):
47     dev[0].connect("test-wep", key_mgmt="NONE", wep_key0='"hello"')
48     dev[1].connect("test-wep", key_mgmt="NONE", wep_key0='"hello"')
49     connectivity(dev, "wlan2")
50
51 def connect_2sta_open(dev):
52     dev[0].connect("test-open", key_mgmt="NONE")
53     dev[1].connect("test-open", key_mgmt="NONE")
54     connectivity(dev, "wlan2")
55
56 def wlantest_tdls(field, bssid, addr1, addr2):
57     res = subprocess.check_output(["../../wlantest/wlantest_cli",
58                                    "get_tdls_counter", field, bssid, addr1,
59                                    addr2]);
60     if "FAIL" in res:
61         raise Exception("wlantest_cli command failed")
62     return int(res)
63
64 def wlantest_tdls_clear(bssid, addr1, addr2):
65     subprocess.call(["../../wlantest/wlantest_cli",
66                      "clear_tdls_counters", bssid, addr1, addr2]);
67
68 def wlantest_setup():
69     subprocess.call(["../../wlantest/wlantest_cli", "flush"]);
70     subprocess.call(["../../wlantest/wlantest_cli", "add_passphrase",
71                      "12345678"]);
72     subprocess.call(["../../wlantest/wlantest_cli", "add_wepkey",
73                      "68656c6c6f"]);
74
75 def wlantest_tdls_packet_counters(bssid, addr0, addr1):
76     dl = wlantest_tdls("valid_direct_link", bssid, addr0, addr1);
77     inv_dl = wlantest_tdls("invalid_direct_link", bssid, addr0, addr1);
78     ap = wlantest_tdls("valid_ap_path", bssid, addr0, addr1);
79     inv_ap = wlantest_tdls("invalid_ap_path", bssid, addr0, addr1);
80     return [dl,inv_dl,ap,inv_ap]
81
82 def tdls_check_dl(sta0, sta1, bssid, addr0, addr1):
83     wlantest_tdls_clear(bssid, addr0, addr1);
84     hwsim_utils.test_connectivity_sta(sta0, sta1)
85     [dl,inv_dl,ap,inv_ap] = wlantest_tdls_packet_counters(bssid, addr0, addr1)
86     if dl == 0:
87         raise Exception("No valid frames through direct link")
88     if inv_dl > 0:
89         raise Exception("Invalid frames through direct link")
90     if ap > 0:
91         raise Exception("Unexpected frames through AP path")
92     if inv_ap > 0:
93         raise Exception("Invalid frames through AP path")
94
95 def tdls_check_ap(sta0, sta1, bssid, addr0, addr1):
96     wlantest_tdls_clear(bssid, addr0, addr1);
97     hwsim_utils.test_connectivity_sta(sta0, sta1)
98     [dl,inv_dl,ap,inv_ap] = wlantest_tdls_packet_counters(bssid, addr0, addr1)
99     if dl > 0:
100         raise Exception("Unexpected frames through direct link")
101     if inv_dl > 0:
102         raise Exception("Invalid frames through direct link")
103     if ap == 0:
104         raise Exception("No valid frames through AP path")
105     if inv_ap > 0:
106         raise Exception("Invalid frames through AP path")
107
108 def setup_tdls(sta0, sta1, bssid, reverse=False, expect_fail=False):
109     logger.info("Setup TDLS")
110     addr0 = sta0.p2p_interface_addr()
111     addr1 = sta1.p2p_interface_addr()
112     wlantest_tdls_clear(bssid, addr0, addr1);
113     wlantest_tdls_clear(bssid, addr1, addr0);
114     sta0.tdls_setup(addr1)
115     time.sleep(1)
116     if expect_fail:
117         tdls_check_ap(sta0, sta1, bssid, addr0, addr1)
118         return
119     if reverse:
120         addr1 = sta0.p2p_interface_addr()
121         addr0 = sta1.p2p_interface_addr()
122     conf = wlantest_tdls("setup_conf_ok", bssid, addr0, addr1);
123     if conf == 0:
124         raise Exception("No TDLS Setup Confirm (success) seen")
125     tdls_check_dl(sta0, sta1, bssid, addr0, addr1)
126
127 def teardown_tdls(sta0, sta1, bssid):
128     logger.info("Teardown TDLS")
129     addr0 = sta0.p2p_interface_addr()
130     addr1 = sta1.p2p_interface_addr()
131     sta0.tdls_teardown(addr1)
132     time.sleep(1)
133     teardown = wlantest_tdls("teardown", bssid, addr0, addr1);
134     if teardown == 0:
135         raise Exception("No TDLS Setup Teardown seen")
136     tdls_check_ap(sta0, sta1, bssid, addr0, addr1)
137
138 def test_ap_wpa2_tdls(dev):
139     """WPA2-PSK AP and two stations using TDLS"""
140     start_ap_wpa2_psk(ap_ifname)
141     bssid = "02:00:00:00:02:00"
142     wlantest_setup()
143     connect_2sta_wpa2_psk(dev)
144     setup_tdls(dev[0], dev[1], bssid)
145     teardown_tdls(dev[0], dev[1], bssid)
146     setup_tdls(dev[1], dev[0], bssid)
147     #teardown_tdls(dev[0], dev[1], bssid)
148
149 def test_ap_wpa2_tdls_concurrent_init(dev):
150     """Concurrent TDLS setup initiation"""
151     start_ap_wpa2_psk(ap_ifname)
152     bssid = "02:00:00:00:02:00"
153     wlantest_setup()
154     connect_2sta_wpa2_psk(dev)
155     dev[0].request("SET tdls_testing 0x80")
156     setup_tdls(dev[1], dev[0], bssid, reverse=True)
157
158 def test_ap_wpa2_tdls_concurrent_init2(dev):
159     """Concurrent TDLS setup initiation (reverse)"""
160     start_ap_wpa2_psk(ap_ifname)
161     bssid = "02:00:00:00:02:00"
162     wlantest_setup()
163     connect_2sta_wpa2_psk(dev)
164     dev[1].request("SET tdls_testing 0x80")
165     setup_tdls(dev[0], dev[1], bssid)
166
167 def test_ap_wpa2_tdls_decline_resp(dev):
168     """Decline TDLS Setup Response"""
169     start_ap_wpa2_psk(ap_ifname)
170     bssid = "02:00:00:00:02:00"
171     wlantest_setup()
172     connect_2sta_wpa2_psk(dev)
173     dev[1].request("SET tdls_testing 0x200")
174     setup_tdls(dev[1], dev[0], bssid, expect_fail=True)
175
176 def test_ap_wpa2_tdls_long_lifetime(dev):
177     """TDLS with long TPK lifetime"""
178     start_ap_wpa2_psk(ap_ifname)
179     bssid = "02:00:00:00:02:00"
180     wlantest_setup()
181     connect_2sta_wpa2_psk(dev)
182     dev[1].request("SET tdls_testing 0x40")
183     setup_tdls(dev[1], dev[0], bssid)
184
185 def test_ap_wpa2_tdls_long_frame(dev):
186     """TDLS with long setup/teardown frames"""
187     start_ap_wpa2_psk(ap_ifname)
188     bssid = "02:00:00:00:02:00"
189     wlantest_setup()
190     connect_2sta_wpa2_psk(dev)
191     dev[0].request("SET tdls_testing 0x1")
192     dev[1].request("SET tdls_testing 0x1")
193     setup_tdls(dev[1], dev[0], bssid)
194     teardown_tdls(dev[1], dev[0], bssid)
195     setup_tdls(dev[0], dev[1], bssid)
196
197 def test_ap_wpa2_tdls_reneg(dev):
198     """Renegotiate TDLS link"""
199     start_ap_wpa2_psk(ap_ifname)
200     bssid = "02:00:00:00:02:00"
201     wlantest_setup()
202     connect_2sta_wpa2_psk(dev)
203     setup_tdls(dev[1], dev[0], bssid)
204     setup_tdls(dev[0], dev[1], bssid)
205
206 def test_ap_wpa2_tdls_wrong_lifetime_resp(dev):
207     """Incorrect TPK lifetime in TDLS Setup Response"""
208     start_ap_wpa2_psk(ap_ifname)
209     bssid = "02:00:00:00:02:00"
210     wlantest_setup()
211     connect_2sta_wpa2_psk(dev)
212     dev[1].request("SET tdls_testing 0x10")
213     setup_tdls(dev[0], dev[1], bssid, expect_fail=True)
214
215 def test_ap_wpa2_tdls_diff_rsnie(dev):
216     """TDLS with different RSN IEs"""
217     start_ap_wpa2_psk(ap_ifname)
218     bssid = "02:00:00:00:02:00"
219     wlantest_setup()
220     connect_2sta_wpa2_psk(dev)
221     dev[1].request("SET tdls_testing 0x2")
222     setup_tdls(dev[1], dev[0], bssid)
223     teardown_tdls(dev[1], dev[0], bssid)
224
225 def test_ap_wpa_tdls(dev):
226     """WPA-PSK AP and two stations using TDLS"""
227     hostapd.add_ap(ap_ifname, hostapd.wpa_params(ssid="test-wpa-psk", passphrase="12345678"))
228     bssid = "02:00:00:00:02:00"
229     wlantest_setup()
230     connect_2sta_wpa_psk(dev)
231     setup_tdls(dev[0], dev[1], bssid)
232     teardown_tdls(dev[0], dev[1], bssid)
233     setup_tdls(dev[1], dev[0], bssid)
234
235 def test_ap_wpa_mixed_tdls(dev):
236     """WPA+WPA2-PSK AP and two stations using TDLS"""
237     hostapd.add_ap(ap_ifname, hostapd.wpa_mixed_params(ssid="test-wpa-mixed-psk", passphrase="12345678"))
238     bssid = "02:00:00:00:02:00"
239     wlantest_setup()
240     connect_2sta_wpa_psk_mixed(dev)
241     setup_tdls(dev[0], dev[1], bssid)
242     teardown_tdls(dev[0], dev[1], bssid)
243     setup_tdls(dev[1], dev[0], bssid)
244
245 def test_ap_wep_tdls(dev):
246     """WEP AP and two stations using TDLS"""
247     hostapd.add_ap(ap_ifname, { "ssid": "test-wep", "wep_key0": '"hello"' })
248     bssid = "02:00:00:00:02:00"
249     wlantest_setup()
250     connect_2sta_wep(dev)
251     setup_tdls(dev[0], dev[1], bssid)
252     teardown_tdls(dev[0], dev[1], bssid)
253     setup_tdls(dev[1], dev[0], bssid)
254
255 def test_ap_open_tdls(dev):
256     """Open AP and two stations using TDLS"""
257     hostapd.add_ap(ap_ifname, { "ssid": "test-open" })
258     bssid = "02:00:00:00:02:00"
259     wlantest_setup()
260     connect_2sta_open(dev)
261     setup_tdls(dev[0], dev[1], bssid)
262     teardown_tdls(dev[0], dev[1], bssid)
263     setup_tdls(dev[1], dev[0], bssid)