From 49390b25ee97f150a465d4ad38c9d3b456ec9c50 Mon Sep 17 00:00:00 2001
From: Lionel Gauthier <lionel.gauthier@eurecom.fr>
Date: Mon, 10 Feb 2014 16:13:07 +0000
Subject: [PATCH] explicit vlan interface name (ethx.y) in config file

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5073 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 .../CONF/enb.sfr.yang.vlan.conf               |   4 +-
 .../CONF/epc.sfr.hades.vlan.conf              | 114 +++++++++++++++++
 .../GENERIC-LTE-EPC/start_lte-enb-vlan.bash   |   2 +-
 .../GENERIC-LTE-EPC/start_lte-epc-vlan.bash   |   2 +-
 targets/PROJECTS/GENERIC-LTE-EPC/utils.bash   | 115 ++++++++++++------
 5 files changed, 195 insertions(+), 42 deletions(-)
 create mode 100755 targets/PROJECTS/GENERIC-LTE-EPC/CONF/epc.sfr.hades.vlan.conf

diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.sfr.yang.vlan.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.sfr.yang.vlan.conf
index 0ddf7485e4..cabe635cb6 100755
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.sfr.yang.vlan.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.sfr.yang.vlan.conf
@@ -32,10 +32,10 @@ eNBs =
                           
     NETWORK_INTERFACES : 
     {
-        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth1";
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth1.1";
         ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.15.17/24";
 
-        ENB_INTERFACE_NAME_FOR_S1U               = "eth1";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth1.2";
         ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.16.17/24";
     };
   }
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/epc.sfr.hades.vlan.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/epc.sfr.hades.vlan.conf
new file mode 100755
index 0000000000..282ef61c4a
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/epc.sfr.hades.vlan.conf
@@ -0,0 +1,114 @@
+MME : 
+{
+
+    REALM                          = "eur";
+    # Define the limits of the system in terms of served eNB and served UE.
+    # When the limits will be reached, overload procedure will take place.
+    MAXENB                         = 10;
+    MAXUE                          = 100;
+    RELATIVE_CAPACITY              = 10;
+    # Display statistics about whole system (expressed in seconds)
+    MME_STATISTIC_TIMER            = 10;
+    EMERGENCY_ATTACH_SUPPORTED     = "no";
+    UNAUTHENTICATED_IMSI_SUPPORTED = "no";
+    
+    INTERTASK_INTERFACE :
+    {
+        # max queue size per task
+        ITTI_QUEUE_SIZE            = 2000000;
+    };
+
+    S6A :
+    {
+        S6A_CONF                   = "../objs/UTILS/CONF/s6a.conf";
+    };
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS = 32;
+        SCTP_OUTSTREAMS = 32;
+    };
+
+    # ------- S1AP definitions
+    S1AP : 
+    {
+        # outcome drop timer value (seconds)
+        S1AP_OUTCOME_TIMER = 10;
+    };
+
+    # ------- MME served GUMMEI
+    GUMMEI :
+    {
+        # MME code DEFAULT = 0
+        # size = 8 bits
+        # maximum of 256 values, comma separated
+        MME_CODE = [ 30 , 56 , 1 , 8 ];
+
+        # MME GROUP ID DEFAULT = 0
+        # size = 16 bits
+        # maximum of 65535 values, comma separated
+        MME_GID = [ 3 , 4 , 5 , 30 , 8 , 9 , 50021 ];
+
+        # TA (mcc.mnc:tracking area code) DEFAULT = 208.34:0
+        # max values = 999.999:65535
+        # maximum of 32 values, comma separated
+        PLMN = ( 
+             {MCC=208 ; MNC=10;  TAC = 1; },
+             {MCC=209 ; MNC=130; TAC = 4; },
+             {MCC=208 ; MNC=35;  TAC = 8; }
+        );
+    };
+    
+    NETWORK_INTERFACES : 
+    {
+        MME_INTERFACE_NAME_FOR_S1_MME         = "eth1.1";
+        MME_IPV4_ADDRESS_FOR_S1_MME           = "192.168.15.145/24";
+
+        MME_INTERFACE_NAME_FOR_S11_MME        = "none";
+        MME_IPV4_ADDRESS_FOR_S11_MME          = "192.168.33.117/24";
+    };
+};
+
+S-GW : 
+{
+    NETWORK_INTERFACES : 
+    {
+        SGW_INTERFACE_NAME_FOR_S11              = "none";
+        SGW_IPV4_ADDRESS_FOR_S11                = "192.168.33.17/24";
+
+        SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP    = "eth1.2";
+        SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP      = "192.168.16.145/24";
+
+        SGW_INTERFACE_NAME_FOR_S5_S8_UP         = "none";
+        SGW_IPV4_ADDRESS_FOR_S5_S8_UP           = "192.168.5.2/24";
+    };
+};
+
+P-GW = 
+{
+    NETWORK_INTERFACES : 
+    {
+        PGW_INTERFACE_NAME_FOR_S5_S8          = "none";
+        PGW_IPV4_ADDRESS_FOR_S5_S8            = "192.168.5.1/24";
+
+        PGW_INTERFACE_NAME_FOR_SGI            = "eth4";
+        PGW_IPV4_ADDR_FOR_SGI                 = "192.168.14.145/24";
+    };
+    
+    IP_ADDRESS_POOL :
+    {
+        IPV4_LIST = (
+                      "192.168.87.32",
+                      "192.168.88.0<--->192.168.88.255",
+                      "192.168.90.0<--->192.168.90.255"
+                    );
+        IPV6_LIST = (
+                      "2014:01:26::32",
+                      "2014:02:26::0/120"
+                    );
+    };
+};
+
+
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/start_lte-enb-vlan.bash b/targets/PROJECTS/GENERIC-LTE-EPC/start_lte-enb-vlan.bash
index ec3c1f61dc..5c8d66516f 100755
--- a/targets/PROJECTS/GENERIC-LTE-EPC/start_lte-enb-vlan.bash
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/start_lte-enb-vlan.bash
@@ -160,7 +160,7 @@ fi
 ip rule add fwmark 5 table lte
 ip route add default dev $LTEIF table lte
 
-ITTI_LOG_FILE=/tmp/itti_enb.$HOSTNAME.log
+ITTI_LOG_FILE=./itti_enb.$HOSTNAME.log
 rotate_log_file $ITTI_LOG_FILE
 
 
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/start_lte-epc-vlan.bash b/targets/PROJECTS/GENERIC-LTE-EPC/start_lte-epc-vlan.bash
index 2eccc8d998..5676888cf7 100755
--- a/targets/PROJECTS/GENERIC-LTE-EPC/start_lte-epc-vlan.bash
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/start_lte-epc-vlan.bash
@@ -183,7 +183,7 @@ build_mme_spgw_vlan_network
 
 cd $OPENAIRCN_DIR/$OBJ_DIR
 
-ITTI_LOG_FILE=/tmp/itti_mme.log
+ITTI_LOG_FILE=./itti_mme.log
 rotate_log_file $ITTI_LOG_FILE
 
 gdb --args $OPENAIRCN_DIR/$OBJ_DIR/OAI_EPC/oai_epc -K $ITTI_LOG_FILE -c $CONFIG_FILE
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash b/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash
index 30875010ac..1510605b7c 100755
--- a/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/utils.bash
@@ -336,6 +336,10 @@ is_openvswitch_interface() {
        else
            if [ "a${1:0:4}" == "awifi" ]; then
                return 0;
+           else
+               if [ "a${1:0:4}" == "anone" ]; then
+                   return 0;
+               fi
            fi
        fi
    fi
@@ -363,6 +367,32 @@ is_real_interface() {
    return 0
 }
 
+is_vlan_interface() {
+   if [ "a$1" == "a" ]; then
+       return 0
+   fi
+   if [[ $1 == *.* ]]
+   then
+       interface_name=`echo $1 | cut -f1 -d '.'`
+       vlan=`echo $1 | 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
+               return 1;
+           else 
+               if [ "a${interface_name:0:4}" == "awlan" ]; then
+                   return 1;
+               else
+                   if [ "a${interface_name:0:4}" == "awifi" ]; then
+                       return 1;
+                   fi
+               fi
+           fi
+       fi
+   fi
+   return 0
+}
+
 
 delete_openvswitch_interface() {
   is_openvswitch_interface $1 
@@ -381,47 +411,51 @@ create_openvswitch_interface() {
 
 build_enb_vlan_network() {
     # create vlan interface
-    is_real_interface $ENB_INTERFACE_NAME_FOR_S1_MME
+    is_vlan_interface $ENB_INTERFACE_NAME_FOR_S1_MME
     if [ $? -eq 1 ]; then
-        ifconfig    $ENB_INTERFACE_NAME_FOR_S1_MME.1 down > /dev/null 2>&1
-        vconfig rem $ENB_INTERFACE_NAME_FOR_S1_MME.1      > /dev/null 2>&1
+        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 $ENB_INTERFACE_NAME_FOR_S1_MME 1"
+        bash_exec "vconfig add $interface_name $vlan"
         sync
-        bash_exec "ifconfig  $ENB_INTERFACE_NAME_FOR_S1_MME.1 up"
+        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.1"
+        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"
     else
-        echo_fatal "BAD INTERFACE NAME FOR ENB S1-MME $ENB_INTERFACE_NAME_FOR_S1_MME"' (waiting for ethx)'
+        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_real_interface $ENB_INTERFACE_NAME_FOR_S1U
+    is_vlan_interface $ENB_INTERFACE_NAME_FOR_S1U
     if [ $? -eq 1 ]; then
-        ifconfig    $ENB_INTERFACE_NAME_FOR_S1U.2 down > /dev/null 2>&1
-        vconfig rem $ENB_INTERFACE_NAME_FOR_S1U.2      > /dev/null 2>&1
+        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 $ENB_INTERFACE_NAME_FOR_S1U 2"
+        bash_exec "vconfig add $interface_name $vlan"
         sync
-        bash_exec "ifconfig  $ENB_INTERFACE_NAME_FOR_S1U.2 up"
+        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".2
+        bash_exec "ip -4 addr add  $ENB_IPV4_ADDRESS_FOR_S1U/$ENB_IPV4_NETMASK_FOR_S1U dev $ENB_INTERFACE_NAME_FOR_S1U"
         sync
     else
-        echo_fatal "BAD INTERFACE NAME FOR ENB S1U $ENB_INTERFACE_NAME_FOR_S1U"' (waiting for ethx)'
+        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_real_interface $ENB_INTERFACE_NAME_FOR_S1_MME
+    is_vlan_interface $ENB_INTERFACE_NAME_FOR_S1_MME
     if [ $? -eq 1 ]; then
-        ifconfig    $ENB_INTERFACE_NAME_FOR_S1_MME.1 down > /dev/null 2>&1
-        vconfig rem $ENB_INTERFACE_NAME_FOR_S1_MME.1      > /dev/null 2>&1
+        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_real_interface $ENB_INTERFACE_NAME_FOR_S1U
+    is_vlan_interface $ENB_INTERFACE_NAME_FOR_S1U
     if [ $? -eq 1 ]; then
-        ifconfig    $ENB_INTERFACE_NAME_FOR_S1U.2 down > /dev/null 2>&1
-        vconfig rem $ENB_INTERFACE_NAME_FOR_S1U.2 > /dev/null 2>&1
+        ifconfig    $ENB_INTERFACE_NAME_FOR_S1U down > /dev/null 2>&1
+        vconfig rem $ENB_INTERFACE_NAME_FOR_S1U > /dev/null 2>&1
     fi;
     sync;
 }
@@ -476,33 +510,37 @@ build_mme_spgw_vlan_network() {
     bash_exec "modprobe 8021q"
     
     # create vlan interface
-    is_real_interface $MME_INTERFACE_NAME_FOR_S1_MME
+    is_vlan_interface $MME_INTERFACE_NAME_FOR_S1_MME
     if [ $? -eq 1 ]; then
-        ifconfig    $MME_INTERFACE_NAME_FOR_S1_MME.1 down > /dev/null 2>&1
-        vconfig rem $MME_INTERFACE_NAME_FOR_S1_MME.1      > /dev/null 2>&1
+        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 $MME_INTERFACE_NAME_FOR_S1_MME 1"
+        bash_exec "vconfig add $interface_name $vlan"
         sync
-        bash_exec "ifconfig  $MME_INTERFACE_NAME_FOR_S1_MME.1 up"
+        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.1"
+        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"
     else
-        echo_fatal "BAD INTERFACE NAME FOR SGW S1-MME $MME_INTERFACE_NAME_FOR_S1_MME"' (waiting for ethx)'
+        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_real_interface $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP
+    is_vlan_interface $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP
     if [ $? -eq 1 ]; then
-        ifconfig    $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP.2 down > /dev/null 2>&1
-        vconfig rem $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP.2      > /dev/null 2>&1
+        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 $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP 2"
+        bash_exec "vconfig add $interface_name $vlan"
         sync
-        bash_exec "ifconfig  $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP.2 up"
+        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.2"
+        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
     else
-        echo_fatal "BAD INTERFACE NAME FOR SGW S1U $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP"' (waiting for ethx)'
+        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;
     
     ping -c 1 router.eur > /dev/null || { echo_fatal "router.eur does not respond to ping" >&2 ; }
@@ -651,11 +689,11 @@ clean_epc_vlan_network() {
 
     bash_exec "modprobe 8021q"
 
-    ifconfig    $MME_INTERFACE_NAME_FOR_S1_MME.1 down > /dev/null 2>&1
-    vconfig rem $MME_INTERFACE_NAME_FOR_S1_MME.1      > /dev/null 2>&1
+    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.2 down > /dev/null 2>&1
-    vconfig rem $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP.2      > /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
@@ -995,6 +1033,7 @@ clean_epc_ovs_network() {
     clean_openvswitch_network
 }
 
+
 ###########################################################
 IPTABLES=/sbin/iptables
 THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
-- 
2.26.2