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