#!/bin/sh dev=eth0 command=$1 shift if [[ "$command" == "sender" || "$command" == "receiver" || "$command" == "time-sender" || "$command" == "time-receiver" ]]; then : else echo "Command should be either sender or receiver." exit 0; fi TARGET="127.0.0.1" OUTPUT="/dev/null" NETEM=() PRRT=() while [[ $# -gt 0 ]] do key="$1" case $key in -t|--target) if [[ "$command" == "sender" || "$command" == "time-sender" ]]; then PRRT+=("$1 $2") fi TARGET=("$2") shift shift ;; -w|--wireshark) OUTPUT=("$2") shift shift ;; -T|--threadpinning|-U) PRRT+=("$1") shift ;; -p|--port|-r|--rounds|-s|--size|-R|--rcvbuf|-S|--sndbuf|-o|--output|-a|--appdelay|-j|--appjitter) PRRT+=("$1 $2") shift shift ;; *) # unknown option NETEM+=("$1") # save it in an array for later shift # past argument ;; esac done PRRT_PARAMS="${PRRT[@]}" NETEM_PARAMS="${NETEM[@]}" echo "Starting Wireshark." tshark -i eth0 -w $OUTPUT.pcap & TSHARK_PID=$! sleep 2 start=$(date +%s.%N); echo "Checking reachability of $TARGET." until ping -c1 $TARGET &>/dev/null; do sleep 1; done dur=$(echo "$(date +%s.%N) - $start" | bc); printf "Reachable after %.6f seconds\n" $dur if [[ "$command" == "sender" || "$command" == "time-sender" ]]; then echo "Delaying sender start." else echo "Delaying receiver start." fi start=$(date +%s.%N); echo "Running PRRT with command: \"$command $PRRT_PARAMS\" and link parameters: \"$NETEM_PARAMS\"" trap 'echo "Caught SIGINT."; echo "$(ps -a)"; killall -SIGINT $command' INT LOG=$(/prrt/$command $PRRT_PARAMS 2>&1) echo "Exit status: $?" printf "$LOG\n" dur=$(echo "$(date +%s.%N) - $start" | bc); printf "Done after %.6f seconds\n" $dur kill $TSHARK_PID