diff --git a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
index f29fc163b3..6fc8401236 100644
--- a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
@@ -6,10 +6,8 @@ eNBs =
(
{
////////// Identification parameters:
- eNB_ID = 0xe00;
-
+ eNB_ID = 0xe01;
cell_type = "CELL_MACRO_ENB";
-
eNB_name = "eNB-Eurecom-LTEBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values
@@ -128,24 +126,25 @@ eNBs =
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_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;
+ //SSB central frequency of NR secondary cell group (for ENDC NSA)
+ nr_scg_ssb_freq = 641272;
}
);
-
srb1_parameters :
{
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
@@ -175,6 +174,7 @@ eNBs =
SCTP_OUTSTREAMS = 2;
};
+ enable_measurement_reports = "no";
////////// MME parameters:
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
@@ -185,10 +185,8 @@ eNBs =
}
);
- enable_measurement_reports = "no";
-
///X2
- enable_x2 = "no";
+ enable_x2 = "no";
t_reloc_prep = 1000; /* unit: millisecond */
tx2_reloc_overall = 2000; /* unit: millisecond */
t_dc_prep = 1000; /* unit: millisecond */
diff --git a/ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf
index fff3cd1b9a..454649f20d 100644
--- a/ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf
@@ -5,110 +5,106 @@ Asn1_verbosity = "none";
eNBs =
(
{
- # real_time choice in {hard, rt-preempt, no}
- real_time = "no";
////////// Identification parameters:
eNB_ID = 0xe01;
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 = 222; mnc = 01; mnc_length = 2; }
- );
+ tracking_area_code = 1;
+ plmn_list = ( { mcc = 222; mnc = 01; mnc_length = 2; } );
tr_s_preference = "local_mac"
+ // In seconds
+ rrc_inactivity_threshold = 0;
+
////////// Physical parameters:
component_carriers = (
{
- node_function = "eNodeB_3GPP";
- node_timing = "synch_to_ext_device";
- node_synch_ref = 0;
- nb_antenna_ports = 1;
- ue_TransmissionMode = 1;
- 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_antennas_tx = 1;
- nb_antennas_rx = 1;
- prach_root = 0;
- tx_gain = 90;
- rx_gain = 115;
- pbch_repetition = "FALSE";
-
- 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 = -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";
+ 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 = 115;
+ 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= -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 =;
+ srs_BandwidthConfig =;
+ srs_SubframeConfig =;
+ srs_ackNackST =;
+ srs_MaxUpPts =;
*/
- pusch_p0_Nominal = -96;
- pusch_alpha = "AL1";
- pucch_p0_Nominal = -96;
- msg3_delta_Preamble = 6;
- pucch_deltaF_Format1 = "deltaF2";
- pucch_deltaF_Format1b = "deltaF3";
- pucch_deltaF_Format2 = "deltaF0";
- pucch_deltaF_Format2a = "deltaF0";
- pucch_deltaF_Format2b = "deltaF0";
+ pusch_p0_Nominal = -96;
+ pusch_alpha = "AL1";
+ pucch_p0_Nominal = -96;
+ 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_numberOfRA_Preambles = 64;
+ rach_preamblesGroupAConfig = "DISABLE";
/*
- rach_sizeOfRA_PreamblesGroupA = ;
- rach_messageSizeGroupA = ;
- rach_messagePowerOffsetGroupB = ;
+ 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;
+ 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;
+ 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;
//Parameters for SIB18
rxPool_sc_CP_Len = "normal";
@@ -120,25 +116,25 @@ eNBs =
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_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";
+ 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_numRetx = 1;
discRxPool_numRepetition = 2;
- discRxPool_ResourceConfig_prb_Num = 5;
+ 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_offsetIndicator_choice = 0;
discRxPool_ResourceConfig_subframeBitmap_present = "prBs40";
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff";
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
@@ -190,7 +186,7 @@ eNBs =
);
///X2
- enable_x2 = "yes";
+ enable_x2 = "yes";
t_reloc_prep = 1000; /* unit: millisecond */
tx2_reloc_overall = 2000; /* unit: millisecond */
t_dc_prep = 1000; /* unit: millisecond */
@@ -198,39 +194,19 @@ eNBs =
NETWORK_INTERFACES :
{
- ENB_INTERFACE_NAME_FOR_S1_MME = "eth1";
+ ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
-
- ENB_INTERFACE_NAME_FOR_S1U = "eth1";
+ 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
};
-
- log_config :
- {
- global_log_level ="info";
- global_log_verbosity ="high";
- 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 ="debug";
- rlc_log_verbosity ="high";
- pdcp_log_level ="info";
- pdcp_log_verbosity ="high";
- rrc_log_level ="info";
- rrc_log_verbosity ="medium";
- };
-
}
);
-MACRLCs = (
+MACRLCs =
+(
{
num_cc = 1;
tr_s_preference = "local_L1";
@@ -238,37 +214,52 @@ MACRLCs = (
phy_test_mode = 0;
puSch10xSnr = 160;
puCch10xSnr = 160;
- }
-);
-
-THREAD_STRUCT = (
- {
- parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
- worker_config = "WORKER_ENABLE";
}
);
-L1s = (
+L1s =
+(
{
- num_cc = 1;
+ num_cc = 1;
tr_n_preference = "local_mac";
- }
+ }
);
-RUs = (
- {
- local_rf = "yes"
- nb_tx = 1
- nb_rx = 1
- att_tx = 3
- att_rx = 0;
- bands = [7];
+RUs =
+(
+ {
+ local_rf = "yes"
+ nb_tx = 1
+ nb_rx = 1
+ att_tx = 3
+ att_rx = 0;
+ bands = [7];
max_pdschReferenceSignalPower = -27;
max_rxgain = 115;
- eNB_instances = [0];
-# clock_src = "external";
+ eNB_instances = [0];
+# clock_src = "external";
}
-);
+);
+
+THREAD_STRUCT =
+(
+ {
+ #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
+ parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
+ #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
+ worker_config = "WORKER_ENABLE";
+ }
+);
+
+NETWORK_CONTROLLER :
+{
+ FLEXRAN_ENABLED = "no";
+ FLEXRAN_INTERFACE_NAME = "eth0";
+ FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
+ FLEXRAN_PORT = 2210;
+ FLEXRAN_CACHE = "/mnt/oai_agent_cache";
+ FLEXRAN_AWAIT_RECONF = "no";
+};
log_config :
{
@@ -286,4 +277,5 @@ log_config :
pdcp_log_verbosity ="high";
rrc_log_level ="info";
rrc_log_verbosity ="medium";
- };
+};
+
diff --git a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf
index 7a8e694a63..33855f2c0e 100644
--- a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf
@@ -8,7 +8,6 @@ gNBs =
{
////////// Identification parameters:
gNB_ID = 0xe00;
-
cell_type = "CELL_MACRO_GNB";
gNB_name = "gNB-Eurecom-5GNRBox";
@@ -185,102 +184,101 @@ gNBs =
////////// MME parameters:
- mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
- ipv6 = "192:168:30::17";
- port = 36412 ;
- active = "yes";
- preference = "ipv4";
- }
- );
+# mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
+# ipv6 = "192:168:30::17";
+# port = 36412 ;
+# active = "yes";
+# preference = "ipv4";
+# }
+# );
///X2
- enable_x2 = "yes";
+ enable_x2 = "yes";
t_reloc_prep = 1000; /* unit: millisecond */
tx2_reloc_overall = 2000; /* unit: millisecond */
t_dc_prep = 1000; /* unit: millisecond */
t_dc_overall = 2000; /* unit: millisecond */
- target_enb_x2_ip_address = (
- { ipv4 = "CI_FR1_CTL_ENB_IP_ADDR";
- ipv6 = "192:168:30::17";
- preference = "ipv4";
- }
- );
+
+ target_enb_x2_ip_address = ( { ipv4 = "CI_FR1_CTL_ENB_IP_ADDR";
+ ipv6 = "192:168:30::17";
+ preference = "ipv4";
+ }
+ );
NETWORK_INTERFACES :
{
-
- GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
- GNB_IPV4_ADDRESS_FOR_S1_MME = "CI_GNB_IP_ADDR";
- GNB_INTERFACE_NAME_FOR_S1U = "eth0";
- GNB_IPV4_ADDRESS_FOR_S1U = "CI_GNB_IP_ADDR";
- GNB_PORT_FOR_S1U = 2152; # Spec 2152
- GNB_IPV4_ADDRESS_FOR_X2C = "CI_GNB_IP_ADDR";
- GNB_PORT_FOR_X2C = 36422; # Spec 36422
+ GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ GNB_IPV4_ADDRESS_FOR_S1_MME = "CI_GNB_IP_ADDR";
+ GNB_INTERFACE_NAME_FOR_S1U = "eth0";
+ GNB_IPV4_ADDRESS_FOR_S1U = "CI_GNB_IP_ADDR";
+ GNB_PORT_FOR_S1U = 2152; # Spec 2152
+ GNB_IPV4_ADDRESS_FOR_X2C = "CI_GNB_IP_ADDR";
+ GNB_PORT_FOR_X2C = 36422; # Spec 36422
};
+
}
);
MACRLCs = (
- {
- num_cc = 1;
- tr_s_preference = "local_L1";
- tr_n_preference = "local_RRC";
- pusch_TargetSNRx10 = 200;
- pucch_TargetSNRx10 = 200;
- }
+ {
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ pusch_TargetSNRx10 = 200;
+ pucch_TargetSNRx10 = 200;
+ }
);
L1s = (
- {
- num_cc = 1;
- tr_n_preference = "local_mac";
- pusch_proc_threads = 6;
- }
+ {
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ pusch_proc_threads = 6;
+ }
);
RUs = (
- {
- local_rf = "yes"
- nb_tx = 1
- nb_rx = 1
- att_tx = 3
- att_rx = 0;
- bands = [7];
- max_pdschReferenceSignalPower = -27;
- max_rxgain = 111;
- eNB_instances = [0];
-# clock_src = "external";
- }
+ {
+ local_rf = "yes"
+ nb_tx = 1
+ nb_rx = 1
+ att_tx = 3
+ att_rx = 0;
+ bands = [7];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 111;
+ eNB_instances = [0];
+# clock_src = "external";
+ }
);
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
- //parallel_config = "PARALLEL_SINGLE_THREAD";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
- log_config :
- {
- global_log_level ="info";
- 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";
- };
+log_config :
+{
+ global_log_level ="info";
+ 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";
+};
uicc: {
-opc = "testopc";
+ opc = "testopc";
};
diff --git a/ci-scripts/yaml_files/4g_rfsimulator/README.md b/ci-scripts/yaml_files/4g_rfsimulator/README.md
new file mode 100644
index 0000000000..a677c642f4
--- /dev/null
+++ b/ci-scripts/yaml_files/4g_rfsimulator/README.md
@@ -0,0 +1,501 @@
+
+
+
+
+
+
+
+ |
+
+ OAI Full Stack RF simulation with containers
+ |
+
+
+
+This page is only valid for an `Ubuntu18` host.
+
+**TABLE OF CONTENTS**
+
+1. [Retrieving the images on Docker-Hub](#1-retrieving-the-images-on-docker-hub)
+2. [Deploy containers](#2-deploy-containers)
+ 1. [Deploy and Configure Cassandra Database](#21-deploy-and-configure-cassandra-database)
+ 2. [Deploy OAI CN4G containers](#22-deploy-oai-cn4g-containers)
+ 3. [Deploy OAI eNB in RF simulator mode](#23-deploy-oai-enb-in-rf-simulator-mode)
+ 4. [Deploy OAI LTE UE in RF simulator mode](#24-deploy-oai-lte-ue-in-rf-simulator-mode)
+3. [Check traffic](#3-check-traffic)
+4. [Un-deployment](#4-un-deployment)
+5. [Explanation on the configuration](#5-explanation-on-the-configuration)
+ 1. [UE IMSI and Keys](#51-ue-imsi-and-keys)
+ 2. [PLMN and TAI](#52-plmn-and-tai)
+ 3. [Access to Internet](#53-access-to-internet)
+
+# 1. Retrieving the images on Docker-Hub #
+
+Currently the images are hosted under the user account `rdefosseoai`.
+
+This may change in the future.
+
+Once again you may need to log on [docker-hub](https://hub.docker.com/) if your organization has reached pulling limit as `anonymous`.
+
+```bash
+$ docker login
+Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
+Username:
+Password:
+```
+
+Now pull images.
+
+```bash
+$ docker pull cassandra:2.1
+$ docker pull rdefosseoai/oai-hss:latest
+$ docker pull rdefosseoai/oai-mme:latest
+$ docker pull rdefosseoai/oai-spgwc:latest
+$ docker pull rdefosseoai/oai-spgwu-tiny:latest
+
+$ docker pull rdefosseoai/oai-enb:develop
+$ docker pull rdefosseoai/oai-lte-ue:develop
+```
+
+And **re-tag** them for tutorials' docker-compose file to work.
+
+```bash
+$ docker image tag rdefosseoai/oai-spgwc:latest oai-spgwc:latest
+$ docker image tag rdefosseoai/oai-hss:latest oai-hss:latest
+$ docker image tag rdefosseoai/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
+$ docker image tag rdefosseoai/oai-mme:latest oai-mme:latest
+
+$ docker image tag rdefosseoai/oai-enb:develop oai-enb:develop
+$ docker image tag rdefosseoai/oai-lte-ue:develop oai-lte-ue:develop
+```
+
+```bash
+$ docker logout
+```
+
+How to build the Traffic-Generator image is explained [here](https://github.com/OPENAIRINTERFACE/openair-epc-fed/blob/master/docs/GENERATE_TRAFFIC.md#1-build-a-traffic-generator-image).
+
+# 2. Deploy containers #
+
+**CAUTION: this SHALL be done in multiple steps.**
+
+**Just `docker-compose up -d` WILL NOT WORK!**
+
+## 2.1. Deploy and Configure Cassandra Database ##
+
+It is very crutial that the Cassandra DB is fully configured before you do anything else!
+
+```bash
+$ docker-compose up -d db_init
+Creating network "rfsim4g-oai-private-net" with the default driver
+Creating network "rfsim4g-oai-public-net" with the default driver
+Creating rfsim4g-cassandra ... done
+Creating rfsim4g-db-init ... done
+
+$ docker logs rfsim4g-db-init --follow
+Connection error: ('Unable to connect to any servers', {'192.168.68.2': error(111, "Tried connecting to [('192.168.68.2', 9042)]. Last error: Connection refused")})
+...
+Connection error: ('Unable to connect to any servers', {'192.168.68.2': error(111, "Tried connecting to [('192.168.68.2', 9042)]. Last error: Connection refused")})
+OK
+```
+
+**You SHALL wait until you HAVE the `OK` message in the logs!**
+
+```bash
+$ docker rm rfsim4g-db-init
+```
+
+At this point, you can prepare a capture on the newly-created public docker bridge:
+
+```bash
+$ ifconfig rfsim4g-public
+ inet 192.168.61.1 netmask 255.255.255.192 broadcast 192.168.61.63
+ ether 02:42:8f:dd:ba:5a txqueuelen 0 (Ethernet)
+ RX packets 0 bytes 0 (0.0 B)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 0 bytes 0 (0.0 B)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+$ sudo tshark -i rfsim4g-public -f 'port 3868 or port 2123 or port 36412 or port 36422 or port 46520 or port 8805' -w /tmp/my-oai-control-plane.pcap
+```
+
+**BE CAREFUL: please use that filter or you will also capture the data-plane with IQ samples between `eNB` and `LTE-UE`.**
+
+**and your capture WILL become huge (10s of Gbytes).**
+
+## 2.2. Deploy OAI CN4G containers ##
+
+```bash
+$ docker-compose up -d oai_mme oai_spgwu trf_gen
+rfsim4g-cassandra is up-to-date
+Creating rfsim4g-trf-gen ... done
+Creating rfsim4g-oai-hss ... done
+Creating rfsim4g-oai-mme ... done
+Creating rfsim4g-oai-spgwc ... done
+Creating rfsim4g-oai-spgwu-tiny ... done
+```
+
+You shall wait until all containers are `healthy`. About 10 seconds!
+
+```bash
+$ docker-compose ps -a
+ Name Command State Ports
+-------------------------------------------------------------------------------------------------------------------------
+rfsim4g-cassandra docker-entrypoint.sh cassa ... Up (healthy) 7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp
+rfsim4g-oai-hss /openair-hss/bin/entrypoin ... Up (healthy) 5868/tcp, 9042/tcp, 9080/tcp, 9081/tcp
+rfsim4g-oai-mme /openair-mme/bin/entrypoin ... Up (healthy) 2123/udp, 3870/tcp, 5870/tcp
+rfsim4g-oai-spgwc /openair-spgwc/bin/entrypo ... Up (healthy) 2123/udp, 8805/udp
+rfsim4g-oai-spgwu-tiny /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
+rfsim4g-trf-gen /bin/bash -c ip route add ... Up (healthy)
+```
+
+## 2.3. Deploy OAI eNB in RF simulator mode ##
+
+```bash
+$ docker-compose up -d enb
+Creating rfsim4g-oai-enb ... done
+```
+
+Again wait for the healthy state:
+
+```bash
+$ docker-compose ps -a
+ Name Command State Ports
+-------------------------------------------------------------------------------------------------------------------------
+rfsim4g-cassandra docker-entrypoint.sh cassa ... Up (healthy) 7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp
+rfsim4g-oai-enb /opt/oai-enb/bin/entrypoin ... Up (healthy) 2152/udp, 36412/udp, 36422/udp
+rfsim4g-oai-hss /openair-hss/bin/entrypoin ... Up (healthy) 5868/tcp, 9042/tcp, 9080/tcp, 9081/tcp
+rfsim4g-oai-mme /openair-mme/bin/entrypoin ... Up (healthy) 2123/udp, 3870/tcp, 5870/tcp
+rfsim4g-oai-spgwc /openair-spgwc/bin/entrypo ... Up (healthy) 2123/udp, 8805/udp
+rfsim4g-oai-spgwu-tiny /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
+rfsim4g-trf-gen /bin/bash -c ip route add ... Up (healthy)
+```
+
+Check if the eNB connected to MME:
+
+```bash
+$ docker logs rfsim4g-oai-mme
+...
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0039 ======================================= STATISTICS ============================================
+
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0042 | Current Status| Added since last display| Removed since last display |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0048 Connected eNBs | 0 | 0 | 0 |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0054 Attached UEs | 0 | 0 | 0 |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0060 Connected UEs | 0 | 0 | 0 |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0066 Default Bearers| 0 | 0 | 0 |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0072 S1-U Bearers | 0 | 0 | 0 |
+
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0075 ======================================= STATISTICS ============================================
+
+DEBUG SCTP rc/sctp/sctp_primitives_server.c:0469 Client association changed: 0
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0101 ----------------------
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0102 SCTP Status:
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0103 assoc id .....: 675
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0104 state ........: 4
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0105 instrms ......: 2
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0106 outstrms .....: 2
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0108 fragmentation : 1452
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0109 pending data .: 0
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0110 unack data ...: 0
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0111 rwnd .........: 106496
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0112 peer info :
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0114 state ....: 2
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0116 cwnd .....: 4380
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0118 srtt .....: 0
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0120 rto ......: 3000
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0122 mtu ......: 1500
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0123 ----------------------
+DEBUG SCTP rc/sctp/sctp_primitives_server.c:0479 New connection
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0205 ----------------------
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0206 Local addresses:
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0217 - [192.168.61.3]
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0234 ----------------------
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0151 ----------------------
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0152 Peer addresses:
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0163 - [192.168.61.20]
+DEBUG SCTP enair-mme/src/sctp/sctp_common.c:0178 ----------------------
+DEBUG SCTP rc/sctp/sctp_primitives_server.c:0554 SCTP RETURNING!!
+DEBUG SCTP rc/sctp/sctp_primitives_server.c:0547 [675][44] Msg of length 51 received from port 36412, on stream 0, PPID 18
+DEBUG SCTP rc/sctp/sctp_primitives_server.c:0554 SCTP RETURNING!!
+DEBUG S1AP mme/src/s1ap/s1ap_mme_handlers.c:2826 Create eNB context for assoc_id: 675
+DEBUG S1AP mme/src/s1ap/s1ap_mme_handlers.c:0361 S1-Setup-Request macroENB_ID.size 3 (should be 20)
+DEBUG S1AP mme/src/s1ap/s1ap_mme_handlers.c:0321 New s1 setup request incoming from macro eNB id: 00e01
+DEBUG S1AP mme/src/s1ap/s1ap_mme_handlers.c:0423 Adding eNB to the list of served eNBs
+DEBUG S1AP mme/src/s1ap/s1ap_mme_handlers.c:0438 Adding eNB id 3585 to the list of served eNBs
+DEBUG SCTP rc/sctp/sctp_primitives_server.c:0283 [44][675] Sending buffer 0x7f9394009f90 of 27 bytes on stream 0 with ppid 18
+DEBUG SCTP rc/sctp/sctp_primitives_server.c:0296 Successfully sent 27 bytes on stream 0
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0039 ======================================= STATISTICS ============================================
+
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0042 | Current Status| Added since last display| Removed since last display |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0048 Connected eNBs | 1 | 1 | 0 |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0054 Attached UEs | 0 | 0 | 0 |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0060 Connected UEs | 0 | 0 | 0 |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0066 Default Bearers| 0 | 0 | 0 |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0072 S1-U Bearers | 0 | 0 | 0 |
+
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0075 ======================================= STATISTICS ============================================
+...
+```
+
+## 2.4. Deploy OAI LTE UE in RF simulator mode ##
+
+```bash
+$ docker-compose up -d oai_ue0
+Creating rfsim4g-oai-lte-ue0 ... done
+```
+
+Again a bit of patience:
+
+```bash
+$ docker-compose ps -a
+ Name Command State Ports
+-------------------------------------------------------------------------------------------------------------------------
+rfsim4g-cassandra docker-entrypoint.sh cassa ... Up (healthy) 7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp
+rfsim4g-oai-enb /opt/oai-enb/bin/entrypoin ... Up (healthy) 2152/udp, 36412/udp, 36422/udp
+rfsim4g-oai-hss /openair-hss/bin/entrypoin ... Up (healthy) 5868/tcp, 9042/tcp, 9080/tcp, 9081/tcp
+rfsim4g-oai-lte-ue0 /opt/oai-lte-ue/bin/entryp ... Up (healthy) 10000/tcp
+rfsim4g-oai-mme /openair-mme/bin/entrypoin ... Up (healthy) 2123/udp, 3870/tcp, 5870/tcp
+rfsim4g-oai-spgwc /openair-spgwc/bin/entrypo ... Up (healthy) 2123/udp, 8805/udp
+rfsim4g-oai-spgwu-tiny /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
+rfsim4g-trf-gen /bin/bash -c ip route add ... Up (healthy)
+Creating rfsim4g-oai-enb ... done
+```
+
+Making sure the OAI UE is connected:
+
+```bash
+$ docker logs rfsim4g-oai-enb
+...
+[RRC] RRCConnectionReconfiguration Encoded 1098 bits (138 bytes)
+[RRC] [eNB 0] Frame 0, Logical Channel DL-DCCH, Generate LTE_RRCConnectionReconfiguration (bytes 138, UE id 617b)
+[RRC] sent RRC_DCCH_DATA_REQ to TASK_PDCP_ENB
+[PDCP] [FRAME 00000][eNB][MOD 00][RNTI 617b][SRB 02] Action ADD LCID 2 (SRB id 2) configured with SN size 5 bits and RLC AM
+[PDCP] [FRAME 00000][eNB][MOD 00][RNTI 617b][DRB 01] Action ADD LCID 3 (DRB id 1) configured with SN size 12 bits and RLC AM
+[SCTP] Successfully sent 46 bytes on stream 1 for assoc_id 676
+[RRC] [FRAME 00000][eNB][MOD 00][RNTI 617b] UE State = RRC_RECONFIGURED (default DRB, xid 0)
+[PDCP] [FRAME 00000][eNB][MOD 00][RNTI 617b][SRB 02] Action MODIFY LCID 2 RB id 2 reconfigured with SN size 5 and RLC AM
+[PDCP] [FRAME 00000][eNB][MOD 00][RNTI 617b][DRB 01] Action MODIFY LCID 3 RB id 1 reconfigured with SN size 1 and RLC AM
+[RRC] [eNB 0] Frame 0 CC 0 : SRB2 is now active
+[RRC] [eNB 0] Frame 0 : Logical Channel UL-DCCH, Received LTE_RRCConnectionReconfigurationComplete from UE rnti 617b, reconfiguring DRB 1/LCID 3
+[RRC] [eNB 0] Frame 0 : Logical Channel UL-DCCH, Received LTE_RRCConnectionReconfigurationComplete, reconfiguring DRB 1/LCID 3
+[MAC] UE 0 RNTI 617b adding LC 3 idx 2 to scheduling control (total 3)
+[MAC] Added physicalConfigDedicated 0x7f98e0004950 for 0.0
+[S1AP] initial_ctxt_resp_p: e_rab ID 5, enb_addr 192.168.61.20, SIZE 4
+[SCTP] Successfully sent 40 bytes on stream 1 for assoc_id 676
+[SCTP] Successfully sent 61 bytes on stream 1 for assoc_id 676
+...
+```
+
+On the MME:
+
+```bash
+$ docker logs rfsim4g-oai-mme
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0039 ======================================= STATISTICS ============================================
+
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0042 | Current Status| Added since last display| Removed since last display |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0048 Connected eNBs | 1 | 0 | 0 |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0054 Attached UEs | 1 | 0 | 0 |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0060 Connected UEs | 1 | 0 | 0 |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0066 Default Bearers| 0 | 0 | 0 |
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0072 S1-U Bearers | 0 | 0 | 0 |
+
+DEBUG MME-AP src/mme_app/mme_app_statistics.c:0075 ======================================= STATISTICS ============================================
+```
+
+On the LTE UE:
+
+```bash
+$ docker exec rfsim4g-oai-lte-ue0 /bin/bash -c "ifconfig"
+eth0: flags=4163 mtu 1500
+ inet 192.168.61.30 netmask 255.255.255.192 broadcast 192.168.61.63
+ ether 02:42:c0:a8:3d:1e txqueuelen 0 (Ethernet)
+ RX packets 1109931 bytes 8078031934 (8.0 GB)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 1232068 bytes 7798928848 (7.7 GB)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+
+lo: flags=73 mtu 65536
+ inet 127.0.0.1 netmask 255.0.0.0
+ loop txqueuelen 1000 (Local Loopback)
+ RX packets 0 bytes 0 (0.0 B)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 0 bytes 0 (0.0 B)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+
+oaitun_ue1: flags=4305 mtu 1500
+ inet 12.0.0.2 netmask 255.0.0.0 destination 12.0.0.2
+ unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
+ RX packets 0 bytes 0 (0.0 B)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 0 bytes 0 (0.0 B)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+
+oaitun_uem1: flags=4305 mtu 1500
+ inet 10.0.2.2 netmask 255.255.255.0 destination 10.0.2.2
+ unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
+ RX packets 0 bytes 0 (0.0 B)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 0 bytes 0 (0.0 B)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+```
+
+The tunnel `oaitun_ue1` SHALL be mounted and with an IP address in the `12.0.0.xxx` range.
+
+# 3. Check traffic #
+
+```bash
+$ docker exec rfsim4g-oai-lte-ue0 /bin/bash -c "ping -c 2 www.lemonde.fr"
+PING s2.shared.global.fastly.net (151.101.122.217) 56(84) bytes of data.
+64 bytes from 151.101.122.217 (151.101.122.217): icmp_seq=1 ttl=54 time=12.9 ms
+64 bytes from 151.101.122.217 (151.101.122.217): icmp_seq=2 ttl=54 time=12.9 ms
+
+--- s2.shared.global.fastly.net ping statistics ---
+2 packets transmitted, 2 received, 0% packet loss, time 1001ms
+rtt min/avg/max/mdev = 12.940/12.965/12.990/0.025 ms
+
+$ docker exec rfsim4g-oai-lte-ue0 /bin/bash -c "ping -I oaitun_ue1 -c 2 www.lemonde.fr"
+PING s2.shared.global.fastly.net (151.101.122.217) from 12.0.0.2 oaitun_ue1: 56(84) bytes of data.
+64 bytes from 151.101.122.217 (151.101.122.217): icmp_seq=1 ttl=53 time=23.6 ms
+64 bytes from 151.101.122.217 (151.101.122.217): icmp_seq=2 ttl=53 time=29.5 ms
+
+--- s2.shared.global.fastly.net ping statistics ---
+2 packets transmitted, 2 received, 0% packet loss, time 1001ms
+rtt min/avg/max/mdev = 23.659/26.626/29.593/2.967 ms
+```
+
+The 1st ping command is NOT using the OAI stack. My network infrastructure has a response of `13 ms` to reach this website.
+
+The 2nd ping command is using the OAI stack. So the stack takes `26.6 - 12.9 = 13.7 ms`.
+
+# 4. Un-deployment #
+
+```bash
+$ docker-compose down
+Stopping rfsim4g-oai-lte-ue0 ... done
+Stopping rfsim4g-oai-enb ... done
+Stopping rfsim4g-oai-spgwu-tiny ... done
+Stopping rfsim4g-oai-spgwc ... done
+Stopping rfsim4g-oai-mme ... done
+Stopping rfsim4g-oai-hss ... done
+Stopping rfsim4g-trf-gen ... done
+Stopping rfsim4g-cassandra ... done
+Removing rfsim4g-oai-lte-ue0 ... done
+Removing rfsim4g-oai-enb ... done
+Removing rfsim4g-oai-spgwu-tiny ... done
+Removing rfsim4g-oai-spgwc ... done
+Removing rfsim4g-oai-mme ... done
+Removing rfsim4g-oai-hss ... done
+Removing rfsim4g-trf-gen ... done
+Removing rfsim4g-cassandra ... done
+Removing network rfsim4g-oai-private-net
+Removing network rfsim4g-oai-public-net
+```
+
+# 5. Explanation on the configuration #
+
+With a single `docker-compose.yml` file, it is easier to explain how I made the full connection.
+
+Try to modify as little as possible. And if you don't understand a field/value, you'd better NOT modify it.
+
+## 5.1. UE IMSI and Keys ##
+
+in HSS config:
+
+```yaml
+ OP_KEY: 1006020f0a478bf6b699f15c062e42b3
+ LTE_K: fec86ba6eb707ed08905757b1bb44b8f
+ APN1: oai.ipv4
+ APN2: internet
+ FIRST_IMSI: 208960100000001
+ NB_USERS: 10
+```
+
+in UE config:
+
+```yaml
+ MCC: '208'
+ MNC: '96'
+ SHORT_IMSI: '0100000001'
+ LTE_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
+ OPC: 'c42449363bbad02b66d16bc975d77cc1'
+ MSISDN: '001011234561010'
+ HPLMN: 20896
+```
+
+As you can see: `LTE_K` and `LTE_KEY` are the same value. And `OP_KEY` and `OPC` can be deduced from each other. Look in HSS logs.
+
+```bash
+$ docker logs rfsim4g-oai-hss
+...
+Compute opc:
+ K: FEC86BA6EB707ED08905757B1BB44B8F <== `LTE_K`
+ In: 1006020F0A478BF6B699F15C062E42B3 <== `OP_KEY`
+ Rinj: D4224B3931FD5BDDD0489A9573F93E72
+ Out: C42449363BBAD02B66D16BC975D77CC1 <== `OPC`
+...
+```
+
+In HSS, I've provisioned 10 users starting at `208960100000001` (`FIRST_IMSI` and `NB_USERS`).
+
+My 1st UE IMSI is an aggregation of `MCC`, `MNC`, `SHORT_IMSI`.
+
+## 5.2. PLMN and TAI ##
+
+in MME config:
+
+```yaml
+ REALM: openairinterface.org
+..
+ MCC: '208'
+ MNC: '96'
+ MME_GID: 32768
+ MME_CODE: 3
+ TAC_0: 1
+ TAC_1: 2
+ TAC_2: 3
+ MME_FQDN: mme.openairinterface.org
+```
+
+in SPGW-C/-U configs:
+
+```yaml
+ MCC: '208'
+ MNC: '96'
+ MNC03: '096'
+ TAC: 1
+ GW_ID: 1
+ REALM: openairinterface.org
+```
+
+in eNB config:
+
+```yaml
+ MCC: '208'
+ MNC: '96'
+ MNC_LENGTH: 2
+ TAC: 1
+```
+
+The values SHALL match, and `TAC` shall match `TAC_0` from MME.
+
+## 5.3. Access to Internet ##
+
+In my traffic test, I was able to ping outside of my local network.
+
+in SPGW-C config:
+
+```yaml
+ DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
+ DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
+ PUSH_PROTOCOL_OPTION: 'true'
+```
+
+in SPGW-U config:
+
+```yaml
+ NETWORK_UE_NAT_OPTION: 'yes'
+```
+
+Please put your own DNS server IP adress.
+
+And you may have to play with `PUSH_PROTOCOL_OPTION` and `NETWORK_UE_NAT_OPTION` depending on your network.
+
diff --git a/ci-scripts/yaml_files/4g_rfsimulator/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator/docker-compose.yml
index d8be6679b1..32e4bd41e8 100644
--- a/ci-scripts/yaml_files/4g_rfsimulator/docker-compose.yml
+++ b/ci-scripts/yaml_files/4g_rfsimulator/docker-compose.yml
@@ -32,7 +32,7 @@ services:
entrypoint: /bin/bash -c "cqlsh --file /home/oai_db.cql 192.168.68.2 && echo 'OK'"
oai_hss:
- image: oai-hss:develop-2021-06-14
+ image: oai-hss:latest
container_name: rfsim4g-oai-hss
privileged: true
depends_on: [cassandra]
@@ -59,7 +59,7 @@ services:
retries: 5
oai_mme:
- image: oai-mme:production
+ image: oai-mme:latest
container_name: rfsim4g-oai-mme
privileged: true
depends_on: [oai_hss]
@@ -116,7 +116,7 @@ services:
retries: 5
oai_spgwc:
- image: oai-spgwc:develop-2021-06-14
+ image: oai-spgwc:latest
privileged: true
depends_on: [oai_mme]
container_name: rfsim4g-oai-spgwc
@@ -148,7 +148,7 @@ services:
retries: 5
oai_spgwu:
- image: oai-spgwu-tiny:develop-2021-06-14
+ image: oai-spgwu-tiny:latest
privileged: true
container_name: rfsim4g-oai-spgwu-tiny
depends_on: [oai_spgwc]
@@ -177,19 +177,6 @@ services:
timeout: 5s
retries: 5
- flexran_rtc:
- image: flexran-rtc:production
- privileged: true
- container_name: rfsim4g-flexran-rtc
- networks:
- public_net:
- ipv4_address: 192.168.61.10
- healthcheck:
- test: /bin/bash -c "pgrep rt_controller"
- interval: 10s
- timeout: 5s
- retries: 5
-
trf_gen:
image: trf-gen:production
privileged: true
@@ -235,6 +222,11 @@ services:
FLEXRAN_INTERFACE_NAME: eth0
FLEXRAN_IPV4_ADDRESS: 192.168.61.10
USE_ADDITIONAL_OPTIONS: --rfsim
+ healthcheck:
+ test: /bin/bash -c "pgrep lte-softmodem"
+ interval: 10s
+ timeout: 5s
+ retries: 5
oai_ue0:
image: oai-lte-ue:develop
@@ -257,6 +249,11 @@ services:
MSISDN: '001011234561010'
HPLMN: 20896
USE_ADDITIONAL_OPTIONS: --rfsim -C 2680000000 -r 25 --ue-rxgain 140 --ue-txgain 120 --nokrnmod 1
+ healthcheck:
+ test: /bin/bash -c "pgrep lte-uesoftmodem"
+ interval: 10s
+ timeout: 5s
+ retries: 5
networks:
private_net:
@@ -264,9 +261,12 @@ networks:
ipam:
config:
- subnet: 192.168.68.0/26
+ driver_opts:
+ com.docker.network.bridge.name: "rfsim4g-private"
public_net:
name: rfsim4g-oai-public-net
ipam:
config:
- subnet: 192.168.61.0/26
-
+ driver_opts:
+ com.docker.network.bridge.name: "rfsim4g-public"
diff --git a/docker/Dockerfile.eNB.rhel8.2 b/docker/Dockerfile.eNB.rhel8.2
index cf012502e0..32d6796ec9 100644
--- a/docker/Dockerfile.eNB.rhel8.2
+++ b/docker/Dockerfile.eNB.rhel8.2
@@ -48,6 +48,7 @@ RUN yum update -y && \
yum install -y --enablerepo="ubi-8-codeready-builder" \
lksctp-tools \
nettle \
+ procps-ng \
atlas \
net-tools \
iputils \
diff --git a/docker/Dockerfile.eNB.ubuntu18 b/docker/Dockerfile.eNB.ubuntu18
index 2954d3fb18..3ce4a98ce4 100644
--- a/docker/Dockerfile.eNB.ubuntu18
+++ b/docker/Dockerfile.eNB.ubuntu18
@@ -51,6 +51,7 @@ RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
software-properties-common \
+ procps \
libsctp1 \
libnettle6 \
libblas3 \
diff --git a/docker/Dockerfile.gNB.rhel8.2 b/docker/Dockerfile.gNB.rhel8.2
index 6969c691fd..a81de04cbe 100644
--- a/docker/Dockerfile.gNB.rhel8.2
+++ b/docker/Dockerfile.gNB.rhel8.2
@@ -25,7 +25,7 @@
#
#---------------------------------------------------------------------
-FROM localhost/ran-build:latest AS gnb-build
+FROM ran-build:latest AS gnb-build
RUN rm -Rf /oai-ran
WORKDIR /oai-ran
@@ -37,11 +37,9 @@ RUN /bin/sh oaienv && \
mkdir -p log && \
./build_oai --gNB --ninja -w USRP --verbose-ci
-#debug
-#RUN ldconfig -v
-#RUN ldd /oai-ran/targets/bin/nr-softmodem.Rel15
-#RUN ls -lst /oai-ran/targets/bin
-#RUN ls -lst /oai-ran/cmake_targets/ran_build/build/*.so
+RUN yum install -y python3-pip && \
+ pip3 install --ignore-installed pyyaml && \
+ python3 ./docker/scripts/generateTemplate.py ./docker/scripts/gnb_parameters.yaml
#start from scratch for target executable
FROM registry.access.redhat.com/ubi8/ubi:latest as oai-gnb
@@ -49,6 +47,7 @@ FROM registry.access.redhat.com/ubi8/ubi:latest as oai-gnb
RUN yum repolist --disablerepo=* && \
yum update -y && \
yum install -y --enablerepo="ubi-8-codeready-builder" \
+ procps-ng \
libXpm \
libX11 \
atlas \
@@ -62,6 +61,7 @@ RUN yum repolist --disablerepo=* && \
WORKDIR /opt/oai-gnb/bin
COPY --from=gnb-build /oai-ran/targets/bin/nr-softmodem.Rel15 .
+COPY --from=gnb-build /oai-ran/docker/scripts/gnb_entrypoint.sh entrypoint.sh
WORKDIR /usr/local/lib/
COPY --from=gnb-build /oai-ran/targets/bin/liboai_eth_transpro.so.Rel15 .
@@ -99,23 +99,10 @@ COPY --from=gnb-build /lib64/libboost_timer.so.1.66.0 /lib64
COPY --from=gnb-build /usr/local/lib64/libuhd.so.4.0.0 /usr/local/lib64
RUN ldconfig
-#debug
-#RUN ldd /opt/oai-gnb/bin/nr-softmodem.Rel15
-#RUN ldd /usr/local/lib/liboai_eth_transpro.so.Rel15
-#RUN ldd /usr/local/lib/libtcp_bridge_oai.so.Rel15
-#RUN ldd /usr/local/lib/librfsimulator.so.Rel15
-#RUN ldd /usr/local/lib/liboai_usrpdevif.so.Rel15
-#RUN ldd /usr/local/lib/libcoding.so
-#RUN ldd /usr/local/lib/libparams_libconfig.so
-#RUN ldd /usr/local/lib/libdfts.so
-#RUN ldd /usr/local/lib/libldpc.so
-#RUN ldd /usr/local/lib/libldpc_optim.so
-#RUN ldd /usr/local/lib/libldpc_optim8seg.so
-#RUN ldd /usr/local/lib/libldpc_orig.so
# Copy the relevant configuration files for gNB
WORKDIR /opt/oai-gnb/etc
-COPY --from=gnb-build /oai-ran/ci-scripts/conf_files/gnb.* .
+COPY --from=gnb-build /oai-ran/docker/etc .
WORKDIR /opt/oai-gnb
#EXPOSE 2152/udp # S1U, GTP/UDP
@@ -125,6 +112,5 @@ WORKDIR /opt/oai-gnb
#EXPOSE 50000/udp # IF5 / ORI (control)
#EXPOSE 50001/udp # IF5 / ECPRI (data)
-#CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"]
-#ENTRYPOINT ["/opt/oai-gnb/bin/entrypoint.sh"]
-CMD ["sleep", "infinity"]
+ENTRYPOINT ["/opt/oai-gnb/bin/entrypoint.sh"]
+CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"]
diff --git a/docker/Dockerfile.gNB.ubuntu18 b/docker/Dockerfile.gNB.ubuntu18
index 276d6989c4..2fb569b74b 100644
--- a/docker/Dockerfile.gNB.ubuntu18
+++ b/docker/Dockerfile.gNB.ubuntu18
@@ -37,23 +37,22 @@ RUN /bin/sh oaienv && \
mkdir -p log && \
./build_oai --gNB --ninja -w USRP --verbose-ci
-#debug
-RUN ldconfig -v
-RUN ldd /oai-ran/targets/bin/nr-softmodem.Rel15
-RUN ls -lst /oai-ran/targets/bin
-RUN ls -lst /oai-ran/cmake_targets/ran_build/build/*.so
+RUN apt-get install -y python3-pip && \
+ pip3 install --ignore-installed pyyaml && \
+ python3 ./docker/scripts/generateTemplate.py ./docker/scripts/gnb_parameters.yaml
#start from scratch for target executable
FROM ubuntu:bionic as oai-gnb
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe
-RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
software-properties-common \
+ procps \
libsctp1 \
+ tzdata \
libnettle6 \
libblas3 \
libatlas3-base \
@@ -76,6 +75,7 @@ RUN apt-get update && \
WORKDIR /opt/oai-gnb/bin
COPY --from=gnb-build /oai-ran/targets/bin/nr-softmodem.Rel15 .
+COPY --from=gnb-build /oai-ran/docker/scripts/gnb_entrypoint.sh entrypoint.sh
WORKDIR /usr/local/lib/
COPY --from=gnb-build /oai-ran/targets/bin/liboai_eth_transpro.so.Rel15 .
@@ -96,23 +96,10 @@ RUN /bin/bash -c "ln -s /usr/local/lib/librfsimulator.so.Rel15 /usr/local/lib/li
COPY --from=gnb-build /usr/local/lib/libprotobuf-c.so.1 .
RUN ldconfig
-#debug
-#RUN ldd /opt/oai-gnb/bin/nr-softmodem.Rel15
-#RUN ldd /usr/local/lib/liboai_eth_transpro.so.Rel15
-#RUN ldd /usr/local/lib/libtcp_bridge_oai.so.Rel15
-#RUN ldd /usr/local/lib/librfsimulator.so.Rel15
-#RUN ldd /usr/local/lib/liboai_usrpdevif.so.Rel15
-#RUN ldd /usr/local/lib/libcoding.so
-#RUN ldd /usr/local/lib/libparams_libconfig.so
-#RUN ldd /usr/local/lib/libdfts.so
-#RUN ldd /usr/local/lib/libldpc.so
-#RUN ldd /usr/local/lib/libldpc_optim.so
-#RUN ldd /usr/local/lib/libldpc_optim8seg.so
-#RUN ldd /usr/local/lib/libldpc_orig.so
# Copy the relevant configuration files for gNB
WORKDIR /opt/oai-gnb/etc
-COPY --from=gnb-build /oai-ran/ci-scripts/conf_files/gnb.* ./
+COPY --from=gnb-build /oai-ran/docker/etc .
WORKDIR /opt/oai-gnb
#EXPOSE 2152/udp # S1U, GTP/UDP
@@ -122,6 +109,5 @@ WORKDIR /opt/oai-gnb
#EXPOSE 50000/udp # IF5 / ORI (control)
#EXPOSE 50001/udp # IF5 / ECPRI (data)
-#CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"]
-#ENTRYPOINT ["/opt/oai-gnb/bin/entrypoint.sh"]
-CMD ["sleep", "infinity"]
+ENTRYPOINT ["/opt/oai-gnb/bin/entrypoint.sh"]
+CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"]
diff --git a/docker/Dockerfile.lteRU.rhel8.2 b/docker/Dockerfile.lteRU.rhel8.2
index 35078de007..e32325ea1b 100644
--- a/docker/Dockerfile.lteRU.rhel8.2
+++ b/docker/Dockerfile.lteRU.rhel8.2
@@ -48,6 +48,7 @@ ENV TZ=Europe/Paris
RUN yum update -y && \
yum install -y --enablerepo="ubi-8-codeready-builder" \
tzdata \
+ procps-ng \
atlas \
net-tools \
iputils \
diff --git a/docker/Dockerfile.lteRU.ubuntu18 b/docker/Dockerfile.lteRU.ubuntu18
index 381d63d9f3..1af5b52df4 100644
--- a/docker/Dockerfile.lteRU.ubuntu18
+++ b/docker/Dockerfile.lteRU.ubuntu18
@@ -50,6 +50,7 @@ RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
tzdata \
+ procps \
software-properties-common \
libblas3 \
libatlas3-base \
diff --git a/docker/Dockerfile.lteUE.rhel8.2 b/docker/Dockerfile.lteUE.rhel8.2
index 731abed1a8..2d540876e3 100644
--- a/docker/Dockerfile.lteUE.rhel8.2
+++ b/docker/Dockerfile.lteUE.rhel8.2
@@ -48,6 +48,7 @@ FROM registry.access.redhat.com/ubi8/ubi:latest as oai-lte-ue
RUN yum update -y && \
yum install -y --enablerepo="ubi-8-codeready-builder" \
lksctp-tools \
+ procps-ng \
nettle \
atlas \
iproute \
diff --git a/docker/Dockerfile.lteUE.ubuntu18 b/docker/Dockerfile.lteUE.ubuntu18
index fcd16f0c15..c6a70a0b50 100644
--- a/docker/Dockerfile.lteUE.ubuntu18
+++ b/docker/Dockerfile.lteUE.ubuntu18
@@ -52,6 +52,7 @@ RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
software-properties-common \
+ procps \
libsctp1 \
libnettle6 \
liblapacke \
diff --git a/docker/Dockerfile.nrUE.rhel8.2 b/docker/Dockerfile.nrUE.rhel8.2
index 01988fd6ff..c8bea16801 100644
--- a/docker/Dockerfile.nrUE.rhel8.2
+++ b/docker/Dockerfile.nrUE.rhel8.2
@@ -25,7 +25,7 @@
#
#---------------------------------------------------------------------
-FROM localhost/ran-build:latest AS nr-ue-build
+FROM ran-build:latest AS nr-ue-build
RUN rm -Rf /oai-ran
WORKDIR /oai-ran
@@ -49,6 +49,7 @@ FROM registry.access.redhat.com/ubi8/ubi:latest as oai-nr-ue
RUN yum update -y && \
yum install -y --enablerepo="ubi-8-codeready-builder" \
lksctp-tools \
+ procps-ng \
nettle \
net-tools \
iputils \
diff --git a/docker/Dockerfile.nrUE.ubuntu18 b/docker/Dockerfile.nrUE.ubuntu18
index c96bcf80ef..ee2160d579 100644
--- a/docker/Dockerfile.nrUE.ubuntu18
+++ b/docker/Dockerfile.nrUE.ubuntu18
@@ -54,6 +54,7 @@ RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
software-properties-common \
libsctp1 \
+ procps \
libnettle6 \
liblapacke \
libatlas3-base \
diff --git a/docker/Dockerfile.phySim.rhel8.2 b/docker/Dockerfile.phySim.rhel8.2
index 4472ece363..2333098bd7 100644
--- a/docker/Dockerfile.phySim.rhel8.2
+++ b/docker/Dockerfile.phySim.rhel8.2
@@ -25,7 +25,7 @@
#
#---------------------------------------------------------------------
-FROM localhost/ran-build:develop AS phy-sim-build
+FROM ran-build:develop AS phy-sim-build
RUN rm -Rf /oai-ran
WORKDIR /oai-ran
diff --git a/docker/Dockerfile.ran.rhel8.2 b/docker/Dockerfile.ran.rhel8.2
index 2e4bd586bf..cc9a1972a1 100644
--- a/docker/Dockerfile.ran.rhel8.2
+++ b/docker/Dockerfile.ran.rhel8.2
@@ -44,8 +44,11 @@ RUN rm -f /etc/rhsm-host && \
file \
psmisc \
git \
+ # python3-pip and pyyaml are used for conf template generation
+ python3-pip
#unzip is needed for protobuf
unzip && \
+ pip3 install --ignore-installed pyyaml && \
echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \
echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf
diff --git a/docker/Dockerfile.ran.ubuntu18 b/docker/Dockerfile.ran.ubuntu18
index 730366da74..4b296408fd 100644
--- a/docker/Dockerfile.ran.ubuntu18
+++ b/docker/Dockerfile.ran.ubuntu18
@@ -42,7 +42,10 @@ RUN apt-get update && \
git \
xxd \
#unzip is needed for protobuf
- unzip
+ unzip \
+ # python3-pip for conf template generation
+ python3-pip && \
+ pip3 install --ignore-installed pyyaml
# In some network environments, GIT proxy is required
RUN /bin/bash -c "if [[ -v NEEDED_GIT_PROXY ]]; then git config --global http.proxy $NEEDED_GIT_PROXY; fi"
@@ -56,4 +59,3 @@ RUN /bin/sh oaienv && \
cd cmake_targets && \
mkdir -p log && \
./build_oai -I -w USRP
-
diff --git a/docker/scripts/enb_entrypoint.sh b/docker/scripts/enb_entrypoint.sh
index 6810a86416..4ac86ef1b7 100755
--- a/docker/scripts/enb_entrypoint.sh
+++ b/docker/scripts/enb_entrypoint.sh
@@ -4,6 +4,8 @@ set -euo pipefail
PREFIX=/opt/oai-enb
RRC_INACTIVITY_THRESHOLD=${RRC_INACTIVITY_THRESHOLD:-0}
+ENABLE_MEASUREMENT_REPORTS=${ENABLE_MEASUREMENT_REPORTS:-no}
+ENABLE_X2=${ENABLE_X2:-no}
# Based another env var, pick one template to use
if [[ -v USE_FDD_CU ]]; then ln -s $PREFIX/etc/cu.fdd.conf $PREFIX/etc/enb.conf; fi
diff --git a/docker/scripts/enb_parameters.yaml b/docker/scripts/enb_parameters.yaml
index 749600f47d..58715a7152 100644
--- a/docker/scripts/enb_parameters.yaml
+++ b/docker/scripts/enb_parameters.yaml
@@ -123,7 +123,7 @@
- key: bands
env: "@UTRA_BAND_ID@"
- - filePrefix: enb.band7.tm1.25PRB.usrpb210
+ - filePrefix: enb.band7.tm1.fr1.25PRB.usrpb210.conf
outputfilename: "enb.fdd.conf"
config:
- key: Active_eNBs
@@ -147,6 +147,10 @@
env: "@NID_CELL@"
- key: N_RB_DL
env: "@NB_PRB@"
+ - key: enable_measurement_reports
+ env: "@ENABLE_MEASUREMENT_REPORTS@"
+ - key: enable_x2
+ env: "@ENABLE_X2@"
- key: ipv4
env: "@MME_S1C_IP_ADDRESS@"
- key: ENB_INTERFACE_NAME_FOR_S1_MME
diff --git a/docker/scripts/generateTemplate.py b/docker/scripts/generateTemplate.py
index 5ce0d146e5..9c45d5d43c 100644
--- a/docker/scripts/generateTemplate.py
+++ b/docker/scripts/generateTemplate.py
@@ -48,18 +48,19 @@ def main():
"du.band7.tm1.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"rru.fdd": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"rru.tdd": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
- "enb.band7.tm1.25PRB.usrpb210": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
+ "enb.band7.tm1.fr1.25PRB.usrpb210.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"enb.band40.tm1.25PRB.FairScheduler.usrpb210": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"rcc.band7.tm1.nfapi": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"rcc.band7.tm1.if4p5.lo.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"rcc.band40.tm1.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
+ "gnb.band78.tm1.fr1.106PRB.usrpb210.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"ue.nfapi": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}',
"ue_sim_ci": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}'
}
print('inputfile = ' + inputfile)
if filePrefix in prefix_outputfile:
outputfile1 = prefix_outputfile[filePrefix]
-
+
directory = f'{data[0]["paths"]["dest_dir"]}'
if not os.path.exists(directory):
os.makedirs(directory, exist_ok=True)
diff --git a/docker/scripts/gnb_entrypoint.sh b/docker/scripts/gnb_entrypoint.sh
new file mode 100755
index 0000000000..09af2753bc
--- /dev/null
+++ b/docker/scripts/gnb_entrypoint.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+set -euo pipefail
+
+PREFIX=/opt/oai-gnb
+ENABLE_X2=${ENABLE_X2:-yes}
+
+# Based another env var, pick one template to use
+if [[ -v USE_TDD_MONO ]]; then ln -s $PREFIX/etc/gnb.tdd.conf $PREFIX/etc/gnb.conf; fi
+
+# Only this template will be manipulated
+CONFIG_FILES=`ls $PREFIX/etc/gnb.conf || true`
+
+for c in ${CONFIG_FILES}; do
+ # grep variable names (format: ${VAR}) from template to be rendered
+ VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${c} | sort | uniq | xargs)
+
+ # create sed expressions for substituting each occurrence of ${VAR}
+ # with the value of the environment variable "VAR"
+ EXPRESSIONS=""
+ for v in ${VARS}; do
+ NEW_VAR=`echo $v | sed -e "s#@##g"`
+ if [[ "${!NEW_VAR}x" == "x" ]]; then
+ echo "Error: Environment variable '${NEW_VAR}' is not set." \
+ "Config file '$(basename $c)' requires all of $VARS."
+ exit 1
+ fi
+ EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
+ done
+ EXPRESSIONS="${EXPRESSIONS#';'}"
+
+ # render template and inline replace config file
+ sed -i "${EXPRESSIONS}" ${c}
+done
+
+# Load the USRP binaries
+if [[ -v USE_B2XX ]]; then
+ /usr/lib/uhd/utils/uhd_images_downloader.py -t b2xx
+elif [[ -v USE_X3XX ]]; then
+ /usr/lib/uhd/utils/uhd_images_downloader.py -t x3xx
+elif [[ -v USE_N3XX ]]; then
+ /usr/lib/uhd/utils/uhd_images_downloader.py -t n3xx
+fi
+
+echo "=================================="
+echo "== Starting gNB soft modem"
+if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
+ echo "Additional option(s): ${USE_ADDITIONAL_OPTIONS}"
+ new_args=()
+ while [[ $# -gt 0 ]]; do
+ new_args+=("$1")
+ shift
+ done
+ for word in ${USE_ADDITIONAL_OPTIONS}; do
+ new_args+=("$word")
+ done
+ echo "${new_args[@]}"
+ exec "${new_args[@]}"
+else
+ echo "$@"
+ exec "$@"
+fi
diff --git a/docker/scripts/gnb_parameters.yaml b/docker/scripts/gnb_parameters.yaml
new file mode 100644
index 0000000000..1992aecff5
--- /dev/null
+++ b/docker/scripts/gnb_parameters.yaml
@@ -0,0 +1,64 @@
+#/*
+# * 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
+# */
+
+---
+- paths:
+ source_dir: "ci-scripts/conf_files/"
+ dest_dir: docker/etc
+
+- configurations:
+ - filePrefix: gnb.band78.tm1.fr1.106PRB.usrpb210.conf
+ outputfilename: "gnb.tdd.conf"
+ config:
+ - key: Active_gNBs
+ env: "@GNB_NAME@"
+ - key: gNB_name
+ env: "@GNB_NAME@"
+ - key: plmn_list
+ env:
+ mcc: "@MCC@"
+ mnc: "@MNC@"
+ mnc_length: "@MNC_LENGTH@"
+ - key: tracking_area_code
+ env: "@TAC@"
+ - key: enable_x2
+ env: "@ENABLE_X2@"
+ - key: ipv4
+ env: "@ENB_X2_IP_ADDRESS@"
+ - key: GNB_INTERFACE_NAME_FOR_S1_MME
+ env: "@GNB_S1C_IF_NAME@"
+ - key: GNB_IPV4_ADDRESS_FOR_S1_MME
+ env: "@GNB_S1C_IP_ADDRESS@"
+ - key: GNB_INTERFACE_NAME_FOR_S1U
+ env: "@GNB_S1U_IF_NAME@"
+ - key: GNB_IPV4_ADDRESS_FOR_S1U
+ env: "@GNB_S1U_IP_ADDRESS@"
+ - key: GNB_IPV4_ADDRESS_FOR_X2C
+ env: "@GNB_X2_IP_ADDRESS@"
+ - key: rrc_inactivity_threshold
+ env: "@RRC_INACTIVITY_THRESHOLD@"
+ - key: FLEXRAN_ENABLED
+ env: "@FLEXRAN_ENABLED@"
+ - key: FLEXRAN_INTERFACE_NAME
+ env: "@FLEXRAN_INTERFACE_NAME@"
+ - key: FLEXRAN_IPV4_ADDRESS
+ env: "@FLEXRAN_IPV4_ADDRESS@"
+