diff --git a/ci-scripts/Jenkinsfile-GitLab-Container b/ci-scripts/Jenkinsfile-GitLab-Container
index b1bf895111..f5b83ec071 100644
--- a/ci-scripts/Jenkinsfile-GitLab-Container
+++ b/ci-scripts/Jenkinsfile-GitLab-Container
@@ -585,6 +585,29 @@ pipeline {
}
}
}
+ stage ("SA-FHI72-CN5G") {
+ when { expression {do5Gtest} }
+ steps {
+ script {
+ triggerSlaveJob ('RAN-SA-FHI72-CN5G', 'SA-FHI72-CN5G')
+ }
+ }
+ post {
+ always {
+ script {
+ // Using a unique variable name for each test stage to avoid overwriting on a global variable
+ // due to parallel-time concurrency
+ saFHI72Status = finalizeSlaveJob('RAN-SA-FHI72-CN5G')
+ }
+ }
+ failure {
+ script {
+ currentBuild.result = 'FAILURE'
+ failingStages += saFHI72Status
+ }
+ }
+ }
+ }
stage ("SA-OAIUE-CN5G") {
when { expression {do5Gtest} }
steps {
diff --git a/ci-scripts/ci_infra.yaml b/ci-scripts/ci_infra.yaml
index 8cbb5936e2..8ffb1c2083 100644
--- a/ci-scripts/ci_infra.yaml
+++ b/ci-scripts/ci_infra.yaml
@@ -18,6 +18,14 @@ up2:
IF: wwan0
MTU: 1500
+up2-fhi72:
+ Host: up2
+ AttachScript: sudo /opt/mbim-fhi72/start_quectel_mbim.sh
+ DetachScript: sudo /opt/mbim-fhi72/stop_quectel_mbim.sh
+ NetworkScript: ip a show dev wwan0
+ IF: wwan0
+ MTU: 1500
+
sphex_quectel:
Host: sphex
InitScript: sudo stdbuf -oL /home/oaicicd/quectel-CM/quectel-CM -4 -s oai.ipv4 &> /tmp/quecel-cm.log &
@@ -58,9 +66,18 @@ adb_ue_2:
oc-cn5g:
Host: avra
+ Namespace: "oaicicd-core-for-ci-ran"
+ CNPath: "/opt/oai-cn5g-fed-develop-2024-april-00102"
NetworkScript: echo "inet 172.21.6.102"
RunIperf3Server: False
+oc-cn5g-20897:
+ Host: cacofonix
+ Namespace: "oaicicd-core-for-fhi72"
+ CNPath: "/opt/oai-cn5g-fed-develop-2024-april-20897"
+ NetworkScript: echo "inet 172.21.6.105"
+ RunIperf3Server: False
+
matix-cn5g:
Host: matix
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
@@ -99,6 +116,10 @@ amarisoft_ue:
Host: amariue
InitScript: /root/lteue-linux-2023-10-27/ue/lteue /root/oaicicd/ran_sa_aw2s_asue_2x2/aw2s-multi-00102-2x2.cfg &
TermScript: /root/2023-10-27/libs/ws.js -t 10 127.0.0.1:9002 '{"message":"quit"}' || killall -KILL lteue-avx2
+amarisoft_ue_fhi72:
+ Host: amariue
+ InitScript: /root/lteue-linux-2023-10-27/ue/lteue /root/oaicicd/ran_sa_fhi72_asue_2x2_benetel550/fhi72-multi-20897-2x2.cfg &
+ TermScript: /root/2023-10-27/libs/ws.js -t 10 127.0.0.1:9002 '{"message":"quit"}' || killall -KILL lteue-avx2
amarisoft_ue_1:
Host: amariue
AttachScript: /root/2023-10-27/libs/ws.js 127.0.0.1:9002 '{"message":"power_on","ue_id":1}'
diff --git a/ci-scripts/cls_cluster.py b/ci-scripts/cls_cluster.py
index 80d6d95daa..3f11fad7fb 100644
--- a/ci-scripts/cls_cluster.py
+++ b/ci-scripts/cls_cluster.py
@@ -43,7 +43,6 @@ NAMESPACE = "oaicicd-ran"
OCUrl = "https://api.oai.cs.eurecom.fr:6443"
OCRegistry = "default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/"
CI_OC_RAN_NAMESPACE = "oaicicd-ran"
-CI_OC_CORE_NAMESPACE = "oaicicd-core-for-ci-ran"
CN_IMAGES = ["mysql", "oai-nrf", "oai-amf", "oai-smf", "oai-upf", "oai-ausf", "oai-udm", "oai-udr", "oai-traffic-server"]
CN_CONTAINERS = ["", "-c nrf", "-c amf", "-c smf", "-c upf", "-c ausf", "-c udm", "-c udr", ""]
@@ -68,10 +67,9 @@ def OC_login(cmd, ocUserName, ocPassword, ocProjectName):
def OC_logout(cmd):
cmd.run(f'oc logout')
-def OC_deploy_CN(cmd, ocUserName, ocPassword):
- logging.debug('OC OAI CN5G: Deploying OAI CN5G on Openshift Cluster')
- path = "/opt/oai-cn5g-fed-develop-2024-april-00102"
- succeeded = OC_login(cmd, ocUserName, ocPassword, CI_OC_CORE_NAMESPACE)
+def OC_deploy_CN(cmd, ocUserName, ocPassword, ocNamespace, path):
+ logging.debug(f'OC OAI CN5G: Deploying OAI CN5G on Openshift Cluster: {ocNamespace}')
+ succeeded = OC_login(cmd, ocUserName, ocPassword, ocNamespace)
if not succeeded:
return False, CONST.OC_LOGIN_FAIL
cmd.run('helm uninstall oai5gcn --wait --timeout 60s')
@@ -84,10 +82,9 @@ def OC_deploy_CN(cmd, ocUserName, ocPassword):
OC_logout(cmd)
return True, report
-def OC_undeploy_CN(cmd, ocUserName, ocPassword):
- logging.debug('OC OAI CN5G: Terminating CN on Openshift Cluster')
- path = "/opt/oai-cn5g-fed-develop-2024-april-00102"
- succeeded = OC_login(cmd, ocUserName, ocPassword, CI_OC_CORE_NAMESPACE)
+def OC_undeploy_CN(cmd, ocUserName, ocPassword, ocNamespace, path):
+ logging.debug(f'OC OAI CN5G: Terminating CN on Openshift Cluster: {ocNamespace}')
+ succeeded = OC_login(cmd, ocUserName, ocPassword, ocNamespace)
if not succeeded:
return False, CONST.OC_LOGIN_FAIL
cmd.run(f'rm -Rf {path}/logs')
diff --git a/ci-scripts/cls_module.py b/ci-scripts/cls_module.py
index d0cfba0299..ef758a2933 100644
--- a/ci-scripts/cls_module.py
+++ b/ci-scripts/cls_module.py
@@ -65,6 +65,8 @@ class Module_UE:
self.logStore = m.get('LogStore')
self.cmd_prefix = m.get('CmdPrefix')
self.runIperf3Server = m.get('RunIperf3Server', True)
+ self.namespace = m.get('Namespace')
+ self.cnPath = m.get('CNPath')
logging.info(f'initialized {self.module_name}@{self.host} from {filename}')
def __str__(self):
@@ -190,6 +192,12 @@ class Module_UE:
def getHost(self):
return self.host
+ def getNamespace(self):
+ return self.namespace
+
+ def getCNPath(self):
+ return self.cnPath
+
def getRunIperf3Server(self):
return self.runIperf3Server
diff --git a/ci-scripts/conf_files/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf b/ci-scripts/conf_files/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf
new file mode 100644
index 0000000000..b98ed5d31c
--- /dev/null
+++ b/ci-scripts/conf_files/gnb.sa.band77.273prb.fhi72.4x4-vvdn.conf
@@ -0,0 +1,297 @@
+Active_gNBs = ( "gNB-OAI");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+gNBs =
+(
+ {
+ ////////// Identification parameters:
+ gNB_ID = 0xe00;
+ gNB_name = "gNB-OAI";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = 1;
+ plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ( { sst = 1; }); });
+
+ //nr_cellid = 12345678L;
+ nr_cellid = 1;
+
+ ////////// Physical parameters:
+
+ pdsch_AntennaPorts_XP = 2;
+ pdsch_AntennaPorts_N1 = 1;
+ maxMIMO_layers = 2;
+ pusch_AntennaPorts = 4;
+ do_CSIRS = 1;
+ do_SRS = 0 ;
+
+ pdcch_ConfigSIB1 = (
+ {
+ controlResourceSetZero = 11;
+ searchSpaceZero = 0;
+ }
+ );
+
+ servingCellConfigCommon = (
+ {
+ #spCellConfigCommon
+ physCellId = 0;
+# downlinkConfigCommon
+ #frequencyInfoDL
+ # this is 3450.72 MHz (center frequency)
+ absoluteFrequencySSB = 666624;
+ dl_frequencyBand = 77;
+ # this is 3401.58 MHz
+ dl_absoluteFrequencyPointA = 663348;
+ #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 = 159;
+#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 = 7;
+#powerRampingStep
+# 0=dB0,1=dB2,2=dB4,3=dB6
+ powerRampingStep = 2;
+#ra_ReponseWindow
+#1,2,4,8,10,20,40,80
+ ra_ResponseWindow = 5;
+#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 = 3;
+#oneHalf (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 = -100;
+
+# pucch-ConfigCommon setup :
+# pucchGroupHopping
+# 0 = neither, 1= group hopping, 2=sequence hopping
+ pucchGroupHopping = 0;
+ hoppingId = 0;
+ p0_nominal = -96;
+# ssb_PositionsInBurs_BitmapPR
+# 1=short, 2=medium, 3=long
+ ssb_PositionsInBurst_PR = 2;
+ 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;
+ };
+
+
+ ////////// AMF parameters:
+ amf_ip_address = ({ ipv4 = "172.21.6.103"; });
+
+ NETWORK_INTERFACES :
+ {
+ GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.18.20";
+ GNB_IPV4_ADDRESS_FOR_NGU = "172.21.18.20";
+ GNB_PORT_FOR_S1U = 2152; # Spec 2152
+ };
+ }
+);
+
+MACRLCs = (
+{
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ pusch_TargetSNRx10 = 180;
+ pucch_TargetSNRx10 = 230;
+ ul_bler_target_upper=.35;
+ ul_bler_target_lower=.15;
+ pusch_FailureThres = 100;
+}
+);
+
+L1s = (
+{
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ prach_dtx_threshold = 130
+ pucch0_dtx_threshold = 80;
+ pusch_dtx_threshold = -100;
+ tx_amp_backoff_dB = 3;
+ L1_rx_thread_core = 3;
+ L1_tx_thread_core = 4;
+ phase_compensation = 0; # needs to match O-RU configuration
+}
+);
+
+RUs = (
+{
+ local_rf = "no";
+ nb_tx = 4;
+ nb_rx = 4;
+ att_tx = 0
+ att_rx = 0;
+ bands = [77];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 75;
+ sf_extension = 0;
+ eNB_instances = [0];
+ ru_thread_core = 5;
+ sl_ahead = 5;
+ ##beamforming 1x2 matrix: 1 layer x 2 antennas
+ bf_weights = [0x00007fff, 0x0000,0x00007fff, 0x0000];
+ clock_src = "internal";
+ tr_preference = "raw_if4p5"; # important: activate FHI7.2
+ do_precoding = 0; # needs to match O-RU configuration
+}
+);
+
+rfsimulator :
+{
+ serveraddr = "server";
+ serverport = "4043";
+ options = (); #("saviq"); or/and "chanmod"
+ modelname = "AWGN";
+ IQfile = "/tmp/rfsimulator.iqs";
+};
+
+security = {
+ # preferred ciphering algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nea0, nea1, nea2, nea3
+ ciphering_algorithms = ( "nea0" );
+
+ # preferred integrity algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nia0, nia1, nia2, nia3
+ integrity_algorithms = ( "nia2", "nia0" );
+
+ # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
+ # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
+ drb_ciphering = "yes";
+ drb_integrity = "no";
+};
+
+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:c3:11.0", "0000:c3:11.1");
+ system_core = 0;
+ io_core = 1;
+ worker_cores = (2);
+ du_addr = ("76:76:64:6e:00:01", "76:76:64:6e:00:01");
+ ru_addr = ("98:ae:71:01:c5:eb", "98:ae:71:01:c5:eb");
+ mtu = 9216; # check if xran uses this properly
+ fh_config = ({
+ Tadv_cp_dl = 125;
+ T2a_cp_dl = (285, 429); # (min, max)
+ T2a_cp_ul = (285, 429); # (min, max)
+ T2a_up = (125, 428); # (min, max)
+ Ta3 = (130, 170); # (min, max)
+ T1a_cp_dl = (285, 470); # (min, max)
+ T1a_cp_ul = (285, 429); # (min, max)
+ T1a_up = (125, 350); # (min, max)
+ Ta4 = (110, 180); # (min, max)
+ ru_config = {
+ iq_width = 9;
+ iq_width_prach = 9;
+ };
+ prach_config = {
+ eAxC_offset = 4;
+ };
+ });
+};
diff --git a/ci-scripts/conf_files/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf b/ci-scripts/conf_files/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf
new file mode 100644
index 0000000000..f8586437fa
--- /dev/null
+++ b/ci-scripts/conf_files/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf
@@ -0,0 +1,296 @@
+Active_gNBs = ( "gNB-OAI");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+gNBs =
+(
+ {
+ ////////// Identification parameters:
+ gNB_ID = 0xe00;
+ gNB_name = "gNB-OAI";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = 1;
+ plmn_list = ({ mcc = 208; mnc = 97; mnc_length = 2; snssaiList = ( { sst = 1; }); });
+
+ nr_cellid = 1;
+
+ ////////// Physical parameters:
+
+ pdsch_AntennaPorts_XP = 2;
+ pdsch_AntennaPorts_N1 = 1;
+ maxMIMO_layers = 2;
+ pusch_AntennaPorts = 4;
+ do_CSIRS = 1;
+ do_SRS = 0 ;
+ sib1_tda = 15;
+# force_UL256qam_off = 1;
+
+ pdcch_ConfigSIB1 = (
+ {
+ controlResourceSetZero = 11;
+ searchSpaceZero = 0;
+ }
+ );
+
+ servingCellConfigCommon = (
+ {
+ #spCellConfigCommon
+
+ physCellId = 0;
+ # n_TimingAdvanceOffset = 0;
+# downlinkConfigCommon
+ #frequencyInfoDL
+ # this is 3450.72 MHz (center frequency)
+ absoluteFrequencySSB = 623328;
+ dl_frequencyBand = 78;
+ # this is 3401.58 MHz
+ dl_absoluteFrequencyPointA = 620052;
+ #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 = 78;
+ #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 = 151;
+#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 = 1;
+#ra_ReponseWindow
+#1,2,4,8,10,20,40,80
+ ra_ResponseWindow = 5;
+#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 = 3;
+#oneHalf (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_PositionsInBurs_BitmapPR
+# 1=short, 2=medium, 3=long
+ ssb_PositionsInBurst_PR = 2;
+ 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 = 6;
+ nrofDownlinkSlots = 7;
+ nrofDownlinkSymbols = 6;
+ nrofUplinkSlots = 2;
+ nrofUplinkSymbols = 4;
+
+ ssPBCH_BlockPower = -15;
+ }
+
+ );
+
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+
+ ////////// AMF parameters:
+ amf_ip_address = ({ ipv4 = "172.21.6.103"; });
+
+ NETWORK_INTERFACES :
+ {
+ GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.18.20";
+ GNB_IPV4_ADDRESS_FOR_NGU = "172.21.18.20";
+ GNB_PORT_FOR_S1U = 2152; # Spec 2152
+ };
+ }
+);
+
+MACRLCs = (
+{
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ pusch_TargetSNRx10 = 100;
+ 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 = 1000;
+ ul_max_mcs = 28;
+}
+);
+
+L1s = (
+{
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ prach_dtx_threshold = 90;
+ pucch0_dtx_threshold = 80;
+ pusch_dtx_threshold = 10;
+ max_ldpc_iterations = 15;
+ tx_amp_backoff_dB = 12; # needs to match O-RU configuration
+ L1_rx_thread_core = 3;
+ L1_tx_thread_core = 4;
+ phase_compensation = 0; # needs to match O-RU configuration
+}
+);
+
+RUs = (
+{
+ local_rf = "no";
+ nb_tx = 4;
+ nb_rx = 4;
+ att_tx = 0
+ att_rx = 0;
+ bands = [78];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 75;
+ sf_extension = 0;
+ eNB_instances = [0];
+ ru_thread_core = 5;
+ sl_ahead = 10;
+ ##beamforming 1x2 matrix: 1 layer x 2 antennas
+ bf_weights = [0x00007fff, 0x0000,0x00007fff, 0x0000];
+ tr_preference = "raw_if4p5"; # important: activate FHI7.2
+ do_precoding = 0; # needs to match O-RU configuration
+}
+);
+
+security = {
+ # preferred ciphering algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nea0, nea1, nea2, nea3
+ ciphering_algorithms = ( "nea0" );
+
+ # preferred integrity algorithms
+ # the first one of the list that an UE supports in chosen
+ # valid values: nia0, nia1, nia2, nia3
+ integrity_algorithms = ( "nia2", "nia0" );
+
+ # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
+ # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
+ drb_ciphering = "yes";
+ drb_integrity = "no";
+};
+
+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:c3:11.0", "0000:c3:11.1");
+ system_core = 0;
+ io_core = 1;
+ worker_cores = (2);
+ du_addr = ("00:11:22:33:44:66", "00:11:22:33:44:67");
+ ru_addr = ("70:b3:d5:e1:5b:81", "70:b3:d5:e1:5b:81");
+ mtu = 9216;
+ file_prefix = "fhi_72";
+ fh_config = ({
+ Tadv_cp_dl = 125;
+ T2a_cp_dl = (259, 500);
+ T2a_cp_ul = (25, 500);
+ T2a_up = (134, 375);
+ Ta3 = (152, 160);
+ 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;
+ };
+ prach_config = {
+ eAxC_offset = 4;
+ };
+ });
+};
diff --git a/ci-scripts/epc.py b/ci-scripts/epc.py
index fb5aa8cde6..7c0eb51853 100644
--- a/ci-scripts/epc.py
+++ b/ci-scripts/epc.py
@@ -48,6 +48,7 @@ import helpreadme as HELP
import constants as CONST
import cls_cluster as OC
import cls_cmd
+import cls_module
#-----------------------------------------------------------
# Class Declaration
#-----------------------------------------------------------
@@ -75,6 +76,7 @@ class EPCManagement():
self.OCRegistry = "default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/"
self.OCUserName = ''
self.OCPassword = ''
+ self.cnID = ''
self.imageToPull = ''
self.eNBSourceCodePath = ''
@@ -298,7 +300,8 @@ class EPCManagement():
html_cell += '(' + res4.group('date') + ')'
html_cell += '\n'
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
- succeeded, report = OC.OC_deploy_CN(mySSH, self.OCUserName, self.OCPassword)
+ cn = cls_module.Module_UE(self.cnID)
+ succeeded, report = OC.OC_deploy_CN(mySSH, self.OCUserName, self.OCPassword, cn.getNamespace(), cn.getCNPath())
if not succeeded:
HTML.CreateHtmlTestRow('N/A', 'KO', report)
HTML.CreateHtmlTabFooter(False)
@@ -575,7 +578,8 @@ class EPCManagement():
mySSH.copyin(f'{self.SourceCodePath}/logs/test_logs_CN.zip','test_logs_CN.zip')
logging.debug(message)
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
- succeeded, report = OC.OC_undeploy_CN(mySSH, self.OCUserName, self.OCPassword)
+ cn = cls_module.Module_UE(self.cnID)
+ succeeded, report = OC.OC_undeploy_CN(mySSH, self.OCUserName, self.OCPassword, cn.getNamespace(), cn.getCNPath())
if not succeeded:
HTML.CreateHtmlTestRow('N/A', 'KO', report)
HTML.CreateHtmlTabFooter(False)
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index 8f1235d8b4..ed002c1fa2 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -337,11 +337,13 @@ def GetParametersFromXML(action):
string_field = test.findtext('args')
if (string_field is not None):
EPC.cfgDeploy = string_field
+ EPC.cnID = test.findtext('cn_id')
elif action == 'Terminate_5GCN':
string_field = test.findtext('args')
if (string_field is not None):
EPC.cfgUnDeploy = string_field
+ EPC.cnID = test.findtext('cn_id')
elif action == 'Deploy_Object' or action == 'Undeploy_Object':
eNB_instance=test.findtext('eNB_instance')
diff --git a/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml b/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml
new file mode 100644
index 0000000000..bac2ec38a0
--- /dev/null
+++ b/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+ |
+ + OAI O-RAN 7.2 Front-haul Docker Compose + | +