#!/bin/bash ################################################################################ # OpenAirInterface # Copyright(c) 1999 - 2014 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@lists.eurecom.fr # # Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE # ################################################################################ # file run_enb_s1_usrp # brief run script for eNB USRP. # author Lionel GAUTHIER and Navid Nikaein # company Eurecom # email: lionel.gauthier@eurecom.fr and navid.nikaein@eurecom.fr ################################ # include helper functions ################################ THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) source $THIS_SCRIPT_PATH/build_helper declare -i g_run_msc_gen=0 declare g_msc_dir="/tmp" function help() { echo_error " " echo_error "Usage: run_enb_s1_usrp -c config_file [OPTION]..." echo_error "Run the eNB executable, hardware target is USRP." echo_error " " echo_error "Mandatory arguments:" echo_error " -c, -C, --config-file eNB_config_file eNB config file, (see $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF)" echo_error " " echo_error "Options:" echo_error "Mandatory arguments to long options are mandatory for short options too." echo_error " -g, --gdb Run with GDB." echo_error " -h, --help Print this help." echo_error " -e, --ulsch-max-errors num-errs maximum allowed number of uplink errors" echo_error " -f, --rf-config-file filename RF specific configuration file" echo_error " -K, --itti-dump-file filename ITTI dump file containing all ITTI events occuring during EPC runtime.(can omit file name if last argument)" echo_error " -M, --target-dl-mcs mcs Downlink target MCS." echo_error " -m, --mscgen directory Generate mscgen output files in a directory" echo_error " -s, --show-stdout Do not redirect stdout and stderr to file /tmp/lte_softmodem.stdout.txt." echo_error " -S, --enable-missed-slot Continue execution in case of missed slot." echo_error " -T, --target-ul-mcs mcs Uplink target MCS." echo_error " -V, --vcd Dump timings of processing in a GTKWave compliant file format." echo_error " -W, --wireshark-l2 Dump MAC frames for visualization with wireshark." echo_error " You need to open Wireshark, open the preferences, and check try heuristics for the UDP protocol, MAC-LTE, RLC-LTE," echo_error " and PDCP-LTE. Then capture for all the interfaces with the following filters: s1ap or lte_rrc or mac-lte or rlc-lte" echo_error " or pdcp-lte. Note the L2 pdus are transmitted to the local interface." echo_error " -x, --xforms Run XFORMS scope windows." } function do_msc_gen() { cd $g_msc_dir last_created_file=`ls -t mscgen* | head -1 | tr -d ':'` $OPENAIR_DIR/targets/SCRIPTS/msc_gen.py sync last_created_file2=`ls -t mscgen* | head -1 | tr -d ':'` if [ x"$last_created_file" != x"$last_created_file2" ]; then if [ -f ./$last_created_file2/oai_mscgen_page_0.png ]; then command -v eog 2>/dev/null && eog ./$last_created_file2/oai_mscgen_page_0.png fi fi } function control_c() # run if user hits control-c { echo_warning "\nExiting by ctrl+c\n" if [ $g_run_msc_gen -eq 1 ]; then do_msc_gen fi exit $? } function main() { local -i run_gdb=0 local -i show_stdout=0 local exe_arguments="" local itti_dump_file="" until [ -z "$1" ] do case "$1" in -c | -C | --config-file) CONFIG_FILE=$2 # may be relative path if [ -f $(dirname $(readlink -f $0))/$CONFIG_FILE ]; then CONFIG_FILE=$(dirname $(readlink -f $0))/$CONFIG_FILE echo "setting config file to: $CONFIG_FILE" CONFIG_FILE_ACCESS_OK=1 else # may be absolute path if [ -f $CONFIG_FILE ]; then echo "setting config file to: $CONFIG_FILE" else echo_fatal "config file $CONFIG_FILE not found" fi fi exe_arguments="$exe_arguments -O $CONFIG_FILE" shift 2; ;; -g | --gdb) run_gdb=1 echo "setting GDB flag to: $run_gdb" shift; ;; -h | --help) help shift; exit 0 ;; -e | --ulsch-max-errors) ulsch_max_errors=$2 echo "setting --ulsch-max-errors to $ulsch_max_errors" exe_arguments="$exe_arguments --ulsch-max-errors=$ulsch_max_errors" shift 2; ;; -f | --rf-config-file) rf_config_file=$2 # can omit file name if last arg on the line if [ "x$rf_config_file" = "x" ]; then rf_config_file=null shift 1; else shift 2; fi if [ "$rf_config_file" != "null" ]; then echo "setting --rf-config-file to $rf_config_file" exe_arguments="$exe_arguments --rf-config-file=$rf_config_file" fi ;; -K | --itti-dump-file) itti_dump_file=$2 # can omit file name if last arg on the line if [ "x$itti_dump_file" = "x" ]; then itti_dump_file="/tmp/enb_s1_usrp_itti.log" shift 1; else shift 2; fi echo "setting ITTI dump file to: $itti_dump_file" exe_arguments="$exe_arguments -K $itti_dump_file" ;; -m | --mscgen) g_msc_dir=$2 # can omit file name if last arg on the line if [ -d "$g_msc_dir" ]; then echo "setting mscgen log files to dir: $g_msc_dir" g_run_msc_gen=1 shift 2; else echo_error "Mscgen log dir does not exist" exit -1 fi ;; -M | --target-dl-mcs) echo "setting target dl MCS to $2" exe_arguments="$exe_arguments -m $2" shift 2; ;; -V | --vcd) echo "setting gtk-wave output" exe_arguments="$exe_arguments -V /tmp/oai_gtk_wave.vcd" shift ; ;; -s | --show-stdout) echo "setting show stdout" show_stdout=1 shift ; ;; -S | --enable-missed-slot) echo "setting continue even if missed slot" exe_arguments="$exe_arguments -S" shift ; ;; -T | --target-ul-mcs) echo "setting target ul MCS to $2" exe_arguments="$exe_arguments -t $2" shift 2; ;; -W | --wireshark-l2) echo "setting l2 pcap dump output" exe_arguments="$exe_arguments -W" shift ; ;; -x | --xforms) exe_arguments="$exe_arguments -d" echo "setting xforms" shift; ;; *) echo "Unknown option $1" help exit 0 ;; esac done set_openair_env cecho "OPENAIR_DIR = $OPENAIR_DIR" $green if [ ! -e $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10 ]; then echo_fatal "Cannot find $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10 executable" fi if [ $run_gdb -eq 0 ]; then # trap keyboard interrupt (control-c) trap control_c SIGINT if [ $show_stdout -eq 0 ]; then echo_warning "stdout/sderr of lte-softmodem executable redirected to /tmp/lte_softmodem.stdout.txt" exec $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10 `echo $exe_arguments` 2>&1 > /tmp/lte_softmodem.stdout.txt else exec $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10 `echo $exe_arguments` fi else # trap keyboard interrupt (control-c) is done by gdb touch ~/.gdb_lte_softmodem chmod 777 ~/.gdb_lte_softmodem echo "file $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10" > ~/.gdb_lte_softmodem echo "set args $exe_arguments" >> ~/.gdb_lte_softmodem echo "run" >> ~/.gdb_lte_softmodem cat ~/.gdb_lte_softmodem if [ $show_stdout -eq 0 ]; then echo_warning "stdout/sderr of lte-softmodem executable redirected to /tmp/gdb_lte_softmodem.stdout.txt" gdb -n -x ~/.gdb_lte_softmodem 2>&1 > /tmp/gdb_lte_softmodem.stdout.txt else gdb -n -x ~/.gdb_lte_softmodem fi if [ $g_run_msc_gen -eq 1 ]; then do_msc_gen fi fi } main "$@"