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