diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab
index 6b53230c09..c55fa766cc 100644
--- a/ci-scripts/Jenkinsfile-gitlab
+++ b/ci-scripts/Jenkinsfile-gitlab
@@ -404,26 +404,6 @@ pipeline {
}
}
}
- stage ("Test L2 simulator") {
- when {
- expression {doFullTestsuite}
- }
- steps {
- lock (vmResource) {
- script {
- timeout (time: 30, unit: 'MINUTES') {
- try {
- gitlabCommitStatus(name: "Test L2-sim") {
- sh "./ci-scripts/oai-ci-vm-tool test --workspace $WORKSPACE --variant l2-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
- }
- } catch (Exception e) {
- currentBuild.result = 'FAILURE'
- }
- }
- }
- }
- }
- }
stage ("Destroy all Virtual Machines") {
when {
expression {doMandatoryTests}
@@ -503,6 +483,29 @@ pipeline {
}
}
}
+ stage ("Test F1 - FDD - Band 7 - B210") {
+ when {
+ expression {doFullTestsuite}
+ }
+ steps {
+ script {
+ sh "sleep 60"
+ triggerSlaveJob ('eNB-CI-F1-FDD-Band7-B210', 'Test-F1-FDD-Band7')
+ }
+ }
+ post {
+ always {
+ script {
+ finalizeSlaveJob('eNB-CI-F1-FDD-Band7-B210')
+ }
+ }
+ failure {
+ script {
+ currentBuild.result = 'FAILURE'
+ }
+ }
+ }
+ }
stage ("Test IF4p5 - TDD - Band 40 - B210") {
when {
expression {doFullTestsuite}
diff --git a/ci-scripts/reportTestLocally.sh b/ci-scripts/reportTestLocally.sh
index 19fac7fd78..6ef6b2e254 100755
--- a/ci-scripts/reportTestLocally.sh
+++ b/ci-scripts/reportTestLocally.sh
@@ -1033,116 +1033,6 @@ function report_test {
echo " " >> ./test_simulator_results.html
fi
- ARCHIVES_LOC=archives/l2_sim/test
- if [ -d $ARCHIVES_LOC ]
- then
- echo "
4G LTE L2-NFAPI Simulator Check " >> ./test_simulator_results.html
-
- if [ -f $ARCHIVES_LOC/test_final_status.log ]
- then
- if [ `grep -c TEST_OK $ARCHIVES_LOC/test_final_status.log` -eq 1 ]
- then
- echo " " >> ./test_simulator_results.html
- echo " TEST was SUCCESSFUL " >> ./test_simulator_results.html
- echo "
" >> ./test_simulator_results.html
- else
- echo " " >> ./test_simulator_results.html
- echo " TEST was a FAILURE! " >> ./test_simulator_results.html
- echo "
" >> ./test_simulator_results.html
- fi
- else
- echo " " >> ./test_simulator_results.html
- echo " COULD NOT DETERMINE TEST FINAL STATUS! " >> ./test_simulator_results.html
- echo "
" >> ./test_simulator_results.html
- fi
-
- echo " More details on L2-NFAPI Simulator test results " >> ./test_simulator_results.html
- echo " " >> ./test_simulator_results.html
- echo "
" >> ./test_simulator_results.html
- echo " " >> ./test_simulator_results.html
- echo " Log File Name " >> ./test_simulator_results.html
- echo " Command " >> ./test_simulator_results.html
- echo " Status " >> ./test_simulator_results.html
- echo " Statistics " >> ./test_simulator_results.html
- echo " " >> ./test_simulator_results.html
-
- EPC_CONFIGS=("wS1" "noS1")
- TRANS_MODES=("fdd")
- BW_CASES=(05)
- NB_USERS=(01 04)
- for CN_CONFIG in ${EPC_CONFIGS[@]}
- do
- for TMODE in ${TRANS_MODES[@]}
- do
- for BW in ${BW_CASES[@]}
- do
- for UES in ${NB_USERS[@]}
- do
- echo " " >> ./test_simulator_results.html
- if [[ $CN_CONFIG =~ .*wS1.* ]]
- then
- echo " Test with EPC (aka withS1): ${TMODE} -- ${BW}MHz -- ${UES} user(s) " >> ./test_simulator_results.html
- else
- echo " Test without EPC (aka noS1): ${TMODE} -- ${BW}MHz -- ${UES} user(s) " >> ./test_simulator_results.html
- fi
- echo " " >> ./test_simulator_results.html
- ENB_LOG=$ARCHIVES_LOC/${TMODE}_${BW}MHz_${UES}users_${CN_CONFIG}_enb.log
- UE_LOG=`echo $ENB_LOG | sed -e "s#enb#ue#"`
- if [ -f $ENB_LOG ] && [ -f $UE_LOG ]
- then
- NAME_ENB=`echo $ENB_LOG | sed -e "s#$ARCHIVES_LOC/##"`
- NAME_UE=`echo $UE_LOG | sed -e "s#$ARCHIVES_LOC/##"`
- echo " " >> ./test_simulator_results.html
- echo " $NAME_ENB --- $NAME_UE " >> ./test_simulator_results.html
- echo " N/A " >> ./test_simulator_results.html
- NB_ENB_GOT_SYNC=`egrep -c "got sync" $ENB_LOG`
- NB_UE_GOT_SYNC=`egrep -c "got sync" $UE_LOG`
- NB_ENB_SYNCED_WITH_UE=`egrep -c "Sending NFAPI_START_RESPONSE" $UE_LOG`
- if [ $NB_ENB_GOT_SYNC -gt 0 ] && [ $NB_UE_GOT_SYNC -gt 2 ] && [ $NB_ENB_SYNCED_WITH_UE -gt 0 ]
- then
- echo " OK " >> ./test_simulator_results.html
- else
- echo " KO " >> ./test_simulator_results.html
- fi
- echo " " >> ./test_simulator_results.html
- if [ $NB_ENB_GOT_SYNC -gt 0 ]
- then
- echo "- eNB --> got sync " >> ./test_simulator_results.html
- else
- echo "- eNB NEVER got sync " >> ./test_simulator_results.html
- fi
- if [ $NB_UE_GOT_SYNC -gt 2 ]
- then
- echo "- UE --> got sync " >> ./test_simulator_results.html
- else
- echo "- UE NEVER got sync " >> ./test_simulator_results.html
- fi
- if [ $NB_ENB_SYNCED_WITH_UE -gt 0 ]
- then
- echo "- UE attached to eNB " >> ./test_simulator_results.html
- else
- echo "- UE NEVER attached to eNB " >> ./test_simulator_results.html
- fi
- echo " " >> ./test_simulator_results.html
- echo " " >> ./test_simulator_results.html
- fi
- PING_LOGS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${UES}users_${CN_CONFIG}_ping*.log 2> /dev/null`
- analyzePingFiles
-
- IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${UES}users_${CN_CONFIG}_iperf_dl*client*txt 2> /dev/null`
- analyzeIperfFiles
-
- IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${UES}users_${CN_CONFIG}_iperf_ul*client*txt 2> /dev/null`
- analyzeIperfFiles
- done
- done
- done
- done
-
- echo "
" >> ./test_simulator_results.html
- echo "
" >> ./test_simulator_results.html
- fi
-
ARCHIVES_LOC=archives/phy_sim/test
if [ -d $ARCHIVES_LOC ]
then
diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh
index de696cdc64..be25ab0e1a 100755
--- a/ci-scripts/runTestOnVM.sh
+++ b/ci-scripts/runTestOnVM.sh
@@ -1472,13 +1472,18 @@ function run_test_on_vm {
echo "############################################################"
echo "OAI CI VM script"
echo "############################################################"
- if [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-l2-sim.* )) ]] || [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-rf-sim.* )) ]]
+ if [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-l2-sim.* )) ]]
then
- ENB_VM_NAME=`echo $VM_NAME | sed -e "s#l2-sim#enb-ethernet#" -e "s#rf-sim#enb-ethernet#"`
+ echo "This VM test type is no longer supported in the pipeline framework"
+ return
+ fi
+ if [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-rf-sim.* )) ]]
+ then
+ ENB_VM_NAME=`echo $VM_NAME | sed -e "s#rf-sim#enb-ethernet#"`
ENB_VM_CMDS=${ENB_VM_NAME}_cmds.txt
echo "ENB_VM_NAME = $ENB_VM_NAME"
echo "ENB_VM_CMD_FILE = $ENB_VM_CMDS"
- UE_VM_NAME=`echo $VM_NAME | sed -e "s#l2-sim#ue-ethernet#" -e "s#rf-sim#ue-ethernet#"`
+ UE_VM_NAME=`echo $VM_NAME | sed -e "s#rf-sim#ue-ethernet#"`
UE_VM_CMDS=${UE_VM_NAME}_cmds.txt
echo "UE_VM_NAME = $UE_VM_NAME"
echo "UE_VM_CMD_FILE = $UE_VM_CMDS"
@@ -1499,7 +1504,7 @@ function run_test_on_vm {
echo "JENKINS_WKSP = $JENKINS_WKSP"
echo "ARCHIVES_LOC = $ARCHIVES_LOC"
- if [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-l2-sim.* )) ]] || [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-rf-sim.* )) ]]
+ if [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-rf-sim.* )) ]]
then
echo "############################################################"
echo "Waiting for ENB VM to be started"
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/README.md b/ci-scripts/yaml_files/5g_rfsimulator/README.md
index 1351d6742b..915b71296f 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator/README.md
+++ b/ci-scripts/yaml_files/5g_rfsimulator/README.md
@@ -14,6 +14,8 @@
This page is only valid for an `Ubuntu18` host.
+**NOTE: this version (2021-10-05) is valid for the `v1.1.0` and `v1.2.0` versions of the `OAI 5G CN`.**
+
**TABLE OF CONTENTS**
1. [Retrieving the images on Docker-Hub](#1-retrieving-the-images-on-docker-hub)
@@ -26,6 +28,9 @@ This page is only valid for an `Ubuntu18` host.
2. [Start the iperf server inside the NR-UE container](#32-start-the-iperf-server-inside-the-nr-ue-container)
3. [Start the iperf client inside the ext-dn container](#33-start-the-iperf-client-inside-the-ext-dn-container)
4. [Un-deployment](#4-un-deployment)
+5. [Explanations on the configuration in the docker-compose.yaml](##5-explanations-on-the-configuration-in-the-docker-composeyaml)
+ 1. [Making the NR-UE connect to the core network](#51-making-the-nr-ue-connect-to-the-core-network)
+ 2. [Making the gNB connect to the core network](#52-making-the-gnb-connect-to-the-core-network)
# 1. Retrieving the images on Docker-Hub #
@@ -71,6 +76,10 @@ $ docker image tag rdefosseoai/oai-nr-ue:develop oai-nr-ue:develop
$ docker logout
```
+**CAUTION: 2021/10/05 with the release `v1.2.0` of the `CN5G`, the previous version was not compatible any-more.**
+
+**This new version is working for both the `v1.1.0` and `v1.2.0` of the `CN5G`.**
+
# 2. Deploy containers #

@@ -137,6 +146,8 @@ rfsim5g-traffic: flags=4163 mtu 1500
## 2.2. Deploy OAI gNB in RF simulator mode and in Standalone Mode ##
+**CAUTION: To execute this 2nd step, the whole `CN5G` SHALL be in `healthy` state (especially the `mysql` container).**
+
```bash
$ docker-compose up -d oai-gnb
rfsim5g-oai-nrf is up-to-date
@@ -160,6 +171,18 @@ rfsim5g-oai-smf /bin/bash -c /openair-smf/ ... Up (healthy) 80/tcp, 880
rfsim5g-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
```
+You can verify that the `gNB` is connected with the `AMF`:
+
+```bagh
+$ docker logs rfsim5g-oai-amf
+...
+[AMF] [amf_app] [info ] |----------------------------------------------------gNBs' information-------------------------------------------|
+[AMF] [amf_app] [info ] | Index | Status | Global ID | gNB Name | PLMN |
+[AMF] [amf_app] [info ] | 1 | Connected | 0x0 | gnb-rfsim | 208, 99 |
+[AMF] [amf_app] [info ] |----------------------------------------------------------------------------------------------------------------|
+...
+```
+
## 2.3. Deploy OAI NR-UE in RF simulator mode and in Standalone Mode ##
```bash
@@ -366,3 +389,47 @@ Removing rfsim5g-mysql ... done
Removing network rfsim5g-oai-public-net
Removing network rfsim5g-oai-traffic_net-net
```
+
+# 5. Explanations on the configuration in the `docker-compose.yaml` #
+
+## 5.1. Making the NR-UE connect to the core network ##
+
+The NR-UE **SHALL** be provisioned in the core network, especially in the `SQL` database and in the `AMF`.
+
+* in AMF section of `docker-compose.yaml` --> `OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1`
+* in NR-UE section --> `OPC: 'C42449363BBAD02B66D16BC975D77CC1'
+
+Both values shall match!
+
+This value is also present in the `oai_db.sql` file:
+
+```bash
+INSERT INTO `users` VALUES ('208990100001100','1','55000000000000',NULL,'PURGED',50,40000000,100000000,47,0000000000,1,0xfec86ba6eb707ed08905757b1bb44b8f,0,0,0x40,'ebd07771ace8677a',0xc42449363bbad02b66d16bc975d77cc1);
+```
+
+As you can see, 2 other values shall match in the NR-UE section of `docker-compose.yaml`:
+
+* `FULL_IMSI: '208990100001100'`
+* `FULL_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'`
+
+We are also using a dedicated `oai-smf.conf` for the `SMF` container: the `oai` DNN shall match the one in the NR-UE section of `docker-compose.yaml` (`DNN: oai`).
+
+## 5.2. Making the gNB connect to the core network ##
+
+Mainly you need to match the PLMN in `gNB`, `AMF` and `SPGWU` parameters:
+
+* `AMF`
+ - `MCC=208`
+ - `MNC=99`
+ - `PLMN_SUPPORT_TAC=0x0001`
+ - ...
+* `SPGWU`
+ - `MCC=208`
+ - `MNC=99`
+ - `TAC=1`
+* `gNB`
+ - `MCC: '208'`
+ - `MNC: '99'`
+ - `TAC: 1`
+
+The `ST` and `SD` values shall also match.
diff --git a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
index 5da7a353ab..31d64f35dc 100644
--- a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml
@@ -90,11 +90,14 @@ services:
- USE_FQDN_DNS=yes
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf
- - AUSF_IPV4_ADDRESS=127.0.0.1
+ - EXTERNAL_AUSF=no
+ - AUSF_IPV4_ADDRESS=0.0.0.0
- AUSF_PORT=80
- AUSF_API_VERSION=v1
+ - AUSF_FQDN=localhost
depends_on:
- oai-nrf
+ - mysql
volumes:
- ./amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh
healthcheck:
@@ -139,6 +142,7 @@ services:
- USE_FQDN_DNS=yes
depends_on:
- oai-nrf
+ - oai-amf
volumes:
- ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
- ./oai-smf.conf:/openair-smf/bin/oai-smf.conf
@@ -183,6 +187,7 @@ services:
- DNN_0=oai
depends_on:
- oai-nrf
+ - oai-smf
cap_add:
- NET_ADMIN
- SYS_ADMIN
@@ -285,7 +290,7 @@ networks:
com.docker.network.bridge.name: "rfsim5g-public"
traffic_net:
driver: bridge
- name: rfsim5g-oai-traffic_net-net
+ name: rfsim5g-oai-traffic-net
ipam:
config:
- subnet: 192.168.72.128/26
diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h
index ce3ada3972..6083d23580 100644
--- a/common/utils/LOG/log.h
+++ b/common/utils/LOG/log.h
@@ -426,7 +426,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
# define LOG_W(COMPONENT, ...) do if (1) logMinimal(COMPONENT, 'W', __VA_ARGS__); while (0)
# define LOG_A(COMPONENT, ...) do if (1) logMinimal(COMPONENT, 'A', __VA_ARGS__); while (0) /* logs intended for analysis */
# define LOG_I(COMPONENT, ...) do if (1) logMinimal(COMPONENT, 'I', __VA_ARGS__); while (0)
-# define LOG_D(COMPONENT, ...) do if (1) logMinimal(COMPONENT, 'D', __VA_ARGS__); while (0)
+# define LOG_D(COMPONENT, ...) do if (0) logMinimal(COMPONENT, 'D', __VA_ARGS__); while (0)
# define LOG_T(COMPONENT, ...) do if (0) logMinimal(COMPONENT, 'T', __VA_ARGS__); while (0)
# define LOG_M(FILE, VECTOR, DATA, LEN, DEC, FORMAT) ((void) 0)
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index df1145c6a5..d647eff7cb 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -592,7 +592,7 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
eNB->frame, eNB->subframe, frameP, subframeP, delta);
return;
}
- LOG_I(MAC, "Entering dlsch_ulsch scheduler %d.%d -> %d.%d = %d\n",
+ LOG_D(MAC, "Entering dlsch_ulsch scheduler %d.%d -> %d.%d = %d\n",
eNB->frame, eNB->subframe, frameP, subframeP, delta);
eNB->frame = frameP;
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
index 0f6892c2a3..5d52aa70ca 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
@@ -1288,7 +1288,7 @@ pdcp_run (
// IP/NAS -> PDCP traffic : TX, read the pkt from the upper layer buffer
// if (LINK_ENB_PDCP_TO_GTPV1U && ctxt_pP->enb_flag == ENB_FLAG_NO) {
- if (!get_softmodem_params()->nsa) {
+ if (!get_softmodem_params()->nsa && (!EPC_MODE_ENABLED || ctxt_pP->enb_flag == ENB_FLAG_NO)) {
pdcp_fifo_read_input_sdus(ctxt_pP);
}
diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
index decf40e9ed..4a0c41d1be 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
@@ -416,13 +416,21 @@ uint64_t nr_pdcp_module_init(uint64_t _pdcp_optmask, int id)
int num_if = (NFAPI_MODE == NFAPI_UE_STUB_PNF || IS_SOFTMODEM_SIML1 || NFAPI_MODE == NFAPI_MODE_STANDALONE_PNF)? MAX_MOBILES_PER_ENB : 1;
netlink_init_tun("nrue", num_if, id);
//Add --nr-ip-over-lte option check for next line
- if (IS_SOFTMODEM_NOS1)
+ if (IS_SOFTMODEM_NOS1 && get_softmodem_params()->nsa)
nas_config(1, 1, 3, "nrue");
+ else if (IS_SOFTMODEM_NOS1)
+ nas_config(1, 1, 2, "ue");
LOG_I(PDCP, "UE pdcp will use tun interface\n");
start_pdcp_tun_ue();
} else if(ENB_NAS_USE_TUN) {
- netlink_init_tun("gnb", 1, id);
- nas_config(1, 1, 1, "gnb");
+ if (get_softmodem_params()->nsa) {
+ netlink_init_tun("gnb", 1, id);
+ nas_config(1, 1, 1, "gnb");
+ }
+ else {
+ netlink_init_tun("enb", 1, id);
+ nas_config(1, 1, 1, "enb");
+ }
LOG_I(PDCP, "ENB pdcp will use tun interface\n");
start_pdcp_tun_enb();
} else {
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index cf00b7bd85..2c84085d37 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -751,6 +751,8 @@ int main ( int argc, char **argv )
create_tasks_mbms(1);
config_check_unknown_cmdlineopt(CONFIG_CHECKALLSECTIONS);
}
+ else
+ create_tasks_mbms(1);
//create_tasks_mbms(1);
// wait for end of program