#!/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 # OpenAirInterface Dev : openair4g-devel@eurecom.fr # # 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" } 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." echo_error " -c, -C, --config-file eNB_config_file eNB config file, (see $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF)" echo_error " Default eNB config file if not set is $1" 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)" echo_error " -m, --mscgen directory Generate mscgen output files in a directory" echo_error " -V, --vcd Dump timings of processing in a GTKWave compliant file format." echo_error " -x, --xforms Run XFORMS scope windows." } function main() { set_openair_env cecho "OPENAIR_DIR = $OPENAIR_DIR" $green local -i run_gdb=0 local -i run_mscgen=0 local exe_arguments="" 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 local MSC_DIR="/tmp" until [ -z "$1" ] do case "$1" in -c | -C | --config-file) CONFIG_FILE_ENB=$2 # 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; ;; -g | --gdb) run_gdb=1 echo "setting GDB flag to: $GDB" shift; ;; -h | --help) help $DEFAULT_CONFIG_FILE_ENB 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" ;; -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 ;; -V | --vcd) "setting gtk-wave output" exe_arguments="$exe_arguments -V /tmp/oai_gtk_wave.vcd" shift ; ;; *) echo "Unknown option $1" help exit 0 ;; esac done # may use default config file exe_arguments="$exe_arguments --enb-conf $CONFIG_FILE_ENB" ####################################################### # 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 # $SUDO openvpn --mktun --dev $ENB_INTERFACE_NAME_FOR_S1U;sync # $SUDO openvpn --mktun --dev $ENB_INTERFACE_NAME_FOR_S1_MME;sync # $SUDO ip -4 addr add $ENB_IPV4_ADDRESS_FOR_S1U/$ENB_IPV4_NETMASK_FOR_S1U dev $ENB_INTERFACE_NAME_FOR_S1U;sync # $SUDO ip -4 addr add $ENB_IPV4_ADDRESS_FOR_S1_MME/$ENB_IPV4_NETMASK_FOR_S1_MME dev $ENB_INTERFACE_NAME_FOR_S1_MME;sync # $SUDO ifconfig $ENB_INTERFACE_NAME_FOR_S1U up;sync # $SUDO ifconfig $ENB_INTERFACE_NAME_FOR_S1_MME up;sync # 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 ################################################## $SUDO pkill oaisim $SUDO rmmod ue_ip > /dev/null 2>&1 echo_success "Bringup UE interface..." $SUDO insmod $OPENAIR_DIR/targets/bin/ue_ip.ko $SUDO ip route flush cache # Check table 200 lte in /etc/iproute2/rt_tables fgrep lte /etc/iproute2/rt_tables > /dev/null if [ $? -ne 0 ]; then $SUDO echo "200 lte " >> /etc/iproute2/rt_tables fi $SUDO ip rule add fwmark 1 table lte $SUDO ip route add default dev oip1 table lte exe_arguments="$exe_arguments -s15 -AAWGN -y1 -b1 -u1 -Q0" cd $OPENAIR_DIR/targets/bin if [ $run_gdb -eq 0 ]; then exec $SUDO $OPENAIR_DIR/targets/bin/oaisim $exe_arguments | tee /tmp/enb_ue_s1.log.txt else touch ~/.gdb_enb_ue_s1 chmod 777 ~/.gdb_enb_ue_s1 echo "file $OPENAIR_DIR/targets/bin/oaisim" > ~/.gdb_enb_ue_s1 echo "set args $exe_arguments" >> ~/.gdb_enb_ue_s1 echo "run" >> ~/.gdb_enb_ue_s1 cat ~/.gdb_enb_ue_s1 $SUDO gdb -n -x ~/.gdb_enb_ue_s1 fi if [ $run_mscgen -eq 1 ]; then cd $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 fi } main "$@"