Add Aerial platform into CI
- create XML files for the Aerial pipeline - create docker-compose to automate deployment - add documentation - add to main Jenkinsfile Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr> Co-authored-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org> Co-authored-by: Rúben Soares da Silva <rsilva@allbesmart.pt>
This commit is contained in:
co-authored by
Jaroslava Fiedlerova
Rúben Soares da Silva
parent
4b3ea3f469
commit
1fadd7adb6
@@ -562,6 +562,29 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stage ("SA-AERIAL-CN5G") {
|
||||||
|
when { expression {do5Gtest} }
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
triggerSlaveJob ('RAN-SA-AERIAL-CN5G', 'SA-AERIAL-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
|
||||||
|
saAERIALStatus = finalizeSlaveJob('RAN-SA-AERIAL-CN5G')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
failure {
|
||||||
|
script {
|
||||||
|
currentBuild.result = 'FAILURE'
|
||||||
|
failingStages += saAERIALStatus
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
stage ("SA-OAIUE-CN5G") {
|
stage ("SA-OAIUE-CN5G") {
|
||||||
when { expression {do5Gtest} }
|
when { expression {do5Gtest} }
|
||||||
steps {
|
steps {
|
||||||
|
|||||||
@@ -18,6 +18,17 @@ up2:
|
|||||||
IF: wwan0
|
IF: wwan0
|
||||||
MTU: 1500
|
MTU: 1500
|
||||||
|
|
||||||
|
sphex_quectel:
|
||||||
|
Host: sphex
|
||||||
|
InitScript: sudo stdbuf -oL /home/oaicicd/quectel-CM/quectel-CM -4 -s oai.ipv4 &> /tmp/quecel-cm.log &
|
||||||
|
TermScript: sudo -S killall --signal SIGKILL quectel-CM
|
||||||
|
AttachScript: sudo python3 ci_ctl_qtel.py /dev/ttyUSB3 wup
|
||||||
|
DetachScript: sudo python3 ci_ctl_qtel.py /dev/ttyUSB3 detach
|
||||||
|
NetworkScript: ip a show dev wwan0
|
||||||
|
IF: wwan0
|
||||||
|
MTU: 1500
|
||||||
|
LogStore: /media/ci_qlogs
|
||||||
|
|
||||||
adb_ue_1:
|
adb_ue_1:
|
||||||
Host: nano
|
Host: nano
|
||||||
InitScript: /home/oaicicd/ci_ctl_adb.sh initialize R3CM40LZPHT
|
InitScript: /home/oaicicd/ci_ctl_adb.sh initialize R3CM40LZPHT
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ import cls_oaicitest
|
|||||||
# Helper functions used here and in other classes
|
# Helper functions used here and in other classes
|
||||||
# (e.g., cls_cluster.py)
|
# (e.g., cls_cluster.py)
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
IMAGES = ['oai-enb', 'oai-lte-ru', 'oai-lte-ue', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s', 'oai-nr-ue', 'oai-gnb-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan']
|
IMAGES = ['oai-enb', 'oai-lte-ru', 'oai-lte-ue', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s', 'oai-nr-ue', 'oai-gnb-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan', 'oai-gnb-aerial']
|
||||||
|
|
||||||
def CreateWorkspace(sshSession, sourcePath, ranRepository, ranCommitID, ranTargetBranch, ranAllowMerge):
|
def CreateWorkspace(sshSession, sourcePath, ranRepository, ranCommitID, ranTargetBranch, ranAllowMerge):
|
||||||
if ranCommitID == '':
|
if ranCommitID == '':
|
||||||
@@ -383,6 +383,7 @@ class Containerize():
|
|||||||
imageNames.append(('oai-physim', 'phySim', 'oai-physim', ''))
|
imageNames.append(('oai-physim', 'phySim', 'oai-physim', ''))
|
||||||
if self.host == 'Ubuntu':
|
if self.host == 'Ubuntu':
|
||||||
imageNames.append(('oai-lte-ru', 'lteRU', 'oai-lte-ru', ''))
|
imageNames.append(('oai-lte-ru', 'lteRU', 'oai-lte-ru', ''))
|
||||||
|
imageNames.append(('oai-gnb-aerial', 'gNB.aerial', 'oai-gnb-aerial', ''))
|
||||||
# Building again the 5G images with Address Sanitizer
|
# Building again the 5G images with Address Sanitizer
|
||||||
imageNames.append(('ran-build', 'build', 'ran-build-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
|
imageNames.append(('ran-build', 'build', 'ran-build-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
|
||||||
imageNames.append(('oai-gnb', 'gNB', 'oai-gnb-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
|
imageNames.append(('oai-gnb', 'gNB', 'oai-gnb-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
|
||||||
@@ -480,7 +481,11 @@ class Containerize():
|
|||||||
cmd.run(f'sed -i -e "s#ran-build:latest#ran-build-asan:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}')
|
cmd.run(f'sed -i -e "s#ran-build:latest#ran-build-asan:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}')
|
||||||
elif image != 'ran-build':
|
elif image != 'ran-build':
|
||||||
cmd.run(f'sed -i -e "s#ran-build:latest#ran-build:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}')
|
cmd.run(f'sed -i -e "s#ran-build:latest#ran-build:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}')
|
||||||
|
if image == 'oai-gnb-aerial':
|
||||||
|
cmd.run('cp -f /opt/nvidia-ipc/nvipc_src.2023.11.28.tar.gz .')
|
||||||
ret = cmd.run(f'{self.cli} build {self.cliBuildOptions} --target {image} --tag {name}:{imageTag} --file docker/Dockerfile.{pattern}{self.dockerfileprefix} {option} . > cmake_targets/log/{name}.log 2>&1', timeout=1200)
|
ret = cmd.run(f'{self.cli} build {self.cliBuildOptions} --target {image} --tag {name}:{imageTag} --file docker/Dockerfile.{pattern}{self.dockerfileprefix} {option} . > cmake_targets/log/{name}.log 2>&1', timeout=1200)
|
||||||
|
if image == 'oai-gnb-aerial':
|
||||||
|
cmd.run('rm -f nvipc_src.2023.11.28.tar.gz')
|
||||||
if image == 'ran-build' and ret.returncode == 0:
|
if image == 'ran-build' and ret.returncode == 0:
|
||||||
cmd.run(f"docker run --name test-log -d {name}:{imageTag} /bin/true")
|
cmd.run(f"docker run --name test-log -d {name}:{imageTag} /bin/true")
|
||||||
cmd.run(f"docker cp test-log:/oai-ran/cmake_targets/log/ cmake_targets/log/{name}/")
|
cmd.run(f"docker cp test-log:/oai-ran/cmake_targets/log/ cmake_targets/log/{name}/")
|
||||||
@@ -959,7 +964,7 @@ class Containerize():
|
|||||||
|
|
||||||
# Checking Status
|
# Checking Status
|
||||||
grep = ''
|
grep = ''
|
||||||
if svcName != '': grep = f' | grep -A3 {svcName}'
|
if svcName != '': grep = f' | grep -A3 --color=never {svcName}'
|
||||||
mySSH.command(f'docker compose --file ci-docker-compose.yml config {grep}', '\$', 5)
|
mySSH.command(f'docker compose --file ci-docker-compose.yml config {grep}', '\$', 5)
|
||||||
result = re.search('container_name: (?P<container_name>[a-zA-Z0-9\-\_]+)', mySSH.getBefore())
|
result = re.search('container_name: (?P<container_name>[a-zA-Z0-9\-\_]+)', mySSH.getBefore())
|
||||||
unhealthyNb = 0
|
unhealthyNb = 0
|
||||||
@@ -1008,8 +1013,8 @@ class Containerize():
|
|||||||
if healthyNb == 1:
|
if healthyNb == 1:
|
||||||
cnt = 0
|
cnt = 0
|
||||||
while (cnt < 20):
|
while (cnt < 20):
|
||||||
mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting"', '\$', 30)
|
mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting|ready"', '\$', 30)
|
||||||
result = re.search('got sync|Starting E1AP at CU UP|Starting F1AP at CU|Got sync|Waiting for RUs to be configured', mySSH.getBefore())
|
result = re.search('got sync|Starting E1AP at CU UP|Starting F1AP at CU|Got sync|Waiting for RUs to be configured|cuPHYController initialized|Received CONFIG.response, gNB is ready', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
time.sleep(6)
|
time.sleep(6)
|
||||||
cnt += 1
|
cnt += 1
|
||||||
@@ -1096,9 +1101,6 @@ class Containerize():
|
|||||||
filename = f'{svcName}-{HTML.testCase_id}.log'
|
filename = f'{svcName}-{HTML.testCase_id}.log'
|
||||||
mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml logs --no-log-prefix -- {svcName} &> {lSourcePath}/cmake_targets/log/{filename}')
|
mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml logs --no-log-prefix -- {svcName} &> {lSourcePath}/cmake_targets/log/{filename}')
|
||||||
copyin_res = mySSH.copyin(f'{lSourcePath}/cmake_targets/log/{filename}', f'{filename}') and copyin_res
|
copyin_res = mySSH.copyin(f'{lSourcePath}/cmake_targets/log/{filename}', f'{filename}') and copyin_res
|
||||||
# when nv-cubb container is available, copy L1 pcap, OAI Aerial pipeline
|
|
||||||
if 'nv-cubb' in allServices:
|
|
||||||
mySSH.run(f'cp {lSourcePath}/cmake_targets/share/gnb_nvipc.pcap {lSourcePath}/cmake_targets/gnb_nvipc.pcap')
|
|
||||||
|
|
||||||
mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml down -v')
|
mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml down -v')
|
||||||
|
|
||||||
@@ -1119,14 +1121,18 @@ class Containerize():
|
|||||||
HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
else:
|
else:
|
||||||
for svcName in services:
|
for svcName in services:
|
||||||
filename = f'{svcName}-{HTML.testCase_id}.log'
|
if svcName == 'nv-cubb':
|
||||||
logging.debug(f'\u001B[1m Analyzing logfile {filename}\u001B[0m')
|
msg = 'Undeploy PNF/Nvidia CUBB'
|
||||||
logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
|
HTML.CreateHtmlTestRow(msg, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
if (logStatus < 0):
|
|
||||||
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
|
|
||||||
self.exitStatus = 1
|
|
||||||
else:
|
else:
|
||||||
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
filename = f'{svcName}-{HTML.testCase_id}.log'
|
||||||
|
logging.debug(f'\u001B[1m Analyzing logfile {filename}\u001B[0m')
|
||||||
|
logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
|
||||||
|
if (logStatus < 0):
|
||||||
|
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
|
||||||
|
self.exitStatus = 1
|
||||||
|
else:
|
||||||
|
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
# all the xNB run logs shall be on the server 0 for logCollecting
|
# all the xNB run logs shall be on the server 0 for logCollecting
|
||||||
if self.eNB_serverId[self.eNB_instance] != '0':
|
if self.eNB_serverId[self.eNB_instance] != '0':
|
||||||
mySSH.copyout(f'./*.log', f'{lSourcePath}/cmake_targets/', recursive=True)
|
mySSH.copyout(f'./*.log', f'{lSourcePath}/cmake_targets/', recursive=True)
|
||||||
|
|||||||
@@ -0,0 +1,262 @@
|
|||||||
|
Active_gNBs = ( "gNB-OAI");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
sa = 1;
|
||||||
|
nfapi = "AERIAL";
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
pdsch_AntennaPorts_XP = 2;
|
||||||
|
pusch_AntennaPorts = 2;
|
||||||
|
do_CSIRS = 1;
|
||||||
|
do_SRS = 0;
|
||||||
|
min_rxtxtime = 2;
|
||||||
|
|
||||||
|
pdcch_ConfigSIB1 = (
|
||||||
|
{
|
||||||
|
controlResourceSetZero = 12;
|
||||||
|
searchSpaceZero = 0;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
servingCellConfigCommon = (
|
||||||
|
{
|
||||||
|
#spCellConfigCommon
|
||||||
|
|
||||||
|
physCellId = 0;
|
||||||
|
|
||||||
|
# downlinkConfigCommon
|
||||||
|
#frequencyInfoDL
|
||||||
|
# this is 3300.24 + 134*12*30e3 = 3348.48 MHz (5G NR GSCN: 7741)
|
||||||
|
absoluteFrequencySSB = 649920;
|
||||||
|
#652860; #should be 649920
|
||||||
|
#647520;
|
||||||
|
#647540;
|
||||||
|
#649920;
|
||||||
|
#650208;
|
||||||
|
#647540;
|
||||||
|
dl_frequencyBand = 78;
|
||||||
|
# this is 3300.24 MHz
|
||||||
|
dl_absoluteFrequencyPointA = 646724;
|
||||||
|
#649104;
|
||||||
|
#646724;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
dl_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
dl_subcarrierSpacing = 1;
|
||||||
|
dl_carrierBandwidth = 273;
|
||||||
|
#initialDownlinkBWP
|
||||||
|
#genericParameters
|
||||||
|
# this is RBstart=0,L=162 (275*(275-L+1))+(274-RBstart))
|
||||||
|
initialDLBWPlocationAndBandwidth = 1099;
|
||||||
|
#
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
|
#pdcch-ConfigCommon
|
||||||
|
initialDLBWPcontrolResourceSetZero = 12;
|
||||||
|
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 = 20;
|
||||||
|
#initialUplinkBWP
|
||||||
|
#genericParameters
|
||||||
|
initialULBWPlocationAndBandwidth = 1099;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
|
#rach-ConfigCommon
|
||||||
|
#rach-ConfigGeneric
|
||||||
|
prach_ConfigurationIndex = 159;# testMAC 158; OAI gNB 98
|
||||||
|
#prach_msg1_FDM
|
||||||
|
#0 = one, 1=two, 2=four, 3=eight
|
||||||
|
prach_msg1_FDM = 0;
|
||||||
|
prach_msg1_FrequencyStart = 0;
|
||||||
|
zeroCorrelationZoneConfig = 12;
|
||||||
|
preambleReceivedTargetPower = -96;
|
||||||
|
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||||
|
preambleTransMax = 6;
|
||||||
|
#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,
|
||||||
|
|
||||||
|
msg3_DeltaPreamble = 1;
|
||||||
|
p0_NominalWithGrant = -90;
|
||||||
|
|
||||||
|
# pucch-ConfigCommon setup :
|
||||||
|
# pucchGroupHopping
|
||||||
|
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||||
|
pucchGroupHopping = 0;
|
||||||
|
hoppingId = 40;
|
||||||
|
p0_nominal = -90;
|
||||||
|
# ssb_PositionsInBurs_BitmapPR
|
||||||
|
# 1=short, 2=medium, 3=long
|
||||||
|
ssb_PositionsInBurst_PR = 2;
|
||||||
|
ssb_PositionsInBurst_Bitmap = 1;
|
||||||
|
|
||||||
|
# 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; #6;
|
||||||
|
nrofDownlinkSlots = 3; #7;
|
||||||
|
nrofDownlinkSymbols = 6;
|
||||||
|
nrofUplinkSlots = 1; #2;
|
||||||
|
nrofUplinkSymbols = 0;
|
||||||
|
|
||||||
|
ssPBCH_BlockPower = -25;
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////// AMF parameters:
|
||||||
|
amf_ip_address = ( { ipv4 = "192.168.71.132";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
GNB_INTERFACE_NAME_FOR_NG_AMF = "eno1";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.131";
|
||||||
|
GNB_INTERFACE_NAME_FOR_NGU = "eno";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.131";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
local_s_if_name = "lo:";
|
||||||
|
remote_s_address = "127.0.0.1"; // pnf addr [!]
|
||||||
|
local_s_address = "127.0.0.2"; // vnf addr
|
||||||
|
local_s_portc = 50001; // vnf p5 port
|
||||||
|
remote_s_portc = 50000; // pnf p5 port [!]
|
||||||
|
local_s_portd = 50011; // vnf p7 port [!]
|
||||||
|
remote_s_portd = 50010; // pnf p7 port [!]
|
||||||
|
tr_s_preference = "aerial";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
pusch_TargetSNRx10 = 200; # 150;
|
||||||
|
pucch_TargetSNRx10 = 200; #200;
|
||||||
|
ulsch_max_frame_inactivity = 10;
|
||||||
|
dl_max_mcs = 28;
|
||||||
|
ul_max_mcs = 28;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
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 ="debug";
|
||||||
|
f1ap_log_level ="debug";
|
||||||
|
};
|
||||||
+4
-2
@@ -262,10 +262,12 @@ class EPCManagement():
|
|||||||
logging.debug('Starting OAI CN5G')
|
logging.debug('Starting OAI CN5G')
|
||||||
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
|
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
|
||||||
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5)
|
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5)
|
||||||
mySSH.command('cd /opt/oai-cn5g-fed-v1.5/docker-compose', '\$', 5)
|
mySSH.command(f'cd {self.SourceCodePath}/docker-compose', '\$', 5)
|
||||||
mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60)
|
mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60)
|
||||||
if re.search('start-mini-as-ue', self.cfgDeploy):
|
if re.search('start-mini-as-ue', self.cfgDeploy):
|
||||||
dFile = 'docker-compose-mini-nrf-asue.yaml'
|
dFile = 'docker-compose-mini-nrf-asue.yaml'
|
||||||
|
elif re.search('basic', self.cfgDeploy):\
|
||||||
|
dFile = 'docker-compose-basic-nrf.yaml'
|
||||||
else:
|
else:
|
||||||
dFile = 'docker-compose-mini-nrf.yaml'
|
dFile = 'docker-compose-mini-nrf.yaml'
|
||||||
mySSH.command('docker-compose -f ' + dFile + ' ps -a', '\$', 60)
|
mySSH.command('docker-compose -f ' + dFile + ' ps -a', '\$', 60)
|
||||||
@@ -582,7 +584,7 @@ class EPCManagement():
|
|||||||
mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5)
|
mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5)
|
||||||
|
|
||||||
logging.debug('Terminating OAI CN5G')
|
logging.debug('Terminating OAI CN5G')
|
||||||
mySSH.command('cd /opt/oai-cn5g-fed-v1.5/docker-compose', '\$', 5)
|
mySSH.command(f'cd {self.SourceCodePath}/docker-compose', '\$', 5)
|
||||||
mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60)
|
mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60)
|
||||||
mySSH.command('docker volume prune --force || true', '\$', 60)
|
mySSH.command('docker volume prune --force || true', '\$', 60)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|||||||
@@ -0,0 +1,139 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.openairinterface.org/?page_id=698
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
contact@openairinterface.org
|
||||||
|
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>TEST-AERIAL-SA</htmlTabRef>
|
||||||
|
<htmlTabName>AERIAL 100 MHz TDD SA</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
111111
|
||||||
|
000222
|
||||||
|
001111
|
||||||
|
002222
|
||||||
|
002223
|
||||||
|
000111
|
||||||
|
100000
|
||||||
|
000011
|
||||||
|
000022
|
||||||
|
000033
|
||||||
|
000222
|
||||||
|
003333
|
||||||
|
222222
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="111111">
|
||||||
|
<class>Pull_Local_Registry</class>
|
||||||
|
<desc>Pull Images from Local Registry</desc>
|
||||||
|
<test_svr_id>0</test_svr_id>
|
||||||
|
<images_to_pull>oai-gnb-aerial</images_to_pull>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="001111">
|
||||||
|
<class>Initialize_UE</class>
|
||||||
|
<desc>Initialize Quectel</desc>
|
||||||
|
<id>sphex_quectel</id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="002222">
|
||||||
|
<class>Deploy_Object</class>
|
||||||
|
<desc>Deploy PNF/Nvidia CUBB in a container</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/sa_gnb_aerial</yaml_path>
|
||||||
|
<services>nv-cubb</services>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="002223">
|
||||||
|
<class>Deploy_Object</class>
|
||||||
|
<desc>Deploy VNF in a container</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/sa_gnb_aerial</yaml_path>
|
||||||
|
<services>oai-gnb-aerial</services>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000111">
|
||||||
|
<class>Attach_UE</class>
|
||||||
|
<desc>Attach Quectel</desc>
|
||||||
|
<id>sphex_quectel</id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="100000">
|
||||||
|
<class>Custom_Command</class>
|
||||||
|
<desc>Adding a IP route</desc>
|
||||||
|
<node>sphex</node>
|
||||||
|
<command>sudo ip route add 192.168.71.128/26 via 12.1.1.151 dev wwan0</command>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000011">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
|
<id>sphex_quectel</id>
|
||||||
|
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
||||||
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000022">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (DL/UDP/80M)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 80M -t 30 -R</iperf_args>
|
||||||
|
<direction>IPERF3</direction>
|
||||||
|
<id>sphex_quectel</id>
|
||||||
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000033">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (UL/UDP/40M)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 40M -t 30</iperf_args>
|
||||||
|
<direction>IPERF3</direction>
|
||||||
|
<id>sphex_quectel</id>
|
||||||
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000222">
|
||||||
|
<class>Detach_UE</class>
|
||||||
|
<desc>Detach Quectel</desc>
|
||||||
|
<id>sphex_quectel</id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="003333">
|
||||||
|
<class>Terminate_UE</class>
|
||||||
|
<desc>Terminate Quectel</desc>
|
||||||
|
<id>sphex_quectel</id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="222222">
|
||||||
|
<class>Undeploy_Object</class>
|
||||||
|
<desc>Undeploy gNB</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/sa_gnb_aerial</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<d_retx_th>20,100,100,100</d_retx_th>
|
||||||
|
<u_retx_th>20,100,100,100</u_retx_th>
|
||||||
|
</testCase>
|
||||||
|
</testCaseList>
|
||||||
|
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.openairinterface.org/?page_id=698
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
contact@openairinterface.org
|
||||||
|
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>test-aerial-cleanup</htmlTabRef>
|
||||||
|
<htmlTabName>CleanUp AERIAL</htmlTabName>
|
||||||
|
<htmlTabIcon>trash</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
111111
|
||||||
|
222222
|
||||||
|
333333
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="111111">
|
||||||
|
<class>Clean_Test_Server_Images</class>
|
||||||
|
<desc>Clean Test Images on Test Server</desc>
|
||||||
|
<test_svr_id>0</test_svr_id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="222222">
|
||||||
|
<class>Detach_UE</class>
|
||||||
|
<desc>Terminate UE</desc>
|
||||||
|
<id>sphex_quectel</id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="333333">
|
||||||
|
<class>Terminate_UE</class>
|
||||||
|
<desc>Terminate UE</desc>
|
||||||
|
<id>sphex_quectel</id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.openairinterface.org/?page_id=698
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
contact@openairinterface.org
|
||||||
|
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>cn5g-start-tab</htmlTabRef>
|
||||||
|
<htmlTabName>CN5G-Start</htmlTabName>
|
||||||
|
<htmlTabIcon>log-in</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
000100
|
||||||
|
000200
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList>
|
||||||
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000100">
|
||||||
|
<class>Terminate_5GCN</class>
|
||||||
|
<desc>Terminate 5G Core</desc>
|
||||||
|
<args>--type stop-basic</args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000200">
|
||||||
|
<class>Initialize_5GCN</class>
|
||||||
|
<desc>Initialize 5G Core</desc>
|
||||||
|
<args>--type start-basic</args>
|
||||||
|
</testCase>
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.openairinterface.org/?page_id=698
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
contact@openairinterface.org
|
||||||
|
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>cn5g-start-tab</htmlTabRef>
|
||||||
|
<htmlTabName>CN5G-Start</htmlTabName>
|
||||||
|
<htmlTabIcon>log-in</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
000300
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList>
|
||||||
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000300">
|
||||||
|
<class>Terminate_5GCN</class>
|
||||||
|
<desc>Terminate 5G Core</desc>
|
||||||
|
<args>--type stop-basic</args>
|
||||||
|
</testCase>
|
||||||
|
</testCaseList>
|
||||||
|
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check if cuBB_SDK is defined, if not, use default path
|
||||||
|
cuBB_Path="${cuBB_SDK:-/opt/nvidia/cuBB}"
|
||||||
|
|
||||||
|
# Run gdrcopy insmod
|
||||||
|
cd "$cuBB_Path"/cuPHY-CP/external/gdrcopy/ || exit 1
|
||||||
|
|
||||||
|
./insmod.sh
|
||||||
|
cd "$cuBB_Path" || exit 1
|
||||||
|
# Add gdrcopy to LD_LIBRARY_PATH
|
||||||
|
export LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64:/opt/mellanox/dpdk/lib/x86_64-linux-gnu:/opt/mellanox/doca/lib/x86_64-linux-gnu:/opt/nvidia/cuBB/cuPHY-CP/external/gdrcopy/build/x86_64/
|
||||||
|
|
||||||
|
# Restart MPS
|
||||||
|
# Export variables
|
||||||
|
export CUDA_DEVICE_MAX_CONNECTIONS=8
|
||||||
|
export CUDA_MPS_PIPE_DIRECTORY=/var
|
||||||
|
export CUDA_MPS_LOG_DIRECTORY=/var
|
||||||
|
|
||||||
|
# Stop existing MPS
|
||||||
|
echo quit | nvidia-cuda-mps-control
|
||||||
|
|
||||||
|
# Start MPS
|
||||||
|
nvidia-cuda-mps-control -d
|
||||||
|
echo start_server -uid 0 | nvidia-cuda-mps-control
|
||||||
|
|
||||||
|
# Start cuphycontroller_scf
|
||||||
|
# Check if an argument is provided
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
# No argument provided, use default value
|
||||||
|
argument="P5G_SCF_FXN"
|
||||||
|
else
|
||||||
|
# Argument provided, use it
|
||||||
|
argument="$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$cuBB_Path"/build/cuPHY-CP/cuphycontroller/examples/cuphycontroller_scf "$argument"
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
version: "3.8"
|
||||||
|
services:
|
||||||
|
nv-cubb:
|
||||||
|
container_name: nv-cubb
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: nvidia
|
||||||
|
count: all
|
||||||
|
capabilities:
|
||||||
|
- gpu
|
||||||
|
network_mode: host
|
||||||
|
shm_size: 4096m
|
||||||
|
privileged: true
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
volumes:
|
||||||
|
- /lib/modules:/lib/modules
|
||||||
|
- /dev/hugepages:/dev/hugepages
|
||||||
|
- /usr/src:/usr/src
|
||||||
|
- ./aerial_l1_entrypoint.sh:/opt/nvidia/cuBB/aerial_l1_entrypoint.sh
|
||||||
|
- /var/log/aerial:/var/log/aerial
|
||||||
|
- ../../../cmake_targets/share:/opt/cuBB/share
|
||||||
|
userns_mode: host
|
||||||
|
ipc: "shareable"
|
||||||
|
image: cubb-build:23-2
|
||||||
|
environment:
|
||||||
|
- cuBB_SDK=/opt/nvidia/cuBB
|
||||||
|
command: bash -c " rm -rf /tmp/phy.log && chmod +x /opt/nvidia/cuBB/aerial_l1_entrypoint.sh && /opt/nvidia/cuBB/aerial_l1_entrypoint.sh"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL",'grep -q "L1 is ready!" /tmp/phy.log && echo 0 || echo 1']
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
oai-gnb-aerial:
|
||||||
|
cpuset: "13-20"
|
||||||
|
image: oai-gnb-aerial:latest
|
||||||
|
depends_on:
|
||||||
|
nv-cubb:
|
||||||
|
condition: service_healthy
|
||||||
|
privileged: true
|
||||||
|
ipc: "container:nv-cubb"
|
||||||
|
environment:
|
||||||
|
USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: nvidia
|
||||||
|
count: all
|
||||||
|
capabilities:
|
||||||
|
- gpu
|
||||||
|
network_mode: host
|
||||||
|
shm_size: 4096m
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
volumes:
|
||||||
|
- ../../conf_files/gnb-vnf.sa.band78.273prb.aerial.conf:/opt/oai-gnb/etc/gnb.conf
|
||||||
|
container_name: oai-gnb-aerial
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "ps aux | grep -v grep | grep -c softmodem"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
+6
-1
@@ -22,7 +22,8 @@
|
|||||||
| nokiabox | 172.21.19.39 | _None_ | gNB (Nokia), 5GC | _Nokia RF integrated_ |
|
| nokiabox | 172.21.19.39 | _None_ | gNB (Nokia), 5GC | _Nokia RF integrated_ |
|
||||||
| avra | 172.21.16.124 | CI-Avra-Usage | gNB (n78) | AW2S Jaguar (192.168.80.239) |
|
| avra | 172.21.16.124 | CI-Avra-Usage | gNB (n78) | AW2S Jaguar (192.168.80.239) |
|
||||||
| orion | 172.21.16.134 | CI-Orion-Build-Sanity-Check-Deploy-Test, CI-Orion-DsTester-Deploy-Test | Build | |
|
| orion | 172.21.16.134 | CI-Orion-Build-Sanity-Check-Deploy-Test, CI-Orion-DsTester-Deploy-Test | Build | |
|
||||||
| bellatrix | 172.21.16.104 | CI-Bellatrix-RAN-Docker | Static Code Analysis | -- |
|
| aerial2 | 172.21.16.131 | CI-Aerial2-Usage | gNB (PNF/Nvidia CUBB + VNF) | Foxconn RU, _Nvidia Aerial SDK integrated_ |
|
||||||
|
| sphex | 172.21.17.54 | CI-Sphex-Usage | Quectel | Quectel module |
|
||||||
|
|
||||||
Note: The available resources, and their current usage, is indicated here:
|
Note: The available resources, and their current usage, is indicated here:
|
||||||
- [Lockable resources of jenkins-oai](https://jenkins-oai.eurecom.fr/lockable-resources/):
|
- [Lockable resources of jenkins-oai](https://jenkins-oai.eurecom.fr/lockable-resources/):
|
||||||
@@ -188,6 +189,10 @@ information on how the images are built.
|
|||||||
~5G-NR
|
~5G-NR
|
||||||
- 5G-NR SA test setup: gNB on avra(RHEL9.2) + N310, OAIUE on caracal(RHEL9.1) + N310, OAI CN5G
|
- 5G-NR SA test setup: gNB on avra(RHEL9.2) + N310, OAIUE on caracal(RHEL9.1) + N310, OAI CN5G
|
||||||
- OpenShift cluster for CN deployment and container images for gNB and UE deployment
|
- OpenShift cluster for CN deployment and container images for gNB and UE deployment
|
||||||
|
- [RAN-SA-AERIAL-CN5G](https://jenkins-oai.eurecom.fr/job/RAN-SA-AERIAL-CN5G/)
|
||||||
|
~5G-NR
|
||||||
|
- 5G-NR SA test setup: OAI VNF + PNF/NVIDIA CUBB on Aerial2 (U22) + Foxconn RU, COTS UE (Quctel RM500Q), OAI CN5G
|
||||||
|
- container images for gNB deployment
|
||||||
|
|
||||||
### RAN-CI-NSA-Trigger
|
### RAN-CI-NSA-Trigger
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user