diff --git a/ci-scripts/xml_files/container_5g_f1_rfsim.xml b/ci-scripts/xml_files/container_5g_f1_rfsim.xml
index 16c02050d2..93ad2c4c94 100644
--- a/ci-scripts/xml_files/container_5g_f1_rfsim.xml
+++ b/ci-scripts/xml_files/container_5g_f1_rfsim.xml
@@ -34,6 +34,11 @@
030020
030021
030022
+ 040001
+ 020022
+ 040002
+ 030021
+ 030022
100021
222222
@@ -117,6 +122,31 @@
90
+
+ Custom_Command
+ Trigger Reestablishment
+ cacofonix
+ echo ci force_reestab | nc 192.168.71.171 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment'
+ yes
+
+
+
+ Ping
+ Ping ext-dn from all NR-UEs
+ rfsim5g_ue
+ cacofonix
+ -c 20 192.168.72.135 -i0.5 -w25
+ 80
+
+
+
+ Custom_Command
+ Verify Reestablishment
+ cacofonix
+ echo ci get_reestab_count | nc 192.168.71.150 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1'
+ yes
+
+
Custom_Command
Simulate a disruption of DL radio channel (ploss 55)(5 sec)
diff --git a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
index c925af1adb..4460452f11 100644
--- a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
+++ b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml
@@ -87,8 +87,11 @@ services:
container_name: rfsim5g-oai-cu
cap_drop:
- ALL
- environment:
+ environment:
USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time
+ --rfsimulator.options chanmod
+ --telnetsrv --telnetsrv.listenaddr 192.168.71.150
+ --telnetsrv.shrmod ci
ASAN_OPTIONS: detect_leaks=0
depends_on:
- oai-ext-dn
@@ -113,6 +116,7 @@ services:
--log_config.global_log_options level,nocolor,time
--rfsimulator.options chanmod
--telnetsrv --telnetsrv.listenaddr 192.168.71.171
+ --telnetsrv.shrmod ci
ASAN_OPTIONS: detect_leaks=0:detect_odr_violation=0
depends_on:
- oai-cu
diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
index 3b0847feae..2ebd18f5e7 100644
--- a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
+++ b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
@@ -1096,8 +1096,14 @@ bool nr_rlc_update_id(int from_id, int to_id)
return true;
}
-/* This function is for testing purposes. At least on a COTS UE, it will
- * trigger a reestablishment. */
+/**
+ * @brief This function is for testing purposes.
+ * Re-establishment is triggered by resetting RLC counters of the bearer,
+ * which leads to UE reaching maximum RLC retransmissions, RLF detection
+ * and RRC triggering re-sync. It is assumed that there is ongoing traffic on the bearer.
+ * - With COTS UEs, triggers re-establishment on SRB 1, where periodical measurement reports are sent.
+ * - With OAI UE, triggers re-establishment on DRB 1, assuming there is ongoing data traffic.
+ */
void nr_rlc_test_trigger_reestablishment(int ue_id)
{
nr_rlc_manager_lock(nr_rlc_ue_manager);
@@ -1111,6 +1117,9 @@ void nr_rlc_test_trigger_reestablishment(int ue_id)
* as the UE context is created. */
nr_rlc_entity_t *ent = ue->srb[0];
ent->reestablishment(ent);
+ /* Trigger re-establishment on OAI UE */
+ nr_rlc_entity_t *drb = ue->drb[0];
+ drb->reestablishment(drb);
nr_rlc_manager_unlock(nr_rlc_ue_manager);
}