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