xref: /aosp_15_r20/external/wmediumd/tests/interference.sh (revision 621120a22a0cd8ba80b131fe8bcb37c86ff453e3)
1*621120a2SAndroid Build Coastguard Worker#!/bin/bash
2*621120a2SAndroid Build Coastguard Worker# 3 mesh nodes in a linear topology
3*621120a2SAndroid Build Coastguard Worker# 4 additional mesh nodes exists to prevent transmission
4*621120a2SAndroid Build Coastguard Worker# When enable_interference=true, ping always fails.
5*621120a2SAndroid Build Coastguard Worker# (This test is not perfect because of random values)
6*621120a2SAndroid Build Coastguard Worker
7*621120a2SAndroid Build Coastguard Workernum_nodes=7
8*621120a2SAndroid Build Coastguard Workersession=wmediumd
9*621120a2SAndroid Build Coastguard Workersubnet=10.10.10
10*621120a2SAndroid Build Coastguard Workermacfmt='02:00:00:00:%02x:00'
11*621120a2SAndroid Build Coastguard Worker
12*621120a2SAndroid Build Coastguard Worker. func
13*621120a2SAndroid Build Coastguard Worker
14*621120a2SAndroid Build Coastguard Workerif [[ $UID -ne 0 ]]; then
15*621120a2SAndroid Build Coastguard Worker	echo "Sorry, run me as root."
16*621120a2SAndroid Build Coastguard Worker	exit 1
17*621120a2SAndroid Build Coastguard Workerfi
18*621120a2SAndroid Build Coastguard Worker
19*621120a2SAndroid Build Coastguard Workermodprobe -r mac80211_hwsim
20*621120a2SAndroid Build Coastguard Workermodprobe mac80211_hwsim radios=$num_nodes
21*621120a2SAndroid Build Coastguard Workeriw reg set US
22*621120a2SAndroid Build Coastguard Worker
23*621120a2SAndroid Build Coastguard Workerfor i in `seq 0 $((num_nodes-1))`; do
24*621120a2SAndroid Build Coastguard Worker	addrs[$i]=`printf $macfmt $i`
25*621120a2SAndroid Build Coastguard Workerdone
26*621120a2SAndroid Build Coastguard Worker
27*621120a2SAndroid Build Coastguard Workercat <<__EOM > diamond.cfg
28*621120a2SAndroid Build Coastguard Workerifaces :
29*621120a2SAndroid Build Coastguard Worker{
30*621120a2SAndroid Build Coastguard Worker	ids = [
31*621120a2SAndroid Build Coastguard Worker		"02:00:00:00:00:00",
32*621120a2SAndroid Build Coastguard Worker		"02:00:00:00:01:00",
33*621120a2SAndroid Build Coastguard Worker		"02:00:00:00:02:00",
34*621120a2SAndroid Build Coastguard Worker		"02:00:00:00:03:00",
35*621120a2SAndroid Build Coastguard Worker		"02:00:00:00:04:00",
36*621120a2SAndroid Build Coastguard Worker		"02:00:00:00:05:00",
37*621120a2SAndroid Build Coastguard Worker		"02:00:00:00:06:00"
38*621120a2SAndroid Build Coastguard Worker	];
39*621120a2SAndroid Build Coastguard Worker	enable_interference = true;
40*621120a2SAndroid Build Coastguard Worker};
41*621120a2SAndroid Build Coastguard Worker
42*621120a2SAndroid Build Coastguard Workermodel :
43*621120a2SAndroid Build Coastguard Worker{
44*621120a2SAndroid Build Coastguard Worker	band = 2;
45*621120a2SAndroid Build Coastguard Worker	type = "path_loss";
46*621120a2SAndroid Build Coastguard Worker	positions = (
47*621120a2SAndroid Build Coastguard Worker		(-69.0,   0.0),
48*621120a2SAndroid Build Coastguard Worker		(  0.0,   0.0),
49*621120a2SAndroid Build Coastguard Worker		( 69.0,   0.0),
50*621120a2SAndroid Build Coastguard Worker		(130.0,  -2.0),
51*621120a2SAndroid Build Coastguard Worker		(130.0,  -1.0),
52*621120a2SAndroid Build Coastguard Worker		(130.0,   2.0),
53*621120a2SAndroid Build Coastguard Worker		(130.0,   1.0)
54*621120a2SAndroid Build Coastguard Worker	);
55*621120a2SAndroid Build Coastguard Worker	tx_powers = (15.0, 15.0, 15.0, 11.0, 11.0, 11.0, 11.0);
56*621120a2SAndroid Build Coastguard Worker
57*621120a2SAndroid Build Coastguard Worker	model_name = "log_distance";
58*621120a2SAndroid Build Coastguard Worker	path_loss_exp = 3.5;
59*621120a2SAndroid Build Coastguard Worker	xg = 0.0;
60*621120a2SAndroid Build Coastguard Worker};
61*621120a2SAndroid Build Coastguard Worker__EOM
62*621120a2SAndroid Build Coastguard Worker
63*621120a2SAndroid Build Coastguard Workertmux new -s $session -d
64*621120a2SAndroid Build Coastguard Worker
65*621120a2SAndroid Build Coastguard Workerrm /tmp/netns.pid.* 2>/dev/null
66*621120a2SAndroid Build Coastguard Workeri=0
67*621120a2SAndroid Build Coastguard Workerfor addr in ${addrs[@]}; do
68*621120a2SAndroid Build Coastguard Worker	phy=`addr2phy $addr`
69*621120a2SAndroid Build Coastguard Worker	dev=`ls /sys/class/ieee80211/$phy/device/net`
70*621120a2SAndroid Build Coastguard Worker	phys[$i]=$phy
71*621120a2SAndroid Build Coastguard Worker	devs[$i]=$dev
72*621120a2SAndroid Build Coastguard Worker
73*621120a2SAndroid Build Coastguard Worker	ip=${subnet}.$((10 + i))
74*621120a2SAndroid Build Coastguard Worker
75*621120a2SAndroid Build Coastguard Worker	# put this phy in own netns and tmux window, and start a mesh node
76*621120a2SAndroid Build Coastguard Worker	win=$session:$((i+1)).0
77*621120a2SAndroid Build Coastguard Worker	tmux new-window -t $session -n $ip
78*621120a2SAndroid Build Coastguard Worker
79*621120a2SAndroid Build Coastguard Worker	# start netns
80*621120a2SAndroid Build Coastguard Worker	pidfile=/tmp/netns.pid.$i
81*621120a2SAndroid Build Coastguard Worker	tmux send-keys -t $win 'lxc-unshare -s NETWORK /bin/bash' C-m
82*621120a2SAndroid Build Coastguard Worker	tmux send-keys -t $win 'echo $$ > '$pidfile C-m
83*621120a2SAndroid Build Coastguard Worker
84*621120a2SAndroid Build Coastguard Worker	# wait for netns to exist
85*621120a2SAndroid Build Coastguard Worker	while [[ ! -e $pidfile ]]; do
86*621120a2SAndroid Build Coastguard Worker		echo "Waiting for netns $i -- $pidfile"
87*621120a2SAndroid Build Coastguard Worker		sleep 0.5
88*621120a2SAndroid Build Coastguard Worker	done
89*621120a2SAndroid Build Coastguard Worker
90*621120a2SAndroid Build Coastguard Worker	tmux send-keys -t $session:0.0 'iw phy '$phy' set netns `cat '$pidfile'`' C-m
91*621120a2SAndroid Build Coastguard Worker
92*621120a2SAndroid Build Coastguard Worker	# wait for phy to exist in netns
93*621120a2SAndroid Build Coastguard Worker	while [[ -e /sys/class/ieee80211/$phy ]]; do
94*621120a2SAndroid Build Coastguard Worker		echo "Waiting for $phy to move to netns..."
95*621120a2SAndroid Build Coastguard Worker		sleep 0.5
96*621120a2SAndroid Build Coastguard Worker	done
97*621120a2SAndroid Build Coastguard Worker
98*621120a2SAndroid Build Coastguard Worker	# start mesh node
99*621120a2SAndroid Build Coastguard Worker	tmux send-keys -t $win '. func' C-m
100*621120a2SAndroid Build Coastguard Worker	tmux send-keys -t $win 'meshup-iw '$dev' diamond 2412 '$ip C-m
101*621120a2SAndroid Build Coastguard Worker
102*621120a2SAndroid Build Coastguard Worker	i=$((i+1))
103*621120a2SAndroid Build Coastguard Workerdone
104*621120a2SAndroid Build Coastguard Workerwinct=$i
105*621120a2SAndroid Build Coastguard Worker
106*621120a2SAndroid Build Coastguard Worker# start wmediumd
107*621120a2SAndroid Build Coastguard Workerwin=$session:$((winct+1)).0
108*621120a2SAndroid Build Coastguard Workerwinct=$((winct+1))
109*621120a2SAndroid Build Coastguard Workertmux new-window -a -t $session -n wmediumd
110*621120a2SAndroid Build Coastguard Workertmux send-keys -t $win '../wmediumd/wmediumd -c diamond.cfg' C-m
111*621120a2SAndroid Build Coastguard Worker
112*621120a2SAndroid Build Coastguard Worker# start iperf server on 10.10.10.14
113*621120a2SAndroid Build Coastguard Workertmux send-keys -t $session:5 'iperf -s' C-m
114*621120a2SAndroid Build Coastguard Worker# start iperf server on 10.10.10.16
115*621120a2SAndroid Build Coastguard Workertmux send-keys -t $session:7 'iperf -s' C-m
116*621120a2SAndroid Build Coastguard Worker
117*621120a2SAndroid Build Coastguard Worker# enable monitor
118*621120a2SAndroid Build Coastguard Workertmux send-keys -t $session:0 'ip link set hwsim0 up' C-m
119*621120a2SAndroid Build Coastguard Worker
120*621120a2SAndroid Build Coastguard Workertmux send-keys -t $session:4 'iperf -u -b 100M -c 10.10.10.14 -t 10' C-m
121*621120a2SAndroid Build Coastguard Workertmux send-keys -t $session:6 'iperf -u -b 100M -c 10.10.10.16 -t 10' C-m
122*621120a2SAndroid Build Coastguard Worker
123*621120a2SAndroid Build Coastguard Workertmux select-window -t $session:1
124*621120a2SAndroid Build Coastguard Workertmux send-keys -t $session:1 'sleep 2; ping -c 5 -W 1 10.10.10.12' C-m
125*621120a2SAndroid Build Coastguard Worker
126*621120a2SAndroid Build Coastguard Workertmux attach
127