From 0547353c21dc54d6c226baf45c459a23714f158d Mon Sep 17 00:00:00 2001
From: Lionel Gauthier <lionel.gauthier@eurecom.fr>
Date: Thu, 5 Jun 2014 14:04:06 +0000
Subject: [PATCH] git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5367
 818b1a75-f10b-46b9-bf7c-635c3b92a50f

---
 .../start_mme_and_enb_and_ue_virt.bash        | 312 ++++++++++
 targets/PROJECTS/GENERIC-LTE-EPC/utils.bash   | 552 ++++++------------
 2 files changed, 500 insertions(+), 364 deletions(-)
 create mode 100755 targets/PROJECTS/GENERIC-LTE-EPC/start_mme_and_enb_and_ue_virt.bash

diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/start_mme_and_enb_and_ue_virt.bash b/targets/PROJECTS/GENERIC-LTE-EPC/start_mme_and_enb_and_ue_virt.bash
new file mode 100755
index 0000000000..049db4f40f
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/start_mme_and_enb_and_ue_virt.bash
@@ -0,0 +1,312 @@
+#!/bin/bash
+################################################################################
+# 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 start_mme_and_enb_and_ue.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  MME+ENB+UE (ENB+UE in one executable, MME in one executable, all on one host)
+#
+###########################################################################################################################
+#                                    TUN SETTING
+###########################################################################################################################
+#                                                                           hss.eur
+#                                                                             |
+#        +-----------+                                +-----------+           v     +----------+
+#        |    UE     +------+                  +------+    MME    +-----+     +-----+   HSS    |
+#        |    +      | tun10+------------------+tun11 |           |tun61+-----+tun60|          |
+#        |   eNB     +------+                  +------+           +-----+     +-----+          |
+#        |           | tun20+-------+                 |           |                 +----------+
+#        |           +------+       |                 +-+-------+-+
+#        |           |              |                 | | tun111| |
+#        |           |              |                 | +---+---+ |
+#        |           |              |             (optional)|     |
+#        +-----------+              |                 | +---+---+ |
+#                                   |                 | | tun110| |          router.eur
+#                                   |                 +-+-------+-+              |   +--------------+
+#                                   |                 |  S+P-GW   |              v   |   ROUTER     |
+#                                   |          +------+           +-------+     +----+              +----+
+#                                   +----------+tun21 |           |sgi    +-...-+    |              |    +---...Internet
+#                                              +------+           +-------+     +----+              +----+
+#                                                     |           |      11 VLANS    |              |
+#                                                     +-----------+   ids=[5..15]    +--------------+
+
+###########################################################
+# Parameters
+###########################################################
+declare MAKE_LTE_ACCESS_STRATUM_TARGET="oaisim DEBUG=1 ENABLE_ITTI=1 USE_MME=R10 LINK_PDCP_TO_GTPV1U=1 NAS=1 SECU=1 Rel10=1"
+declare MAKE_IP_DRIVER_TARGET="ue_ip.ko"
+declare IP_DRIVER_NAME="ue_ip"
+declare LTEIF="oip1"
+declare UE_IPv4="10.0.0.8"
+declare UE_IPv6="2001:1::8"
+declare UE_IPv6_CIDR=$UE_IPv6"/64"
+declare UE_IPv4_CIDR=$UE_IPv4"/24"
+declare MME_ITTI_LOG_FILE=./itti_mme.$HOSTNAME.log
+declare MME_STDOUT_LOG_FILE=./stdout_mme.$HOSTNAME.log
+declare MME_PCAP_LOG_FILE=./tshark_s1_mme.$HOSTNAME.pcap
+declare ITTI_LOG_FILE=./OUTPUT/itti_enb_ue.$HOSTNAME.log
+declare STDOUT_LOG_FILE=./OUTPUT/stdout_enb_ue.$HOSTNAME.log
+declare PCAP_LOG_FILE=./tshark_enb.$HOSTNAME.pcap
+###########################################################
+THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
+source $THIS_SCRIPT_PATH/utils.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 MISC SOFTWARES AND LIBS
+#######################################################
+check_install_epc_software
+
+######################################
+# compile EPC #
+######################################
+compile_epc
+
+######################################
+# compile UE + eNB #
+######################################
+#------------------------------------
+# USIM, NVRAM files
+#------------------------------------
+export NVRAM_DIR=$THIS_SCRIPT_PATH
+
+if [ ! -f $OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/ue_data ]; then
+    make --directory=$OPENAIRCN_DIR/NAS/EURECOM-NAS veryveryclean
+    make --directory=$OPENAIRCN_DIR/NAS/EURECOM-NAS PROCESS=UE
+    rm .ue.nvram
+fi
+if [ ! -f $OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/usim_data ]; then
+    make --directory=$OPENAIRCN_DIR/NAS/EURECOM-NAS veryveryclean
+    make --directory=$OPENAIRCN_DIR/NAS/EURECOM-NAS PROCESS=UE
+    rm .usim.nvram
+fi
+if [ ! -f .ue.nvram ]; then
+    # generate .ue_emm.nvram .ue.nvram
+    $OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/ue_data --gen
+fi
+
+if [ ! -f .usim.nvram ]; then
+    # generate .usim.nvram
+    $OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/usim_data --gen
+fi
+$OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/ue_data --print
+$OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/usim_data --print
+
+cecho "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET ....." $green
+make --directory=$OPENAIR2_DIR $MAKE_IP_DRIVER_TARGET || exit 1
+#make --directory=$OPENAIR_TARGETS/SIMU/USER $MAKE_LTE_ACCESS_STRATUM_TARGET -j`grep -c ^processor /proc/cpuinfo ` || exit 1
+make --debug=b --directory=$OPENAIR_TARGETS/SIMU/USER $MAKE_LTE_ACCESS_STRATUM_TARGET || exit 1
+
+cd $THIS_SCRIPT_PATH
+#######################################################
+# FIND CONFIG FILES
+#######################################################
+SEARCHED_CONFIG_FILE_ENB="enb*.conf"
+CONFIG_FILE_ENB=`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
+
+SEARCHED_CONFIG_FILE_EPC="epc*.conf"
+CONFIG_FILE_EPC=`find $CONFIG_FILE_DIR -iname $SEARCHED_CONFIG_FILE_EPC`
+if [ -f $CONFIG_FILE_EPC ]; then
+    echo_warning "EPC config file found is now $CONFIG_FILE_EPC"
+else
+    echo_error "EPC config file not found, exiting (searched for $SEARCHED_CONFIG_FILE_EPC)"
+    exit 1
+fi
+#######################################################
+# SOURCE CONFIG FILES for MME AND eNB
+#######################################################
+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\|\
+           MME_INTERFACE_NAME_FOR_S1_MME\|\
+           MME_IPV4_ADDRESS_FOR_S1_MME\|\
+           MME_INTERFACE_NAME_FOR_S11_MME\|\
+           MME_IPV4_ADDRESS_FOR_S11_MME\|\
+           MME_INTERFACE_NAME_FOR_S6A\|\
+           MME_IPV4_ADDRESS_FOR_S6A\|\
+           SGW_INTERFACE_NAME_FOR_S11\|\
+           SGW_IPV4_ADDRESS_FOR_S11\|\
+           SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP\|\
+           SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP\|\
+           SGW_INTERFACE_NAME_FOR_S5_S8_UP\|\
+           SGW_IPV4_ADDRESS_FOR_S5_S8_UP\|\
+           PGW_INTERFACE_NAME_FOR_S5_S8\|\
+           PGW_IPV4_ADDRESS_FOR_S5_S8\|\
+           PGW_INTERFACE_NAME_FOR_SGI\|\
+           PGW_IPV4_ADDR_FOR_SGI\|\
+           HSS_INTERFACE_NAME_FOR_S6A\|\
+           HSS_IPV4_ADDR_FOR_S6A"
+
+VARIABLES=$(echo $VARIABLES | sed -e 's/\\r//g')
+VARIABLES=$(echo $VARIABLES | tr -d ' ')
+cat $CONFIG_FILE_EPC | grep -w "$VARIABLES"| tr -d " " | tr -d ";" > /tmp/source.txt
+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 '/')
+declare MME_IPV4_NETMASK_FOR_S1_MME=$(       echo $MME_IPV4_ADDRESS_FOR_S1_MME        | cut -f2 -d '/')
+declare MME_IPV4_NETMASK_FOR_S11_MME=$(      echo $MME_IPV4_ADDRESS_FOR_S11_MME       | cut -f2 -d '/')
+declare MME_IPV4_NETMASK_FOR_S6A=$(          echo $MME_IPV4_ADDRESS_FOR_S6A           | cut -f2 -d '/')
+declare SGW_IPV4_NETMASK_FOR_S11=$(          echo $SGW_IPV4_ADDRESS_FOR_S11           | cut -f2 -d '/')
+declare SGW_IPV4_NETMASK_FOR_S1U_S12_S4_UP=$(echo $SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP | cut -f2 -d '/')
+declare SGW_IPV4_NETMASK_FOR_S5_S8_UP=$(     echo $SGW_IPV4_ADDRESS_FOR_S5_S8_UP      | cut -f2 -d '/')
+declare PGW_IPV4_NETMASK_FOR_S5_S8=$(        echo $PGW_IPV4_ADDRESS_FOR_S5_S8         | cut -f2 -d '/')
+declare PGW_IPV4_NETMASK_FOR_SGI=$(          echo $PGW_IPV4_ADDR_FOR_SGI              | cut -f2 -d '/')
+declare HSS_IPV4_NETMASK_FOR_S6A=$(          echo $HSS_IPV4_ADDR_FOR_S6A              | 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 '/')
+MME_IPV4_ADDRESS_FOR_S1_MME=$(               echo $MME_IPV4_ADDRESS_FOR_S1_MME        | cut -f1 -d '/')
+MME_IPV4_ADDRESS_FOR_S11_MME=$(              echo $MME_IPV4_ADDRESS_FOR_S11_MME       | cut -f1 -d '/')
+MME_IPV4_ADDRESS_FOR_S6A=$(                  echo $MME_IPV4_ADDRESS_FOR_S6A           | cut -f1 -d '/')
+SGW_IPV4_ADDRESS_FOR_S11=$(                  echo $SGW_IPV4_ADDRESS_FOR_S11           | cut -f1 -d '/')
+SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP=$(        echo $SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP | cut -f1 -d '/')
+SGW_IPV4_ADDRESS_FOR_S5_S8_UP=$(             echo $SGW_IPV4_ADDRESS_FOR_S5_S8_UP      | cut -f1 -d '/')
+PGW_IPV4_ADDRESS_FOR_S5_S8=$(                echo $PGW_IPV4_ADDRESS_FOR_S5_S8         | cut -f1 -d '/')
+PGW_IPV4_ADDR_FOR_SGI=$(                     echo $PGW_IPV4_ADDR_FOR_SGI              | cut -f1 -d '/')
+HSS_IPV4_ADDR_FOR_S6A=$(                     echo $HSS_IPV4_ADDR_FOR_S6A              | cut -f1 -d '/')
+
+
+#######################################################
+# BUILD NETWORK
+#######################################################
+clean_tun_network
+build_tun_network
+test_tun_network
+
+##################################################
+# LAUNCH HSS
+##################################################
+# TO DO
+
+##################################################
+# LAUNCH MME executable
+##################################################
+cd $THIS_SCRIPT_PATH
+if [ ! -d "OUTPUT/"$HOSTNAME ]
+then
+    bash_exec "mkdir -m 777 ./OUTPUT/$HOSTNAME"
+    echo_success "Created OUTPUT/$HOSTNAME directory"
+fi
+
+rotate_log_file $MME_ITTI_LOG_FILE
+rotate_log_file $MME_STDOUT_LOG_FILE
+rotate_log_file $MME_PCAP_LOG_FILE
+
+cd $OPENAIRCN_DIR/$OBJ_DIR
+
+nohup tshark -i MME_INTERFACE_NAME_FOR_S1_MME -w $THIS_SCRIPT_PATH/OUTPUT/$HOSTNAME/$MME_PCAP_LOG_FILE &
+
+nohup xterm -e $OPENAIRCN_DIR/$OBJ_DIR/OAI_EPC/oai_epc -K $THIS_SCRIPT_PATH/OUTPUT/$HOSTNAME/$MME_ITTI_LOG_FILE -c $THIS_SCRIPT_PATH/$CONFIG_FILE_EPC  2>&1 | tee $THIS_SCRIPT_PATH/OUTPUT/$HOSTNAME/$MME_STDOUT_LOG_FILE & 
+
+
+##################################################
+# LAUNCH eNB + UE executable
+##################################################
+echo "Bringup UE interface"
+pkill oaisim
+bash_exec "rmmod $IP_DRIVER_NAME" > /dev/null 2>&1
+
+bash_exec "insmod  $OPENAIR2_DIR/NETWORK_DRIVER/UE_IP/$IP_DRIVER_NAME.ko"
+
+bash_exec "ip route flush cache"
+#bash_exec "ip link set $LTEIF up"
+sleep 1
+#bash_exec "ip addr add dev $LTEIF $UE_IPv4_CIDR"
+#bash_exec "ip addr add dev $LTEIF $UE_IPv6_CIDR"
+
+sleep 1
+
+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 "ip route flush cache"
+
+# Check table 200 lte in /etc/iproute2/rt_tables
+fgrep lte /etc/iproute2/rt_tables  > /dev/null 
+if [ $? -ne 0 ]; then
+    echo "200 lte " >> /etc/iproute2/rt_tables
+fi
+ip rule add fwmark 5 table lte
+ip route add default dev $LTEIF table lte
+
+rotate_log_file $ITTI_LOG_FILE
+rotate_log_file $STDOUT_LOG_FILE
+rotate_log_file $STDOUT_LOG_FILE.filtered
+rotate_log_file $PCAP_LOG_FILE
+
+cd $THIS_SCRIPT_PATH
+
+nohup tshark -i $ENB_INTERFACE_NAME_FOR_S1_MME -i $ENB_INTERFACE_NAME_FOR_S1U -w $PCAP_LOG_FILE &
+
+nohup xterm -e $OPENAIRCN_DIR/NAS/EURECOM-NAS/bin/UserProcess &
+
+gdb --args $OPENAIR_TARGETS/SIMU/USER/oaisim -a -u1 -l9 -K $ITTI_LOG_FILE --enb-conf $CONFIG_FILE_ENB 2>&1 | tee $STDOUT_LOG_FILE 
+
+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/GENERIC-LTE-EPC/utils.bash b/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash
index bb8aec6df5..b4fe778206 100755
--- a/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash
@@ -321,41 +321,8 @@ test_command_install_script() {
   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 ]
@@ -387,30 +354,6 @@ check_for_root_rights() {
     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;
-                    fi
-                fi
-            fi
-        fi
-    done
-    return 1;
-}
 
 is_real_interface() {
     my_bool=1
@@ -464,22 +407,37 @@ is_vlan_interface() {
     return $my_bool
 }
 
+is_tun_interface() {
+    my_bool=1
+    for var in "$@"
+    do
+        if [ "a$var" == "a" ]; then
+            return 0
+        fi
+        bus_info=`ethtool -i $var`
+        if [[ "$IF" != *tun* ]]; then
+            return 0;
+        fi
+    done
+    return $my_bool
+}
+
 
-delete_openvswitch_interface() {
-  is_openvswitch_interface $1 
+delete_tun_interface() {
+  is_tun_interface $1 
   if [ $? -eq 1 ]; then
-      ifconfig $1 down  > /dev/null 2>&1
-      tunctl -d $1      > /dev/null 2>&1
+      ip link set $1 down  > /dev/null 2>&1
+      openvpn --mktun --dev $1  > /dev/null 2>&1
   fi
 }
 
-create_openvswitch_interface() {
-  is_openvswitch_interface $1
-  if [ $? -eq 1 ]; then
-      bash_exec "tunctl -t $1"
-  fi
+
+create_tun_interface() {
+  openvpn --mktun --dev $1
+  #ip link set $1 up
 }
 
+
 # arg1 = interface name
 # arg2 = ipv4 addr cidr
 # arg3 = netmask cidr
@@ -645,106 +603,31 @@ build_mme_spgw_vlan_network() {
         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鈥檝e 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 (鈥搑estore-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鈥檝e 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 (鈥搑estore-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
+
+        # # 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
@@ -806,65 +689,59 @@ clean_epc_vlan_network() {
     clean_network
 }
 
-build_openvswitch_network() {
-    start_openswitch_daemon
+build_tun_network() {
     # REMINDER:
     #                                                                           hss.eur
     #                                                                             |
-    #        +-----------+          +------+              +-----------+           v   +----------+
-    #        |  eNB      +------+   |  ovs | VLAN 1+------+    MME    +----+      +---+   HSS    |
-    #        |           |cpenb0+------------------+cpmme0|           |    +------+   |          |
-    #        |           +------+   |bridge|       +------+           +----+      +---+          |
-    #        |           |upenb0+-------+  |              |           |               +----------+
-    #        |           +------+   |   |  |              +-+-------+-+
-    #        |           |          |   |  +----------------| s11mme|---+
-    #        |           |          |   |                   +---+---+   |
-    #        |           |          |   |             (optional)|       |ovs bridge is optional
-    #        +-----------+          |   |                   +---+---+   |
-    #                               +---|------------------ | s11sgw|---+        router.eur
+    #        +-----------+                                +-----------+           v   +----------+
+    #        |  eNB      +------+                  +------+    MME    +----+      +---+   HSS    |
+    #        |           |cpenb0+------------------+cpmme0|           |s6am+------+s6a|          |
+    #        |           +------+                  +------+           +----+      +---+          |
+    #        |           |upenb0+-------+                 |           |               +----------+
+    #        |           +------+       |                 +-+-------+-+
+    #        |           |              |                   | s11mme| 
+    #        |           |              |                   +---+---+ 
+    #        |           |              |             (optional)| 
+    #        +-----------+              |                   +---+---+ 
+    #                                   |                   | s11sgw|             router.eur
     #                                   |                 +-+-------+-+              |   +--------------+
     #                                   |                 |  S+P-GW   |              v   |   ROUTER     |
-    #                                   |  VLAN2   +------+           +-------+     +----+              +----+
+    #                                   |          +------+           +-------+     +----+              +----+
     #                                   +----------+upsgw0|           |sgi    +-...-+    |              |    +---...Internet
     #                                              +------+           +-------+     +----+              +----+
     #                                                     |           |      11 VLANS    |              |
     #                                                     +-----------+   ids=[5..15]    +--------------+
     #
+    bash_exec "modprobe tun"
     ##################################################
-    # build bridge between eNB and MME/SPGW
+    # build network between eNB and MME/SPGW and HSS
     ##################################################
-    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
+    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
     
-    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"
+    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 $MME_INTERFACE_NAME_FOR_S1_MME        $MME_IPV4_ADDRESS_FOR_S1_MME        $MME_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_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
 }
 
-test_openvswitch_network() {
+test_tun_network() {
 
     # TEST INTERFACES
     ping -q -c 1 $MME_IPV4_ADDRESS_FOR_S1_MME > /dev/null 2>&1
@@ -879,6 +756,10 @@ test_openvswitch_network() {
     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;
+    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"; fi;
+    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"; fi;
     
     
     ## TEST NETWORK BETWEEN ENB-MME-SP-GW
@@ -886,9 +767,9 @@ test_openvswitch_network() {
     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'
+        echo_fatal 'NETWORK ERROR CONFIGURATION (tun) between ENB and MME S1'
     else
-        echo_success 'NETWORK TEST SUCCESS (openvswitch) between ENB and MME S1'
+        echo_success 'NETWORK TEST SUCCESS (tun) between ENB and MME S1'
 
     fi
     pkill iperf 2>&1 > /dev/null
@@ -897,9 +778,9 @@ test_openvswitch_network() {
     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'
+        echo_fatal 'NETWORK ERROR CONFIGURATION (tun) between ENB and S-GW S1-U'
     else
-        echo_success 'NETWORK TEST SUCCESS (openvswitch) between ENB and S-GW S1-U'
+        echo_success 'NETWORK TEST SUCCESS (tun) between ENB and S-GW S1-U'
     fi
     pkill iperf 2>&1 > /dev/null
 
@@ -907,31 +788,44 @@ test_openvswitch_network() {
     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'
+        echo_fatal 'NETWORK ERROR CONFIGURATION (tun) between MME and S-GW S11'
+    else
+        echo_success 'NETWORK TEST SUCCESS (tun) between MME and S-GW S11'
+    fi
+    pkill iperf 2>&1 > /dev/null
+    
+    iperf  --bind $HSS_IPV4_ADDRESS_FOR_S6A -u -s 2>&1  > /dev/null &
+    iperf  --bind $MME_IPV4_ADDRESS_FOR_S6A -u --num 1K -c $HSS_IPV4_ADDRESS_FOR_S6A 2>&1 | grep -i WARNING > /dev/null
+    if [ $? -eq 0 ]; then
+        pkill iperf 2>&1 > /dev/null
+        echo_fatal 'NETWORK ERROR CONFIGURATION (tun) between MME and HSS S6A'
     else
         echo_success 'NETWORK TEST SUCCESS (openvswitch) between MME and S-GW S11'
     fi
     pkill iperf 2>&1 > /dev/null
+
+
+    # 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_openvswitch_network() {
+clean_tun_network() {
     ##################################################
-    # del bridge between eNB and MME/SPGW
+    # del interfaces eNB and MME/SPGW and HSS
     ##################################################
-    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
+    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_ovs_network() {
+build_epc_tun_network() {
 
     cat $OPENAIRCN_DIR/$OBJ_DIR/Makefile | grep CFLAGS\ \=\  | grep DENABLE_USE_NETFILTER_FOR_SGI
     if [ $? -ne 0 ]
@@ -949,147 +843,38 @@ build_epc_ovs_network() {
         export ENABLE_USE_RAW_FOR_SGI=1
     fi
 
-    build_openvswitch_network
+    build_tun_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鈥檝e 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 (鈥搑estore-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鈥檝e 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 (鈥搑estore-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"
+    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
+    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"
 
-    ##################################################
-    # 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"
@@ -1134,19 +919,13 @@ clean_epc_ovs_network() {
     done
     
     clean_network
-    clean_openvswitch_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"
@@ -1184,6 +963,7 @@ check_install_epc_software() {
     test_install_package build-essential
     test_install_package cmake
     test_install_package cmake-curses-gui
+    test_install_package ethtool
     test_install_package flex
     test_install_package g++
     test_install_package gawk
@@ -1220,6 +1000,7 @@ check_install_epc_software() {
     test_install_package linux-headers-`uname -r`
     test_install_package make
     test_install_package openssl
+    test_install_package openvpn
     test_install_package python-dev
     test_install_package subversion
     test_install_package swig
@@ -1259,6 +1040,49 @@ check_install_epc_software() {
     fi
 }
 
+compile_epc() {
+    cd $OPENAIRCN_DIR
+    OBJ_DIR=`find . -maxdepth 1 -type d -iname obj*`
+    if [ ! -n "$OBJ_DIR" ]
+    then
+        OBJ_DIR="objs"
+        bash_exec "mkdir -m 777 ./$OBJ_DIR"
+        echo_success "Created $OBJ_DIR directory"
+    else
+        OBJ_DIR=`basename $OBJ_DIR`
+    fi
+    if [ ! -f $OBJ_DIR/Makefile ]
+    then
+        if [ ! -n "m4" ]
+        then
+            mkdir -m 777 m4
+        fi
+        echo_success "Invoking autogen"
+        bash_exec "./autogen.sh"
+        cd ./$OBJ_DIR
+        echo_success "Invoking configure"
+        ../configure --enable-standalone-epc --enable-raw-socket-for-sgi  LDFLAGS=-L/usr/local/lib
+    else
+        cd ./$OBJ_DIR
+    fi
+
+    pkill oai_epc
+    pkill tshark
+
+    if [ -f Makefile ]
+    then
+        echo_success "Compiling..."
+        make -j `cat /proc/cpuinfo | grep processor | wc -l`
+        if [ $? -ne 0 ]; then
+            echo_error "Build failed, exiting"
+            exit 1
+        fi
+    else
+        echo_error "Configure failed, exiting"
+        exit 1
+    fi
+}
+
 ###########################################################
 IPTABLES=/sbin/iptables
 THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
-- 
2.26.2