run_enb_s1_usrp 9.19 KB
Newer Older
gauthier's avatar
 
gauthier committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/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
25
#  OpenAirInterface Dev  : openair4g-devel@lists.eurecom.fr
gauthier's avatar
 
gauthier committed
26 27 28 29 30 31
#
#  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.
32
# author  Lionel GAUTHIER and Navid Nikaein
gauthier's avatar
 
gauthier committed
33
# company Eurecom
34
# email:  lionel.gauthier@eurecom.fr and navid.nikaein@eurecom.fr
gauthier's avatar
 
gauthier committed
35 36 37 38 39 40 41


################################
# include helper functions
################################
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
source $THIS_SCRIPT_PATH/build_helper
42 43
declare -i g_run_msc_gen=0
declare    g_msc_dir="/tmp"
gauthier's avatar
 
gauthier committed
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58


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."
59
  echo_error "  -e, --ulsch-max-errors    num-errs  maximum allowed number of uplink errors"
60
  echo_error "  -f, --rf-config-file      filename  RF specific configuration file"
gauthier's avatar
 
gauthier committed
61 62
  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."
knopp's avatar
knopp committed
63
  echo_error "  -m, --mscgen              directory Generate mscgen output files in a directory"
64
  echo_error "  -s, --show-stdout                   Do not redirect stdout and stderr to file /tmp/lte_softmodem.stdout.txt."
gauthier's avatar
 
gauthier committed
65 66
  echo_error "  -S, --enable-missed-slot            Continue execution in case of missed slot."
  echo_error "  -T, --target-ul-mcs       mcs       Uplink target MCS."
gauthier's avatar
gauthier committed
67 68 69 70 71
  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."
gauthier's avatar
 
gauthier committed
72 73 74 75
  echo_error "  -x, --xforms                        Run XFORMS scope windows."
}


76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
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 $?
}

gauthier's avatar
 
gauthier committed
103 104 105 106

function main()
{
  local -i run_gdb=0
107
  local -i show_stdout=0
gauthier's avatar
 
gauthier committed
108
  local    exe_arguments=""
109
  local    itti_dump_file=""
gauthier's avatar
 
gauthier committed
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
  
  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
134
        echo "setting GDB flag to: $run_gdb"
gauthier's avatar
 
gauthier committed
135 136 137 138 139 140 141
        shift;
        ;;
      -h | --help)
        help
        shift;
        exit 0
        ;;
142 143 144 145 146 147
     -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;
	 ;;      
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
     -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)
163
        itti_dump_file=$2
gauthier's avatar
 
gauthier committed
164
        # can omit file name if last arg on the line
165 166
        if [ "x$itti_dump_file" = "x" ]; then
          itti_dump_file="/tmp/enb_s1_usrp_itti.log"
gauthier's avatar
 
gauthier committed
167 168 169 170
          shift 1;
        else
          shift 2;
        fi
171 172
        echo "setting ITTI dump file to: $itti_dump_file"
        exe_arguments="$exe_arguments -K $itti_dump_file"
gauthier's avatar
 
gauthier committed
173
        ;;      
knopp's avatar
knopp committed
174
      -m | --mscgen)
175
        g_msc_dir=$2
knopp's avatar
knopp committed
176
        # can omit file name if last arg on the line
177 178 179
        if [ -d  "$g_msc_dir" ]; then
          echo "setting mscgen log files to dir: $g_msc_dir"
          g_run_msc_gen=1
knopp's avatar
knopp committed
180 181 182 183 184 185
          shift 2;
        else
          echo_error "Mscgen log dir does not exist"
          exit -1
        fi
        ;;      
gauthier's avatar
 
gauthier committed
186 187 188 189 190 191
      -M | --target-dl-mcs)
        echo "setting target dl MCS to $2"
        exe_arguments="$exe_arguments -m $2"
        shift 2;
        ;;
      -V | --vcd)
gauthier's avatar
gauthier committed
192
        echo "setting gtk-wave output"
gauthier's avatar
 
gauthier committed
193 194 195
        exe_arguments="$exe_arguments -V /tmp/oai_gtk_wave.vcd"
        shift ;
        ;;
196 197 198 199 200
      -s | --show-stdout)
        echo "setting show stdout"
        show_stdout=1
        shift ;
        ;;
gauthier's avatar
 
gauthier committed
201 202 203 204 205 206 207 208 209 210
      -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;
        ;;
211
      -W | --wireshark-l2)
gauthier's avatar
gauthier committed
212 213 214 215
        echo "setting l2 pcap dump output"
        exe_arguments="$exe_arguments -W"
        shift ;
        ;;
gauthier's avatar
 
gauthier committed
216 217
      -x | --xforms)
        exe_arguments="$exe_arguments -d"
218
        echo "setting xforms"
gauthier's avatar
 
gauthier committed
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
        shift;
        ;;
      *)   
        echo "Unknown option $1"
        help
        exit 0
        ;;
    esac
  done


  set_openair_env 
  cecho "OPENAIR_DIR    = $OPENAIR_DIR" $green


gauthier's avatar
 
gauthier committed
234 235
  if [ ! -e $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10 ]; then
    echo_fatal "Cannot find $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10 executable"
gauthier's avatar
 
gauthier committed
236 237 238 239
  fi


  if [ $run_gdb -eq 0 ]; then 
240 241 242 243 244 245 246 247
    # 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
gauthier's avatar
 
gauthier committed
248
  else
249
    # trap keyboard interrupt (control-c) is done by gdb
gauthier's avatar
 
gauthier committed
250 251
    touch      ~/.gdb_lte_softmodem
    chmod 777  ~/.gdb_lte_softmodem
gauthier's avatar
 
gauthier committed
252
    echo "file $OPENAIR_DIR/targets/bin/lte-softmodem.Rel10" > ~/.gdb_lte_softmodem
gauthier's avatar
 
gauthier committed
253 254 255
    echo "set args $exe_arguments" >> ~/.gdb_lte_softmodem
    echo "run"                        >> ~/.gdb_lte_softmodem
    cat ~/.gdb_lte_softmodem
256 257 258 259 260 261 262 263 264
    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
gauthier's avatar
 
gauthier committed
265 266 267 268 269 270 271
  fi
}



main "$@"