diff --git a/ci-scripts/Jenkinsfile-GitLab-Container b/ci-scripts/Jenkinsfile-GitLab-Container
index 61b3774d0f..2649198cc3 100644
--- a/ci-scripts/Jenkinsfile-GitLab-Container
+++ b/ci-scripts/Jenkinsfile-GitLab-Container
@@ -288,7 +288,7 @@ pipeline {
when { expression {do4Gtest} }
steps {
script {
- triggerSlaveJob ('RAN-LTE-FDD-LTEBOX-Container', 'RAN-LTE-FDD-LTEBOX-Container')
+ triggerSlaveJob ('RAN-LTE-FDD-LTEBOX-Container', 'LTE-FDD-LTEBOX-Container')
}
}
post {
@@ -304,11 +304,32 @@ pipeline {
}
}
}
+ // Pipeline to test OAI LTE-UE
+ stage ("LTE-B200-FDD-OAIUE-OAICN4G-Container") {
+ when { expression {do4Gtest} }
+ steps {
+ script {
+ triggerSlaveJob ('RAN-LTE-FDD-OAIUE-OAICN4G-Container', 'LTE-FDD-OAIUE-OAICN4G-Container')
+ }
+ }
+ post {
+ always {
+ script {
+ finalizeSlaveJob('RAN-LTE-FDD-OAIUE-OAICN4G-Container')
+ }
+ }
+ failure {
+ script {
+ currentBuild.result = 'FAILURE'
+ }
+ }
+ }
+ }
stage ("LTE-B200-TDD-LTEBOX-Container") {
when { expression {do4Gtest} }
steps {
script {
- triggerSlaveJob ('RAN-LTE-TDD-LTEBOX-Container', 'RAN-LTE-TDD-LTEBOX-Container')
+ triggerSlaveJob ('RAN-LTE-TDD-LTEBOX-Container', 'LTE-TDD-LTEBOX-Container')
}
}
post {
@@ -468,7 +489,7 @@ pipeline {
when { expression {do5Gtest} }
steps {
script {
- triggerSlaveJob ('RAN-SA-OAIUE-CN5G', 'RAN-SA-OAIUE-CN5G')
+ triggerSlaveJob ('RAN-SA-OAIUE-CN5G', 'SA-OAIUE-CN5G')
}
}
post {
diff --git a/ci-scripts/ci_ueinfra.yaml b/ci-scripts/ci_ueinfra.yaml
index 4b06117c0f..9ddee1d779 100644
--- a/ci-scripts/ci_ueinfra.yaml
+++ b/ci-scripts/ci_ueinfra.yaml
@@ -130,6 +130,13 @@ oai_ue_caracal:
IF: oaitun_ue1
MTU: 1500
+lte_oai_ue_carabe:
+ Host: carabe
+ NetworkScript: docker exec lte-b200-ue-fdd-10Mhz-tm1 ip a show dev oaitun_ue1
+ CmdPrefix: docker exec lte-b200-ue-fdd-10Mhz-tm1
+ IF: oaitun_ue1
+ MTU: 1500
+
rfsim5g_gnb_nos1:
Host: localhost
NetworkScript: docker exec rfsim5g-oai-gnb ip a show dev oaitun_enb1
diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py
index 9a54f258eb..17243cbd08 100644
--- a/ci-scripts/cls_containerize.py
+++ b/ci-scripts/cls_containerize.py
@@ -742,6 +742,7 @@ class Containerize():
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
+ logging.debug('\u001B[1m Pulling image(s) on server: ' + lIpAddr + '\u001B[0m')
myCmd = cls_cmd.getConnection(lIpAddr)
imagePrefix = 'porcepix.sboai.cs.eurecom.fr'
response = myCmd.run(f'docker login -u oaicicd -p oaicicd {imagePrefix}')
@@ -1005,7 +1006,7 @@ class Containerize():
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
self.exitStatus = 1
# use function for UE log analysis, when oai-nr-ue container is used
- elif 'oai-nr-ue' in services:
+ elif 'oai-nr-ue' in services or 'lte_ue0' in services:
self.exitStatus == 0
logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
logStatus = cls_oaicitest.OaiCiTest().AnalyzeLogFile_UE(f'{filename}', HTML, RAN)
diff --git a/ci-scripts/conf_files/lteue.usim-ci-magma.conf b/ci-scripts/conf_files/lteue.usim-ci-magma.conf
new file mode 100644
index 0000000000..0be59ed51d
--- /dev/null
+++ b/ci-scripts/conf_files/lteue.usim-ci-magma.conf
@@ -0,0 +1,45 @@
+# List of known PLMNS
+PLMN: {
+ PLMN0: {
+ FULLNAME="OpenAirInterface";
+ SHORTNAME="OAICN";
+ MNC="92";
+ MCC="208";
+ };
+};
+
+UE0:
+{
+ USER: {
+ IMEI="356113022094149";
+ MANUFACTURER="OAI";
+ MODEL="LTE SoftModem";
+ PIN="0000";
+ };
+
+ SIM: {
+ MSIN="1000000003";
+ USIM_API_K="fec86ba6eb707ed08905757b1bb44b8f";
+ OPC="c42449363bbad02b66d16bc975d77cc1";
+ MSISDN="001011234561010";
+ };
+
+ # Home PLMN Selector with Access Technology
+ HPLMN= "20892";
+
+ # User controlled PLMN Selector with Access Technology
+ UCPLMN_LIST = ();
+
+ # Operator PLMN List
+ OPLMN_LIST = ("20892");
+
+ # Operator controlled PLMN Selector with Access Technology
+ OCPLMN_LIST = ();
+
+ # Forbidden plmns
+ FPLMN_LIST = ();
+
+ # Equivalent home plmns
+ EHPLMN_LIST = ();
+
+};
diff --git a/ci-scripts/epc.py b/ci-scripts/epc.py
index 3505e9bdc2..af4699688d 100644
--- a/ci-scripts/epc.py
+++ b/ci-scripts/epc.py
@@ -643,7 +643,7 @@ class EPCManagement():
mySSH = SSH.SSHConnection()
mySSH.open(self.IPAddress, self.UserName, self.Password)
mySSH.command('docker-compose --version', '\$', 5)
- result = re.search('docker-compose version 1', mySSH.getBefore())
+ result = re.search('docker-compose version 1|Docker Compose version v2', mySSH.getBefore())
if result is None:
mySSH.close()
HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
@@ -659,6 +659,7 @@ class EPCManagement():
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
mySSH.command('if [ -d ' + self.SourceCodePath + '/logs ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/logs ; fi', '\$', 5)
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts ' + self.SourceCodePath + '/logs', '\$', 5)
+ mySSH.command('rm -f ' + self.SourceCodePath + '/*.log', '\$', 5)
# deploying and configuring the cassandra database
# container names and services are currently hard-coded.
diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml
new file mode 100644
index 0000000000..4d42fb4153
--- /dev/null
+++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml
@@ -0,0 +1,174 @@
+
+
+ test-fdd-10-tm1
+ Test-FDD-10MHz-TM1
+ tasks
+
+100000
+100001
+111110
+111111
+030111
+000001
+030311
+000002
+040511 040613 040616 040651
+030411
+000001
+030211
+200000
+200001
+
+
+
+
+ Pull_Local_Registry
+ Pull Images from Local Registry
+ 0
+ oai-enb
+
+
+ Pull_Local_Registry
+ Pull Images from Local Registry
+ 1
+ oai-lte-ue
+
+
+ Custom_Command
+ Disable Sleep States (hutch)
+ hutch
+ sudo cpupower idle-set -D 0
+
+
+ Custom_Command
+ Disable Sleep States (carabe)
+ carabe
+ sudo cpupower idle-set -D 0
+
+
+ Custom_Command
+ Enable Sleep States (hutch)
+ hutch
+ sudo cpupower idle-set -E
+
+
+ Custom_Command
+ Enable Sleep States (carabe)
+ carabe
+ sudo cpupower idle-set -E
+
+
+
+ Deploy_Object
+ Deploy eNB (FDD/Band7/10MHz/B200) in a container
+ ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_magma
+ 0
+ 0
+
+
+
+ Deploy_Object
+ Deploy LTE-UE (FDD/Band7/10MHz/B200) in a container
+ ci-scripts/yaml_files/lte_b200_fdd_10Mhz_oai_ue_magma
+ 1
+ 1
+
+
+
+ IdleSleep
+ Sleep
+ 5
+
+
+
+ IdleSleep
+ Sleep
+ 10
+
+
+
+ Undeploy_Object
+ Undeploy eNB
+ ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_magma
+ 0
+ 0
+
+
+
+ Undeploy_Object
+ Undeploy LTE-UE
+ ci-scripts/yaml_files/lte_b200_fdd_10Mhz_oai_ue_magma
+ 1
+ 1
+
+
+
+ Ping
+ ping (10MHz - 20 sec)
+ -c 20 192.168.61.200
+ 5
+ lte_oai_ue_carabe
+
+
+
+ Iperf
+ iperf (10MHz - DL/10Mbps/UDP)(30 sec)(balanced profile)
+ -u -b 10M -t 30 -i 1
+ 50
+ single-ue
+ DL
+ lte_oai_ue_carabe
+
+
+
+ Iperf
+ iperf (10MHz - DL/TCP)(30 sec)(single-ue profile)
+ -t 30 -i 1 -fm
+ 50
+ single-ue
+ DL
+ lte_oai_ue_carabe
+
+
+
+ Iperf
+ iperf (10MHz - UL/10Mbps/UDP)(30 sec)(balanced profile)
+ -u -b 10M -t 30 -i 1
+ 50
+ single-ue
+ UL
+ lte_oai_ue_carabe
+
+
+
+ Iperf
+ iperf (10MHz - UL/TCP)(30 sec)(balanced profile)
+ -t 30 -i 1 -fm
+ 50
+ balanced
+ UL
+ lte_oai_ue_carabe
+
+
+
diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue_cleanup.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue_cleanup.xml
new file mode 100644
index 0000000000..33df87d924
--- /dev/null
+++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue_cleanup.xml
@@ -0,0 +1,45 @@
+
+
+ images-clean-up
+ Images Clean-Up
+ trash
+
+222222
+333333
+
+
+
+
+ Clean_Test_Server_Images
+ Clean Test Images on eNB Test Server
+ 0
+
+
+
+ Clean_Test_Server_Images
+ Clean Test Images on LTE-UE Test Server
+ 1
+
+
+
diff --git a/ci-scripts/xml_files/lte_oai_cn_deploy.xml b/ci-scripts/xml_files/lte_oai_cn_deploy.xml
new file mode 100644
index 0000000000..0279c1f3b3
--- /dev/null
+++ b/ci-scripts/xml_files/lte_oai_cn_deploy.xml
@@ -0,0 +1,39 @@
+
+
+ epc-deploy-tab
+ EPC-Deploy
+ log-in
+
+ 000100
+
+
+
+
+
+ Deploy_EPC
+ Deploy all EPC containers
+ yaml_files/magma_lte_20892
+
+
+
diff --git a/ci-scripts/xml_files/lte_oai_cn_undeploy.xml b/ci-scripts/xml_files/lte_oai_cn_undeploy.xml
new file mode 100644
index 0000000000..76192efea1
--- /dev/null
+++ b/ci-scripts/xml_files/lte_oai_cn_undeploy.xml
@@ -0,0 +1,38 @@
+
+
+ epc-undeploy-tab
+ EPC-Undeploy
+ log-out
+
+ 000200
+
+
+
+
+
+ Undeploy_EPC
+ Undeploy all EPC containers
+
+
+
diff --git a/ci-scripts/yaml_files/lte_b200_fdd_10Mhz_oai_ue_magma/docker-compose.yml b/ci-scripts/yaml_files/lte_b200_fdd_10Mhz_oai_ue_magma/docker-compose.yml
new file mode 100644
index 0000000000..74dbb2058e
--- /dev/null
+++ b/ci-scripts/yaml_files/lte_b200_fdd_10Mhz_oai_ue_magma/docker-compose.yml
@@ -0,0 +1,21 @@
+version: '3.8'
+
+services:
+ lte_ue0:
+ image: oai-lte-ue:latest
+ privileged: true
+ container_name: lte-b200-ue-fdd-10Mhz-tm1
+ environment:
+ USE_B2XX: 'yes'
+ USE_ADDITIONAL_OPTIONS: -C 2680000000 -r 50 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --log_config.global_log_options level,nocolor,time
+ volumes:
+ - ../../conf_files/lteue.usim-ci-magma.conf:/opt/oai-lte-ue/etc/ue_usim.conf
+ - /dev:/dev
+ network_mode: "host"
+ healthcheck:
+ # pgrep does NOT work
+ test: /bin/bash -c "ps aux | grep -v grep | grep -c softmodem"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
diff --git a/ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_magma/docker-compose.yml b/ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_magma/docker-compose.yml
new file mode 100644
index 0000000000..70a1fd23b2
--- /dev/null
+++ b/ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_magma/docker-compose.yml
@@ -0,0 +1,20 @@
+version: '3.8'
+
+services:
+ enb_mono_fdd:
+ image: oai-enb:latest
+ privileged: true
+ container_name: lte-b200-enb-fdd-10Mhz-tm1
+ environment:
+ USE_B2XX: 'yes'
+ USE_ADDITIONAL_OPTIONS: --RUs.[0].max_rxgain 120 --eNBs.[0].mme_ip_address.[0].ipv4 192.168.61.195 --log_config.global_log_options level,nocolor,time,line_num,function
+ volumes:
+ - ../../conf_files/enb.band7.50prb.usrpb200.tm1.conf:/opt/oai-enb/etc/enb.conf
+ - /dev:/dev
+ network_mode: "host"
+ healthcheck:
+ # pgrep does NOT work
+ test: /bin/bash -c "ps aux | grep -v grep | grep -c softmodem"
+ interval: 10s
+ timeout: 5s
+ retries: 5
diff --git a/ci-scripts/yaml_files/magma_lte_20892/docker-compose.yml b/ci-scripts/yaml_files/magma_lte_20892/docker-compose.yml
new file mode 100644
index 0000000000..eef386304c
--- /dev/null
+++ b/ci-scripts/yaml_files/magma_lte_20892/docker-compose.yml
@@ -0,0 +1,198 @@
+version: '3.8'
+
+services:
+ cassandra:
+ image: cassandra:2.1
+ container_name: prod-cassandra
+ networks:
+ private_net:
+ ipv4_address: 192.168.68.2
+ environment:
+ CASSANDRA_CLUSTER_NAME: "OAI HSS Cluster"
+ CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch
+ healthcheck:
+ test: /bin/bash -c "nodetool status"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ db_init:
+ image: cassandra:2.1
+ container_name: prod-db-init
+ depends_on: [cassandra]
+ deploy:
+ restart_policy:
+ condition: on-failure
+ max_attempts: 10
+ networks:
+ private_net:
+ ipv4_address: 192.168.68.4
+ volumes:
+ - ./oai_db.cql:/home/oai_db.cql
+ entrypoint: /bin/bash -c "cqlsh --file /home/oai_db.cql 192.168.68.2 && echo 'OK'"
+
+ oai_hss:
+ image: oaisoftwarealliance/oai-hss:develop
+ container_name: prod-oai-hss
+ privileged: true
+ depends_on: [cassandra]
+ networks:
+ private_net:
+ ipv4_address: 192.168.68.3
+ public_net:
+ ipv4_address: 192.168.61.194
+ environment:
+ TZ: Europe/Paris
+ REALM: openairinterface.org
+ HSS_FQDN: hss.openairinterface.org
+ PREFIX: /openair-hss/etc
+ cassandra_Server_IP: 192.168.68.2
+ OP_KEY: 1006020f0a478bf6b699f15c062e42b3
+ LTE_K: FEC86BA6EB707ED08905757B1BB44B8F
+ APN1: oai.ipv4
+ APN2: oai2.ipv4
+ FIRST_IMSI: 208921000000001
+ NB_USERS: 10
+ healthcheck:
+ test: /bin/bash -c "pgrep oai_hss"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ redis:
+ image: redis:6.0.5
+ container_name: prod-redis
+ privileged: true
+ networks:
+ public_net:
+ ipv4_address: 192.168.61.198
+ volumes:
+ - ./redis_extern.conf:/usr/local/etc/redis/redis.conf
+ entrypoint: /bin/bash -c "redis-server /usr/local/etc/redis/redis.conf"
+ healthcheck:
+ test: /bin/bash -c "redis-cli -h 192.168.61.198 -p 6380 ping"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ magma_mme:
+ image: magma-mme:production
+ container_name: prod-magma-mme
+ hostname: mme
+ privileged: true
+ depends_on: [oai_hss, redis]
+ networks:
+ public_net:
+ ipv4_address: 192.168.61.195
+ environment:
+ TZ: Europe/Paris
+ REALM: openairinterface.org
+ PREFIX: /openair-mme/etc
+ HSS_HOSTNAME: hss
+ HSS_FQDN: hss.openairinterface.org
+ HSS_REALM: openairinterface.org
+ MME_FQDN: mme.openairinterface.org
+ FEATURES: mme_oai
+ volumes:
+ - ./mme_fd.sprint.conf:/magma-mme/etc/mme_fd.conf.tmplt
+ - ./mme.conf:/magma-mme/etc/mme.conf
+ - ./entrypoint.sh:/magma-mme/bin/entrypoint.sh
+ entrypoint: /bin/bash -c "/magma-mme/bin/entrypoint.sh"
+ healthcheck:
+ test: /bin/bash -c "pgrep oai_mme"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ oai_spgwc:
+ image: oaisoftwarealliance/oai-spgwc:develop
+ privileged: true
+ depends_on: [magma_mme]
+ container_name: prod-oai-spgwc
+ networks:
+ public_net:
+ ipv4_address: 192.168.61.196
+ environment:
+ TZ: Europe/Paris
+ SGW_INTERFACE_NAME_FOR_S11: eth0
+ PGW_INTERFACE_NAME_FOR_SX: eth0
+ DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100
+ DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
+ PUSH_PROTOCOL_OPTION: 'true'
+ APN_NI_1: oai.ipv4
+ APN_NI_2: oai2.ipv4
+ DEFAULT_APN_NI_1: oai.ipv4
+ UE_IP_ADDRESS_POOL_1: '12.1.1.2 - 12.1.1.254'
+ UE_IP_ADDRESS_POOL_2: '12.0.0.2 - 12.0.0.254'
+ MCC: '208'
+ MNC: '92'
+ MNC03: '092'
+ TAC: 1
+ GW_ID: 1
+ REALM: openairinterface.org
+ UE_MTU_IPV4: 1500
+ healthcheck:
+ test: /bin/bash -c "pgrep oai_spgwc"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ oai_spgwu:
+ image: oaisoftwarealliance/oai-spgwu-tiny:develop
+ privileged: true
+ container_name: prod-oai-spgwu-tiny
+ depends_on: [oai_spgwc]
+ networks:
+ public_net:
+ ipv4_address: 192.168.61.197
+ environment:
+ TZ: Europe/Paris
+ PID_DIRECTORY: /var/run
+ INSTANCE: 1
+ SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP: eth0
+ PGW_INTERFACE_NAME_FOR_SGI: eth0
+ SGW_INTERFACE_NAME_FOR_SX: eth0
+ SPGWC0_IP_ADDRESS: 192.168.61.196
+ NETWORK_UE_IP: '12.1.1.0/24'
+ NETWORK_UE_NAT_OPTION: 'yes'
+ MCC: '208'
+ MNC: '92'
+ MNC03: '092'
+ TAC: 1
+ GW_ID: 1
+ REALM: openairinterface.org
+ healthcheck:
+ test: /bin/bash -c "pgrep oai_spgwu"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+ trf_gen:
+ image: oaisoftwarealliance/trf-gen-cn5g:focal
+ privileged: true
+ container_name: prod-trf-gen
+ networks:
+ public_net:
+ ipv4_address: 192.168.61.200
+ entrypoint: /bin/bash -c "ip route add 12.1.1.0/24 via 192.168.61.197 dev eth0; sleep infinity"
+ healthcheck:
+ test: /bin/bash -c "ip route | grep '12.1.1.0'"
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+networks:
+ private_net:
+ name: prod-oai-private-net
+ ipam:
+ config:
+ - subnet: 192.168.68.0/26
+ driver_opts:
+ com.docker.network.bridge.name: "oai-priv-net"
+ public_net:
+ name: prod-oai-public-net
+ ipam:
+ config:
+ - subnet: 192.168.61.192/26
+ driver_opts:
+ com.docker.network.bridge.name: "oai-pub-net"
diff --git a/ci-scripts/yaml_files/magma_lte_20892/entrypoint.sh b/ci-scripts/yaml_files/magma_lte_20892/entrypoint.sh
new file mode 100755
index 0000000000..859ff7d98f
--- /dev/null
+++ b/ci-scripts/yaml_files/magma_lte_20892/entrypoint.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+INSTANCE=1
+PREFIX='/magma-mme/etc'
+MY_REALM='openairinterface.org'
+
+declare -A MME_CONF
+
+pushd $PREFIX
+MME_CONF[@MME_S6A_IP_ADDR@]="192.168.61.195"
+MME_CONF[@INSTANCE@]=$INSTANCE
+MME_CONF[@PREFIX@]=$PREFIX
+MME_CONF[@REALM@]=$MY_REALM
+MME_CONF[@MME_FQDN@]="mme.${MME_CONF[@REALM@]}"
+MME_CONF[@HSS_HOSTNAME@]='hss'
+MME_CONF[@HSS_FQDN@]="${MME_CONF[@HSS_HOSTNAME@]}.${MME_CONF[@REALM@]}"
+MME_CONF[@HSS_IP_ADDR@]="192.168.61.194"
+
+cp mme_fd.conf.tmplt $PREFIX/mme_fd.conf
+
+for K in "${!MME_CONF[@]}"; do
+ egrep -lRZ "$K" $PREFIX/mme_fd.conf | xargs -0 -l sed -i -e "s|$K|${MME_CONF[$K]}|g"
+ ret=$?;[[ ret -ne 0 ]] && echo "Tried to replace $K with ${MME_CONF[$K]}"
+done
+
+sed -i -e "s@etc/freeDiameter@etc@" /magma-mme/etc/mme_fd.conf
+sed -i -e "s@bind: 127.0.0.1@bind: 192.168.61.198@" /etc/magma/redis.yml
+# Generate freeDiameter certificate
+popd
+cd /magma-mme/scripts
+./check_mme_s6a_certificate $PREFIX mme.${MME_CONF[@REALM@]}
+
+cd /magma-mme
+nohup /magma-mme/bin/sctpd > /var/log/sctpd.log 2>&1 &
+sleep 5
+/magma-mme/bin/oai_mme -c /magma-mme/etc/mme.conf
diff --git a/ci-scripts/yaml_files/magma_lte_20892/mme.conf b/ci-scripts/yaml_files/magma_lte_20892/mme.conf
new file mode 100644
index 0000000000..38f53ed354
--- /dev/null
+++ b/ci-scripts/yaml_files/magma_lte_20892/mme.conf
@@ -0,0 +1,133 @@
+# generated by generate_mme_config_script.py
+MME :
+{
+ REALM = "openairinterface.org"
+ PID_DIRECTORY = "/var/run";
+ MAXENB = 8; # power of 2
+ MAXUE = 16; # power of 2
+ RELATIVE_CAPACITY = 10;
+
+ EMERGENCY_ATTACH_SUPPORTED = "no";
+ UNAUTHENTICATED_IMSI_SUPPORTED = "no";
+
+ # EPS network feature support
+ EPS_NETWORK_FEATURE_SUPPORT_IMS_VOICE_OVER_PS_SESSION_IN_S1 = "no"; # DO NOT CHANGE
+ EPS_NETWORK_FEATURE_SUPPORT_EMERGENCY_BEARER_SERVICES_IN_S1_MODE = "no"; # DO NOT CHANGE
+ EPS_NETWORK_FEATURE_SUPPORT_LOCATION_SERVICES_VIA_EPC = "no"; # DO NOT CHANGE
+ EPS_NETWORK_FEATURE_SUPPORT_EXTENDED_SERVICE_REQUEST = "no"; # DO NOT CHANGE
+
+ # Display statistics about whole system (expressed in seconds)
+ MME_STATISTIC_TIMER = 10;
+ IP_CAPABILITY = "IPV4"; # UE PDN_TYPE
+ USE_STATELESS = "";
+
+ INTERTASK_INTERFACE :
+ {
+ # max queue size per task
+ ITTI_QUEUE_SIZE = 2000000;
+ };
+
+ S6A :
+ {
+ S6A_CONF = "/magma-mme/etc/mme_fd.conf"; # YOUR MME freeDiameter config file path
+ HSS_HOSTNAME = "hss.openairinterface.org";
+ HSS_REALM = "openairinterface.org";
+ };
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 8;
+ SCTP_OUTSTREAMS = 8;
+ };
+
+ # ------- S1AP definitions
+ S1AP :
+ {
+ # outcome drop timer value (seconds)
+ S1AP_OUTCOME_TIMER = 10;
+ };
+
+ # ------- MME served GUMMEIs
+ GUMMEI_LIST = (
+ { MCC="208" ; MNC="92"; MME_GID="32768" ; MME_CODE="3"; }
+ );
+
+ # ------- MME served TAIs
+ TAI_LIST = (
+ {MCC="208" ; MNC="92"; TAC = "1"; }
+ );
+
+ TAC_LIST = (
+ {MCC="208" ; MNC="92"; TAC = "1"; }
+ );
+
+ CSFB :
+ {
+ NON_EPS_SERVICE_CONTROL = "OFF";
+ CSFB_MCC = "208";
+ CSFB_MNC = "92";
+ LAC = "1";
+ };
+ NAS :
+ {
+ ORDERED_SUPPORTED_INTEGRITY_ALGORITHM_LIST = [ "EIA2" , "EIA1" , "EIA0" ];
+ ORDERED_SUPPORTED_CIPHERING_ALGORITHM_LIST = [ "EEA0" , "EEA1" , "EEA2" ];
+ T3402 = 1 # in minutes (default is 12 minutes)
+ T3412 = 54 # in minutes (default is 54 minutes, network dependent)
+ T3422 = 6 # in seconds (default is 6s)
+ T3450 = 6 # in seconds (default is 6s)
+ T3460 = 6 # in seconds (default is 6s)
+ T3470 = 6 # in seconds (default is 6s)
+ T3485 = 8 # UNUSED in seconds (default is 8s)
+ T3486 = 8 # UNUSED in seconds (default is 8s)
+ T3489 = 4 # UNUSED in seconds (default is 4s)
+ T3495 = 8 # UNUSED in seconds (default is 8s)
+ };
+
+ SGS :
+ {
+ TS6_1 = 10 # in seconds (default is 10s)
+ TS8 = 4 # in seconds (default is 4s)
+ TS9 = 2 # in seconds (default is 4s)
+ TS10 = 4 # in seconds (default is 4s)
+ TS13 = 4 # in seconds (default is 4s)
+ };
+
+ NETWORK_INTERFACES :
+ {
+ MME_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ MME_IPV4_ADDRESS_FOR_S1_MME = "192.168.61.195/24";
+ MME_INTERFACE_NAME_FOR_S11_MME = "eth0";
+ MME_IPV4_ADDRESS_FOR_S11_MME = "192.168.61.195/24";
+ MME_PORT_FOR_S11_MME = 2123;
+ };
+
+ LOGGING :
+ {
+ OUTPUT = "CONSOLE";
+ THREAD_SAFE = "no";
+ COLOR = "no";
+
+ SCTP_LOG_LEVEL = "ERROR";
+ GTPV1U_LOG_LEVEL = "INFO";
+ SPGW_APP_LOG_LEVEL = "INFO";
+ UDP_LOG_LEVEL = "INFO";
+ S1AP_LOG_LEVEL = "DEBUG";
+ NAS_LOG_LEVEL = "INFO";
+ MME_APP_LOG_LEVEL = "DEBUG";
+ GTPV2C_LOG_LEVEL = "INFO";
+ S11_LOG_LEVEL = "DEBUG";
+ S6A_LOG_LEVEL = "DEBUG";
+ UTIL_LOG_LEVEL = "INFO";
+ ITTI_LOG_LEVEL = "ERROR";
+ MME_SCENARIO_PLAYER_LOG_LEVEL = "ERROR";
+ ASN1_VERBOSITY = "INFO";
+ };
+
+ S-GW :
+ {
+ SGW_IPV4_ADDRESS_FOR_S11 = "192.168.61.196";
+ };
+};
diff --git a/ci-scripts/yaml_files/magma_lte_20892/mme_fd.sprint.conf b/ci-scripts/yaml_files/magma_lte_20892/mme_fd.sprint.conf
new file mode 100644
index 0000000000..6f87ed8c2b
--- /dev/null
+++ b/ci-scripts/yaml_files/magma_lte_20892/mme_fd.sprint.conf
@@ -0,0 +1,169 @@
+# -------- Local ---------
+
+# Uncomment if the framework cannot resolv it.
+Identity = "@MME_FQDN@";
+Realm = "@REALM@";
+
+# TLS configuration (see previous section)
+TLS_Cred = "@PREFIX@/freeDiameter/mme.cert.pem",
+ "@PREFIX@/freeDiameter/mme.key.pem";
+TLS_CA = "@PREFIX@/freeDiameter/mme.cacert.pem";
+
+# Disable use of TCP protocol (only listen and connect in SCTP)
+# Default : TCP enabled
+No_SCTP;
+
+# This option is ignored if freeDiameter is compiled with DISABLE_SCTP option.
+# Prefer TCP instead of SCTP for establishing new connections.
+# This setting may be overwritten per peer in peer configuration blocs.
+# Default : SCTP is attempted first.
+Prefer_TCP;
+
+
+No_IPv6;
+
+# Overwrite the number of SCTP streams. This value should be kept low,
+# especially if you are using TLS over SCTP, because it consumes a lot of
+# resources in that case. See tickets 19 and 27 for some additional details on
+# this.
+# Limit the number of SCTP streams
+SCTP_streams = 3;
+
+
+# By default, freeDiameter acts as a Diameter Relay Agent by forwarding all
+# messages it cannot handle locally. This parameter disables this behavior.
+NoRelay;
+
+# Use RFC3588 method for TLS protection, where TLS is negociated after CER/CEA exchange is completed
+# on the unsecure connection. The alternative is RFC6733 mechanism, where TLS protects also the
+# CER/CEA exchange on a dedicated secure port.
+# This parameter only affects outgoing connections.
+# The setting can be also defined per-peer (see Peers configuration section).
+# Default: use RFC6733 method with separate port for TLS.
+
+#TLS_old_method;
+
+AppServThreads = 4;
+
+# Specify the addresses on which to bind the listening server. This must be
+# specified if the framework is unable to auto-detect these addresses, or if the
+# auto-detected values are incorrect. Note that the list of addresses is sent
+# in CER or CEA message, so one should pay attention to this parameter if some
+# adresses should be kept hidden.
+ListenOn = "@MME_S6A_IP_ADDR@";
+
+Port = 3870;
+SecPort = 5870;
+
+# -------- Extensions ---------
+
+# Uncomment (and create rtd.conf) to specify routing table for this peer.
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_default.fdx" : "rtd.conf";
+
+#LoadExtension = "/usr/local/lib/freeDiameter/_sample.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/app_acct.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/app_diameap.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/app_radgw.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/app_redirect.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/app_sip.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dbg_interactive.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dbg_monitor.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dbg_msg_dumps.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dbg_msg_timings.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dbg_rt.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_3gpp2_avps.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_CreditControl.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_CxDx.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Gx.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_NAS.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Ro.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Rx.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_S6mS6n.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_SGd.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_SLh.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Sd.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Sh.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_T4.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_T6aT6bT7.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Tsp.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_dcca.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_dcca_3gpp.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_dcca_starent.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_draftload_avps.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_eap.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_etsi283034_avps.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_legacy_xml.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_mip6a.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_mip6i.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_nas_mipv6.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_nasreq.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4004_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4006bis_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4072_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc4590_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5447_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5580_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5777_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc5778_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc6734_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc6942_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7155_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7683_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_rfc7944_avps.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_sip.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29061_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29128_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29154_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29173_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29212_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29214_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29215_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29217_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29229_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29272_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29273_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29329_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29336_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29337_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29338_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29343_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29344_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29345_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29368_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts29468_avps.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_ts32299_avps.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_busypeers.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_default.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_ereg.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_ignore_dh.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_load_balance.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_randomize.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/rt_redirect.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/test_acct.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/test_app.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/test_hss.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/test_netemul.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/test_rt_any.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/test_sip.fdx";
+#LoadExtension = "/usr/local/lib/freeDiameter/dict_Rf.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_S6as6d.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_S6t.fdx";
+LoadExtension = "/usr/local/lib/freeDiameter/dict_S6c.fdx";
+
+
+# -------- Peers ---------
+
+# The framework will actively attempt to establish and maintain a connection
+# with the peers listed here.
+# For only accepting incoming connections, see the acl_wl.fx extension.
+
+# ConnectPeer
+# Declare a remote peer to which this peer must maintain a connection.
+# In addition, this allows specifying non-default parameters for this peer only
+# (for example disable SCTP with this peer, or use RFC3588-flavour TLS).
+# Note that by default, if a peer is not listed as a ConnectPeer entry, an
+# incoming connection from this peer will be rejected. If you want to accept
+# incoming connections from other peers, see the acl_wl.fdx? extension which
+# allows exactly this.
+
+ConnectPeer= "@HSS_FQDN@" { ConnectTo = "@HSS_IP_ADDR@"; No_SCTP ; No_IPv6; Prefer_TCP; No_TLS; port = 3868;};
diff --git a/ci-scripts/yaml_files/magma_lte_20892/redis_extern.conf b/ci-scripts/yaml_files/magma_lte_20892/redis_extern.conf
new file mode 100644
index 0000000000..565524080a
--- /dev/null
+++ b/ci-scripts/yaml_files/magma_lte_20892/redis_extern.conf
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2016-present, Facebook, Inc.
+# All rights reserved.
+#
+# This source code is licensed under the BSD-style license found in the
+# LICENSE file in the root directory of this source tree. An additional grant
+# of patent rights can be found in the PATENTS file in the same directory.
+
+# Jinja template for Redis configuration
+# See the default config file for options and explanations:
+# https://github.com/antirez/redis/blob/unstable/redis.conf
+
+# TODO: make sensible, production-aware config decisions
+
+bind 192.168.61.198
+port 6380
+
+daemonize no
+loglevel notice
+
+timeout 0
+databases 1
+
+dbfilename redis_dump.rdb
+dir /data
+
+# Save the DB on disk
+
+save 900 1
+
+save 300 10
+
+save 60 1000
diff --git a/doc/TESTBenches.md b/doc/TESTBenches.md
index 35aebfe1aa..555511e153 100644
--- a/doc/TESTBenches.md
+++ b/doc/TESTBenches.md
@@ -101,10 +101,13 @@ Webhook
- L2simulator: skips physical layer and uses proxy between gNB and UE, currently only ping
- [RAN-LTE-FDD-LTEBOX-Container](https://jenkins-oai.eurecom.fr/job/RAN-LTE-FDD-LTEBOX-Container/)
- hutch + B210, nano w/ ltebox + 2x UE
- - tests RRC inactivity timers, different bandwidths
+ - tests RRC inactivity timers, different bandwidths, IF4p5 fronthaul
+- [RAN-LTE-FDD-OAIUE-OAICN4G-Container](https://jenkins-oai.eurecom.fr/job/RAN-LTE-FDD-OAIUE-OAICN4G-Container/)
+ - hutch + B210 (eNB), carabe + B210 (4G UE), nano w/ OAI 4GC
+ - tests OAI 4G for 10 MHz/TM1; known to be unstable
- [RAN-LTE-TDD-2x2-Container](https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-LTE-TDD-2x2-Container/)
- obelix + N310, porcepix, nrmodule2 + Quectel
- - TM1 and TM2 test
+ - TM1 and TM2 test, IF4p5 fronthaul
- [RAN-LTE-TDD-LTEBOX-Container](https://jenkins-oai.eurecom.fr/job/RAN-LTE-TDD-LTEBOX-Container/)
- starsky + B210, nano w/ ltebox + 2x UE
- TM1 over bandwidths 5, 10, 20 MHz in Band 40, default scheduler for 20 MHz
@@ -148,23 +151,3 @@ Webhook
- [RAN-SA-AmariS-CN5G](https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-AmariS-CN5G/)
- asterix + N310, amariue (1x UE), porcepix w/ OAI 5GC
- Amarisoft UE simulator: expected to be increased to more UEs
-
-### RAN-CI-develop
-
-***DEFUNCT***: automatically triggered tests, mostly 4G, to be phased out and
-integrated into RAN-Container-Parent
-
-The following defunct pipelines remain to be integrated into RAN-Container-Parent:
-- eNB-CI-IF4p5-FDD-Band7-B210
- - hutch + B210, nano w/ ltebox + 2x UE
- - tests IF4.5 split over bandwidths 5, 10, 20 MHz in Band 7
-- eNB-CI-IF4p5-TDD-Band40-B210
- - starsky + B210, nano w/ ltebox + 2x UE
- - tests IF4.5 split over bandwidths 5, 10, 20 MHz in Band 40
-- eNB-UE-CI-MONO-FDD-Band7-B200
- - hutch + B210 (eNB), carabe + B210 (4G UE), nano w/ ltebox
- - tests OAI 4G for 5 MHz/TM1 with both CN and in noS1 model, MBMS; known to
- be unstable
-- UE-CI-FDD-Band20-B200
- - starsky + B210 (sniffer)
- - Sniff MIB + SIB1 of Orange, SFR
diff --git a/docker/Dockerfile.lteUE.ubuntu20 b/docker/Dockerfile.lteUE.ubuntu20
index 7b09b45b3e..dc7376e644 100644
--- a/docker/Dockerfile.lteUE.ubuntu20
+++ b/docker/Dockerfile.lteUE.ubuntu20
@@ -51,6 +51,7 @@ RUN apt-get update && \
python3 \
python3-six \
python3-requests \
+ libpython3.8 \
libusb-1.0-0 \
iputils-ping \
iproute2 \