From 086d0451a919bc93c705c31ed84ddc59ebd1e068 Mon Sep 17 00:00:00 2001
From: Robert Schmidt <robert.schmidt@openairinterface.org>
Date: Tue, 25 Oct 2022 15:16:02 +0200
Subject: [PATCH] Add docker-compose and config for MBMS test

---
 .../enb.band7.tm1.25PRB.rfsim.mbms.conf       | 408 ++++++++++++++++++
 .../4g_rfsimulator_mbms/docker-compose.yml    |  60 +++
 2 files changed, 468 insertions(+)
 create mode 100644 ci-scripts/conf_files/enb.band7.tm1.25PRB.rfsim.mbms.conf
 create mode 100644 ci-scripts/yaml_files/4g_rfsimulator_mbms/docker-compose.yml

diff --git a/ci-scripts/conf_files/enb.band7.tm1.25PRB.rfsim.mbms.conf b/ci-scripts/conf_files/enb.band7.tm1.25PRB.rfsim.mbms.conf
new file mode 100644
index 0000000000..8a4f09c4a4
--- /dev/null
+++ b/ci-scripts/conf_files/enb.band7.tm1.25PRB.rfsim.mbms.conf
@@ -0,0 +1,408 @@
+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;
+    plmn_list = ( { mcc = 208; mnc = 93; mnc_length = 2; } );
+
+    tr_s_preference     = "local_mac"
+
+    ////////// Physical parameters:
+
+    component_carriers = (
+      {
+      node_function             = "3GPP_eNODEB";
+      node_timing               = "synch_to_ext_device";
+      node_synch_ref            = 0;
+      frame_type					      = "FDD";
+      tdd_config 					      = 3;
+      tdd_config_s            			      = 0;
+      prefix_type             			      = "NORMAL";
+      eutra_band              			      = 7;
+      downlink_frequency      			      = 2680000000L;
+      uplink_frequency_offset 			      = -120000000;
+      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;
+      pbch_repetition                                 = "FALSE";
+      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           			      = 0;
+      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                                   = -104;
+      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;
+      mbms_dedicated_serving_cell                       = "DISABLE"
+
+      //Parameters for SIB18
+      rxPool_sc_CP_Len                                       = "normal";
+      rxPool_sc_Period                                       = "sf40";
+      rxPool_data_CP_Len                                     = "normal";
+      rxPool_ResourceConfig_prb_Num                          = 20;
+      rxPool_ResourceConfig_prb_Start                        = 5;
+      rxPool_ResourceConfig_prb_End                          = 44;
+      rxPool_ResourceConfig_offsetIndicator_present          = "prSmall";
+      rxPool_ResourceConfig_offsetIndicator_choice           = 0;
+      rxPool_ResourceConfig_subframeBitmap_present           = "prBs40";
+      rxPool_ResourceConfig_subframeBitmap_choice_bs_buf              = "00000000000000000000";
+      rxPool_ResourceConfig_subframeBitmap_choice_bs_size             = 5;
+      rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused      = 0;
+/*    rxPool_dataHoppingConfig_hoppingParameter                       = 0;
+      rxPool_dataHoppingConfig_numSubbands                            = "ns1";
+      rxPool_dataHoppingConfig_rbOffset                               = 0;
+      rxPool_commTxResourceUC-ReqAllowed                              = "TRUE";
+*/
+      // Parameters for SIB19
+      discRxPool_cp_Len                                               = "normal"
+      discRxPool_discPeriod                                           = "rf32"
+      discRxPool_numRetx                                              = 1;
+      discRxPool_numRepetition                                        = 2;
+      discRxPool_ResourceConfig_prb_Num                               = 5;
+      discRxPool_ResourceConfig_prb_Start                             = 3;
+      discRxPool_ResourceConfig_prb_End                               = 21;
+      discRxPool_ResourceConfig_offsetIndicator_present               = "prSmall";
+      discRxPool_ResourceConfig_offsetIndicator_choice                = 0;
+      discRxPool_ResourceConfig_subframeBitmap_present                = "prBs40";
+      discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf          = "f0ffffffff";
+      discRxPool_ResourceConfig_subframeBitmap_choice_bs_size         = 5;
+      discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused  = 0;
+
+      }
+    );
+
+
+    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;
+    };
+
+    enable_measurement_reports = "no";
+
+    ///X2
+    enable_x2 = "no";
+    t_reloc_prep      = 1000;      /* unit: millisecond */
+    tx2_reloc_overall = 2000;      /* unit: millisecond */
+    t_dc_prep         = 1000;      /* unit: millisecond */
+    t_dc_overall      = 2000;      /* unit: millisecond */
+
+ ////////// MCE parameters:
+    target_mce_m2_ip_address      = ( { ipv4       = "127.0.0.7";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    ///M2
+    enable_enb_m2 = "yes";
+   
+
+    mbms_configuration_data_list = (
+                {
+                        mbsfn_sync_area = 0x0001;
+                        mbms_service_area_list=(
+                                {
+                                        mbms_service_area=0x0001;
+                                }
+                        );
+                }
+
+    );
+
+
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "CI_ENB_IP_ADDR";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "CI_ENB_IP_ADDR";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+        ENB_IPV4_ADDRESS_FOR_X2C                 = "CI_ENB_IP_ADDR";
+        ENB_PORT_FOR_X2C                         = 36422; # Spec 36422
+
+        ENB_IPV4_ADDRESS_FOR_M2C                 = "127.0.0.2/24";
+        ENB_PORT_FOR_M2C                         = 36443; # Spec 36443
+    };
+  }
+);
+
+MACRLCs = (
+	{
+	num_cc = 1;
+	tr_s_preference = "local_L1";
+	tr_n_preference = "local_RRC";
+	phy_test_mode = 0;
+        puSch10xSnr     =  200;
+        puCch10xSnr     =  200;
+        }
+);
+
+L1s = (
+      {
+	num_cc = 1;
+	tr_n_preference = "local_mac";
+      }
+);
+
+MCEs = (
+        {
+            MCE_ID    =  0xe00;
+
+            MCE_name  =  "MCE-Vicomtech-LTEBox";
+
+            //M2
+            enable_mce_m2 = "yes";
+
+            //M3
+            enable_mce_m3 = "yes";
+
+            target_mme_m3_ip_address      = ( { ipv4       = "127.0.0.18";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+
+
+            NETWORK_INTERFACES :
+            {
+                MCE_INTERFACE_NAME_FOR_M2_ENB            = "lo";
+                MCE_IPV4_ADDRESS_FOR_M2C                 = "127.0.0.7/24";
+                MCE_PORT_FOR_M2C                         = 36443; # Spec 36443
+
+                MCE_INTERFACE_NAME_FOR_M3_MME            = "lo";
+                MCE_IPV4_ADDRESS_FOR_M3C                 = "127.0.0.3/24";
+                MCE_PORT_FOR_M3C                         = 36444; # Spec 36444
+            };
+
+            plnm:
+            {
+                mcc = 208;
+                mnc = 93;
+                mnc_length = 2;
+            };
+
+            mbms_sched_info :
+            {
+                mcch_update_time = 10;
+                mbms_area_config_list = (
+                {
+                   common_sf_allocation_period = 1; #rf4(0) rf8(1) rf16(2) rf32(3) rf64(4) rf128(5) rf256(6)
+                   mbms_area_id = 0;
+                   pmch_config_list = (
+                   {
+                        allocated_sf_end=32;
+                        data_mcs=15;
+                        mch_scheduling_period = 0; #rf8(0) rf16(1) rf32(2) rf64(3) rf128(4) rf256(5) rf512(6) rf1024(7)
+                        mbms_session_list = (
+                        {
+                                #plnm + service_id ->tmgi
+                               plnm:
+                                {
+                                    mcc = 208;
+                                    mnc = 93;
+                                    mnc_length = 2;
+                                }
+                                service_id=0; #keep this allways as 0 (workaround for TUN if)
+                                lcid=5; #this must be properly defined lcid:6+service:0 -> rab_id:5 //with new RLC set lcid either 4 or 5
+                        }
+                        );
+                   }
+                   );
+
+                   mbms_sf_config_list = (
+                   {
+                        radioframe_allocation_period=0; #n1(0) n2(1) n4(2) n8(3) n16(4) n32(5)
+                        radioframe_alloocation_offset=0;
+                        num_frame="oneFrame";
+                        subframe_allocation=57; #xx111001
+                        //num_frame="fourFrame";
+                        //subframe_allocation=14548987; #
+                   }
+                   );
+
+                }
+                );
+            };
+
+
+            mcch_config_per_mbsfn_area = (
+            {
+                mbsfn_area                = 0;
+                pdcch_length              = 1; #s1(0), s2(1)
+                repetition_period         = 0; #rf32(0), rf64(1), rf128(2), rf256(3)
+                offset                    = 0;
+                modification_period       = 0; #rf512(0; rf1024(1)
+                subframe_allocation_info = 32; #BITSTRING (6bits -> one frame) xx100000
+                mcs                       = 0; #n2(0), n7(1), n13(2), n19(3)
+            }
+            );
+
+                  #);  #end mbms_scheduling_info
+
+        }
+);
+
+MMEs = (
+        {
+            MME_ID    =  0xe00;
+
+            MME_name  =  "MME-MBMS-Vicomtech-LTEBox";
+
+            //M3
+            enable_mme_m3 = "yes";
+            NETWORK_INTERFACES :
+            {
+                MME_INTERFACE_NAME_FOR_M3_MCE            = "lo";
+                MME_IPV4_ADDRESS_FOR_M3C                 = "127.0.0.18/24";
+                MME_PORT_FOR_M3C                         = 36444; # Spec 36444
+
+            };
+        }
+);
+
+
+RUs = (
+    {
+       local_rf       = "yes"
+         nb_tx          = 1
+         nb_rx          = 1
+         att_tx         = 0
+         att_rx         = 0;
+         bands          = [7];
+         max_pdschReferenceSignalPower = -27;
+         max_rxgain                    = 125;
+         eNB_instances  = [0];
+
+    }
+);
+
+THREAD_STRUCT = (
+  {
+    #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+    parallel_config    = "PARALLEL_SINGLE_THREAD";
+    #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+    worker_config      = "WORKER_ENABLE";
+  }
+);
+
+NETWORK_CONTROLLER :
+{
+    FLEXRAN_ENABLED        = "no";
+    FLEXRAN_INTERFACE_NAME = "ens3";
+    FLEXRAN_IPV4_ADDRESS   = "CI_FLEXRAN_CTL_IP_ADDR";
+    FLEXRAN_PORT           = 2210;
+    FLEXRAN_CACHE          = "/mnt/oai_agent_cache";
+    FLEXRAN_AWAIT_RECONF   = "no";
+};
+
+log_config : {
+  global_log_level  = "info";
+  hw_log_level      = "info";
+  phy_log_level     = "info";
+  mac_log_level     = "info";
+  rlc_log_level     = "info";
+  pdcp_log_level    = "debug";
+  rrc_log_level     = "info";
+  m3ap_log_level    = "debug";
+  m2ap_log_level    = "debug";
+  mce_app_log_level = "debug";
+  mme_app_log_level = "debug";
+};
diff --git a/ci-scripts/yaml_files/4g_rfsimulator_mbms/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_mbms/docker-compose.yml
new file mode 100644
index 0000000000..dc64984068
--- /dev/null
+++ b/ci-scripts/yaml_files/4g_rfsimulator_mbms/docker-compose.yml
@@ -0,0 +1,60 @@
+version: '3.8'
+
+services:
+    oai_enb0:
+        image: oai-enb:develop
+        privileged: true
+        container_name: rfsim4g-oai-enb
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.20
+        environment:
+            TZ: Europe/Paris
+            USE_VOLUMED_CONF: 'yes'
+            RFSIMULATOR: enb
+            USE_ADDITIONAL_OPTIONS: --rfsim --noS1 --log_config.global_log_options level,nocolor,time
+        volumes:
+            - ../../conf_files/enb.band7.tm1.25PRB.rfsim.mbms.conf:/opt/oai-enb/etc/mounted.conf
+        healthcheck:
+            test: /bin/bash -c "pgrep lte-softmodem"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+    oai_ue0:
+        image: oai-lte-ue:develop
+        privileged: true
+        container_name: rfsim4g-oai-lte-ue0
+        networks:
+            public_net:
+                ipv4_address: 192.168.61.30
+        expose:
+            - "10000"
+            - "8888"
+            - "9999"
+        environment:
+            TZ: Europe/Paris
+            HOSTNAME: oai_ue0
+            RFSIMULATOR: 192.168.61.20
+            MCC: '208'
+            MNC: '93'
+            SHORT_IMSI: '100001111'
+            LTE_KEY: '8baf473f2f8fd09487cccbd7097c6862'
+            OPC: 'e734f8734007d6c5ce7a0508809e7e9c'
+            MSISDN: '33611123456'
+            HPLMN: 20893
+            USE_ADDITIONAL_OPTIONS: -C 2680000000 -r 25 --ue-rxgain 140 --ue-txgain 120 --nokrnmod 1 --rfsim --noS1 --log_config.global_log_options level,nocolor,time --noS1
+        healthcheck:
+            test: /bin/bash -c "pgrep lte-uesoftmodem"
+            interval: 10s
+            timeout: 5s
+            retries: 5
+
+networks:
+    public_net:
+        name: rfsim4g-oai-public-net
+        ipam:
+            config:
+                - subnet: 192.168.61.0/26
+        driver_opts:
+            com.docker.network.bridge.name: "rfsim4g-public"
-- 
2.26.2