From ff4284050dc464824f0948ec548ea637bd16403a Mon Sep 17 00:00:00 2001 From: Bartosz Podrygajlo Date: Wed, 25 Mar 2026 00:19:44 +0100 Subject: [PATCH] CI testcases with OCUDU Added two testcases with OCUDU split8 gnb --- .../xml_files/container_5g_zmq_ocudu_1x1.xml | 109 ++++++++++++ .../xml_files/container_5g_zmq_ocudu_2x2.xml | 109 ++++++++++++ .../docker-compose.yaml | 162 ++++++++++++++++++ .../5g_zmq_radio_1x1_ocudu/ocudu.yml | 52 ++++++ .../docker-compose.yaml | 162 ++++++++++++++++++ .../5g_zmq_radio_2x2_ocudu/ocudu.yml | 54 ++++++ 6 files changed, 648 insertions(+) create mode 100644 ci-scripts/xml_files/container_5g_zmq_ocudu_1x1.xml create mode 100644 ci-scripts/xml_files/container_5g_zmq_ocudu_2x2.xml create mode 100644 ci-scripts/yaml_files/5g_zmq_radio_1x1_ocudu/docker-compose.yaml create mode 100644 ci-scripts/yaml_files/5g_zmq_radio_1x1_ocudu/ocudu.yml create mode 100644 ci-scripts/yaml_files/5g_zmq_radio_2x2_ocudu/docker-compose.yaml create mode 100644 ci-scripts/yaml_files/5g_zmq_radio_2x2_ocudu/ocudu.yml 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