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