#! /bin/bash #set -x ########################################################### THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) ########################################################### black='\E[30m' red='\E[31m' green='\E[32m' yellow='\E[33m' blue='\E[34m' magenta='\E[35m' cyan='\E[36m' white='\E[37m' ROOT_UID=0 E_NOTROOT=67 trim () { echo "$1" | sed -n '1h;1!H;${;g;s/^[ \t]*//g;s/[ \t]*$//g;p;}' } cecho() # Color-echo # arg1 = message # arg2 = color { local default_msg="No Message." message=${1:-$default_msg} color=${2:-$black} echo -e "$color" echo -n "$message" tput sgr0 echo return } echo_error() { local my_string="" until [ -z "$1" ] do my_string="$my_string$1" shift done cecho "$my_string" $red } echo_warning() { local my_string="" until [ -z "$1" ] do my_string="$my_string$1" shift done cecho "$my_string" $yellow } echo_success() { local my_string="" until [ -z "$1" ] do my_string="$my_string$1" shift done cecho "$my_string" $green } bash_exec() { output=$($1 2>&1) result=$? if [ $result -eq 0 ] then echo_success "$1" else echo_error "$1: $output" fi } wait_process_started () { if [ -z "$1" ] then echo_error "WAITING FOR PROCESS START: NO PROCESS" return 1 fi ps -C $1 > /dev/null 2>&1 while [ $? -ne 0 ]; do echo_warning "WAITING FOR $1 START" sleep 2 ps -C $1 > /dev/null 2>&1 done echo_success "PROCESS $1 STARTED" return 0 } wait_process_ended () { if [ -z "$1" ] then echo_error "WAITING FOR PROCESS START: NO PROCESS" return 1 fi pkill $1 ps -C $1 > /dev/null 2>&1 while [ $? -eq 0 ]; do echo_warning "WAITING FOR $1 END" pkill $1 sleep 2 ps -C $1 > /dev/null 2>&1 done echo_success "PROCESS $1 ENDED" return 0 } assert() { # If condition false # exit from script with error message E_PARAM_ERR=98 E_PARAM_FAILED=99 if [ -z "$2" ] # Not enought parameters passed. then return $E_PARAM_ERR fi lineno=$2 if [ ! $1 ] then echo "Assertion failed: \"$1\"" echo "File \"$0\", line $lineno" exit $E_ASSERT_FAILED fi } control_c() # run if user hits control-c { echo -en "\n*** Exiting ***\n" pkill oaisim_eNB wait_process_ended oaisim_eNB pkill cell_rrm sleep 1 cp /tmp/log_rrm ./log_rrm.txt cp /tmp/log_oaiENB ./log_oaiENB.txt sleep 1 sudo ip link set oai0 down sudo /sbin/rmmod nascellrg exit $? } set_openair() { path=`pwd` declare -i length_path declare -i index length_path=${#path} index=`echo $path | grep -b -o 'targets' | cut -d: -f1` #echo ${path%$token*} if [[ $index -lt $length_path && index -gt 0 ]] then declare -x OPENAIR_DIR index=`expr $index - 1` openair_path=`echo $path | cut -c1-$index` #openair_path=`echo ${path:0:$index}` export OPENAIR_DIR=$openair_path export OPENAIR1_DIR=$openair_path/openair1 export OPENAIR2_DIR=$openair_path/openair2 export OPENAIR3_DIR=$openair_path/openair3 export OPENAIR_TARGETS=$openair_path/targets return 0 fi return -1 } trap control_c SIGINT #set_openair echo "OPENAIR1_DIR="$OPENAIR1_DIR echo "OPENAIR2_DIR="$OPENAIR2_DIR echo "OPENAIR3_DIR="$OPENAIR3_DIR echo "OPENAIR_TARGETS="$OPENAIR_TARGETS echo "Bring up eNB interface" pkill oaisim_eNB pkill oaisim_eNB pkill cell_rrm sudo /sbin/rmmod nascellrg #echo "REMOVING MULTICAST ROUTING RULE" #ip route del 239.0.0.160/28 dev eth3 #sudo make naslite_netlink_ether oaisim #make naslite_netlink_ether oaisim sudo /sbin/insmod $OPENAIR2_DIR/NAS/DRIVER/CELLULAR/NASRG/nascellrg.ko echo "eNB interface network driver started" sleep 1 echo " Configuring ipv6 dad.." sudo sysctl -w net.ipv6.conf.default.dad_transmits=0 #assert "`sudo sysctl -n net.ipv6.conf.all.forwarding` -eq 1" $LINENO echo " Enabling ipv6 forwarding.." sudo sysctl -w net.ipv6.conf.all.forwarding=1 #assert "`sudo sysctl -n net.ipv6.conf.all.forwarding` -eq 1" $LINENO #ip link set oai0 broadcast ff:ff:ff:ff:ff:ff #macchanger oai0 -m 90:f6:52:0c:60:aa #sleep 3 sudo ip link set oai0 up sleep 1 echo "CONFIGURING eNB INTERFACE" sudo ifconfig oai0 10.0.1.3 netmask 255.255.255.0 broadcast 10.0.1.255 echo "eNB interface network driver IPv4 address configured" sleep 1 sudo ip addr add dev oai0 2001:660:382:14::1/64 #avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16) #echo " ADDING MULTICAST ROUTING RULE" #ip route add 239.0.0.160/28 dev eth3 #rm -f /tmp/lte_enb.log #rm -f rrm_log.txt sleep 1 echo "Starting RRM module" exec $OPENAIR_TARGETS/SIMU/USER/cell_rrm > /tmp/log_rrm 2>&1 & sleep 2 echo "Starting OAI Access Stratum ..." $OPENAIR_TARGETS/SIMU/USER/oaisim_eNB -E 1 -u0 -b1 -M0 -p2 -l6 > /tmp/log_oaiENB 2>&1 & #$OPENAIR_TARGETS/SIMU/USER/oaisim_eNB -E 1 -u0 -b1 -M0 -p2 -l6 #sudo nice --adjustment=-10 $OPENAIR_TARGETS/SIMU/USER/oaisim_eNB -E 1 -u0 -b1 -M0 -p2 -l6 #nice --adjustment=-10 $OPENAIR_TARGETS/SIMU/USER/oaisim_eNB -E 1234 -u0 -b1 -M0 -p2 -l6 > /dev/null 2>&1 &log_oaiENB #gdb --args /usr/local/src/trunk/targets/SIMU/USER/oaisim -E 1234 -u0 -M0 -p2 -g1 -l7 #echo " Enabling ping broadcast" #bash_exec "sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=0" #assert "`sysctl -n net.ipv4.icmp_echo_ignore_broadcasts` -eq 0" $LINENO #echo " Enabling ipv4 forwarding.." #sudo sysctl -w net.ipv4.ip_forward=1 #assert "`sysctl -n net.ipv4.ip_forward` -eq 1" $LINENO #echo " Enabling ipv4 forwarding.." #sudo sysctl -w net.ipv4.conf.all.forwarding=1 #assert "`sudo sysctl -n net.ipv4.conf.all.forwarding` -eq 1" $LINENO # ** Next lines start the RAL wait_process_started oaisim_eNB sleep 4 $OPENAIR3_DIR/RAL-LTE/LTE_RAL_ENB/LTE_RAL_ENB echo "End"