diff --git a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/start_enb.bash b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/start_enb.bash deleted file mode 100755 index 5d6e404137..0000000000 --- a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/start_enb.bash +++ /dev/null @@ -1,203 +0,0 @@ -#!/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 . -# -# 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.bash -# 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 -# Depending on configuration files, it can be instanciated a virtual switch -# setting or a VLAN setting for the networking between eNB and MME. -# MME+SP-GW executable have to be launched on the same host by your own (start_epc.bash) before this script is invoked. -# UE executable have to be launched on another host by your own (start_ue.bash) after this script is invoked. -# - -########################################################### -# Parameters -########################################################### -declare EMULATION_DEV_INTERFACE="eth1" -declare EMULATION_MULTICAST_GROUP=1 - -declare MAKE_LTE_ACCESS_STRATUM_TARGET="oaisim DEBUG=1 ENABLE_ITTI=1 USE_MME=R10 LINK_PDCP_TO_GTPV1U=1 NAS=1 Rel10=1 SECU=1 RRC_MSG_PRINT=1" -declare MAKE_LTE_ACCESS_STRATUM_TARGET_RT="lte-softmodem DEBUG=1 RTAI=1 HARD_RT=1 ENABLE_ITTI=1 USE_MME=R10 LINK_PDCP_TO_GTPV1U=1 DISABLE_XER_PRINT=1 SECU=1 RRC_MSG_PRINT=1 " - - -########################################################### -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -. $THIS_SCRIPT_PATH/utils.bash -. $THIS_SCRIPT_PATH/interfaces.bash -. $THIS_SCRIPT_PATH/networks.bash -########################################################### -if [ $# -eq 1 ]; then - declare -x CONFIG_FILE_DIR=$1 - if [ ! -d $CONFIG_FILE_DIR ]; then - echo_error "ERROR while invoking this script, as first argument to this script you have to provide the path to a directory (./CONF/VLAN.VIRTUAL.$HOSTNAME for example) containing valid epc and enb config files" - exit 1 - fi -else - echo_error "ERROR while invoking this script, as first argument to this script you have to provide the path to a directory (./CONF/VLAN.VIRTUAL.$HOSTNAME for example) containing valid epc and enb config files" - exit 1 -fi - - -#check_install_epc_software - - - -cd $THIS_SCRIPT_PATH - -EMULATION_DEV_ADDRESS=`ifconfig $EMULATION_DEV_INTERFACE | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'` - -####################################################### -# FIND CONFIG FILE -####################################################### -SEARCHED_CONFIG_FILE_ENB="enb*.conf" -CONFIG_FILE_ENB=$THIS_SCRIPT_PATH/`find $CONFIG_FILE_DIR -iname $SEARCHED_CONFIG_FILE_ENB` -if [ -f $CONFIG_FILE_ENB ]; then - echo_warning "eNB config file found is now $CONFIG_FILE_ENB" -else - echo_error "eNB config file not found, exiting" - exit 1 -fi - -####################################################### -# 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\|\ - hard_real_time" - -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 '/') - - -################################################## -# LAUNCH eNB executable -################################################## -pkill oaisim -pkill tshark - -if [ ! -d $THIS_SCRIPT_PATH/OUTPUT/$HOSTNAME ]; then - mkdir -m 777 -p $THIS_SCRIPT_PATH/OUTPUT/$HOSTNAME -fi - -if [ x$hard_real_time != "xyes" ]; then - ITTI_LOG_FILE=$THIS_SCRIPT_PATH/OUTPUT/$HOSTNAME/itti_enb_ue.$HOSTNAME.log - #rotate_log_file $ITTI_LOG_FILE - - STDOUT_LOG_FILE=$THIS_SCRIPT_PATH/OUTPUT/$HOSTNAME/stdout_enb_ue.$HOSTNAME.log - #rotate_log_file $STDOUT_LOG_FILE - #rotate_log_file $STDOUT_LOG_FILE.filtered - - PCAP_LOG_FILE=$THIS_SCRIPT_PATH/OUTPUT/$HOSTNAME/tshark_enb_ue.$HOSTNAME.pcap - #rotate_log_file $PCAP_LOG_FILE -else - ITTI_LOG_FILE=$THIS_SCRIPT_PATH/OUTPUT/$HOSTNAME/itti_enb_rf.$HOSTNAME.log - #rotate_log_file $ITTI_LOG_FILE - - STDOUT_LOG_FILE=$THIS_SCRIPT_PATH/OUTPUT/$HOSTNAME/stdout_enb_rf.$HOSTNAME.log - #rotate_log_file $STDOUT_LOG_FILE - #rotate_log_file $STDOUT_LOG_FILE.filtered - - PCAP_LOG_FILE=$THIS_SCRIPT_PATH/OUTPUT/$HOSTNAME/tshark_enb_rf.$HOSTNAME.pcap - #rotate_log_file $PCAP_LOG_FILE -fi - - -cd $THIS_SCRIPT_PATH - -if [ x$ENB_INTERFACE_NAME_FOR_S1_MME == x$ENB_INTERFACE_NAME_FOR_S1U ]; then - nohup tshark -i $ENB_INTERFACE_NAME_FOR_S1_MME -w $PCAP_LOG_FILE & -else - nohup tshark -i $ENB_INTERFACE_NAME_FOR_S1_MME -i $ENB_INTERFACE_NAME_FOR_S1U -w $PCAP_LOG_FILE & -fi - - -if [ x$hard_real_time != "xyes" ]; then - echo_warning "USER MODE" - make --directory=$OPENAIR_TARGETS/SIMU/USER $MAKE_LTE_ACCESS_STRATUM_TARGET -j`grep -c ^processor /proc/cpuinfo ` || exit 1 - bash_exec "ip route add 239.0.0.160/28 dev $EMULATION_DEV_INTERFACE" - gdb --args $OPENAIR_TARGETS/SIMU/USER/oaisim -a -l9 -u0 -b1 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -D $EMULATION_DEV_ADDRESS -K $ITTI_LOG_FILE --enb-conf $CONFIG_FILE_ENB 2>&1 | tee $STDOUT_LOG_FILE - -else - echo_warning "HARD REAL TIME MODE" - PATH=$PATH:/usr/realtime/bin - - #make --directory=$OPENAIR_TARGETS/RT/USER drivers || exit 1 - # 2 lines below replace the line above - cd $OPENAIR_TARGETS/ARCH/EXMIMO/DRIVER/eurecom && make clean && make || exit 1 - cd $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT && make clean && make || exit 1 - cd $THIS_SCRIPT_PATH - - make --directory=$OPENAIR_TARGETS/RT/USER $MAKE_LTE_ACCESS_STRATUM_TARGET_RT -j`grep -c ^processor /proc/cpuinfo ` || exit 1 - - if [ ! -f /tmp/init_rt_done.tmp ]; then - echo_warning "STARTING REAL TIME (RTAI)" - insmod /usr/realtime/modules/rtai_hal.ko > /dev/null 2>&1 - insmod /usr/realtime/modules/rtai_sched.ko > /dev/null 2>&1 - insmod /usr/realtime/modules/rtai_sem.ko > /dev/null 2>&1 - insmod /usr/realtime/modules/rtai_fifos.ko > /dev/null 2>&1 - insmod /usr/realtime/modules/rtai_mbx.ko > /dev/null 2>&1 - touch /tmp/init_rt_done.tmp - chmod 666 /tmp/init_rt_done.tmp - else - echo_warning "REAL TIME FOUND STARTED (RTAI)" - fi - - cd $OPENAIR_TARGETS/RT/USER - bash ./init_exmimo2.sh - echo_warning "STARTING SOFTMODEM..." - #cat /dev/rtf62 > $STDOUT_LOG_FILE & - gdb --args ./lte-softmodem -K $ITTI_LOG_FILE -V -O $CONFIG_FILE_ENB 2>&1 - cd $THIS_SCRIPT_PATH -fi - -pkill tshark - -cat $STDOUT_LOG_FILE | grep -v '[PHY]' | grep -v '[MAC]' | grep -v '[EMU]' | \ - grep -v '[OCM]' | grep -v '[OMG]' | \ - grep -v 'RLC not configured' | grep -v 'check if serving becomes' | \ - grep -v 'mac_rrc_data_req' | grep -v 'BCCH request =>' > $STDOUT_LOG_FILE.filtered diff --git a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/utils.bash b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/utils.bash deleted file mode 100755 index f954b32e23..0000000000 --- a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/utils.bash +++ /dev/null @@ -1,1281 +0,0 @@ -################################################################################ -# 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 . -# -# 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 utils.bash -# brief -# author Lionel Gauthier -# company Eurecom -# email: lionel.gauthier@eurecom.fr -# -cidr2mask() { - local i mask="" - local full_octets=$(($1/8)) - local partial_octet=$(($1%8)) - - for ((i=0;i<4;i+=1)); do - if [ $i -lt $full_octets ]; then - mask+=255 - elif [ $i -eq $full_octets ]; then - mask+=$((256 - 2**(8-$partial_octet))) - else - mask+=0 - fi - test $i -lt 3 && mask+=. - done - - echo $mask -} - -# example: netcalc 192.168.12.100 255.255.255.0 -netcalc(){ - local IFS='.' ip i - local -a oct msk - - read -ra oct <<<"$1" - read -ra msk <<<"$2" - - for i in ${!oct[@]}; do - ip+=( "$(( oct[i] & msk[i] ))" ) - done - - echo "${ip[*]}" -} - -# example: s -bcastcalc(){ - - local IFS='.' ip i - local -a oct msk - - read -ra oct <<<"$1" - read -ra msk <<<"$2" - - for i in ${!oct[@]}; do - ip+=( "$(( oct[i] + ( 255 - ( oct[i] | msk[i] ) ) ))" ) - done - - echo "${ip[*]}" -} - -black='\E[30m' -red='\E[31m' -green='\E[32m' -yellow='\E[33m' -blue='\E[34m' -magenta='\E[35m' -cyan='\E[36m' -white='\E[37m' -reset_color='\E[00m' - -ROOT_UID=0 -E_NOTROOT=67 - -HOSTNAME=$(hostname -f) -IPTABLES=`which iptables` - -trim () -{ - echo "$1" | sed -n '1h;1!H;${;g;s/^[ \t]*//g;s/[ \t]*$//g;p;}' -} - -trim2() -{ - local var=$@ - var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters - var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters - echo -n "$var" -} - -cecho() # Color-echo -# arg1 = message -# arg2 = color -{ - local default_msg="No Message." - message=${1:-$default_msg} - color=${2:-$green} - echo -e -n "$color$message$reset_color" - echo - return -} - -echo_error() { - local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - cecho "$my_string" $red -} - -echo_fatal() { - local my_string="" - until [ -z "$1" ] - do - my_string="$my_string$1" - shift - done - echo_error "$my_string" - exit -1 -} - -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 -} - -extract() { - if [ -f $1 ] ; then - case $1 in - *.tar.bz2) tar xvjf $1 ;; - *.tar.gz) tar xvzf $1 ;; - *.bz2) bunzip2 $1 ;; - *.rar) unrar $1 ;; - *.gz) gunzip $1 ;; - *.tar) tar xvf $1 ;; - *.tbz2) tar xvjf $1 ;; - *.tgz) tar xvzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *) echo_error "'$1' cannot be extracted via >extract<" ; return 1;; - esac - else - echo_error "'$1' is not a valid file" - return 1 - fi - return 0 -} - -rotate_log_file () { - FULLPATH=$1 - if [ -f $FULLPATH ]; then - FILENAME=${FULLPATH##*/} - FILEEXTENSION=${FILENAME##*.} - BASEDIRECTORY=${FULLPATH%$FILENAME} - if [ "a$BASEDIRECTORY" == "a" ]; then - BASEDIRECTORY='.' - fi - FILENAME_NO_EXT=$(echo "$FILENAME" | sed 's/\.[^\.]*$//') - - TIMESTAMP=`date +%Y-%m-%d.%Hh_%Mm_%Ss` - - NEWLOGFILE=$TIMESTAMP.$FILENAME_NO_EXT.$FILEEXTENSION - mv $FULLPATH /tmp/$NEWLOGFILE - cat /dev/null > $FULLPATH - sync - gzip -c --name -f -9 /tmp/$NEWLOGFILE > $BASEDIRECTORY/$NEWLOGFILE.gz & - fi -} - -set_openair() { - path=`pwd` - declare -i length_path - declare -i index - length_path=${#path} - - for i in 'openair1' 'openair2' 'openair3' 'openair-cn' 'targets' - do - index=`echo $path | grep -b -o $i | cut -d: -f1` - #echo ${path%$token*} - if [[ $index -lt $length_path && index -gt 0 ]] - then - index=`expr $index - 1` - openair_path=`echo $path | cut -c1-$index` - #openair_path=`echo ${path:0:$index}` - export OPENAIR_DIR=$openair_path - export OPENAIR_HOME=$openair_path - export OPENAIR1_DIR=$openair_path/openair1 - export OPENAIR2_DIR=$openair_path/openair2 - export OPENAIR3_DIR=$openair_path/openair3 - export OPENAIRCN_DIR=$openair_path/openair-cn - export OPENAIR_TARGETS=$openair_path/targets - return 0 - fi - done - return -1 -} - -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 -} - -is_process_started () { - if [ -z "$1" ] - then - echo_error "WAITING FOR PROCESS START: NO PROCESS" - return 1 - fi - ps -C $1 > /dev/null 2>&1 - if [ $? -ne 0 ] - then - echo_success "PROCESS $1 NOT STARTED" - return 1 - fi - echo_success "PROCESS $1 STARTED" - 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_error "Assertion failed: \"$1\"" - echo_fatal "File \"$0\", line $lineno" - fi -} - - -test_install_package() { - # usage: test_install_package package_name - if [ $# -eq 1 ]; then - dpkg -s "$1" > /dev/null 2>&1 && { - echo "$1 is installed." - } || { - echo "$1 is not installed." - apt-get install --assume-yes $1 - } - fi -} - -test_command_install_script() { - # usage: test_command_install_script searched_binary script_to_be_invoked_if_binary_not_found - command -v $1 >/dev/null 2>&1 || { echo_warning "Program $1 is not installed. Trying installing it." >&2; bash $2; command -v $1 >/dev/null 2>&1 || { echo_fatal "Program $1 is not installed. Aborting." >&2; };} - echo_success "$1 available" -} - -start_openswitch_daemon() { - rmmod -s bridge - if [[ -e "/lib/modules/`uname -r`/extra/openvswitch.ko" ]] ; then - bash_exec "insmod /lib/modules/`uname -r`/extra/openvswitch.ko" > /dev/null 2>&1 - else - echo_fatal "/lib/modules/`uname -r`/extra/openvswitch.ko not found, exiting" - fi - is_process_started "ovsdb-server" - if [ $? -ne 0 ] - then - ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,manager_options --pidfile --detach - wait_process_started "ovsdb-server" - fi - # To be done after installation - # ovs-vsctl --no-wait init - is_process_started "ovs-vswitchd" - if [ $? -ne 0 ] - then - ovs-vswitchd --pidfile --detach - wait_process_started "ovs-vswitchd" - fi -} - -stop_openswitch_daemon() { - pkill ovs-vswitchd - pkill ovsdb-server - sync - if ! is_process_started ovs-vswitchd ; then - pkill -9 ovs-vswitchd - fi - if ! is_process_started ovsdb-server ; then - pkill -9 ovsdb-server - fi - rmmod -f openvswitch -} - -check_for_epc_executable() { - if [ ! -f $OPENAIR3_DIR/OPENAIRMME/objs/OAI_EPC/oai_epc ] - then - echo_error "Cannot find oai_epc executable object in directory $OPENAIR3_DIR/OPENAIRMME/objs/OAI_EPC/" - echo_fatal "Please make sure you have compiled OAI EPC with --enable-standalone-epc option" - fi -} - -check_for_sgw_executable() { - if [ ! -f $OPENAIR3_DIR/OPENAIRMME/objs/OAI_SGW/oai_sgw ] - then - echo_error "Cannot find oai_sgw executable object in directory $OPENAIR3_DIR/OPENAIRMME/objs/OAI_SGW/" - echo_fatal "Please make sure you have compiled OAI EPC without --enable-standalone-epc option" - fi -} - -check_for_mme_executable() { - if [ ! -f $OPENAIR3_DIR/OPENAIRMME/objs/OAISIM_MME/oaisim_mme ] - then - echo_error "Cannot find oai_sgw executable object in directory $OPENAIR3_DIR/OPENAIRMME/objs/OAISIM_MME/" - echo_fatal "Please make sure you have compiled OAI EPC without --enable-standalone-epc option" - fi -} - -check_for_root_rights() { - if [[ $EUID -ne 0 ]]; then - echo_fatal "This script must be run as root" 1>&2 - fi -} - -is_openvswitch_interface() { - for var in "$@" - do - if [ "a$var" == "a" ]; then - return 0 - fi - if [ "a${var:0:3}" == "aeth" ]; then - return 0; - else - if [ "a${var:0:4}" == "awlan" ]; then - return 0; - else - if [ "a${var:0:4}" == "awifi" ]; then - return 0; - else - if [ "a${var:0:4}" == "anone" ]; then - return 0; - else - if [ "a${var:0:3}" == "atun" ]; then - return 0; - fi - fi - fi - fi - fi - done - return 1; -} - -is_real_interface() { - my_bool=1 - for var in "$@" - do - if [ "a$var" == "a" ]; then - return 0 - fi - if [ "a$var" == "anone" ]; then - return 0 - fi - IF=`cat /etc/udev/rules.d/70-persistent-net.rules | grep $var | sed 's/^.*NAME=//' | tr -d '"'` - if [ "$IF" == "$var" ]; then - if [ "a${var:0:3}" != "aeth" ]; then - if [ "a${var:0:4}" != "awlan" ]; then - if [ "a${var:0:4}" != "awifi" ]; then - my_bool=0; - fi - fi - fi - fi - done - return $my_bool -} - -is_vlan_interface() { - my_bool=1 - for var in "$@" - do - if [ "a$var" == "a" ]; then - return 0 - fi - if [[ $var == *.* ]] - then - interface_name=`echo $var | cut -f1 -d '.'` - vlan=`echo $var | cut -f2 -d '.'` - IF=`cat /etc/udev/rules.d/70-persistent-net.rules | grep $interface_name | sed 's/^.*NAME=//' | tr -d '"'` - if [ "$IF" == "$interface_name" ]; then - if [ "a${interface_name:0:3}" != "aeth" ]; then - if [ "a${interface_name:0:4}" != "awlan" ]; then - if [ "a${interface_name:0:4}" != "awifi" ]; then - #if [ "a${interface_name:0:3}" != "atun" ]; then - return 0; - #fi - fi - fi - fi - fi - else - return 0; - fi - done - return $my_bool -} - - -delete_openvswitch_interface() { - is_openvswitch_interface $1 - if [ $? -eq 1 ]; then - ifconfig $1 down > /dev/null 2>&1 - tunctl -d $1 > /dev/null 2>&1 - fi -} - -create_openvswitch_interface() { - is_openvswitch_interface $1 - if [ $? -eq 1 ]; then - bash_exec "tunctl -t $1" - fi -} - -# arg1 = interface name -# arg2 = ipv4 addr cidr -# arg3 = netmask cidr -set_interface_up() { - interface=$1 - address=$2 - cidr_netmask=$3 - bash_exec "ifconfig $interface up" - sync - netmask=`cidr2mask $cidr_netmask` - broadcast=`bcastcalc $address $netmask` - bash_exec "ip -4 addr add $address/$cidr_netmask broadcast $broadcast dev $interface" - sync -} - -build_enb_vlan_network() { - # create vlan interface - is_vlan_interface $ENB_INTERFACE_NAME_FOR_S1_MME - if [ $? -eq 1 ]; then - interface_name=`echo $ENB_INTERFACE_NAME_FOR_S1_MME | cut -f1 -d '.'` - vlan=`echo $ENB_INTERFACE_NAME_FOR_S1_MME | cut -f2 -d '.'` - ifconfig $ENB_INTERFACE_NAME_FOR_S1_MME down > /dev/null 2>&1 - vconfig rem $ENB_INTERFACE_NAME_FOR_S1_MME > /dev/null 2>&1 - sync - bash_exec "vconfig add $interface_name $vlan" - sync - #bash_exec "ifconfig $ENB_INTERFACE_NAME_FOR_S1_MME up" - #sync - #bash_exec "ip -4 addr add $ENB_IPV4_ADDRESS_FOR_S1_MME/$ENB_IPV4_NETMASK_FOR_S1_MME dev $ENB_INTERFACE_NAME_FOR_S1_MME" - set_interface_up $ENB_INTERFACE_NAME_FOR_S1_MME $ENB_IPV4_ADDRESS_FOR_S1_MME $ENB_IPV4_NETMASK_FOR_S1_MME - else - echo_fatal "BAD INTERFACE NAME FOR ENB S1-MME $ENB_INTERFACE_NAME_FOR_S1_MME"' (waiting for ethx.y, wlanx.y or wifix.y)' - fi; - - is_vlan_interface $ENB_INTERFACE_NAME_FOR_S1U - if [ $? -eq 1 ]; then - interface_name=`echo $ENB_INTERFACE_NAME_FOR_S1U | cut -f1 -d '.'` - vlan=`echo $ENB_INTERFACE_NAME_FOR_S1U | cut -f2 -d '.'` - ifconfig $ENB_INTERFACE_NAME_FOR_S1U down > /dev/null 2>&1 - vconfig rem $ENB_INTERFACE_NAME_FOR_S1U > /dev/null 2>&1 - sync - bash_exec "vconfig add $interface_name $vlan" - sync - #bash_exec "ifconfig $ENB_INTERFACE_NAME_FOR_S1U up" - #sync - #bash_exec "ip -4 addr add $ENB_IPV4_ADDRESS_FOR_S1U/$ENB_IPV4_NETMASK_FOR_S1U dev $ENB_INTERFACE_NAME_FOR_S1U" - set_interface_up $ENB_INTERFACE_NAME_FOR_S1U $ENB_IPV4_ADDRESS_FOR_S1U $ENB_IPV4_NETMASK_FOR_S1U - sync - else - echo_fatal "BAD INTERFACE NAME FOR ENB S1U $ENB_INTERFACE_NAME_FOR_S1U"' (waiting for ethx.y, wlanx.y or wifix.y)' - fi; -} - -clean_enb_vlan_network() { - is_vlan_interface $ENB_INTERFACE_NAME_FOR_S1_MME - if [ $? -eq 1 ]; then - echo_success "Found VLAN interface $ENB_INTERFACE_NAME_FOR_S1_MME ... deleting" - ifconfig $ENB_INTERFACE_NAME_FOR_S1_MME down > /dev/null 2>&1 - vconfig rem $ENB_INTERFACE_NAME_FOR_S1_MME > /dev/null 2>&1 - fi; - - is_vlan_interface $ENB_INTERFACE_NAME_FOR_S1U - if [ $? -eq 1 ]; then - echo_success "Found VLAN interface $ENB_INTERFACE_NAME_FOR_S1U ... deleting" - ifconfig $ENB_INTERFACE_NAME_FOR_S1U down > /dev/null 2>&1 - vconfig rem $ENB_INTERFACE_NAME_FOR_S1U > /dev/null 2>&1 - fi; - sync; - clean_network -} - - -test_enb_vlan_network() { - # TEST INTERFACES - #ping -q -c 1 $MME_IPV4_ADDRESS_FOR_S1_MME > /dev/null 2>&1 - #if [ $? -ne 0 ]; then echo_fatal "PING MME S1_MME ERROR, ADDRESS IS $MME_IPV4_ADDRESS_FOR_S1_MME"; fi; - #ping -q -c 1 $SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP > /dev/null 2>&1 - #if [ $? -ne 0 ]; then echo_fatal "PING SGW S1U ERROR, ADDRESS IS $SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP"; fi; - return 0 -} - - -build_mme_spgw_vlan_network() { - # hss.eur - # | - # +-----------+ +-----------+ v +----------+ - # | eNB +------+ VLAN 1+------+ MME +----+ +---+ HSS | - # | |ethx.1+------------------+ethy.1| | +------+ | | - # | +------+ +------+ +----+ +---+ | - # | |ethx.2+-------+ | | +----------+ - # | +------+ | +-+-------+-+ - # | | | | s11mme| - # | | | +---+---+ - # | | | (optional)| VLAN 3 - # +-----------+ | +---+---+ - # | | s11sgw| router.eur - # | +-+-------+-+ | +--------------+ - # | | S+P-GW | v | ROUTER | - # | VLAN2 +------+ +-------+ +----+ +----+ - # +----------+ethy.2| |sgi +-...-+ | | +---...Internet - # +------+ +-------+ +----+ +----+ - # | | 11 VLANS | | - # +-----------+ ids=[5..15] +--------------+ - cat $OPENAIRCN_DIR/$OBJ_DIR/Makefile | grep CFLAGS\ \=\ | grep DENABLE_USE_NETFILTER_FOR_SGI - if [ $? -ne 0 ] - then - export ENABLE_USE_NETFILTER_FOR_SGI=0 - else - export ENABLE_USE_NETFILTER_FOR_SGI=1 - fi - - cat $OPENAIRCN_DIR/$OBJ_DIR/Makefile | grep CFLAGS\ \=\ | grep DENABLE_USE_RAW_FOR_SGI - if [ $? -ne 0 ] - then - export ENABLE_USE_RAW_FOR_SGI=0 - else - export ENABLE_USE_RAW_FOR_SGI=1 - fi - - bash_exec "modprobe 8021q" - - # create vlan interface - is_vlan_interface $MME_INTERFACE_NAME_FOR_S1_MME - if [ $? -eq 1 ]; then - interface_name=`echo $MME_INTERFACE_NAME_FOR_S1_MME | cut -f1 -d '.'` - vlan=`echo $MME_INTERFACE_NAME_FOR_S1_MME | cut -f2 -d '.'` - ifconfig $MME_INTERFACE_NAME_FOR_S1_MME down > /dev/null 2>&1 - vconfig rem $MME_INTERFACE_NAME_FOR_S1_MME > /dev/null 2>&1 - sync - bash_exec "vconfig add $interface_name $vlan" - sync - #bash_exec "ifconfig $MME_INTERFACE_NAME_FOR_S1_MME up" - #sync - #"bash_exec "ip -4 addr add $MME_IPV4_ADDRESS_FOR_S1_MME/$MME_IPV4_NETMASK_FOR_S1_MME dev $MME_INTERFACE_NAME_FOR_S1_MME" - set_interface_up $MME_INTERFACE_NAME_FOR_S1_MME $MME_IPV4_ADDRESS_FOR_S1_MME $MME_IPV4_NETMASK_FOR_S1_MME - else - echo_fatal "BAD INTERFACE NAME FOR SGW S1-MME $MME_INTERFACE_NAME_FOR_S1_MME"' (waiting for ethx.y, wlanx.y or wifix.y)' - fi; - - is_vlan_interface $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP - if [ $? -eq 1 ]; then - interface_name=`echo $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP | cut -f1 -d '.'` - vlan=`echo $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP | cut -f2 -d '.'` - ifconfig $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP down > /dev/null 2>&1 - vconfig rem $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP > /dev/null 2>&1 - sync - bash_exec "vconfig add $interface_name $vlan" - sync - #bash_exec "ifconfig $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP up" - #sync - #bash_exec "ip -4 addr add $SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP/$SGW_IPV4_NETMASK_FOR_S1U_S12_S4_UP dev $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP" - #sync - set_interface_up $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP $SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP $SGW_IPV4_NETMASK_FOR_S1U_S12_S4_UP - else - echo_fatal "BAD INTERFACE NAME FOR SGW S1U $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP"' (waiting for ethx.y, wlanx.y or wifix.y)' - fi; - - # - is_real_interface $PGW_INTERFACE_NAME_FOR_SGI - if [ $? -eq 1 ]; then - ping -c 1 router.eur > /dev/null || { echo_fatal "router.eur does not respond to ping" >&2 ; } - IP_ROUTER=`python -c 'import socket; print socket.gethostbyname("router.eur")'` - export MAC_ROUTER=`ip neigh show | grep $IP_ROUTER | cut -d ' ' -f5 | tr -d ':'` - echo_success "ROUTER MAC ADDRESS= $MAC_ROUTER" - - if [ $ENABLE_USE_NETFILTER_FOR_SGI -eq 1 ]; then - - bash_exec "modprobe nf_conntrack" - bash_exec "modprobe nf_conntrack_ftp" - - ###################################################### - # PREROUTING - ###################################################### - # We restore the mark following the CONNMARK mark. In fact, it does a simple MARK=CONNMARK - # where MARK is the standard mark (usable by tc) - # In French: Cette option de cible restaure le paquet marqué dans la marque de connexion - # comme défini par CONNMARK. Un masque peut aussi être défini par l'option --mask. - # Si une option mask est placée, seules les options masquées seront placées. - # Notez que cette option de cible n'est valide que dans la table mangle. - bash_exec "$IPTABLES -t mangle -A PREROUTING -j CONNMARK --restore-mark" - - # TEST bash_exec "$IPTABLES -t mangle -A PREROUTING -m mark --mark 0 -i $PGW_INTERFACE_NAME_FOR_SGI -j MARK --set-mark 15" - # We set the mark of the initial packet as value of the conntrack mark for all the packets of the connection. - # This mark will be restore for the other packets by the first rule of POSTROUTING --restore-mark). - bash_exec "$IPTABLES -t mangle -A PREROUTING -j CONNMARK --save-mark" - - - ###################################################### - # POSTROUTING - ###################################################### - - # MARK=CONNMARK - bash_exec "iptables -A POSTROUTING -t mangle -o tap0 -j CONNMARK --restore-mark" - # If we’ve got a mark no need to get further[ - bash_exec "iptables -A POSTROUTING -t mangle -o tap0 -m mark ! --mark 0 -j ACCEPT" - - #bash_exec "iptables -A POSTROUTING -p tcp --dport 21 -t mangle -j MARK --set-mark 1" - #bash_exec "iptables -A POSTROUTING -p tcp --dport 80 -t mangle -j MARK --set-mark 2" - - # We set the mark of the initial packet as value of the conntrack mark for all the packets - # of the connection. This mark will be restore for the other packets by the first rule - # of POSTROUTING (–restore-mark). - bash_exec "iptables -A POSTROUTING -t mangle -j CONNMARK --save-mark" - - bash_exec "iptables -A PREROUTING -t mangle -j CONNMARK --restore-mark" - - # We restore the mark following the CONNMARK mark. - # In fact, it does a simple MARK=CONNMARK where MARK is the standard mark (usable by tc) - #bash_exec "$IPTABLES -A OUTPUT -t mangle -m mark ! --mark 0 -j CONNMARK --restore-mark" - - # If we’ve got a mark no need to get further[1] - #TEST bash_exec "$IPTABLES -A OUTPUT -t mangle -p icmp -j MARK --set-mark 14" - #bash_exec "$IPTABLES -A OUTPUT -t mangle -m mark ! --mark 0 -j ACCEPT" - - - # We set the mark of the initial packet as value of the conntrack mark for all the packets of the connection. - # This mark will be restore for the other packets by the first rule of OUTPUT (–restore-mark). - #bash_exec "$IPTABLES -A OUTPUT -t mangle -j CONNMARK --save-mark" - - ###################################################### - # NETFILTER QUEUE - ###################################################### - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 5 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 6 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 7 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 8 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 9 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 10 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 11 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 12 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 13 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 14 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 15 -j NFQUEUE --queue-num 1" - - #echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables #To disable Iptables in the bridge. - #Raw table: Some years ago appeared a new tables in Iptables. - #This table can be used to avoid packets (connection really) to enter the NAT table: - # iptables -t raw -I PREROUTING -i BRIDGE -s x.x.x.x -j NOTRACK. - #bash_exec "$IPTABLES -t nat -A POSTROUTING -o $PGW_INTERFACE_NAME_FOR_SGI -j SNAT --to-source $PGW_IP_ADDR_FOR_SGI" - else - # # get ipv4 address from PGW_INTERFACE_NAME_FOR_SGI - #IP_ADDR=`ifconfig $PGW_INTERFACE_NAME_FOR_SGI | awk '/inet addr/ {split ($2,A,":"); print A[2]}' | tr '\n' ' ' | sed -n '1h;1!H;${;g;s/^[ \t]*//g;s/[ \t]*$//g;p;}'` - - #NETWORK=`echo $IP_ADDR | cut -d . -f 1,2,3` - - bash_exec "modprobe 8021q" - - for i in 5 6 7 8 9 10 11 12 13 14 15 - do - # create vlan interface - ifconfig $PGW_INTERFACE_NAME_FOR_SGI.$i down > /dev/null 2>&1 - vconfig rem $PGW_INTERFACE_NAME_FOR_SGI.$i > /dev/null 2>&1 - sync - bash_exec "vconfig add $PGW_INTERFACE_NAME_FOR_SGI $i" - sync - bash_exec "ifconfig $PGW_INTERFACE_NAME_FOR_SGI.$i up" - sync - # configure vlan interface - #CIDR=$NETWORK'.'$i'/24' - base=200 - NET=$(( $i + $base )) - CIDR='10.0.'$NET'.2/8' - bash_exec "ip -4 addr add $CIDR dev $PGW_INTERFACE_NAME_FOR_SGI.$i" - done - fi - - bash_exec "ip link set $PGW_INTERFACE_NAME_FOR_SGI promisc on" - else - echo_warning "SGI interface disabled by config file" - fi -} - -clean_epc_vlan_network() { - bash_exec "modprobe tun" - bash_exec "modprobe ip_tables" - bash_exec "modprobe iptable_nat" - bash_exec "modprobe x_tables" - - bash_exec "$IPTABLES -P INPUT ACCEPT" - bash_exec "$IPTABLES -F INPUT" - bash_exec "$IPTABLES -P OUTPUT ACCEPT" - bash_exec "$IPTABLES -F OUTPUT" - bash_exec "$IPTABLES -P FORWARD ACCEPT" - bash_exec "$IPTABLES -F FORWARD" - bash_exec "$IPTABLES -t raw -F" - bash_exec "$IPTABLES -t nat -F" - bash_exec "$IPTABLES -t mangle -F" - bash_exec "$IPTABLES -t filter -F" - - bash_exec "ip route flush cache" - - echo " Disabling forwarding" - bash_exec "sysctl -w net.ipv4.ip_forward=0" - assert " `sysctl -n net.ipv4.ip_forward` -eq 0" $LINENO - - echo " Enabling DynamicAddr.." - bash_exec "sysctl -w net.ipv4.ip_dynaddr=1" - assert " `sysctl -n net.ipv4.ip_dynaddr` -eq 1" $LINENO - - bash_exec "sysctl -w net.ipv4.conf.all.log_martians=1" - assert " `sysctl -n net.ipv4.conf.all.log_martians` -eq 1" $LINENO - - - echo " Disabling reverse path filtering" - bash_exec "sysctl -w net.ipv4.conf.all.rp_filter=0" - assert " `sysctl -n net.ipv4.conf.all.rp_filter` -eq 0" $LINENO - - bash_exec "modprobe 8021q" - - ifconfig $MME_INTERFACE_NAME_FOR_S1_MME down > /dev/null 2>&1 - vconfig rem $MME_INTERFACE_NAME_FOR_S1_MME > /dev/null 2>&1 - - ifconfig $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP down > /dev/null 2>&1 - vconfig rem $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP > /dev/null 2>&1 - - - for i in 5 6 7 8 9 10 11 12 13 14 15 - do - # delete vlan interface - ifconfig $PGW_INTERFACE_NAME_FOR_SGI.$i down > /dev/null 2>&1 - vconfig rem $PGW_INTERFACE_NAME_FOR_SGI.$i > /dev/null 2>&1 - done - #ip link set $PGW_INTERFACE_NAME_FOR_SGI down > /dev/null 2>&1 - clean_network -} - -build_openvswitch_network() { - start_openswitch_daemon - # REMINDER: - # hss.eur - # | - # +-----------+ +------+ +-----------+ v +----------+ - # | eNB +------+ | ovs | VLAN 1+------+ MME +----+ +---+ HSS | - # | |cpenb0+------------------+cpmme0| | +------+ | | - # | +------+ |bridge| +------+ +----+ +---+ | - # | |upenb0+-------+ | | | +----------+ - # | +------+ | | | +-+-------+-+ - # | | | | +----------------| s11mme|---+ - # | | | | +---+---+ | - # | | | | (optional)| |ovs bridge is optional - # +-----------+ | | +---+---+ | - # +---|------------------ | s11sgw|---+ router.eur - # | +-+-------+-+ | +--------------+ - # | | S+P-GW | v | ROUTER | - # | VLAN2 +------+ +-------+ +----+ +----+ - # +----------+upsgw0| |sgi +-...-+ | | +---...Internet - # +------+ +-------+ +----+ +----+ - # | | 11 VLANS | | - # +-----------+ ids=[5..15] +--------------+ - # - ################################################## - # build bridge between eNB and MME/SPGW - ################################################## - create_openvswitch_interface $ENB_INTERFACE_NAME_FOR_S1_MME - create_openvswitch_interface $ENB_INTERFACE_NAME_FOR_S1U - create_openvswitch_interface $MME_INTERFACE_NAME_FOR_S1_MME - create_openvswitch_interface $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP - create_openvswitch_interface $MME_INTERFACE_NAME_FOR_S11_MME - create_openvswitch_interface $SGW_INTERFACE_NAME_FOR_S11 - - bash_exec "ovs-vsctl add-br $BRIDGE" - bash_exec "ovs-vsctl add-port $BRIDGE $ENB_INTERFACE_NAME_FOR_S1_MME tag=1" - bash_exec "ovs-vsctl add-port $BRIDGE $MME_INTERFACE_NAME_FOR_S1_MME tag=1" - bash_exec "ovs-vsctl add-port $BRIDGE $ENB_INTERFACE_NAME_FOR_S1U tag=2" - bash_exec "ovs-vsctl add-port $BRIDGE $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP tag=2" - bash_exec "ovs-vsctl add-port $BRIDGE $MME_INTERFACE_NAME_FOR_S11_MME tag=3" - bash_exec "ovs-vsctl add-port $BRIDGE $SGW_INTERFACE_NAME_FOR_S11 tag=3" - - bash_exec "ifconfig $MME_INTERFACE_NAME_FOR_S1_MME promisc up" - bash_exec "ifconfig $MME_INTERFACE_NAME_FOR_S1_MME $MME_IPV4_ADDRESS_FOR_S1_MME netmask `cidr2mask $MME_IPV4_NETMASK_FOR_S1_MME` promisc up" - bash_exec "ifconfig $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP promisc up" - bash_exec "ifconfig $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP $SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP netmask `cidr2mask $SGW_IPV4_NETMASK_FOR_S1U_S12_S4_UP` promisc up" - - bash_exec "ifconfig $ENB_INTERFACE_NAME_FOR_S1_MME promisc up" - bash_exec "ifconfig $ENB_INTERFACE_NAME_FOR_S1_MME $ENB_IPV4_ADDRESS_FOR_S1_MME netmask `cidr2mask $ENB_IPV4_NETMASK_FOR_S1_MME` promisc up" - bash_exec "ifconfig $ENB_INTERFACE_NAME_FOR_S1U promisc up" - bash_exec "ifconfig $ENB_INTERFACE_NAME_FOR_S1U $ENB_IPV4_ADDRESS_FOR_S1U netmask `cidr2mask $ENB_IPV4_NETMASK_FOR_S1U` promisc up" - - bash_exec "ifconfig $MME_INTERFACE_NAME_FOR_S11_MME promisc up" - bash_exec "ifconfig $MME_INTERFACE_NAME_FOR_S11_MME $MME_IPV4_ADDRESS_FOR_S11_MME netmask `cidr2mask $MME_IPV4_NETMASK_FOR_S11_MME` promisc up" - bash_exec "ifconfig $SGW_INTERFACE_NAME_FOR_S11 promisc up" - bash_exec "ifconfig $SGW_INTERFACE_NAME_FOR_S11 $SGW_IPV4_ADDRESS_FOR_S11 netmask `cidr2mask $SGW_IPV4_NETMASK_FOR_S11` promisc up" -} - -test_openvswitch_network() { - - # TEST INTERFACES - ping -q -c 1 $MME_IPV4_ADDRESS_FOR_S1_MME > /dev/null 2>&1 - if [ $? -ne 0 ]; then echo_fatal "PING INTERFACE $MME_INTERFACE_NAME_FOR_S1_MME ERROR, ADDRESS IS $MME_IPV4_ADDRESS_FOR_S1_MME"; fi; - ping -q -c 1 $SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP > /dev/null 2>&1 - if [ $? -ne 0 ]; then echo_fatal "PING INTERFACE $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP ERROR, ADDRESS IS $SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP"; fi; - ping -q -c 1 $ENB_IPV4_ADDRESS_FOR_S1_MME > /dev/null 2>&1 - if [ $? -ne 0 ]; then echo_fatal "PING INTERFACE $ENB_INTERFACE_NAME_FOR_S1_MME ADDR ERROR, ADDRESS IS $ENB_IPV4_ADDRESS_FOR_S1_MME"; fi; - ping -q -c 1 $ENB_IPV4_ADDRESS_FOR_S1U > /dev/null 2>&1 - if [ $? -ne 0 ]; then echo_fatal "PING INTERFACE $ENB_INTERFACE_NAME_FOR_S1U ERROR, ADDRESS IS $ENB_IPV4_ADDRESS_FOR_S1U"; fi; - ping -q -c 1 $MME_IPV4_ADDRESS_FOR_S11_MME > /dev/null 2>&1 - if [ $? -ne 0 ]; then echo_fatal "PING INTERFACE $MME_INTERFACE_NAME_FOR_S11_MME ERROR, ADDRESS IS $MME_IPV4_ADDRESS_FOR_S11_MME"; fi; - ping -q -c 1 $SGW_IPV4_ADDRESS_FOR_S11 > /dev/null 2>&1 - if [ $? -ne 0 ]; then echo_fatal "PING INTERFACE $SGW_INTERFACE_NAME_FOR_S11 ERROR, ADDRESS IS $SGW_IPV4_ADDRESS_FOR_S11"; fi; - - - ## TEST NETWORK BETWEEN ENB-MME-SP-GW - iperf --bind $MME_IPV4_ADDRESS_FOR_S1_MME -u -s 2>&1 > /dev/null & - iperf --bind $ENB_IPV4_ADDRESS_FOR_S1_MME -u --num 1K -c $MME_IPV4_ADDRESS_FOR_S1_MME 2>&1 | grep -i WARNING > /dev/null - if [ $? -eq 0 ]; then - pkill iperf 2>&1 > /dev/null - echo_fatal 'NETWORK ERROR CONFIGURATION (openvswitch) between ENB and MME S1' - else - echo_success 'NETWORK TEST SUCCESS (openvswitch) between ENB and MME S1' - - fi - pkill iperf 2>&1 > /dev/null - - iperf --bind $SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP -u -s 2>&1 > /dev/null & - iperf --bind $ENB_IPV4_ADDRESS_FOR_S1U -u --num 1K -c $SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP 2>&1 | grep -i WARNING > /dev/null - if [ $? -eq 0 ]; then - pkill iperf 2>&1 > /dev/null - echo_fatal 'NETWORK ERROR CONFIGURATION (openvswitch) between ENB and S-GW S1-U' - else - echo_success 'NETWORK TEST SUCCESS (openvswitch) between ENB and S-GW S1-U' - fi - pkill iperf 2>&1 > /dev/null - - iperf --bind $SGW_IPV4_ADDRESS_FOR_S11 -u -s 2>&1 > /dev/null & - iperf --bind $MME_IPV4_ADDRESS_FOR_S11_MME -u --num 1K -c $SGW_IPV4_ADDRESS_FOR_S11 2>&1 | grep -i WARNING > /dev/null - if [ $? -eq 0 ]; then - pkill iperf 2>&1 > /dev/null - echo_fatal 'NETWORK ERROR CONFIGURATION (openvswitch) between MME and S-GW S11' - else - echo_success 'NETWORK TEST SUCCESS (openvswitch) between MME and S-GW S11' - fi - pkill iperf 2>&1 > /dev/null - return 0 -} - -clean_openvswitch_network() { - ################################################## - # del bridge between eNB and MME/SPGW - ################################################## - delete_openvswitch_interface $ENB_INTERFACE_NAME_FOR_S1_MME - delete_openvswitch_interface $ENB_INTERFACE_NAME_FOR_S1U - delete_openvswitch_interface $MME_INTERFACE_NAME_FOR_S1_MME - delete_openvswitch_interface $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP - delete_openvswitch_interface $MME_INTERFACE_NAME_FOR_S11_MME - delete_openvswitch_interface $SGW_INTERFACE_NAME_FOR_S11 - if is_process_started ovs-vswitchd ; then - ovs-vsctl del-br $BRIDGE > /dev/null 2>&1 - fi - stop_openswitch_daemon -} - -build_epc_ovs_network() { - - cat $OPENAIRCN_DIR/$OBJ_DIR/Makefile | grep CFLAGS\ \=\ | grep DENABLE_USE_NETFILTER_FOR_SGI - if [ $? -ne 0 ] - then - export ENABLE_USE_NETFILTER_FOR_SGI=0 - else - export ENABLE_USE_NETFILTER_FOR_SGI=1 - fi - - cat $OPENAIRCN_DIR/$OBJ_DIR/Makefile | grep CFLAGS\ \=\ | grep DENABLE_USE_RAW_FOR_SGI - if [ $? -ne 0 ] - then - export ENABLE_USE_RAW_FOR_SGI=0 - else - export ENABLE_USE_RAW_FOR_SGI=1 - fi - - build_openvswitch_network - - ping -c 1 router.eur > /dev/null || { echo_fatal "router.eur does not respond to ping" >&2 ; } - IP_ROUTER=`python -c 'import socket; print socket.gethostbyname("router.eur")'` - export MAC_ROUTER=`ip neigh show | grep $IP_ROUTER | cut -d ' ' -f5 | tr -d ':'` - echo_success "ROUTER MAC ADDRESS= $MAC_ROUTER" - - if [ $ENABLE_USE_NETFILTER_FOR_SGI -eq 1 ]; then - - bash_exec "modprobe nf_conntrack" - bash_exec "modprobe nf_conntrack_ftp" - - ###################################################### - # PREROUTING - ###################################################### - # We restore the mark following the CONNMARK mark. In fact, it does a simple MARK=CONNMARK - # where MARK is the standard mark (usable by tc) - # In French: Cette option de cible restaure le paquet marqué dans la marque de connexion - # comme défini par CONNMARK. Un masque peut aussi être défini par l'option --mask. - # Si une option mask est placée, seules les options masquées seront placées. - # Notez que cette option de cible n'est valide que dans la table mangle. - bash_exec "$IPTABLES -t mangle -A PREROUTING -j CONNMARK --restore-mark" - - # TEST bash_exec "$IPTABLES -t mangle -A PREROUTING -m mark --mark 0 -i $PGW_INTERFACE_NAME_FOR_SGI -j MARK --set-mark 15" - # We set the mark of the initial packet as value of the conntrack mark for all the packets of the connection. - # This mark will be restore for the other packets by the first rule of POSTROUTING --restore-mark). - bash_exec "$IPTABLES -t mangle -A PREROUTING -j CONNMARK --save-mark" - - - ###################################################### - # POSTROUTING - ###################################################### - - # MARK=CONNMARK - bash_exec "iptables -A POSTROUTING -t mangle -o tap0 -j CONNMARK --restore-mark" - # If we’ve got a mark no need to get further[ - bash_exec "iptables -A POSTROUTING -t mangle -o tap0 -m mark ! --mark 0 -j ACCEPT" - - #bash_exec "iptables -A POSTROUTING -p tcp --dport 21 -t mangle -j MARK --set-mark 1" - #bash_exec "iptables -A POSTROUTING -p tcp --dport 80 -t mangle -j MARK --set-mark 2" - - # We set the mark of the initial packet as value of the conntrack mark for all the packets - # of the connection. This mark will be restore for the other packets by the first rule - # of POSTROUTING (–restore-mark). - bash_exec "iptables -A POSTROUTING -t mangle -j CONNMARK --save-mark" - - bash_exec "iptables -A PREROUTING -t mangle -j CONNMARK --restore-mark" - - # We restore the mark following the CONNMARK mark. - # In fact, it does a simple MARK=CONNMARK where MARK is the standard mark (usable by tc) - #bash_exec "$IPTABLES -A OUTPUT -t mangle -m mark ! --mark 0 -j CONNMARK --restore-mark" - - # If we’ve got a mark no need to get further[1] - #TEST bash_exec "$IPTABLES -A OUTPUT -t mangle -p icmp -j MARK --set-mark 14" - #bash_exec "$IPTABLES -A OUTPUT -t mangle -m mark ! --mark 0 -j ACCEPT" - - - # We set the mark of the initial packet as value of the conntrack mark for all the packets of the connection. - # This mark will be restore for the other packets by the first rule of OUTPUT (–restore-mark). - #bash_exec "$IPTABLES -A OUTPUT -t mangle -j CONNMARK --save-mark" - - - - - ###################################################### - # NETFILTER QUEUE - ###################################################### - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 5 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 6 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 7 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 8 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 9 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 10 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 11 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 12 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 13 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 14 -j NFQUEUE --queue-num 1" - bash_exec "$IPTABLES -t mangle -A PREROUTING -i $PGW_INTERFACE_NAME_FOR_SGI -m connmark --mark 15 -j NFQUEUE --queue-num 1" - - #echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables #To disable Iptables in the bridge. - #Raw table: Some years ago appeared a new tables in Iptables. - #This table can be used to avoid packets (connection really) to enter the NAT table: - # iptables -t raw -I PREROUTING -i BRIDGE -s x.x.x.x -j NOTRACK. - - #bash_exec "$IPTABLES -t nat -A POSTROUTING -o $PGW_INTERFACE_NAME_FOR_SGI -j SNAT --to-source $PGW_IP_ADDR_FOR_SGI" - else - # # get ipv4 address from PGW_INTERFACE_NAME_FOR_SGI - #IP_ADDR=`ifconfig $PGW_INTERFACE_NAME_FOR_SGI | awk '/inet addr/ {split ($2,A,":"); print A[2]}' | tr '\n' ' ' | sed -n '1h;1!H;${;g;s/^[ \t]*//g;s/[ \t]*$//g;p;}'` - - #NETWORK=`echo $IP_ADDR | cut -d . -f 1,2,3` - - bash_exec "modprobe 8021q" - - for i in 5 6 7 8 9 10 11 12 13 14 15 - do - # create vlan interface - ifconfig $PGW_INTERFACE_NAME_FOR_SGI.$i down > /dev/null 2>&1 - vconfig rem $PGW_INTERFACE_NAME_FOR_SGI.$i > /dev/null 2>&1 - sync - bash_exec "vconfig add $PGW_INTERFACE_NAME_FOR_SGI $i" - sync - bash_exec "ifconfig $PGW_INTERFACE_NAME_FOR_SGI.$i up" - sync - # configure vlan interface - #CIDR=$NETWORK'.'$i'/24' - base=200 - NET=$(( $i + $base )) - CIDR='10.0.'$NET'.2/8' - bash_exec "ip -4 addr add $CIDR dev $PGW_INTERFACE_NAME_FOR_SGI.$i" - done - fi - - - bash_exec "ip link set $PGW_INTERFACE_NAME_FOR_SGI promisc on" - - ################################################## - # build bridge between SPGW and Internet - ################################################## - - # # get ipv4 address from PGW_INTERFACE_NAME_FOR_SGI - # IP_ADDR=`ifconfig $PGW_INTERFACE_NAME_FOR_SGI | awk '/inet addr/ {split ($2,A,":"); print A[2]}' | tr '\n' ' ' | sed -n '1h;1!H;${;g;s/^[ \t]*//g;s/[ \t]*$//g;p;}'` - # if [ $IP_ADDR ]; then - # bash_exec "ip -4 addr del $IP_ADDR dev $PGW_INTERFACE_NAME_FOR_SGI" - # fi - # - # # remove all ipv6 address from PGW_INTERFACE_NAME_FOR_SGI - # IP_ADDR="not empty" - # until [ "$IP_ADDR"x == "x" ]; do - # IP_ADDR=`ifconfig $PGW_INTERFACE_NAME_FOR_SGI | grep 'inet6' | head -1 | tr '\n' ' ' | sed -n '1h;1!H;${;g;s/^[ \t]*//g;s/[ \t]*$//g;p;}' | cut -d ' ' -f3` - # if [ $IP_ADDR ]; then - # bash_exec "ip -6 addr del $IP_ADDR dev $PGW_INTERFACE_NAME_FOR_SGI" - # fi - # done -} - -test_epc_ovs_network() { - # Get MAC address of router.eur - ping -c 1 hss.eur > /dev/null || { echo_fatal "hss.eur does not respond to ping" >&2 ; } - ping -c 1 router.eur > /dev/null || { echo_fatal "router.eur does not respond to ping" >&2 ; } - test_openvswitch_network -} - -clean_epc_ovs_network() { - bash_exec "modprobe tun" - bash_exec "modprobe ip_tables" - bash_exec "modprobe iptable_nat" - bash_exec "modprobe x_tables" - - bash_exec "$IPTABLES -P INPUT ACCEPT" - bash_exec "$IPTABLES -F INPUT" - bash_exec "$IPTABLES -P OUTPUT ACCEPT" - bash_exec "$IPTABLES -F OUTPUT" - bash_exec "$IPTABLES -P FORWARD ACCEPT" - bash_exec "$IPTABLES -F FORWARD" - bash_exec "$IPTABLES -t raw -F" - bash_exec "$IPTABLES -t nat -F" - bash_exec "$IPTABLES -t mangle -F" - bash_exec "$IPTABLES -t filter -F" - - bash_exec "ip route flush cache" - - echo " Disabling forwarding" - bash_exec "sysctl -w net.ipv4.ip_forward=0" - assert " `sysctl -n net.ipv4.ip_forward` -eq 0" $LINENO - - echo " Enabling DynamicAddr.." - bash_exec "sysctl -w net.ipv4.ip_dynaddr=1" - assert " `sysctl -n net.ipv4.ip_dynaddr` -eq 1" $LINENO - - bash_exec "sysctl -w net.ipv4.conf.all.log_martians=1" - assert " `sysctl -n net.ipv4.conf.all.log_martians` -eq 1" $LINENO - - - echo " Disabling reverse path filtering" - bash_exec "sysctl -w net.ipv4.conf.all.rp_filter=0" - assert " `sysctl -n net.ipv4.conf.all.rp_filter` -eq 0" $LINENO - - - for i in 5 6 7 8 9 10 11 12 13 14 15 - do - ifconfig $PGW_INTERFACE_NAME_FOR_SGI.$i down > /dev/null 2>&1 - vconfig rem $PGW_INTERFACE_NAME_FOR_SGI.$i > /dev/null 2>&1 - done - - clean_network - clean_openvswitch_network -} - -clean_network() { - interfaces=`ifconfig | grep HWaddr | cut -d " " -f1-2 | tr -d '\n'` - for interface in $interfaces - do - is_openvswitch_interface $interface - if [ $? -eq 1 ]; then - echo_success "Found open-vswitch interface $interface ... deleting" - delete_openvswitch_interface $interface - fi - - is_vlan_interface $interface - if [ $? -eq 1 ]; then - echo_success "Found VLAN interface $interface ... deleting" - ifconfig $interface down > /dev/null 2>&1 - vconfig rem $interface > /dev/null 2>&1 - fi - done -} - -check_s6a_certificate() { - if [ -d /usr/local/etc/freeDiameter ] - then - if [ -f /usr/local/etc/freeDiameter/user.cert.pem ] - then - full_hostname=`cat /usr/local/etc/freeDiameter/user.cert.pem | grep "Subject" | grep "CN" | cut -d '=' -f6` - if [ a$full_hostname == a`hostname`.eur ] - then - echo_success "S6A: Found valid certificate in /usr/local/etc/freeDiameter" - return 1 - fi - fi - fi - echo_error "S6A: Did not find valid certificate in /usr/local/etc/freeDiameter" - echo_warning "S6A: generatting new certificate in /usr/local/etc/freeDiameter..." - cd $OPENAIRCN_DIR/S6A/freediameter - ./make_certs.sh - check_s6a_certificate - return 1 -} - -check_install_epc_software() { - test_install_package autoconf - test_install_package automake - test_install_package bison - test_install_package build-essential - test_install_package cmake - test_install_package cmake-curses-gui - test_install_package flex - test_install_package g++ - test_install_package gawk - test_install_package gcc - test_install_package gccxml - test_install_package gdb - test_install_package guile-2.0-dev - test_install_package iperf - test_install_package iproute - test_install_package iptables - test_install_package libatlas-base-dev - test_install_package libatlas-dev - test_install_package libblas - test_install_package libblas-dev - test_install_package libconfig-dev - test_install_package libforms-bin - test_install_package libforms-dev - test_install_package libgcrypt11-dev - test_install_package libgmp-dev - test_install_package libgtk-3-dev - test_install_package libidn11-dev - test_install_package libidn2-0-dev - test_install_package libmysqlclient-dev - test_install_package libpgm-dev - test_install_package libpthread-stubs0-dev - test_install_package libsctp1 - test_install_package libsctp-dev - test_install_package libtasn1-3-dev - test_install_package libxml2 - test_install_package libxml2-dev - test_install_package linux-headers-`uname -r` - test_install_package make - test_install_package openssl - test_install_package python-dev - test_install_package subversion - test_install_package swig - test_install_package tshark - test_install_package uml-utilities - test_install_package unzip - test_install_package valgrind - test_install_package vlan - test_install_package libssl-dev - - - if [ ! -d /usr/local/etc/freeDiameter ] - then - # This script make certificates also - cd $OPENAIRCN_DIR/S6A/freediameter && ./install_freediameter.sh - else - echo_success "freediameter is installed" - check_s6a_certificate - fi - - test_command_install_script "asn1c" "$OPENAIRCN_DIR/SCRIPTS/install_asn1c_0.9.24.modified.bash" - - # One mor check about version of asn1c - ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE="ASN.1 Compiler, v0.9.24" - ASN1C_COMPILER_VERSION_MESSAGE=`asn1c -h 2>&1 | grep -i ASN\.1\ Compiler` - ##ASN1C_COMPILER_VERSION_MESSAGE=`trim $ASN1C_COMPILER_VERSION_MESSAGE` - if [ "$ASN1C_COMPILER_VERSION_MESSAGE" != "$ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE" ] - then - diff <(echo -n "$ASN1C_COMPILER_VERSION_MESSAGE") <(echo -n "$ASN1C_COMPILER_REQUIRED_VERSION_MESSAGE") - echo_error "Version of asn1c is not the required one, do you want to install the required one (overwrite installation) ? (Y/n)" - echo_error "$ASN1C_COMPILER_VERSION_MESSAGE" - while read -r -n 1 -s answer; do - if [[ $answer = [YyNn] ]]; then - [[ $answer = [Yy] ]] && $OPENAIRCN_DIR/SCRIPTS/install_asn1c_0.9.24.modified.bash - [[ $answer = [Nn] ]] && echo_error "Version of asn1c is not the required one, exiting." && exit 1 - break - fi - done - fi -} - -########################################################### -IPTABLES=/sbin/iptables -THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) -declare -x OPENAIR_DIR="" -declare -x OPENAIR1_DIR="" -declare -x OPENAIR2_DIR="" -declare -x OPENAIR3_DIR="" -declare -x OPENAIRCN_DIR="" -declare -x OPENAIR_TARGETS="" -########################################################### - -set_openair -cecho "OPENAIR_DIR = $OPENAIR_DIR" $green -cecho "OPENAIR_HOME = $OPENAIR_HOME" $green -cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green -cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green -cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green -cecho "OPENAIRCN_DIR = $OPENAIRCN_DIR" $green -cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green