diff --git a/cmake_targets/tools/perf_oai.bash b/cmake_targets/tools/perf_oai.bash new file mode 100755 index 0000000000000000000000000000000000000000..17c04c4ea66cb934dccd517a723c727fac89cf2c --- /dev/null +++ b/cmake_targets/tools/perf_oai.bash @@ -0,0 +1,787 @@ +################################################################################ +# OpenAirInterface +# Copyright(c) 1999 - 2015 Eurecom +# +# OpenAirInterface is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) anylater version. +# +# +# OpenAirInterface is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenAirInterface.The full GNU General Public License is +# included in this distribution in the file called "COPYING". If not, +# see <http://www.gnu.org/licenses/>. +# +# Contact Information +# OpenAirInterface Admin: openair_admin@eurecom.fr +# OpenAirInterface Tech : openair_tech@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@eurecom.fr +# +# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE +# +################################################################################ +# file build_oai.bash +# brief apply a traffic generator, send traffic and measure the performance of OAI +# OTG is mainly used for OASIM and D-ITG (or iperf) for LTE-SOFTMODEM +# author Navid Nikaein +# company Eurecom +# email: navid.nikaein@eurecom.fr +# date 2015 + +#!/bin/bash +################################ +# include helper functions +################################ +THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) +. $THIS_SCRIPT_PATH/build_helper + + +####################################### +# Default PARAMETERS +###################################### +#general + +declare PERF_APP="OTG-OAISIM" # ITG, ITG_DECODE, PING, OTG, +declare TEST_MODE=0 +declare KEEP_LOG_FILESNUM_PKTS=0 +declare OWD="rttm" +declare DURATION=60000 # ms +declare NUM_PKTS=10000 +declare KBYTES=1000 # KBYTES +declare START=0 +declare DST="127.0.0.1" +declare DPORT="8999" +declare TP="UDP" +declare IDT_DIST="CONSTANT" +declare PS_DIST="CONSTANT" + +#IDT +declare RATE=1000 # pkt / s +declare MIN_RATE=100 +declare MAX_RATE=1000 + +# set paths to the required binaries and check if the required binaries are available +ENB_CONFIG=$OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf +OAISIM_EXEC=$OPENAIR_DIR/targets/bin/oaisim_nos1 +BYPASSE_ITTI=0 +OTGPLOT="$OPENAIR2_DIR/UTIL/OTG/OTGplot" +PS2PDF="ps2pdf" + +print_help_perf(){ + echo_success "Name : perf_oai generate traffic and evaluate the performance " + echo_success "Usage: perf_oai -l ITG " + echo_success "-l | --perf-app : Set Performance evaluation app: ITGS, ITGD,PING, OTG-OAISIM, OTG-CBA, (default OTG-OAISIM)" + echo_success "-m | --owd : enable D-ITG one-way-delay meter (default disabled)" + echo_success "-e | --duration : set the duration of the experiment (default 60000ms)" + echo_success "-i | --idt-dist : set the distribution of the inter-departure time: CONSTANT, UNIFORM,EXPONENTIAL (default CONSTANT)" + echo_success "-s | --ps-dist : set the distribution of the inter-departure time (default CONSTANT, available options: UNIFORM,EXPONENTIAL)" + echo_success "-d | --dst : set the destination address (default 127.0.0.1)" + echo_success "-p | --dst-port : set the destination address (default NONE)" + echo_success "-t | --test : enable test mode to validate the functionality (default disabled)" + echo_success "-k | --keep-log-file : keep the log files (default disabled)" + echo_success "-c | --enb-config : set the eNB config path (default $ENB_CONFIG)" + echo_success "-x | --oaisim-exec : set oaisim exec path (default $OASIM_EXEC with nos1 and ITTI enabled)" + echo_success "-b | --bypass-itti : bypass ITTI interafce (default use itti)" + + +} + +################################ +# run ITGSEND +################################ + +itg_send(){ + + $SUDO apt-get install -y test_install_package d-itg + + LOG_FILE="itg_log_template.txt" + touch results/${LOG_FILE} + + if [ $TEST_MODE = 0 ] ; then + declare -a PS=(32 64 128 256 512 1024 1408) + declare -a IDT=(1 5 10 50 100 1000) + else + declare -a PS=(32 64) + declare -a IDT=(1) + fi + + declare PS_LEN=${#PS[@]} + declare IDT_LEN=${#IDT[@]} +#echo_info "PS_LEN is $PS_LEN, IDT_LEN is $IDT_LEN" + + declare i=0 + declare j=0 + declare e=0 + # send traffic + for idt in ${IDT[@]}; do +# echo_info "IDT is set to $idt i is $i" + if [ $i -lt $IDT_LEN ]; then + let i++; + fi + + if [ $IDT_DIST = "CONSTANT" ]; then + IDT_OPT="-C $idt " + fi + if [ $IDT_DIST = "UNIFORM" ]; then + IDT_OPT="-U $idt ${IDT[i]} " + fi + if [ $IDT_DIST = "EXPONENTIAL" ]; then + IDT_OPT="-E $idt " + fi + + for ps in ${PS[@]}; do +# echo_info "PS is $ps j is $j" + if [ $j -lt $PS_LEN ]; then + let j++; + fi + if [ $PS_DIST = "CONSTANT" ]; then + PS_OPT="-c $ps " + fi + if [ $PS_DIST = "UNIFORM" ]; then + PS_OPT="-u $ps ${PS[j]} " + fi + if [ $PS_DIST = "EXPONENTIAL" ]; then + PS_OPT="-e $ps " + fi + start=$(date +%s) + RECV_FILE="recv_log_${IDT_DIST}_idt${idt}_${PS_DIST}_ps${ps}_${OWD}_${TP}" + echo_info "Start test_$i.$j:: ITGSend -a $DST $IDT_OPT $PS_OPT -m $OWD -d $START -T $TP -t $DURATION -x $RECV_FILE -l " + echo "Start test_$i.$j:: ITGSend -a $DST $IDT_OPT $PS_OPT -m $OWD -d $START -T $TP -t $DURATION -x $RECV_FILE -l " >> results/${oai_exp_date} + #sleep 1 + ITGSend -a $DST $IDT_OPT $PS_OPT -m $OWD -d $START -T $TP -t $DURATION -x $RECV_FILE -l + itg_status=$? + end=$(date +%s) + diff=$(( $end - $start )) + + if [ $itg_status = 0 ] ; then + echo_success "[$end] test_$i.$j passed" + echo "[$end] test_$i.$j passed" >> ./results/$LOG_FILE + STATUS="PASSED" + else + let e++; + echo_error "[$end] test_$i.$j failed :: D-ITG return exit code $itg_status" + echo "[$end]test_$i.$j failed :: ITG return exit code $itg_status" >> ./results/$LOG_FILE + STATUS="FAILED" + fi + + echo_info "End test_$i.$j:: runtime: $diff" + echo "End test_$i.$j:: runtime: $diff" >> results/${oai_exp_date} + + done + + done + +} + +itg_decode(){ + + declare i=0 + declare j=0 + if [ $TEST_MODE = 0 ] ; then + declare -a PS=(32 64 128 256 512 1024 1408) + declare -a IDT=(1 5 10 50 100 1000) + else + declare -a PS=(32 64) + declare -a IDT=(1) + fi + + for idt in ${IDT[@]}; do + + for ps in ${PS[@]}; do + RECV_FILE="recv_log_${IDT_DIST}_idt${idt}_${PS_DIST}_ps${ps}_${OWD}_${TP}" + OUTPUT_FILE="results_${IDT_DIST}_idt${idt}_${PS_DIST}_ps${ps}_${OWD}_${TP}.txt" + OCTAVE_FILE="results_${IDT_DIST}_idt${idt}_${PS_DIST}_ps${ps}_${OWD}_${TP}.." + + echo_info "decode test_$i.$j: ITGDec $RECV_FILE -v -t -l $OUTPUT_FILE -o $OCTAVE_FILE" + ITGDec $RECV_FILE -v -t -l $OUTPUT_FILE + + done + + done + + +} + +ping_stats(){ + + status="failed" + failedhosts="" + +# add ip / hostname separated by white space + +if [ $TEST_MODE = 0 ]; then + declare COUNT=100 + declare -a HOSTS=($DST) + declare -a PS=(64 768 2048 4096 8192) + declare -a IDT=(1 .8 .4 .2) +else + declare COUNT=10 + declare -a HOSTS=(localhost) + declare -a PS=(64 2048) + declare -a IDT=(.5) +fi + + +declare i=0 +declare j=0 +declare k=0 + +start_exp=$(date +%s) + +for host in ${HOSTS[@]}; do + let i++; + let j=0; + OUTPUT_FILE="rtt_host${host}.csv" + touch results/${OUTPUT_FILE} + for idt in ${IDT[@]}; do + let j++; + let k=0; + for ps in ${PS[@]}; do + let k++; + # | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }') + start=$(date +%s) + LOG_FILE="recv_log_host${host}_idt${idt}_ps${ps}.txt" + touch results/${LOG_FILE} + echo_info "Start test_$i.$j.$k:: ping -c $COUNT -q -U $host -s $ps -i $idt" + echo "Start test_$i.$j.$k:: ping -c $COUNT -q -U $host -s $ps -i $idt" >> results/${oai_exp_date} + $(ping -c $COUNT -q -U $host -s $ps -i $idt 1>&2 >> ./results/$LOG_FILE ) + end=$(date +%s) + diff=$(( $end - $start )) + + count=$(cat ./results/$LOG_FILE | awk -F, '/received/{print $2*1}') + latency=$(cat ./results/$LOG_FILE | tail -1 |cut -f2- -d=) + + MIN=$(cut -f1 -d/ <<< $latency) + AVG=$(cut -f2 -d/ <<< $latency) + MAX=$(cut -f3 -d/ <<< $latency) + MDEV=$(cut -f4 -d/ <<< $latency | cut -f1 -d" ") + UNIT=$(cut -f2 -d" " <<< $latency) + + echo_success "Latency:: count $count min $MIN avg $AVG max $MAX mdev $MDEV ($UNIT)" + echo "$idt;$ps;$COUNT;$count;$MIN;$AVG;$MAX;$MDEV;" >> ./results/$OUTPUT_FILE + if [ $count -eq 0 ]; then + failedhosts="$failedhosts $host" + status="failed" + else + status="passed" + fi + echo_info "End test_$i.$j.$k:: runtime: $diff :: status $status " + echo "End test_$i.$j.$k:: runtime: $diff :; status $status" >> results/${oai_exp_date} + + done + done +done +end_exp=$(date +%s) +diff_exp=$(( $end_exp - $start_exp )) + +let total_tests=i*j*k; +echo_info "total tests: $total_tests for a duration $diff_exp (s)" + +} + +oaisim_otg_stats(){ + +# install the required packages + + $SUDO apt-get install -y test_install_package octave >> results/perf_log.txt 2>&1 + + $SUDO pkill oaisim + $SUDO pkill oaisim_nos1 + + $SUDO rmmod nasmesh > /dev/null 2>&1 + + echo_success "Bringup UE interface..." + $SUDO insmod $OPENAIR_DIR/targets/bin/nasmesh.ko + sync + + if [ ! -f $OAISIM_EXEC ]; then + echo_info "3.1 compiling OAISIM ($OPENAIR_TARGETS/cmake_targets/build_oai --oaisim -c)" + ($OPENAIR_TARGETS/cmake_targets/build_oai --oaisim -c >> results/perf_log.txt 2>&1 ) + build_stats=$? + if [ $build_stats != 0 ] ; then + echo_error "$OAISIM_EXEC cannot be built, check results/perf_log.txt file" + exit $? + fi + else + echo_info "ensure that OAISIM is not built with the S1 interface" + fi + + if [ ! -f $OTGPLOT ]; then + echo_error "$OTGPLOT not found" + exit $? + fi + +# Set the default Parameters + ABSTRACTION=1 +#FRAME_TYPE=0 # FDD=0, TDD =1, 2,3,4,5,6 + AGGR_RESULT=1 + STATUS="PASSED" + EXTRA_STATS=0 + declare NUM_UES=7 + + if [ $TEST_MODE = 0 ]; then + declare -a TEMPLATES=(120 121 122 123 124 125 126 127 128 129 130) + declare -a FRAME_TYPE=(0 3) + declare -a METRICS=(latency jitter goodput) + declare -a RB=(25 50 100) + else + declare -a TEMPLATES=(125) + declare -a FRAME_TYPE=(3) + declare -a METRICS=(latency) + declare -a RB=(25) + fi + + if [ $ABSTRACTION = 1 ]; then + OPT="-a " + fi + + if [ $BYPASSE_ITTI = 0 ]; then + OPT="$OPT -O $ENB_CONFIG " + fi + + declare num_cols=0 + let num_cols=NUM_UES+1 + if [ $AGGR_RESULT = 1 ]; then + COLUMN="[$num_cols:$num_cols]" + else + COLUMN="[1:$num_cols]" + fi + + declare i=0 + declare j=0 + declare k=0 + declare e=0 + + start_exp=$(date +%s) + + for template in ${TEMPLATES[@]}; do + let i++; + let j=0; + for frame in ${FRAME_TYPE[@]}; do + let j++; + let k=0; + + if [ $frame = 0 ]; then + OPT="$OPT -F " + else + OPT="$OPT -C $frame " + fi + + for rb in ${RB[@]}; do + let k++; + start=$(date +%s) + LOG_FILE="oaisim_log_template${template}_frame${frame}_rb${rb}.txt" + touch results/${LOG_FILE} + echo_info "[$start] Start test_$i.$j.$k:: $OAISIM_EXEC $OPT -R $RB -c $template" + echo "Start test_$i.$j.$k:: $OAISIM_EXEC $OPT -R $RB -c $template" >> results/${oai_exp_date} + #sleep 1 + $OAISIM_EXEC $OPT -R $RB -c $template 1>&2 >> ./results/$LOG_FILE + # store exit status + oai_status=$? + end=$(date +%s) + diff=$(( $end - $start )) + + #check the oaisim exit status + if [ $oai_status = 0 ] ; then + echo_success "[$end] test_$i.$j.$k passed" + echo "[$end] test_$i.$j.$k passed" >> ./results/$LOG_FILE + STATUS="PASSED" + else + let e++; + echo_error "[$end] test_$i.$j.$k failed :: OAISIM return exit code $oai_status (remove bin/oaisim)" + echo "[$end]test_$i.$j.$k failed :: OAISIM return exit code $oai_status" >> ./results/$LOG_FILE + STATUS="FAILED" + fi + + # create the curves + for metric in ${METRICS[@]}; do + if [ $metric = "goodput" ]; then + unit="(kB/s)" + else + unit="(ms)" + fi + if [ -f /tmp/otg_${metric}.dat ]; then + export TITLE="Application $metric $unit" + cp /tmp/otg_${metric}.dat ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat + echo_info "$OTGPLOT ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat $COLUMN" + echo "$OTGPLOT ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat $COLUMN" >> results/${oai_exp_date} + $($OTGPLOT ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat $COLUMN 1>&2 >> ./results/$LOG_FILE ) + $($PS2PDF -dOptimize=true -dEmbedAllFonts=true ./otg-${metric}-template${template}-frame${frame}-rb${rb}.eps ) + # remove the first line of the file + echo "$(tail -n+2 ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat)" > ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat + else + echo_error "file /tmp/otg_${metric}.dat does not exists" + fi + done + if [ $KEEP_LOG_FILESNUM_PKTS = 0 ]; then + rm -f ./results/$LOG_FILE + fi + mv *.eps ./results/ + mv *.pdf ./results/ + mv /tmp/otg.log ./results/otg-template${template}-frame${frame}-rb${rb}.log + echo_info "End test_$i.$j.$k:: runtime: $diff :: status $STATUS" + echo "End test_$i.$j.$k:: runtime: $diff :: status $STATUS" >> results/${oai_exp_date} + + + done + done + done + + end_exp=$(date +%s) + diff_exp=$(( $end_exp - $start_exp )) + + let total_tests=i*j*k; + echo_info "total tests: $total_tests for a duration $diff_exp (s) error ($e)" + echo "total tests: $total_tests for a duration $diff_exp (s) error ($e)" >> results/${oai_exp_date} + +} + + +cba_otg_stats(){ + + test_install_package octave + +ABSTRACTION=1 +FRAME_TYPE=0 # FDD=0, TDD =1 +AGGR_RESULT=1 +#OAISIM="$OPENAIR_TARGETS/bin/oaisim" +OAISIM="bin/oaisim.cba" # to compile: make cleanall; make Rel10=1 CBA=1 in targets/SIMU/USER +OTGPLOT="$OPENAIR2_DIR/UTIL/OTG/OTGplot" +PS2PDF="ps2pdf" +STATUS="PASSED" +EXTRA_STATS=0 +declare NUM_UES=7 + +if [ $TEST_MODE = 0 ]; then + declare -a TEMPLATES=(120 121 122 123 124 125 126 127 128 129 130) + declare -a CBA=(0 1 2 3 4) + declare -a BACKOFF=(0 15 30 60 120) + declare -a METRICS=(latency jitter goodput) + declare -a RB=(25) +else + declare -a TEMPLATES=(125) + declare -a CBA=(1) + declare -a BACKOFF=(0 15 30 60 120) + declare -a METRICS=(latency) + declare -a RB=(25) +fi + +if [ ! -f $OAISIM_EXEC ]; then + echo_error "$OAISIM_EXEC not found" + exit $? +fi +if [ ! -f $OTGPLOT ]; then + echo_error "$OTGPLOT not found" + exit $? +fi + +if [ $ABSTRACTION = 1 ]; then + OPT="-a " +fi +if [ $FRAME_TYPE = 0 ]; then + OPT="$OPT -F " +fi + +declare num_cols=0 +let num_cols=NUM_UES+1 +if [ $AGGR_RESULT = 1 ]; then + COLUMN="[$num_cols:$num_cols]" +else + COLUMN="[1:$num_cols]" +fi + +declare collision=0 +declare enb_cba_access=0 +declare ue_cba_access=0 +declare missed=0 +declare unused=0 + +declare i=0 +declare j=0 +declare k=0 +declare e=0 + +start_exp=$(date +%s) + +STATS1="cba_stats1.txt" +touch results/${STATS1} + +for template in ${TEMPLATES[@]}; do + let i++; + let j=0; + for group in ${CBA[@]}; do + let j++; + let k=0; + for backoff in ${BACKOFF[@]}; do + let k++; + start=$(date +%s) + LOG_FILE="oaisim_log_template${template}_group${group}_backoff${backoff}.txt" + touch results/${LOG_FILE} + echo_info "[$start] Start test_$i.$j.$k:: $OAISIM_EXEC $OPT -w $group -R $RB --cba-backoff $backoff -c $template" + echo "Start test_$i.$j.$k:: $OAISIM_EXEC $OPT -w $group -R $RB --cba-backoff $backoff -c $template" >> results/${oai_exp_date} + #sleep 1 + $OAISIM_EXEC $OPT -w $group -R $RB --cba-backoff $backoff -c $template 1>&2 >> ./results/$LOG_FILE + # store exit status + oai_status=$? + end=$(date +%s) + diff=$(( $end - $start )) + + #check the oaisim exit status + if [ $oai_status = 0 ] ; then + echo_success "[$end] test_$i.$j.$k passed" + echo "[$end] test_$i.$j.$k passed" >> ./results/$LOG_FILE + STATUS="PASSED" + else + let e++; + echo_error "[$end] test_$i.$j.$k failed :: OAISIM return exit code $oai_status" + echo "[$end]test_$i.$j.$k failed :: OAISIM return exit code $oai_status" >> ./results/$LOG_FILE + STATUS="FAILED" + fi + + if [ $group -gt 0 ]; then + + let ue_cba_access=$(cat ./results/$LOG_FILE | grep -c "CBA transmission oppurtunity" ) + let enb_cba_access=$(cat ./results/$LOG_FILE | grep -c "schedule CBA access" ) + let missed=$(cat ./results/$LOG_FILE | grep -c "wait for backoff to expire" ) + let unused=enb_cba_access-ue_cba_access; + let collision=$(cat ./results/$LOG_FILE | grep -c "first CBA collision detected" ) + + #frame, subframe, ue, group + #collision_stats=$(cat ./results/$LOG_FILE | grep "collision" | cut -d " " -f3,5,12,15 ) + if [ $EXTRA_STATS = 1 ]; then + STATS2="cba_template_${template}_stats2.txt" + touch results/${STATS2} + while read -r line + do + SFN=$(cut -f1 -d " " <<< $line) + SSFN=$(cut -f2 -d " " <<< $line) + UEID=$(cut -f3 -d " " <<< $line) + GPID=$(cut -f4 -d " " <<< $line) + #echo_success "$SFN;$SSFN;$UEID;$GPID;" + echo "$SFN;$SSFN;$UEID;$GPID;" >> ./results/$STATS2 + done < <(cat ./results/$LOG_FILE | grep "CBA collision set SR for UE" | cut -d " " -f3,5,13,16 ) + fi + + echo_success "CBA stats:: template $template;group $group; backoff $backoff; enb cba allocation $enb_cba_access; ue cba access $ue_cba_access; collision $collision; missed $missed; unused $unused;" + echo "$template;$group;$backoff;$enb_cba_access;$ue_cba_access;$collision;$missed;$unused;" >> ./results/$STATS1 + fi + + # create the curves + for metric in ${METRICS[@]}; do + if [ $metric = "goodput" ]; then + unit="(kB/s)" + else + unit="(ms)" + fi + if [ -f /tmp/otg_${metric}.dat ]; then + export TITLE="Application $metric $unit" + cp /tmp/otg_${metric}.dat ./results/otg-${metric}-template${template}-group${group}-backoff${backoff}.dat + echo_info "$OTGPLOT ./results/otg-${metric}-template${template}-group${group}-backoff${backoff}.dat $COLUMN" + echo "$OTGPLOT ./results/otg-${metric}-template${template}-group${group}-backoff${backoff}.dat $COLUMN" >> results/${oai_exp_date} + $($OTGPLOT ./results/otg-${metric}-template${template}-group${group}-backoff${backoff}.dat $COLUMN 1>&2 >> ./results/$LOG_FILE ) + $($PS2PDF -dOptimize=true -dEmbedAllFonts=true ./otg-${metric}-template${template}-group${group}-backoff${backoff}.eps ) + # remove the first line of the file + echo "$(tail -n+2 ./results/otg-${metric}-template${template}-group${group}-backoff${backoff}.dat)" > ./results/otg-${metric}-template${template}-group${group}-backoff${backoff}.dat + else + echo_error "file /tmp/otg_${metric}.dat does not exists" + fi + done + if [ $KEEP_LOG_FILESNUM_PKTS = 0 ]; then + rm -f ./results/$LOG_FILE + fi + mv *.eps ./results/ + mv *.pdf ./results/ + mv /tmp/otg.log ./results/otg-template${template}-group${group}-backoff${backoff}.log + echo_info "End test_$i.$j.$k:: runtime: $diff :: status $STATUS" + echo "End test_$i.$j.$k:: runtime: $diff :: status $STATUS" >> results/${oai_exp_date} + + # backoff not required when CBA is not used + if [ $group -eq 0 ]; then + break; + fi + + done + done +done + +end_exp=$(date +%s) +diff_exp=$(( $end_exp - $start_exp )) + +let total_tests=i*j*k; +echo_info "total tests: $total_tests for a duration $diff_exp (s) error ($e)" +echo "total tests: $total_tests for a duration $diff_exp (s) error ($e)" >> results/${oai_exp_date} + +} + + +function main() +{ + + ############## script params ##################### + + until [ -z "$1" ] + do + case "$1" in + -c | --test) + TEST_MODE=1; + echo_info "enabling the test mode" + shift; + ;; + -l | --perf-app) + PERF_APP=$2 + echo_info "Setting the performance evaluation APP to $PERF_APP" + if [ $PERF_APP = "DITG" ]; then + echo_info "you need to run " + fi + shift 2; + ;; + -m | --owd) + OWD="owdm" + echo_info "setting D-ITG one-way-delay meter" + shift; + ;; + -e | --duration) + DURATION=$2 + echo_info "Setting the traffic duration to $DURATION" + shift 2; + ;; + -n | --num-pkts) + NUM_PKTS=$2 + echo_info "Setting number of packets to $NUM_PKTS" + shift 2; + ;; + -k | --keep-log-file) + KEEP_LOG_FILESNUM_PKTS=1 + echo_info "Keep the log files" + shift; + ;; + -i | --idt-dist) + IDT_DIST=$2 + echo_info "setting IDT distribution to $IDT_DIST" + shift 2; + ;; + -s | --ps-dist) + PS_DIST=$2 + echo_info "setting PS distribution to $PS_DIST" + shift 2; + ;; + -d | --dst) + DST=$2 + echo_info "setting the destination address to $DST" + shift 2; + ;; + -p | --dst-port) + DPORT=$2 + echo_info "setting the destination port to $DPORT" + shift 2; + ;; + -c | --enb-config) + ENB_CONFIG=$2 + echo_info "setting the enb config file to $ENB_CONFIG" + shift 2; + ;; + -x | --oaisim-exec) + OAISIM_EXEC=$2 + echo_info "setting the oaisim exec to $OAISIM_EXEC" + shift 2; + ;; + -b | --bypass-itti) + BYPASSE_ITTI=1 + shift;; + -h | --help) + print_help_perf + exit -1 + ;; + *) + echo "Unknown option $1" + break ; + # unknown option + ;; + esac + done + + ##################### + # create a bin dir + ##################### + echo_info "1. Creating the results dir ..." + #rm -rf results + mkdir -m 777 -p results + + exp_date=`date +%Y_%m_%d` + exp_time=`date +%H_%M_%S` + oai_exp_date="exp_date_${exp_date}" + touch results/${oai_exp_date} + + touch results/perf_log.txt + chmod -f 777 results/perf_log.txt + + echo "start experiment at date $exp_date time $exp_time " >> results/${oai_exp_date} + + ############################################ + # setting and printing OAI envs, we should check here + ############################################ + + echo_info "2. Setting the OAI PATHS ..." + + set_openair_env + cecho "OPENAIR_HOME = $OPENAIR_HOME" $green + cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green + cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green + cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green + cecho "OPENAIRCN_DIR = $OPENAIRCN_DIR" $green + cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green + + + echo "OPENAIR_HOME = $OPENAIR_HOME" >> results/${oai_exp_date} + echo "OPENAIR1_DIR = $OPENAIR1_DIR" >> results/${oai_exp_date} + echo "OPENAIR2_DIR = $OPENAIR2_DIR" >> results/${oai_exp_date} + echo "OPENAIR3_DIR = $OPENAIR3_DIR" >> results/${oai_exp_date} + echo "OPENAIRCN_DIR = $OPENAIRCN_DIR" >> results/${oai_exp_date} + echo "OPENAIR_TARGETS = $OPENAIR_TARGETS" >> results/${oai_exp_date} + + + echo_info "eNB_CONFIG : " $ENB_CONFIG + echo_info "OAISIM_EXEC PATH: " $OAISIM_EXEC + echo_info "OTGPLOT PATH:" $OTGPLOT + + case "$PERF_APP" in + 'ITGS') + echo_info "3. running ITGSend (ensure that either oaisim or lte-softmodem is running)" + itg_send + ;; + 'ITGD') + echo_info "running ITGDECODE (At the end of the experiment, ensure that the results are in the current directory)" + itg_decode + ;; + 'PING') + echo_info "3. running ping (ensure that either oaisim or lte-softmodem is running)" + ping_stats + ;; + 'OTG-OAISIM') + echo_info "3. running OTG on oaisim (this will call oaisim as well)" + oaisim_otg_stats + ;; + 'OTG-CBA') + echo_info "3. running OTG on oaisim with cba" + cba_otg_stats + ;; + 'IPERF') + echo_warning "iperf not supported" + ;; + 'NONE') + ;; + *) + echo_error "Unknown option $RUN_ITG" + ;; + esac + +} + +main "$@" +