xref: /aosp_15_r20/external/wmediumd/tests/test-001.sh (revision 621120a22a0cd8ba80b131fe8bcb37c86ff453e3)
1*621120a2SAndroid Build Coastguard Worker#!/bin/bash
2*621120a2SAndroid Build Coastguard Worker
3*621120a2SAndroid Build Coastguard WorkerSUBNET=10.10.10
4*621120a2SAndroid Build Coastguard WorkerNUM_PHYS=2
5*621120a2SAndroid Build Coastguard Worker
6*621120a2SAndroid Build Coastguard Workerif [[ $UID -ne 0 ]]; then
7*621120a2SAndroid Build Coastguard Worker	echo "Sorry, run me as root."
8*621120a2SAndroid Build Coastguard Worker	exit 1
9*621120a2SAndroid Build Coastguard Workerfi
10*621120a2SAndroid Build Coastguard Worker
11*621120a2SAndroid Build Coastguard Workerfunction cleanup() {
12*621120a2SAndroid Build Coastguard Worker	echo "Cleaning up!"
13*621120a2SAndroid Build Coastguard Worker	# restore default routing rules
14*621120a2SAndroid Build Coastguard Worker	echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
15*621120a2SAndroid Build Coastguard Worker	for i in `seq 0 $NUM_PHYS`; do
16*621120a2SAndroid Build Coastguard Worker		prio=$((i+10))
17*621120a2SAndroid Build Coastguard Worker		prio2=$((256+prio))
18*621120a2SAndroid Build Coastguard Worker		tbl=$prio2
19*621120a2SAndroid Build Coastguard Worker
20*621120a2SAndroid Build Coastguard Worker		ip rule del priority $prio2 2> /dev/null
21*621120a2SAndroid Build Coastguard Worker		ip rule del priority $prio 2> /dev/null
22*621120a2SAndroid Build Coastguard Worker		ip route flush table $tbl 2> /dev/null
23*621120a2SAndroid Build Coastguard Worker	done
24*621120a2SAndroid Build Coastguard Worker	ip rule del priority 1000
25*621120a2SAndroid Build Coastguard Worker	ip rule add priority 0 table local
26*621120a2SAndroid Build Coastguard Worker
27*621120a2SAndroid Build Coastguard Worker	# kill whatever we started
28*621120a2SAndroid Build Coastguard Worker	killall wmediumd
29*621120a2SAndroid Build Coastguard Worker}
30*621120a2SAndroid Build Coastguard Worker
31*621120a2SAndroid Build Coastguard Workertrap 'cleanup' INT TERM EXIT
32*621120a2SAndroid Build Coastguard Worker
33*621120a2SAndroid Build Coastguard Workermodprobe -r mac80211_hwsim
34*621120a2SAndroid Build Coastguard Workermodprobe mac80211_hwsim radios=$NUM_PHYS
35*621120a2SAndroid Build Coastguard Worker
36*621120a2SAndroid Build Coastguard Worker# routing-based send-to-self (Patrick McHardy)
37*621120a2SAndroid Build Coastguard Worker# lower priority of kernel local table
38*621120a2SAndroid Build Coastguard Workerip rule add priority 1000 lookup local
39*621120a2SAndroid Build Coastguard Workerip rule del priority 0 &>/dev/null
40*621120a2SAndroid Build Coastguard Worker
41*621120a2SAndroid Build Coastguard Worker# only arp reply for self
42*621120a2SAndroid Build Coastguard Workerecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
43*621120a2SAndroid Build Coastguard Worker
44*621120a2SAndroid Build Coastguard Workeri=0
45*621120a2SAndroid Build Coastguard Worker# Assume most recently modified phys are hwsim phys (hence the ls -t)
46*621120a2SAndroid Build Coastguard Workerfor phy in `ls -t /sys/class/ieee80211 | head -$NUM_PHYS`; do
47*621120a2SAndroid Build Coastguard Worker	# The usual stuff
48*621120a2SAndroid Build Coastguard Worker	dev=`ls /sys/class/ieee80211/$phy/device/net`
49*621120a2SAndroid Build Coastguard Worker	ip=${SUBNET}.$((10 + i))
50*621120a2SAndroid Build Coastguard Worker
51*621120a2SAndroid Build Coastguard Worker	ip link set $dev down
52*621120a2SAndroid Build Coastguard Worker	ip link set address 42:00:00:00:0${i}:00 dev $dev
53*621120a2SAndroid Build Coastguard Worker	iw dev $dev set type mesh
54*621120a2SAndroid Build Coastguard Worker	iw dev $dev set channel 36
55*621120a2SAndroid Build Coastguard Worker	ip link set $dev up
56*621120a2SAndroid Build Coastguard Worker	iw dev $dev mesh join meshtest
57*621120a2SAndroid Build Coastguard Worker
58*621120a2SAndroid Build Coastguard Worker	ip addr flush dev $dev
59*621120a2SAndroid Build Coastguard Worker	ip addr add $ip/24 dev $dev
60*621120a2SAndroid Build Coastguard Worker
61*621120a2SAndroid Build Coastguard Worker	# set up local delivery
62*621120a2SAndroid Build Coastguard Worker	prio=$((i+10))
63*621120a2SAndroid Build Coastguard Worker	prio2=$((256+prio))
64*621120a2SAndroid Build Coastguard Worker	tbl=$prio2
65*621120a2SAndroid Build Coastguard Worker
66*621120a2SAndroid Build Coastguard Worker	# incoming traffic to us delivered via local table
67*621120a2SAndroid Build Coastguard Worker	echo 1 > /proc/sys/net/ipv4/conf/$dev/accept_local
68*621120a2SAndroid Build Coastguard Worker	ip rule del priority $prio 2> /dev/null
69*621120a2SAndroid Build Coastguard Worker	ip rule add priority $prio iif $dev lookup local
70*621120a2SAndroid Build Coastguard Worker
71*621120a2SAndroid Build Coastguard Worker	# outgoing frames with our ip will be generated on our interface
72*621120a2SAndroid Build Coastguard Worker	# and go over the wire.
73*621120a2SAndroid Build Coastguard Worker	ip rule del priority $prio2 2> /dev/null
74*621120a2SAndroid Build Coastguard Worker	ip rule add priority $prio2 from $ip table $tbl
75*621120a2SAndroid Build Coastguard Worker	ip route flush table $tbl 2> /dev/null
76*621120a2SAndroid Build Coastguard Worker	ip route add default dev $dev table $tbl
77*621120a2SAndroid Build Coastguard Worker
78*621120a2SAndroid Build Coastguard Worker	i=$((i+1))
79*621120a2SAndroid Build Coastguard Workerdone
80*621120a2SAndroid Build Coastguard Worker
81*621120a2SAndroid Build Coastguard Worker# enable wmediumd
82*621120a2SAndroid Build Coastguard Worker../wmediumd/wmediumd -c 2node.cfg > wmediumd.log &
83*621120a2SAndroid Build Coastguard Worker
84*621120a2SAndroid Build Coastguard Worker# see if we can establish a mesh path
85*621120a2SAndroid Build Coastguard Workerping -i 1 -c 5 -I ${SUBNET}.10 ${SUBNET}.11 || { echo FAIL; exit 1; }
86*621120a2SAndroid Build Coastguard Worker
87*621120a2SAndroid Build Coastguard Workerecho PASS
88