Skip to content

Commit 02186dd

Browse files
committed
Support AD-HOC mode
In this update, an ad-hoc (IBSS) mode has been added. Users can switch their device to IBSS mode using the following command : "iw dev [interface] set type ibss" To join a specific IBSS cell and configure other settings, users can use the command : "iw dev [interface] ibss join [SSID] [freq in MHz] [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz] [fixed-freq] [<fixed bssid>] [beacon-interval <TU>] [basic-rates <rate in Mbps,rate2,…>] [mcast-rate <rate in Mbps>] [key d:0:abcde]" eg. "iw dev vw3 ibss join Elian 2412 NOHT fixed-freq 00:76:77:33:00:00 beacon-interval 200" The command signifies that the device vw3 will either join an existing Ad-Hoc network named Elian or create one if it doesn't exist. The device will use the 2412 MHz frequency, not utilize High Throughput mode (802.11n), and maintain a fixed frequency without changes due to other devices. The BSSID (Basic Service Set Identifier) for the IBSS will be set as 00:76:77:33:00:00, and the beacon interval, which is the time between two consecutive beacons, will be set to 200 Time Units (TUs). To leave the current Ad-Hoc network, users can use command : "iw dev [interface] ibss leave" Additionally, ad-hoc related test items have been added, and the IBSS devices are scannable.
1 parent db7245e commit 02186dd

File tree

2 files changed

+302
-10
lines changed

2 files changed

+302
-10
lines changed

scripts/verify.sh

Lines changed: 89 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ if [ $? -ne 0 ]; then
1010
final_ret=1
1111
fi
1212

13-
insert_kmod vwifi.ko station=3
13+
insert_kmod vwifi.ko station=6
1414
if [ $? -ne 0 ]; then
1515
final_ret=2
1616
fi
@@ -28,22 +28,34 @@ if [ $final_ret -eq 0 ]; then
2828
sudo iw dev vw0 set txpower auto
2929
sudo iw dev vw1 set txpower fixed 1200
3030
sudo iw dev vw2 set txpower fixed 1300
31+
sudo iw dev vw3 set txpower auto
32+
sudo iw dev vw4 set txpower auto
33+
sudo iw dev vw5 set txpower auto
3134

3235
# get phy number of each interface
3336
sudo iw dev > device.log
3437
vw0_phy=$(get_wiphy_name vw0)
3538
vw1_phy=$(get_wiphy_name vw1)
3639
vw2_phy=$(get_wiphy_name vw2)
40+
vw3_phy=$(get_wiphy_name vw3)
41+
vw4_phy=$(get_wiphy_name vw4)
42+
vw5_phy=$(get_wiphy_name vw5)
3743

3844
# create network namespaces for each phy (interface)
3945
sudo ip netns add ns0
4046
sudo ip netns add ns1
4147
sudo ip netns add ns2
48+
sudo ip netns add ns3
49+
sudo ip netns add ns4
50+
sudo ip netns add ns5
4251

4352
# add each phy (interface) to separate network namesapces
4453
sudo iw phy $vw0_phy set netns name ns0
4554
sudo iw phy $vw1_phy set netns name ns1
4655
sudo iw phy $vw2_phy set netns name ns2
56+
sudo iw phy $vw3_phy set netns name ns3
57+
sudo iw phy $vw4_phy set netns name ns4
58+
sudo iw phy $vw5_phy set netns name ns5
4759

4860
# running hostapd on vw0, so vw0 becomes AP
4961
sudo ip netns exec ns0 ip link set vw0 up
@@ -56,10 +68,22 @@ if [ $final_ret -eq 0 ]; then
5668
sudo ip netns exec ns2 ip link set vw2 up
5769
sudo ip netns exec ns2 ip link set lo up
5870

71+
sudo ip netns exec ns3 ip link set vw3 up
72+
sudo ip netns exec ns3 ip link set lo up
73+
74+
sudo ip netns exec ns4 ip link set vw4 up
75+
sudo ip netns exec ns4 ip link set lo up
76+
77+
sudo ip netns exec ns5 ip link set vw5 up
78+
sudo ip netns exec ns5 ip link set lo up
79+
5980
# assing IP address to each interface
6081
sudo ip netns exec ns0 ip addr add 10.0.0.1/24 dev vw0
6182
sudo ip netns exec ns1 ip addr add 10.0.0.2/24 dev vw1
6283
sudo ip netns exec ns2 ip addr add 10.0.0.3/24 dev vw2
84+
sudo ip netns exec ns3 ip addr add 10.0.0.4/24 dev vw3
85+
sudo ip netns exec ns4 ip addr add 10.0.0.5/24 dev vw4
86+
sudo ip netns exec ns5 ip addr add 10.0.0.6/24 dev vw5
6387

6488
# ping test: STA vw1 <--> STA vw2, should fail, because they
6589
# haven't connected to AP
@@ -136,6 +160,64 @@ if [ $final_ret -eq 0 ]; then
136160
final_ret=7
137161
fi
138162

163+
# vw3 becomes an IBSS and then joins the "Elian" network (BSSID: 00:76:77:33:00:00).
164+
echo
165+
echo "=================================="
166+
echo "vw3 join Elian (00:76:77:33:00:00)"
167+
echo "=================================="
168+
sudo ip netns exec ns3 iw dev vw3 set type ibss
169+
sudo ip netns exec ns3 iw dev vw3 ibss join Elian 2412 NOHT fixed-freq 00:76:77:33:00:00 beacon-interval 200
170+
171+
# vw4 becomes an IBSS and then joins the "Elian" network (BSSID: 00:76:77:33:00:00).
172+
echo
173+
echo "=================================="
174+
echo "vw4 join Elian (00:76:77:33:00:00)"
175+
echo "=================================="
176+
sudo ip netns exec ns4 iw dev vw4 set type ibss
177+
sudo ip netns exec ns4 iw dev vw4 ibss join Elian 2412 NOHT fixed-freq 00:76:77:33:00:00 beacon-interval 200
178+
179+
# vw5 becomes an IBSS and then joins the "Ricky" network (BSSID: 00:76:77:35:00:00).
180+
echo
181+
echo "=================================="
182+
echo "vw5 join Ricky (00:76:77:35:00:00)"
183+
echo "=================================="
184+
sudo ip netns exec ns5 iw dev vw5 set type ibss
185+
sudo ip netns exec ns5 iw dev vw5 ibss join Ricky 2412 NOHT fixed-freq 00:76:77:35:00:00 beacon-interval 300
186+
187+
# ping test: IBSS vw3 <--> STA vw2, should fail
188+
echo
189+
echo "================================================================================"
190+
echo "Ping Test: IBSS vw3 (10.0.0.4) (in Elian) <--> STA vw2 (10.0.0.3)"
191+
echo
192+
echo "(should fail)"
193+
echo "(be patient, it will take some time to route...)"
194+
echo "================================================================================"
195+
sudo ip netns exec ns3 ping -c 1 10.0.0.3
196+
197+
# ping test: IBSS vw3 <--> IBSS vw5, should fail
198+
echo
199+
echo "================================================================================"
200+
echo "Ping Test: IBSS vw3 (10.0.0.4) (in Elian) <--> IBSS vw5 (10.0.0.6) (in Ricky)"
201+
echo
202+
echo "(should fail)"
203+
echo "(be patient, it will take some time to route...)"
204+
echo "================================================================================"
205+
sudo ip netns exec ns3 ping -c 1 10.0.0.6
206+
207+
# ping test: IBSS vw3 <--> IBSS vw4, should success
208+
echo
209+
echo "================================================================================"
210+
echo "Ping Test: IBSS vw3 (10.0.0.4) (in Elian) <--> IBSS vw4 (10.0.0.5) (in Elian)"
211+
echo
212+
echo "(should success)"
213+
echo "(be patient, it will take some time to route...)"
214+
echo "================================================================================"
215+
sudo ip netns exec ns3 ping -c 1 10.0.0.5
216+
ping_rc=$?
217+
if [ $ping_rc -ne 0 ]; then
218+
final_ret=8
219+
fi
220+
139221
# verify TSF (in usec)
140222
sudo ip netns exec ns1 iw dev vw1 scan > scan_result.log
141223
tsf=$(cat scan_result.log | grep "TSF" | tail -n 1 | awk '{print $2}')
@@ -145,7 +227,7 @@ if [ $final_ret -eq 0 ]; then
145227

146228
# difference between tsf and uptime should less than 0.5 sec.
147229
if [ "${diff#-}" -gt 500000 ]; then
148-
final_ret=8
230+
final_ret=9
149231
fi
150232

151233
# plot the distribution of RSSI of vw0
@@ -162,7 +244,7 @@ if [ $final_ret -eq 0 ]; then
162244
python3 $ROOT/scripts/plot_rssi.py
163245
plot_rc=$?
164246
if [ $plot_rc -ne 0 ]; then
165-
final_ret=9
247+
final_ret=10
166248
fi
167249

168250
# TestAP performs station dump
@@ -172,7 +254,7 @@ if [ $final_ret -eq 0 ]; then
172254
sudo ip netns exec "ns${num}" iw dev | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' > station_ssid.log
173255
DIFF=$(diff dump_ssid.log station_ssid.log)
174256
if [ "$DIFF" != "" ]; then
175-
final_ret=10
257+
final_ret=11
176258
break
177259
fi
178260
done
@@ -184,6 +266,9 @@ if [ $final_ret -eq 0 ]; then
184266
sudo ip netns del ns0
185267
sudo ip netns del ns1
186268
sudo ip netns del ns2
269+
sudo ip netns del ns3
270+
sudo ip netns del ns4
271+
sudo ip netns del ns5
187272
rm scan_result.log scan_bssid.log connected.log device.log rssi.txt station_dump_result.log dump_ssid.log station_ssid.log
188273
echo "==== Test PASSED ===="
189274
exit 0

0 commit comments

Comments
 (0)