| #!/usr/bin/env bash |
| source ../multi-host.conf |
| a_ipaddr=$IP4_A1 |
| b_ipaddr=$IP4_B1 |
| c_ipaddr=$IP4_C1 |
| strategy=$1 |
| logprefix=$2 |
| echo "host A IP address $a_ipaddr" |
| echo "host B IP address $b_ipaddr" |
| echo "host C IP address $c_ipaddr" |
| echo "Strategy: $strategy" |
| mkdir -p logs |
| workdir=$(pwd) |
| |
| clean_up() { |
| echo "cleaning up..." |
| sudo killall nfd 2>&1 |
| ssh $b_ipaddr "sudo killall nfd 2>&1" 2>&1 |
| ssh $c_ipaddr "sudo killall nfd 2>&1" 2>&1 |
| } |
| trap clean_up EXIT |
| |
| # generate nfd.conf: disable multicast faces |
| cp /usr/local/etc/ndn/nfd.conf $workdir/nfd.conf |
| ssh $CTRL_B "sed 's/mcast yes/mcast no/' /usr/local/etc/ndn/nfd.conf > $workdir/nfd.conf" |
| ssh $CTRL_C "sed 's/mcast yes/mcast no/' /usr/local/etc/ndn/nfd.conf > $workdir/nfd.conf" |
| |
| # get keys |
| echo "getting keys..." |
| cp -r /usr/local/etc/ndn/keys $workdir/ |
| ssh $CTRL_B "cp -r /usr/local/etc/ndn/keys $workdir/" |
| ssh $CTRL_C "cp -r /usr/local/etc/ndn/keys $workdir/" |
| |
| # start NFD on three nodes and set nexthop to create loop |
| echo "start NFD on three nodes and set nexthop to create loop..." |
| ssh $CTRL_B "mkdir -p $workdir/logs;\ |
| sudo nfd --config $workdir/nfd.conf &> $workdir/logs/${logprefix}_nfd.log &\ |
| sleep 2" |
| ssh $CTRL_C "mkdir -p $workdir/logs;\ |
| sudo nfd --config $workdir/nfd.conf &> $workdir/logs/${logprefix}_nfd.log &\ |
| sleep 2" |
| sudo nfd --config $workdir/nfd.conf &> $workdir/logs/${logprefix}_nfd.log & |
| sleep 5 |
| ssh $CTRL_B "$workdir/add-nexthop.sh $c_ipaddr $strategy" || exit 3 |
| ssh $CTRL_C "$workdir/add-nexthop.sh $a_ipaddr $strategy" || exit 3 |
| $workdir/add-nexthop.sh $b_ipaddr $strategy || exit 3 |
| |
| # use ndn-traffic-client to send 100 interests |
| echo "using ndn-traffic-client to send 100 interests..." |
| ndn-traffic-client -c 100 -i 200 NDNTrafficClient.conf > $workdir/logs/${logprefix}_client.log 2>&1 |
| |
| # collect nfdc face list from B and C |
| echo "collecting nfdc face list from B and C..." |
| ssh $CTRL_B "nfdc face list > $workdir/logs/${logprefix}_nfdc-face-list-B.log 2>&1" || exit 4 |
| scp $CTRL_B:$workdir/logs/${logprefix}_nfdc-face-list-B.log $workdir/logs/${logprefix}_nfdc-face-list-B.log |
| ssh $CTRL_C "nfdc face list > $workdir/logs/${logprefix}_nfdc-face-list-C.log 2>&1" || exit 4 |
| scp $CTRL_C:$workdir/logs/${logprefix}_nfdc-face-list-C.log $workdir/logs/${logprefix}_nfdc-face-list-C.log |
| nfdc face list > $workdir/logs/${logprefix}_nfdc-face-list-A.log 2>&1 || exit 4 |
| |
| # analyze results |
| echo "analyzing results..." |
| for host in {A..C} |
| do |
| echo "Host $host:" |
| cat $workdir/logs/${logprefix}_nfdc-face-list-$host.log | grep udp4 | while read line |
| do |
| ini=$(echo "$line" | grep -Po "in={.*?i" | sed 's/in={//g' | sed 's/i//g') |
| outi=$(echo "$line" | grep -Po "out={.*?i" | sed 's/out={//g' | sed 's/i//g') |
| echo " $ini in, $outi out" |
| if [[ $ini -gt 200 ]] |
| then |
| echo "FAIL: counter for incoming interest on host $host is greater than 200" |
| echo "$line" |
| exit 1 |
| fi |
| if [[ $outi -gt 200 ]] |
| then |
| echo "FAIL: counter for outgoing interest on host $host is greater than 200" |
| echo "$line" |
| exit 2 |
| fi |
| done |
| done |
| |
| # clean up |
| clean_up |
| echo "Interest Loop Test PASSED" |