run_enb_ue_virt_s1 10.7 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) any later 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
#
#  Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
#
################################################################################
# file start_enb_ue_virt_s1
# brief
# author Lionel Gauthier
# company Eurecom
# email: lionel.gauthier@eurecom.fr
###########################################
# INPUT OF THIS SCRIPT:
# THE DIRECTORY WHERE ARE LOCATED THE CONFIGURATION FILES
#########################################
# This script start  ENB+UE (all in one executable, on one host)
# MME+SP-GW executable have to be launched by your own (run_hss, run_epc) before this script is invoked.
#



###########################################################
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
. $THIS_SCRIPT_PATH/build_helper
###########################################################

function trim2()
{
    local var=$@
    var="${var#"${var%%[![:space:]]*}"}"   # remove leading whitespace characters
    var="${var%"${var##*[![:space:]]}"}"   # remove trailing whitespace characters
    echo -n "$var"
}

function is_tun_interface()
{
  my_bool=1
  for var in "$@"
  do
    if [ "a$var" == "a" ]; then
      echo "0";
      return;
    fi
    if [[ "$var" != *tun* ]]; then
      echo "0";
      return;
    fi
  done
  echo "$my_bool"
}

gauthier's avatar
gauthier committed
75 76 77 78 79 80 81 82 83

function help()
{
  echo_error " "
  echo_error "Usage: start_enb_ue_virt_s1 [OPTION]..."
  echo_error "Run the eNB and/or UE executable with no hardware."
  echo_error " "
  echo_error "Options:"
  echo_error "Mandatory arguments to long options are mandatory for short options too."
84
  echo_error "  -a, --abstraction                       enable phy abstraction mode"
gauthier's avatar
gauthier committed
85
  echo_error "  -c, -C, --config-file  eNB_config_file  eNB config file, (see $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF)"
gauthier's avatar
ok  
gauthier committed
86
  echo_error "                                          Default eNB config file if not set is $1"
87
  echo_error "  -l, --log-level                         set the global log level (8:trace, 7:debug, 6:info, 4:warn, 3:error). Note that the log configuration is eNB config file is ignored for oaisim."
gauthier's avatar
gauthier committed
88 89 90
  echo_error "  -g, --gdb                               Run with GDB."
  echo_error "  -h, --help                              Print this help."
  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)"
gauthier's avatar
gauthier committed
91
  echo_error "  -m, --mscgen           directory        Generate mscgen output files in a directory"
gauthier's avatar
gauthier committed
92
  echo_error "  -V, --vcd                               Dump timings of processing in a GTKWave compliant file format."
gauthier's avatar
gauthier committed
93 94 95 96
  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
97
  echo_error "  -x, --xforms                            Run XFORMS scope windows."
knopp's avatar
knopp committed
98 99
  echo_error " "
  echo_error " A simple data traffic test example: ping -m 1 -I oip1 192.168.12.100"
gauthier's avatar
gauthier committed
100 101 102 103
}



gauthier's avatar
gauthier committed
104 105
function main()
{
gauthier's avatar
ok  
gauthier committed
106 107
  set_openair_env
  cecho "OPENAIR_DIR    = $OPENAIR_DIR" $green
gauthier's avatar
gauthier committed
108 109

  local -i run_gdb=0
gauthier's avatar
gauthier committed
110
  local -i run_mscgen=0
gauthier's avatar
gauthier committed
111
  local    exe_arguments=""
gauthier's avatar
ok  
gauthier committed
112 113
  local    DEFAULT_CONFIG_FILE_ENB=$OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_mme.conf
  local    CONFIG_FILE_ENB=$DEFAULT_CONFIG_FILE_ENB
gauthier's avatar
gauthier committed
114
  local    MSC_DIR="/tmp"
gauthier's avatar
gauthier committed
115 116 117 118
  
  until [ -z "$1" ]
    do
    case "$1" in
119 120 121 122 123 124
      -a | --abstraction )
	    abstraction_flag=1
	    echo "enabling abstraction mode"
	    exe_arguments="$exe_arguments -a"
            shift;
	    ;;      
gauthier's avatar
gauthier committed
125
      -c | -C | --config-file)
126
            CONFIG_FILE_ENB=$2
gauthier's avatar
gauthier committed
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
        # may be relative path 
        if [ -f $(dirname $(readlink -f $0))/$CONFIG_FILE ]; then
          CONFIG_FILE_ENB=$(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_ENB ]; then
            echo "setting config file to: $CONFIG_FILE_ENB"
          else
            echo_fatal "config file $CONFIG_FILE_ENB not found"
          fi
        fi
        shift 2;
        ;;
142 143 144 145 146
      -l | --log-level)
	echo "setting the log level to $2"
	exe_arguments="$exe_arguments -l $2"
        shift 2;
 	;;       
gauthier's avatar
gauthier committed
147 148 149 150 151 152
      -g | --gdb)
        run_gdb=1
        echo "setting GDB flag to: $GDB"
        shift;
        ;;
      -h | --help)
gauthier's avatar
ok  
gauthier committed
153
        help $DEFAULT_CONFIG_FILE_ENB
gauthier's avatar
gauthier committed
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
        shift;
        exit 0
        ;;
      -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/itti_enb_ue_s1.log"
          shift 1;
        else
          shift 2;
        fi
        echo "setting ITTI dump file to: $ITTI_DUMP_FILE"
        exe_arguments="$exe_arguments -K $ITTI_DUMP_FILE"
        ;;      

gauthier's avatar
gauthier committed
170 171 172 173 174 175 176 177 178 179 180 181 182
      -m | --mscgen)
        MSC_DIR=$2
        # can omit file name if last arg on the line
        if [ -d  "$MSC_DIR" ]; then
          echo "setting mscgen log files to dir: $MSC_DIR"
          run_mscgen=1
          shift 2;
        else
          echo_error "Mscgen log dir does not exist"
          exit -1
        fi
        ;;      

gauthier's avatar
gauthier committed
183 184 185 186 187
      -V | --vcd)
        "setting gtk-wave output"
        exe_arguments="$exe_arguments -V /tmp/oai_gtk_wave.vcd"
        shift ;
        ;;
gauthier's avatar
gauthier committed
188 189 190 191 192
      -W | ----wireshark-l2)
        echo "setting l2 pcap dump output"
        exe_arguments="$exe_arguments -P wireshark"
        shift 2;
        ;;
gauthier's avatar
gauthier committed
193 194 195 196 197 198 199 200
      *)   
        echo "Unknown option $1"
        help
        exit 0
        ;;
    esac
  done

gauthier's avatar
ok  
gauthier committed
201 202 203
  # may use default config file
  exe_arguments="$exe_arguments --enb-conf $CONFIG_FILE_ENB"

gauthier's avatar
gauthier committed
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229


  #######################################################
  # SOURCE CONFIG FILE
  #######################################################
  rm -f /tmp/source.txt
  VARIABLES="
           ENB_INTERFACE_NAME_FOR_S1_MME\|\
           ENB_IPV4_ADDRESS_FOR_S1_MME\|\
           ENB_INTERFACE_NAME_FOR_S1U\|\
           ENB_IPV4_ADDRESS_FOR_S1U"

  VARIABLES=$(echo $VARIABLES | sed -e 's/\\r//g')
  VARIABLES=$(echo $VARIABLES | tr -d ' ')
  cat $CONFIG_FILE_ENB | grep -w "$VARIABLES"| tr -d " " | tr -d ";" > /tmp/source.txt
  source /tmp/source.txt

  declare ENB_IPV4_NETMASK_FOR_S1_MME=$(       echo $ENB_IPV4_ADDRESS_FOR_S1_MME        | cut -f2 -d '/')
  declare ENB_IPV4_NETMASK_FOR_S1U=$(          echo $ENB_IPV4_ADDRESS_FOR_S1U        | cut -f2 -d '/')

  ENB_IPV4_ADDRESS_FOR_S1_MME=$(               echo $ENB_IPV4_ADDRESS_FOR_S1_MME        | cut -f1 -d '/')
  ENB_IPV4_ADDRESS_FOR_S1U=$(                  echo $ENB_IPV4_ADDRESS_FOR_S1U           | cut -f1 -d '/')


  is_tun=`is_tun_interface $ENB_INTERFACE_NAME_FOR_S1_MME  $ENB_INTERFACE_NAME_FOR_S1U`
#  if [ $is_tun = "1" ]; then
gauthier's avatar
 
gauthier committed
230 231 232 233 234 235
#    openvpn --mktun --dev $ENB_INTERFACE_NAME_FOR_S1U;sync
#    openvpn --mktun --dev $ENB_INTERFACE_NAME_FOR_S1_MME;sync
#    ip -4 addr add $ENB_IPV4_ADDRESS_FOR_S1U/$ENB_IPV4_NETMASK_FOR_S1U        dev $ENB_INTERFACE_NAME_FOR_S1U;sync
#    ip -4 addr add $ENB_IPV4_ADDRESS_FOR_S1_MME/$ENB_IPV4_NETMASK_FOR_S1_MME  dev $ENB_INTERFACE_NAME_FOR_S1_MME;sync
#    ifconfig  $ENB_INTERFACE_NAME_FOR_S1U up;sync
#    ifconfig  $ENB_INTERFACE_NAME_FOR_S1_MME up;sync
gauthier's avatar
gauthier committed
236 237 238 239 240 241 242 243
#    echo_success "Configured local eNB S1 tun interfaces"
#  else
#     echo_success "eNB S1 tun interfaces should be ethernet interfaces (no tunnels configured)"
#  fi

  ##################################################
  # LAUNCH eNB + UE executable
  ##################################################
gauthier's avatar
 
gauthier committed
244 245
  pkill oaisim
  rmmod ue_ip > /dev/null 2>&1
gauthier's avatar
gauthier committed
246 247

  echo_success "Bringup UE interface..."
gauthier's avatar
 
gauthier committed
248
  insmod  $OPENAIR_DIR/targets/bin/ue_ip.ko 
gauthier's avatar
gauthier committed
249

gauthier's avatar
 
gauthier committed
250
  ip route flush cache
gauthier's avatar
gauthier committed
251 252 253 254

  # Check table 200 lte in /etc/iproute2/rt_tables
  fgrep lte /etc/iproute2/rt_tables  > /dev/null
  if [ $? -ne 0 ]; then
Anta Huang's avatar
Anta Huang committed
255
    echo "200 lte " >> /etc/iproute2/rt_tables
gauthier's avatar
gauthier committed
256
  fi
257 258
  ip rule add fwmark 1 table lte 
  ifconfig oip1 up
gauthier's avatar
 
gauthier committed
259
  ip route add default dev oip1 table lte
260 261 262
  # the actual IP address depends on the EPC/MME config file for address pool
  ip route add from 192.188.0.0/24 table lte
  ip route add to 192.188.0.0/24 table lte
gauthier's avatar
gauthier committed
263

gauthier's avatar
gauthier committed
264
  exe_arguments="$exe_arguments -s15 -AAWGN -y1 -b1 -u1 -Q0"
gauthier's avatar
gauthier committed
265 266 267
    
  cd  $OPENAIR_DIR/targets/bin
   
gauthier's avatar
gauthier committed
268 269
   
  if [ $run_mscgen -eq 1 ]; then 
gauthier's avatar
 
gauthier committed
270
    rm -f /tmp/openair.msc.*
gauthier's avatar
gauthier committed
271 272
  fi
   
gauthier's avatar
gauthier committed
273
  if [ $run_gdb -eq 0 ]; then 
gauthier's avatar
 
gauthier committed
274
    exec $OPENAIR_DIR/targets/bin/oaisim.Rel10 $exe_arguments | tee /tmp/enb_ue_s1.log.txt
gauthier's avatar
gauthier committed
275 276 277
  else
    touch      ~/.gdb_enb_ue_s1
    chmod 777  ~/.gdb_enb_ue_s1
gauthier's avatar
 
gauthier committed
278
    echo "file $OPENAIR_DIR/targets/bin/oaisim.Rel10" > ~/.gdb_enb_ue_s1
gauthier's avatar
gauthier committed
279 280 281
    echo "set args $exe_arguments" >> ~/.gdb_enb_ue_s1
    echo "run"                        >> ~/.gdb_enb_ue_s1
    cat ~/.gdb_enb_ue_s1
gauthier's avatar
 
gauthier committed
282
    gdb -n -x ~/.gdb_enb_ue_s1 
gauthier's avatar
gauthier committed
283
  fi
gauthier's avatar
gauthier committed
284 285 286 287
  
  if [ $run_mscgen -eq 1 ]; then 
    cd $MSC_DIR
    last_created_file=`ls -t mscgen* | head -1 | tr -d ':'`
288
    $OPENAIR_DIR/targets/SCRIPTS/msc_gen.py  --profile E_UTRAN
gauthier's avatar
gauthier committed
289 290 291 292 293 294 295 296 297 298
    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 
  fi
  
gauthier's avatar
gauthier committed
299 300
}

gauthier's avatar
 
gauthier committed
301 302 303 304 305 306 307 308
sudo echo
is_sudo=$?
if [[ "$is_sudo" -ne 0 ]]; then
  echo_error "This script must be run by root or a sudo'er"
  echo
  exit 1
fi

gauthier's avatar
gauthier committed
309
main "$@"