run_enb_s1_usrp 9.19 KB
Newer Older
Lionel Gauthier's avatar
 
Lionel 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
Lionel Gauthier's avatar
 
Lionel 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
Lionel Gauthier's avatar
 
Lionel Gauthier committed
33
# company Eurecom
34
# email:  lionel.gauthier@eurecom.fr and navid.nikaein@eurecom.fr
Lionel Gauthier's avatar
 
Lionel 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"
Lionel Gauthier's avatar
 
Lionel 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."
trilyrak's avatar
trilyrak committed
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"
Lionel Gauthier's avatar
 
Lionel 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."
Raymond Knopp's avatar
Raymond 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."
Lionel Gauthier's avatar
 
Lionel 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."
Lionel Gauthier's avatar
Lionel 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."
Lionel Gauthier's avatar
 
Lionel 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 $?
}

Lionel Gauthier's avatar
 
Lionel Gauthier committed
103 104 105 106

function main()
{
  local -i run_gdb=0
107
  local -i show_stdout=0
Lionel Gauthier's avatar
 
Lionel Gauthier committed
108
  local    exe_arguments=""
109
  local    itti_dump_file=""
Lionel Gauthier's avatar
 
Lionel 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"
Lionel Gauthier's avatar
 
Lionel Gauthier committed
135 136 137 138 139 140 141
        shift;
        ;;
      -h | --help)
        help
        shift;
        exit 0
        ;;
trilyrak's avatar
trilyrak committed
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
Lionel Gauthier's avatar
 
Lionel 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"
Lionel Gauthier's avatar
 
Lionel 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"
Lionel Gauthier's avatar
 
Lionel Gauthier committed
173
        ;;      
Raymond Knopp's avatar
Raymond Knopp committed
174
      -m | --mscgen)
175
        g_msc_dir=$2
Raymond Knopp's avatar
Raymond 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
Raymond Knopp's avatar
Raymond Knopp committed
180 181 182 183 184 185
          shift 2;
        else
          echo_error "Mscgen log dir does not exist"
          exit -1
        fi
        ;;      
Lionel Gauthier's avatar
 
Lionel 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)
Lionel Gauthier's avatar
Lionel Gauthier committed
192
        echo "setting gtk-wave output"
Lionel Gauthier's avatar
 
Lionel 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 ;
        ;;
Lionel Gauthier's avatar
 
Lionel 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)
Lionel Gauthier's avatar
Lionel Gauthier committed
212 213 214 215
        echo "setting l2 pcap dump output"
        exe_arguments="$exe_arguments -W"
        shift ;
        ;;
Lionel Gauthier's avatar
 
Lionel Gauthier committed
216 217
      -x | --xforms)
        exe_arguments="$exe_arguments -d"
218
        echo "setting xforms"
Lionel Gauthier's avatar
 
Lionel 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"
Lionel Gauthier's avatar
 
Lionel 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
Lionel Gauthier's avatar
 
Lionel Gauthier committed
248
  else
249
    # trap keyboard interrupt (control-c) is done by gdb
Lionel Gauthier's avatar
 
Lionel 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
Lionel Gauthier's avatar
 
Lionel 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
Lionel Gauthier's avatar
 
Lionel Gauthier committed
265 266 267 268 269 270 271
  fi
}



main "$@"