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