diff --git a/ci-scripts/ci_infra.yaml b/ci-scripts/ci_infra.yaml index fe2a163f3f..71753560e7 100644 --- a/ci-scripts/ci_infra.yaml +++ b/ci-scripts/ci_infra.yaml @@ -44,6 +44,14 @@ up2-aerial: IF: wwan0 MTU: 1500 +up3: + Host: up3 + AttachScript: /opt/mbim/start_quectel_mbim.sh + DetachScript: /opt/mbim/stop_quectel_mbim.sh + NetworkScript: ip a show dev wwan0 + IF: wwan0 + MTU: 1500 + adb_ue_1: Host: nano InitScript: /home/oaicicd/ci_ctl_adb.sh initialize R3CM40LZPHT @@ -125,6 +133,11 @@ oc-cn5g-20897-stonechat: Undeploy: "! scripts/oc-cn5g-undeploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-fhi72" LogCollect: "! scripts/oc-cn5g-logcollect.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-fhi72 %%log_dir%%" +oc-cn5g-20899-always-on: + Host: stonechat + NetworkScript: echo "inet 172.21.6.12" + RunIperf3Server: False + matix-cn5g: Host: matix NetworkScript: docker exec prod-trf-gen ip a show dev eth0 diff --git a/ci-scripts/conf_files/gnb-du.sa.band78.273prb.fhi72.8x8-benetel650_650.conf b/ci-scripts/conf_files/gnb-du.sa.band78.273prb.fhi72.8x8-benetel650_650.conf new file mode 100644 index 0000000000..52a1522a2a --- /dev/null +++ b/ci-scripts/conf_files/gnb-du.sa.band78.273prb.fhi72.8x8-benetel650_650.conf @@ -0,0 +1,265 @@ +Active_gNBs = ( "gNB-OAI-DU"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +gNBs = +( + { + ////////// Identification parameters: + gNB_ID = 0xe00; + gNB_DU_ID = 0xe00; + gNB_name = "gNB-OAI-DU"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = 1; + plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ( { sst = 1; }); }); + + nr_cellid = 1; + + ////////// Physical parameters: + + pdsch_AntennaPorts_XP = 2; + pdsch_AntennaPorts_N1 = 4; + pusch_AntennaPorts = 8; + do_CSIRS = 1; + do_SRS = 0; + + servingCellConfigCommon = ( + { + #spCellConfigCommon + + physCellId = 0; + # n_TimingAdvanceOffset = 0; +# downlinkConfigCommon + #frequencyInfoDL + # center frequency = 3950.4 MHz + # selected SSB frequency = 3950.4 MHz + absoluteFrequencySSB = 663360; + dl_frequencyBand = 77; + # frequency point A = 3901.26 MHz + dl_absoluteFrequencyPointA = 660084; + #scs-SpecificCarrierList + dl_offstToCarrier = 0; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + dl_subcarrierSpacing = 1; + dl_carrierBandwidth = 273; + #initialDownlinkBWP + #genericParameters + initialDLBWPlocationAndBandwidth = 1099; #38.101-1 Table 5.3.2-1 + # +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialDLBWPsubcarrierSpacing = 1; + #pdcch-ConfigCommon + initialDLBWPcontrolResourceSetZero = 11; + initialDLBWPsearchSpaceZero = 0; + + #uplinkConfigCommon + #frequencyInfoUL + ul_frequencyBand = 77; + #scs-SpecificCarrierList + ul_offstToCarrier = 0; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + ul_subcarrierSpacing = 1; + ul_carrierBandwidth = 273; + pMax = 23; + #initialUplinkBWP + #genericParameters + initialULBWPlocationAndBandwidth = 1099; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialULBWPsubcarrierSpacing = 1; + #rach-ConfigCommon + #rach-ConfigGeneric + prach_ConfigurationIndex = 152; +#prach_msg1_FDM +#0 = one, 1=two, 2=four, 3=eight + prach_msg1_FDM = 0; + prach_msg1_FrequencyStart = 0; + zeroCorrelationZoneConfig = 0; + preambleReceivedTargetPower = -100; +#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200) + preambleTransMax = 8; +#powerRampingStep +# 0=dB0,1=dB2,2=dB4,3=dB6 + powerRampingStep = 3; +#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR +#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen + ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4; +#one (0..15) 4,8,12,16,...60,64 + ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15; +#ra_ContentionResolutionTimer +#(0..7) 8,16,24,32,40,48,56,64 + ra_ContentionResolutionTimer = 7; + rsrp_ThresholdSSB = 19; +#prach-RootSequenceIndex_PR +#1 = 839, 2 = 139 + prach_RootSequenceIndex_PR = 2; + prach_RootSequenceIndex = 1; + # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex + # + msg1_SubcarrierSpacing = 1, +# restrictedSetConfig +# 0=unrestricted, 1=restricted type A, 2=restricted type B + restrictedSetConfig = 0, + +# this is the offset between the last PRACH preamble power and the Msg3 PUSCH, 2 times the field value in dB + msg3_DeltaPreamble = 2; + p0_NominalWithGrant = -96; + +# pucch-ConfigCommon setup : +# pucchGroupHopping +# 0 = neither, 1= group hopping, 2=sequence hopping + pucchGroupHopping = 0; + hoppingId = 0; + p0_nominal = -96; + + ssb_PositionsInBurst_Bitmap = 0x1; + +# ssb_periodicityServingCell +# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1 + ssb_periodicityServingCell = 2; + +# dmrs_TypeA_position +# 0 = pos2, 1 = pos3 + dmrs_TypeA_Position = 0; + +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + subcarrierSpacing = 1; + + + #tdd-UL-DL-ConfigurationCommon +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + referenceSubcarrierSpacing = 1; + # pattern1 + # dl_UL_TransmissionPeriodicity + # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10 + dl_UL_TransmissionPeriodicity = 5; + nrofDownlinkSlots = 3; + nrofDownlinkSymbols = 6; + nrofUplinkSlots = 1; + nrofUplinkSymbols = 4; + + ssPBCH_BlockPower = 0; + } + + ); + + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + } +); + + +MACRLCs = ( +{ + tr_s_preference = "local_L1"; + tr_n_preference = "f1"; + local_n_address = "172.21.10.20"; + remote_n_address = "172.21.6.92"; + local_n_portd = 2153; + remote_n_portd = 2153; + pusch_TargetSNRx10 = 220; + pucch_TargetSNRx10 = 200; + dl_bler_target_upper = .35; + dl_bler_target_lower = .15; + ul_bler_target_upper = .35; + ul_bler_target_lower = .15; + pusch_FailureThres = 100; +} +); + +L1s = ( +{ + tr_n_preference = "local_mac"; + prach_dtx_threshold = 100; + pucch0_dtx_threshold = 80; + pusch_dtx_threshold = 10; + max_ldpc_iterations = 10; + tx_amp_backoff_dB = 12; # needs to match O-RU configuration + L1_rx_thread_core = 11; + L1_tx_thread_core = 12; # relevant after merge of l1_tx_thread + phase_compensation = 0; # needs to match O-RU configuration +} +); + +RUs = ( +{ + local_rf = "no"; + nb_tx = 8; + nb_rx = 8; + att_tx = 0; + att_rx = 0; + bands = [77]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 75; + sf_extension = 0; + eNB_instances = [0]; + ru_thread_core = 10; + sl_ahead = 10; + tr_preference = "raw_if4p5"; # important: activate FHI7.2 + do_precoding = 0; # needs to match O-RU configuration +} +); + +log_config : +{ + global_log_level = "info"; + hw_log_level = "info"; + phy_log_level = "info"; + mac_log_level = "info"; + rlc_log_level = "info"; + pdcp_log_level = "info"; + rrc_log_level = "info"; + ngap_log_level = "info"; + f1ap_log_level = "info"; +}; + +fhi_72 = { + dpdk_devices = ("0000:41:11.0", "0000:41:11.1", "0000:41:11.2", "0000:41:11.3"); # two VFs can be used as well + dpdk_iova_mode = "VA"; + system_core = 7; + io_core = 8; + worker_cores = (9); + ru_addr = ("8c:1f:64:d1:10:46","8c:1f:64:d1:10:46","8c:1f:64:d1:10:43","8c:1f:64:d1:10:43"); # if two VFs, set two RU MAC addresses (one per RU) + mtu = 9216; + fh_config = ( +# RAN650 #1 + { + T1a_cp_dl = (419, 470); + T1a_cp_ul = (285, 336); + T1a_up = (294, 345); + Ta4 = (0, 200); + ru_config = { + iq_width = 9; + iq_width_prach = 9; + }; + }, +# RAN650 #2 + { + T1a_cp_dl = (419, 470); + T1a_cp_ul = (285, 336); + T1a_up = (294, 345); + Ta4 = (0, 200); + ru_config = { + iq_width = 9; + iq_width_prach = 9; + }; + }); +}; + +nrLDPC_coding_aal : { + dpdk_dev : "0000:01:00.0"; + dpdk_core_list : "18-19"; + is_t2 : 1; +}; diff --git a/ci-scripts/xml_files/container_sa_fhi72_benetel_8x8_up3.xml b/ci-scripts/xml_files/container_sa_fhi72_benetel_8x8_up3.xml new file mode 100644 index 0000000000..8260f188a6 --- /dev/null +++ b/ci-scripts/xml_files/container_sa_fhi72_benetel_8x8_up3.xml @@ -0,0 +1,108 @@ + + + + test-5g-fhi72-8x8-benetel + 100 MHz 8x8 TDD SA Benetel + tasks + + + Pull_Local_Registry + Pull Images from Local Registry + stonechat + oai-gnb-fhi72-t2 + + + + Create_Workspace + Create new Workspace for server 0 + stonechat + + + + Deploy_Object + Deploy DU (TDD/Band77/100MHz/Benetel/8x8) in a container + ci-scripts/yaml_files/sa_fhi_7.2_benetel_8x8_du + oai-du + stonechat + 2 + + + + Attach_UE + Attach UE + up3 + + + + IdleSleep + Sleep + 20 + + + + Ping + Ping: 100 pings in 10 sec + up3 + oc-cn5g-20899-always-on + -c 100 -i 0.1 + 20 + 15 + + + + Iperf + iperf (DL/200Mbps/UDP)(60 sec) + true + -u -b 200M -t 60 -R -l1428 -p 5209 + up3 + 20 + 80 + balanced + oc-cn5g-20899-always-on + + + + Iperf + iperf (DL/400Mbps/UDP)(60 sec) + true + -u -b 400M -t 60 -R -l 1428 -p 5209 + up3 + 20 + 80 + oc-cn5g-20899-always-on + + + + Detach_UE + true + Detach UE + up3 + + + + IdleSleep + Sleep + 5 + + + + Undeploy_Object + true + Undeploy DU + ci-scripts/yaml_files/sa_fhi_7.2_benetel_8x8_du + oai-du + stonechat + + oai-du=EndsWithBye + + + + + Clean_Test_Server_Images + true + Clean Test Images on Test Server + stonechat + oai-gnb-fhi72-t2 + + + diff --git a/ci-scripts/yaml_files/sa_fhi_7.2_benetel_8x8_du/docker-compose.yml b/ci-scripts/yaml_files/sa_fhi_7.2_benetel_8x8_du/docker-compose.yml new file mode 100644 index 0000000000..486bdf5466 --- /dev/null +++ b/ci-scripts/yaml_files/sa_fhi_7.2_benetel_8x8_du/docker-compose.yml @@ -0,0 +1,59 @@ +# SPDX-License-Identifier: MIT + +services: + dpdk-init: + image: docker.io/library/oai-dpdk-init:latest + network_mode: host + container_name: dpdk-init + entrypoint: "/tmp/setup_sriov.sh" + privileged: true + devices: + - /dev/vfio:/dev/vfio/ + volumes: + - ./setup_sriov_benetel650_650.sh:/tmp/setup_sriov.sh + - /lib/modules:/lib/modules + - /usr/lib/modules:/usr/lib/modules + oai-du: + image: ${REGISTRY-oaisoftwarealliance/}oai-gnb-fhi72-t2:${TAG:-develop} + cap_add: + - IPC_LOCK + - SYS_NICE + cap_drop: + - ALL + container_name: oai-gnb + environment: + TZ: Europe/Paris + USE_ADDITIONAL_OPTIONS: --thread-pool 13,14,15,16,17,18,19,20 --loader.ldpc.shlibversion _aal --log_config.global_log_options level,nocolor,utc_time + devices: + - /dev/vfio:/dev/vfio/ + volumes: + - ../../conf_files/gnb-du.sa.band78.273prb.fhi72.8x8-benetel650_650.conf:/opt/oai-gnb/etc/gnb.conf + - /dev/hugepages:/dev/hugepages + # Please change these values based on your system + cpuset: "7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23" + networks: + oai-net: + ipv4_address: 172.21.10.20 + depends_on: + dpdk-init: + condition: service_completed_successfully + healthcheck: + test: /bin/bash -c "/opt/oai-gnb/bin/check-prach-io.sh" + start_period: 15s + start_interval: 500ms + interval: 5s + timeout: 5s + retries: 10 + +networks: + oai-net: + driver: macvlan + name: oai-net + ipam: + config: + - subnet: "172.21.8.0/22" + ip_range: "172.21.10.20/32" + gateway: "172.21.11.254" + driver_opts: + com.docker.network.bridge.name: "oai-net" + parent: bond0 diff --git a/ci-scripts/yaml_files/sa_fhi_7.2_benetel_8x8_du/setup_sriov_benetel650_650.sh b/ci-scripts/yaml_files/sa_fhi_7.2_benetel_8x8_du/setup_sriov_benetel650_650.sh new file mode 100755 index 0000000000..5ea868a031 --- /dev/null +++ b/ci-scripts/yaml_files/sa_fhi_7.2_benetel_8x8_du/setup_sriov_benetel650_650.sh @@ -0,0 +1,51 @@ +#!/bin/sh +#### 100G interface --> enp1s0f0 | pcie-address --> 01:00.0 +#### 25G interface (PTP) --> enp193s0f1 | pcie-address --> c1:00.1 +# SPDX-License-Identifier: MIT + +set -eu + +IF_NAME=ens2f1 +DPDK_DEVBIND_PREFIX=/usr/local/bin + +NUM_VFs=4 + +U_PLANE_MAC_ADD_1=00:11:22:33:44:66 +C_PLANE_MAC_ADD_1=00:11:22:33:44:67 +U_PLANE_MAC_ADD_2=00:11:22:33:44:68 +C_PLANE_MAC_ADD_2=00:11:22:33:44:69 + +VLAN_1=5 +VLAN_2=6 + +MTU=9216 + +U_PLANE_PCI_1=41:11.0 +C_PLANE_PCI_1=41:11.1 +U_PLANE_PCI_2=41:11.2 +C_PLANE_PCI_2=41:11.3 + +ethtool -G $IF_NAME rx 8160 tx 8160 +sh -c "echo 0 > /sys/class/net/$IF_NAME/device/sriov_numvfs" +sh -c "echo $NUM_VFs > /sys/class/net/$IF_NAME/device/sriov_numvfs" +modprobe -r iavf +modprobe iavf + +ip link set $IF_NAME vf 0 mac $U_PLANE_MAC_ADD_1 vlan $VLAN_1 spoofchk off mtu $MTU +ip link set $IF_NAME vf 1 mac $C_PLANE_MAC_ADD_1 vlan $VLAN_1 spoofchk off mtu $MTU +ip link set $IF_NAME vf 2 mac $U_PLANE_MAC_ADD_2 vlan $VLAN_2 spoofchk off mtu $MTU +ip link set $IF_NAME vf 3 mac $C_PLANE_MAC_ADD_2 vlan $VLAN_2 spoofchk off mtu $MTU + +sleep 1 + +${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --unbind $U_PLANE_PCI_1 +${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --unbind $C_PLANE_PCI_1 +${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --unbind $U_PLANE_PCI_2 +${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --unbind $C_PLANE_PCI_2 + +modprobe vfio-pci + +${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --bind vfio-pci $U_PLANE_PCI_1 +${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --bind vfio-pci $C_PLANE_PCI_1 +${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --bind vfio-pci $U_PLANE_PCI_2 +${DPDK_DEVBIND_PREFIX}/dpdk-devbind.py --bind vfio-pci $C_PLANE_PCI_2