diff --git a/ci-scripts/xml_files/container_5g_zmq_ocudu_1x1.xml b/ci-scripts/xml_files/container_5g_zmq_ocudu_1x1.xml
new file mode 100644
index 0000000000..c53d6f850a
--- /dev/null
+++ b/ci-scripts/xml_files/container_5g_zmq_ocudu_1x1.xml
@@ -0,0 +1,109 @@
+
+
+
+ ocudu-5gnr-tdd-1x1
+ OCUDU gnb split8 with OAI UE
+ wrench
+
+
+ Pull_Local_Registry
+ Pull Images from Local Registry
+ localhost
+ oai-gnb-asan oai-nr-ue-asan
+
+
+
+ Create_Workspace
+ Create new Workspace
+ localhost
+
+
+
+ Deploy_Object
+ Deploy OAI 5G CoreNetwork
+ localhost
+ ci-scripts/yaml_files/5g_zmq_radio_1x1_ocudu
+ mysql oai-amf oai-smf oai-upf oai-ext-dn
+
+
+
+ Deploy_Object
+ Deploy OCUDU Split 8 gNB + OAI UE
+ localhost
+ ci-scripts/yaml_files/5g_zmq_radio_1x1_ocudu
+ ocudu-gnb oai-nr-ue
+
+
+
+ Attach_UE
+ Attach OAI UE (Wait for IP)
+ rfsim5g_ue
+ localhost
+
+
+
+ Ping
+ Ping ext-dn from NR-UE
+ rfsim5g_ue
+ localhost
+ rfsim5g_ext_dn
+ localhost
+ -c 20 -i 0.25
+ 5
+
+
+
+ Ping
+ Ping NR-UE from ext-dn
+ rfsim5g_ext_dn
+ localhost
+ rfsim5g_ue
+ localhost
+ -c 20 -i 0.25
+ 5
+
+
+
+ Iperf
+ Iperf (DL/3Mbps/UDP)(20 sec)
+ -u -b 3M -t 20 -R
+ rfsim5g_ue
+ localhost
+ rfsim5g_ext_dn
+ localhost
+ 5
+ 90
+
+
+
+ Iperf
+ Iperf (UL/3Mbps/UDP)(20 sec)
+ -u -b 3M -t 20
+ rfsim5g_ue
+ localhost
+ rfsim5g_ext_dn
+ localhost
+ 5
+ 90
+
+
+
+ Undeploy_Object
+ true
+ Undeploy all OAI 5G stack
+ localhost
+ ci-scripts/yaml_files/5g_zmq_radio_1x1_ocudu
+
+ oai-nr-ue
+
+
+
+
+ Clean_Test_Server_Images
+ true
+ Clean Test Images on Test Server
+ localhost
+ oai-gnb-asan oai-nr-ue-asan
+
+
+
diff --git a/ci-scripts/xml_files/container_5g_zmq_ocudu_2x2.xml b/ci-scripts/xml_files/container_5g_zmq_ocudu_2x2.xml
new file mode 100644
index 0000000000..2e54fc849e
--- /dev/null
+++ b/ci-scripts/xml_files/container_5g_zmq_ocudu_2x2.xml
@@ -0,0 +1,109 @@
+
+
+
+ ocudu-5gnr-tdd-2x2
+ OCUDU gnb split8 with OAI UE
+ wrench
+
+
+ Pull_Local_Registry
+ Pull Images from Local Registry
+ localhost
+ oai-gnb-asan oai-nr-ue-asan
+
+
+
+ Create_Workspace
+ Create new Workspace
+ localhost
+
+
+
+ Deploy_Object
+ Deploy OAI 5G CoreNetwork
+ localhost
+ ci-scripts/yaml_files/5g_zmq_radio_2x2_ocudu
+ mysql oai-amf oai-smf oai-upf oai-ext-dn
+
+
+
+ Deploy_Object
+ Deploy OCUDU Split 8 gNB + OAI UE
+ localhost
+ ci-scripts/yaml_files/5g_zmq_radio_2x2_ocudu
+ ocudu-gnb oai-nr-ue
+
+
+
+ Attach_UE
+ Attach OAI UE (Wait for IP)
+ rfsim5g_ue
+ localhost
+
+
+
+ Ping
+ Ping ext-dn from NR-UE
+ rfsim5g_ue
+ localhost
+ rfsim5g_ext_dn
+ localhost
+ -c 20 -i 0.25
+ 5
+
+
+
+ Ping
+ Ping NR-UE from ext-dn
+ rfsim5g_ext_dn
+ localhost
+ rfsim5g_ue
+ localhost
+ -c 20 -i 0.25
+ 5
+
+
+
+ Iperf
+ Iperf (DL/10Mbps/UDP)(20 sec)
+ -u -b 1M -t 20 -R
+ rfsim5g_ue
+ localhost
+ rfsim5g_ext_dn
+ localhost
+ 5
+ 90
+
+
+
+ Iperf
+ Iperf (UL/3Mbps/UDP)(20 sec)
+ -u -b 1M -t 20
+ rfsim5g_ue
+ localhost
+ rfsim5g_ext_dn
+ localhost
+ 5
+ 90
+
+
+
+ Undeploy_Object
+ true
+ Undeploy all OAI 5G stack
+ localhost
+ ci-scripts/yaml_files/5g_zmq_radio_2x2_ocudu
+
+ oai-nr-ue
+
+
+
+
+ Clean_Test_Server_Images
+ true
+ Clean Test Images on Test Server
+ localhost
+ oai-gnb-asan oai-nr-ue-asan
+
+
+
diff --git a/ci-scripts/yaml_files/5g_zmq_radio_1x1_ocudu/docker-compose.yaml b/ci-scripts/yaml_files/5g_zmq_radio_1x1_ocudu/docker-compose.yaml
new file mode 100644
index 0000000000..6866b6a0b1
--- /dev/null
+++ b/ci-scripts/yaml_files/5g_zmq_radio_1x1_ocudu/docker-compose.yaml
@@ -0,0 +1,162 @@
+# SPDX-License-Identifier: MIT
+
+services:
+ mysql:
+ container_name: "rfsim5g-mysql"
+ image: mysql:8.0
+ init: true
+ volumes:
+ - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
+ - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
+ environment:
+ - TZ=Europe/Paris
+ - MYSQL_DATABASE=oai_db
+ - MYSQL_USER=test
+ - MYSQL_PASSWORD=test
+ - MYSQL_ROOT_PASSWORD=linux
+ healthcheck:
+ test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
+ start_period: 10s
+ start_interval: 500ms
+ interval: 10s
+ timeout: 5s
+ retries: 30
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.131
+ oai-amf:
+ container_name: "rfsim5g-oai-amf"
+ image: oaisoftwarealliance/oai-amf:v2.1.10
+ environment:
+ - TZ=Europe/paris
+ volumes:
+ - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-amf/etc/config.yaml
+ depends_on:
+ - mysql
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.132
+ oai-smf:
+ container_name: "rfsim5g-oai-smf"
+ image: oaisoftwarealliance/oai-smf:v2.1.10
+ environment:
+ - TZ=Europe/Paris
+ volumes:
+ - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-smf/etc/config.yaml
+ depends_on:
+ - oai-amf
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.133
+ oai-upf:
+ container_name: "rfsim5g-oai-upf"
+ image: oaisoftwarealliance/oai-upf:v2.1.10
+ init: true
+ environment:
+ - TZ=Europe/Paris
+ volumes:
+ - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-upf/etc/config.yaml
+ depends_on:
+ - oai-smf
+ cap_add:
+ - NET_ADMIN
+ - SYS_ADMIN
+ cap_drop:
+ - ALL
+ privileged: true
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.134
+ interface_name: eth0
+ traffic_net:
+ ipv4_address: 192.168.72.134
+ interface_name: eth1
+ oai-ext-dn:
+ privileged: true
+ container_name: rfsim5g-oai-ext-dn
+ image: oaisoftwarealliance/trf-gen-cn5g:focal
+ init: true
+ entrypoint: /bin/bash -c \
+ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
+ "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
+ depends_on:
+ - oai-upf
+ networks:
+ traffic_net:
+ ipv4_address: 192.168.72.135
+ healthcheck:
+ test: /bin/bash -c "ping -c 2 192.168.72.134"
+ start_period: 10s
+ start_interval: 500ms
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ ocudu-gnb:
+ image: ghcr.io/bpodrygajlo/ocudu/ocudu-avx2:7cecca5
+ container_name: ocudu-gnb
+ cap_drop:
+ - ALL
+ cap_add:
+ - SYS_NICE
+ depends_on:
+ - oai-ext-dn
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.140
+ volumes:
+ - ./ocudu.yml:/ocudu.yml
+ healthcheck:
+ test: /bin/bash -c "pgrep gnb_split_8"
+ start_period: 10s
+ start_interval: 500ms
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ command: ./usr/local/bin/gnb_split_8 -c /ocudu.yml
+
+ oai-nr-ue:
+ image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
+ container_name: rfsim5g-oai-nr-ue
+ cap_drop:
+ - ALL
+ cap_add:
+ - NET_ADMIN # for interface bringup
+ - NET_RAW # for ping
+ - SYS_NICE
+ environment:
+ USE_ADDITIONAL_OPTIONS: -r 51 --numerology 1 --band 78 -C 3489420000 --ssb 0 -E --uicc0.imsi 208990100001100 --uecap_file /opt/oai-nr-ue/etc/uecap.xml --log_config.global_log_options level,nocolor,time --device.name oai_zmqdevif --zmq.[0].tx_channels tcp://0.0.0.0:4556 --zmq.[0].rx_channels tcp://192.168.71.140:4558
+ depends_on:
+ - ocudu-gnb
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.150
+ devices:
+ - /dev/net/tun:/dev/net/tun
+ volumes:
+ - ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap_ports1.xml:/opt/oai-nr-ue/etc/uecap.xml
+ - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
+ healthcheck:
+ test: /bin/bash -c "pgrep nr-uesoftmodem"
+ start_period: 10s
+ start_interval: 500ms
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+networks:
+ public_net:
+ driver: bridge
+ name: rfsim5g-oai-public-net
+ ipam:
+ config:
+ - subnet: 192.168.71.128/26
+ driver_opts:
+ com.docker.network.bridge.name: "rfsim5g-public"
+ traffic_net:
+ driver: bridge
+ name: rfsim5g-oai-traffic-net
+ ipam:
+ config:
+ - subnet: 192.168.72.128/26
+ driver_opts:
+ com.docker.network.bridge.name: "rfsim5g-traffic"
diff --git a/ci-scripts/yaml_files/5g_zmq_radio_1x1_ocudu/ocudu.yml b/ci-scripts/yaml_files/5g_zmq_radio_1x1_ocudu/ocudu.yml
new file mode 100644
index 0000000000..da62a52e1f
--- /dev/null
+++ b/ci-scripts/yaml_files/5g_zmq_radio_1x1_ocudu/ocudu.yml
@@ -0,0 +1,52 @@
+# SPDX-FileCopyrightText: Copyright (C) 2021-2026 Software Radio Systems Limited
+# SPDX-License-Identifier: BSD-3-Clause-Open-MPI
+# Refer to https://gitlab.com/ocudu/ocudu/-/raw/dev/LICENSE?ref_type=heads
+
+cu_cp:
+ amf:
+ addrs: 192.168.71.132
+ port: 38412
+ bind_addrs: 192.168.71.140
+ supported_tracking_areas:
+ - tac: 1
+ plmn_list:
+ - plmn: "20899"
+ tai_slice_support_list:
+ - sst: 1
+
+ru_sdr:
+ device_driver: zmq
+ device_args: tx_port=tcp://0.0.0.0:4558,rx_port=tcp://192.168.71.150:4556
+ srate: 23.04
+ tx_gain: 25
+ rx_gain: 25
+
+cell_cfg:
+ dl_arfcn: 632628
+ band: 78
+ channel_bandwidth_MHz: 20
+ common_scs: 30
+ plmn: "20899"
+ tac: 1
+ pci: 1
+ tdd_ul_dl_cfg:
+ dl_ul_tx_period: 5
+ nof_dl_slots: 3
+ nof_dl_symbols: 10
+ nof_ul_slots: 1
+ nof_ul_symbols: 2
+ csi:
+ csi_rs_enabled: false
+ pucch:
+ formats: f0_and_f2
+ nof_cell_csi_res: 0
+
+log:
+ filename: gnb.log
+ all_level: debug
+
+pcap:
+ mac_enable: false
+ mac_filename: /tmp/gnb_mac.pcap
+ ngap_enable: false
+ ngap_filename: /tmp/gnb_ngap.pcap
diff --git a/ci-scripts/yaml_files/5g_zmq_radio_2x2_ocudu/docker-compose.yaml b/ci-scripts/yaml_files/5g_zmq_radio_2x2_ocudu/docker-compose.yaml
new file mode 100644
index 0000000000..2d6c240e6d
--- /dev/null
+++ b/ci-scripts/yaml_files/5g_zmq_radio_2x2_ocudu/docker-compose.yaml
@@ -0,0 +1,162 @@
+# SPDX-License-Identifier: MIT
+
+services:
+ mysql:
+ container_name: "rfsim5g-mysql"
+ image: mysql:8.0
+ init: true
+ volumes:
+ - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
+ - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
+ environment:
+ - TZ=Europe/Paris
+ - MYSQL_DATABASE=oai_db
+ - MYSQL_USER=test
+ - MYSQL_PASSWORD=test
+ - MYSQL_ROOT_PASSWORD=linux
+ healthcheck:
+ test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
+ start_period: 10s
+ start_interval: 500ms
+ interval: 10s
+ timeout: 5s
+ retries: 30
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.131
+ oai-amf:
+ container_name: "rfsim5g-oai-amf"
+ image: oaisoftwarealliance/oai-amf:v2.1.10
+ environment:
+ - TZ=Europe/paris
+ volumes:
+ - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-amf/etc/config.yaml
+ depends_on:
+ - mysql
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.132
+ oai-smf:
+ container_name: "rfsim5g-oai-smf"
+ image: oaisoftwarealliance/oai-smf:v2.1.10
+ environment:
+ - TZ=Europe/Paris
+ volumes:
+ - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-smf/etc/config.yaml
+ depends_on:
+ - oai-amf
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.133
+ oai-upf:
+ container_name: "rfsim5g-oai-upf"
+ image: oaisoftwarealliance/oai-upf:v2.1.10
+ init: true
+ environment:
+ - TZ=Europe/Paris
+ volumes:
+ - ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-upf/etc/config.yaml
+ depends_on:
+ - oai-smf
+ cap_add:
+ - NET_ADMIN
+ - SYS_ADMIN
+ cap_drop:
+ - ALL
+ privileged: true
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.134
+ interface_name: eth0
+ traffic_net:
+ ipv4_address: 192.168.72.134
+ interface_name: eth1
+ oai-ext-dn:
+ privileged: true
+ container_name: rfsim5g-oai-ext-dn
+ image: oaisoftwarealliance/trf-gen-cn5g:focal
+ init: true
+ entrypoint: /bin/bash -c \
+ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
+ "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
+ depends_on:
+ - oai-upf
+ networks:
+ traffic_net:
+ ipv4_address: 192.168.72.135
+ healthcheck:
+ test: /bin/bash -c "ping -c 2 192.168.72.134"
+ start_period: 10s
+ start_interval: 500ms
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ ocudu-gnb:
+ image: ghcr.io/bpodrygajlo/ocudu/ocudu-avx2:7cecca5
+ container_name: ocudu-gnb
+ cap_drop:
+ - ALL
+ cap_add:
+ - SYS_NICE
+ depends_on:
+ - oai-ext-dn
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.140
+ volumes:
+ - ./ocudu.yml:/ocudu.yml
+ healthcheck:
+ test: /bin/bash -c "pgrep gnb_split_8"
+ start_period: 10s
+ start_interval: 500ms
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ command: ./usr/local/bin/gnb_split_8 -c /ocudu.yml
+
+ oai-nr-ue:
+ image: ${REGISTRY-oaisoftwarealliance/}${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
+ container_name: rfsim5g-oai-nr-ue
+ cap_drop:
+ - ALL
+ cap_add:
+ - NET_ADMIN # for interface bringup
+ - NET_RAW # for ping
+ - SYS_NICE
+ environment:
+ USE_ADDITIONAL_OPTIONS: -r 106 --numerology 1 --band 78 -C 3489420000 --ssb 42 --ue-nb-ant-tx 2 --uicc0.imsi 208990100001100 --ue-nb-ant-rx 2 --uecap_file /opt/oai-nr-ue/etc/uecap.xml --log_config.global_log_options level,nocolor,time --device.name oai_zmqdevif --zmq.[0].tx_channels tcp://0.0.0.0:4556,tcp://0.0.0.0:4557 --zmq.[0].rx_channels tcp://192.168.71.140:4558,tcp://192.168.71.140:4559
+ depends_on:
+ - ocudu-gnb
+ networks:
+ public_net:
+ ipv4_address: 192.168.71.150
+ devices:
+ - /dev/net/tun:/dev/net/tun
+ volumes:
+ - ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap_ports2.xml:/opt/oai-nr-ue/etc/uecap.xml
+ - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
+ healthcheck:
+ test: /bin/bash -c "pgrep nr-uesoftmodem"
+ start_period: 10s
+ start_interval: 500ms
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+networks:
+ public_net:
+ driver: bridge
+ name: rfsim5g-oai-public-net
+ ipam:
+ config:
+ - subnet: 192.168.71.128/26
+ driver_opts:
+ com.docker.network.bridge.name: "rfsim5g-public"
+ traffic_net:
+ driver: bridge
+ name: rfsim5g-oai-traffic-net
+ ipam:
+ config:
+ - subnet: 192.168.72.128/26
+ driver_opts:
+ com.docker.network.bridge.name: "rfsim5g-traffic"
diff --git a/ci-scripts/yaml_files/5g_zmq_radio_2x2_ocudu/ocudu.yml b/ci-scripts/yaml_files/5g_zmq_radio_2x2_ocudu/ocudu.yml
new file mode 100644
index 0000000000..fdef405af7
--- /dev/null
+++ b/ci-scripts/yaml_files/5g_zmq_radio_2x2_ocudu/ocudu.yml
@@ -0,0 +1,54 @@
+# SPDX-FileCopyrightText: Copyright (C) 2021-2026 Software Radio Systems Limited
+# SPDX-License-Identifier: BSD-3-Clause-Open-MPI
+# Refer to https://gitlab.com/ocudu/ocudu/-/raw/dev/LICENSE?ref_type=heads
+
+cu_cp:
+ amf:
+ addrs: 192.168.71.132
+ port: 38412
+ bind_addrs: 192.168.71.140
+ supported_tracking_areas:
+ - tac: 1
+ plmn_list:
+ - plmn: "20899"
+ tai_slice_support_list:
+ - sst: 1
+
+ru_sdr:
+ device_driver: zmq
+ device_args: tx_port=tcp://0.0.0.0:4558,tx_port=tcp://0.0.0.0:4559,rx_port=tcp://192.168.71.150:4556,rx_port=tcp://192.168.71.150:4557
+ srate: 61.44
+ tx_gain: 25
+ rx_gain: 25
+
+cell_cfg:
+ dl_arfcn: 632628
+ band: 78
+ channel_bandwidth_MHz: 40
+ common_scs: 30
+ plmn: "20899"
+ tac: 1
+ pci: 1
+ nof_antennas_ul: 2
+ nof_antennas_dl: 2
+ tdd_ul_dl_cfg:
+ dl_ul_tx_period: 5
+ nof_dl_slots: 3
+ nof_dl_symbols: 10
+ nof_ul_slots: 1
+ nof_ul_symbols: 2
+ csi:
+ csi_rs_enabled: false
+ pucch:
+ formats: f0_and_f2
+ nof_cell_csi_res: 0
+
+log:
+ filename: gnb.log
+ all_level: debug
+
+pcap:
+ mac_enable: false
+ mac_filename: /tmp/gnb_mac.pcap
+ ngap_enable: false
+ ngap_filename: /tmp/gnb_ngap.pcap