From afa64a0d901645b230f847904d31d3294bf913e2 Mon Sep 17 00:00:00 2001
From: Raphael Defosseux <raphael.defosseux@eurecom.fr>
Date: Mon, 3 Sep 2018 15:56:28 +0200
Subject: [PATCH] CI: adding TDD setup to main CI on develop   -- Configuration
 files for a Band-40 test setup   -- XML file test on band-40 for 5 and 10 MHz
 in DL only

Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
---
 ci-scripts/Jenkinsfile-gitlab                 | 146 ++++++++----
 ...d40.tm1.100PRB.FairScheduler.usrpb210.conf | 220 ++++++++++++++++++
 ...nd40.tm1.25PRB.FairScheduler.usrpb210.conf | 220 ++++++++++++++++++
 ...nd40.tm1.50PRB.FairScheduler.usrpb210.conf | 220 ++++++++++++++++++
 ci-scripts/createVM.sh                        |   2 +
 ci-scripts/main.py                            |   1 +
 ci-scripts/xml_files/enb_usrpb210_band40.xml  | 172 ++++++++++++++
 7 files changed, 937 insertions(+), 44 deletions(-)
 create mode 100644 ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf
 create mode 100644 ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf
 create mode 100644 ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf
 create mode 100644 ci-scripts/xml_files/enb_usrpb210_band40.xml

diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab
index e86e6fe51a..587309d95c 100644
--- a/ci-scripts/Jenkinsfile-gitlab
+++ b/ci-scripts/Jenkinsfile-gitlab
@@ -32,6 +32,7 @@ def sendSocialMediaMessage(pipeChannel, pipeColor, pipeMessage) {
 
 def doRedHatBuild = false
 def FDD_Band7_B210_Status
+def TDD_Band40_B210_Status
 
 pipeline {
     agent {
@@ -41,7 +42,7 @@ pipeline {
         disableConcurrentBuilds()
         timestamps()
         gitLabConnection('OAI GitLab')
-        gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim", "Test basic-sim", "Test-FDD-Band7"])
+        gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim", "Test basic-sim", "Test-FDD-Band7", "Test-TDD-Band40"])
         ansiColor('xterm')
     }
 
@@ -62,7 +63,7 @@ pipeline {
                         allParametersPresent = false
                     }
                     if (allParametersPresent) {
-			echo "Performing Red Hat Build"
+                        echo "Performing Red Hat Build"
                         doRedHatBuild = true
                     } else {
                         doRedHatBuild = false
@@ -262,53 +263,110 @@ pipeline {
                         }
                     }
                 }
-		stage ("Test FDD - Band 7 - B210") {
-                    steps {
-                        gitlabCommitStatus(name: "Test-FDD-Band7") {
-                            script {
-                                if ("MERGE".equals(env.gitlabActionType)) {
-                                    FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210',
-                                       parameters: [
-                                           string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
-                                           string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)),
-                                           string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
-                                           booleanParam(name: 'eNB_mergeRequest', value: true)
-                                       ]
-                                } else {
-                                    FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210',
-                                       parameters: [
-                                           string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
-                                           string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)),
-                                           string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)),
-                                           booleanParam(name: 'eNB_mergeRequest', value: false)
-                                       ]
+                stage ("Test on CI bench #1") {
+                    stages {
+                        stage ("Test FDD - Band 7 - B210") {
+                            steps {
+                                gitlabCommitStatus(name: "Test-FDD-Band7") {
+                                    script {
+                                        if ("MERGE".equals(env.gitlabActionType)) {
+                                            FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210',
+                                               parameters: [
+                                                   string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
+                                                   string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)),
+                                                   string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
+                                                   booleanParam(name: 'eNB_mergeRequest', value: true)
+                                               ]
+                                        } else {
+                                            FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210',
+                                               parameters: [
+                                                   string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
+                                                   string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)),
+                                                   string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)),
+                                                   booleanParam(name: 'eNB_mergeRequest', value: false)
+                                               ]
+                                        }
+                                    }
                                 }
                             }
-                        }
-                    }
-                    post {
-                        // In case of success we really pick the report from the exact slave build number
-                        success {
-                            script {
-                                copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210',
-                                              filter: 'test_results*.html',
-                                              selector: specific("${FDD_Band7_B210_Status.number}"))
-                                if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
-                                    archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html'
+                            post {
+                                // In case of success we really pick the report from the exact slave build number
+                                success {
+                                    script {
+                                        copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210',
+                                                      filter: 'test_results*.html',
+                                                      selector: specific("${FDD_Band7_B210_Status.number}"))
+                                        if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
+                                            archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html'
+                                        }
+                                    }
+                                }
+                                // In case of any non-success, we are retrieving the HTML report of the last completed
+                                // slave job. Note that we could use that syntax also in case of success.
+                                // The only drop-back is that we may retrieve the HTML report of a previous build
+                                cleanup {
+                                    script {
+                                        if (!fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
+                                            copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210',
+                                                          filter: 'test_results*.html',
+                                                          selector: lastCompleted())
+                                            if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
+                                                archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html'
+                                            }
+                                        }
+                                    }
                                 }
                             }
                         }
-                        // In case of any non-success, we are retrieving the HTML report of the last completed
-                        // slave job. Note that we could use that syntax also in case of success.
-                        // The only drop-back is that we may retrieve the HTML report of a previous build
-                        cleanup {
-                            script {
-                                if (!fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
-                                    copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210',
-                                                  filter: 'test_results*.html',
-                                                  selector: lastCompleted())
-                                    if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
-                                        archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html'
+                        stage ("Test TDD - Band 40 - B210") {
+                            steps {
+                                gitlabCommitStatus(name: "Test-TDD-Band40") {
+                                    script {
+                                        if ("MERGE".equals(env.gitlabActionType)) {
+                                            TDD_Band40_B210_Status = build job: 'eNB-CI-TDD-Band40-B210',
+                                               parameters: [
+                                                   string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
+                                                   string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)),
+                                                   string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
+                                                   booleanParam(name: 'eNB_mergeRequest', value: true)
+                                               ]
+                                        } else {
+                                            TDD_Band40_B210_Status = build job: 'eNB-CI-TDD-Band40-B210',
+                                               parameters: [
+                                                   string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
+                                                   string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)),
+                                                   string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)),
+                                                   booleanParam(name: 'eNB_mergeRequest', value: false)
+                                               ]
+                                        }
+                                    }
+                                }
+                            }
+                            post {
+                                // In case of success we really pick the report from the exact slave build number
+                                success {
+                                    script {
+                                        copyArtifacts(projectName: 'eNB-CI-TDD-Band40-B210',
+                                                      filter: 'test_results*.html',
+                                                      selector: specific("${TDD_Band40_B210_Status.number}"))
+                                        if (fileExists('test_results-eNB-CI-TDD-Band40-B210.html')) {
+                                            archiveArtifacts artifacts: 'test_results-eNB-CI-TDD-Band40-B210.html'
+                                        }
+                                    }
+                                }
+                                // In case of any non-success, we are retrieving the HTML report of the last completed
+                                // slave job. Note that we could use that syntax also in case of success.
+                                // The only drop-back is that we may retrieve the HTML report of a previous build
+                                cleanup {
+                                    script {
+                                        if (!fileExists('test_results-eNB-CI-TDD-Band40-B210.html')) {
+                                            copyArtifacts(projectName: 'eNB-CI-TDD-Band40-B210',
+                                                          filter: 'test_results*.html',
+                                                          selector: lastCompleted())
+                                            if (fileExists('test_results-eNB-CI-TDD-Band40-B210.html')) {
+                                                archiveArtifacts artifacts: 'test_results-eNB-CI-TDD-Band40-B210.html'
+                                            }
+                                        }
                                     }
                                 }
                             }
diff --git a/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf
new file mode 100644
index 0000000000..14230c125f
--- /dev/null
+++ b/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf
@@ -0,0 +1,220 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+        node_function                                         = "eNodeB_3GPP";
+        node_timing                                           = "synch_to_ext_device";
+        node_synch_ref                                        = 0;
+        frame_type					      = "TDD";
+        tdd_config 					      = 1;
+        tdd_config_s            			      = 0;
+        prefix_type             			      = "NORMAL";
+        eutra_band              			      = 40;
+        downlink_frequency      			      = 2350000000L;
+        uplink_frequency_offset 			      = 0;
+        Nid_cell					      = 0;
+        N_RB_DL                 			      = 100;
+        Nid_cell_mbsfn          			      = 0;
+        nb_antenna_ports          			      = 1;
+        nb_antennas_tx          			      = 1;
+        nb_antennas_rx          			      = 1;
+        tx_gain                                            = 90;
+        rx_gain                                            = 125;
+        prach_root              			      = 0;
+        prach_config_index      			      = 0;
+        prach_high_speed        			      = "DISABLE";
+        prach_zero_correlation  			      = 1;
+        prach_freq_offset       			      = 2;
+        pucch_delta_shift       			      = 1;
+        pucch_nRB_CQI           			      = 1;
+        pucch_nCS_AN            			      = 0;
+        pucch_n1_AN             			      = 0;
+        pdsch_referenceSignalPower 			      =-29;
+        pdsch_p_b                  			      = 0;
+        pusch_n_SB                 			      = 1;
+        pusch_enable64QAM          			      = "DISABLE";
+        pusch_hoppingMode                                  = "interSubFrame";
+        pusch_hoppingOffset                                = 0;
+        pusch_groupHoppingEnabled  			      = "ENABLE";
+        pusch_groupAssignment      			      = 0;
+        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+        pusch_nDMRS1                                       = 1;
+        phich_duration                                     = "NORMAL";
+        phich_resource                                     = "ONESIXTH";
+        srs_enable                                         = "DISABLE";
+      /*  srs_BandwidthConfig                                =;
+        srs_SubframeConfig                                 =;
+        srs_ackNackST                                      =;
+        srs_MaxUpPts                                       =;*/
+
+        pusch_p0_Nominal                                   = -96;
+        pusch_alpha                                        = "AL1";
+        pucch_p0_Nominal                                   = -106;
+        msg3_delta_Preamble                                = 6;
+        pucch_deltaF_Format1                               = "deltaF2";
+        pucch_deltaF_Format1b                              = "deltaF3";
+        pucch_deltaF_Format2                               = "deltaF0";
+        pucch_deltaF_Format2a                              = "deltaF0";
+        pucch_deltaF_Format2b		    	      = "deltaF0";
+
+        rach_numberOfRA_Preambles                          = 64;
+        rach_preamblesGroupAConfig                         = "DISABLE";
+      /*
+        rach_sizeOfRA_PreamblesGroupA                      = ;
+        rach_messageSizeGroupA                             = ;
+        rach_messagePowerOffsetGroupB                      = ;
+      */
+        rach_powerRampingStep                              = 4;
+        rach_preambleInitialReceivedTargetPower            = -108;
+        rach_preambleTransMax                              = 10;
+        rach_raResponseWindowSize                          = 10;
+        rach_macContentionResolutionTimer                  = 48;
+        rach_maxHARQ_Msg3Tx                                = 4;
+
+        pcch_default_PagingCycle                           = 128;
+        pcch_nB                                            = "oneT";
+        bcch_modificationPeriodCoeff			      = 2;
+        ue_TimersAndConstants_t300			      = 1000;
+        ue_TimersAndConstants_t301			      = 1000;
+        ue_TimersAndConstants_t310			      = 1000;
+        ue_TimersAndConstants_t311			      = 10000;
+        ue_TimersAndConstants_n310			      = 20;
+        ue_TimersAndConstants_n311			      = 1;
+
+	ue_TransmissionMode				      = 1;
+      }
+    );
+
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "10.0.0.2";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "10.0.0.1/24";
+
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "10.0.0.1/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+
+        ENB_IPV4_ADDRESS_FOR_X2C                 = "192.168.12.111/24";
+        ENB_PORT_FOR_X2C                         = 36422; # Spec 36422
+    };
+
+    log_config :
+    {
+      global_log_level                      ="debug";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+
+  }
+);
+MACRLCs = (
+	{
+        num_cc = 1;
+        tr_s_preference = "local_L1";
+        tr_n_preference = "local_RRC";
+        scheduler_mode = "fairRR";
+        puSch10xSnr     =  200;
+        puCch10xSnr     =  200;
+        }  
+);
+
+L1s = (
+    	{
+	num_cc = 1;
+	tr_n_preference = "local_mac";
+        }  
+);
+
+RUs = (
+    {		  
+       local_rf       = "yes"
+         nb_tx          = 1
+         nb_rx          = 1
+         att_tx         = 0
+         att_rx         = 0;
+         bands          = [38];
+         max_pdschReferenceSignalPower = -27;
+         max_rxgain                    = 115;
+         eNB_instances  = [0];
+
+    }
+);  
+
+NETWORK_CONTROLLER :
+{
+    FLEXRAN_ENABLED        = "no";
+    FLEXRAN_INTERFACE_NAME = "lo";
+    FLEXRAN_IPV4_ADDRESS   = "127.0.0.1";
+    FLEXRAN_PORT           = 2210;
+    FLEXRAN_CACHE          = "/mnt/oai_agent_cache";
+    FLEXRAN_AWAIT_RECONF   = "no";
+};
diff --git a/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf
new file mode 100644
index 0000000000..8a66e3131f
--- /dev/null
+++ b/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf
@@ -0,0 +1,220 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+        node_function                                         = "eNodeB_3GPP";
+        node_timing                                           = "synch_to_ext_device";
+        node_synch_ref                                        = 0;
+        frame_type					      = "TDD";
+        tdd_config 					      = 1;
+        tdd_config_s            			      = 0;
+        prefix_type             			      = "NORMAL";
+        eutra_band              			      = 40;
+        downlink_frequency      			      = 2350000000L;
+        uplink_frequency_offset 			      = 0;
+        Nid_cell					      = 0;
+        N_RB_DL                 			      = 25;
+        Nid_cell_mbsfn          			      = 0;
+        nb_antenna_ports          			      = 1;
+        nb_antennas_tx          			      = 1;
+        nb_antennas_rx          			      = 1;
+        tx_gain                                            = 90;
+        rx_gain                                            = 125;
+        prach_root              			      = 0;
+        prach_config_index      			      = 0;
+        prach_high_speed        			      = "DISABLE";
+        prach_zero_correlation  			      = 1;
+        prach_freq_offset       			      = 2;
+        pucch_delta_shift       			      = 1;
+        pucch_nRB_CQI           			      = 1;
+        pucch_nCS_AN            			      = 0;
+        pucch_n1_AN             			      = 0;
+        pdsch_referenceSignalPower 			      =-27;
+        pdsch_p_b                  			      = 0;
+        pusch_n_SB                 			      = 1;
+        pusch_enable64QAM          			      = "DISABLE";
+        pusch_hoppingMode                                  = "interSubFrame";
+        pusch_hoppingOffset                                = 0;
+        pusch_groupHoppingEnabled  			      = "ENABLE";
+        pusch_groupAssignment      			      = 0;
+        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+        pusch_nDMRS1                                       = 1;
+        phich_duration                                     = "NORMAL";
+        phich_resource                                     = "ONESIXTH";
+        srs_enable                                         = "DISABLE";
+      /*  srs_BandwidthConfig                                =;
+        srs_SubframeConfig                                 =;
+        srs_ackNackST                                      =;
+        srs_MaxUpPts                                       =;*/
+
+        pusch_p0_Nominal                                   = -96;
+        pusch_alpha                                        = "AL1";
+        pucch_p0_Nominal                                   = -106;
+        msg3_delta_Preamble                                = 6;
+        pucch_deltaF_Format1                               = "deltaF2";
+        pucch_deltaF_Format1b                              = "deltaF3";
+        pucch_deltaF_Format2                               = "deltaF0";
+        pucch_deltaF_Format2a                              = "deltaF0";
+        pucch_deltaF_Format2b		    	      = "deltaF0";
+
+        rach_numberOfRA_Preambles                          = 64;
+        rach_preamblesGroupAConfig                         = "DISABLE";
+      /*
+        rach_sizeOfRA_PreamblesGroupA                      = ;
+        rach_messageSizeGroupA                             = ;
+        rach_messagePowerOffsetGroupB                      = ;
+      */
+        rach_powerRampingStep                              = 4;
+        rach_preambleInitialReceivedTargetPower            = -108;
+        rach_preambleTransMax                              = 10;
+        rach_raResponseWindowSize                          = 10;
+        rach_macContentionResolutionTimer                  = 48;
+        rach_maxHARQ_Msg3Tx                                = 4;
+
+        pcch_default_PagingCycle                           = 128;
+        pcch_nB                                            = "oneT";
+        bcch_modificationPeriodCoeff			      = 2;
+        ue_TimersAndConstants_t300			      = 1000;
+        ue_TimersAndConstants_t301			      = 1000;
+        ue_TimersAndConstants_t310			      = 1000;
+        ue_TimersAndConstants_t311			      = 10000;
+        ue_TimersAndConstants_n310			      = 20;
+        ue_TimersAndConstants_n311			      = 1;
+
+	ue_TransmissionMode				      = 1;
+      }
+    );
+
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "10.0.0.2";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "10.0.0.1/24";
+
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "10.0.0.1/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+
+        ENB_IPV4_ADDRESS_FOR_X2C                 = "192.168.12.111/24";
+        ENB_PORT_FOR_X2C                         = 36422; # Spec 36422
+    };
+
+    log_config :
+    {
+      global_log_level                      ="debug";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+
+  }
+);
+MACRLCs = (
+	{
+        num_cc = 1;
+        tr_s_preference = "local_L1";
+        tr_n_preference = "local_RRC";
+        scheduler_mode = "fairRR";
+        puSch10xSnr     =  200;
+        puCch10xSnr     =  200;
+        }  
+);
+
+L1s = (
+    	{
+	num_cc = 1;
+	tr_n_preference = "local_mac";
+        }  
+);
+
+RUs = (
+    {		  
+       local_rf       = "yes"
+         nb_tx          = 1
+         nb_rx          = 1
+         att_tx         = 0
+         att_rx         = 0;
+         bands          = [38];
+         max_pdschReferenceSignalPower = -27;
+         max_rxgain                    = 115;
+         eNB_instances  = [0];
+
+    }
+);  
+
+NETWORK_CONTROLLER :
+{
+    FLEXRAN_ENABLED        = "no";
+    FLEXRAN_INTERFACE_NAME = "lo";
+    FLEXRAN_IPV4_ADDRESS   = "127.0.0.1";
+    FLEXRAN_PORT           = 2210;
+    FLEXRAN_CACHE          = "/mnt/oai_agent_cache";
+    FLEXRAN_AWAIT_RECONF   = "no";
+};
diff --git a/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf
new file mode 100644
index 0000000000..ede864b733
--- /dev/null
+++ b/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf
@@ -0,0 +1,220 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+        node_function                                         = "eNodeB_3GPP";
+        node_timing                                           = "synch_to_ext_device";
+        node_synch_ref                                        = 0;
+        frame_type					      = "TDD";
+        tdd_config 					      = 1;
+        tdd_config_s            			      = 0;
+        prefix_type             			      = "NORMAL";
+        eutra_band              			      = 40;
+        downlink_frequency      			      = 2350000000L;
+        uplink_frequency_offset 			      = 0;
+        Nid_cell					      = 0;
+        N_RB_DL                 			      = 50;
+        Nid_cell_mbsfn          			      = 0;
+        nb_antenna_ports          			      = 1;
+        nb_antennas_tx          			      = 1;
+        nb_antennas_rx          			      = 1;
+        tx_gain                                            = 90;
+        rx_gain                                            = 125;
+        prach_root              			      = 0;
+        prach_config_index      			      = 0;
+        prach_high_speed        			      = "DISABLE";
+        prach_zero_correlation  			      = 1;
+        prach_freq_offset       			      = 2;
+        pucch_delta_shift       			      = 1;
+        pucch_nRB_CQI           			      = 1;
+        pucch_nCS_AN            			      = 0;
+        pucch_n1_AN             			      = 0;
+        pdsch_referenceSignalPower 			      =-27;
+        pdsch_p_b                  			      = 0;
+        pusch_n_SB                 			      = 1;
+        pusch_enable64QAM          			      = "DISABLE";
+        pusch_hoppingMode                                  = "interSubFrame";
+        pusch_hoppingOffset                                = 0;
+        pusch_groupHoppingEnabled  			      = "ENABLE";
+        pusch_groupAssignment      			      = 0;
+        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+        pusch_nDMRS1                                       = 1;
+        phich_duration                                     = "NORMAL";
+        phich_resource                                     = "ONESIXTH";
+        srs_enable                                         = "DISABLE";
+      /*  srs_BandwidthConfig                                =;
+        srs_SubframeConfig                                 =;
+        srs_ackNackST                                      =;
+        srs_MaxUpPts                                       =;*/
+
+        pusch_p0_Nominal                                   = -96;
+        pusch_alpha                                        = "AL1";
+        pucch_p0_Nominal                                   = -106;
+        msg3_delta_Preamble                                = 6;
+        pucch_deltaF_Format1                               = "deltaF2";
+        pucch_deltaF_Format1b                              = "deltaF3";
+        pucch_deltaF_Format2                               = "deltaF0";
+        pucch_deltaF_Format2a                              = "deltaF0";
+        pucch_deltaF_Format2b		    	      = "deltaF0";
+
+        rach_numberOfRA_Preambles                          = 64;
+        rach_preamblesGroupAConfig                         = "DISABLE";
+      /*
+        rach_sizeOfRA_PreamblesGroupA                      = ;
+        rach_messageSizeGroupA                             = ;
+        rach_messagePowerOffsetGroupB                      = ;
+      */
+        rach_powerRampingStep                              = 4;
+        rach_preambleInitialReceivedTargetPower            = -108;
+        rach_preambleTransMax                              = 10;
+        rach_raResponseWindowSize                          = 10;
+        rach_macContentionResolutionTimer                  = 48;
+        rach_maxHARQ_Msg3Tx                                = 4;
+
+        pcch_default_PagingCycle                           = 128;
+        pcch_nB                                            = "oneT";
+        bcch_modificationPeriodCoeff			      = 2;
+        ue_TimersAndConstants_t300			      = 1000;
+        ue_TimersAndConstants_t301			      = 1000;
+        ue_TimersAndConstants_t310			      = 1000;
+        ue_TimersAndConstants_t311			      = 10000;
+        ue_TimersAndConstants_n310			      = 20;
+        ue_TimersAndConstants_n311			      = 1;
+
+	ue_TransmissionMode				      = 1;
+      }
+    );
+
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+    ////////// MME parameters:
+    mme_ip_address      = ( { ipv4       = "10.0.0.2";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "10.0.0.1/24";
+
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "10.0.0.1/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+
+        ENB_IPV4_ADDRESS_FOR_X2C                 = "192.168.12.111/24";
+        ENB_PORT_FOR_X2C                         = 36422; # Spec 36422
+    };
+
+    log_config :
+    {
+      global_log_level                      ="debug";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+
+  }
+);
+MACRLCs = (
+	{
+        num_cc = 1;
+        tr_s_preference = "local_L1";
+        tr_n_preference = "local_RRC";
+        scheduler_mode = "fairRR";
+        puSch10xSnr     =  200;
+        puCch10xSnr     =  200;
+        }  
+);
+
+L1s = (
+    	{
+	num_cc = 1;
+	tr_n_preference = "local_mac";
+        }  
+);
+
+RUs = (
+    {		  
+       local_rf       = "yes"
+         nb_tx          = 1
+         nb_rx          = 1
+         att_tx         = 0
+         att_rx         = 0;
+         bands          = [38];
+         max_pdschReferenceSignalPower = -27;
+         max_rxgain                    = 115;
+         eNB_instances  = [0];
+
+    }
+);  
+
+NETWORK_CONTROLLER :
+{
+    FLEXRAN_ENABLED        = "no";
+    FLEXRAN_INTERFACE_NAME = "lo";
+    FLEXRAN_IPV4_ADDRESS   = "127.0.0.1";
+    FLEXRAN_PORT           = 2210;
+    FLEXRAN_CACHE          = "/mnt/oai_agent_cache";
+    FLEXRAN_AWAIT_RECONF   = "no";
+};
diff --git a/ci-scripts/createVM.sh b/ci-scripts/createVM.sh
index a1383ab499..f972a921ac 100755
--- a/ci-scripts/createVM.sh
+++ b/ci-scripts/createVM.sh
@@ -108,6 +108,7 @@ case $key in
     ;;
     -v2)
     VM_NAME=ci-basic-sim
+    VM_MEMORY=8192
     shift
     ;;
     -v3)
@@ -136,6 +137,7 @@ case $key in
         ;;
         basic-sim)
         VM_NAME=ci-basic-sim
+        VM_MEMORY=8192
         ;;
         phy-sim)
         VM_NAME=ci-phy-sim
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index e66d25204b..f210fd4518 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -299,6 +299,7 @@ class SSHConnection():
 		self.command('sed -i -e \'s/mme_ip_address.*$/mme_ip_address      = ( { ipv4       = "' + self.EPCIPAddress + '";/\' ' + ci_full_config_file, '\$', 2);
 		self.command('sed -i -e \'s/ENB_IPV4_ADDRESS_FOR_S1_MME.*$/ENB_IPV4_ADDRESS_FOR_S1_MME              = "' + self.eNBIPAddress + '";/\' ' + ci_full_config_file, '\$', 2);
 		self.command('sed -i -e \'s/ENB_IPV4_ADDRESS_FOR_S1U.*$/ENB_IPV4_ADDRESS_FOR_S1U                 = "' + self.eNBIPAddress + '";/\' ' + ci_full_config_file, '\$', 2);
+		self.command('sed -i -e \'s/ENB_IPV4_ADDRESS_FOR_X2C.*$/ENB_IPV4_ADDRESS_FOR_X2C                 = "' + self.eNBIPAddress + '";/\' ' + ci_full_config_file, '\$', 2);
 		# Launch eNB with the modified config file
 		self.command('source oaienv', '\$', 5)
 		self.command('cd cmake_targets', '\$', 5)
diff --git a/ci-scripts/xml_files/enb_usrpb210_band40.xml b/ci-scripts/xml_files/enb_usrpb210_band40.xml
new file mode 100644
index 0000000000..03eca477e8
--- /dev/null
+++ b/ci-scripts/xml_files/enb_usrpb210_band40.xml
@@ -0,0 +1,172 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+-->
+<testCaseList>
+        <TestCaseRequestedList>050101 060101 070101 040101 030105 040301 040501 040602 040601 040401 040201 030201 050201 060201 070201 050101 060101 070101 040101 030104 040301 040501 040702 040701 040401 040201 030201 050201 060201 070201</TestCaseRequestedList>
+	<TestCaseExclusionList>010101 </TestCaseExclusionList>
+
+	<testCase id="010101">
+		<class>Build_eNB</class>
+		<desc>Build eNB (USRP)</desc>
+		<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
+	</testCase>
+
+	<testCase id="030105">
+		<class>Initialize_eNB</class>
+		<desc>Initialize eNB (FDD/Band40/10MHz)</desc>
+		<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf --codingw --fepw</Initialize_eNB_args>
+	</testCase>
+	
+	<testCase id="030104">
+                <class>Initialize_eNB</class>
+                <desc>Initialize eNB (TDD/Band40/5MHz/info)</desc>
+                <Initialize_eNB_args>-O ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf --codingw --fepw</Initialize_eNB_args>
+        </testCase>
+
+	<testCase id="030201">
+		<class>Terminate_eNB</class>
+		<desc>Terminate eNB</desc>
+	</testCase>
+
+	<testCase id="040101">
+		<class>Initialize_UE</class>
+		<desc>Initialize UE</desc>
+	</testCase>
+
+	<testCase id="040201">
+		<class>Terminate_UE</class>
+		<desc>Terminate UE</desc>
+	</testCase>
+
+        <testCase id="040301">
+                <class>Attach_UE</class>
+                <desc>Attach UE</desc>
+        </testCase>
+
+        <testCase id="040401">
+                <class>Detach_UE</class>
+                <desc>Detach UE</desc>
+        </testCase>
+
+        <testCase id="040501">
+                <class>Ping</class>
+                <desc>ping (5MHz - 20 sec)</desc>
+                <ping_args>-c 20</ping_args>
+                <ping_packetloss_threshold>25</ping_packetloss_threshold>
+        </testCase>
+
+        <testCase id="040601">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
+		<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>balanced</iperf_profile>
+        </testCase>
+
+        <testCase id="040602">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
+		<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>single-ue</iperf_profile>
+        </testCase>
+
+        <testCase id="040603">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(unbalanced)</desc>
+		<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>unbalanced</iperf_profile>
+        </testCase>
+
+	<testCase id="040701">
+                <class>Iperf</class>
+                <desc>iperf (10MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
+                <iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
+                <iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+                <iperf_profile>balanced</iperf_profile>
+        </testCase>
+
+        <testCase id="040702">
+                <class>Iperf</class>
+                <desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
+                <iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
+                <iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+                <iperf_profile>single-ue</iperf_profile>
+        </testCase>
+
+
+	<testCase id="040641">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - UL/1Mbps/UDP)(30 sec)(single-ue)</desc>
+		<iperf_args>-u -b 1M -t 30 -i 1 -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>single-ue</iperf_profile>
+	</testCase>
+
+	<testCase id="040642">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - UL/1Mbps/UDP)(30 sec)(balanced)</desc>
+		<iperf_args>-u -b 1M -t 30 -i 1 -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>balanced</iperf_profile>
+	</testCase>
+
+	<testCase id="040643">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - UL/8Mbps/UDP)(30 sec)(unbalanced)</desc>
+		<iperf_args>-u -b 8M -t 30 -i 1 -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>unbalanced</iperf_profile>
+	</testCase>
+
+        <testCase id="050101">
+		<class>Initialize_HSS</class>
+		<desc>Initialize HSS</desc>
+        </testCase>
+
+	<testCase id="060101">
+		<class>Initialize_MME</class>
+		<desc>Initialize MME</desc>
+	</testCase>
+
+	<testCase id="070101">
+		<class>Initialize_SPGW</class>
+		<desc>Initialize SPGW</desc>
+	</testCase>
+
+        <testCase id="050201">
+                <class>Terminate_HSS</class>
+                <desc>Terminate HSS</desc>
+        </testCase>
+
+        <testCase id="060201">
+                <class>Terminate_MME</class>
+                <desc>Terminate MME</desc>
+        </testCase>
+
+        <testCase id="070201">
+                <class>Terminate_SPGW</class>
+                <desc>Terminate SPGW</desc>
+        </testCase>
+
+</testCaseList>
-- 
GitLab