]>
git.ipfire.org Git - thirdparty/hostap.git/blob - tests/hwsim/test_ibss.py
4 # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
6 # This software may be distributed under the terms of the BSD license.
7 # See README for more details.
10 logger
= logging
.getLogger()
16 def connect_ibss_cmd(dev
, id):
18 dev
.select_network(id)
20 def wait_ibss_connection(dev
):
21 logger
.info(dev
.ifname
+ " waiting for IBSS start/join to complete")
22 ev
= dev
.wait_event(["CTRL-EVENT-CONNECTED"], timeout
=20)
24 raise Exception("Connection to the IBSS timed out")
25 exp
= r
'<.>(CTRL-EVENT-CONNECTED) - Connection to ([0-9a-f:]*) completed.*'
31 def wait_4way_handshake(dev1
, dev2
):
32 logger
.info(dev1
.ifname
+ " waiting for 4-way handshake completion with " + dev2
.ifname
+ " " + dev2
.p2p_interface_addr())
33 ev
= dev1
.wait_event(["IBSS-RSN-COMPLETED " + dev2
.p2p_interface_addr()],
36 raise Exception("4-way handshake in IBSS timed out")
38 def wait_4way_handshake2(dev1
, dev2
, dev3
):
39 logger
.info(dev1
.ifname
+ " waiting for 4-way handshake completion with " + dev2
.ifname
+ " " + dev2
.p2p_interface_addr() + " and " + dev3
.p2p_interface_addr())
40 ev
= dev1
.wait_event(["IBSS-RSN-COMPLETED " + dev2
.p2p_interface_addr(),
41 "IBSS-RSN-COMPLETED " + dev3
.p2p_interface_addr()],
44 raise Exception("4-way handshake in IBSS timed out")
45 ev
= dev1
.wait_event(["IBSS-RSN-COMPLETED " + dev2
.p2p_interface_addr(),
46 "IBSS-RSN-COMPLETED " + dev3
.p2p_interface_addr()],
49 raise Exception("4-way handshake in IBSS timed out")
51 def add_ibss(dev
, ssid
, psk
=None, proto
=None, key_mgmt
=None, pairwise
=None, group
=None):
52 id = dev
.add_network()
53 dev
.set_network(id, "mode", "1")
54 dev
.set_network(id, "frequency", "2412")
55 dev
.set_network_quoted(id, "ssid", ssid
)
57 dev
.set_network_quoted(id, "psk", psk
)
59 dev
.set_network(id, "proto", proto
)
61 dev
.set_network(id, "key_mgmt", key_mgmt
)
63 dev
.set_network(id, "pairwise", pairwise
)
65 dev
.set_network(id, "group", group
)
68 def add_ibss_rsn(dev
, ssid
):
69 return add_ibss(dev
, ssid
, "12345678", "RSN", "WPA-PSK", "CCMP", "CCMP")
71 def test_ibss_rsn(dev
):
75 logger
.info("Start IBSS on the first STA")
76 id = add_ibss_rsn(dev
[0], ssid
)
77 connect_ibss_cmd(dev
[0], id)
78 bssid0
= wait_ibss_connection(dev
[0])
80 logger
.info("Join two STAs to the IBSS")
82 id = add_ibss_rsn(dev
[1], ssid
)
83 connect_ibss_cmd(dev
[1], id)
84 bssid1
= wait_ibss_connection(dev
[1])
86 logger
.info("STA0 BSSID " + bssid0
+ " differs from STA1 BSSID " + bssid1
)
87 # try to merge with a scan
89 wait_4way_handshake(dev
[0], dev
[1])
90 wait_4way_handshake(dev
[1], dev
[0])
92 id = add_ibss_rsn(dev
[2], ssid
)
93 connect_ibss_cmd(dev
[2], id)
94 bssid2
= wait_ibss_connection(dev
[2])
96 logger
.info("STA0 BSSID " + bssid0
+ " differs from STA2 BSSID " + bssid2
)
97 # try to merge with a scan
99 wait_4way_handshake(dev
[0], dev
[2])
100 wait_4way_handshake2(dev
[2], dev
[0], dev
[1])
102 # Allow some time for all peers to complete key setup
104 hwsim_utils
.test_connectivity(dev
[0].ifname
, dev
[1].ifname
)
105 hwsim_utils
.test_connectivity(dev
[0].ifname
, dev
[2].ifname
)
106 hwsim_utils
.test_connectivity(dev
[1].ifname
, dev
[2].ifname
)