From c6a4c78107eb09cee67d186d87c37183bb73edc1 Mon Sep 17 00:00:00 2001 From: Lionel Gauthier <lionel.gauthier@eurecom.fr> Date: Mon, 16 Jun 2014 17:02:41 +0000 Subject: [PATCH] TO BE CONTINUED git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5398 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- .../PROJECTS/GENERIC-LTE-EPC/interfaces.bash | 246 +++++++ .../PROJECTS/GENERIC-LTE-EPC/networks.bash | 604 ++++++++++++++++++ .../PROJECTS/GENERIC-LTE-EPC/virtual_box.bash | 158 +++++ 3 files changed, 1008 insertions(+) create mode 100755 targets/PROJECTS/GENERIC-LTE-EPC/interfaces.bash create mode 100755 targets/PROJECTS/GENERIC-LTE-EPC/networks.bash create mode 100755 targets/PROJECTS/GENERIC-LTE-EPC/virtual_box.bash diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/interfaces.bash b/targets/PROJECTS/GENERIC-LTE-EPC/interfaces.bash new file mode 100755 index 0000000000..9c3a21e160 --- /dev/null +++ b/targets/PROJECTS/GENERIC-LTE-EPC/interfaces.bash @@ -0,0 +1,246 @@ +################################################################################ +# Eurecom OpenAirInterface core network +# Copyright(c) 1999 - 2014 Eurecom +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope 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 +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information +# Openair Admin: openair_admin@eurecom.fr +# Openair Tech : openair_tech@eurecom.fr +# Forums : http://forums.eurecom.fsr/openairinterface +# Address : EURECOM, +# Campus SophiaTech, +# 450 Route des Chappes, +# CS 50193 +# 06904 Biot Sophia Antipolis cedex, +# FRANCE +################################################################################ +# file interfaces.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[*]}" +} + + +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 + return 0; + fi + fi + fi + fi + else + return 0; + fi + done + return $my_bool +} + +is_tun_interface() { + my_bool=1 + for var in "$@" + do + if [ "a$var" == "a" ]; then + return 0 + fi + if [[ "$IF" != *tun* ]]; then + return 0; + fi + bus_info=`ethtool -i $var | grep bus-info | cut -d: -f2` + bus_info=trim2 $bus_info + if [[ "$bus_info" != *tun* ]]; then + return 0; + fi + done + return $my_bool +} + +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; +} + +delete_tun_interface() { + is_tun_interface $1 + if [ $? -eq 1 ]; then + ip link set $1 down > /dev/null 2>&1 + openvpn --rmtun --dev $1 > /dev/null 2>&1 + fi +} + + +create_tun_interface() { + is_tun_interface $1 + if [ $? -eq 1 ]; then + openvpn --mktun --dev $1 + fi + #ip link set $1 up +} + + +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 + if [ "a${interface:0:4}" == "anone" ]; then + return; + fi + 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 +} + +get_mac_router() { + 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" +} + diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/networks.bash b/targets/PROJECTS/GENERIC-LTE-EPC/networks.bash new file mode 100755 index 0000000000..691b16928f --- /dev/null +++ b/targets/PROJECTS/GENERIC-LTE-EPC/networks.bash @@ -0,0 +1,604 @@ +################################################################################ +# Eurecom OpenAirInterface core network +# Copyright(c) 1999 - 2014 Eurecom +# +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. +# +# This program is distributed in the hope 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 +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. +# +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". +# +# Contact Information +# Openair Admin: openair_admin@eurecom.fr +# Openair Tech : openair_tech@eurecom.fr +# Forums : http://forums.eurecom.fsr/openairinterface +# Address : EURECOM, +# Campus SophiaTech, +# 450 Route des Chappes, +# CS 50193 +# 06904 Biot Sophia Antipolis cedex, +# FRANCE +################################################################################ +# file networks.bash +# brief +# author Lionel Gauthier +# company Eurecom +# email: lionel.gauthier@eurecom.fr +# + +########################################################### +THIS_NETWORKS_SCRIPT_PATH=$(dirname $(readlink -f $0)) +source $THIS_NETWORKS_SCRIPT_PATH/interfaces.bash +########################################################### + +# 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[*]}" +} + +build_network() { + echo "TO DO" +} + + +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" + if [ "a${MME_INTERFACE_NAME_FOR_S11_MME:0:4}" != "anone" ]; then + bash_exec "ovs-vsctl add-port $BRIDGE $MME_INTERFACE_NAME_FOR_S11_MME tag=3" + fi + if [ "a${SGW_INTERFACE_NAME_FOR_S11:0:4}" != "anone" ]; then + bash_exec "ovs-vsctl add-port $BRIDGE $SGW_INTERFACE_NAME_FOR_S11 tag=3" + fi + + set_interface_up $MME_INTERFACE_NAME_FOR_S1_MME $MME_IPV4_ADDRESS_FOR_S1_MME $MME_IPV4_NETMASK_FOR_S1_MME + 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 + + set_interface_up $ENB_INTERFACE_NAME_FOR_S1_MME $ENB_IPV4_ADDRESS_FOR_S1_MME $ENB_IPV4_NETMASK_FOR_S1_MME + set_interface_up $ENB_INTERFACE_NAME_FOR_S1U $ENB_IPV4_ADDRESS_FOR_S1U $ENB_IPV4_NETMASK_FOR_S1U + + set_interface_up $MME_INTERFACE_NAME_FOR_S11_MME $MME_IPV4_ADDRESS_FOR_S11_MME $MME_IPV4_NETMASK_FOR_S11_MME + set_interface_up $SGW_INTERFACE_NAME_FOR_S11 $SGW_IPV4_ADDRESS_FOR_S11 $SGW_IPV4_NETMASK_FOR_S11 + + get_mac_router +} + +clean_openvswitch_network() { + start_openswitch_daemon + ################################################## + # 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_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 +} + + + +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] +--------------+ + + 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 + get_mac_router + # # 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 + + 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_tun_network() { + # REMINDER: + # hss.eur + # | + # +-----------+ +-----------+ v +----------+ + # | eNB +------+ +------+ MME +----+ +---+ HSS | + # | |cpenb0+------------------+cpmme0| |s6am+------+s6a| | + # | +------+ +------+ +----+ +---+ | + # | |upenb0+-------+ | | +----------+ + # | +------+ | +-+-------+-+ + # | | | | s11mme| + # | | | +---+---+ + # | | | (optional)| + # +-----------+ | +---+---+ + # | | s11sgw| router.eur + # | +-+-------+-+ | +--------------+ + # | | S+P-GW | v | ROUTER | + # | +------+ +-------+ +----+ +----+ + # +----------+upsgw0| |sgi +-...-+ | | +---...Internet + # +------+ +-------+ +----+ +----+ + # | | 11 VLANS | | + # +-----------+ ids=[5..15] +--------------+ + # + bash_exec "modprobe tun" + ################################################## + # build network between eNB and MME/SPGW and HSS + ################################################## + echo_success "ENB_INTERFACE_NAME_FOR_S1_MME is "$ENB_INTERFACE_NAME_FOR_S1_MME" addr is "$ENB_IPV4_ADDRESS_FOR_S1_MME + echo_success "ENB_INTERFACE_NAME_FOR_S1U is "$ENB_INTERFACE_NAME_FOR_S1U" addr is "$ENB_IPV4_ADDRESS_FOR_S1U + echo_success "MME_INTERFACE_NAME_FOR_S1_MME is "$MME_INTERFACE_NAME_FOR_S1_MME" addr is "$MME_IPV4_ADDRESS_FOR_S1_MME + echo_success "SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP is "$SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP" addr is "$SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP + echo_success "MME_INTERFACE_NAME_FOR_S11_MME is "$MME_INTERFACE_NAME_FOR_S11_MME" addr is "$MME_IPV4_ADDRESS_FOR_S11_MME + echo_success "SGW_INTERFACE_NAME_FOR_S11 is "$SGW_INTERFACE_NAME_FOR_S11" addr is "$SGW_IPV4_ADDRESS_FOR_S11 + echo_success "MME_INTERFACE_NAME_FOR_S6A is "$MME_INTERFACE_NAME_FOR_S6A" addr is "$MME_IPV4_ADDRESS_FOR_S6A + echo_success "HSS_INTERFACE_NAME_FOR_S6A is "$HSS_INTERFACE_NAME_FOR_S6A" addr is "$HSS_IPV4_ADDRESS_FOR_S6A + + create_tun_interface $ENB_INTERFACE_NAME_FOR_S1_MME + create_tun_interface $ENB_INTERFACE_NAME_FOR_S1U + create_tun_interface $MME_INTERFACE_NAME_FOR_S1_MME + create_tun_interface $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP + create_tun_interface $MME_INTERFACE_NAME_FOR_S11_MME + create_tun_interface $SGW_INTERFACE_NAME_FOR_S11 + create_tun_interface $MME_INTERFACE_NAME_FOR_S6A + create_tun_interface $HSS_INTERFACE_NAME_FOR_S6A + + set_interface_up $MME_INTERFACE_NAME_FOR_S1_MME $MME_IPV4_ADDRESS_FOR_S1_MME $MME_IPV4_NETMASK_FOR_S1_MME + 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 + + set_interface_up $ENB_INTERFACE_NAME_FOR_S1_MME $ENB_IPV4_ADDRESS_FOR_S1_MME $ENB_IPV4_NETMASK_FOR_S1_MME + set_interface_up $ENB_INTERFACE_NAME_FOR_S1U $ENB_IPV4_ADDRESS_FOR_S1U $ENB_IPV4_NETMASK_FOR_S1U + + set_interface_up $MME_INTERFACE_NAME_FOR_S11_MME $MME_IPV4_ADDRESS_FOR_S11_MME $MME_IPV4_NETMASK_FOR_S11_MME + set_interface_up $SGW_INTERFACE_NAME_FOR_S11 $SGW_IPV4_ADDRESS_FOR_S11 $SGW_IPV4_NETMASK_FOR_S11 + + set_interface_up $MME_INTERFACE_NAME_FOR_S6A $MME_IPV4_ADDRESS_FOR_S6A $MME_IPV4_NETMASK_FOR_S6A + set_interface_up $HSS_INTERFACE_NAME_FOR_S6A $HSS_IPV4_ADDRESS_FOR_S6A $HSS_IPV4_NETMASK_FOR_S6A +} + +# arg1 is IF1 IP addr +# arg2 is IF2 IP addr +test_local_iperf() { + + TRY_NO=3 + + until [ $TRY_NO -lt 1 ]; do + iperf --bind $1 -u -s 2>&1 > /dev/null & + iperf --bind $2 -u --num 1K -c $1 2>&1 | grep -i WARNING > /dev/null + if [ $? -eq 0 ]; then + pkill iperf 2>&1 > /dev/null + echo_warning "NETWORK TEST FAILED between $1 and $2" + else + echo_success "NETWORK TEST SUCCESS between $1 and $2" + pkill iperf 2>&1 > /dev/null + return + fi + let TRY_NO-=1 + pkill iperf 2>&1 > /dev/null + done + echo_fatal "FATAL: NETWORK TEST FAILED between $1 and $2" +} + +test_network() { + + # TEST INTERFACES + if [ "a${MME_INTERFACE_NAME_FOR_S1_MME:0:4}" != "anone" ]; then + 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 $LINENO"; fi; + fi + + if [ "a${SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP:0:4}" != "anone" ]; then + 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 $LINENO"; fi; + fi + + if [ "a${ENB_INTERFACE_NAME_FOR_S1_MME:0:4}" != "anone" ]; then + 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 $LINENO"; fi; + fi + + if [ "a${ENB_INTERFACE_NAME_FOR_S1U:0:4}" != "anone" ]; then + 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 $LINENO"; fi; + fi + + if [ "a${MME_INTERFACE_NAME_FOR_S11_MME:0:4}" != "anone" ]; then + 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 $LINENO"; fi; + fi + + if [ "a${SGW_INTERFACE_NAME_FOR_S11:0:4}" != "anone" ]; then + 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 $LINENO"; fi; + fi + + if [ "a${MME_INTERFACE_NAME_FOR_S6A:0:4}" != "anone" ]; then + ping -q -c 1 $MME_IPV4_ADDRESS_FOR_S6A > /dev/null 2>&1 + if [ $? -ne 0 ]; then echo_fatal "PING INTERFACE $MME_INTERFACE_NAME_FOR_S6A ERROR, ADDRESS IS $MME_IPV4_ADDRESS_FOR_S6A $LINENO"; fi; + fi + + if [ "a${HSS_INTERFACE_NAME_FOR_S6A:0:4}" != "anone" ]; then + ping -q -c 1 $HSS_IPV4_ADDRESS_FOR_S6A > /dev/null 2>&1 + if [ $? -ne 0 ]; then echo_fatal "PING INTERFACE $HSS_INTERFACE_NAME_FOR_S6A ERROR, ADDRESS IS $HSS_IPV4_ADDRESS_FOR_S6A $LINENO"; fi; + fi + + ## TEST NETWORK BETWEEN ENB-MME-SP-GW + + if [ "a${MME_INTERFACE_NAME_FOR_S1_MME:0:4}" != "anone" ] && [ "a${ENB_INTERFACE_NAME_FOR_S1_MME:0:4}" != "anone" ]; then + test_local_iperf $ENB_IPV4_ADDRESS_FOR_S1_MME $MME_IPV4_ADDRESS_FOR_S1_MME + fi + + if [ "a${ENB_INTERFACE_NAME_FOR_S1U:0:4}" != "anone" ] && [ "a${SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP:0:4}" != "anone" ]; then + test_local_iperf $ENB_IPV4_ADDRESS_FOR_S1U $SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP + fi + + if [ "a${MME_INTERFACE_NAME_FOR_S11_MME:0:4}" != "anone" ] && [ "a${SGW_INTERFACE_NAME_FOR_S11:0:4}" != "anone" ]; then + test_local_iperf $MME_IPV4_ADDRESS_FOR_S11_MME $SGW_IPV4_ADDRESS_FOR_S11 + fi + + if [ "a${MME_INTERFACE_NAME_FOR_S6A:0:4}" != "anone" ] && [ "a${HSS_INTERFACE_NAME_FOR_S6A:0:4}" != "anone" ]; then + test_local_iperf $MME_IPV4_ADDRESS_FOR_S6A $HSS_IPV4_ADDRESS_FOR_S6A + fi + + # 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 ; } + return 0 +} + +clean_tun_network() { + bash_exec "modprobe tun" + ################################################## + # del interfaces eNB and MME/SPGW and HSS + ################################################## + delete_tun_interface $ENB_INTERFACE_NAME_FOR_S1_MME + delete_tun_interface $ENB_INTERFACE_NAME_FOR_S1U + delete_tun_interface $MME_INTERFACE_NAME_FOR_S1_MME + delete_tun_interface $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP + delete_tun_interface $MME_INTERFACE_NAME_FOR_S11_MME + delete_tun_interface $SGW_INTERFACE_NAME_FOR_S11 + delete_tun_interface $MME_INTERFACE_NAME_FOR_S6A + delete_tun_interface $HSS_INTERFACE_NAME_FOR_S6A +} + +build_epc_tun_network() { + + build_tun_network + + get_mac_router + + 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 + + + bash_exec "ip link set $PGW_INTERFACE_NAME_FOR_SGI promisc on" + +} + + +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_tun_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 +} diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/virtual_box.bash b/targets/PROJECTS/GENERIC-LTE-EPC/virtual_box.bash new file mode 100755 index 0000000000..dba5d97eb9 --- /dev/null +++ b/targets/PROJECTS/GENERIC-LTE-EPC/virtual_box.bash @@ -0,0 +1,158 @@ +#!/bin/bash + +export ENB_VM_NAME='enb-vm-ubuntu-12.04.4-server-amd64' +export HSS_VM_NAME='hss-vm-ubuntu-12.04.4-server-amd64' +export OS_INSTALL_IMAGE="/root/ubuntu-12.04.4-server-amd64.iso" +export OS_TYPE="Ubuntu" + +export HOST_BRIDGED_IF_NAME="eth1" +export DEFAULT_VIRTUAL_BOX_VM_PATH='/root/VirtualBox VMs' +export TRUNK_SHARED_FOLDER_NAME="shared_trunk" +########################################################### +THIS_SCRIPT_PATH=$(dirname $(readlink -f $0)) +source $THIS_SCRIPT_PATH/utils.bash +########################################################### + +# +# +-----------+----------------+------+---------------------------------------+ +# | COMPUTER 1| | eth1 | Physical | +# +-----------+ (nic1) +-+--+-+ Interface | +# | | | 'HOST_BRIDGED_IF_NAME' | +# | | | | +# | | | +-----------+ | +# | | | +------+ HSS | | +# | | +----------+ eth0 | (VM) | | +# | | +------+ | | +# | | | | | +# | | +-+------+--+ | +# | | |eth1 | | +# | | +--+---+ | +# | +------------------+ | | +# | | bridged network | host-only | +# | | | network | +# | | | 192.168.57/24 | +# | | | | +# | +--+---+ +--+-----+ | +# | |eth0 | |vboxnet1| | +# | +-+------+--+192.168.56.101 192.168.56.1+-+--------++ | +# | | eNB 0 +------+ +--------+ MME | | +# | | (VM) |eth1 +----------------+vboxnet0| S+P/GW | | +# | | +------+ host-only +--------+ | | +# | | | network | | | +# | | | 192.168.56/24 | | | +# | | LTE eNB 1 | | | | +# | | LTE UEs | | | | +# | +-----------+ +-----------+ | +# | | +# | | +# +---------------------------------------------------------------------------+ +# + + +check_install_vbox_software + +build_vbox_vm_enb() { + + if [ $OS_TYPE ]; then + echo_success "OS_TYPE: $OS_TYPE" + else + echo_fatal "OS_TYPE bash variable must be set to any of the following values (The type of OS you want to install on your VM): `VBoxManage list ostypes | grep ID | cut -d: -f2 | tr -d ' ' | sed -n -e 'H;${x;s/\n/,/g;s/^,//;p;}'`" + fi + + if [ $ENB_VM_NAME ]; then + echo_success "ENB_VM_NAME: $ENB_VM_NAME" + else + echo_fatal "ENB_VM_NAME bash variable must be set" + fi + + if [ $OS_INSTALL_IMAGE ]; then + if [[ ! -e "$OS_INSTALL_IMAGE" ]] ; then + echo_fatal "$OS_INSTALL_IMAGE: File not found" + else + echo_success "OS_INSTALL_IMAGE: $OS_INSTALL_IMAGE" + fi + else + echo_fatal "OS_INSTALL_IMAGE bash variable must be set to a valid ISO OS installation file" + fi + + bash_exec "VBoxManage unregistervm $ENB_VM_NAME --delete" + rm -Rf "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$ENB_VM_NAME" + + bash_exec "VBoxManage createvm --name $ENB_VM_NAME --register" + + UUID=`VBoxManage showvminfo $ENB_VM_NAME | grep Hardware\ UUID | cut -d: -f2 | tr -d ' '` + + echo ENB UUID=$UUID + + bash_exec "VBoxManage modifyvm $UUID --ostype $OS_TYPE --memory 512 --vram 12 --cpus 1 \ + --rtcuseutc on --cpuhotplug off --cpuexecutioncap 100 --pae on --hpet on \ + --hwvirtex on --nestedpaging on \ + --firmware bios --biosbootmenu messageandmenu --boot1 dvd --boot2 disk \ + --nic1 bridged --nic2 hostonly --nic3 hostonly --nic4 hostonly \ + --nictype1 82545EM --nictype2 82545EM --nictype3 82545EM --nictype4 82545EM \ + --cableconnected1 on --cableconnected2 on --cableconnected3 off --cableconnected4 off \ + --bridgeadapter1 $HOST_BRIDGED_IF_NAME \ + --hostonlyadapter2 vboxnet0 \ + --audio none \ + --usb off --usbehci off" + + +# BRIDGED_MAC_ADDRESS=`vboxmanage showvminfo $UUID | grep Bridged\ Interface | sed 's/^.*MAC:\ //' | cut --delimiter=',' -f 1` + + mkdir -p -m 777 "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$ENB_VM_NAME"/MKISO + rm -Rf "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$ENB_VM_NAME"/MKISO/* + + chmod -Rf 777 "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$ENB_VM_NAME"/MKISO +# mkisofs -max-iso9660-filenames -untranslated-filenames -no-iso-translate -o "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$ENB_VM_NAME"/cd_guest_setup.iso "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$ENB_VM_NAME"/MKISO/ + + VBoxManage createhd --filename "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$ENB_VM_NAME"/"$ENB_VM_NAME".vdi --size 16384 --format VDI + + VBoxManage storagectl $UUID --name "IDE Controller" --add ide --controller PIIX4 --hostiocache on --bootable on + VBoxManage storageattach $UUID --storagectl "IDE Controller" --type dvddrive --passthrough off --port 1 --device 0 --medium $OS_INSTALL_IMAGE + +# VBoxManage storageattach $UUID --storagectl "IDE Controller" --type dvddrive --passthrough off --port 1 --device 1 --medium "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$ENB_VM_NAME"/cd_guest_setup.iso + + VBoxManage storagectl $UUID --name "SATA Controller" --add sata --controller IntelAhci --sataportcount 4 --hostiocache off --bootable on + VBoxManage storageattach $UUID --storagectl "SATA Controller" --type hdd --port 0 --device 0 --medium "$DEFAULT_VIRTUAL_BOX_VM_PATH"/"$ENB_VM_NAME"/"$ENB_VM_NAME".vdi + + bash_exec "VBoxManage sharedfolder add $ENB_VM_NAME --name $TRUNK_SHARED_FOLDER_NAME --hostpath $OPENAIR_HOME" +} + +build_vbox_vm_hss() { + + + UUID=`VBoxManage clonevm --mode all --name $HSS_VM_NAME --register + + + +` + HSS_UUID=`VBoxManage showvminfo $HSS_VM_NAME | grep Hardware\ UUID | cut -d: -f2 | tr -d ' '` + echo HSS_UUID=$HSS_UUID + + bash_exec "VBoxManage modifyvm $HSS_UUID --ostype $OS_TYPE --memory 512 --vram 12 --cpus 1 \ + --rtcuseutc on --cpuhotplug off --cpuexecutioncap 100 --pae on --hpet on \ + --hwvirtex on --nestedpaging on \ + --firmware bios --biosbootmenu messageandmenu --boot1 disk \ + --nic1 bridged --nic2 hostonly --nic3 none --nic4 none \ + --nictype1 82545EM --nictype2 virtio --nictype3 82545EM --nictype4 82545EM \ + --cableconnected1 on --cableconnected2 on --cableconnected3 off --cableconnected4 off \ + --bridgeadapter1 $HOST_BRIDGED_IF_NAME \ + --hostonlyadapter2 vboxnet1 \ + --audio none \ + --usb off --usbehci off" +} + +build_vms() { + build_vbox_vm_enb + build_vbox_vm_hss +} + + +create_shared_folder_openair_trunk() { + VBoxManage sharedfolder add "$ENB_VM_NAME" --transient --name "$TRUNK_SHARED_FOLDER_NAME" --hostpath "$OPENAIR_HOME" + + #bash_exec "mount -t vboxsf $TRUNK_SHARED_FOLDER_NAME $OPENAIR_HOME" +} + +build_vbox_vm_enb +create_shared_folder_openair_trunk -- 2.26.2