Merge branch 'develop' into ldpc-decoder-memory
This commit is contained in:
@@ -198,17 +198,37 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("RF Simulators") {
|
stage ("4G RF Simulators") {
|
||||||
when { expression {doMandatoryTests} }
|
when { expression {doMandatoryTests} }
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
triggerSlaveJob ('RAN-RF-Sim-Test', 'Test-RF-Sim-Container')
|
triggerSlaveJob ('RAN-RF-Sim-Test-4G', 'Test-RF-Sim-Container-4G')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
finalizeSlaveJob('RAN-RF-Sim-Test')
|
finalizeSlaveJob('RAN-RF-Sim-Test-4G')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
failure {
|
||||||
|
script {
|
||||||
|
currentBuild.result = 'FAILURE'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage ("5G RF Simulators") {
|
||||||
|
when { expression {doMandatoryTests} }
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
triggerSlaveJob ('RAN-RF-Sim-Test-5G', 'Test-RF-Sim-Container-4G')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
script {
|
||||||
|
finalizeSlaveJob('RAN-RF-Sim-Test-5G')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
|
|||||||
@@ -529,74 +529,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test MONOLITHIC - FDD - Band 13 - B210") {
|
|
||||||
when {
|
|
||||||
expression {doFullTestsuite}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
sh "sleep 60"
|
|
||||||
triggerSlaveJob ('eNB-CI-MONO-FDD-Band13-B210', 'Test-Mono-FDD-Band13-LTE-M')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
finalizeSlaveJob('eNB-CI-MONO-FDD-Band13-B210')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
failure {
|
|
||||||
script {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Test X2 Handover - FDD - Band 13 - B210") {
|
|
||||||
when {
|
|
||||||
expression {doFullTestsuite}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
sh "sleep 60"
|
|
||||||
triggerSlaveJob ('eNB-CI-MONO-FDD-Band13-X2HO-B210', 'Test-Mono-FDD-Band13-X2-HO')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
finalizeSlaveJob('eNB-CI-MONO-FDD-Band13-X2HO-B210')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
failure {
|
|
||||||
script {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Test IF4p5 - TDD - Band 38 - B210 - MultiRRU") {
|
|
||||||
when {
|
|
||||||
expression {doFullTestsuite}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
triggerSlaveJob ('eNB-CI-IF4p5-TDD-Band38-MultiRRU-B210', 'Test-IF4p5-TDD-Band38-Multi-RRU')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
finalizeSlaveJob('eNB-CI-IF4p5-TDD-Band38-MultiRRU-B210')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
failure {
|
|
||||||
script {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Test OAI UE - FDD - Band 20 - B200") {
|
stage ("Test OAI UE - FDD - Band 20 - B200") {
|
||||||
when {
|
when {
|
||||||
expression {doFullTestsuite}
|
expression {doFullTestsuite}
|
||||||
@@ -643,28 +575,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test OAI OCP-eNB - FDD - Band 7 - B210") {
|
|
||||||
when {
|
|
||||||
expression {doFullTestsuite}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
triggerSlaveJob ('OCPeNB-FDD-Band7-B210', 'Test-OCP-FDD-Band7')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
finalizeSlaveJob('OCPeNB-FDD-Band7-B210')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
failure {
|
|
||||||
script {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ def pythonExecutor = params.pythonExecutor
|
|||||||
def TARGET_BRANCH = "develop"
|
def TARGET_BRANCH = "develop"
|
||||||
def ALLOW_MERGE = true
|
def ALLOW_MERGE = true
|
||||||
def GitPostArgs = ''
|
def GitPostArgs = ''
|
||||||
def DataBaseHost = params.DataBaseHost
|
|
||||||
def jobStatus
|
def jobStatus
|
||||||
|
|
||||||
pipeline {
|
pipeline {
|
||||||
@@ -72,7 +71,7 @@ pipeline {
|
|||||||
//calling NSA B200
|
//calling NSA B200
|
||||||
jobName = "RAN-NSA-B200-Module-LTEBOX"
|
jobName = "RAN-NSA-B200-Module-LTEBOX"
|
||||||
jobStatus = build job: jobName, wait : true, propagate : false, parameters: [
|
jobStatus = build job: jobName, wait : true, propagate : false, parameters: [
|
||||||
string(name: 'eNB_MR', value: String.valueOf(MR)),
|
string(name: 'eNB_MR', value: String.valueOf(MR)),
|
||||||
string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
|
string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
|
||||||
string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
|
string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
|
||||||
string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
|
string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
|
||||||
@@ -114,24 +113,6 @@ pipeline {
|
|||||||
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
|
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
|
||||||
echo GitPostArgs
|
echo GitPostArgs
|
||||||
|
|
||||||
|
|
||||||
//calling OAIUE B200
|
|
||||||
//build job: "RAN-SA-OAIUE-B200-CN5G", wait : true, propagate : false, parameters: [
|
|
||||||
// string(name: 'eNB_MR', value: String.valueOf(MR)),
|
|
||||||
// string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
|
|
||||||
// string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
|
|
||||||
// string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
|
|
||||||
// booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
|
|
||||||
//]
|
|
||||||
//calling OAIUE N310
|
|
||||||
//build job: "RAN-SA-OAIUE-N310-CN5G", wait : true, propagate : false, parameters: [
|
|
||||||
// string(name: 'eNB_MR', value: String.valueOf(MR)),
|
|
||||||
// string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
|
|
||||||
// string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
|
|
||||||
// string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
|
|
||||||
// booleanParam(name: 'eNB_mergeRequest', value: Boolean.valueOf(ALLOW_MERGE))
|
|
||||||
//]
|
|
||||||
|
|
||||||
//calling OAIUE N310-X300
|
//calling OAIUE N310-X300
|
||||||
jobName = "RAN-SA-OAIUE-N310-X300-CN5G"
|
jobName = "RAN-SA-OAIUE-N310-X300-CN5G"
|
||||||
jobStatus = build job: jobName, wait : true, propagate : false, parameters: [
|
jobStatus = build job: jobName, wait : true, propagate : false, parameters: [
|
||||||
@@ -146,23 +127,15 @@ pipeline {
|
|||||||
build_id = jobStatus.getNumber().toString()
|
build_id = jobStatus.getNumber().toString()
|
||||||
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
|
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
|
||||||
echo GitPostArgs
|
echo GitPostArgs
|
||||||
|
|
||||||
|
//git report the test results in 1 block, at the end of the test sequence of one MR
|
||||||
|
dir ('ci-scripts/ran_dashboard') {
|
||||||
|
sh "python3 Hdashboard.py gitpost ${GitPostArgs}"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ('Git Post') {
|
|
||||||
when {
|
|
||||||
expression { params.DataBaseHost != "none" }
|
|
||||||
}
|
|
||||||
agent {label DataBaseHost}
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
dir ('ci-scripts/ran_dashboard') {
|
|
||||||
sh "python3 Hdashboard.py gitpost ${GitPostArgs}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ class Containerize():
|
|||||||
if (self.ranAllowMerge):
|
if (self.ranAllowMerge):
|
||||||
imageTag = 'ci-temp'
|
imageTag = 'ci-temp'
|
||||||
if self.ranTargetBranch == 'develop':
|
if self.ranTargetBranch == 'develop':
|
||||||
mySSH.command('git diff HEAD..origin/develop -- docker/Dockerfile.base' + self.dockerfileprefix + ' | grep --colour=never -i INDEX', '\$', 5)
|
mySSH.command('git diff HEAD..origin/develop -- cmake_targets/build_oai cmake_targets/tools/build_helper docker/Dockerfile.base' + self.dockerfileprefix + ' | grep --colour=never -i INDEX', '\$', 5)
|
||||||
result = re.search('index', mySSH.getBefore())
|
result = re.search('index', mySSH.getBefore())
|
||||||
if result is not None:
|
if result is not None:
|
||||||
forceBaseImageBuild = True
|
forceBaseImageBuild = True
|
||||||
@@ -341,7 +341,7 @@ class Containerize():
|
|||||||
# Remove all intermediate build images
|
# Remove all intermediate build images
|
||||||
if self.ranAllowMerge and forceBaseImageBuild:
|
if self.ranAllowMerge and forceBaseImageBuild:
|
||||||
mySSH.command(self.cli + ' image rm ' + baseImage + ':' + baseTag + ' || true', '\$', 30)
|
mySSH.command(self.cli + ' image rm ' + baseImage + ':' + baseTag + ' || true', '\$', 30)
|
||||||
mySSH.command(self.cli + ' image rm ran-build:' + imageTag + ' || true','\$', 5)
|
mySSH.command(self.cli + ' image rm ran-build:' + imageTag + ' || true','\$', 30)
|
||||||
# Cleaning any created tmp volume
|
# Cleaning any created tmp volume
|
||||||
mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
|
mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
@@ -506,6 +506,7 @@ class Containerize():
|
|||||||
# mySSH.command('sed -i -e "s/FLEXRAN_ENABLED:.*$/FLEXRAN_ENABLED: \'no\'/" ci-docker-compose.yml', '\$', 2)
|
# mySSH.command('sed -i -e "s/FLEXRAN_ENABLED:.*$/FLEXRAN_ENABLED: \'no\'/" ci-docker-compose.yml', '\$', 2)
|
||||||
# mySSH.command('sed -i -e "s/CI_FLEXRAN_CTL_IP_ADDR/127.0.0.1/" ci-docker-compose.yml', '\$', 2)
|
# mySSH.command('sed -i -e "s/CI_FLEXRAN_CTL_IP_ADDR/127.0.0.1/" ci-docker-compose.yml', '\$', 2)
|
||||||
# Currently support only one
|
# Currently support only one
|
||||||
|
mySSH.command('echo ' + lPassWord + ' | sudo -S b2xx_fx3_utils --reset-device', '\$', 15)
|
||||||
mySSH.command('docker-compose --file ci-docker-compose.yml config --services | sed -e "s@^@service=@" 2>&1', '\$', 10)
|
mySSH.command('docker-compose --file ci-docker-compose.yml config --services | sed -e "s@^@service=@" 2>&1', '\$', 10)
|
||||||
result = re.search('service=(?P<svc_name>[a-zA-Z0-9\_]+)', mySSH.getBefore())
|
result = re.search('service=(?P<svc_name>[a-zA-Z0-9\_]+)', mySSH.getBefore())
|
||||||
if result is not None:
|
if result is not None:
|
||||||
@@ -586,11 +587,20 @@ class Containerize():
|
|||||||
mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
|
mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
|
||||||
# Currently support only one
|
# Currently support only one
|
||||||
mySSH.command('docker-compose --file ci-docker-compose.yml config', '\$', 5)
|
mySSH.command('docker-compose --file ci-docker-compose.yml config', '\$', 5)
|
||||||
|
containerName = ''
|
||||||
|
containerToKill = False
|
||||||
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())
|
||||||
if self.eNB_logFile[self.eNB_instance] == '':
|
if self.eNB_logFile[self.eNB_instance] == '':
|
||||||
self.eNB_logFile[self.eNB_instance] = 'enb_' + HTML.testCase_id + '.log'
|
self.eNB_logFile[self.eNB_instance] = 'enb_' + HTML.testCase_id + '.log'
|
||||||
if result is not None:
|
if result is not None:
|
||||||
containerName = result.group('container_name')
|
containerName = result.group('container_name')
|
||||||
|
containerToKill = True
|
||||||
|
if containerToKill:
|
||||||
|
mySSH.command('docker inspect ' + containerName, '\$', 30)
|
||||||
|
result = re.search('Error: No such object: ' + containerName, mySSH.getBefore())
|
||||||
|
if result is not None:
|
||||||
|
containerToKill = False
|
||||||
|
if containerToKill:
|
||||||
mySSH.command('docker kill --signal INT ' + containerName, '\$', 30)
|
mySSH.command('docker kill --signal INT ' + containerName, '\$', 30)
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
mySSH.command('docker logs ' + containerName + ' > ' + lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '\$', 30)
|
mySSH.command('docker logs ' + containerName + ' > ' + lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '\$', 30)
|
||||||
@@ -603,20 +613,26 @@ class Containerize():
|
|||||||
mySSH.close()
|
mySSH.close()
|
||||||
|
|
||||||
# Analyzing log file!
|
# Analyzing log file!
|
||||||
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '.')
|
if containerToKill:
|
||||||
|
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '.')
|
||||||
|
else:
|
||||||
|
copyin_res = 0
|
||||||
nodeB_prefix = 'e'
|
nodeB_prefix = 'e'
|
||||||
if (copyin_res == -1):
|
if (copyin_res == -1):
|
||||||
HTML.htmleNBFailureMsg='Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!'
|
HTML.htmleNBFailureMsg='Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!'
|
||||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
|
||||||
else:
|
else:
|
||||||
logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + self.eNB_logFile[self.eNB_instance])
|
if containerToKill:
|
||||||
logStatus = RAN.AnalyzeLogFile_eNB(self.eNB_logFile[self.eNB_instance], HTML)
|
logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + self.eNB_logFile[self.eNB_instance])
|
||||||
|
logStatus = RAN.AnalyzeLogFile_eNB(self.eNB_logFile[self.eNB_instance], HTML)
|
||||||
|
else:
|
||||||
|
logStatus = 0
|
||||||
if (logStatus < 0):
|
if (logStatus < 0):
|
||||||
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
|
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
|
||||||
else:
|
else:
|
||||||
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
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 containerToKill and self.eNB_serverId[self.eNB_instance] != '0':
|
||||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + self.eNB_logFile[self.eNB_instance], self.eNBSourceCodePath + '/cmake_targets/')
|
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + self.eNB_logFile[self.eNB_instance], self.eNBSourceCodePath + '/cmake_targets/')
|
||||||
logging.info('\u001B[1m Undeploying OAI Object Pass\u001B[0m')
|
logging.info('\u001B[1m Undeploying OAI Object Pass\u001B[0m')
|
||||||
|
|
||||||
@@ -689,7 +705,7 @@ class Containerize():
|
|||||||
def CaptureOnDockerNetworks(self):
|
def CaptureOnDockerNetworks(self):
|
||||||
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml config | grep com.docker.network.bridge.name | sed -e "s@^.*name: @@"'
|
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml config | grep com.docker.network.bridge.name | sed -e "s@^.*name: @@"'
|
||||||
networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
||||||
cmd = 'sudo nohup tshark -f "not tcp and not arp and not port 53 and not host archive.ubuntu.com and not host security.ubuntu.com"'
|
cmd = 'sudo nohup tshark -f "not tcp and not arp and not port 53 and not host archive.ubuntu.com and not host security.ubuntu.com and not port 2152"'
|
||||||
for name in networkNames.split('\n'):
|
for name in networkNames.split('\n'):
|
||||||
res = re.search('rfsim', name)
|
res = re.search('rfsim', name)
|
||||||
if res is not None:
|
if res is not None:
|
||||||
@@ -700,7 +716,7 @@ class Containerize():
|
|||||||
logging.debug(cmd)
|
logging.debug(cmd)
|
||||||
networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
||||||
|
|
||||||
def UndeployGenObject(self, HTML):
|
def UndeployGenObject(self, HTML, RAN, UE):
|
||||||
self.exitStatus = 0
|
self.exitStatus = 0
|
||||||
ymlPath = self.yamlPath[0].split('/')
|
ymlPath = self.yamlPath[0].split('/')
|
||||||
logPath = '../cmake_targets/log/' + ymlPath[1]
|
logPath = '../cmake_targets/log/' + ymlPath[1]
|
||||||
@@ -730,8 +746,56 @@ class Containerize():
|
|||||||
cmd = 'cd ' + self.yamlPath[0] + ' && docker logs ' + cName + ' > ' + cName + '.log 2>&1'
|
cmd = 'cd ' + self.yamlPath[0] + ' && docker logs ' + cName + ' > ' + cName + '.log 2>&1'
|
||||||
logging.debug(cmd)
|
logging.debug(cmd)
|
||||||
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||||
|
fullStatus = True
|
||||||
if anyLogs:
|
if anyLogs:
|
||||||
cmd = 'mkdir -p '+ logPath + ' && mv ' + self.yamlPath[0] + '/*.log ' + logPath
|
cmd = 'mkdir -p '+ logPath + ' && cp ' + self.yamlPath[0] + '/*.log ' + logPath
|
||||||
|
logging.debug(cmd)
|
||||||
|
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
||||||
|
|
||||||
|
# Analyzing log file(s)!
|
||||||
|
listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du']
|
||||||
|
for container in listOfPossibleRanContainers:
|
||||||
|
filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log'
|
||||||
|
cmd = 'ls ' + filename
|
||||||
|
containerStatus = True
|
||||||
|
try:
|
||||||
|
lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
||||||
|
filename = str(lsStatus).strip()
|
||||||
|
except:
|
||||||
|
containerStatus = False
|
||||||
|
if not containerStatus:
|
||||||
|
continue
|
||||||
|
|
||||||
|
logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m')
|
||||||
|
logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML)
|
||||||
|
if (logStatus < 0):
|
||||||
|
fullStatus = False
|
||||||
|
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
|
||||||
|
else:
|
||||||
|
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
|
||||||
|
listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*']
|
||||||
|
for container in listOfPossibleUeContainers:
|
||||||
|
filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log'
|
||||||
|
cmd = 'ls ' + filename
|
||||||
|
containerStatus = True
|
||||||
|
try:
|
||||||
|
lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
||||||
|
filename = str(lsStatus).strip()
|
||||||
|
except:
|
||||||
|
containerStatus = False
|
||||||
|
if not containerStatus:
|
||||||
|
continue
|
||||||
|
|
||||||
|
logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
|
||||||
|
logStatus = UE.AnalyzeLogFile_UE(filename, HTML, RAN)
|
||||||
|
if (logStatus < 0):
|
||||||
|
fullStatus = False
|
||||||
|
HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus)
|
||||||
|
else:
|
||||||
|
HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
|
||||||
|
cmd = 'rm ' + self.yamlPath[0] + '/*.log'
|
||||||
logging.debug(cmd)
|
logging.debug(cmd)
|
||||||
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
||||||
if self.tsharkStarted:
|
if self.tsharkStarted:
|
||||||
@@ -746,7 +810,9 @@ class Containerize():
|
|||||||
cmd = 'sudo rm /tmp/capture_' + ymlPath[1] + '.pcap'
|
cmd = 'sudo rm /tmp/capture_' + ymlPath[1] + '.pcap'
|
||||||
logging.debug(cmd)
|
logging.debug(cmd)
|
||||||
copyStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
copyStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
||||||
|
self.tsharkStarted = False
|
||||||
|
|
||||||
|
logging.debug('\u001B[1m Undeploying \u001B[0m')
|
||||||
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml down'
|
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml down'
|
||||||
logging.debug(cmd)
|
logging.debug(cmd)
|
||||||
try:
|
try:
|
||||||
@@ -763,10 +829,14 @@ class Containerize():
|
|||||||
logging.debug(cmd)
|
logging.debug(cmd)
|
||||||
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
|
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
|
||||||
|
|
||||||
HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
|
if fullStatus:
|
||||||
logging.info('\u001B[1m Undeploying OAI Object(s) PASS\u001B[0m')
|
HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
logging.info('\u001B[1m Undeploying OAI Object(s) PASS\u001B[0m')
|
||||||
|
else:
|
||||||
|
HTML.CreateHtmlTestRow('n/a', 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
|
logging.info('\u001B[1m Undeploying OAI Object(s) FAIL\u001B[0m')
|
||||||
|
|
||||||
def PingFromContainer(self, HTML):
|
def PingFromContainer(self, HTML, RAN, UE):
|
||||||
self.exitStatus = 0
|
self.exitStatus = 0
|
||||||
ymlPath = self.yamlPath[0].split('/')
|
ymlPath = self.yamlPath[0].split('/')
|
||||||
logPath = '../cmake_targets/log/' + ymlPath[1]
|
logPath = '../cmake_targets/log/' + ymlPath[1]
|
||||||
@@ -780,17 +850,17 @@ class Containerize():
|
|||||||
|
|
||||||
result = re.search(', (?P<packetloss>[0-9\.]+)% packet loss, time [0-9\.]+ms', deployStatus)
|
result = re.search(', (?P<packetloss>[0-9\.]+)% packet loss, time [0-9\.]+ms', deployStatus)
|
||||||
if result is None:
|
if result is None:
|
||||||
self.PingExit(HTML, False, 'Packet Loss Not Found')
|
self.PingExit(HTML, RAN, UE, False, 'Packet Loss Not Found')
|
||||||
return
|
return
|
||||||
|
|
||||||
packetloss = result.group('packetloss')
|
packetloss = result.group('packetloss')
|
||||||
if float(packetloss) == 100:
|
if float(packetloss) == 100:
|
||||||
self.PingExit(HTML, False, 'Packet Loss is 100%')
|
self.PingExit(HTML, RAN, UE, False, 'Packet Loss is 100%')
|
||||||
return
|
return
|
||||||
|
|
||||||
result = re.search('rtt min\/avg\/max\/mdev = (?P<rtt_min>[0-9\.]+)\/(?P<rtt_avg>[0-9\.]+)\/(?P<rtt_max>[0-9\.]+)\/[0-9\.]+ ms', deployStatus)
|
result = re.search('rtt min\/avg\/max\/mdev = (?P<rtt_min>[0-9\.]+)\/(?P<rtt_avg>[0-9\.]+)\/(?P<rtt_max>[0-9\.]+)\/[0-9\.]+ ms', deployStatus)
|
||||||
if result is None:
|
if result is None:
|
||||||
self.PingExit(HTML, False, 'Ping RTT_Min RTT_Avg RTT_Max Not Found!')
|
self.PingExit(HTML, RAN, UE, False, 'Ping RTT_Min RTT_Avg RTT_Max Not Found!')
|
||||||
return
|
return
|
||||||
|
|
||||||
rtt_min = result.group('rtt_min')
|
rtt_min = result.group('rtt_min')
|
||||||
@@ -812,7 +882,7 @@ class Containerize():
|
|||||||
packetLossOK = False
|
packetLossOK = False
|
||||||
elif float(packetloss) > 0:
|
elif float(packetloss) > 0:
|
||||||
message += '\nPacket Loss is not 0%'
|
message += '\nPacket Loss is not 0%'
|
||||||
self.PingExit(HTML, packetLossOK, message)
|
self.PingExit(HTML, RAN, UE, packetLossOK, message)
|
||||||
|
|
||||||
if packetLossOK:
|
if packetLossOK:
|
||||||
logging.debug('\u001B[1;37;44m ping result \u001B[0m')
|
logging.debug('\u001B[1;37;44m ping result \u001B[0m')
|
||||||
@@ -822,7 +892,7 @@ class Containerize():
|
|||||||
logging.debug('\u001B[1;34m ' + max_msg + '\u001B[0m')
|
logging.debug('\u001B[1;34m ' + max_msg + '\u001B[0m')
|
||||||
logging.info('\u001B[1m Ping Test PASS\u001B[0m')
|
logging.info('\u001B[1m Ping Test PASS\u001B[0m')
|
||||||
|
|
||||||
def PingExit(self, HTML, status, message):
|
def PingExit(self, HTML, RAN, UE, status, message):
|
||||||
html_queue = SimpleQueue()
|
html_queue = SimpleQueue()
|
||||||
html_cell = '<pre style="background-color:white">UE\n' + message + '</pre>'
|
html_cell = '<pre style="background-color:white">UE\n' + message + '</pre>'
|
||||||
html_queue.put(html_cell)
|
html_queue.put(html_cell)
|
||||||
@@ -837,10 +907,10 @@ class Containerize():
|
|||||||
logging.debug('----------------------------------------')
|
logging.debug('----------------------------------------')
|
||||||
HTML.testCase_id = 'AUTO-UNDEPLOY'
|
HTML.testCase_id = 'AUTO-UNDEPLOY'
|
||||||
HTML.desc = 'Automatic Un-Deployment'
|
HTML.desc = 'Automatic Un-Deployment'
|
||||||
self.UndeployGenObject(HTML)
|
self.UndeployGenObject(HTML, RAN, UE)
|
||||||
self.exitStatus = 1
|
self.exitStatus = 1
|
||||||
|
|
||||||
def IperfFromContainer(self, HTML):
|
def IperfFromContainer(self, HTML, RAN):
|
||||||
self.exitStatus = 0
|
self.exitStatus = 0
|
||||||
|
|
||||||
ymlPath = self.yamlPath[0].split('/')
|
ymlPath = self.yamlPath[0].split('/')
|
||||||
|
|||||||
@@ -2045,6 +2045,35 @@ class OaiCiTest():
|
|||||||
else:
|
else:
|
||||||
return -2
|
return -2
|
||||||
|
|
||||||
|
|
||||||
|
def Iperf_analyzeV2BIDIR(self, lock, UE_IPAddress, device_id, statusQueue,server_filename,client_filename):
|
||||||
|
#server file is unused for the moment
|
||||||
|
if (not os.path.isfile(client_filename)):
|
||||||
|
self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Bidir TCP : Could not analyze from client log')
|
||||||
|
return
|
||||||
|
report=[]
|
||||||
|
report_msg='Client Report:\n'
|
||||||
|
with open(client_filename, 'r') as f_client:
|
||||||
|
for line in f_client.readlines():
|
||||||
|
result = re.search(rf'^\[\s+\d+\](?P<direction>\[.+\]).*\s+(?P<bitrate>[0-9\.]+ [KMG]bits\/sec).*\s+(?P<role>\bsender|receiver\b)', str(line))
|
||||||
|
if result is not None:
|
||||||
|
report.append(str(line))
|
||||||
|
report_msg+=result.group('role') + ' ' + result.group('direction')+ '\t = ' +result.group('bitrate')+'\n'
|
||||||
|
|
||||||
|
if len(report)>0:
|
||||||
|
lock.acquire()
|
||||||
|
statusQueue.put(0)
|
||||||
|
statusQueue.put(device_id)
|
||||||
|
statusQueue.put(UE_IPAddress)
|
||||||
|
statusQueue.put(report_msg)
|
||||||
|
logging.debug('\u001B[1;37;45m TCP Bidir Iperf Result (' + UE_IPAddress + ') \u001B[0m')
|
||||||
|
logging.debug('\u001B[1;35m ' + report_msg + '\u001B[0m')
|
||||||
|
lock.release()
|
||||||
|
else:
|
||||||
|
self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Bidir TCP : Could not analyze from client log')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def Iperf_analyzeV2Server(self, lock, UE_IPAddress, device_id, statusQueue, iperf_real_options, filename,type):
|
def Iperf_analyzeV2Server(self, lock, UE_IPAddress, device_id, statusQueue, iperf_real_options, filename,type):
|
||||||
if (not os.path.isfile(filename)):
|
if (not os.path.isfile(filename)):
|
||||||
self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Could not analyze from server log')
|
self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Could not analyze from server log')
|
||||||
@@ -2342,14 +2371,19 @@ class OaiCiTest():
|
|||||||
result = re.search('TRF_IP_ADDR = (?P<trf_ip_addr>[0-9\.]+)', SSH.getBefore())
|
result = re.search('TRF_IP_ADDR = (?P<trf_ip_addr>[0-9\.]+)', SSH.getBefore())
|
||||||
if result is not None:
|
if result is not None:
|
||||||
trf_gen_IP = result.group('trf_ip_addr')
|
trf_gen_IP = result.group('trf_ip_addr')
|
||||||
|
#kill iperf processes on EPC side
|
||||||
|
SSH.command('docker exec -it prod-trf-gen /bin/bash -c "killall --signal SIGKILL iperf"', '\$', 5)
|
||||||
|
SSH.command('docker exec -it prod-trf-gen /bin/bash -c "killall --signal SIGKILL iperf3"', '\$', 5)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
#kill iperf processes on UE side before (in case there are still some remaining)
|
#kill iperf processes on UE side before (in case there are still some remaining)
|
||||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||||
cmd = 'killall --signal=SIGKILL iperf'
|
cmd = 'killall --signal=SIGKILL iperf'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
|
cmd = 'killall --signal=SIGKILL iperf3'
|
||||||
|
SSH.command(cmd,'\$',5)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
|
|
||||||
iperf_time = self.Iperf_ComputeTime()
|
iperf_time = self.Iperf_ComputeTime()
|
||||||
if self.iperf_direction=="DL":
|
if self.iperf_direction=="DL":
|
||||||
logging.debug("Iperf for Module in DL mode detected")
|
logging.debug("Iperf for Module in DL mode detected")
|
||||||
#server side UE
|
#server side UE
|
||||||
@@ -2363,7 +2397,7 @@ class OaiCiTest():
|
|||||||
#client side EPC
|
#client side EPC
|
||||||
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||||
client_filename = 'iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
|
client_filename = 'iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
SSH.command('docker exec -it prod-trf-gen /bin/bash -c "killall --signal SIGKILL iperf"', '\$', 5)
|
|
||||||
iperf_cmd = 'bin/iperf -c ' + UE_IPAddress + ' ' + self.iperf_args + ' 2>&1 > ' + client_filename
|
iperf_cmd = 'bin/iperf -c ' + UE_IPAddress + ' ' + self.iperf_args + ' 2>&1 > ' + client_filename
|
||||||
cmd = 'docker exec -it prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"'
|
cmd = 'docker exec -it prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"'
|
||||||
SSH.command(cmd,'\$',int(iperf_time)*5.0)
|
SSH.command(cmd,'\$',int(iperf_time)*5.0)
|
||||||
@@ -2382,7 +2416,7 @@ class OaiCiTest():
|
|||||||
#server side EPC
|
#server side EPC
|
||||||
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||||
server_filename = 'iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
server_filename = 'iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
SSH.command('docker exec -it prod-trf-gen /bin/bash -c "killall --signal SIGKILL iperf"', '\$', 5)
|
|
||||||
iperf_cmd = 'echo $USER; nohup bin/iperf -s -u 2>&1 > ' + server_filename
|
iperf_cmd = 'echo $USER; nohup bin/iperf -s -u 2>&1 > ' + server_filename
|
||||||
cmd = 'docker exec -d prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"'
|
cmd = 'docker exec -d prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
@@ -2407,6 +2441,38 @@ class OaiCiTest():
|
|||||||
SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, server_filename, '.')
|
SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, server_filename, '.')
|
||||||
#send for analysis
|
#send for analysis
|
||||||
self.Iperf_analyzeV2Server(lock, UE_IPAddress, device_id, statusQueue, self.iperf_args,server_filename,1)
|
self.Iperf_analyzeV2Server(lock, UE_IPAddress, device_id, statusQueue, self.iperf_args,server_filename,1)
|
||||||
|
|
||||||
|
elif self.iperf_direction=="BIDIR":
|
||||||
|
logging.debug("Iperf for Module in BIDIR mode detected")
|
||||||
|
#server side EPC
|
||||||
|
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||||
|
server_filename = 'iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
|
|
||||||
|
iperf_cmd = 'echo $USER; nohup /usr/local/bin/iperf3 -s 2>&1 > ' + server_filename
|
||||||
|
cmd = 'docker exec -d prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"'
|
||||||
|
SSH.command(cmd,'\$',5)
|
||||||
|
SSH.close()
|
||||||
|
|
||||||
|
#client side UE
|
||||||
|
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||||
|
client_filename = 'iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
|
cmd = 'rm '+ client_filename
|
||||||
|
SSH.command(cmd,'\$',5)
|
||||||
|
SSH.command('iperf3 -B ' + UE_IPAddress + ' -c ' + trf_gen_IP + ' ' + self.iperf_args + ' 2>&1 > ' + client_filename, '\$', int(iperf_time)*5.0)
|
||||||
|
SSH.close()
|
||||||
|
|
||||||
|
#once client is done, retrieve the server file from container to EPC Host
|
||||||
|
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||||
|
SSH.command('docker cp prod-trf-gen:/iperf-2.0.13/' + server_filename + ' ' + EPC.SourceCodePath, '\$', 5)
|
||||||
|
SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, EPC.SourceCodePath + '/' + server_filename, '.')
|
||||||
|
SSH.close()
|
||||||
|
|
||||||
|
#copy the 2 resulting files locally
|
||||||
|
SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, client_filename, '.')
|
||||||
|
SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, server_filename, '.')
|
||||||
|
#send for analysis
|
||||||
|
self.Iperf_analyzeV2BIDIR(lock, UE_IPAddress, device_id, statusQueue, server_filename, client_filename)
|
||||||
|
|
||||||
else :
|
else :
|
||||||
logging.debug("Incorrect or missing IPERF direction in XML")
|
logging.debug("Incorrect or missing IPERF direction in XML")
|
||||||
|
|
||||||
@@ -2472,6 +2538,30 @@ class OaiCiTest():
|
|||||||
#send for analysis
|
#send for analysis
|
||||||
filename='iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
filename='iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
self.Iperf_analyzeV2Server(lock, UE_IPAddress, device_id, statusQueue, self.iperf_args,filename,1)
|
self.Iperf_analyzeV2Server(lock, UE_IPAddress, device_id, statusQueue, self.iperf_args,filename,1)
|
||||||
|
elif self.iperf_direction=="BIDIR":
|
||||||
|
logging.debug("Iperf for Module in BIDIR mode detected")
|
||||||
|
#server side EPC
|
||||||
|
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||||
|
server_filename = 'iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
|
cmd = 'rm ' + server_filename
|
||||||
|
SSH.command(cmd,'\$',5)
|
||||||
|
cmd = 'echo $USER; nohup iperf3 -s 2>&1 > '+server_filename+' &'
|
||||||
|
SSH.command(cmd,'\$',5)
|
||||||
|
SSH.close()
|
||||||
|
|
||||||
|
#client side UE
|
||||||
|
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||||
|
client_filename = 'iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
|
cmd = 'rm ' + client_filename
|
||||||
|
SSH.command(cmd,'\$',5)
|
||||||
|
SSH.command('iperf3 -c 192.172.0.1 ' + self.iperf_args + ' 2>&1 > '+client_filename, '\$', int(iperf_time)*5.0)
|
||||||
|
SSH.close()
|
||||||
|
|
||||||
|
#copy the 2 resulting files locally
|
||||||
|
SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, client_filename, '.')
|
||||||
|
SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, server_filename, '.')
|
||||||
|
#send for analysis
|
||||||
|
self.Iperf_analyzeV2BIDIR(lock, UE_IPAddress, device_id, statusQueue, server_filename, client_filename)
|
||||||
else :
|
else :
|
||||||
logging.debug("Incorrect or missing IPERF direction in XML")
|
logging.debug("Incorrect or missing IPERF direction in XML")
|
||||||
|
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ class PhySim:
|
|||||||
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
||||||
mySSH.command('cd '+self.__workSpacePath,'\$',5)
|
mySSH.command('cd '+self.__workSpacePath,'\$',5)
|
||||||
#run and redirect the results to a log file
|
#run and redirect the results to a log file
|
||||||
mySSH.command(self.__workSpacePath+'phy_simulators/build/ldpctest ' + self.runargs + ' >> '+self.__runLogFile, '\$', 30)
|
mySSH.command(self.__workSpacePath+'ran_build/build/ldpctest ' + self.runargs + ' >> '+self.__runLogFile, '\$', 30)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
#return updated HTML to main
|
#return updated HTML to main
|
||||||
lHTML = html.HTMLManagement()
|
lHTML = html.HTMLManagement()
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ class StaticCodeAnalysis():
|
|||||||
mySSH.command('docker build --tag oai-cppcheck:xenial --file ci-scripts/docker/Dockerfile.cppcheck.xenial . > cmake_targets/log/cppcheck-xenial.txt 2>&1', '\$', 600)
|
mySSH.command('docker build --tag oai-cppcheck:xenial --file ci-scripts/docker/Dockerfile.cppcheck.xenial . > cmake_targets/log/cppcheck-xenial.txt 2>&1', '\$', 600)
|
||||||
mySSH.command('sed -e "s@xenial@bionic@" ci-scripts/docker/Dockerfile.cppcheck.xenial > ci-scripts/docker/Dockerfile.cppcheck.bionic', '\$', 6)
|
mySSH.command('sed -e "s@xenial@bionic@" ci-scripts/docker/Dockerfile.cppcheck.xenial > ci-scripts/docker/Dockerfile.cppcheck.bionic', '\$', 6)
|
||||||
mySSH.command('docker build --tag oai-cppcheck:bionic --file ci-scripts/docker/Dockerfile.cppcheck.bionic . > cmake_targets/log/cppcheck-bionic.txt 2>&1', '\$', 600)
|
mySSH.command('docker build --tag oai-cppcheck:bionic --file ci-scripts/docker/Dockerfile.cppcheck.bionic . > cmake_targets/log/cppcheck-bionic.txt 2>&1', '\$', 600)
|
||||||
mySSH.command('docker image rm oai-cppcheck:bionic oai-cppcheck:xenial || true', '\$', 60)
|
mySSH.command('docker image rm oai-cppcheck:bionic oai-cppcheck:xenial || true', '\$', 30)
|
||||||
|
|
||||||
# Analyzing the logs
|
# Analyzing the logs
|
||||||
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
|
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
|
||||||
|
|||||||
@@ -215,11 +215,11 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 8;
|
thread_pool_size = 8;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -0,0 +1,281 @@
|
|||||||
|
Active_eNBs = ( "eNB-Eurecom-B38");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
eNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
eNB_ID = 0xe02;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_ENB";
|
||||||
|
|
||||||
|
eNB_name = "eNB-Eurecom-B38";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
plmn_list = ( { mcc = 208; mnc = 97; mnc_length = 2; } );
|
||||||
|
|
||||||
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
node_function = "3GPP_eNODEB";
|
||||||
|
node_timing = "synch_to_ext_device";
|
||||||
|
node_synch_ref = 0;
|
||||||
|
frame_type = "TDD";
|
||||||
|
tdd_config = 1;
|
||||||
|
tdd_config_s = 0;
|
||||||
|
prefix_type = "NORMAL";
|
||||||
|
eutra_band = 38;
|
||||||
|
downlink_frequency = 2605000000L;
|
||||||
|
nr_scg_ssb_freq = 624608;
|
||||||
|
uplink_frequency_offset = 0;
|
||||||
|
Nid_cell = 0;
|
||||||
|
N_RB_DL = 100;
|
||||||
|
Nid_cell_mbsfn = 0;
|
||||||
|
nb_antenna_ports = 2;
|
||||||
|
nb_antennas_tx = 2;
|
||||||
|
nb_antennas_rx = 2;
|
||||||
|
tx_gain = 90;
|
||||||
|
rx_gain = 125;
|
||||||
|
pbch_repetition = "FALSE";
|
||||||
|
prach_root = 0;
|
||||||
|
prach_config_index = 0;
|
||||||
|
prach_high_speed = "DISABLE";
|
||||||
|
prach_zero_correlation = 1;
|
||||||
|
prach_freq_offset = 2;
|
||||||
|
pucch_delta_shift = 1;
|
||||||
|
pucch_nRB_CQI = 0;
|
||||||
|
pucch_nCS_AN = 0;
|
||||||
|
pucch_n1_AN = 0;
|
||||||
|
pdsch_referenceSignalPower = -29;
|
||||||
|
pdsch_p_b = 0;
|
||||||
|
pusch_n_SB = 1;
|
||||||
|
pusch_enable64QAM = "DISABLE";
|
||||||
|
pusch_hoppingMode = "interSubFrame";
|
||||||
|
pusch_hoppingOffset = 0;
|
||||||
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
|
pusch_groupAssignment = 0;
|
||||||
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
|
pusch_nDMRS1 = 1;
|
||||||
|
phich_duration = "NORMAL";
|
||||||
|
phich_resource = "ONESIXTH";
|
||||||
|
srs_enable = "DISABLE";
|
||||||
|
/* srs_BandwidthConfig =;
|
||||||
|
srs_SubframeConfig =;
|
||||||
|
srs_ackNackST =;
|
||||||
|
srs_MaxUpPts =;*/
|
||||||
|
|
||||||
|
pusch_p0_Nominal = -96;
|
||||||
|
pusch_alpha = "AL1";
|
||||||
|
pucch_p0_Nominal = -104;
|
||||||
|
msg3_delta_Preamble = 6;
|
||||||
|
pucch_deltaF_Format1 = "deltaF2";
|
||||||
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
|
rach_numberOfRA_Preambles = 64;
|
||||||
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
|
/*
|
||||||
|
rach_sizeOfRA_PreamblesGroupA = ;
|
||||||
|
rach_messageSizeGroupA = ;
|
||||||
|
rach_messagePowerOffsetGroupB = ;
|
||||||
|
*/
|
||||||
|
rach_powerRampingStep = 4;
|
||||||
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
|
rach_preambleTransMax = 10;
|
||||||
|
rach_raResponseWindowSize = 10;
|
||||||
|
rach_macContentionResolutionTimer = 48;
|
||||||
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
|
|
||||||
|
pcch_default_PagingCycle = 128;
|
||||||
|
pcch_nB = "oneT";
|
||||||
|
bcch_modificationPeriodCoeff = 2;
|
||||||
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
|
ue_TimersAndConstants_n310 = 20;
|
||||||
|
ue_TimersAndConstants_n311 = 1;
|
||||||
|
ue_TransmissionMode = 2;
|
||||||
|
|
||||||
|
//Parameters for SIB18
|
||||||
|
rxPool_sc_CP_Len = "normal";
|
||||||
|
rxPool_sc_Period = "sf40";
|
||||||
|
rxPool_data_CP_Len = "normal";
|
||||||
|
rxPool_ResourceConfig_prb_Num = 20;
|
||||||
|
rxPool_ResourceConfig_prb_Start = 5;
|
||||||
|
rxPool_ResourceConfig_prb_End = 44;
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
/* rxPool_dataHoppingConfig_hoppingParameter = 0;
|
||||||
|
rxPool_dataHoppingConfig_numSubbands = "ns1";
|
||||||
|
rxPool_dataHoppingConfig_rbOffset = 0;
|
||||||
|
rxPool_commTxResourceUC-ReqAllowed = "TRUE";
|
||||||
|
*/
|
||||||
|
// Parameters for SIB19
|
||||||
|
discRxPool_cp_Len = "normal"
|
||||||
|
discRxPool_discPeriod = "rf32"
|
||||||
|
discRxPool_numRetx = 1;
|
||||||
|
discRxPool_numRepetition = 2;
|
||||||
|
discRxPool_ResourceConfig_prb_Num = 5;
|
||||||
|
discRxPool_ResourceConfig_prb_Start = 3;
|
||||||
|
discRxPool_ResourceConfig_prb_End = 21;
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
srb1_parameters :
|
||||||
|
{
|
||||||
|
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||||
|
timer_poll_retransmit = 80;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||||
|
timer_reordering = 35;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||||
|
timer_status_prohibit = 0;
|
||||||
|
|
||||||
|
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||||
|
poll_pdu = 4;
|
||||||
|
|
||||||
|
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||||
|
poll_byte = 99999;
|
||||||
|
|
||||||
|
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||||
|
max_retx_threshold = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
enable_measurement_reports = "no";
|
||||||
|
|
||||||
|
///X2
|
||||||
|
enable_x2 = "yes";
|
||||||
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eno1";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1U = "eno1";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
phy_test_mode = 0;
|
||||||
|
scheduler_mode = "fairRR";
|
||||||
|
bler_target_upper = 20.0;
|
||||||
|
bler_target_lower = 10.0;
|
||||||
|
max_ul_rb_index = 27;
|
||||||
|
puSch10xSnr = 200;
|
||||||
|
puCch10xSnr = 150;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
prach_dtx_threshold = 200;
|
||||||
|
pucch1_dtx_threshold = 5
|
||||||
|
pucch1ab_dtx_threshold =0;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 2
|
||||||
|
nb_rx = 2
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [38];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 75;
|
||||||
|
eNB_instances = [0];
|
||||||
|
sdr_addrs = "mgmt_addr=192.168.18.241,addr=192.168.20.2,second_addr=192.168.10.2";
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
|
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||||
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
|
worker_config = "WORKER_ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_CONTROLLER :
|
||||||
|
{
|
||||||
|
FLEXRAN_ENABLED = "no";
|
||||||
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
|
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
||||||
|
FLEXRAN_PORT = 2210;
|
||||||
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ gNBs =
|
|||||||
pdsch_AntennaPorts = 1;
|
pdsch_AntennaPorts = 1;
|
||||||
pusch_AntennaPorts = 1;
|
pusch_AntennaPorts = 1;
|
||||||
ul_prbblacklist = "51,52,53,54"
|
ul_prbblacklist = "51,52,53,54"
|
||||||
min_rxtxtime_pdsch = 6;
|
min_rxtxtime = 6;
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
{
|
{
|
||||||
controlResourceSetZero = 12;
|
controlResourceSetZero = 12;
|
||||||
@@ -241,13 +241,13 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 8;
|
thread_pool_size = 8;
|
||||||
prach_dtx_threshold = 120;
|
prach_dtx_threshold = 120;
|
||||||
pucch0_dtx_threshold = 150;
|
pucch0_dtx_threshold = 150;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ gNBs =
|
|||||||
pdsch_AntennaPorts = 1;
|
pdsch_AntennaPorts = 1;
|
||||||
pusch_AntennaPorts = 1;
|
pusch_AntennaPorts = 1;
|
||||||
ul_prbblacklist = "51,52,53,54"
|
ul_prbblacklist = "51,52,53,54"
|
||||||
min_rxtxtime_pdsch = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
{
|
{
|
||||||
@@ -242,13 +242,13 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 8;
|
thread_pool_size = 8;
|
||||||
prach_dtx_threshold = 120;
|
prach_dtx_threshold = 120;
|
||||||
pucch0_dtx_threshold = 150;
|
pucch0_dtx_threshold = 150;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -227,14 +227,14 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 8;
|
thread_pool_size = 8;
|
||||||
prach_dtx_threshold = 120;
|
prach_dtx_threshold = 120;
|
||||||
pucch0_dtx_threshold = 150;
|
pucch0_dtx_threshold = 150;
|
||||||
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -229,13 +229,13 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 2;
|
thread_pool_size = 8;
|
||||||
prach_dtx_threshold = 120;
|
prach_dtx_threshold = 120;
|
||||||
pucch0_dtx_threshold = 150;
|
pucch0_dtx_threshold = 150;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -226,12 +226,12 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 2;
|
thread_pool_size = 8;
|
||||||
prach_dtx_threshold = 120;
|
prach_dtx_threshold = 120;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -211,12 +211,12 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 8;
|
thread_pool_size = 8;
|
||||||
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -195,12 +195,12 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 8;
|
thread_pool_size = 8;
|
||||||
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -210,12 +210,12 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 8;
|
thread_pool_size = 8;
|
||||||
prach_dtx_threshold = 120;
|
prach_dtx_threshold = 120;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ gNBs =
|
|||||||
pdsch_AntennaPorts = 1;
|
pdsch_AntennaPorts = 1;
|
||||||
pusch_AntennaPorts = 2;
|
pusch_AntennaPorts = 2;
|
||||||
ul_prbblacklist = "51,52,53,54"
|
ul_prbblacklist = "51,52,53,54"
|
||||||
|
do_SRS = 1;
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
{
|
{
|
||||||
@@ -226,18 +227,17 @@ MACRLCs = (
|
|||||||
tr_n_preference = "local_RRC";
|
tr_n_preference = "local_RRC";
|
||||||
# pusch_TargetSNRx10 = 200;
|
# pusch_TargetSNRx10 = 200;
|
||||||
# pucch_TargetSNRx10 = 150;
|
# pucch_TargetSNRx10 = 150;
|
||||||
ulsch_max_frame_inactivity = 1;
|
ulsch_max_frame_inactivity = 0;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 4;
|
prach_dtx_threshold = 120;
|
||||||
prach_dtx_threshold = 120;
|
# pucch0_dtx_threshold = 150;
|
||||||
# pucch0_dtx_threshold = 150;
|
}
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ gNBs =
|
|||||||
#pucch_TargetSNRx10 = 200;
|
#pucch_TargetSNRx10 = 200;
|
||||||
ul_prbblacklist = "51,52,53,54"
|
ul_prbblacklist = "51,52,53,54"
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
do_SRS = 1;
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
{
|
{
|
||||||
@@ -236,13 +237,12 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 4;
|
prach_dtx_threshold = 120;
|
||||||
prach_dtx_threshold = 120;
|
# pucch0_dtx_threshold = 150;
|
||||||
# pucch0_dtx_threshold = 150;
|
}
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -82,11 +82,11 @@ gNBs =
|
|||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
dl_subcarrierSpacing = 1;
|
dl_subcarrierSpacing = 1;
|
||||||
dl_carrierBandwidth = 106;
|
dl_carrierBandwidth = 162;
|
||||||
#initialDownlinkBWP
|
#initialDownlinkBWP
|
||||||
#genericParameters
|
#genericParameters
|
||||||
# this is RBstart=0,L=106 (275*(L-1))+RBstart
|
# this is RBstart=0,L=106 (275*(L-1))+RBstart
|
||||||
initialDLBWPlocationAndBandwidth = 28875;
|
initialDLBWPlocationAndBandwidth = 31889;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialDLBWPsubcarrierSpacing = 1;
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
@@ -104,11 +104,11 @@ gNBs =
|
|||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
ul_subcarrierSpacing = 1;
|
ul_subcarrierSpacing = 1;
|
||||||
ul_carrierBandwidth = 106;
|
ul_carrierBandwidth = 162;
|
||||||
pMax = 20;
|
pMax = 20;
|
||||||
#initialUplinkBWP
|
#initialUplinkBWP
|
||||||
#genericParameters
|
#genericParameters
|
||||||
initialULBWPlocationAndBandwidth = 28875;
|
initialULBWPlocationAndBandwidth = 31889;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialULBWPsubcarrierSpacing = 1;
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
@@ -236,13 +236,12 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 4;
|
prach_dtx_threshold = 120;
|
||||||
prach_dtx_threshold = 120;
|
# pucch0_dtx_threshold = 150;
|
||||||
# pucch0_dtx_threshold = 150;
|
}
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -194,11 +194,11 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 8;
|
thread_pool_size = 8;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -210,12 +210,12 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 6;
|
thread_pool_size = 6;
|
||||||
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -211,11 +211,11 @@ MACRLCs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
pusch_proc_threads = 6;
|
thread_pool_size = 6;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs = (
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ ENB_PROCESS_ASSERTION = -12
|
|||||||
ENB_PROCESS_REALTIME_ISSUE = -13
|
ENB_PROCESS_REALTIME_ISSUE = -13
|
||||||
ENB_PROCESS_NOLOGFILE_TO_ANALYZE = -14
|
ENB_PROCESS_NOLOGFILE_TO_ANALYZE = -14
|
||||||
ENB_PROCESS_SLAVE_RRU_NOT_SYNCED = -15
|
ENB_PROCESS_SLAVE_RRU_NOT_SYNCED = -15
|
||||||
|
ENB_REAL_TIME_PROCESSING_ISSUE = -16
|
||||||
HSS_PROCESS_FAILED = -2
|
HSS_PROCESS_FAILED = -2
|
||||||
HSS_PROCESS_OK = +2
|
HSS_PROCESS_OK = +2
|
||||||
MME_PROCESS_FAILED = -3
|
MME_PROCESS_FAILED = -3
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
#this is a configuration file
|
||||||
|
#used to build real time processing statistics
|
||||||
|
#for 5G NR phy test (gNB terminate)
|
||||||
|
Title : Processing Time (us)
|
||||||
|
ColNames :
|
||||||
|
- Metric
|
||||||
|
- Average
|
||||||
|
- Max
|
||||||
|
- Average vs Reference Deviation (Reference Value ; Acceptability Threshold)
|
||||||
|
Ref :
|
||||||
|
feprx : 120.0
|
||||||
|
feptx_prec : 8.0
|
||||||
|
feptx_ofdm : 50.0
|
||||||
|
feptx_total : 75.0
|
||||||
|
L1 Tx processing thread 0 : 300.0
|
||||||
|
L1 Tx processing thread 1 : 300.0
|
||||||
|
DLSCH encoding : 230.0
|
||||||
|
L1 Rx processing : 175.0
|
||||||
|
PUSCH inner-receiver : 100.0
|
||||||
|
PUSCH decoding : 180.0
|
||||||
|
DL & UL scheduling timing stats : 37.0
|
||||||
|
UL Indication : 38.0
|
||||||
|
Threshold :
|
||||||
|
feprx : 1.25
|
||||||
|
feptx_prec : 1.25
|
||||||
|
feptx_ofdm : 1.25
|
||||||
|
feptx_total : 1.25
|
||||||
|
L1 Tx processing thread 0 : 1.25
|
||||||
|
L1 Tx processing thread 1 : 1.25
|
||||||
|
DLSCH encoding : 1.25
|
||||||
|
L1 Rx processing : 1.25
|
||||||
|
PUSCH inner-receiver : 1.25
|
||||||
|
PUSCH decoding : 1.25
|
||||||
|
DL & UL scheduling timing stats : 1.25
|
||||||
|
UL Indication : 1.25
|
||||||
+5
-3
@@ -133,7 +133,7 @@ class EPCManagement():
|
|||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
logging.debug('Using the OAI EPC Release 14 MME in Docker')
|
logging.debug('Using the OAI EPC Release 14 MME in Docker')
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup tshark -i eth0 -i lo:s10 -w /tmp/mme_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup tshark -i eth0 -i lo:s10 -f "not port 2152" -w /tmp/mme_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup ./bin/oai_mme -c ./etc/' + self.mmeConfFile + ' > mme_check_run.log 2>&1"', '\$', 5)
|
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup ./bin/oai_mme -c ./etc/' + self.mmeConfFile + ' > mme_check_run.log 2>&1"', '\$', 5)
|
||||||
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
||||||
@@ -198,8 +198,8 @@ class EPCManagement():
|
|||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
logging.debug('Using the OAI EPC Release 14 SPGW-CUPS in Docker')
|
logging.debug('Using the OAI EPC Release 14 SPGW-CUPS in Docker')
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "nohup tshark -i eth0 -i lo:p5c -i lo:s5c -w /tmp/spgwc_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "nohup tshark -i eth0 -i lo:p5c -i lo:s5c -f "not port 2152" -w /tmp/spgwc_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwu-tiny /bin/bash -c "nohup tshark -i eth0 -w /tmp/spgwu_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwu-tiny /bin/bash -c "nohup tshark -i eth0 -f "not port 2152" -w /tmp/spgwu_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "nohup ./bin/oai_spgwc -o -c ./etc/spgw_c.conf > spgwc_check_run.log 2>&1"', '\$', 5)
|
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "nohup ./bin/oai_spgwc -o -c ./etc/spgw_c.conf > spgwc_check_run.log 2>&1"', '\$', 5)
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
@@ -532,6 +532,7 @@ class EPCManagement():
|
|||||||
logging.debug('Terminating OAI CN5G')
|
logging.debug('Terminating OAI CN5G')
|
||||||
mySSH.command('cd /opt/oai-cn5g-fed/docker-compose', '\$', 5)
|
mySSH.command('cd /opt/oai-cn5g-fed/docker-compose', '\$', 5)
|
||||||
mySSH.command('./core-network.sh stop nrf spgwu', '\$', 60)
|
mySSH.command('./core-network.sh stop nrf spgwu', '\$', 60)
|
||||||
|
mySSH.command('docker volume prune --force || true', '\$', 60)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
mySSH.command('tshark -r /tmp/oai-cn5g.pcap | egrep --colour=never "Tracking area update" ','\$', 30)
|
mySSH.command('tshark -r /tmp/oai-cn5g.pcap | egrep --colour=never "Tracking area update" ','\$', 30)
|
||||||
result = re.search('Tracking area update request', mySSH.getBefore())
|
result = re.search('Tracking area update request', mySSH.getBefore())
|
||||||
@@ -760,6 +761,7 @@ class EPCManagement():
|
|||||||
nbContainers += 1
|
nbContainers += 1
|
||||||
|
|
||||||
mySSH.command('docker-compose down', '\$', 60)
|
mySSH.command('docker-compose down', '\$', 60)
|
||||||
|
mySSH.command('docker volume prune --force || true', '\$', 60)
|
||||||
mySSH.command('docker inspect --format=\'{{.State.Health.Status}}\' ' + listOfContainers, '\$', 10)
|
mySSH.command('docker inspect --format=\'{{.State.Health.Status}}\' ' + listOfContainers, '\$', 10)
|
||||||
noMoreContainerNb = mySSH.getBefore().count('No such object')
|
noMoreContainerNb = mySSH.getBefore().count('No such object')
|
||||||
mySSH.command('docker inspect --format=\'{{.Name}}\' prod-oai-public-net prod-oai-private-net', '\$', 10)
|
mySSH.command('docker inspect --format=\'{{.Name}}\' prod-oai-public-net prod-oai-private-net', '\$', 10)
|
||||||
|
|||||||
+9
-4
@@ -155,6 +155,11 @@ def GetParametersFromXML(action):
|
|||||||
elif action == 'Initialize_eNB':
|
elif action == 'Initialize_eNB':
|
||||||
RAN.eNB_Trace=test.findtext('eNB_Trace')
|
RAN.eNB_Trace=test.findtext('eNB_Trace')
|
||||||
RAN.eNB_Stats=test.findtext('eNB_Stats')
|
RAN.eNB_Stats=test.findtext('eNB_Stats')
|
||||||
|
datalog_rt_stats_file=test.findtext('rt_stats_cfg')
|
||||||
|
if datalog_rt_stats_file is None:
|
||||||
|
RAN.datalog_rt_stats_file='datalog_rt_stats.default.yaml'
|
||||||
|
else:
|
||||||
|
RAN.datalog_rt_stats_file=datalog_rt_stats_file
|
||||||
RAN.Initialize_eNB_args=test.findtext('Initialize_eNB_args')
|
RAN.Initialize_eNB_args=test.findtext('Initialize_eNB_args')
|
||||||
eNB_instance=test.findtext('eNB_instance')
|
eNB_instance=test.findtext('eNB_instance')
|
||||||
USRPIPAddress=test.findtext('USRP_IPAddress')
|
USRPIPAddress=test.findtext('USRP_IPAddress')
|
||||||
@@ -308,7 +313,7 @@ def GetParametersFromXML(action):
|
|||||||
CiTestObj.ue_id = ""
|
CiTestObj.ue_id = ""
|
||||||
else:
|
else:
|
||||||
CiTestObj.ue_id = ue_id
|
CiTestObj.ue_id = ue_id
|
||||||
CiTestObj.iperf_direction = test.findtext('direction')#used for modules only
|
CiTestObj.iperf_direction = test.findtext('direction')#used for modules only
|
||||||
CiTestObj.iperf_packetloss_threshold = test.findtext('iperf_packetloss_threshold')
|
CiTestObj.iperf_packetloss_threshold = test.findtext('iperf_packetloss_threshold')
|
||||||
iperf_bitrate_threshold = test.findtext('iperf_bitrate_threshold')
|
iperf_bitrate_threshold = test.findtext('iperf_bitrate_threshold')
|
||||||
if (iperf_bitrate_threshold is None):
|
if (iperf_bitrate_threshold is None):
|
||||||
@@ -909,15 +914,15 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
|||||||
if CONTAINERS.exitStatus==1:
|
if CONTAINERS.exitStatus==1:
|
||||||
RAN.prematureExit = True
|
RAN.prematureExit = True
|
||||||
elif action == 'UndeployGenObject':
|
elif action == 'UndeployGenObject':
|
||||||
CONTAINERS.UndeployGenObject(HTML)
|
CONTAINERS.UndeployGenObject(HTML, RAN, CiTestObj)
|
||||||
if CONTAINERS.exitStatus==1:
|
if CONTAINERS.exitStatus==1:
|
||||||
RAN.prematureExit = True
|
RAN.prematureExit = True
|
||||||
elif action == 'PingFromContainer':
|
elif action == 'PingFromContainer':
|
||||||
CONTAINERS.PingFromContainer(HTML)
|
CONTAINERS.PingFromContainer(HTML, RAN, CiTestObj)
|
||||||
if CONTAINERS.exitStatus==1:
|
if CONTAINERS.exitStatus==1:
|
||||||
RAN.prematureExit = True
|
RAN.prematureExit = True
|
||||||
elif action == 'IperfFromContainer':
|
elif action == 'IperfFromContainer':
|
||||||
CONTAINERS.IperfFromContainer(HTML)
|
CONTAINERS.IperfFromContainer(HTML, RAN)
|
||||||
if CONTAINERS.exitStatus==1:
|
if CONTAINERS.exitStatus==1:
|
||||||
RAN.prematureExit = True
|
RAN.prematureExit = True
|
||||||
else:
|
else:
|
||||||
|
|||||||
+36
-18
@@ -92,6 +92,7 @@ class RANManagement():
|
|||||||
self.epcPcapFile = ''
|
self.epcPcapFile = ''
|
||||||
self.runtime_stats= ''
|
self.runtime_stats= ''
|
||||||
self.datalog_rt_stats={}
|
self.datalog_rt_stats={}
|
||||||
|
self.datalog_rt_stats_file='datalog_rt_stats.default.yaml'
|
||||||
self.eNB_Trace = '' #if 'yes', Tshark will be launched at initialization
|
self.eNB_Trace = '' #if 'yes', Tshark will be launched at initialization
|
||||||
self.eNB_Stats = '' #if 'yes', Statistics Monitor will be launched at initialization
|
self.eNB_Stats = '' #if 'yes', Statistics Monitor will be launched at initialization
|
||||||
self.USRPIPAddress = ''
|
self.USRPIPAddress = ''
|
||||||
@@ -159,6 +160,7 @@ class RANManagement():
|
|||||||
# Raphael: here add a check if git clone or git fetch went smoothly
|
# Raphael: here add a check if git clone or git fetch went smoothly
|
||||||
mySSH.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
|
mySSH.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
|
||||||
mySSH.command('git config user.name "OAI Jenkins"', '\$', 5)
|
mySSH.command('git config user.name "OAI Jenkins"', '\$', 5)
|
||||||
|
mySSH.command('git advice.detachedHead false', '\$', 5)
|
||||||
# Checking the BUILD INFO file
|
# Checking the BUILD INFO file
|
||||||
if not self.backgroundBuild:
|
if not self.backgroundBuild:
|
||||||
mySSH.command('ls *.txt', '\$', 5)
|
mySSH.command('ls *.txt', '\$', 5)
|
||||||
@@ -203,6 +205,7 @@ class RANManagement():
|
|||||||
else:
|
else:
|
||||||
logging.debug('Merging with the target branch: ' + self.ranTargetBranch)
|
logging.debug('Merging with the target branch: ' + self.ranTargetBranch)
|
||||||
mySSH.command('git merge --ff origin/' + self.ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 5)
|
mySSH.command('git merge --ff origin/' + self.ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 5)
|
||||||
|
logging.debug(mySSH.getBefore()) # print what git said when merging/checking out
|
||||||
mySSH.command('source oaienv', '\$', 5)
|
mySSH.command('source oaienv', '\$', 5)
|
||||||
mySSH.command('cd cmake_targets', '\$', 5)
|
mySSH.command('cd cmake_targets', '\$', 5)
|
||||||
mySSH.command('mkdir -p log', '\$', 5)
|
mySSH.command('mkdir -p log', '\$', 5)
|
||||||
@@ -212,6 +215,7 @@ class RANManagement():
|
|||||||
mySSH.command('echo "./build_oai ' + self.Build_eNB_args + '" > ./my-lte-softmodem-build.sh', '\$', 5)
|
mySSH.command('echo "./build_oai ' + self.Build_eNB_args + '" > ./my-lte-softmodem-build.sh', '\$', 5)
|
||||||
mySSH.command('chmod 775 ./my-lte-softmodem-build.sh', '\$', 5)
|
mySSH.command('chmod 775 ./my-lte-softmodem-build.sh', '\$', 5)
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S ls', '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S ls', '\$', 5)
|
||||||
|
logging.debug(mySSH.getBefore()) # print current directory contents for verification
|
||||||
mySSH.command('echo $USER; nohup sudo -E ./my-lte-softmodem-build.sh' + ' > ' + lSourcePath + '/cmake_targets/compile_oai_enb.log ' + ' 2>&1 &', lUserName, 5)
|
mySSH.command('echo $USER; nohup sudo -E ./my-lte-softmodem-build.sh' + ' > ' + lSourcePath + '/cmake_targets/compile_oai_enb.log ' + ' 2>&1 &', lUserName, 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
HTML.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
@@ -371,10 +375,11 @@ class RANManagement():
|
|||||||
result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
|
result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
|
||||||
if result is not None:
|
if result is not None:
|
||||||
eth_interface = result.group('eth_interface')
|
eth_interface = result.group('eth_interface')
|
||||||
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + '\u001B[0m')
|
fltr = 'port 38412 or port 36412 or port 36422' # NGAP, S1AP, X2AP
|
||||||
|
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
|
||||||
pcapfile = pcapfile_prefix + self.testCase_id + '_log.pcap'
|
pcapfile = pcapfile_prefix + self.testCase_id + '_log.pcap'
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -f /tmp/' + pcapfile , '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -f /tmp/' + pcapfile , '\$', 5)
|
||||||
mySSH.command('echo $USER; nohup sudo -E tshark -i ' + eth_interface + ' -w /tmp/' + pcapfile + ' > /dev/null 2>&1 &','\$', 5)
|
mySSH.command('echo $USER; nohup sudo -E tshark -i ' + eth_interface + ' -f "' + fltr + '" -w /tmp/' + pcapfile + ' > /dev/null 2>&1 &','\$', 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
|
|
||||||
|
|
||||||
@@ -390,10 +395,11 @@ class RANManagement():
|
|||||||
result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
|
result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
|
||||||
if result is not None:
|
if result is not None:
|
||||||
eth_interface = result.group('eth_interface')
|
eth_interface = result.group('eth_interface')
|
||||||
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + '\u001B[0m')
|
fltr = 'port 38412 or port 36412 or port 36422' # NGAP, S1AP, X2AP
|
||||||
|
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
|
||||||
self.epcPcapFile = 'enb_' + self.testCase_id + '_s1log.pcap'
|
self.epcPcapFile = 'enb_' + self.testCase_id + '_s1log.pcap'
|
||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S rm -f /tmp/' + self.epcPcapFile , '\$', 5)
|
mySSH.command('echo ' + localEpcPassword + ' | sudo -S rm -f /tmp/' + self.epcPcapFile , '\$', 5)
|
||||||
mySSH.command('echo $USER; nohup sudo tshark -f "host ' + lIpAddr +'" -i ' + eth_interface + ' -w /tmp/' + self.epcPcapFile + ' > /tmp/tshark.log 2>&1 &', localEpcUserName, 5)
|
mySSH.command('echo $USER; nohup sudo tshark -f "host ' + lIpAddr +'" -i ' + eth_interface + ' -f "' + fltr + '" -w /tmp/' + self.epcPcapFile + ' > /tmp/tshark.log 2>&1 &', localEpcUserName, 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
mySSH.command('cd ' + lSourcePath, '\$', 5)
|
mySSH.command('cd ' + lSourcePath, '\$', 5)
|
||||||
@@ -487,9 +493,9 @@ class RANManagement():
|
|||||||
conf_file='../ci-scripts/stats_monitor_conf.yaml'
|
conf_file='../ci-scripts/stats_monitor_conf.yaml'
|
||||||
if self.eNB_Stats=='yes':
|
if self.eNB_Stats=='yes':
|
||||||
if (self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb'):
|
if (self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb'):
|
||||||
mySSH.command('echo $USER; nohup python3 ' + monitor_file + ' ' + conf_file + ' enb 2>&1 > enb_stats_monitor_execution.log &', '\$', 5)
|
mySSH.command('echo $USER; nohup python3 ' + monitor_file + ' ' + conf_file + ' ' + self.testCase_id + ' enb 2>&1 > enb_stats_monitor_execution.log &', '\$', 5)
|
||||||
else:
|
else:
|
||||||
mySSH.command('echo $USER; nohup python3 ' + monitor_file + ' ' + conf_file + ' gnb 2>&1 > gnb_stats_monitor_execution.log &', '\$', 5)
|
mySSH.command('echo $USER; nohup python3 ' + monitor_file + ' ' + conf_file + ' ' + self.testCase_id + ' gnb 2>&1 > gnb_stats_monitor_execution.log &', '\$', 5)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -665,10 +671,14 @@ class RANManagement():
|
|||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S chmod 666 /tmp/' + self.epcPcapFile, '\$', 5)
|
mySSH.command('echo ' + localEpcPassword + ' | sudo -S chmod 666 /tmp/' + self.epcPcapFile, '\$', 5)
|
||||||
mySSH.copyin(localEpcIpAddr, localEpcUserName, localEpcPassword, '/tmp/' + self.epcPcapFile, '.')
|
mySSH.copyin(localEpcIpAddr, localEpcUserName, localEpcPassword, '/tmp/' + self.epcPcapFile, '.')
|
||||||
mySSH.copyout(lIpAddr, lUserName, lPassWord, self.epcPcapFile, lSourcePath + '/cmake_targets/.')
|
mySSH.copyout(lIpAddr, lUserName, lPassWord, self.epcPcapFile, lSourcePath + '/cmake_targets/.')
|
||||||
|
mySSH.command('killall --signal SIGKILL record', '\$', 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
|
# if T tracer was run with option 0 (no logs), analyze logs
|
||||||
|
# from textlog, otherwise do normal analysis (e.g., option 2)
|
||||||
|
result = re.search('T_stdout 0', str(self.Initialize_eNB_args))
|
||||||
|
if (result is not None):
|
||||||
logging.debug('\u001B[1m Replaying RAW record file\u001B[0m')
|
logging.debug('\u001B[1m Replaying RAW record file\u001B[0m')
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
mySSH.command('killall --signal SIGKILL record', '\$', 5)
|
|
||||||
mySSH.command('cd ' + lSourcePath + '/common/utils/T/tracer/', '\$', 5)
|
mySSH.command('cd ' + lSourcePath + '/common/utils/T/tracer/', '\$', 5)
|
||||||
enbLogFile = self.eNBLogFiles[int(self.eNB_instance)]
|
enbLogFile = self.eNBLogFiles[int(self.eNB_instance)]
|
||||||
raw_record_file = enbLogFile.replace('.log', '_record.raw')
|
raw_record_file = enbLogFile.replace('.log', '_record.raw')
|
||||||
@@ -717,6 +727,9 @@ class RANManagement():
|
|||||||
logStatus = self.AnalyzeLogFile_eNB(fileToAnalyze, HTML)
|
logStatus = self.AnalyzeLogFile_eNB(fileToAnalyze, HTML)
|
||||||
if (logStatus < 0):
|
if (logStatus < 0):
|
||||||
HTML.CreateHtmlTestRow('N/A', 'KO', logStatus)
|
HTML.CreateHtmlTestRow('N/A', 'KO', logStatus)
|
||||||
|
#display rt stats for gNB only
|
||||||
|
if len(self.datalog_rt_stats)!=0 and nodeB_prefix == 'g':
|
||||||
|
HTML.CreateHtmlDataLogTable(self.datalog_rt_stats)
|
||||||
self.prematureExit = True
|
self.prematureExit = True
|
||||||
self.eNBmbmsEnables[int(self.eNB_instance)] = False
|
self.eNBmbmsEnables[int(self.eNB_instance)] = False
|
||||||
return
|
return
|
||||||
@@ -738,7 +751,10 @@ class RANManagement():
|
|||||||
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/enb_*.pcap .','\$',20)
|
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/enb_*.pcap .','\$',20)
|
||||||
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/gnb_*.pcap .','\$',20)
|
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/gnb_*.pcap .','\$',20)
|
||||||
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm -f enb.log.zip', '\$', 5)
|
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm -f enb.log.zip', '\$', 5)
|
||||||
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png ping*.log.png log/*/*.log log/*/*.pcap', '\$', 60)
|
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip enb*.log enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png ping*.log.png log/*/*.log log/*/*.pcap', '\$', 60)
|
||||||
|
result = re.search('core.\d+', mySSH.getBefore())
|
||||||
|
if result is not None:
|
||||||
|
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip core* ran_build/build/{lte,nr}-softmodem', '\$', 60) # add core and executable to zip
|
||||||
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png ping*.log.png log/*/*.log log/*/*.pcap', '\$', 15)
|
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png ping*.log.png log/*/*.log log/*/*.pcap', '\$', 15)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
|
|
||||||
@@ -802,6 +818,7 @@ class RANManagement():
|
|||||||
#NSA specific log markers
|
#NSA specific log markers
|
||||||
nsa_markers ={'SgNBReleaseRequestAcknowledge': [],'FAILURE': [], 'scgFailureInformationNR-r15': [], 'SgNBReleaseRequest': []}
|
nsa_markers ={'SgNBReleaseRequestAcknowledge': [],'FAILURE': [], 'scgFailureInformationNR-r15': [], 'SgNBReleaseRequest': []}
|
||||||
nodeB_prefix_found = False
|
nodeB_prefix_found = False
|
||||||
|
RealTimeProcessingIssue = False
|
||||||
|
|
||||||
line_cnt=0 #log file line counter
|
line_cnt=0 #log file line counter
|
||||||
for line in enb_log_file.readlines():
|
for line in enb_log_file.readlines():
|
||||||
@@ -1003,7 +1020,7 @@ class RANManagement():
|
|||||||
#the following part takes the *_stats.log files as source (not the stdout log file)
|
#the following part takes the *_stats.log files as source (not the stdout log file)
|
||||||
|
|
||||||
#the datalog config file has to be loaded
|
#the datalog config file has to be loaded
|
||||||
datalog_rt_stats_file='datalog_rt_stats.yaml'
|
datalog_rt_stats_file=self.datalog_rt_stats_file
|
||||||
if (os.path.isfile(datalog_rt_stats_file)):
|
if (os.path.isfile(datalog_rt_stats_file)):
|
||||||
yaml_file=datalog_rt_stats_file
|
yaml_file=datalog_rt_stats_file
|
||||||
elif (os.path.isfile('ci-scripts/'+datalog_rt_stats_file)):
|
elif (os.path.isfile('ci-scripts/'+datalog_rt_stats_file)):
|
||||||
@@ -1016,12 +1033,9 @@ class RANManagement():
|
|||||||
datalog_rt_stats = yaml.load(f,Loader=yaml.FullLoader)
|
datalog_rt_stats = yaml.load(f,Loader=yaml.FullLoader)
|
||||||
rt_keys = datalog_rt_stats['Ref'] #we use the keys from the Ref field
|
rt_keys = datalog_rt_stats['Ref'] #we use the keys from the Ref field
|
||||||
|
|
||||||
if (os.path.isfile('./nrL1_stats.log')) and (os.path.isfile('./nrL1_stats.log')):
|
if os.path.isfile('./nrL1_stats.log') and os.path.isfile('./nrMAC_stats.log'):
|
||||||
stat_files_present=True
|
# don't use CI-nrL1_stats.log, as this will increase the processing time for
|
||||||
else:
|
# no reason, we just need the last occurence
|
||||||
stat_files_present=False
|
|
||||||
logging.debug("NR Stats files for RT analysis not found")
|
|
||||||
if stat_files_present:
|
|
||||||
nrL1_stats = open('./nrL1_stats.log', 'r')
|
nrL1_stats = open('./nrL1_stats.log', 'r')
|
||||||
nrMAC_stats = open('./nrMAC_stats.log', 'r')
|
nrMAC_stats = open('./nrMAC_stats.log', 'r')
|
||||||
for line in nrL1_stats.readlines():
|
for line in nrL1_stats.readlines():
|
||||||
@@ -1042,6 +1056,8 @@ class RANManagement():
|
|||||||
real_time_stats[k]=tmp.group(1)
|
real_time_stats[k]=tmp.group(1)
|
||||||
nrL1_stats.close()
|
nrL1_stats.close()
|
||||||
nrMAC_stats.close()
|
nrMAC_stats.close()
|
||||||
|
else:
|
||||||
|
logging.debug("NR Stats files for RT analysis not found")
|
||||||
|
|
||||||
#stdout log file and stat log files analysis completed
|
#stdout log file and stat log files analysis completed
|
||||||
logging.debug(' File analysis (stdout, stats) completed')
|
logging.debug(' File analysis (stdout, stats) completed')
|
||||||
@@ -1120,8 +1136,7 @@ class RANManagement():
|
|||||||
#check if there is a fail => will render the test as failed
|
#check if there is a fail => will render the test as failed
|
||||||
for k in datalog_rt_stats['Data']:
|
for k in datalog_rt_stats['Data']:
|
||||||
if float(datalog_rt_stats['Data'][k][2])> datalog_rt_stats['Threshold'][k]: #condition for fail : avg/ref is greater than the fixed threshold
|
if float(datalog_rt_stats['Data'][k][2])> datalog_rt_stats['Threshold'][k]: #condition for fail : avg/ref is greater than the fixed threshold
|
||||||
#setting prematureExit is ok although not the best option
|
RealTimeProcessingIssue = True
|
||||||
self.prematureExit=False #temp for debug : do not stop the test if RT stats are excedeed
|
|
||||||
else:
|
else:
|
||||||
statMsg = 'No real time stats found in the log file\n'
|
statMsg = 'No real time stats found in the log file\n'
|
||||||
logging.debug('No real time stats found in the log file')
|
logging.debug('No real time stats found in the log file')
|
||||||
@@ -1155,7 +1170,10 @@ class RANManagement():
|
|||||||
logging.debug(statMsg)
|
logging.debug(statMsg)
|
||||||
htmleNBFailureMsg += htmlMsg
|
htmleNBFailureMsg += htmlMsg
|
||||||
|
|
||||||
|
if RealTimeProcessingIssue:
|
||||||
|
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with real time processing issue! \u001B[0m')
|
||||||
|
htmleNBFailureMsg += 'Fail due to real time processing issue\n'
|
||||||
|
global_status = CONST.ENB_REAL_TIME_PROCESSING_ISSUE
|
||||||
if uciStatMsgCount > 0:
|
if uciStatMsgCount > 0:
|
||||||
statMsg = nodeB_prefix + 'NB showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
|
statMsg = nodeB_prefix + 'NB showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
|
|||||||
@@ -544,6 +544,30 @@ class Dashboard:
|
|||||||
})
|
})
|
||||||
editable_mr.save()
|
editable_mr.save()
|
||||||
|
|
||||||
|
def AWSCleanup(self,mode):
|
||||||
|
#first build MR list from aws S3 bucket
|
||||||
|
if mode != 'report' and mode !='delete':
|
||||||
|
print("incorrect mode for awsclean")
|
||||||
|
return
|
||||||
|
aws_mr_list=[]
|
||||||
|
s3 = boto3.resource('s3')
|
||||||
|
my_bucket = s3.Bucket('oaitestdashboard')
|
||||||
|
for my_bucket_object in my_bucket.objects.all():
|
||||||
|
#MR objects are like MR1407/index.html
|
||||||
|
res=re.search(r'^MR([0-9]+)',my_bucket_object.key)
|
||||||
|
if res!=None:
|
||||||
|
aws_mr_list.append(res.group(1))#store MR number as a string
|
||||||
|
#open MR list from GIt already exists as an attribute of this class self.mr_list
|
||||||
|
#parse aws MR list and delete those MR that are no longer open
|
||||||
|
for aws_mr in aws_mr_list:
|
||||||
|
if aws_mr not in self.mr_list:
|
||||||
|
if mode=="report":
|
||||||
|
print(aws_mr+' can be deleted from AWS S3')
|
||||||
|
else :
|
||||||
|
awspath="MR"+aws_mr+"/"
|
||||||
|
print('deleting ' + aws_mr)
|
||||||
|
my_bucket.objects.filter(Prefix=awspath).delete()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -579,6 +603,10 @@ def main():
|
|||||||
htmlDash.PostGitNote(mr,commit, args)
|
htmlDash.PostGitNote(mr,commit, args)
|
||||||
else:
|
else:
|
||||||
print("Not a Merge Request => this build is for testing/debug purpose, no report to git")
|
print("Not a Merge Request => this build is for testing/debug purpose, no report to git")
|
||||||
|
elif sys.argv[1]=="awsclean":
|
||||||
|
mode=sys.argv[2]#report or delete
|
||||||
|
htmlDash=Dashboard()
|
||||||
|
htmlDash.AWSCleanup(mode)
|
||||||
else:
|
else:
|
||||||
print("Wrong argument at position 1")
|
print("Wrong argument at position 1")
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ LTE-2x2 : #short name used in the dashboard
|
|||||||
job : 'RAN-LTE-2x2-Module-OAIEPC' #job name from Jenkins, used in the database
|
job : 'RAN-LTE-2x2-Module-OAIEPC' #job name from Jenkins, used in the database
|
||||||
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-LTE-2x2-Module-OAIEPC'
|
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-LTE-2x2-Module-OAIEPC'
|
||||||
bench : 'Obelix-N310-OAIEPC-Quectel(nrmodule2)'
|
bench : 'Obelix-N310-OAIEPC-Quectel(nrmodule2)'
|
||||||
test : 'TDD, 40MHz, MCS9, 26Mb DL, 7Mb UL'
|
test : 'TM1 + TM2, TDD, 40MHz, MCS9, 26Mb DL, 7Mb UL'
|
||||||
NSA-B200 :
|
NSA-B200 :
|
||||||
job : 'RAN-NSA-B200-Module-LTEBOX'
|
job : 'RAN-NSA-B200-Module-LTEBOX'
|
||||||
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-NSA-B200-Module-LTEBOX'
|
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-NSA-B200-Module-LTEBOX'
|
||||||
@@ -18,14 +18,9 @@ SA-N310 :
|
|||||||
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-Module-CN5G'
|
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-Module-CN5G'
|
||||||
bench : 'Asterix-N310-OAICN5G-Quectel(nrmodule2)'
|
bench : 'Asterix-N310-OAICN5G-Quectel(nrmodule2)'
|
||||||
test : 'TDD, 40MHz, 60Mb DL, 3Mb UL'
|
test : 'TDD, 40MHz, 60Mb DL, 3Mb UL'
|
||||||
SA-OAIUE-B200 :
|
SA-OAIUE-N310-X300 :
|
||||||
job : 'RAN-SA-OAIUE-B200-CN5G'
|
job : 'RAN-SA-OAIUE-N310-X300-CN5G'
|
||||||
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-OAIUE-B200-CN5G/'
|
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-OAIUE-N310-X300-CN5G/'
|
||||||
bench : 'Asterix-N310-OAICN5G-OAIUE-B200'
|
|
||||||
test : 'TDD, 40MHz, Ping, (to be implemented : iperf)'
|
|
||||||
SA-OAIUE-N310 :
|
|
||||||
job : 'RAN-SA-OAIUE-N310-CN5G'
|
|
||||||
link : 'https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-SA-OAIUE-N310-CN5G/'
|
|
||||||
bench : 'Asterix-N310-OAICN5G-OAIUE-N310'
|
bench : 'Asterix-N310-OAICN5G-OAIUE-N310'
|
||||||
test : 'TDD, 40MHz, Ping, (to be implemented : iperf)'
|
test : 'TDD, 40MHz, Ping, (to be implemented : iperf)'
|
||||||
|
|
||||||
|
|||||||
@@ -157,22 +157,24 @@ class SSHConnection():
|
|||||||
if not silent:
|
if not silent:
|
||||||
logging.debug(commandline)
|
logging.debug(commandline)
|
||||||
self.cmd2Results = ''
|
self.cmd2Results = ''
|
||||||
|
noHistoryCmd = 'unset HISTFILE; ' + commandline
|
||||||
myHost = self.username + '@' + self.ipaddress
|
myHost = self.username + '@' + self.ipaddress
|
||||||
# CAUTION: THIS METHOD IMPLIES THAT THERE ARE VALID SSH KEYS
|
# CAUTION: THIS METHOD IMPLIES THAT THERE ARE VALID SSH KEYS
|
||||||
# BETWEEN THE PYTHON EXECUTOR NODE AND THE REMOTE HOST
|
# BETWEEN THE PYTHON EXECUTOR NODE AND THE REMOTE HOST
|
||||||
# OTHERWISE IT WON'T WORK
|
# OTHERWISE IT WON'T WORK
|
||||||
lSsh = subprocess.Popen(["ssh", "%s" % myHost, commandline],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
|
lSsh = subprocess.Popen(["ssh", "%s" % myHost, noHistoryCmd],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
|
||||||
self.cmd2Results = str(lSsh.stdout.readlines())
|
self.cmd2Results = str(lSsh.stdout.readlines())
|
||||||
|
|
||||||
def command3(self, commandline, timeout, silent=False):
|
def command3(self, commandline, timeout, silent=False):
|
||||||
if not silent:
|
if not silent:
|
||||||
logging.debug(commandline)
|
logging.debug(commandline)
|
||||||
self.cmd2Results = ''
|
self.cmd2Results = ''
|
||||||
|
noHistoryCmd = 'unset HISTFILE; ' + commandline
|
||||||
myHost = self.username + '@' + self.ipaddress
|
myHost = self.username + '@' + self.ipaddress
|
||||||
# CAUTION: THIS METHOD IMPLIES THAT THERE ARE VALID SSH KEYS
|
# CAUTION: THIS METHOD IMPLIES THAT THERE ARE VALID SSH KEYS
|
||||||
# BETWEEN THE PYTHON EXECUTOR NODE AND THE REMOTE HOST
|
# BETWEEN THE PYTHON EXECUTOR NODE AND THE REMOTE HOST
|
||||||
# OTHERWISE IT WON'T WORK
|
# OTHERWISE IT WON'T WORK
|
||||||
lSsh = subprocess.Popen(["ssh", "%s" % myHost, commandline],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
|
lSsh = subprocess.Popen(["ssh", "%s" % myHost, noHistoryCmd],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
|
||||||
return lSsh.stdout.readlines()
|
return lSsh.stdout.readlines()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import pickle
|
|||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import yaml
|
import yaml
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
class StatMonitor():
|
class StatMonitor():
|
||||||
@@ -59,11 +60,21 @@ class StatMonitor():
|
|||||||
self.d[node_type]['mcs'].append(int(result.group(4)))
|
self.d[node_type]['mcs'].append(int(result.group(4)))
|
||||||
|
|
||||||
|
|
||||||
def collect(self,node_type):
|
def collect(self,testcase_id,node_type):
|
||||||
if node_type=='enb':
|
if node_type=='enb':
|
||||||
cmd='cat L1_stats.log MAC_stats.log PDCP_stats.log RRC_stats.log'
|
files = ["L1_stats.log", "MAC_stats.log", "PDCP_stats.log", "RRC_stats.log"]
|
||||||
else: #'gnb'
|
else: #'gnb'
|
||||||
cmd='cat nrL1_stats.log nrMAC_stats.log nrPDCP_stats.log nrRRC_stats.log'
|
files = ["nrL1_stats.log", "nrMAC_stats.log", "nrPDCP_stats.log", "nrRRC_stats.log"]
|
||||||
|
#append each file's contents to another file (prepended with CI-) for debug
|
||||||
|
for f in files:
|
||||||
|
if os.path.isfile(f):
|
||||||
|
cmd = 'cat '+ f + ' >> CI-'+testcase_id+'-'+f
|
||||||
|
subprocess.Popen(cmd,shell=True)
|
||||||
|
#join the files for further processing
|
||||||
|
cmd='cat '
|
||||||
|
for f in files:
|
||||||
|
if os.path.isfile(f):
|
||||||
|
cmd += f+' '
|
||||||
process=subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
|
process=subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
|
||||||
output = process.stdout.readlines()
|
output = process.stdout.readlines()
|
||||||
if node_type=='enb':
|
if node_type=='enb':
|
||||||
@@ -72,7 +83,7 @@ class StatMonitor():
|
|||||||
self.process_gnb(node_type,output)
|
self.process_gnb(node_type,output)
|
||||||
|
|
||||||
|
|
||||||
def graph(self,node_type):
|
def graph(self,testcase_id, node_type):
|
||||||
for page in self.d[node_type]['graph']:#work out a set a graphs per page
|
for page in self.d[node_type]['graph']:#work out a set a graphs per page
|
||||||
col = 1
|
col = 1
|
||||||
figure, axis = plt.subplots(len(self.d[node_type]['graph'][page]), col ,figsize=(10, 10))
|
figure, axis = plt.subplots(len(self.d[node_type]['graph'][page]), col ,figsize=(10, 10))
|
||||||
@@ -103,13 +114,14 @@ class StatMonitor():
|
|||||||
|
|
||||||
plt.tight_layout()
|
plt.tight_layout()
|
||||||
#save as png
|
#save as png
|
||||||
plt.savefig(node_type+'_stats_monitor_'+page+'.png')
|
plt.savefig(node_type+'_stats_monitor_'+testcase_id+'_'+page+'.png')
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
||||||
cfg_filename = sys.argv[1] #yaml file as metrics config
|
cfg_filename = sys.argv[1] #yaml file as metrics config
|
||||||
node = sys.argv[2]#enb or gnb
|
testcase_id = sys.argv[2] #test case id to name files accordingly, especially if we have several tests in a sequence
|
||||||
|
node = sys.argv[3]#enb or gnb
|
||||||
mon=StatMonitor(cfg_filename)
|
mon=StatMonitor(cfg_filename)
|
||||||
|
|
||||||
#collecting stats when modem process is stopped
|
#collecting stats when modem process is stopped
|
||||||
@@ -117,11 +129,11 @@ if __name__ == "__main__":
|
|||||||
process=subprocess.Popen(CMD, shell=True, stdout=subprocess.PIPE)
|
process=subprocess.Popen(CMD, shell=True, stdout=subprocess.PIPE)
|
||||||
output = process.stdout.readlines()
|
output = process.stdout.readlines()
|
||||||
while len(output)!=0 :
|
while len(output)!=0 :
|
||||||
mon.collect(node)
|
mon.collect(testcase_id,node)
|
||||||
process=subprocess.Popen(CMD, shell=True, stdout=subprocess.PIPE)
|
process=subprocess.Popen(CMD, shell=True, stdout=subprocess.PIPE)
|
||||||
output = process.stdout.readlines()
|
output = process.stdout.readlines()
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
print('Process stopped')
|
print('Process stopped')
|
||||||
with open(node+'_stats_monitor.pickle', 'wb') as handle:
|
with open(node+'_stats_monitor.pickle', 'wb') as handle:
|
||||||
pickle.dump(mon.d, handle, protocol=pickle.HIGHEST_PROTOCOL)
|
pickle.dump(mon.d, handle, protocol=pickle.HIGHEST_PROTOCOL)
|
||||||
mon.graph(node)
|
mon.graph(testcase_id, node)
|
||||||
|
|||||||
@@ -1,94 +0,0 @@
|
|||||||
import subprocess
|
|
||||||
import time
|
|
||||||
import shlex
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
import pickle
|
|
||||||
import numpy as np
|
|
||||||
import os
|
|
||||||
|
|
||||||
def collect(d, node_type):
|
|
||||||
if node_type=='enb':
|
|
||||||
cmd='cat L1_stats.log MAC_stats.log PDCP_stats.log RRC_stats.log'
|
|
||||||
else: #'gnb'
|
|
||||||
cmd='cat nrL1_stats.log nrMAC_stats.log nrPDCP_stats.log nrRRC_stats.log'
|
|
||||||
process=subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
|
|
||||||
output = process.stdout.readlines()
|
|
||||||
for l in output:
|
|
||||||
tmp=l.decode("utf-8")
|
|
||||||
result=re.match(rf'^.*\bPHR\b ([0-9]+).+\bbler\b ([0-9]+\.[0-9]+).+\bmcsoff\b ([0-9]+).+\bmcs\b ([0-9]+)',tmp)
|
|
||||||
if result is not None:
|
|
||||||
d['PHR'].append(int(result.group(1)))
|
|
||||||
d['bler'].append(float(result.group(2)))
|
|
||||||
d['mcsoff'].append(int(result.group(3)))
|
|
||||||
d['mcs'].append(int(result.group(4)))
|
|
||||||
|
|
||||||
|
|
||||||
def graph(d, node_type):
|
|
||||||
|
|
||||||
|
|
||||||
figure, axis = plt.subplots(4, 1,figsize=(10, 10))
|
|
||||||
|
|
||||||
major_ticks = np.arange(0, len(d['PHR'])+1, 1)
|
|
||||||
axis[0].set_xticks(major_ticks)
|
|
||||||
axis[0].set_xticklabels([])
|
|
||||||
axis[0].plot(d['PHR'],marker='o')
|
|
||||||
axis[0].set_xlabel('time')
|
|
||||||
axis[0].set_ylabel('PHR')
|
|
||||||
axis[0].set_title("PHR")
|
|
||||||
|
|
||||||
major_ticks = np.arange(0, len(d['bler'])+1, 1)
|
|
||||||
axis[1].set_xticks(major_ticks)
|
|
||||||
axis[1].set_xticklabels([])
|
|
||||||
axis[1].plot(d['bler'],marker='o')
|
|
||||||
axis[1].set_xlabel('time')
|
|
||||||
axis[1].set_ylabel('bler')
|
|
||||||
axis[1].set_title("bler")
|
|
||||||
|
|
||||||
major_ticks = np.arange(0, len(d['mcsoff'])+1, 1)
|
|
||||||
axis[2].set_xticks(major_ticks)
|
|
||||||
axis[2].set_xticklabels([])
|
|
||||||
axis[2].plot(d['mcsoff'],marker='o')
|
|
||||||
axis[2].set_xlabel('time')
|
|
||||||
axis[2].set_ylabel('mcsoff')
|
|
||||||
axis[2].set_title("mcsoff")
|
|
||||||
|
|
||||||
major_ticks = np.arange(0, len(d['mcs'])+1, 1)
|
|
||||||
axis[3].set_xticks(major_ticks)
|
|
||||||
axis[3].set_xticklabels([])
|
|
||||||
axis[3].plot(d['mcs'],marker='o')
|
|
||||||
axis[3].set_xlabel('time')
|
|
||||||
axis[3].set_ylabel('mcs')
|
|
||||||
axis[3].set_title("mcs")
|
|
||||||
|
|
||||||
plt.tight_layout()
|
|
||||||
# Combine all the operations and display
|
|
||||||
plt.savefig(node_type+'_stats_monitor.png')
|
|
||||||
plt.show()
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
|
|
||||||
node_type = sys.argv[1]#enb or gnb
|
|
||||||
|
|
||||||
d={}
|
|
||||||
d['PHR']=[]
|
|
||||||
d['bler']=[]
|
|
||||||
d['mcsoff']=[]
|
|
||||||
d['mcs']=[]
|
|
||||||
|
|
||||||
|
|
||||||
cmd='ps aux | grep modem | grep -v grep'
|
|
||||||
process=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
|
|
||||||
output = process.stdout.readlines()
|
|
||||||
while len(output)!=0 :
|
|
||||||
collect(d, node_type)
|
|
||||||
process=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
|
|
||||||
output = process.stdout.readlines()
|
|
||||||
time.sleep(1)
|
|
||||||
print('process stopped')
|
|
||||||
with open(node_type+'_stats_monitor.pickle', 'wb') as handle:
|
|
||||||
pickle.dump(d, handle, protocol=pickle.HIGHEST_PROTOCOL)
|
|
||||||
graph(d, node_type)
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
"""
|
|
||||||
To create graphs and pickle from runtime statistics in L1,MAC,RRC,PDCP files
|
|
||||||
"""
|
|
||||||
|
|
||||||
import subprocess
|
|
||||||
import time
|
|
||||||
import shlex
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
import pickle
|
|
||||||
import matplotlib.pyplot as plt
|
|
||||||
import numpy as np
|
|
||||||
import yaml
|
|
||||||
|
|
||||||
|
|
||||||
class StatMonitor():
|
|
||||||
def __init__(self,):
|
|
||||||
with open('stats_monitor_conf.yaml','r') as file:
|
|
||||||
self.d = yaml.load(file)
|
|
||||||
for node in self.d:
|
|
||||||
for metric in self.d[node]:
|
|
||||||
self.d[node][metric]=[]
|
|
||||||
|
|
||||||
|
|
||||||
def process_gnb (self,node_type,output):
|
|
||||||
for line in output:
|
|
||||||
tmp=line.decode("utf-8")
|
|
||||||
result=re.match(r'^.*\bdlsch_rounds\b ([0-9]+)\/([0-9]+).*\bdlsch_errors\b ([0-9]+)',tmp)
|
|
||||||
if result is not None:
|
|
||||||
self.d[node_type]['dlsch_err'].append(int(result.group(3)))
|
|
||||||
percentage=float(result.group(2))/float(result.group(1))
|
|
||||||
self.d[node_type]['dlsch_err_perc_round_1'].append(percentage)
|
|
||||||
result=re.match(r'^.*\bulsch_rounds\b ([0-9]+)\/([0-9]+).*\bulsch_errors\b ([0-9]+)',tmp)
|
|
||||||
if result is not None:
|
|
||||||
self.d[node_type]['ulsch_err'].append(int(result.group(3)))
|
|
||||||
percentage=float(result.group(2))/float(result.group(1))
|
|
||||||
self.d[node_type]['ulsch_err_perc_round_1'].append(percentage)
|
|
||||||
|
|
||||||
|
|
||||||
def process_enb (self,node_type,output):
|
|
||||||
for line in output:
|
|
||||||
tmp=line.decode("utf-8")
|
|
||||||
result=re.match(r'^.*\bPHR\b ([0-9]+).+\bbler\b ([0-9]+\.[0-9]+).+\bmcsoff\b ([0-9]+).+\bmcs\b ([0-9]+)',tmp)
|
|
||||||
if result is not None:
|
|
||||||
self.d[node_type]['PHR'].append(int(result.group(1)))
|
|
||||||
self.d[node_type]['bler'].append(float(result.group(2)))
|
|
||||||
self.d[node_type]['mcsoff'].append(int(result.group(3)))
|
|
||||||
self.d[node_type]['mcs'].append(int(result.group(4)))
|
|
||||||
|
|
||||||
|
|
||||||
def collect(self,node_type):
|
|
||||||
if node_type=='enb':
|
|
||||||
cmd='cat L1_stats.log MAC_stats.log PDCP_stats.log RRC_stats.log'
|
|
||||||
else: #'gnb'
|
|
||||||
cmd='cat nrL1_stats.log nrMAC_stats.log nrPDCP_stats.log nrRRC_stats.log'
|
|
||||||
process=subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
|
|
||||||
output = process.stdout.readlines()
|
|
||||||
if node_type=='enb':
|
|
||||||
self.process_enb(node_type,output)
|
|
||||||
else: #'gnb'
|
|
||||||
self.process_gnb(node_type,output)
|
|
||||||
|
|
||||||
|
|
||||||
def graph(self,node_type):
|
|
||||||
col = 1
|
|
||||||
figure, axis = plt.subplots(len(self.d[node_type]), col ,figsize=(10, 10))
|
|
||||||
i=0
|
|
||||||
for metric in self.d[node_type]:
|
|
||||||
major_ticks = np.arange(0, len(self.d[node_type][metric])+1, 1)
|
|
||||||
axis[i].set_xticks(major_ticks)
|
|
||||||
axis[i].set_xticklabels([])
|
|
||||||
axis[i].plot(self.d[node_type][metric],marker='o')
|
|
||||||
axis[i].set_xlabel('time')
|
|
||||||
axis[i].set_ylabel(metric)
|
|
||||||
axis[i].set_title(metric)
|
|
||||||
i+=1
|
|
||||||
|
|
||||||
plt.tight_layout()
|
|
||||||
# Combine all the operations and display
|
|
||||||
plt.savefig(node_type+'_stats_monitor.png')
|
|
||||||
plt.show()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
|
|
||||||
node = sys.argv[1]#enb or gnb
|
|
||||||
mon=StatMonitor()
|
|
||||||
|
|
||||||
#collecting stats when modem process is stopped
|
|
||||||
CMD='ps aux | grep mode | grep -v grep'
|
|
||||||
process=subprocess.Popen(CMD, shell=True, stdout=subprocess.PIPE)
|
|
||||||
output = process.stdout.readlines()
|
|
||||||
while len(output)!=0 :
|
|
||||||
mon.collect(node)
|
|
||||||
process=subprocess.Popen(CMD, shell=True, stdout=subprocess.PIPE)
|
|
||||||
output = process.stdout.readlines()
|
|
||||||
time.sleep(1)
|
|
||||||
print('Process stopped')
|
|
||||||
with open(node+'_stats_monitor.pickle', 'wb') as handle:
|
|
||||||
pickle.dump(mon.d, handle, protocol=pickle.HIGHEST_PROTOCOL)
|
|
||||||
mon.graph(node)
|
|
||||||
+9
-10
@@ -21,10 +21,9 @@
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
<testCaseList>
|
<testCaseList>
|
||||||
<htmlTabRef>rfsim-4glte</htmlTabRef>
|
<htmlTabRef>rfsim-4glte-fdd05mhz</htmlTabRef>
|
||||||
<htmlTabName>Testing 4G LTE RF sim - Monolithic eNB</htmlTabName>
|
<htmlTabName>Monolithic eNB - FDD 05MHz</htmlTabName>
|
||||||
<htmlTabIcon>wrench</htmlTabIcon>
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
<repeatCount>2</repeatCount>
|
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
100011
|
100011
|
||||||
000011
|
000011
|
||||||
@@ -46,7 +45,7 @@
|
|||||||
<testCase id="000011">
|
<testCase id="000011">
|
||||||
<class>DeployGenObject</class>
|
<class>DeployGenObject</class>
|
||||||
<desc>Deploy Cassandra Database</desc>
|
<desc>Deploy Cassandra Database</desc>
|
||||||
<yaml_path>yaml_files/4g_rfsimulator</yaml_path>
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz</yaml_path>
|
||||||
<services>cassandra db_init</services>
|
<services>cassandra db_init</services>
|
||||||
<nb_healthy>1</nb_healthy>
|
<nb_healthy>1</nb_healthy>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -66,23 +65,23 @@
|
|||||||
<testCase id="000012">
|
<testCase id="000012">
|
||||||
<class>DeployGenObject</class>
|
<class>DeployGenObject</class>
|
||||||
<desc>Deploy OAI 4G CoreNetwork</desc>
|
<desc>Deploy OAI 4G CoreNetwork</desc>
|
||||||
<yaml_path>yaml_files/4g_rfsimulator</yaml_path>
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz</yaml_path>
|
||||||
<services>oai_hss oai_mme oai_spgwc oai_spgwu trf_gen</services>
|
<services>oai_hss oai_mme oai_spgwc oai_spgwu trf_gen</services>
|
||||||
<nb_healthy>6</nb_healthy>
|
<nb_healthy>6</nb_healthy>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000013">
|
<testCase id="000013">
|
||||||
<class>DeployGenObject</class>
|
<class>DeployGenObject</class>
|
||||||
<desc>Deploy OAI 4G eNB RF sim</desc>
|
<desc>Deploy OAI 4G eNB RF sim (FDD 05MHz)</desc>
|
||||||
<yaml_path>yaml_files/4g_rfsimulator</yaml_path>
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz</yaml_path>
|
||||||
<services>enb</services>
|
<services>enb</services>
|
||||||
<nb_healthy>7</nb_healthy>
|
<nb_healthy>7</nb_healthy>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000014">
|
<testCase id="000014">
|
||||||
<class>DeployGenObject</class>
|
<class>DeployGenObject</class>
|
||||||
<desc>Deploy OAI 4G NR-UE RF sim</desc>
|
<desc>Deploy OAI 4G NR-UE RF sim (FDD 05MHz)</desc>
|
||||||
<yaml_path>yaml_files/4g_rfsimulator</yaml_path>
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz</yaml_path>
|
||||||
<services>oai_ue0</services>
|
<services>oai_ue0</services>
|
||||||
<nb_healthy>8</nb_healthy>
|
<nb_healthy>8</nb_healthy>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -124,7 +123,7 @@
|
|||||||
<testCase id="100011">
|
<testCase id="100011">
|
||||||
<class>UndeployGenObject</class>
|
<class>UndeployGenObject</class>
|
||||||
<desc>Undeploy all OAI 4G stack</desc>
|
<desc>Undeploy all OAI 4G stack</desc>
|
||||||
<yaml_path>yaml_files/4g_rfsimulator</yaml_path>
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz</yaml_path>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
+3
-3
@@ -21,8 +21,8 @@
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
<testCaseList>
|
<testCaseList>
|
||||||
<htmlTabRef>rfsim-4glte-down</htmlTabRef>
|
<htmlTabRef>rfsim-4glte-fdd05mhz-down</htmlTabRef>
|
||||||
<htmlTabName>CleanUp 4G RF - Monolithic eNB</htmlTabName>
|
<htmlTabName>CleanUp 4G RF</htmlTabName>
|
||||||
<htmlTabIcon>trash</htmlTabIcon>
|
<htmlTabIcon>trash</htmlTabIcon>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
100011
|
100011
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
<testCase id="100011">
|
<testCase id="100011">
|
||||||
<class>UndeployGenObject</class>
|
<class>UndeployGenObject</class>
|
||||||
<desc>Undeploy all OAI 4G stack</desc>
|
<desc>Undeploy all OAI 4G stack</desc>
|
||||||
<yaml_path>yaml_files/4g_rfsimulator</yaml_path>
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz</yaml_path>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>rfsim-4glte-fdd05mhz-noS1</htmlTabRef>
|
||||||
|
<htmlTabName>Monolithic eNB - FDD 05MHz - noS1</htmlTabName>
|
||||||
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
100011
|
||||||
|
000013
|
||||||
|
000001
|
||||||
|
000014
|
||||||
|
000002
|
||||||
|
020011
|
||||||
|
020012
|
||||||
|
030011
|
||||||
|
030012
|
||||||
|
100011
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>30</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000013">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 4G eNB RF sim (FDD 05MHz)</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz_noS1</yaml_path>
|
||||||
|
<services>enb</services>
|
||||||
|
<nb_healthy>1</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000014">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 4G NR-UE RF sim (FDD 05MHz)</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz_noS1</yaml_path>
|
||||||
|
<services>oai_ue0</services>
|
||||||
|
<nb_healthy>2</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="020011">
|
||||||
|
<class>PingFromContainer</class>
|
||||||
|
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
||||||
|
<container_name>rfsim4g-oai-lte-ue0</container_name>
|
||||||
|
<options>-I oaitun_ue1 -c 20 10.0.1.1</options>
|
||||||
|
<loss_threshold>5</loss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="020012">
|
||||||
|
<class>PingFromContainer</class>
|
||||||
|
<desc>Ping LTE-UE from eNB</desc>
|
||||||
|
<container_name>rfsim4g-oai-enb</container_name>
|
||||||
|
<options>-I oaitun_enb1 -c 20 10.0.1.2</options>
|
||||||
|
<loss_threshold>5</loss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030011">
|
||||||
|
<class>IperfFromContainer</class>
|
||||||
|
<desc>Iperf UDP Downlink</desc>
|
||||||
|
<server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
|
||||||
|
<client_container_name>rfsim4g-oai-enb</client_container_name>
|
||||||
|
<server_options>-B 10.0.1.2 -u -i 1 -s</server_options>
|
||||||
|
<client_options>-B 10.0.1.1 -c 10.0.1.2 -u -i 1 -t 30 -b 2M</client_options>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030012">
|
||||||
|
<class>IperfFromContainer</class>
|
||||||
|
<desc>Iperf UDP Uplink</desc>
|
||||||
|
<server_container_name>rfsim4g-oai-enb</server_container_name>
|
||||||
|
<client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
|
||||||
|
<server_options>-B 10.0.1.1 -u -i 1 -s</server_options>
|
||||||
|
<client_options>-B 10.0.1.2 -c 10.0.1.1 -u -i 1 -t 30 -b 1M</client_options>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="100011">
|
||||||
|
<class>UndeployGenObject</class>
|
||||||
|
<desc>Undeploy all OAI 4G stack</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz_noS1</yaml_path>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>rfsim-4glte-fdd05mhz-nos1-down</htmlTabRef>
|
||||||
|
<htmlTabName>CleanUp 4G RF</htmlTabName>
|
||||||
|
<htmlTabIcon>trash</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
100011
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="100011">
|
||||||
|
<class>UndeployGenObject</class>
|
||||||
|
<desc>Undeploy all OAI 4G stack</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_05MHz_noS1</yaml_path>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>rfsim-4glte-fdd10mhz</htmlTabRef>
|
||||||
|
<htmlTabName>Monolithic eNB - FDD 10MHz</htmlTabName>
|
||||||
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
100011
|
||||||
|
000011
|
||||||
|
000001
|
||||||
|
000012
|
||||||
|
000002
|
||||||
|
000013
|
||||||
|
000001
|
||||||
|
000014
|
||||||
|
000002
|
||||||
|
020011
|
||||||
|
020012
|
||||||
|
030011
|
||||||
|
030012
|
||||||
|
100011
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000011">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy Cassandra Database</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_10MHz</yaml_path>
|
||||||
|
<services>cassandra db_init</services>
|
||||||
|
<nb_healthy>1</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>30</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000012">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 4G CoreNetwork</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_10MHz</yaml_path>
|
||||||
|
<services>oai_hss oai_mme oai_spgwc oai_spgwu trf_gen</services>
|
||||||
|
<nb_healthy>6</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000013">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 4G eNB RF sim (FDD 10MHz)</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_10MHz</yaml_path>
|
||||||
|
<services>enb</services>
|
||||||
|
<nb_healthy>7</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000014">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 4G NR-UE RF sim (FDD 10MHz)</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_10MHz</yaml_path>
|
||||||
|
<services>oai_ue0</services>
|
||||||
|
<nb_healthy>8</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="020011">
|
||||||
|
<class>PingFromContainer</class>
|
||||||
|
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
||||||
|
<container_name>rfsim4g-oai-lte-ue0</container_name>
|
||||||
|
<options>-I oaitun_ue1 -c 20 192.168.61.11</options>
|
||||||
|
<loss_threshold>5</loss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="020012">
|
||||||
|
<class>PingFromContainer</class>
|
||||||
|
<desc>Ping LTE-UE from Traffic-Gen</desc>
|
||||||
|
<container_name>rfsim4g-trf-gen</container_name>
|
||||||
|
<options>-c 20 12.0.0.2</options>
|
||||||
|
<loss_threshold>5</loss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030011">
|
||||||
|
<class>IperfFromContainer</class>
|
||||||
|
<desc>Iperf UDP Downlink</desc>
|
||||||
|
<server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
|
||||||
|
<client_container_name>rfsim4g-trf-gen</client_container_name>
|
||||||
|
<server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
|
||||||
|
<client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 2M</client_options>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030012">
|
||||||
|
<class>IperfFromContainer</class>
|
||||||
|
<desc>Iperf UDP Uplink</desc>
|
||||||
|
<server_container_name>rfsim4g-trf-gen</server_container_name>
|
||||||
|
<client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
|
||||||
|
<server_options>-u -i 1 -s</server_options>
|
||||||
|
<client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 1M</client_options>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="100011">
|
||||||
|
<class>UndeployGenObject</class>
|
||||||
|
<desc>Undeploy all OAI 4G stack</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_10MHz</yaml_path>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>rfsim-4glte-fdd10mhz-down</htmlTabRef>
|
||||||
|
<htmlTabName>CleanUp 4G RF</htmlTabName>
|
||||||
|
<htmlTabIcon>trash</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
100011
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="100011">
|
||||||
|
<class>UndeployGenObject</class>
|
||||||
|
<desc>Undeploy all OAI 4G stack</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_10MHz</yaml_path>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>rfsim-4glte-fdd20mhz</htmlTabRef>
|
||||||
|
<htmlTabName>Monolithic eNB - FDD 20MHz</htmlTabName>
|
||||||
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
100011
|
||||||
|
000011
|
||||||
|
000001
|
||||||
|
000012
|
||||||
|
000002
|
||||||
|
000013
|
||||||
|
000001
|
||||||
|
000014
|
||||||
|
000002
|
||||||
|
020011
|
||||||
|
020012
|
||||||
|
030011
|
||||||
|
030012
|
||||||
|
100011
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000011">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy Cassandra Database</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_20MHz</yaml_path>
|
||||||
|
<services>cassandra db_init</services>
|
||||||
|
<nb_healthy>1</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>30</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000012">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 4G CoreNetwork</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_20MHz</yaml_path>
|
||||||
|
<services>oai_hss oai_mme oai_spgwc oai_spgwu trf_gen</services>
|
||||||
|
<nb_healthy>6</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000013">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 4G eNB RF sim (FDD 20MHz)</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_20MHz</yaml_path>
|
||||||
|
<services>enb</services>
|
||||||
|
<nb_healthy>7</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000014">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 4G NR-UE RF sim (FDD 20MHz)</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_20MHz</yaml_path>
|
||||||
|
<services>oai_ue0</services>
|
||||||
|
<nb_healthy>8</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="020011">
|
||||||
|
<class>PingFromContainer</class>
|
||||||
|
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
||||||
|
<container_name>rfsim4g-oai-lte-ue0</container_name>
|
||||||
|
<options>-I oaitun_ue1 -c 20 192.168.61.11</options>
|
||||||
|
<loss_threshold>5</loss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="020012">
|
||||||
|
<class>PingFromContainer</class>
|
||||||
|
<desc>Ping LTE-UE from Traffic-Gen</desc>
|
||||||
|
<container_name>rfsim4g-trf-gen</container_name>
|
||||||
|
<options>-c 20 12.0.0.2</options>
|
||||||
|
<loss_threshold>5</loss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030011">
|
||||||
|
<class>IperfFromContainer</class>
|
||||||
|
<desc>Iperf UDP Downlink</desc>
|
||||||
|
<server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
|
||||||
|
<client_container_name>rfsim4g-trf-gen</client_container_name>
|
||||||
|
<server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
|
||||||
|
<client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 2M</client_options>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030012">
|
||||||
|
<class>IperfFromContainer</class>
|
||||||
|
<desc>Iperf UDP Uplink</desc>
|
||||||
|
<server_container_name>rfsim4g-trf-gen</server_container_name>
|
||||||
|
<client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
|
||||||
|
<server_options>-u -i 1 -s</server_options>
|
||||||
|
<client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 1M</client_options>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="100011">
|
||||||
|
<class>UndeployGenObject</class>
|
||||||
|
<desc>Undeploy all OAI 4G stack</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_20MHz</yaml_path>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>rfsim-4glte-fdd20mhz-down</htmlTabRef>
|
||||||
|
<htmlTabName>CleanUp 4G RF</htmlTabName>
|
||||||
|
<htmlTabIcon>trash</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
100011
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="100011">
|
||||||
|
<class>UndeployGenObject</class>
|
||||||
|
<desc>Undeploy all OAI 4G stack</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_fdd_20MHz</yaml_path>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>rfsim-4glte-tdd05mhz</htmlTabRef>
|
||||||
|
<htmlTabName>Monolithic eNB - TDD 05MHz</htmlTabName>
|
||||||
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<repeatCount>2</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
100011
|
||||||
|
000011
|
||||||
|
000001
|
||||||
|
000012
|
||||||
|
000002
|
||||||
|
000013
|
||||||
|
000001
|
||||||
|
000014
|
||||||
|
000002
|
||||||
|
020011
|
||||||
|
020012
|
||||||
|
030011
|
||||||
|
030012
|
||||||
|
100011
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000011">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy Cassandra Database</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_tdd_05MHz</yaml_path>
|
||||||
|
<services>cassandra db_init</services>
|
||||||
|
<nb_healthy>1</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>30</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000012">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 4G CoreNetwork</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_tdd_05MHz</yaml_path>
|
||||||
|
<services>oai_hss oai_mme oai_spgwc oai_spgwu trf_gen</services>
|
||||||
|
<nb_healthy>6</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000013">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 4G eNB RF sim (TDD 05MHz)</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_tdd_05MHz</yaml_path>
|
||||||
|
<services>enb</services>
|
||||||
|
<nb_healthy>7</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000014">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 4G NR-UE RF sim (TDD 05MHz)</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_tdd_05MHz</yaml_path>
|
||||||
|
<services>oai_ue0</services>
|
||||||
|
<nb_healthy>8</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="020011">
|
||||||
|
<class>PingFromContainer</class>
|
||||||
|
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
||||||
|
<container_name>rfsim4g-oai-lte-ue0</container_name>
|
||||||
|
<options>-I oaitun_ue1 -c 20 192.168.61.11</options>
|
||||||
|
<loss_threshold>5</loss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="020012">
|
||||||
|
<class>PingFromContainer</class>
|
||||||
|
<desc>Ping LTE-UE from Traffic-Gen</desc>
|
||||||
|
<container_name>rfsim4g-trf-gen</container_name>
|
||||||
|
<options>-c 20 12.0.0.2</options>
|
||||||
|
<loss_threshold>5</loss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030011">
|
||||||
|
<class>IperfFromContainer</class>
|
||||||
|
<desc>Iperf UDP Downlink</desc>
|
||||||
|
<server_container_name>rfsim4g-oai-lte-ue0</server_container_name>
|
||||||
|
<client_container_name>rfsim4g-trf-gen</client_container_name>
|
||||||
|
<server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
|
||||||
|
<client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 2M</client_options>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030012">
|
||||||
|
<class>IperfFromContainer</class>
|
||||||
|
<desc>Iperf UDP Uplink</desc>
|
||||||
|
<server_container_name>rfsim4g-trf-gen</server_container_name>
|
||||||
|
<client_container_name>rfsim4g-oai-lte-ue0</client_container_name>
|
||||||
|
<server_options>-u -i 1 -s</server_options>
|
||||||
|
<client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 1M</client_options>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="100011">
|
||||||
|
<class>UndeployGenObject</class>
|
||||||
|
<desc>Undeploy all OAI 4G stack</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_tdd_05MHz</yaml_path>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>rfsim-4glte-tdd05mhz-down</htmlTabRef>
|
||||||
|
<htmlTabName>CleanUp 4G RF</htmlTabName>
|
||||||
|
<htmlTabIcon>trash</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
100011
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="100011">
|
||||||
|
<class>UndeployGenObject</class>
|
||||||
|
<desc>Undeploy all OAI 4G stack</desc>
|
||||||
|
<yaml_path>yaml_files/4g_rfsimulator_tdd_05MHz</yaml_path>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -93,7 +93,7 @@
|
|||||||
<server_container_name>rfsim5g-oai-nr-ue</server_container_name>
|
<server_container_name>rfsim5g-oai-nr-ue</server_container_name>
|
||||||
<client_container_name>rfsim5g-oai-ext-dn</client_container_name>
|
<client_container_name>rfsim5g-oai-ext-dn</client_container_name>
|
||||||
<server_options>-B 12.1.1.2 -u -i 1 -s</server_options>
|
<server_options>-B 12.1.1.2 -u -i 1 -s</server_options>
|
||||||
<client_options>-c 12.1.1.2 -u -i 1 -t 30 -b 400K</client_options>
|
<client_options>-c 12.1.1.2 -u -i 1 -t 30 -b 3M</client_options>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030002">
|
<testCase id="030002">
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
<server_container_name>rfsim5g-oai-ext-dn</server_container_name>
|
<server_container_name>rfsim5g-oai-ext-dn</server_container_name>
|
||||||
<client_container_name>rfsim5g-oai-nr-ue</client_container_name>
|
<client_container_name>rfsim5g-oai-nr-ue</client_container_name>
|
||||||
<server_options>-u -i 1 -s</server_options>
|
<server_options>-u -i 1 -s</server_options>
|
||||||
<client_options>-B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 30 -b 20K</client_options>
|
<client_options>-B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 30 -b 1M</client_options>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100001">
|
<testCase id="100001">
|
||||||
|
|||||||
@@ -79,6 +79,7 @@
|
|||||||
<eNB_serverId>1</eNB_serverId>
|
<eNB_serverId>1</eNB_serverId>
|
||||||
<air_interface>nr</air_interface>
|
<air_interface>nr</air_interface>
|
||||||
<eNB_Stats>yes</eNB_Stats>
|
<eNB_Stats>yes</eNB_Stats>
|
||||||
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -99,6 +99,7 @@
|
|||||||
<eNB_serverId>1</eNB_serverId>
|
<eNB_serverId>1</eNB_serverId>
|
||||||
<air_interface>nr</air_interface>
|
<air_interface>nr</air_interface>
|
||||||
<eNB_Stats>yes</eNB_Stats>
|
<eNB_Stats>yes</eNB_Stats>
|
||||||
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,8 @@
|
|||||||
070003
|
070003
|
||||||
070002
|
070002
|
||||||
000001
|
000001
|
||||||
|
070002
|
||||||
|
000001
|
||||||
050000
|
050000
|
||||||
050001
|
050001
|
||||||
010002
|
010002
|
||||||
@@ -155,6 +157,14 @@
|
|||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070002">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-t 10 --bidir</iperf_args>
|
||||||
|
<direction>BIDIR</direction>
|
||||||
|
<id>idefix</id>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
<testCase id="080000">
|
<testCase id="080000">
|
||||||
<class>Terminate_eNB</class>
|
<class>Terminate_eNB</class>
|
||||||
|
|||||||
@@ -26,19 +26,19 @@
|
|||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
<repeatCount>1</repeatCount>
|
<repeatCount>1</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
040000
|
041000
|
||||||
000002
|
000002
|
||||||
010000
|
011000
|
||||||
000002
|
000002
|
||||||
050000
|
051000
|
||||||
050001
|
051001
|
||||||
000001
|
000001
|
||||||
010002
|
010002
|
||||||
080000
|
080000
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="010000">
|
<testCase id="011000">
|
||||||
<class>Initialize_OAI_UE</class>
|
<class>Initialize_OAI_UE</class>
|
||||||
<desc>Initialize OAI UE (X300)</desc>
|
<desc>Initialize OAI UE (X300)</desc>
|
||||||
<air_interface>nr</air_interface>
|
<air_interface>nr</air_interface>
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="040000">
|
<testCase id="041000">
|
||||||
<class>Initialize_eNB</class>
|
<class>Initialize_eNB</class>
|
||||||
<desc>Initialize gNB</desc>
|
<desc>Initialize gNB</desc>
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf --sa --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf --sa --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||||
@@ -76,14 +76,14 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="050000">
|
<testCase id="051000">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping from CN to UE: 20pings in 20sec</desc>
|
<desc>Ping from CN to UE: 20pings in 20sec</desc>
|
||||||
<ping_args>-c 20</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="050001">
|
<testCase id="051001">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping from CN to UE: 100pings in 20sec</desc>
|
<desc>Ping from CN to UE: 100pings in 20sec</desc>
|
||||||
<ping_args>-c 100 -i 0.2</ping_args>
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
|
|||||||
@@ -31,10 +31,15 @@
|
|||||||
010000
|
010000
|
||||||
000001
|
000001
|
||||||
050000
|
050000
|
||||||
|
000001
|
||||||
050001
|
050001
|
||||||
|
000001
|
||||||
070000
|
070000
|
||||||
|
000001
|
||||||
070001
|
070001
|
||||||
000001
|
000001
|
||||||
|
070002
|
||||||
|
000001
|
||||||
010002
|
010002
|
||||||
080000
|
080000
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
@@ -58,12 +63,13 @@
|
|||||||
<testCase id="040000">
|
<testCase id="040000">
|
||||||
<class>Initialize_eNB</class>
|
<class>Initialize_eNB</class>
|
||||||
<desc>Initialize gNB</desc>
|
<desc>Initialize gNB</desc>
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1 --T_stdout 2 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||||
<eNB_instance>0</eNB_instance>
|
<eNB_instance>0</eNB_instance>
|
||||||
<eNB_serverId>0</eNB_serverId>
|
<eNB_serverId>0</eNB_serverId>
|
||||||
<air_interface>nr</air_interface>
|
<air_interface>nr</air_interface>
|
||||||
<eNB_Trace>yes</eNB_Trace>
|
<eNB_Trace>yes</eNB_Trace>
|
||||||
<eNB_Stats>yes</eNB_Stats>
|
<eNB_Stats>yes</eNB_Stats>
|
||||||
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -82,7 +88,7 @@
|
|||||||
|
|
||||||
<testCase id="050000">
|
<testCase id="050000">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
<desc>Ping: 40pings in 40sec</desc>
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<ping_args>-c 40</ping_args>
|
<ping_args>-c 40</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
@@ -120,6 +126,15 @@
|
|||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070002">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-t 10 --bidir</iperf_args>
|
||||||
|
<direction>BIDIR</direction>
|
||||||
|
<id>nrmodule2_quectel</id>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="080000">
|
<testCase id="080000">
|
||||||
<class>Terminate_eNB</class>
|
<class>Terminate_eNB</class>
|
||||||
|
|||||||
@@ -22,18 +22,21 @@
|
|||||||
-->
|
-->
|
||||||
<testCaseList>
|
<testCaseList>
|
||||||
<htmlTabRef>TEST-SA-FR1-Tab3</htmlTabRef>
|
<htmlTabRef>TEST-SA-FR1-Tab3</htmlTabRef>
|
||||||
<htmlTabName>SA Ping DL UL with QUECTEL</htmlTabName>
|
<htmlTabName>SA 162PRB</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
<repeatCount>1</repeatCount>
|
<repeatCount>1</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
040000
|
042000
|
||||||
000002
|
000002
|
||||||
010000
|
010000
|
||||||
000001
|
000001
|
||||||
050000
|
052000
|
||||||
050001
|
000001
|
||||||
070000
|
072000
|
||||||
070001
|
000001
|
||||||
|
072001
|
||||||
|
000001
|
||||||
|
072002
|
||||||
000001
|
000001
|
||||||
010002
|
010002
|
||||||
080000
|
080000
|
||||||
@@ -55,7 +58,7 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="040000">
|
<testCase id="042000">
|
||||||
<class>Initialize_eNB</class>
|
<class>Initialize_eNB</class>
|
||||||
<desc>Initialize gNB</desc>
|
<desc>Initialize gNB</desc>
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||||
@@ -64,6 +67,7 @@
|
|||||||
<air_interface>nr</air_interface>
|
<air_interface>nr</air_interface>
|
||||||
<eNB_Trace>yes</eNB_Trace>
|
<eNB_Trace>yes</eNB_Trace>
|
||||||
<eNB_Stats>yes</eNB_Stats>
|
<eNB_Stats>yes</eNB_Stats>
|
||||||
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -80,39 +84,44 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="050000">
|
<testCase id="052000">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
<desc>Ping: 40pings in 40sec</desc>
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<ping_args>-c 20</ping_args>
|
<ping_args>-c 40</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
|
<ping_rttavg_threshold>20</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="050001">
|
|
||||||
<class>Ping</class>
|
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
<ping_args>-c 100 -i 0,2</ping_args>
|
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="070000">
|
<testCase id="072000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/140Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/140Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 140M -t 60</iperf_args>
|
<iperf_args>-u -b 140M -t 60</iperf_args>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="072001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 3M -t 60</iperf_args>
|
<iperf_args>-u -b 3M -t 60</iperf_args>
|
||||||
<direction>UL</direction>
|
<direction>UL</direction>
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="072002">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-t 10 --bidir</iperf_args>
|
||||||
|
<direction>BIDIR</direction>
|
||||||
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -26,28 +26,28 @@
|
|||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
<repeatCount>1</repeatCount>
|
<repeatCount>1</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
040000
|
041000
|
||||||
000002
|
000002
|
||||||
010000
|
011000
|
||||||
000001
|
000001
|
||||||
050000
|
051000
|
||||||
000001
|
000001
|
||||||
070000
|
071000
|
||||||
000001
|
000001
|
||||||
070001
|
071001
|
||||||
000001
|
000001
|
||||||
070002
|
071002
|
||||||
000001
|
000001
|
||||||
070003
|
071003
|
||||||
000001
|
000001
|
||||||
070004
|
071004
|
||||||
000001
|
000001
|
||||||
010002
|
011002
|
||||||
080000
|
081000
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="010000">
|
<testCase id="011000">
|
||||||
<class>Initialize_UE</class>
|
<class>Initialize_UE</class>
|
||||||
<desc>Initialize Quectel</desc>
|
<desc>Initialize Quectel</desc>
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
@@ -55,14 +55,14 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="010002">
|
<testCase id="011002">
|
||||||
<class>Terminate_UE</class>
|
<class>Terminate_UE</class>
|
||||||
<desc>Terminate Quectel</desc>
|
<desc>Terminate Quectel</desc>
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="040000">
|
<testCase id="041000">
|
||||||
<class>Initialize_eNB</class>
|
<class>Initialize_eNB</class>
|
||||||
<desc>Initialize gNB</desc>
|
<desc>Initialize gNB</desc>
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf --sa -q --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||||
@@ -71,6 +71,7 @@
|
|||||||
<air_interface>nr</air_interface>
|
<air_interface>nr</air_interface>
|
||||||
<eNB_Trace>yes</eNB_Trace>
|
<eNB_Trace>yes</eNB_Trace>
|
||||||
<eNB_Stats>yes</eNB_Stats>
|
<eNB_Stats>yes</eNB_Stats>
|
||||||
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -87,9 +88,9 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="050000">
|
<testCase id="051000">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
<desc>Ping: 40pings in 40sec</desc>
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<ping_args>-c 40</ping_args>
|
<ping_args>-c 40</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
@@ -97,7 +98,7 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="070000">
|
<testCase id="071000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/10Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/10Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 10M -t 30</iperf_args>
|
<iperf_args>-u -b 10M -t 30</iperf_args>
|
||||||
@@ -107,7 +108,7 @@
|
|||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
<testCase id="070001">
|
<testCase id="071001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/20Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/20Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 20M -t 30</iperf_args>
|
<iperf_args>-u -b 20M -t 30</iperf_args>
|
||||||
@@ -117,7 +118,7 @@
|
|||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
<testCase id="070002">
|
<testCase id="071002">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/40Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/40Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 40M -t 30</iperf_args>
|
<iperf_args>-u -b 40M -t 30</iperf_args>
|
||||||
@@ -127,7 +128,7 @@
|
|||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
<testCase id="070003">
|
<testCase id="071003">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/60Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/60Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 60M -t 30</iperf_args>
|
<iperf_args>-u -b 60M -t 30</iperf_args>
|
||||||
@@ -137,20 +138,20 @@
|
|||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
<testCase id="070004">
|
<testCase id="071004">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/90Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/90Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 90M -t 30</iperf_args>
|
<iperf_args>-u -b 90M -t 30</iperf_args>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>nrmodule2_quectel</id>
|
<id>nrmodule2_quectel</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>90</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="080000">
|
<testCase id="081000">
|
||||||
<class>Terminate_eNB</class>
|
<class>Terminate_eNB</class>
|
||||||
<desc>Terminate gNB</desc>
|
<desc>Terminate gNB</desc>
|
||||||
<eNB_instance>0</eNB_instance>
|
<eNB_instance>0</eNB_instance>
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
<air_interface>nr</air_interface>
|
<air_interface>nr</air_interface>
|
||||||
<eNB_Trace>yes</eNB_Trace>
|
<eNB_Trace>yes</eNB_Trace>
|
||||||
<eNB_Stats>yes</eNB_Stats>
|
<eNB_Stats>yes</eNB_Stats>
|
||||||
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -21,8 +21,8 @@
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
<testCaseList>
|
<testCaseList>
|
||||||
<htmlTabRef>TEST-LTE-TM2</htmlTabRef>
|
<htmlTabRef>TEST-LTE-TM1-Tab1</htmlTabRef>
|
||||||
<htmlTabName>LTE 2x2 Ping DL UL with QUECTEL</htmlTabName>
|
<htmlTabName>LTE 2x2 TM1 Ping DL UL with QUECTEL</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
<repeatCount>1</repeatCount>
|
<repeatCount>1</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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-LTE-TM2-Tab2</htmlTabRef>
|
||||||
|
<htmlTabName>LTE 2x2 TM2 Ping DL UL with QUECTEL</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
030001
|
||||||
|
000002
|
||||||
|
010000
|
||||||
|
000001
|
||||||
|
050002
|
||||||
|
050003
|
||||||
|
000002
|
||||||
|
070002
|
||||||
|
070003
|
||||||
|
000001
|
||||||
|
010002
|
||||||
|
080000
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="010000">
|
||||||
|
<class>Initialize_UE</class>
|
||||||
|
<desc>Initialize Quectel</desc>
|
||||||
|
<id>nrmodule2_quectel</id>
|
||||||
|
<UE_Trace>yes</UE_Trace>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
<testCase id="010002">
|
||||||
|
<class>Terminate_UE</class>
|
||||||
|
<desc>Terminate Quectel</desc>
|
||||||
|
<id>nrmodule2_quectel</id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
<testCase id="030001">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize eNB</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf --usrp-tx-thread-config 1 --thread-pool 0,2,4,6 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<air_interface>lte</air_interface>
|
||||||
|
<eNB_Trace>yes</eNB_Trace>
|
||||||
|
<eNB_Stats>yes</eNB_Stats>
|
||||||
|
<USRP_IPAddress>192.168.18.241</USRP_IPAddress>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
<testCase id="050002">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>Ping: 20 pings</desc>
|
||||||
|
<id>nrmodule2_quectel</id>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
|
<ping_rttavg_threshold>40</ping_rttavg_threshold>
|
||||||
|
</testCase>
|
||||||
|
<testCase id="050003">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>Ping: 100 pings, size 1024</desc>
|
||||||
|
<id>nrmodule2_quectel</id>
|
||||||
|
<ping_args>-c 100 -s 1024 -i 0,2</ping_args>
|
||||||
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
|
<ping_rttavg_threshold>30</ping_rttavg_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
<testCase id="070002">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (DL/1Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 1M -t 60</iperf_args>
|
||||||
|
<direction>DL</direction>
|
||||||
|
<id>nrmodule2_quectel</id>
|
||||||
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070003">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (UL/7Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 7M -t 60</iperf_args>
|
||||||
|
<direction>UL</direction>
|
||||||
|
<id>nrmodule2_quectel</id>
|
||||||
|
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<testCase id="080000">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate eNB</desc>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<air_interface>lte</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="080001">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate gNB</desc>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
<air_interface>nr</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
|
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
enb:
|
||||||
|
image: oai-enb:develop
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-oai-enb
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.20
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
USE_FDD_MONO: 'yes'
|
||||||
|
RFSIMULATOR: enb
|
||||||
|
ENB_NAME: eNB-rf-sim
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MNC_LENGTH: 2
|
||||||
|
TAC: 1
|
||||||
|
UTRA_BAND_ID: 7
|
||||||
|
DL_FREQUENCY_IN_MHZ: 2680
|
||||||
|
UL_FREQUENCY_OFFSET_IN_MHZ: 120
|
||||||
|
NID_CELL: 10
|
||||||
|
NB_PRB: 25
|
||||||
|
MME_S1C_IP_ADDRESS: 192.168.61.3
|
||||||
|
ENB_S1C_IF_NAME: eth0
|
||||||
|
ENB_S1C_IP_ADDRESS: 192.168.61.20
|
||||||
|
ENB_S1U_IF_NAME: eth0
|
||||||
|
ENB_S1U_IP_ADDRESS: 192.168.61.20
|
||||||
|
ENB_X2_IP_ADDRESS: 192.168.61.20
|
||||||
|
FLEXRAN_ENABLED: 'no'
|
||||||
|
FLEXRAN_INTERFACE_NAME: eth0
|
||||||
|
FLEXRAN_IPV4_ADDRESS: 192.168.61.10
|
||||||
|
USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time --noS1
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep lte-softmodem"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_ue0:
|
||||||
|
image: oai-lte-ue:develop
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-oai-lte-ue0
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.30
|
||||||
|
expose:
|
||||||
|
- "10000"
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
HOSTNAME: oai_ue0
|
||||||
|
RFSIMULATOR: 192.168.61.20
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
SHORT_IMSI: '0100000001'
|
||||||
|
LTE_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
|
||||||
|
OPC: 'c42449363bbad02b66d16bc975d77cc1'
|
||||||
|
MSISDN: '001011234561010'
|
||||||
|
HPLMN: 20896
|
||||||
|
USE_ADDITIONAL_OPTIONS: --rfsim -C 2680000000 -r 25 --ue-rxgain 140 --ue-txgain 120 --nokrnmod 1 --log_config.global_log_options level,nocolor,time --noS1
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep lte-uesoftmodem"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
name: rfsim4g-oai-public-net
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 192.168.61.0/26
|
||||||
|
driver_opts:
|
||||||
|
com.docker.network.bridge.name: "rfsim4g-public"
|
||||||
@@ -0,0 +1,272 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
cassandra:
|
||||||
|
image: cassandra:2.1
|
||||||
|
container_name: rfsim4g-cassandra
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
ipv4_address: 192.168.68.2
|
||||||
|
environment:
|
||||||
|
CASSANDRA_CLUSTER_NAME: "OAI HSS Cluster"
|
||||||
|
CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "nodetool status"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
db_init:
|
||||||
|
image: cassandra:2.1
|
||||||
|
container_name: rfsim4g-db-init
|
||||||
|
depends_on: [cassandra]
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
max_attempts: 10
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
ipv4_address: 192.168.68.4
|
||||||
|
volumes:
|
||||||
|
- ../4g_rfsimulator_fdd_05MHz/oai_db.cql:/home/oai_db.cql
|
||||||
|
entrypoint: /bin/bash -c "cqlsh --file /home/oai_db.cql 192.168.68.2 && echo 'OK'"
|
||||||
|
|
||||||
|
oai_hss:
|
||||||
|
image: oai-hss:latest
|
||||||
|
container_name: rfsim4g-oai-hss
|
||||||
|
privileged: true
|
||||||
|
depends_on: [cassandra]
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
ipv4_address: 192.168.68.3
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.2
|
||||||
|
environment:
|
||||||
|
REALM: openairinterface.org
|
||||||
|
HSS_FQDN: hss.openairinterface.org
|
||||||
|
PREFIX: /openair-hss/etc
|
||||||
|
cassandra_Server_IP: 192.168.68.2
|
||||||
|
OP_KEY: 1006020f0a478bf6b699f15c062e42b3
|
||||||
|
LTE_K: fec86ba6eb707ed08905757b1bb44b8f
|
||||||
|
APN1: oai.ipv4
|
||||||
|
APN2: internet
|
||||||
|
FIRST_IMSI: 208960100000001
|
||||||
|
NB_USERS: 10
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_hss"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_mme:
|
||||||
|
image: oai-mme:latest
|
||||||
|
container_name: rfsim4g-oai-mme
|
||||||
|
privileged: true
|
||||||
|
depends_on: [oai_hss]
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.3
|
||||||
|
environment:
|
||||||
|
REALM: openairinterface.org
|
||||||
|
PREFIX: /openair-mme/etc
|
||||||
|
INSTANCE: 1
|
||||||
|
PID_DIRECTORY: /var/run
|
||||||
|
HSS_IP_ADDR: 192.168.61.2
|
||||||
|
HSS_HOSTNAME: hss
|
||||||
|
HSS_FQDN: hss.openairinterface.org
|
||||||
|
HSS_REALM: openairinterface.org
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MME_GID: 32768
|
||||||
|
MME_CODE: 3
|
||||||
|
TAC_0: 1
|
||||||
|
TAC_1: 2
|
||||||
|
TAC_2: 3
|
||||||
|
MME_FQDN: mme.openairinterface.org
|
||||||
|
MME_S6A_IP_ADDR: 192.168.61.3
|
||||||
|
MME_INTERFACE_NAME_FOR_S1_MME: eth0
|
||||||
|
MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3
|
||||||
|
MME_INTERFACE_NAME_FOR_S11: eth0
|
||||||
|
MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3
|
||||||
|
MME_INTERFACE_NAME_FOR_S10: lo
|
||||||
|
MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
|
||||||
|
OUTPUT: CONSOLE
|
||||||
|
SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4
|
||||||
|
PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
|
||||||
|
PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
|
||||||
|
MCC_SGW_0: '208'
|
||||||
|
MNC3_SGW_0: '096'
|
||||||
|
TAC_LB_SGW_0: '01'
|
||||||
|
TAC_HB_SGW_0: '00'
|
||||||
|
MCC_MME_0: '208'
|
||||||
|
MNC3_MME_0: '096'
|
||||||
|
TAC_LB_MME_0: '02'
|
||||||
|
TAC_HB_MME_0: '00'
|
||||||
|
MCC_MME_1: '208'
|
||||||
|
MNC3_MME_1: '096'
|
||||||
|
TAC_LB_MME_1: '03'
|
||||||
|
TAC_HB_MME_1: '00'
|
||||||
|
TAC_LB_SGW_TEST_0: '03'
|
||||||
|
TAC_HB_SGW_TEST_0: '00'
|
||||||
|
SGW_IPV4_ADDRESS_FOR_S11_TEST_0: 0.0.0.0
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_mme"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_spgwc:
|
||||||
|
image: oai-spgwc:latest
|
||||||
|
privileged: true
|
||||||
|
depends_on: [oai_mme]
|
||||||
|
container_name: rfsim4g-oai-spgwc
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.4
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
SGW_INTERFACE_NAME_FOR_S11: eth0
|
||||||
|
PGW_INTERFACE_NAME_FOR_SX: eth0
|
||||||
|
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
|
||||||
|
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||||
|
PUSH_PROTOCOL_OPTION: 'true'
|
||||||
|
APN_NI_1: oai.ipv4
|
||||||
|
APN_NI_2: oai.ipv4_2
|
||||||
|
DEFAULT_APN_NI_1: oai.ipv4
|
||||||
|
UE_IP_ADDRESS_POOL_1: '12.0.0.2 - 12.0.0.254'
|
||||||
|
UE_IP_ADDRESS_POOL_2: '12.1.1.2 - 12.1.1.254'
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MNC03: '096'
|
||||||
|
TAC: 1
|
||||||
|
GW_ID: 1
|
||||||
|
REALM: openairinterface.org
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_spgwc"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_spgwu:
|
||||||
|
image: oai-spgwu-tiny:latest
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-oai-spgwu-tiny
|
||||||
|
depends_on: [oai_spgwc]
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.5
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
PID_DIRECTORY: /var/run
|
||||||
|
INSTANCE: 1
|
||||||
|
SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP: eth0
|
||||||
|
PGW_INTERFACE_NAME_FOR_SGI: eth0
|
||||||
|
SGW_INTERFACE_NAME_FOR_SX: eth0
|
||||||
|
SPGWC0_IP_ADDRESS: 192.168.61.4
|
||||||
|
NETWORK_UE_IP: '12.0.0.0/24'
|
||||||
|
NETWORK_UE_NAT_OPTION: 'yes'
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MNC03: '096'
|
||||||
|
TAC: 1
|
||||||
|
GW_ID: 1
|
||||||
|
REALM: openairinterface.org
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_spgwu"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
trf_gen:
|
||||||
|
image: trf-gen:production
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-trf-gen
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.11
|
||||||
|
entrypoint: /bin/bash -c "ip route add 12.0.0.0/24 via 192.168.61.5 dev eth0; sleep infinity"
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "ping -c 2 192.168.61.5"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
enb:
|
||||||
|
image: oai-enb:develop
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-oai-enb
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.20
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
USE_FDD_MONO: 'yes'
|
||||||
|
RFSIMULATOR: enb
|
||||||
|
ENB_NAME: eNB-rf-sim
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MNC_LENGTH: 2
|
||||||
|
TAC: 1
|
||||||
|
UTRA_BAND_ID: 7
|
||||||
|
DL_FREQUENCY_IN_MHZ: 2680
|
||||||
|
UL_FREQUENCY_OFFSET_IN_MHZ: 120
|
||||||
|
NID_CELL: 10
|
||||||
|
NB_PRB: 50
|
||||||
|
MME_S1C_IP_ADDRESS: 192.168.61.3
|
||||||
|
ENB_S1C_IF_NAME: eth0
|
||||||
|
ENB_S1C_IP_ADDRESS: 192.168.61.20
|
||||||
|
ENB_S1U_IF_NAME: eth0
|
||||||
|
ENB_S1U_IP_ADDRESS: 192.168.61.20
|
||||||
|
ENB_X2_IP_ADDRESS: 192.168.61.20
|
||||||
|
FLEXRAN_ENABLED: 'no'
|
||||||
|
FLEXRAN_INTERFACE_NAME: eth0
|
||||||
|
FLEXRAN_IPV4_ADDRESS: 192.168.61.10
|
||||||
|
USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep lte-softmodem"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_ue0:
|
||||||
|
image: oai-lte-ue:develop
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-oai-lte-ue0
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.30
|
||||||
|
expose:
|
||||||
|
- "10000"
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
HOSTNAME: oai_ue0
|
||||||
|
RFSIMULATOR: 192.168.61.20
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
SHORT_IMSI: '0100000001'
|
||||||
|
LTE_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
|
||||||
|
OPC: 'c42449363bbad02b66d16bc975d77cc1'
|
||||||
|
MSISDN: '001011234561010'
|
||||||
|
HPLMN: 20896
|
||||||
|
USE_ADDITIONAL_OPTIONS: --rfsim -C 2680000000 -r 50 --ue-rxgain 140 --ue-txgain 120 --nokrnmod 1 --log_config.global_log_options level,nocolor,time
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep lte-uesoftmodem"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
name: rfsim4g-oai-private-net
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 192.168.68.0/26
|
||||||
|
driver_opts:
|
||||||
|
com.docker.network.bridge.name: "rfsim4g-private"
|
||||||
|
public_net:
|
||||||
|
name: rfsim4g-oai-public-net
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 192.168.61.0/26
|
||||||
|
driver_opts:
|
||||||
|
com.docker.network.bridge.name: "rfsim4g-public"
|
||||||
@@ -0,0 +1,272 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
cassandra:
|
||||||
|
image: cassandra:2.1
|
||||||
|
container_name: rfsim4g-cassandra
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
ipv4_address: 192.168.68.2
|
||||||
|
environment:
|
||||||
|
CASSANDRA_CLUSTER_NAME: "OAI HSS Cluster"
|
||||||
|
CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "nodetool status"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
db_init:
|
||||||
|
image: cassandra:2.1
|
||||||
|
container_name: rfsim4g-db-init
|
||||||
|
depends_on: [cassandra]
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
max_attempts: 10
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
ipv4_address: 192.168.68.4
|
||||||
|
volumes:
|
||||||
|
- ../4g_rfsimulator_fdd_05MHz/oai_db.cql:/home/oai_db.cql
|
||||||
|
entrypoint: /bin/bash -c "cqlsh --file /home/oai_db.cql 192.168.68.2 && echo 'OK'"
|
||||||
|
|
||||||
|
oai_hss:
|
||||||
|
image: oai-hss:latest
|
||||||
|
container_name: rfsim4g-oai-hss
|
||||||
|
privileged: true
|
||||||
|
depends_on: [cassandra]
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
ipv4_address: 192.168.68.3
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.2
|
||||||
|
environment:
|
||||||
|
REALM: openairinterface.org
|
||||||
|
HSS_FQDN: hss.openairinterface.org
|
||||||
|
PREFIX: /openair-hss/etc
|
||||||
|
cassandra_Server_IP: 192.168.68.2
|
||||||
|
OP_KEY: 1006020f0a478bf6b699f15c062e42b3
|
||||||
|
LTE_K: fec86ba6eb707ed08905757b1bb44b8f
|
||||||
|
APN1: oai.ipv4
|
||||||
|
APN2: internet
|
||||||
|
FIRST_IMSI: 208960100000001
|
||||||
|
NB_USERS: 10
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_hss"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_mme:
|
||||||
|
image: oai-mme:latest
|
||||||
|
container_name: rfsim4g-oai-mme
|
||||||
|
privileged: true
|
||||||
|
depends_on: [oai_hss]
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.3
|
||||||
|
environment:
|
||||||
|
REALM: openairinterface.org
|
||||||
|
PREFIX: /openair-mme/etc
|
||||||
|
INSTANCE: 1
|
||||||
|
PID_DIRECTORY: /var/run
|
||||||
|
HSS_IP_ADDR: 192.168.61.2
|
||||||
|
HSS_HOSTNAME: hss
|
||||||
|
HSS_FQDN: hss.openairinterface.org
|
||||||
|
HSS_REALM: openairinterface.org
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MME_GID: 32768
|
||||||
|
MME_CODE: 3
|
||||||
|
TAC_0: 1
|
||||||
|
TAC_1: 2
|
||||||
|
TAC_2: 3
|
||||||
|
MME_FQDN: mme.openairinterface.org
|
||||||
|
MME_S6A_IP_ADDR: 192.168.61.3
|
||||||
|
MME_INTERFACE_NAME_FOR_S1_MME: eth0
|
||||||
|
MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3
|
||||||
|
MME_INTERFACE_NAME_FOR_S11: eth0
|
||||||
|
MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3
|
||||||
|
MME_INTERFACE_NAME_FOR_S10: lo
|
||||||
|
MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
|
||||||
|
OUTPUT: CONSOLE
|
||||||
|
SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4
|
||||||
|
PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
|
||||||
|
PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
|
||||||
|
MCC_SGW_0: '208'
|
||||||
|
MNC3_SGW_0: '096'
|
||||||
|
TAC_LB_SGW_0: '01'
|
||||||
|
TAC_HB_SGW_0: '00'
|
||||||
|
MCC_MME_0: '208'
|
||||||
|
MNC3_MME_0: '096'
|
||||||
|
TAC_LB_MME_0: '02'
|
||||||
|
TAC_HB_MME_0: '00'
|
||||||
|
MCC_MME_1: '208'
|
||||||
|
MNC3_MME_1: '096'
|
||||||
|
TAC_LB_MME_1: '03'
|
||||||
|
TAC_HB_MME_1: '00'
|
||||||
|
TAC_LB_SGW_TEST_0: '03'
|
||||||
|
TAC_HB_SGW_TEST_0: '00'
|
||||||
|
SGW_IPV4_ADDRESS_FOR_S11_TEST_0: 0.0.0.0
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_mme"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_spgwc:
|
||||||
|
image: oai-spgwc:latest
|
||||||
|
privileged: true
|
||||||
|
depends_on: [oai_mme]
|
||||||
|
container_name: rfsim4g-oai-spgwc
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.4
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
SGW_INTERFACE_NAME_FOR_S11: eth0
|
||||||
|
PGW_INTERFACE_NAME_FOR_SX: eth0
|
||||||
|
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
|
||||||
|
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||||
|
PUSH_PROTOCOL_OPTION: 'true'
|
||||||
|
APN_NI_1: oai.ipv4
|
||||||
|
APN_NI_2: oai.ipv4_2
|
||||||
|
DEFAULT_APN_NI_1: oai.ipv4
|
||||||
|
UE_IP_ADDRESS_POOL_1: '12.0.0.2 - 12.0.0.254'
|
||||||
|
UE_IP_ADDRESS_POOL_2: '12.1.1.2 - 12.1.1.254'
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MNC03: '096'
|
||||||
|
TAC: 1
|
||||||
|
GW_ID: 1
|
||||||
|
REALM: openairinterface.org
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_spgwc"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_spgwu:
|
||||||
|
image: oai-spgwu-tiny:latest
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-oai-spgwu-tiny
|
||||||
|
depends_on: [oai_spgwc]
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.5
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
PID_DIRECTORY: /var/run
|
||||||
|
INSTANCE: 1
|
||||||
|
SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP: eth0
|
||||||
|
PGW_INTERFACE_NAME_FOR_SGI: eth0
|
||||||
|
SGW_INTERFACE_NAME_FOR_SX: eth0
|
||||||
|
SPGWC0_IP_ADDRESS: 192.168.61.4
|
||||||
|
NETWORK_UE_IP: '12.0.0.0/24'
|
||||||
|
NETWORK_UE_NAT_OPTION: 'yes'
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MNC03: '096'
|
||||||
|
TAC: 1
|
||||||
|
GW_ID: 1
|
||||||
|
REALM: openairinterface.org
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_spgwu"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
trf_gen:
|
||||||
|
image: trf-gen:production
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-trf-gen
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.11
|
||||||
|
entrypoint: /bin/bash -c "ip route add 12.0.0.0/24 via 192.168.61.5 dev eth0; sleep infinity"
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "ping -c 2 192.168.61.5"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
enb:
|
||||||
|
image: oai-enb:develop
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-oai-enb
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.20
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
USE_FDD_MONO: 'yes'
|
||||||
|
RFSIMULATOR: enb
|
||||||
|
ENB_NAME: eNB-rf-sim
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MNC_LENGTH: 2
|
||||||
|
TAC: 1
|
||||||
|
UTRA_BAND_ID: 7
|
||||||
|
DL_FREQUENCY_IN_MHZ: 2680
|
||||||
|
UL_FREQUENCY_OFFSET_IN_MHZ: 120
|
||||||
|
NID_CELL: 10
|
||||||
|
NB_PRB: 100
|
||||||
|
MME_S1C_IP_ADDRESS: 192.168.61.3
|
||||||
|
ENB_S1C_IF_NAME: eth0
|
||||||
|
ENB_S1C_IP_ADDRESS: 192.168.61.20
|
||||||
|
ENB_S1U_IF_NAME: eth0
|
||||||
|
ENB_S1U_IP_ADDRESS: 192.168.61.20
|
||||||
|
ENB_X2_IP_ADDRESS: 192.168.61.20
|
||||||
|
FLEXRAN_ENABLED: 'no'
|
||||||
|
FLEXRAN_INTERFACE_NAME: eth0
|
||||||
|
FLEXRAN_IPV4_ADDRESS: 192.168.61.10
|
||||||
|
USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep lte-softmodem"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_ue0:
|
||||||
|
image: oai-lte-ue:develop
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-oai-lte-ue0
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.30
|
||||||
|
expose:
|
||||||
|
- "10000"
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
HOSTNAME: oai_ue0
|
||||||
|
RFSIMULATOR: 192.168.61.20
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
SHORT_IMSI: '0100000001'
|
||||||
|
LTE_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
|
||||||
|
OPC: 'c42449363bbad02b66d16bc975d77cc1'
|
||||||
|
MSISDN: '001011234561010'
|
||||||
|
HPLMN: 20896
|
||||||
|
USE_ADDITIONAL_OPTIONS: --rfsim -C 2680000000 -r 100 --ue-rxgain 140 --ue-txgain 120 --nokrnmod 1 --log_config.global_log_options level,nocolor,time
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep lte-uesoftmodem"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
name: rfsim4g-oai-private-net
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 192.168.68.0/26
|
||||||
|
driver_opts:
|
||||||
|
com.docker.network.bridge.name: "rfsim4g-private"
|
||||||
|
public_net:
|
||||||
|
name: rfsim4g-oai-public-net
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 192.168.61.0/26
|
||||||
|
driver_opts:
|
||||||
|
com.docker.network.bridge.name: "rfsim4g-public"
|
||||||
@@ -0,0 +1,271 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
cassandra:
|
||||||
|
image: cassandra:2.1
|
||||||
|
container_name: rfsim4g-cassandra
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
ipv4_address: 192.168.68.2
|
||||||
|
environment:
|
||||||
|
CASSANDRA_CLUSTER_NAME: "OAI HSS Cluster"
|
||||||
|
CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "nodetool status"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
db_init:
|
||||||
|
image: cassandra:2.1
|
||||||
|
container_name: rfsim4g-db-init
|
||||||
|
depends_on: [cassandra]
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
max_attempts: 10
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
ipv4_address: 192.168.68.4
|
||||||
|
volumes:
|
||||||
|
- ../4g_rfsimulator_fdd_05MHz/oai_db.cql:/home/oai_db.cql
|
||||||
|
entrypoint: /bin/bash -c "cqlsh --file /home/oai_db.cql 192.168.68.2 && echo 'OK'"
|
||||||
|
|
||||||
|
oai_hss:
|
||||||
|
image: oai-hss:latest
|
||||||
|
container_name: rfsim4g-oai-hss
|
||||||
|
privileged: true
|
||||||
|
depends_on: [cassandra]
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
ipv4_address: 192.168.68.3
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.2
|
||||||
|
environment:
|
||||||
|
REALM: openairinterface.org
|
||||||
|
HSS_FQDN: hss.openairinterface.org
|
||||||
|
PREFIX: /openair-hss/etc
|
||||||
|
cassandra_Server_IP: 192.168.68.2
|
||||||
|
OP_KEY: 1006020f0a478bf6b699f15c062e42b3
|
||||||
|
LTE_K: fec86ba6eb707ed08905757b1bb44b8f
|
||||||
|
APN1: oai.ipv4
|
||||||
|
APN2: internet
|
||||||
|
FIRST_IMSI: 208960100000001
|
||||||
|
NB_USERS: 10
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_hss"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_mme:
|
||||||
|
image: oai-mme:latest
|
||||||
|
container_name: rfsim4g-oai-mme
|
||||||
|
privileged: true
|
||||||
|
depends_on: [oai_hss]
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.3
|
||||||
|
environment:
|
||||||
|
REALM: openairinterface.org
|
||||||
|
PREFIX: /openair-mme/etc
|
||||||
|
INSTANCE: 1
|
||||||
|
PID_DIRECTORY: /var/run
|
||||||
|
HSS_IP_ADDR: 192.168.61.2
|
||||||
|
HSS_HOSTNAME: hss
|
||||||
|
HSS_FQDN: hss.openairinterface.org
|
||||||
|
HSS_REALM: openairinterface.org
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MME_GID: 32768
|
||||||
|
MME_CODE: 3
|
||||||
|
TAC_0: 1
|
||||||
|
TAC_1: 2
|
||||||
|
TAC_2: 3
|
||||||
|
MME_FQDN: mme.openairinterface.org
|
||||||
|
MME_S6A_IP_ADDR: 192.168.61.3
|
||||||
|
MME_INTERFACE_NAME_FOR_S1_MME: eth0
|
||||||
|
MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3
|
||||||
|
MME_INTERFACE_NAME_FOR_S11: eth0
|
||||||
|
MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3
|
||||||
|
MME_INTERFACE_NAME_FOR_S10: lo
|
||||||
|
MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
|
||||||
|
OUTPUT: CONSOLE
|
||||||
|
SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4
|
||||||
|
PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
|
||||||
|
PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
|
||||||
|
MCC_SGW_0: '208'
|
||||||
|
MNC3_SGW_0: '096'
|
||||||
|
TAC_LB_SGW_0: '01'
|
||||||
|
TAC_HB_SGW_0: '00'
|
||||||
|
MCC_MME_0: '208'
|
||||||
|
MNC3_MME_0: '096'
|
||||||
|
TAC_LB_MME_0: '02'
|
||||||
|
TAC_HB_MME_0: '00'
|
||||||
|
MCC_MME_1: '208'
|
||||||
|
MNC3_MME_1: '096'
|
||||||
|
TAC_LB_MME_1: '03'
|
||||||
|
TAC_HB_MME_1: '00'
|
||||||
|
TAC_LB_SGW_TEST_0: '03'
|
||||||
|
TAC_HB_SGW_TEST_0: '00'
|
||||||
|
SGW_IPV4_ADDRESS_FOR_S11_TEST_0: 0.0.0.0
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_mme"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_spgwc:
|
||||||
|
image: oai-spgwc:latest
|
||||||
|
privileged: true
|
||||||
|
depends_on: [oai_mme]
|
||||||
|
container_name: rfsim4g-oai-spgwc
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.4
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
SGW_INTERFACE_NAME_FOR_S11: eth0
|
||||||
|
PGW_INTERFACE_NAME_FOR_SX: eth0
|
||||||
|
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
|
||||||
|
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||||
|
PUSH_PROTOCOL_OPTION: 'true'
|
||||||
|
APN_NI_1: oai.ipv4
|
||||||
|
APN_NI_2: oai.ipv4_2
|
||||||
|
DEFAULT_APN_NI_1: oai.ipv4
|
||||||
|
UE_IP_ADDRESS_POOL_1: '12.0.0.2 - 12.0.0.254'
|
||||||
|
UE_IP_ADDRESS_POOL_2: '12.1.1.2 - 12.1.1.254'
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MNC03: '096'
|
||||||
|
TAC: 1
|
||||||
|
GW_ID: 1
|
||||||
|
REALM: openairinterface.org
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_spgwc"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_spgwu:
|
||||||
|
image: oai-spgwu-tiny:latest
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-oai-spgwu-tiny
|
||||||
|
depends_on: [oai_spgwc]
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.5
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
PID_DIRECTORY: /var/run
|
||||||
|
INSTANCE: 1
|
||||||
|
SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP: eth0
|
||||||
|
PGW_INTERFACE_NAME_FOR_SGI: eth0
|
||||||
|
SGW_INTERFACE_NAME_FOR_SX: eth0
|
||||||
|
SPGWC0_IP_ADDRESS: 192.168.61.4
|
||||||
|
NETWORK_UE_IP: '12.0.0.0/24'
|
||||||
|
NETWORK_UE_NAT_OPTION: 'yes'
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MNC03: '096'
|
||||||
|
TAC: 1
|
||||||
|
GW_ID: 1
|
||||||
|
REALM: openairinterface.org
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_spgwu"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
trf_gen:
|
||||||
|
image: trf-gen:production
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-trf-gen
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.11
|
||||||
|
entrypoint: /bin/bash -c "ip route add 12.0.0.0/24 via 192.168.61.5 dev eth0; sleep infinity"
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "ping -c 2 192.168.61.5"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
enb:
|
||||||
|
image: oai-enb:develop
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-oai-enb
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.20
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
USE_TDD_MONO: 'yes'
|
||||||
|
RFSIMULATOR: enb
|
||||||
|
ENB_NAME: eNB-rf-sim
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
MNC_LENGTH: 2
|
||||||
|
TAC: 1
|
||||||
|
UTRA_BAND_ID: 38
|
||||||
|
DL_FREQUENCY_IN_MHZ: 2605
|
||||||
|
UL_FREQUENCY_OFFSET_IN_MHZ: 0
|
||||||
|
NID_CELL: 10
|
||||||
|
NB_PRB: 25
|
||||||
|
MME_S1C_IP_ADDRESS: 192.168.61.3
|
||||||
|
S1C_IF_NAME: eth0
|
||||||
|
F1_CU_IP_ADDRESS: 192.168.61.20
|
||||||
|
S1U_IF_NAME: eth0
|
||||||
|
F1_CU_IP_ADDRESS: 192.168.61.20
|
||||||
|
FLEXRAN_ENABLED: 'no'
|
||||||
|
FLEXRAN_INTERFACE_NAME: eth0
|
||||||
|
FLEXRAN_IPV4_ADDRESS: 192.168.61.10
|
||||||
|
USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep lte-softmodem"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_ue0:
|
||||||
|
image: oai-lte-ue:develop
|
||||||
|
privileged: true
|
||||||
|
container_name: rfsim4g-oai-lte-ue0
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.30
|
||||||
|
expose:
|
||||||
|
- "10000"
|
||||||
|
environment:
|
||||||
|
TZ: Europe/Paris
|
||||||
|
HOSTNAME: oai_ue0
|
||||||
|
RFSIMULATOR: 192.168.61.20
|
||||||
|
MCC: '208'
|
||||||
|
MNC: '96'
|
||||||
|
SHORT_IMSI: '0100000001'
|
||||||
|
LTE_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
|
||||||
|
OPC: 'c42449363bbad02b66d16bc975d77cc1'
|
||||||
|
MSISDN: '001011234561010'
|
||||||
|
HPLMN: 20896
|
||||||
|
USE_ADDITIONAL_OPTIONS: --rfsim -T -C 2605000000 -r 25 --ue-rxgain 140 --ue-txgain 120 --nokrnmod 1 --log_config.global_log_options level,nocolor,time
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep lte-uesoftmodem"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
name: rfsim4g-oai-private-net
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 192.168.68.0/26
|
||||||
|
driver_opts:
|
||||||
|
com.docker.network.bridge.name: "rfsim4g-private"
|
||||||
|
public_net:
|
||||||
|
name: rfsim4g-oai-public-net
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 192.168.61.0/26
|
||||||
|
driver_opts:
|
||||||
|
com.docker.network.bridge.name: "rfsim4g-public"
|
||||||
@@ -111,7 +111,6 @@ services:
|
|||||||
oai-smf:
|
oai-smf:
|
||||||
container_name: "rfsim5g-oai-smf"
|
container_name: "rfsim5g-oai-smf"
|
||||||
image: oai-smf:latest
|
image: oai-smf:latest
|
||||||
entrypoint: /bin/bash -c "/openair-smf/bin/oai_smf -c /openair-smf/bin/oai-smf.conf -o"
|
|
||||||
environment:
|
environment:
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
- INSTANCE=0
|
- INSTANCE=0
|
||||||
@@ -140,12 +139,13 @@ services:
|
|||||||
- REGISTER_NRF=yes
|
- REGISTER_NRF=yes
|
||||||
- DISCOVER_UPF=yes
|
- DISCOVER_UPF=yes
|
||||||
- USE_FQDN_DNS=yes
|
- USE_FQDN_DNS=yes
|
||||||
|
- DNN_NI0=oai
|
||||||
|
- DNN_NI2=oai.ipv4
|
||||||
depends_on:
|
depends_on:
|
||||||
- oai-nrf
|
- oai-nrf
|
||||||
- oai-amf
|
- oai-amf
|
||||||
volumes:
|
volumes:
|
||||||
- ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
|
- ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
|
||||||
- ./oai-smf.conf:/openair-smf/bin/oai-smf.conf
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
|
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
|
||||||
interval: 10s
|
interval: 10s
|
||||||
|
|||||||
@@ -1,133 +0,0 @@
|
|||||||
################################################################################
|
|
||||||
# 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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
SMF =
|
|
||||||
{
|
|
||||||
FQDN = "oai-smf-svc";
|
|
||||||
INSTANCE = 0; # 0 is the default
|
|
||||||
PID_DIRECTORY = "/var/run"; # /var/run is the default
|
|
||||||
|
|
||||||
INTERFACES :
|
|
||||||
{
|
|
||||||
N4 :
|
|
||||||
{
|
|
||||||
# SMF binded interface for N4 communication (UPF)
|
|
||||||
INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
|
|
||||||
IPV4_ADDRESS = "read";
|
|
||||||
};
|
|
||||||
|
|
||||||
SBI :
|
|
||||||
{
|
|
||||||
# SMF binded interface for SBI interface (e.g., communication with AMF, UDM)
|
|
||||||
INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
|
|
||||||
IPV4_ADDRESS = "read";
|
|
||||||
PORT = 80; # YOUR NETWORK CONFIG HERE (default: 80)
|
|
||||||
HTTP2_PORT = 9090; # YOUR NETWORK CONFIG HERE
|
|
||||||
API_VERSION = "v1"; # YOUR SMF API VERSION CONFIG HERE
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
# Pool of UE assigned IP addresses
|
|
||||||
# Do not make IP pools overlap
|
|
||||||
# first IPv4 address X.Y.Z.1 is reserved for GTP network device on UPF
|
|
||||||
IP_ADDRESS_POOL :
|
|
||||||
{
|
|
||||||
IPV4_LIST = (
|
|
||||||
{RANGE = "12.1.1.2 - 12.1.1.128";}, # STRING, IPv4 RANGE IP_start - IP_end, YOUR NETWORK CONFIG HERE.
|
|
||||||
{RANGE = "12.1.1.129 - 12.1.1.224";}, # STRING, IPv4 RANGE IP_start - IP_end, YOUR NETWORK CONFIG HERE.
|
|
||||||
{RANGE = "10.10.10.2 - 10.10.10.253";} # STRING, IPv4 RANGE IP_start - IP_end, YOUR NETWORK CONFIG HERE.
|
|
||||||
|
|
||||||
);
|
|
||||||
IPV6_LIST = (
|
|
||||||
{PREFIX = "2001:1:2::/64";}, # STRING, IPv6 prefix, YOUR NETWORK CONFIG HERE.
|
|
||||||
{PREFIX = "3001:1:2::/64";}, # STRING, IPv6 prefix, YOUR NETWORK CONFIG HERE.
|
|
||||||
{PREFIX = "4001:1:2::/64";} # STRING, IPv6 prefix, YOUR NETWORK CONFIG HERE.
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
DNN_LIST = (
|
|
||||||
# IPV4_POOL, IPV6_POOL are index in IPV4_LIST, IPV6_LIST, PDU_SESSION_TYPE choice in {IPv4, IPv6, IPv4v6}
|
|
||||||
{DNN_NI = "default"; PDU_SESSION_TYPE = "IPv4"; IPV4_POOL = 2; IPV6_POOL = -1},
|
|
||||||
{DNN_NI = "carrier.com"; PDU_SESSION_TYPE = "IPv4"; IPV4_POOL = 1; IPV6_POOL = -1},
|
|
||||||
{DNN_NI = "oai"; PDU_SESSION_TYPE = "IPv4"; IPV4_POOL = 0; IPV6_POOL = -1}
|
|
||||||
);
|
|
||||||
|
|
||||||
# DNS address communicated to UEs
|
|
||||||
DEFAULT_DNS_IPV4_ADDRESS = "192.168.18.129"; # YOUR DNS CONFIG HERE
|
|
||||||
DEFAULT_DNS_SEC_IPV4_ADDRESS = "192.168.18.129"; # YOUR DNS CONFIG HERE
|
|
||||||
DEFAULT_DNS_IPV6_ADDRESS = "2001:4860:4860::8888"; # YOUR DNS CONFIG HERE
|
|
||||||
DEFAULT_DNS_SEC_IPV6_ADDRESS = "2001:4860:4860::8844"; # YOUR DNS CONFIG HERE
|
|
||||||
|
|
||||||
SUPPORT_FEATURES:
|
|
||||||
{
|
|
||||||
# STRING, {"yes", "no"},
|
|
||||||
REGISTER_NRF = "yes"; # Set to yes if SMF resgisters to an NRF
|
|
||||||
DISCOVER_UPF = "yes"; # Set to yes to enable UPF discovery and selection
|
|
||||||
FORCE_PUSH_PROTOCOL_CONFIGURATION_OPTIONS = "no"; # Non standard feature, normally should be set to "no",
|
|
||||||
# but you may need to set to yes for UE that do not explicitly request a PDN address through NAS signalling
|
|
||||||
USE_LOCAL_SUBSCRIPTION_INFO = "yes"; # Set to yes if SMF uses local subscription information instead of from an UDM
|
|
||||||
USE_FQDN_DNS = "yes"; # Set to yes if AMF/UDM/NRF/UPF will relying on a DNS to resolve FQDN
|
|
||||||
}
|
|
||||||
|
|
||||||
AMF :
|
|
||||||
{
|
|
||||||
IPV4_ADDRESS = "0.0.0.0"; # YOUR AMF CONFIG HERE
|
|
||||||
PORT = 80; # YOUR AMF CONFIG HERE (default: 80)
|
|
||||||
API_VERSION = "v1"; # YOUR AMF API VERSION FOR SBI CONFIG HERE
|
|
||||||
FQDN = "oai-amf" # YOUR AMF FQDN CONFIG HERE
|
|
||||||
};
|
|
||||||
|
|
||||||
UDM :
|
|
||||||
{
|
|
||||||
IPV4_ADDRESS = "127.0.0.1"; # YOUR UDM CONFIG HERE
|
|
||||||
PORT = 80; # YOUR UDM CONFIG HERE (default: 80)
|
|
||||||
API_VERSION = "v1"; # YOUR UDM API VERSION FOR SBI CONFIG HERE
|
|
||||||
FQDN = "localhost" # YOUR UDM FQDN CONFIG HERE
|
|
||||||
};
|
|
||||||
|
|
||||||
NRF :
|
|
||||||
{
|
|
||||||
IPV4_ADDRESS = "192.168.71.130"; # YOUR NRF CONFIG HERE
|
|
||||||
PORT = 80; # YOUR NRF CONFIG HERE (default: 80)
|
|
||||||
API_VERSION = "v1"; # YOUR NRF API VERSION FOR SBI CONFIG HERE
|
|
||||||
FQDN = "oai-nrf" # YOUR NRF FQDN CONFIG HERE
|
|
||||||
};
|
|
||||||
|
|
||||||
UPF_LIST = (
|
|
||||||
{IPV4_ADDRESS = "192.168.71.134" ; FQDN = "oai-spgwu"} # YOUR UPF CONFIG HERE
|
|
||||||
);
|
|
||||||
|
|
||||||
LOCAL_CONFIGURATION :
|
|
||||||
{
|
|
||||||
SESSION_MANAGEMENT_SUBSCRIPTION_LIST = (
|
|
||||||
{ NSSAI_SST = 222, NSSAI_SD = "123", DNN = "default", DEFAULT_SESSION_TYPE = "IPV4", DEFAULT_SSC_MODE = 1,
|
|
||||||
QOS_PROFILE_5QI = 7, QOS_PROFILE_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PREEMPTCAP = "NOT_PREEMPT",
|
|
||||||
QOS_PROFILE_ARP_PREEMPTVULN = "NOT_PREEMPTABLE", SESSION_AMBR_UL = "20Mbps", SESSION_AMBR_DL = "22Mbps"},
|
|
||||||
{ NSSAI_SST = 1; NSSAI_SD = "1", DNN = "oai", DEFAULT_SESSION_TYPE = "IPV4", DEFAULT_SSC_MODE = 1,
|
|
||||||
QOS_PROFILE_5QI = 6, QOS_PROFILE_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PREEMPTCAP = "NOT_PREEMPT",
|
|
||||||
QOS_PROFILE_ARP_PREEMPTVULN = "NOT_PREEMPTABLE", SESSION_AMBR_UL = "20Mbps", SESSION_AMBR_DL = "22Mbps"}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
This page is only valid for an `Ubuntu18` host.
|
This page is only valid for an `Ubuntu18` host.
|
||||||
|
|
||||||
**NOTE: this version (2021-10-05) is valid for the `v1.1.0` and `v1.2.0` versions of the `OAI 5G CN`.**
|
**NOTE: this version (2022-01-27) has been updated for the `v1.3.0` version of the `OAI 5G CN`.**
|
||||||
|
|
||||||
**TABLE OF CONTENTS**
|
**TABLE OF CONTENTS**
|
||||||
|
|
||||||
@@ -76,9 +76,9 @@ $ docker image tag rdefosseoai/oai-nr-ue:develop oai-nr-ue:develop
|
|||||||
$ docker logout
|
$ docker logout
|
||||||
```
|
```
|
||||||
|
|
||||||
**CAUTION: 2021/10/05 with the release `v1.2.0` of the `CN5G`, the previous version was not compatible any-more.**
|
**CAUTION: 2022/01/27 with the release `v1.3.0` of the `CN5G`, the previous version was not compatible any-more.**
|
||||||
|
|
||||||
**This new version is working for both the `v1.1.0` and `v1.2.0` of the `CN5G`.**
|
**This new version is working only with the `v1.3.0` of the `CN5G`.**
|
||||||
|
|
||||||
# 2. Deploy containers #
|
# 2. Deploy containers #
|
||||||
|
|
||||||
|
|||||||
@@ -111,7 +111,6 @@ services:
|
|||||||
oai-smf:
|
oai-smf:
|
||||||
container_name: "rfsim5g-oai-smf"
|
container_name: "rfsim5g-oai-smf"
|
||||||
image: oai-smf:latest
|
image: oai-smf:latest
|
||||||
entrypoint: /bin/bash -c "/openair-smf/bin/oai_smf -c /openair-smf/bin/oai-smf.conf -o"
|
|
||||||
environment:
|
environment:
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
- INSTANCE=0
|
- INSTANCE=0
|
||||||
@@ -140,12 +139,13 @@ services:
|
|||||||
- REGISTER_NRF=yes
|
- REGISTER_NRF=yes
|
||||||
- DISCOVER_UPF=yes
|
- DISCOVER_UPF=yes
|
||||||
- USE_FQDN_DNS=yes
|
- USE_FQDN_DNS=yes
|
||||||
|
- DNN_NI0=oai
|
||||||
|
- DNN_NI2=oai.ipv4
|
||||||
depends_on:
|
depends_on:
|
||||||
- oai-nrf
|
- oai-nrf
|
||||||
- oai-amf
|
- oai-amf
|
||||||
volumes:
|
volumes:
|
||||||
- ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
|
- ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
|
||||||
- ./oai-smf.conf:/openair-smf/bin/oai-smf.conf
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
|
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
|
||||||
interval: 10s
|
interval: 10s
|
||||||
|
|||||||
@@ -1,133 +0,0 @@
|
|||||||
################################################################################
|
|
||||||
# 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
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
SMF =
|
|
||||||
{
|
|
||||||
FQDN = "oai-smf-svc";
|
|
||||||
INSTANCE = 0; # 0 is the default
|
|
||||||
PID_DIRECTORY = "/var/run"; # /var/run is the default
|
|
||||||
|
|
||||||
INTERFACES :
|
|
||||||
{
|
|
||||||
N4 :
|
|
||||||
{
|
|
||||||
# SMF binded interface for N4 communication (UPF)
|
|
||||||
INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
|
|
||||||
IPV4_ADDRESS = "read";
|
|
||||||
};
|
|
||||||
|
|
||||||
SBI :
|
|
||||||
{
|
|
||||||
# SMF binded interface for SBI interface (e.g., communication with AMF, UDM)
|
|
||||||
INTERFACE_NAME = "eth0"; # YOUR NETWORK CONFIG HERE
|
|
||||||
IPV4_ADDRESS = "read";
|
|
||||||
PORT = 80; # YOUR NETWORK CONFIG HERE (default: 80)
|
|
||||||
HTTP2_PORT = 9090; # YOUR NETWORK CONFIG HERE
|
|
||||||
API_VERSION = "v1"; # YOUR SMF API VERSION CONFIG HERE
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
# Pool of UE assigned IP addresses
|
|
||||||
# Do not make IP pools overlap
|
|
||||||
# first IPv4 address X.Y.Z.1 is reserved for GTP network device on UPF
|
|
||||||
IP_ADDRESS_POOL :
|
|
||||||
{
|
|
||||||
IPV4_LIST = (
|
|
||||||
{RANGE = "12.1.1.2 - 12.1.1.128";}, # STRING, IPv4 RANGE IP_start - IP_end, YOUR NETWORK CONFIG HERE.
|
|
||||||
{RANGE = "12.1.1.129 - 12.1.1.224";}, # STRING, IPv4 RANGE IP_start - IP_end, YOUR NETWORK CONFIG HERE.
|
|
||||||
{RANGE = "10.10.10.2 - 10.10.10.253";} # STRING, IPv4 RANGE IP_start - IP_end, YOUR NETWORK CONFIG HERE.
|
|
||||||
|
|
||||||
);
|
|
||||||
IPV6_LIST = (
|
|
||||||
{PREFIX = "2001:1:2::/64";}, # STRING, IPv6 prefix, YOUR NETWORK CONFIG HERE.
|
|
||||||
{PREFIX = "3001:1:2::/64";}, # STRING, IPv6 prefix, YOUR NETWORK CONFIG HERE.
|
|
||||||
{PREFIX = "4001:1:2::/64";} # STRING, IPv6 prefix, YOUR NETWORK CONFIG HERE.
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
DNN_LIST = (
|
|
||||||
# IPV4_POOL, IPV6_POOL are index in IPV4_LIST, IPV6_LIST, PDU_SESSION_TYPE choice in {IPv4, IPv6, IPv4v6}
|
|
||||||
{DNN_NI = "default"; PDU_SESSION_TYPE = "IPv4"; IPV4_POOL = 2; IPV6_POOL = -1},
|
|
||||||
{DNN_NI = "carrier.com"; PDU_SESSION_TYPE = "IPv4"; IPV4_POOL = 1; IPV6_POOL = -1},
|
|
||||||
{DNN_NI = "oai"; PDU_SESSION_TYPE = "IPv4"; IPV4_POOL = 0; IPV6_POOL = -1}
|
|
||||||
);
|
|
||||||
|
|
||||||
# DNS address communicated to UEs
|
|
||||||
DEFAULT_DNS_IPV4_ADDRESS = "192.168.18.129"; # YOUR DNS CONFIG HERE
|
|
||||||
DEFAULT_DNS_SEC_IPV4_ADDRESS = "192.168.18.129"; # YOUR DNS CONFIG HERE
|
|
||||||
DEFAULT_DNS_IPV6_ADDRESS = "2001:4860:4860::8888"; # YOUR DNS CONFIG HERE
|
|
||||||
DEFAULT_DNS_SEC_IPV6_ADDRESS = "2001:4860:4860::8844"; # YOUR DNS CONFIG HERE
|
|
||||||
|
|
||||||
SUPPORT_FEATURES:
|
|
||||||
{
|
|
||||||
# STRING, {"yes", "no"},
|
|
||||||
REGISTER_NRF = "yes"; # Set to yes if SMF resgisters to an NRF
|
|
||||||
DISCOVER_UPF = "yes"; # Set to yes to enable UPF discovery and selection
|
|
||||||
FORCE_PUSH_PROTOCOL_CONFIGURATION_OPTIONS = "no"; # Non standard feature, normally should be set to "no",
|
|
||||||
# but you may need to set to yes for UE that do not explicitly request a PDN address through NAS signalling
|
|
||||||
USE_LOCAL_SUBSCRIPTION_INFO = "yes"; # Set to yes if SMF uses local subscription information instead of from an UDM
|
|
||||||
USE_FQDN_DNS = "yes"; # Set to yes if AMF/UDM/NRF/UPF will relying on a DNS to resolve FQDN
|
|
||||||
}
|
|
||||||
|
|
||||||
AMF :
|
|
||||||
{
|
|
||||||
IPV4_ADDRESS = "0.0.0.0"; # YOUR AMF CONFIG HERE
|
|
||||||
PORT = 80; # YOUR AMF CONFIG HERE (default: 80)
|
|
||||||
API_VERSION = "v1"; # YOUR AMF API VERSION FOR SBI CONFIG HERE
|
|
||||||
FQDN = "oai-amf" # YOUR AMF FQDN CONFIG HERE
|
|
||||||
};
|
|
||||||
|
|
||||||
UDM :
|
|
||||||
{
|
|
||||||
IPV4_ADDRESS = "127.0.0.1"; # YOUR UDM CONFIG HERE
|
|
||||||
PORT = 80; # YOUR UDM CONFIG HERE (default: 80)
|
|
||||||
API_VERSION = "v1"; # YOUR UDM API VERSION FOR SBI CONFIG HERE
|
|
||||||
FQDN = "localhost" # YOUR UDM FQDN CONFIG HERE
|
|
||||||
};
|
|
||||||
|
|
||||||
NRF :
|
|
||||||
{
|
|
||||||
IPV4_ADDRESS = "192.168.71.130"; # YOUR NRF CONFIG HERE
|
|
||||||
PORT = 80; # YOUR NRF CONFIG HERE (default: 80)
|
|
||||||
API_VERSION = "v1"; # YOUR NRF API VERSION FOR SBI CONFIG HERE
|
|
||||||
FQDN = "oai-nrf" # YOUR NRF FQDN CONFIG HERE
|
|
||||||
};
|
|
||||||
|
|
||||||
UPF_LIST = (
|
|
||||||
{IPV4_ADDRESS = "192.168.71.134" ; FQDN = "oai-spgwu"} # YOUR UPF CONFIG HERE
|
|
||||||
);
|
|
||||||
|
|
||||||
LOCAL_CONFIGURATION :
|
|
||||||
{
|
|
||||||
SESSION_MANAGEMENT_SUBSCRIPTION_LIST = (
|
|
||||||
{ NSSAI_SST = 222, NSSAI_SD = "123", DNN = "default", DEFAULT_SESSION_TYPE = "IPV4", DEFAULT_SSC_MODE = 1,
|
|
||||||
QOS_PROFILE_5QI = 7, QOS_PROFILE_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PREEMPTCAP = "NOT_PREEMPT",
|
|
||||||
QOS_PROFILE_ARP_PREEMPTVULN = "NOT_PREEMPTABLE", SESSION_AMBR_UL = "20Mbps", SESSION_AMBR_DL = "22Mbps"},
|
|
||||||
{ NSSAI_SST = 1; NSSAI_SD = "1", DNN = "oai", DEFAULT_SESSION_TYPE = "IPV4", DEFAULT_SSC_MODE = 1,
|
|
||||||
QOS_PROFILE_5QI = 6, QOS_PROFILE_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PRIORITY_LEVEL = 1, QOS_PROFILE_ARP_PREEMPTCAP = "NOT_PREEMPT",
|
|
||||||
QOS_PROFILE_ARP_PREEMPTVULN = "NOT_PREEMPTABLE", SESSION_AMBR_UL = "20Mbps", SESSION_AMBR_DL = "22Mbps"}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
#/*
|
#/*
|
||||||
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
# * contributor license agreements. See the NOTICE file distributed with
|
# * contributor license agreements. See the NOTICE file distributed with
|
||||||
# * this work for additional information regarding copyright ownership.
|
# * this work for additional information regarding copyright ownership.
|
||||||
@@ -343,8 +343,8 @@ set(CMAKE_CXX_FLAGS
|
|||||||
|
|
||||||
|
|
||||||
if (SANITIZE_ADDRESS)
|
if (SANITIZE_ADDRESS)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-common")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan -fno-common")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-common")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan -fno-common")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
add_definitions("-DASN_DISABLE_OER_SUPPORT")
|
add_definitions("-DASN_DISABLE_OER_SUPPORT")
|
||||||
@@ -1710,6 +1710,9 @@ set(PHY_SRC_UE
|
|||||||
|
|
||||||
set(PHY_NR_SRC_COMMON
|
set(PHY_NR_SRC_COMMON
|
||||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_prach_common.c
|
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_prach_common.c
|
||||||
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c
|
||||||
|
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_scrambling.c
|
||||||
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/scrambling_luts.c
|
||||||
)
|
)
|
||||||
|
|
||||||
set(PHY_NR_SRC
|
set(PHY_NR_SRC
|
||||||
@@ -1735,7 +1738,6 @@ set(PHY_SRC_UE
|
|||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_dmrs_rx.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_dmrs_rx.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_csi_rs.c
|
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_csi_rs.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gold.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gold.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/scrambling_luts.c
|
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gen_mod_table.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gen_mod_table.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/dmrs_nr.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/dmrs_nr.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/ptrs_nr.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/ptrs_nr.c
|
||||||
@@ -1758,6 +1760,7 @@ set(PHY_SRC_UE
|
|||||||
${PHY_SMALLBLOCKSRC}
|
${PHY_SMALLBLOCKSRC}
|
||||||
${PHY_NR_CODINGIF}
|
${PHY_NR_CODINGIF}
|
||||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/pucch_rx.c
|
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/pucch_rx.c
|
||||||
|
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/srs_rx.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_uci_tools_common.c
|
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_uci_tools_common.c
|
||||||
)
|
)
|
||||||
set(PHY_NR_UE_SRC
|
set(PHY_NR_UE_SRC
|
||||||
@@ -1779,7 +1782,6 @@ set(PHY_SRC_UE
|
|||||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_sch_dmrs.c
|
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_sch_dmrs.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_prach.c
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_prach.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c
|
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/dci_nr.c
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/dci_nr.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/dci_tools_nr.c
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/dci_tools_nr.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/pucch_nr.c
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/pucch_nr.c
|
||||||
@@ -2074,6 +2076,7 @@ set (MAC_NR_SRC
|
|||||||
${NR_GNB_MAC_DIR}/gNB_scheduler_primitives.c
|
${NR_GNB_MAC_DIR}/gNB_scheduler_primitives.c
|
||||||
${NR_GNB_MAC_DIR}/gNB_scheduler_phytest.c
|
${NR_GNB_MAC_DIR}/gNB_scheduler_phytest.c
|
||||||
${NR_GNB_MAC_DIR}/gNB_scheduler_uci.c
|
${NR_GNB_MAC_DIR}/gNB_scheduler_uci.c
|
||||||
|
${NR_GNB_MAC_DIR}/gNB_scheduler_srs.c
|
||||||
${NR_GNB_MAC_DIR}/gNB_scheduler_RA.c
|
${NR_GNB_MAC_DIR}/gNB_scheduler_RA.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+86
-85
@@ -57,7 +57,7 @@ BUILD_DOXYGEN=0
|
|||||||
BUILD_COVERITY_SCAN=0
|
BUILD_COVERITY_SCAN=0
|
||||||
T_TRACER="True"
|
T_TRACER="True"
|
||||||
DISABLE_HARDWARE_DEPENDENCY="False"
|
DISABLE_HARDWARE_DEPENDENCY="False"
|
||||||
CMAKE_BUILD_TYPE=""
|
CMAKE_BUILD_TYPE="RelWithDebInfo"
|
||||||
CMAKE_CMD="$CMAKE"
|
CMAKE_CMD="$CMAKE"
|
||||||
UE_AUTOTEST_TRACE="False"
|
UE_AUTOTEST_TRACE="False"
|
||||||
UE_DEBUG_TRACE="False"
|
UE_DEBUG_TRACE="False"
|
||||||
@@ -99,25 +99,23 @@ Options
|
|||||||
Makes the LTE softmodem
|
Makes the LTE softmodem
|
||||||
--eNBocp
|
--eNBocp
|
||||||
Makes the OCP LTE softmodem
|
Makes the OCP LTE softmodem
|
||||||
-gNB
|
--gNB
|
||||||
Makes the NR softmodem
|
Makes the NR softmodem
|
||||||
--nrUE
|
|
||||||
Makes the NR UE softmodem
|
|
||||||
--RU
|
--RU
|
||||||
Makes the OAI RRU
|
Makes the OAI RRU
|
||||||
--UE
|
--UE
|
||||||
Makes the UE specific parts (ue_ip, usim, nvram) from the given configuration file
|
Makes the UE specific parts (ue_ip, usim, nvram) from the given configuration file
|
||||||
|
--nrUE
|
||||||
|
Makes the NR UE softmodem
|
||||||
--UE-conf-nvram [configuration file]
|
--UE-conf-nvram [configuration file]
|
||||||
Specify conf_nvram_path (default \"$conf_nvram_path\")
|
Specify conf_nvram_path (default \"$conf_nvram_path\")
|
||||||
--UE-gen-nvram [output path]
|
--UE-gen-nvram [output path]
|
||||||
Specify gen_nvram_path (default \"$gen_nvram_path\")
|
Specify gen_nvram_path (default \"$gen_nvram_path\")
|
||||||
--HWLAT
|
|
||||||
Makes test program for haw latency tests
|
|
||||||
-a | --agent
|
|
||||||
Enables agent for software-defined control of the eNB
|
|
||||||
-w | --hardware
|
-w | --hardware
|
||||||
EXMIMO, USRP, BLADERF, LMSSDR, IRIS, ADRV9371_ZC706, SIMU, AW2SORI, None (Default)
|
EXMIMO, USRP, BLADERF, LMSSDR, IRIS, ADRV9371_ZC706, SIMU, AW2SORI, None (Default)
|
||||||
Adds this RF board support (in external packages installation and in compilation)
|
Adds this RF board support (in external packages installation and in compilation)
|
||||||
|
-t | --transport
|
||||||
|
Selects the transport protocol type, options: None, Ethernet, benetel4g, benetel5g
|
||||||
-P | --phy_simulators
|
-P | --phy_simulators
|
||||||
Makes the unitary tests Layer 1 simulators
|
Makes the unitary tests Layer 1 simulators
|
||||||
-S | --core_simulators
|
-S | --core_simulators
|
||||||
@@ -128,6 +126,14 @@ Options
|
|||||||
runs only specified test cases specified here. This flag is only valid with -s
|
runs only specified test cases specified here. This flag is only valid with -s
|
||||||
-V | --vcd
|
-V | --vcd
|
||||||
Adds a debgging facility to the binary files: GUI with major internal synchronization events
|
Adds a debgging facility to the binary files: GUI with major internal synchronization events
|
||||||
|
-x | --xforms
|
||||||
|
Will compile with software oscilloscope features
|
||||||
|
--HWLAT
|
||||||
|
Makes test program for haw latency tests
|
||||||
|
--HWLAT_TEST
|
||||||
|
Compiles a hw latency test program
|
||||||
|
--verbose-ci
|
||||||
|
Compile with verbose instructions in CI Docker env
|
||||||
--verbose-compile
|
--verbose-compile
|
||||||
Shows detailed compilation instructions in makefile
|
Shows detailed compilation instructions in makefile
|
||||||
--cflags_processor
|
--cflags_processor
|
||||||
@@ -163,6 +169,10 @@ Options
|
|||||||
Build for I/Q record-playback modes
|
Build for I/Q record-playback modes
|
||||||
-k | --skip-shared-libraries
|
-k | --skip-shared-libraries
|
||||||
Skip build for shared libraries to reduce compilation time when building frequently for debugging purposes
|
Skip build for shared libraries to reduce compilation time when building frequently for debugging purposes
|
||||||
|
--ninja
|
||||||
|
Tell cmake to use the Ninja build system. Without, will generate make files
|
||||||
|
--sanitize-address | -fsanitize=address
|
||||||
|
Enable the address sanitizer on all targets
|
||||||
--ittiSIM
|
--ittiSIM
|
||||||
Makes the itti simulator
|
Makes the itti simulator
|
||||||
-h | --help
|
-h | --help
|
||||||
@@ -575,15 +585,12 @@ function main() {
|
|||||||
echo_info "3. building the compilation directives ..."
|
echo_info "3. building the compilation directives ..."
|
||||||
|
|
||||||
DIR=$OPENAIR_DIR/cmake_targets
|
DIR=$OPENAIR_DIR/cmake_targets
|
||||||
if [ "$SIMUS_PHY" = "1" -o "$SIMUS_CORE" = "1" ] ; then
|
if [ "$T_TRACER" = "False" ] ; then
|
||||||
build_dir=phy_simulators
|
|
||||||
else
|
|
||||||
if [ "$T_TRACER" = "False" ] ; then
|
|
||||||
build_dir=ran_build_noLOG
|
build_dir=ran_build_noLOG
|
||||||
else
|
else
|
||||||
build_dir=ran_build
|
build_dir=ran_build
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ "$CLEAN" = "1" ] && rm -rf $DIR/$build_dir/build
|
[ "$CLEAN" = "1" ] && rm -rf $DIR/$build_dir/build
|
||||||
mkdir -p $DIR/$build_dir/build
|
mkdir -p $DIR/$build_dir/build
|
||||||
|
|
||||||
@@ -591,84 +598,81 @@ function main() {
|
|||||||
config_libconfig_shlib=params_libconfig
|
config_libconfig_shlib=params_libconfig
|
||||||
|
|
||||||
# first generate the CMakefile in the right directory
|
# first generate the CMakefile in the right directory
|
||||||
if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$RU" = "1" -o "$nrUE" = "1" -o "$HW" = "EXMIMO" -o "$ittiSIM" = "1" -o "$rfsimNas" = "1" ] ; then
|
# softmodem compilation
|
||||||
|
|
||||||
|
cmake_file=$DIR/$build_dir/CMakeLists.txt
|
||||||
|
echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
|
||||||
|
echo "project (OpenAirInterface)" >> $cmake_file
|
||||||
|
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
|
||||||
|
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
|
||||||
|
echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
|
||||||
|
# echo "set ( PHY_TX_THREAD $UE_EXPANSION )" >> $cmake_file
|
||||||
|
echo "set ( PRE_SCD_THREAD $UE_EXPANSION )" >> $cmake_file
|
||||||
|
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
|
||||||
|
echo "set ( RF_BOARD \"${HW}\")" >> $cmake_file
|
||||||
|
echo "set ( TRANSP_PRO \"${TP}\")" >> $cmake_file
|
||||||
|
echo "set ( PACKAGE_NAME \"${exec}\")" >> $cmake_file
|
||||||
|
echo "set ( DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >> $cmake_file
|
||||||
|
echo "set ( CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >> $cmake_file
|
||||||
|
echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
|
||||||
|
echo "set ( UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE )" >> $cmake_file
|
||||||
|
echo "set ( UE_DEBUG_TRACE $UE_DEBUG_TRACE )" >> $cmake_file
|
||||||
|
echo "set ( UE_TIMING_TRACE $UE_TIMING_TRACE )" >> $cmake_file
|
||||||
|
echo "set ( USRP_REC_PLAY $USRP_REC_PLAY )" >> $cmake_file
|
||||||
|
echo "set ( SKIP_SHARED_LIB_FLAG $SKIP_SHARED_LIB_FLAG )" >> $cmake_file
|
||||||
|
echo "set ( ITTI_SIM $ITTI_SIM )" >> $cmake_file
|
||||||
|
echo "set ( SANITIZE_ADDRESS $SANITIZE_ADDRESS )" >> $cmake_file
|
||||||
|
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
|
||||||
|
cd $DIR/$build_dir/build
|
||||||
|
eval $CMAKE_CMD
|
||||||
|
|
||||||
# softmodem compilation
|
execlist=""
|
||||||
|
if [ "$eNB" = "1" ] ; then
|
||||||
cmake_file=$DIR/$build_dir/CMakeLists.txt
|
|
||||||
echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file
|
|
||||||
echo "project (OpenAirInterface)" >> $cmake_file
|
|
||||||
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
|
|
||||||
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
|
|
||||||
echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
|
|
||||||
# echo "set ( PHY_TX_THREAD $UE_EXPANSION )" >> $cmake_file
|
|
||||||
echo "set ( PRE_SCD_THREAD $UE_EXPANSION )" >> $cmake_file
|
|
||||||
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
|
|
||||||
echo "set ( RF_BOARD \"${HW}\")" >> $cmake_file
|
|
||||||
echo "set ( TRANSP_PRO \"${TP}\")" >> $cmake_file
|
|
||||||
echo "set ( PACKAGE_NAME \"${exec}\")" >> $cmake_file
|
|
||||||
echo "set ( DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >> $cmake_file
|
|
||||||
echo "set ( CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >> $cmake_file
|
|
||||||
echo "set ( T_TRACER $T_TRACER )" >> $cmake_file
|
|
||||||
echo "set ( UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE )" >> $cmake_file
|
|
||||||
echo "set ( UE_DEBUG_TRACE $UE_DEBUG_TRACE )" >> $cmake_file
|
|
||||||
echo "set ( UE_TIMING_TRACE $UE_TIMING_TRACE )" >> $cmake_file
|
|
||||||
echo "set ( USRP_REC_PLAY $USRP_REC_PLAY )" >> $cmake_file
|
|
||||||
echo "set ( SKIP_SHARED_LIB_FLAG $SKIP_SHARED_LIB_FLAG )" >> $cmake_file
|
|
||||||
echo "set ( ITTI_SIM $ITTI_SIM )" >> $cmake_file
|
|
||||||
echo "set ( SANITIZE_ADDRESS $SANITIZE_ADDRESS )" >> $cmake_file
|
|
||||||
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
|
|
||||||
cd $DIR/$build_dir/build
|
|
||||||
eval $CMAKE_CMD
|
|
||||||
|
|
||||||
execlist=""
|
|
||||||
if [ "$eNB" = "1" ] ; then
|
|
||||||
execlist="$execlist lte-softmodem"
|
execlist="$execlist lte-softmodem"
|
||||||
fi
|
fi
|
||||||
if [ "$eNBocp" = "1" ] ; then
|
if [ "$eNBocp" = "1" ] ; then
|
||||||
execlist="$execlist ocp-enb"
|
execlist="$execlist ocp-enb"
|
||||||
fi
|
fi
|
||||||
if [ "$gNB" = "1" ] ; then
|
if [ "$gNB" = "1" ] ; then
|
||||||
execlist="$execlist nr-softmodem"
|
execlist="$execlist nr-softmodem"
|
||||||
fi
|
fi
|
||||||
if [ "$RU" = "1" ] ; then
|
if [ "$RU" = "1" ] ; then
|
||||||
execlist="$execlist oairu"
|
execlist="$execlist oairu"
|
||||||
fi
|
fi
|
||||||
if [ "$UE" = 1 ] ; then
|
if [ "$UE" = 1 ] ; then
|
||||||
execlist="$execlist lte-uesoftmodem"
|
execlist="$execlist lte-uesoftmodem"
|
||||||
fi
|
fi
|
||||||
if [ "$nrUE" = 1 ] ; then
|
if [ "$nrUE" = 1 ] ; then
|
||||||
execlist="$execlist nr-uesoftmodem"
|
execlist="$execlist nr-uesoftmodem"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$ittiSIM" = "1" ] ; then
|
if [ "$ittiSIM" = "1" ] ; then
|
||||||
execlist="$execlist nr-ittisim"
|
execlist="$execlist nr-ittisim"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for f in $execlist ; do
|
for f in $execlist ; do
|
||||||
echo_info "Compiling $f..."
|
echo_info "Compiling $f..."
|
||||||
compilations \
|
compilations \
|
||||||
$build_dir $f \
|
$build_dir $f \
|
||||||
$f $dbin/$f.$REL
|
$f $dbin/$f.$REL
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
# mandatory shared libraries common to UE and (e/g)NB
|
# mandatory shared libraries common to UE and (e/g)NB
|
||||||
|
|
||||||
if [ "$SKIP_SHARED_LIB_FLAG" = "False" ]; then
|
if [ "$SKIP_SHARED_LIB_FLAG" = "False" ]; then
|
||||||
echo_info "Building shared libraries common to UE and gNB"
|
echo_info "Building shared libraries common to UE and gNB"
|
||||||
|
|
||||||
|
compilations \
|
||||||
|
$build_dir $config_libconfig_shlib \
|
||||||
|
lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
|
||||||
|
|
||||||
compilations \
|
compilations \
|
||||||
$build_dir $config_libconfig_shlib \
|
|
||||||
lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
|
|
||||||
|
|
||||||
compilations \
|
|
||||||
$build_dir coding \
|
$build_dir coding \
|
||||||
libcoding.so $dbin/libcoding.so
|
libcoding.so $dbin/libcoding.so
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$UE" = 1 ] ; then
|
if [ "$UE" = 1 ] ; then
|
||||||
|
|
||||||
echo_info "Compiling UE specific part"
|
echo_info "Compiling UE specific part"
|
||||||
@@ -717,11 +721,8 @@ function main() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$SIMUS_PHY" = "1" -o "$SIMUS_CORE" = "1" ] ; then
|
cd $DIR/$build_dir/build
|
||||||
cd $DIR/$build_dir/build
|
|
||||||
eval $CMAKE_CMD
|
|
||||||
fi
|
|
||||||
|
|
||||||
##################
|
##################
|
||||||
# PHY simulators #
|
# PHY simulators #
|
||||||
##################
|
##################
|
||||||
@@ -732,11 +733,11 @@ function main() {
|
|||||||
# simlist="ldpctest"
|
# simlist="ldpctest"
|
||||||
for f in $simlist ; do
|
for f in $simlist ; do
|
||||||
compilations \
|
compilations \
|
||||||
phy_simulators $f \
|
ran_build $f \
|
||||||
$f $dbin/$f.$REL
|
$f $dbin/$f.$REL
|
||||||
done
|
done
|
||||||
compilations \
|
compilations \
|
||||||
phy_simulators coding \
|
ran_build coding \
|
||||||
libcoding.so $dbin/libcoding.so
|
libcoding.so $dbin/libcoding.so
|
||||||
# compilations \
|
# compilations \
|
||||||
# lte-simulators $config_libconfig_shlib \
|
# lte-simulators $config_libconfig_shlib \
|
||||||
@@ -751,7 +752,7 @@ function main() {
|
|||||||
simlist="secu_knas_encrypt_eia1 secu_kenb aes128_ctr_encrypt aes128_ctr_decrypt secu_knas_encrypt_eea2 secu_knas secu_knas_encrypt_eea1 kdf aes128_cmac_encrypt secu_knas_encrypt_eia2"
|
simlist="secu_knas_encrypt_eia1 secu_kenb aes128_ctr_encrypt aes128_ctr_decrypt secu_knas_encrypt_eea2 secu_knas secu_knas_encrypt_eea1 kdf aes128_cmac_encrypt secu_knas_encrypt_eia2"
|
||||||
for f in $simlist ; do
|
for f in $simlist ; do
|
||||||
compilations \
|
compilations \
|
||||||
phy_simulators test_$f \
|
ran_build test_$f \
|
||||||
test_$f $dbin/test_$f.$REL
|
test_$f $dbin/test_$f.$REL
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
# authors Laurent Thomas
|
# authors Laurent Thomas
|
||||||
#
|
#
|
||||||
#######################################
|
#######################################
|
||||||
|
|
||||||
if [ ! -f /etc/os-release ]; then
|
if [ ! -f /etc/os-release ]; then
|
||||||
echo "No /etc/os-release file found. You're likely on an unsupported distro."
|
echo "No /etc/os-release file found. You're likely on an unsupported distro."
|
||||||
exit 1
|
exit 1
|
||||||
@@ -134,7 +135,6 @@ clean_all_files() {
|
|||||||
rm -rf "$dir"/ran_build/build
|
rm -rf "$dir"/ran_build/build
|
||||||
rm -rf "$dir"/ran_build_noLOG/build
|
rm -rf "$dir"/ran_build_noLOG/build
|
||||||
rm -rf "$dir"/lte-simulators/build
|
rm -rf "$dir"/lte-simulators/build
|
||||||
rm -rf "$dir"/phy_simulators/build
|
|
||||||
rm -rf "$dir"/nas_sim_tools/build
|
rm -rf "$dir"/nas_sim_tools/build
|
||||||
rm -rf "$dir"/oaisim_build_oai/build
|
rm -rf "$dir"/oaisim_build_oai/build
|
||||||
rm -rf "$dir"/oaisim_build_oai/CMakeLists.txt
|
rm -rf "$dir"/oaisim_build_oai/CMakeLists.txt
|
||||||
@@ -472,7 +472,7 @@ if ! check_supported_distribution; then
|
|||||||
echo_error "Your distribution $(get_distribution_release) is not supported by oai !"
|
echo_error "Your distribution $(get_distribution_release) is not supported by oai !"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
set_openair_env
|
||||||
echo_info "Installing packages"
|
echo_info "Installing packages"
|
||||||
check_install_ubuntu_packages
|
check_install_ubuntu_packages
|
||||||
|
|
||||||
|
|||||||
Symlink
+1
@@ -0,0 +1 @@
|
|||||||
|
ran_build/
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
cmake_minimum_required(VERSION 2.8)
|
|
||||||
project (OpenAirInterface)
|
|
||||||
set ( CMAKE_BUILD_TYPE )
|
|
||||||
set ( CFLAGS_PROCESSOR_USER "" )
|
|
||||||
set ( UE_EXPANSION False )
|
|
||||||
set ( PRE_SCD_THREAD False )
|
|
||||||
set ( ENABLE_VCD_FIFO False )
|
|
||||||
set ( RF_BOARD "None")
|
|
||||||
set ( TRANSP_PRO "None")
|
|
||||||
set ( PACKAGE_NAME "")
|
|
||||||
set ( DEADLINE_SCHEDULER "False" )
|
|
||||||
set ( CPU_AFFINITY "False" )
|
|
||||||
set ( T_TRACER True )
|
|
||||||
set ( UE_AUTOTEST_TRACE False )
|
|
||||||
set ( UE_DEBUG_TRACE False )
|
|
||||||
set ( UE_TIMING_TRACE False )
|
|
||||||
set ( USRP_REC_PLAY False )
|
|
||||||
set ( SKIP_SHARED_LIB_FLAG False )
|
|
||||||
set ( PHYSIM True)
|
|
||||||
set ( RU 0)
|
|
||||||
include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)
|
|
||||||
@@ -168,7 +168,7 @@ clean_all_files() {
|
|||||||
rm -rf $dir/log $OPENAIR_DIR/targets/bin/*
|
rm -rf $dir/log $OPENAIR_DIR/targets/bin/*
|
||||||
rm -rf $dir/ran_build $dir/ran_build_noLOG
|
rm -rf $dir/ran_build $dir/ran_build_noLOG
|
||||||
rm -rf $dir/lte-simulators/build
|
rm -rf $dir/lte-simulators/build
|
||||||
rm -rf $dir/phy_simulators/build $dir/nas_sim_tools/build
|
rm -rf $dir/nas_sim_tools/build
|
||||||
rm -rf $dir/oaisim_build_oai/build $dir/oaisim_build_oai/CMakeLists.txt
|
rm -rf $dir/oaisim_build_oai/build $dir/oaisim_build_oai/CMakeLists.txt
|
||||||
rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build
|
rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build
|
||||||
}
|
}
|
||||||
@@ -756,6 +756,7 @@ check_install_oai_software() {
|
|||||||
libidn11-dev \
|
libidn11-dev \
|
||||||
libmysqlclient-dev \
|
libmysqlclient-dev \
|
||||||
libpython2.7-dev \
|
libpython2.7-dev \
|
||||||
|
libreadline-dev \
|
||||||
libsctp1 \
|
libsctp1 \
|
||||||
libsctp-dev \
|
libsctp-dev \
|
||||||
libssl-dev \
|
libssl-dev \
|
||||||
@@ -842,6 +843,7 @@ check_install_oai_software() {
|
|||||||
patch \
|
patch \
|
||||||
psmisc \
|
psmisc \
|
||||||
python \
|
python \
|
||||||
|
readline-devel \
|
||||||
subversion \
|
subversion \
|
||||||
xmlstarlet \
|
xmlstarlet \
|
||||||
python-pip \
|
python-pip \
|
||||||
|
|||||||
@@ -254,7 +254,7 @@ configmodule_interface_t *load_configmodule(int argc,
|
|||||||
cfgptr = calloc(sizeof(configmodule_interface_t),1);
|
cfgptr = calloc(sizeof(configmodule_interface_t),1);
|
||||||
/* argv_info is used to memorize command line options which have been recognized */
|
/* argv_info is used to memorize command line options which have been recognized */
|
||||||
/* and to detect unrecognized command line options which might have been specified */
|
/* and to detect unrecognized command line options which might have been specified */
|
||||||
cfgptr->argv_info = calloc(sizeof(int32_t), argc);
|
cfgptr->argv_info = calloc(sizeof(int32_t), argc+10);
|
||||||
/* argv[0] is the exec name, always Ok */
|
/* argv[0] is the exec name, always Ok */
|
||||||
cfgptr->argv_info[0] |= CONFIG_CMDLINEOPT_PROCESSED;
|
cfgptr->argv_info[0] |= CONFIG_CMDLINEOPT_PROCESSED;
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
```C
|
```C
|
||||||
LOG_E(<component>,<format>,<argument>,...)
|
LOG_E(<component>,<format>,<argument>,...)
|
||||||
LOG_W(<component>,<format>,<argument>,...)
|
LOG_W(<component>,<format>,<argument>,...)
|
||||||
|
LOG_A(<component>,<format>,<argument>,...)
|
||||||
LOG_I(<component>,<format>,<argument>,...)
|
LOG_I(<component>,<format>,<argument>,...)
|
||||||
LOG_D(<component>,<format>,<argument>,...)
|
LOG_D(<component>,<format>,<argument>,...)
|
||||||
LOG_T(<component>,<format>,<argument>,...)
|
LOG_T(<component>,<format>,<argument>,...)
|
||||||
@@ -14,9 +15,10 @@ these macros are used in place of the printf C function. The additionnal ***comp
|
|||||||
|:---------|:---------------|:---------------|----------------:|
|
|:---------|:---------------|:---------------|----------------:|
|
||||||
| LOG_E | E | 0 | error |
|
| LOG_E | E | 0 | error |
|
||||||
| LOG_W | W | 1 | warning |
|
| LOG_W | W | 1 | warning |
|
||||||
| LOG_I | I | 2 | informational |
|
| LOG_A | A | 2 | analysis |
|
||||||
| LOG_D | D | 3 | debug |
|
| LOG_I | I | 3 | informational |
|
||||||
| LOG_T | T | 4 | trace |
|
| LOG_D | D | 4 | debug |
|
||||||
|
| LOG_T | T | 5 | trace |
|
||||||
|
|
||||||
component list is defined as an `enum` in [log.h](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/common/utils/LOG/log.h). A new component can be defined by adding an item in this type, it must also be defined in the T tracer [T_messages.txt ](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/common/utils/T/T_messages.txt).
|
component list is defined as an `enum` in [log.h](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/common/utils/LOG/log.h). A new component can be defined by adding an item in this type, it must also be defined in the T tracer [T_messages.txt ](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/common/utils/T/T_messages.txt).
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ All logging facility parameters are defined in the log_config section. Some para
|
|||||||
|
|
||||||
| name | type | default | description |
|
| name | type | default | description |
|
||||||
|:---:|:---:|:---:|:----|
|
|:---:|:---:|:---:|:----|
|
||||||
| `global_log_level` | `pre-defined string of char` | `info` | Allows printing of messages up to the specified level. Available levels, from lower to higher are `error`,`warn`,`info`,`debug`,`trace` |
|
| `global_log_level` | `pre-defined string of char` | `info` | Allows printing of messages up to the specified level. Available levels, from lower to higher are `error`,`warn`,`analysis`,`info`,`debug`,`trace` |
|
||||||
| `global_log_online` | `boolean` | 1 (=true) | If false, all console messages are discarded, whatever their level |
|
| `global_log_online` | `boolean` | 1 (=true) | If false, all console messages are discarded, whatever their level |
|
||||||
| `global_log_options` | `list of pre-defined string of char` | | 3 options can be specified to trigger the information added in the header of the message: `nocolor`, disable color usage in log messages, usefull when redirecting logs to a file, where escape sequences used for color selection can be annoying, `level`, add a one letter level id in the message header (T,D,I,W,E for trace, debug, info, warning, error),`thread`, add the thread name in the message header, `function`, adds the function name, `line_num`, adds the line number, `time` adds the time since process starts|
|
| `global_log_options` | `list of pre-defined string of char` | | 5 options can be specified to trigger the information added in the header of the message: `nocolor`, disable color usage in log messages, usefull when redirecting logs to a file, where escape sequences used for color selection can be annoying, `level`, add a one letter level id in the message header (T,D,I,A,W,E for trace, debug, info, analysis, warning, error),`thread`, add the thread name in the message header, `thread_id`, adds the thread ID in the message header, `function`, adds the function name, `line_num`, adds the line number, `time` adds the time since process starts|
|
||||||
|
|
||||||
### Component specific parameters
|
### Component specific parameters
|
||||||
| name | type | default | description |
|
| name | type | default | description |
|
||||||
|
|||||||
+64
-67
@@ -65,6 +65,7 @@ char logmem_filename[1024] = {0};
|
|||||||
mapping log_level_names[] = {
|
mapping log_level_names[] = {
|
||||||
{"error", OAILOG_ERR},
|
{"error", OAILOG_ERR},
|
||||||
{"warn", OAILOG_WARNING},
|
{"warn", OAILOG_WARNING},
|
||||||
|
{"analysis", OAILOG_ANALYSIS},
|
||||||
{"info", OAILOG_INFO},
|
{"info", OAILOG_INFO},
|
||||||
{"debug", OAILOG_DEBUG},
|
{"debug", OAILOG_DEBUG},
|
||||||
{"trace", OAILOG_TRACE},
|
{"trace", OAILOG_TRACE},
|
||||||
@@ -78,14 +79,15 @@ mapping log_options[] = {
|
|||||||
{"line_num", FLAG_FILE_LINE },
|
{"line_num", FLAG_FILE_LINE },
|
||||||
{"function", FLAG_FUNCT},
|
{"function", FLAG_FUNCT},
|
||||||
{"time", FLAG_TIME},
|
{"time", FLAG_TIME},
|
||||||
|
{"thread_id", FLAG_THREAD_ID},
|
||||||
{NULL,-1}
|
{NULL,-1}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
mapping log_maskmap[] = LOG_MASKMAP_INIT;
|
mapping log_maskmap[] = LOG_MASKMAP_INIT;
|
||||||
|
|
||||||
char *log_level_highlight_start[] = {LOG_RED, LOG_ORANGE, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */
|
char *log_level_highlight_start[] = {LOG_RED, LOG_ORANGE, LOG_GREEN, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */
|
||||||
char *log_level_highlight_end[] = {LOG_RESET,LOG_RESET,LOG_RESET, LOG_RESET,LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */
|
char *log_level_highlight_end[] = {LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */
|
||||||
static void log_output_memory(log_component_t *c, const char *file, const char *func, int line, int comp, int level, const char* format,va_list args);
|
static void log_output_memory(log_component_t *c, const char *file, const char *func, int line, int comp, int level, const char* format,va_list args);
|
||||||
|
|
||||||
|
|
||||||
@@ -501,6 +503,7 @@ int logInit (void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <sys/syscall.h>
|
||||||
static inline int log_header(log_component_t *c,
|
static inline int log_header(log_component_t *c,
|
||||||
char *log_buffer,
|
char *log_buffer,
|
||||||
int buffsize,
|
int buffsize,
|
||||||
@@ -514,32 +517,45 @@ static inline int log_header(log_component_t *c,
|
|||||||
char threadname[64];
|
char threadname[64];
|
||||||
if (flag & FLAG_THREAD ) {
|
if (flag & FLAG_THREAD ) {
|
||||||
threadname[0]='{';
|
threadname[0]='{';
|
||||||
if ( pthread_getname_np(pthread_self(), threadname+1,61) != 0)
|
if (pthread_getname_np(pthread_self(), threadname + 1, sizeof(threadname) - 3) != 0)
|
||||||
strcpy(threadname+1, "?thread?");
|
strcpy(threadname+1, "?thread?");
|
||||||
strcat(threadname,"}");
|
strcat(threadname,"} ");
|
||||||
} else {
|
} else {
|
||||||
threadname[0]=0;
|
threadname[0]=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char l[32];
|
char l[32];
|
||||||
if (flag & FLAG_FILE_LINE && flag & FLAG_FUNCT )
|
if (flag & FLAG_FILE_LINE && flag & FLAG_FUNCT )
|
||||||
snprintf(l, sizeof l," (%s:%d) ", func, line);
|
snprintf(l, sizeof l, "(%s:%d) ", func, line);
|
||||||
else if (flag & FLAG_FILE_LINE)
|
else if (flag & FLAG_FILE_LINE)
|
||||||
sprintf(l," (%d) ", line);
|
snprintf(l, sizeof l, "(%d) ", line);
|
||||||
|
else if (flag & FLAG_FUNCT)
|
||||||
|
snprintf(l, sizeof l, "(%s) ", func);
|
||||||
else
|
else
|
||||||
l[0]=0;
|
l[0] = 0;
|
||||||
|
|
||||||
char timeString[32];
|
char timeString[32];
|
||||||
if ( flag & FLAG_TIME ) {
|
if ( flag & FLAG_TIME ) {
|
||||||
struct timespec t;
|
struct timespec t;
|
||||||
clock_gettime(CLOCK_MONOTONIC, &t);
|
if (clock_gettime(CLOCK_MONOTONIC, &t) == -1)
|
||||||
snprintf(timeString, sizeof t,"%05.3f",t.tv_sec+t.tv_nsec/1.0e9);
|
abort();
|
||||||
|
snprintf(timeString, sizeof(timeString), "%lu.%06lu ",
|
||||||
|
t.tv_sec,
|
||||||
|
t.tv_nsec / 1000);
|
||||||
} else {
|
} else {
|
||||||
timeString[0]=0;
|
timeString[0] = 0;
|
||||||
}
|
}
|
||||||
return snprintf(log_buffer, buffsize, "%s%s[%s]%c%s %s ",
|
|
||||||
timeString,
|
char threadIdString[32];
|
||||||
|
if (flag & FLAG_THREAD_ID) {
|
||||||
|
snprintf(threadIdString, sizeof(threadIdString), "%08lx ", syscall(__NR_gettid));
|
||||||
|
} else {
|
||||||
|
threadIdString[0] = 0;
|
||||||
|
}
|
||||||
|
return snprintf(log_buffer, buffsize, "%s%s%s[%s] %c %s%s",
|
||||||
flag & FLAG_NOCOLOR ? "" : log_level_highlight_start[level],
|
flag & FLAG_NOCOLOR ? "" : log_level_highlight_start[level],
|
||||||
|
timeString,
|
||||||
|
threadIdString,
|
||||||
c->name,
|
c->name,
|
||||||
flag & FLAG_LEVEL ? g_log->level2string[level] : ' ',
|
flag & FLAG_LEVEL ? g_log->level2string[level] : ' ',
|
||||||
l,
|
l,
|
||||||
@@ -547,53 +563,6 @@ static inline int log_header(log_component_t *c,
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LOG_MINIMAL
|
|
||||||
#include <sys/syscall.h>
|
|
||||||
void logMinimal(int comp, int level, const char *format, ...)
|
|
||||||
{
|
|
||||||
struct timespec ts;
|
|
||||||
if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1)
|
|
||||||
abort();
|
|
||||||
|
|
||||||
char buf[MAX_LOG_TOTAL];
|
|
||||||
int n = snprintf(buf, sizeof(buf), "%lu.%06lu %08lx [%s] %c ",
|
|
||||||
ts.tv_sec,
|
|
||||||
ts.tv_nsec / 1000,
|
|
||||||
syscall(__NR_gettid),
|
|
||||||
g_log->log_component[comp].name,
|
|
||||||
level);
|
|
||||||
if (n < 0 || n >= sizeof(buf))
|
|
||||||
{
|
|
||||||
fprintf(stderr, "%s: n=%d\n", __func__, n);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
va_list args;
|
|
||||||
va_start(args, format);
|
|
||||||
int m = vsnprintf(buf + n, sizeof(buf) - n, format, args);
|
|
||||||
va_end(args);
|
|
||||||
|
|
||||||
if (m < 0)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "%s: n=%d m=%d\n", __func__, n, m);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int len = n + m;
|
|
||||||
if (len > sizeof(buf) - 1)
|
|
||||||
{
|
|
||||||
len = sizeof(buf) - 1;
|
|
||||||
}
|
|
||||||
if (buf[len - 1] != '\n')
|
|
||||||
{
|
|
||||||
buf[len++] = '\n';
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__((unused))
|
|
||||||
int unused = write(STDOUT_FILENO, buf, len);
|
|
||||||
}
|
|
||||||
#endif // LOG_MINIMAL
|
|
||||||
|
|
||||||
void logRecord_mt(const char *file,
|
void logRecord_mt(const char *file,
|
||||||
const char *func,
|
const char *func,
|
||||||
int line,
|
int line,
|
||||||
@@ -864,7 +833,14 @@ void flush_mem_to_file(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char logmem_log_level[NUM_LOG_LEVEL]={'E','W','I','D','T'};
|
const char logmem_log_level[NUM_LOG_LEVEL] = {
|
||||||
|
[OAILOG_ERR] = 'E',
|
||||||
|
[OAILOG_WARNING] = 'W',
|
||||||
|
[OAILOG_ANALYSIS] = 'A',
|
||||||
|
[OAILOG_INFO] = 'I',
|
||||||
|
[OAILOG_DEBUG] = 'D',
|
||||||
|
[OAILOG_TRACE] = 'T',
|
||||||
|
};
|
||||||
|
|
||||||
static void log_output_memory(log_component_t *c, const char *file, const char *func, int line, int comp, int level, const char* format,va_list args)
|
static void log_output_memory(log_component_t *c, const char *file, const char *func, int line, int comp, int level, const char* format,va_list args)
|
||||||
{
|
{
|
||||||
@@ -878,12 +854,32 @@ static void log_output_memory(log_component_t *c, const char *file, const char *
|
|||||||
char log_buffer[MAX_LOG_TOTAL];
|
char log_buffer[MAX_LOG_TOTAL];
|
||||||
|
|
||||||
// make sure that for log trace the extra info is only printed once, reset when the level changes
|
// make sure that for log trace the extra info is only printed once, reset when the level changes
|
||||||
if (level < OAILOG_TRACE)
|
if (level < OAILOG_TRACE) {
|
||||||
len += log_header(c, log_buffer, MAX_LOG_TOTAL, file, func, line, level);
|
int n = log_header(c, log_buffer+len, MAX_LOG_TOTAL, file, func, line, level);
|
||||||
len += vsnprintf(log_buffer+len, MAX_LOG_TOTAL-len, format, args);
|
if (n > 0) {
|
||||||
if ( !((g_log->flag | c->flag) & FLAG_NOCOLOR) )
|
len += n;
|
||||||
len+=snprintf(log_buffer+len, MAX_LOG_TOTAL-len, "%s", log_level_highlight_end[level]);
|
if (len > MAX_LOG_TOTAL) {
|
||||||
|
len = MAX_LOG_TOTAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int n = vsnprintf(log_buffer+len, MAX_LOG_TOTAL-len, format, args);
|
||||||
|
if (n > 0) {
|
||||||
|
len += n;
|
||||||
|
if (len > MAX_LOG_TOTAL) {
|
||||||
|
len = MAX_LOG_TOTAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( !((g_log->flag | c->flag) & FLAG_NOCOLOR) ) {
|
||||||
|
int n = snprintf(log_buffer+len, MAX_LOG_TOTAL-len, "%s", log_level_highlight_end[level]);
|
||||||
|
if (n > 0) {
|
||||||
|
len += n;
|
||||||
|
if (len > MAX_LOG_TOTAL) {
|
||||||
|
len = MAX_LOG_TOTAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// OAI printf compatibility
|
// OAI printf compatibility
|
||||||
if(log_mem_flag==1){
|
if(log_mem_flag==1){
|
||||||
if(log_mem_d[log_mem_side].enable_flag==1){
|
if(log_mem_d[log_mem_side].enable_flag==1){
|
||||||
@@ -919,6 +915,7 @@ static void log_output_memory(log_component_t *c, const char *file, const char *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
AssertFatal(len >= 0 && len <= MAX_LOG_TOTAL, "Bad len %d\n", len);
|
||||||
if (write(fileno(c->stream), log_buffer, len)) {};
|
if (write(fileno(c->stream), log_buffer, len)) {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-31
@@ -90,11 +90,12 @@ extern "C" {
|
|||||||
# define OAILOG_DISABLE -1 /*!< \brief disable all LOG messages, cannot be used in LOG macros, use only in LOG module */
|
# define OAILOG_DISABLE -1 /*!< \brief disable all LOG messages, cannot be used in LOG macros, use only in LOG module */
|
||||||
# define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" functionalities */
|
# define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" functionalities */
|
||||||
# define OAILOG_WARNING 1 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */
|
# define OAILOG_WARNING 1 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */
|
||||||
# define OAILOG_INFO 2 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
|
# define OAILOG_ANALYSIS 2 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
|
||||||
# define OAILOG_DEBUG 3 /*!< \brief first level debug-level messages, for developers, may impact real-time behavior */
|
# define OAILOG_INFO 3 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
|
||||||
# define OAILOG_TRACE 4 /*!< \brief second level debug-level messages, for developers, likely impact real-time behavior*/
|
# define OAILOG_DEBUG 4 /*!< \brief first level debug-level messages, for developers, may impact real-time behavior */
|
||||||
|
# define OAILOG_TRACE 5 /*!< \brief second level debug-level messages, for developers, likely impact real-time behavior*/
|
||||||
|
|
||||||
#define NUM_LOG_LEVEL 5 /*!< \brief the number of message levels users have with LOG (OAILOG_DISABLE is not available to user as a level, so it is not included)*/
|
#define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG (OAILOG_DISABLE is not available to user as a level, so it is not included)*/
|
||||||
/* @}*/
|
/* @}*/
|
||||||
|
|
||||||
|
|
||||||
@@ -127,6 +128,7 @@ extern "C" {
|
|||||||
#define FLAG_FUNCT 0x0020
|
#define FLAG_FUNCT 0x0020
|
||||||
#define FLAG_FILE_LINE 0x0040
|
#define FLAG_FILE_LINE 0x0040
|
||||||
#define FLAG_TIME 0x0100
|
#define FLAG_TIME 0x0100
|
||||||
|
#define FLAG_THREAD_ID 0x0200
|
||||||
#define FLAG_INITIALIZED 0x8000
|
#define FLAG_INITIALIZED 0x8000
|
||||||
|
|
||||||
#define SET_LOG_OPTION(O) g_log->flag = (g_log->flag | O)
|
#define SET_LOG_OPTION(O) g_log->flag = (g_log->flag | O)
|
||||||
@@ -390,7 +392,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
/* optname help paramflags XXXptr defXXXval type numelt */
|
/* optname help paramflags XXXptr defXXXval type numelt */
|
||||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
#define LOG_GLOBALPARAMS_DESC { \
|
#define LOG_GLOBALPARAMS_DESC { \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, "Default log level for all componemts\n", 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, 0}, \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, "Default log level for all componemts\n", 0, strptr:(char **)&gloglevel, defstrval:log_level_names[3].name, TYPE_STRING, 0}, \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(consolelog), defintval:1, TYPE_INT, 0}, \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(consolelog), defintval:1, TYPE_INT, 0}, \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST, 0} \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST, 0} \
|
||||||
}
|
}
|
||||||
@@ -408,32 +410,14 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
// debugging macros
|
// debugging macros
|
||||||
#define LOG_F LOG_I /* because LOG_F was originaly to dump a message or buffer but is also used as a regular level...., to dump use LOG_DUMPMSG */
|
#define LOG_F LOG_I /* because LOG_F was originaly to dump a message or buffer but is also used as a regular level...., to dump use LOG_DUMPMSG */
|
||||||
|
|
||||||
#if LOG_MINIMAL
|
|
||||||
|
|
||||||
void logMinimal(int component, int level, const char *format, ...) __attribute__((format(printf, 3, 4)));
|
|
||||||
# define LOG_E(COMPONENT, ...) do if (1) logMinimal(COMPONENT, 'E', __VA_ARGS__); while (0)
|
|
||||||
# define LOG_W(COMPONENT, ...) do if (1) logMinimal(COMPONENT, 'W', __VA_ARGS__); while (0)
|
|
||||||
# define LOG_A(COMPONENT, ...) do if (1) logMinimal(COMPONENT, 'A', __VA_ARGS__); while (0) /* logs intended for analysis */
|
|
||||||
# define LOG_I(COMPONENT, ...) do if (1) logMinimal(COMPONENT, 'I', __VA_ARGS__); while (0)
|
|
||||||
# define LOG_D(COMPONENT, ...) do if (0) logMinimal(COMPONENT, 'D', __VA_ARGS__); while (0)
|
|
||||||
# define LOG_T(COMPONENT, ...) do if (0) logMinimal(COMPONENT, 'T', __VA_ARGS__); while (0)
|
|
||||||
|
|
||||||
# define LOG_M(FILE, VECTOR, DATA, LEN, DEC, FORMAT) ((void) 0)
|
|
||||||
# define LOG_DUMPFLAG(D) 0
|
|
||||||
# define LOG_DEBUGFLAG(D) 0
|
|
||||||
# define LOG_DUMPMSG(C, B, S, X...) ((void) 0)
|
|
||||||
# define VLOG(C, L, F, ARGS) ((void) 0)
|
|
||||||
|
|
||||||
#else // LOG_MINIMAL
|
|
||||||
|
|
||||||
# if T_TRACER
|
# if T_TRACER
|
||||||
/* per component, level dependent macros */
|
/* per component, level dependent macros */
|
||||||
# define LOG_E(c, x...) do { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} } while (0)
|
# define LOG_E(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} else { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ;}} while (0)
|
||||||
# define LOG_W(c, x...) do { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)); if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x);} } while (0)
|
# define LOG_W(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0)
|
||||||
# define LOG_A LOG_I
|
# define LOG_A(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ANALYSIS) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ANALYSIS, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0)
|
||||||
# define LOG_I(c, x...) do { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} } while (0)
|
# define LOG_I(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0)
|
||||||
# define LOG_D(c, x...) do { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} } while (0)
|
# define LOG_D(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} else { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ;}} while (0)
|
||||||
# define LOG_T(c, x...) do { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} } while (0)
|
# define LOG_T(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} else { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ;}} while (0)
|
||||||
# define VLOG(c,l, f, args) do { if (T_stdout) { if( g_log->log_component[c].level >= l ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args) ;} } while (0)
|
# define VLOG(c,l, f, args) do { if (T_stdout) { if( g_log->log_component[c].level >= l ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args) ;} } while (0)
|
||||||
/* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */
|
/* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */
|
||||||
# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */
|
# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */
|
||||||
@@ -449,8 +433,8 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
|
|
||||||
# define LOG_E(c, x...) do { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} while (0)
|
# define LOG_E(c, x...) do { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} while (0)
|
||||||
# define LOG_W(c, x...) do { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} while (0)
|
# define LOG_W(c, x...) do { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} while (0)
|
||||||
|
# define LOG_A(c, x...) do { if( g_log->log_component[c].level >= OAILOG_ANALYSIS) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ANALYSIS, x);} while (0)
|
||||||
# define LOG_I(c, x...) do { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} while (0)
|
# define LOG_I(c, x...) do { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} while (0)
|
||||||
# define LOG_A LOG_I
|
|
||||||
# define LOG_D(c, x...) do { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} while (0)
|
# define LOG_D(c, x...) do { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} while (0)
|
||||||
# define LOG_T(c, x...) do { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} while (0)
|
# define LOG_T(c, x...) do { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} while (0)
|
||||||
# define VLOG(c,l, f, args) do { if( g_log->log_component[c].level >= l ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args) ; } while (0)
|
# define VLOG(c,l, f, args) do { if( g_log->log_component[c].level >= l ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args) ; } while (0)
|
||||||
@@ -464,7 +448,6 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
# define LOG_VAR(A,B) A B
|
# define LOG_VAR(A,B) A B
|
||||||
# define T_ACTIVE(a) (0)
|
# define T_ACTIVE(a) (0)
|
||||||
# endif /* T_TRACER */
|
# endif /* T_TRACER */
|
||||||
#endif // LOG_MINIMAL
|
|
||||||
|
|
||||||
/* avoid warnings for variables only used in LOG macro's but set outside debug section */
|
/* avoid warnings for variables only used in LOG macro's but set outside debug section */
|
||||||
#define GCC_NOTUSED __attribute__((unused))
|
#define GCC_NOTUSED __attribute__((unused))
|
||||||
|
|||||||
@@ -93,6 +93,14 @@ ID = GNB_PHY_PUCCH_PUSCH_IQ
|
|||||||
DESC = gNodeB input data in the frequency domain for a slot where some PUCCH or PUSCH detection was done
|
DESC = gNodeB input data in the frequency domain for a slot where some PUCCH or PUSCH detection was done
|
||||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB
|
||||||
FORMAT = int,frame : int,slot : buffer,rxdataF
|
FORMAT = int,frame : int,slot : buffer,rxdataF
|
||||||
|
ID = GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE
|
||||||
|
DESC = gNodeB channel estimation in the frequency domain
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB
|
||||||
|
FORMAT = int,gNB_ID : int,rnti : int,frame : int,subframe : int,antenna : buffer,chest_t
|
||||||
|
ID = GNB_PHY_UL_TIME_CHANNEL_ESTIMATE
|
||||||
|
DESC = gNodeB channel estimation in the time domain
|
||||||
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB
|
||||||
|
FORMAT = int,gNB_ID : int,rnti : int,frame : int,subframe : int,antenna : buffer,chest_t
|
||||||
ID = GNB_PHY_PRACH_INPUT_SIGNAL
|
ID = GNB_PHY_PRACH_INPUT_SIGNAL
|
||||||
DESC = gNodeB input data in the time domain for slots with PRACH detection
|
DESC = gNodeB input data in the time domain for slots with PRACH detection
|
||||||
GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB
|
GROUP = ALL:PHY:GRAPHIC:HEAVY:GNB
|
||||||
|
|||||||
+124
-7
@@ -4,15 +4,28 @@
|
|||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "database.h"
|
#include "database.h"
|
||||||
|
#include "event.h"
|
||||||
#include "handler.h"
|
#include "handler.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "logger/logger.h"
|
#include "logger/logger.h"
|
||||||
#include "view/view.h"
|
|
||||||
#include "gui/gui.h"
|
#include "gui/gui.h"
|
||||||
|
#include "utils.h"
|
||||||
|
#include "openair_logo.h"
|
||||||
|
|
||||||
|
int ue_id[65536];
|
||||||
|
int next_ue_id;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
widget *pucch_pusch_iq_plot;
|
widget *pucch_pusch_iq_plot;
|
||||||
|
widget *ul_freq_estimate_ue_xy_plot;
|
||||||
|
widget *ul_time_estimate_ue_xy_plot;
|
||||||
|
widget *current_ue_label;
|
||||||
|
widget *current_ue_button;
|
||||||
|
widget *prev_ue_button;
|
||||||
|
widget *next_ue_button;
|
||||||
logger *pucch_pusch_iq_logger;
|
logger *pucch_pusch_iq_logger;
|
||||||
|
logger *ul_freq_estimate_ue_logger;
|
||||||
|
logger *ul_time_estimate_ue_logger;
|
||||||
} gnb_gui;
|
} gnb_gui;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -21,6 +34,7 @@ typedef struct {
|
|||||||
int nevents;
|
int nevents;
|
||||||
pthread_mutex_t lock;
|
pthread_mutex_t lock;
|
||||||
gnb_gui *e;
|
gnb_gui *e;
|
||||||
|
int ue; /* what UE is displayed in the UE specific views */
|
||||||
void *database;
|
void *database;
|
||||||
} gnb_data;
|
} gnb_data;
|
||||||
|
|
||||||
@@ -69,34 +83,133 @@ static void *gui_thread(void *_g)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gnb_main_gui(gnb_gui *e, gui *g, event_handler *h, void *database,
|
static void set_current_ue(gui *g, gnb_data *e, int ue)
|
||||||
gnb_data *ed)
|
{
|
||||||
|
char s[256];
|
||||||
|
|
||||||
|
sprintf(s, "[UE %d] ", ue);
|
||||||
|
label_set_text(g, e->e->current_ue_label, s);
|
||||||
|
|
||||||
|
sprintf(s, "GNB_PHY_PUCCH_PUSCH_IQ [UE %d]", ue);
|
||||||
|
xy_plot_set_title(g, e->e->pucch_pusch_iq_plot, s);
|
||||||
|
|
||||||
|
sprintf(s, "UL channel estimation in frequency domain [UE %d]", ue);
|
||||||
|
xy_plot_set_title(g, e->e->ul_freq_estimate_ue_xy_plot, s);
|
||||||
|
|
||||||
|
sprintf(s, "UL channel estimation in time domain [UE %d]", ue);
|
||||||
|
xy_plot_set_title(g, e->e->ul_time_estimate_ue_xy_plot, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void reset_ue_ids(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
printf("resetting known UEs\n");
|
||||||
|
for (i = 0; i < 65536; i++) ue_id[i] = -1;
|
||||||
|
ue_id[65535] = 0;
|
||||||
|
ue_id[65534] = 1; /* HACK: to be removed */
|
||||||
|
ue_id[2] = 2; /* this supposes RA RNTI = 2, very openair specific */
|
||||||
|
next_ue_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void click(void *private, gui *g, char *notification, widget *w, void *notification_data)
|
||||||
|
{
|
||||||
|
int *d = notification_data;
|
||||||
|
int button = d[0];
|
||||||
|
gnb_data *ed = private;
|
||||||
|
gnb_gui *e = ed->e;
|
||||||
|
int ue = ed->ue;
|
||||||
|
int do_reset = 0;
|
||||||
|
|
||||||
|
if (button != 1) return;
|
||||||
|
if (w == e->prev_ue_button) { ue--; if (ue < 0) ue = 0; }
|
||||||
|
if (w == e->next_ue_button) ue++;
|
||||||
|
if (w == e->current_ue_button) do_reset = 1;
|
||||||
|
|
||||||
|
if (pthread_mutex_lock(&ed->lock)) abort();
|
||||||
|
if (do_reset) reset_ue_ids();
|
||||||
|
if (ue != ed->ue) {
|
||||||
|
set_current_ue(g, ed, ue);
|
||||||
|
ed->ue = ue;
|
||||||
|
}
|
||||||
|
if (pthread_mutex_unlock(&ed->lock)) abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gnb_main_gui(gnb_gui *e, gui *g, event_handler *h, void *database, gnb_data *ed)
|
||||||
{
|
{
|
||||||
widget *main_window;
|
widget *main_window;
|
||||||
widget *top_container;
|
widget *top_container;
|
||||||
widget *line;
|
widget *line;
|
||||||
|
widget *col;
|
||||||
|
widget *logo;
|
||||||
widget *w;
|
widget *w;
|
||||||
|
widget *w2;
|
||||||
logger *l;
|
logger *l;
|
||||||
view *v;
|
view *v;
|
||||||
|
|
||||||
main_window = new_toplevel_window(g, 500, 300, "gNB tracer");
|
main_window = new_toplevel_window(g, 1500, 230, "gNB tracer");
|
||||||
|
|
||||||
top_container = new_container(g, VERTICAL);
|
top_container = new_container(g, VERTICAL);
|
||||||
widget_add_child(g, main_window, top_container, -1);
|
widget_add_child(g, main_window, top_container, -1);
|
||||||
|
|
||||||
line = new_container(g, HORIZONTAL);
|
line = new_container(g, HORIZONTAL);
|
||||||
widget_add_child(g, top_container, line, -1);
|
widget_add_child(g, top_container, line, -1);
|
||||||
|
logo = new_image(g, openair_logo_png, openair_logo_png_len);
|
||||||
|
|
||||||
|
/* logo + prev/next UE buttons */
|
||||||
|
col = new_container(g, VERTICAL);
|
||||||
|
widget_add_child(g, col, logo, -1);
|
||||||
|
w = new_container(g, HORIZONTAL);
|
||||||
|
widget_add_child(g, col, w, -1);
|
||||||
|
w2 = new_label(g, "");
|
||||||
|
widget_add_child(g, w, w2, -1);
|
||||||
|
label_set_clickable(g, w2, 1);
|
||||||
|
e->current_ue_button = w2;
|
||||||
|
e->current_ue_label = w2;
|
||||||
|
w2 = new_label(g, " [prev UE] ");
|
||||||
|
widget_add_child(g, w, w2, -1);
|
||||||
|
label_set_clickable(g, w2, 1);
|
||||||
|
e->prev_ue_button = w2;
|
||||||
|
w2 = new_label(g, " [next UE] ");
|
||||||
|
widget_add_child(g, w, w2, -1);
|
||||||
|
label_set_clickable(g, w2, 1);
|
||||||
|
e->next_ue_button = w2;
|
||||||
|
widget_add_child(g, line, col, -1);
|
||||||
|
|
||||||
/* PUCCH/PUSCH IQ data */
|
/* PUCCH/PUSCH IQ data */
|
||||||
w = new_xy_plot(g, 55, 55, "", 50);
|
w = new_xy_plot(g, 200, 200, "", 10);
|
||||||
e->pucch_pusch_iq_plot = w;
|
e->pucch_pusch_iq_plot = w;
|
||||||
widget_add_child(g, line, w, -1);
|
widget_add_child(g, line, w, -1);
|
||||||
xy_plot_set_range(g, w, -1000, 1000, -1000, 1000);
|
xy_plot_set_range(g, w, -1000, 1000, -1000, 1000);
|
||||||
xy_plot_set_title(g, w, "rxdataF");
|
|
||||||
l = new_iqlog_full(h, database, "GNB_PHY_PUCCH_PUSCH_IQ", "rxdataF");
|
l = new_iqlog_full(h, database, "GNB_PHY_PUCCH_PUSCH_IQ", "rxdataF");
|
||||||
v = new_view_xy(300*12*14,10,g,w,new_color(g,"#000"),XY_FORCED_MODE);
|
v = new_view_xy(300*12*14,10,g,w,new_color(g,"#000"),XY_FORCED_MODE);
|
||||||
logger_add_view(l, v);
|
logger_add_view(l, v);
|
||||||
e->pucch_pusch_iq_logger = l;
|
e->pucch_pusch_iq_logger = l;
|
||||||
|
|
||||||
|
/* UL channel estimation in frequency domain */
|
||||||
|
w = new_xy_plot(g, 490, 200, "", 50);
|
||||||
|
e->ul_freq_estimate_ue_xy_plot = w;
|
||||||
|
widget_add_child(g, line, w, -1);
|
||||||
|
xy_plot_set_range(g, w, 0, 2048, -10, 80);
|
||||||
|
l = new_framelog(h, database, "GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE", "subframe", "chest_t");
|
||||||
|
framelog_set_update_only_at_sf9(l, 0);
|
||||||
|
v = new_view_xy(2048, 10, g, w, new_color(g, "#0c0c72"), XY_LOOP_MODE);
|
||||||
|
logger_add_view(l, v);
|
||||||
|
e->ul_freq_estimate_ue_logger = l;
|
||||||
|
|
||||||
|
/* UL channel estimation in time domain */
|
||||||
|
w = new_xy_plot(g, 490, 200, "", 50);
|
||||||
|
e->ul_time_estimate_ue_xy_plot = w;
|
||||||
|
widget_add_child(g, line, w, -1);
|
||||||
|
xy_plot_set_range(g, w, 0, 2048, -10, 80);
|
||||||
|
l = new_framelog(h, database, "GNB_PHY_UL_TIME_CHANNEL_ESTIMATE", "subframe", "chest_t");
|
||||||
|
framelog_set_update_only_at_sf9(l, 0);
|
||||||
|
v = new_view_xy(2048, 10, g, w, new_color(g, "#0c0c72"), XY_LOOP_MODE);
|
||||||
|
logger_add_view(l, v);
|
||||||
|
e->ul_time_estimate_ue_logger = l;
|
||||||
|
|
||||||
|
set_current_ue(g, ed, ed->ue);
|
||||||
|
register_notifier(g, "click", e->current_ue_button, click, ed);
|
||||||
|
register_notifier(g, "click", e->prev_ue_button, click, ed);
|
||||||
|
register_notifier(g, "click", e->next_ue_button, click, ed);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int n, char **v)
|
int main(int n, char **v)
|
||||||
@@ -136,7 +249,11 @@ int main(int n, char **v)
|
|||||||
h = new_handler(database);
|
h = new_handler(database);
|
||||||
|
|
||||||
on_off(database, "GNB_PHY_PUCCH_PUSCH_IQ", is_on, 1);
|
on_off(database, "GNB_PHY_PUCCH_PUSCH_IQ", is_on, 1);
|
||||||
|
on_off(database, "GNB_PHY_UL_FREQ_CHANNEL_ESTIMATE", is_on, 1);
|
||||||
|
on_off(database, "GNB_PHY_UL_TIME_CHANNEL_ESTIMATE", is_on, 1);
|
||||||
|
|
||||||
|
gnb_data.ue = 0;
|
||||||
|
gnb_data.e = ⪚
|
||||||
gnb_data.database = database;
|
gnb_data.database = database;
|
||||||
gnb_data.socket = -1;
|
gnb_data.socket = -1;
|
||||||
gnb_data.is_on = is_on;
|
gnb_data.is_on = is_on;
|
||||||
|
|||||||
@@ -362,6 +362,16 @@ void nr_dl_retx(void *_d, event e)
|
|||||||
e.e[d->nr_dl_retx_data].bsize, NO_PREAMBLE);
|
e.e[d->nr_dl_retx_data].bsize, NO_PREAMBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nr_dl_retx(void *_d, event e)
|
||||||
|
{
|
||||||
|
ev_data *d = _d;
|
||||||
|
|
||||||
|
trace_nr(d, NR_DIRECTION_DOWNLINK, NR_C_RNTI, e.e[d->nr_dl_retx_rnti].i,
|
||||||
|
e.e[d->nr_dl_retx_frame].i, e.e[d->nr_dl_retx_slot].i,
|
||||||
|
e.e[d->nr_dl_retx_data].b, e.e[d->nr_dl_retx_data].bsize,
|
||||||
|
NO_PREAMBLE);
|
||||||
|
}
|
||||||
|
|
||||||
void nr_mib(void *_d, event e)
|
void nr_mib(void *_d, event e)
|
||||||
{
|
{
|
||||||
ev_data *d = _d;
|
ev_data *d = _d;
|
||||||
@@ -396,6 +406,7 @@ void setup_data(ev_data *d, void *database, int ul_id, int dl_id, int mib_id,
|
|||||||
{
|
{
|
||||||
database_event_format f;
|
database_event_format f;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
d->ul_rnti = -1;
|
d->ul_rnti = -1;
|
||||||
d->ul_frame = -1;
|
d->ul_frame = -1;
|
||||||
d->ul_subframe = -1;
|
d->ul_subframe = -1;
|
||||||
@@ -568,6 +579,20 @@ void setup_data(ev_data *d, void *database, int ul_id, int dl_id, int mib_id,
|
|||||||
d->nr_dl_retx_data == -1)
|
d->nr_dl_retx_data == -1)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
/* NR dl retx: rnti, frame, slot, data */
|
||||||
|
f = get_format(database, nr_dl_retx_id);
|
||||||
|
|
||||||
|
for (i = 0; i < f.count; i++) {
|
||||||
|
G("rnti", "int", d->nr_dl_retx_rnti);
|
||||||
|
G("frame", "int", d->nr_dl_retx_frame);
|
||||||
|
G("slot", "int", d->nr_dl_retx_slot);
|
||||||
|
G("data", "buffer", d->nr_dl_retx_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d->nr_dl_retx_rnti == -1 || d->nr_dl_retx_frame == -1 ||
|
||||||
|
d->nr_dl_retx_slot == -1 || d->nr_dl_retx_data == -1)
|
||||||
|
goto error;
|
||||||
|
|
||||||
/* NR MIB: frame, slot, data */
|
/* NR MIB: frame, slot, data */
|
||||||
f = get_format(database, nr_mib_id);
|
f = get_format(database, nr_mib_id);
|
||||||
|
|
||||||
|
|||||||
@@ -500,6 +500,12 @@ int get_subband_size(int NPRB,int size) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// from start symbol index and nb or symbols to symbol occupation bitmap in a slot
|
||||||
|
uint16_t SL_to_bitmap(int startSymbolIndex, int nrOfSymbols) {
|
||||||
|
return ((1<<nrOfSymbols)-1)<<startSymbolIndex;
|
||||||
|
}
|
||||||
|
|
||||||
int get_SLIV(uint8_t S, uint8_t L) {
|
int get_SLIV(uint8_t S, uint8_t L) {
|
||||||
return ( (uint16_t)(((L-1)<=7)? (14*(L-1)+S) : (14*(15-L)+(13-S))) );
|
return ( (uint16_t)(((L-1)<=7)? (14*(L-1)+S) : (14*(15-L)+(13-S))) );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,7 +78,9 @@ uint32_t nr_get_code_rate(uint8_t Imcs, uint8_t table_idx);
|
|||||||
int get_subband_size(int NPRB,int size);
|
int get_subband_size(int NPRB,int size);
|
||||||
void SLIV2SL(int SLIV,int *S,int *L);
|
void SLIV2SL(int SLIV,int *S,int *L);
|
||||||
int get_dmrs_port(int nl, uint16_t dmrs_ports);
|
int get_dmrs_port(int nl, uint16_t dmrs_ports);
|
||||||
|
uint16_t SL_to_bitmap(int startSymbolIndex, int nrOfSymbols);
|
||||||
int get_nb_periods_per_frame(uint8_t tdd_period);
|
int get_nb_periods_per_frame(uint8_t tdd_period);
|
||||||
|
long rrc_get_max_nr_csrs(uint8_t max_rbs, long b_SRS);
|
||||||
|
|
||||||
#define CEILIDIV(a,b) ((a+b-1)/b)
|
#define CEILIDIV(a,b) ((a+b-1)/b)
|
||||||
#define ROUNDIDIV(a,b) (((a<<1)+b)/(b<<1))
|
#define ROUNDIDIV(a,b) (((a<<1)+b)/(b<<1))
|
||||||
|
|||||||
@@ -106,12 +106,13 @@
|
|||||||
{"phy_proc", &(UE->phy_proc[0]),0,RX_NB_TH},\
|
{"phy_proc", &(UE->phy_proc[0]),0,RX_NB_TH},\
|
||||||
{"phy_proc_rx", &(UE-> phy_proc_rx[0]),0,RX_NB_TH},\
|
{"phy_proc_rx", &(UE-> phy_proc_rx[0]),0,RX_NB_TH},\
|
||||||
{"phy_proc_tx", &(UE->phy_proc_tx),0,1},\
|
{"phy_proc_tx", &(UE->phy_proc_tx),0,1},\
|
||||||
|
{"ue_ul_indication_stats", &(UE->ue_ul_indication_stats),0,1},\
|
||||||
{"ofdm_mod_stats", &(UE->ofdm_mod_stats),0,1},\
|
{"ofdm_mod_stats", &(UE->ofdm_mod_stats),0,1},\
|
||||||
{"ulsch_encoding_stats", &(UE->ulsch_encoding_stats),0,1},\
|
{"ulsch_encoding_stats", &(UE->ulsch_encoding_stats),0,1},\
|
||||||
{"ulsch_modulation_stats", &(UE->ulsch_modulation_stats),0,1},\
|
{"ulsch_modulation_stats", &(UE->ulsch_modulation_stats),0,1},\
|
||||||
{"ulsch_segmentation_stats", &(UE->ulsch_segmentation_stats),0,1},\
|
{"ulsch_segmentation_stats", &(UE->ulsch_segmentation_stats),0,1},\
|
||||||
{"ulsch_rate_matching_stats", &(UE->ulsch_rate_matching_stats),0,1},\
|
{"ulsch_rate_matching_stats", &(UE->ulsch_rate_matching_stats),0,1},\
|
||||||
{"ulsch_turbo_encoding_stats", &(UE->ulsch_turbo_encoding_stats),0,1},\
|
{"ulsch_ldpc_encoding_stats", &(UE->ulsch_ldpc_encoding_stats),0,1},\
|
||||||
{"ulsch_interleaving_stats", &(UE->ulsch_interleaving_stats),0,1},\
|
{"ulsch_interleaving_stats", &(UE->ulsch_interleaving_stats),0,1},\
|
||||||
{"ulsch_multiplexing_stats", &(UE->ulsch_multiplexing_stats),0,1},\
|
{"ulsch_multiplexing_stats", &(UE->ulsch_multiplexing_stats),0,1},\
|
||||||
{"generic_stat", &(UE->generic_stat),0,1},\
|
{"generic_stat", &(UE->generic_stat),0,1},\
|
||||||
@@ -123,12 +124,12 @@
|
|||||||
{"dlsch_f...timation_stats", &(UE->dlsch_freq_offset_estimation_stats),0,1},\
|
{"dlsch_f...timation_stats", &(UE->dlsch_freq_offset_estimation_stats),0,1},\
|
||||||
{"dlsch_demodulation_stats", &(UE->dlsch_demodulation_stats),0,1},\
|
{"dlsch_demodulation_stats", &(UE->dlsch_demodulation_stats),0,1},\
|
||||||
{"dlsch_rate_unmatching_stats", &(UE->dlsch_rate_unmatching_stats),0,1},\
|
{"dlsch_rate_unmatching_stats", &(UE->dlsch_rate_unmatching_stats),0,1},\
|
||||||
{"dlsch_turbo_decoding_stats", &(UE->dlsch_turbo_decoding_stats),0,1},\
|
{"dlsch_ldpc_decoding_stats", &(UE->dlsch_ldpc_decoding_stats),0,1},\
|
||||||
{"dlsch_deinterleaving_stats", &(UE->dlsch_deinterleaving_stats),0,1},\
|
{"dlsch_deinterleaving_stats", &(UE->dlsch_deinterleaving_stats),0,1},\
|
||||||
{"dlsch_llr_stats", &(UE->dlsch_llr_stats),0,1},\
|
{"dlsch_llr_stats", &(UE->dlsch_llr_stats),0,1},\
|
||||||
{"dlsch_unscrambling_stats", &(UE->dlsch_unscrambling_stats),0,1},\
|
{"dlsch_unscrambling_stats", &(UE->dlsch_unscrambling_stats),0,1},\
|
||||||
{"dlsch_rate_matching_stats", &(UE->dlsch_rate_matching_stats),0,1},\
|
{"dlsch_rate_matching_stats", &(UE->dlsch_rate_matching_stats),0,1},\
|
||||||
{"dlsch_turbo_encoding_stats", &(UE->dlsch_turbo_encoding_stats),0,1},\
|
{"dlsch_ldpc_encoding_stats", &(UE->dlsch_ldpc_encoding_stats),0,1},\
|
||||||
{"dlsch_interleaving_stats", &(UE->dlsch_interleaving_stats),0,1},\
|
{"dlsch_interleaving_stats", &(UE->dlsch_interleaving_stats),0,1},\
|
||||||
{"dlsch_tc_init_stats", &(UE->dlsch_tc_init_stats),0,1},\
|
{"dlsch_tc_init_stats", &(UE->dlsch_tc_init_stats),0,1},\
|
||||||
{"dlsch_tc_alpha_stats", &(UE->dlsch_tc_alpha_stats),0,1},\
|
{"dlsch_tc_alpha_stats", &(UE->dlsch_tc_alpha_stats),0,1},\
|
||||||
@@ -146,6 +147,7 @@
|
|||||||
{"ue_front_end_stat", &(UE->ue_front_end_stat[0]),0,RX_NB_TH},\
|
{"ue_front_end_stat", &(UE->ue_front_end_stat[0]),0,RX_NB_TH},\
|
||||||
{"ue_front_end_per_slot_stat", &(UE->ue_front_end_per_slot_stat[0][0]),0,RX_NB_TH,LTE_SLOTS_PER_SUBFRAME},\
|
{"ue_front_end_per_slot_stat", &(UE->ue_front_end_per_slot_stat[0][0]),0,RX_NB_TH,LTE_SLOTS_PER_SUBFRAME},\
|
||||||
{"pdcch_procedures_stat", &(UE->pdcch_procedures_stat[0]),0,RX_NB_TH},\
|
{"pdcch_procedures_stat", &(UE->pdcch_procedures_stat[0]),0,RX_NB_TH},\
|
||||||
|
{"rx_pdsch_stats", &(UE->rx_pdsch_stats), 0, 1}, \
|
||||||
{"pdsch_procedures_stat", &(UE->pdsch_procedures_stat[0]),0,RX_NB_TH},\
|
{"pdsch_procedures_stat", &(UE->pdsch_procedures_stat[0]),0,RX_NB_TH},\
|
||||||
{"pdsch_procedures_per_slot_stat", &(UE->pdsch_procedures_per_slot_stat[0][0]),0,RX_NB_TH,LTE_SLOTS_PER_SUBFRAME},\
|
{"pdsch_procedures_per_slot_stat", &(UE->pdsch_procedures_per_slot_stat[0][0]),0,RX_NB_TH,LTE_SLOTS_PER_SUBFRAME},\
|
||||||
{"dlsch_procedures_stat", &(UE->dlsch_procedures_stat[0]),0,RX_NB_TH},\
|
{"dlsch_procedures_stat", &(UE->dlsch_procedures_stat[0]),0,RX_NB_TH},\
|
||||||
|
|||||||
+1
-1
@@ -60,7 +60,7 @@ cd cmake_targets/
|
|||||||
./build_oai -I --phy_simulators
|
./build_oai -I --phy_simulators
|
||||||
```
|
```
|
||||||
|
|
||||||
After completing the build, the binaries are available in the cmake_targets/phy_simulators/build directory.
|
After completing the build, the binaries are available in the cmake_targets/ran_build/build directory.
|
||||||
A copy is also available in the target/bin directory, with all binaries suffixed by the 3GPP release number, today **.Rel15**.
|
A copy is also available in the target/bin directory, with all binaries suffixed by the 3GPP release number, today **.Rel15**.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+17
-8
@@ -294,6 +294,10 @@ The following features are valid for the gNB and the 5G-NR UE.
|
|||||||
* NR-PUCCH
|
* NR-PUCCH
|
||||||
- Format 0 (2 bits, for ACK/NACK and SR)
|
- Format 0 (2 bits, for ACK/NACK and SR)
|
||||||
- Format 2 (up to 11 bits, mainly for CSI feedback)
|
- Format 2 (up to 11 bits, mainly for CSI feedback)
|
||||||
|
* NR-SRS
|
||||||
|
- SRS signal reception
|
||||||
|
- Channel estimation (with T tracer real time monitoring)
|
||||||
|
- Power noise estimation
|
||||||
* NR-PRACH
|
* NR-PRACH
|
||||||
- Formats 0,1,2,3, A1-A3, B1-B3
|
- Formats 0,1,2,3, A1-A3, B1-B3
|
||||||
* Highly efficient 3GPP compliant LDPC encoder and decoder (BG1 and BG2 are supported)
|
* Highly efficient 3GPP compliant LDPC encoder and decoder (BG1 and BG2 are supported)
|
||||||
@@ -322,6 +326,8 @@ The following features are valid for the gNB and the 5G-NR UE.
|
|||||||
- phy-test scheduler (fixed allocation)
|
- phy-test scheduler (fixed allocation)
|
||||||
- regular scheduler with dynamic allocation
|
- regular scheduler with dynamic allocation
|
||||||
- HARQ procedures for uplink
|
- HARQ procedures for uplink
|
||||||
|
- Scheduler procedures for SRS reception
|
||||||
|
- Periodic SRS reception
|
||||||
- MAC procedures to handle CSI measurement report
|
- MAC procedures to handle CSI measurement report
|
||||||
- evalution of RSRP report
|
- evalution of RSRP report
|
||||||
- evaluation of CQI report
|
- evaluation of CQI report
|
||||||
@@ -433,11 +439,12 @@ The following features are valid for the gNB and the 5G-NR UE.
|
|||||||
- Format 0 (2 bits for ACK/NACK and SR)
|
- Format 0 (2 bits for ACK/NACK and SR)
|
||||||
- Format 2 (up to 64 bits, mainly for CSI feedback)
|
- Format 2 (up to 64 bits, mainly for CSI feedback)
|
||||||
- Format 1, 3 and 4 present but old code never dested (need restructuring before verification)
|
- Format 1, 3 and 4 present but old code never dested (need restructuring before verification)
|
||||||
* NR-PRACH
|
* NR-SRS
|
||||||
|
- Generation of sequence at PHY
|
||||||
|
- SRS signal transmission
|
||||||
|
* NR-PRACH
|
||||||
- Formats 0,1,2,3, A1-A3, B1-B3
|
- Formats 0,1,2,3, A1-A3, B1-B3
|
||||||
* NR-SRS
|
* SS-RSRP
|
||||||
- Old code never dested (need restructuring before verification)
|
|
||||||
* SS-RSRP
|
|
||||||
- RSRP measured on synchronization SSB (ok only for single SSB)
|
- RSRP measured on synchronization SSB (ok only for single SSB)
|
||||||
* Highly efficient 3GPP compliant LDPC encoder and decoder (BG1 and BG2 are supported)
|
* Highly efficient 3GPP compliant LDPC encoder and decoder (BG1 and BG2 are supported)
|
||||||
* Highly efficient 3GPP compliant polar encoder and decoder
|
* Highly efficient 3GPP compliant polar encoder and decoder
|
||||||
@@ -452,21 +459,21 @@ The following features are valid for the gNB and the 5G-NR UE.
|
|||||||
## NR UE Higher Layers ##
|
## NR UE Higher Layers ##
|
||||||
|
|
||||||
**UE MAC**
|
**UE MAC**
|
||||||
* Minimum system information (MSI)
|
* Minimum system information (MSI)
|
||||||
- MIB processing
|
- MIB processing
|
||||||
- Scheduling of system information block 1 (SIB1) reception
|
- Scheduling of system information block 1 (SIB1) reception
|
||||||
* Random access procedure (needs improvement, there is still not a clear separation between MAC and PHY)
|
* Random access procedure (needs improvement, there is still not a clear separation between MAC and PHY)
|
||||||
- Mapping SSBs to multiple ROs
|
- Mapping SSBs to multiple ROs
|
||||||
- Scheduling of PRACH
|
- Scheduling of PRACH
|
||||||
- Processing of RAR
|
- Processing of RAR
|
||||||
- Transmission and re-transmission of Msg3
|
- Transmission and re-transmission of Msg3
|
||||||
- Msg4 and contention resolution
|
- Msg4 and contention resolution
|
||||||
* DCI processing
|
* DCI processing
|
||||||
- format 10 (RA-RNTI, C-RNTI, SI-RNTI, TC-RNTI)
|
- format 10 (RA-RNTI, C-RNTI, SI-RNTI, TC-RNTI)
|
||||||
- format 00 (C-RNTI, TC-RNTI)
|
- format 00 (C-RNTI, TC-RNTI)
|
||||||
- format 11 (C-RNTI)
|
- format 11 (C-RNTI)
|
||||||
- format 01 (C-RNTI)
|
- format 01 (C-RNTI)
|
||||||
* UCI processing
|
* UCI processing
|
||||||
- ACK/NACK processing
|
- ACK/NACK processing
|
||||||
- Triggering periodic SR
|
- Triggering periodic SR
|
||||||
- CSI measurement reporting (SSB RSRP only)
|
- CSI measurement reporting (SSB RSRP only)
|
||||||
@@ -475,6 +482,8 @@ The following features are valid for the gNB and the 5G-NR UE.
|
|||||||
- HARQ procedures
|
- HARQ procedures
|
||||||
* ULSCH scheduler
|
* ULSCH scheduler
|
||||||
- Configuration of fapi PDU according to DCI
|
- Configuration of fapi PDU according to DCI
|
||||||
|
* Scheduler procedures for SRS transmission
|
||||||
|
- Periodic SRS transmission
|
||||||
|
|
||||||
|
|
||||||
**UE RLC**
|
**UE RLC**
|
||||||
|
|||||||
+10
-2
@@ -89,6 +89,8 @@ At the UE the --phy-test flag will
|
|||||||
|
|
||||||
```bash sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --phy-test```
|
```bash sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --phy-test```
|
||||||
|
|
||||||
|
In phy-test mode it is possible to mimic the reception of UE Capabilities at gNB by passing through the command line parameter `--uecap_file` the location and file name of the input UE Capability file, e.g. `--uecap_file ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml`
|
||||||
|
|
||||||
### Launch UE in another window
|
### Launch UE in another window
|
||||||
|
|
||||||
```bash sudo ./nr-uesoftmodem --phy-test [--rrc_config_path ../../../ci-scripts/rrc-files]```
|
```bash sudo ./nr-uesoftmodem --phy-test [--rrc_config_path ../../../ci-scripts/rrc-files]```
|
||||||
@@ -122,6 +124,8 @@ gNB on machine 1:
|
|||||||
|
|
||||||
`sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --do-ra`
|
`sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --do-ra`
|
||||||
|
|
||||||
|
In do-ra mode it is possible to mimic the reception of UE Capabilities at gNB by passing through the command line parameter `--uecap_file` the location and file name of the input UE Capability file, e.g. `--uecap_file ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml`
|
||||||
|
|
||||||
UE on machine 2:
|
UE on machine 2:
|
||||||
|
|
||||||
`sudo ./nr-uesoftmodem --do-ra`
|
`sudo ./nr-uesoftmodem --do-ra`
|
||||||
@@ -161,13 +165,17 @@ gNB on machine 1:
|
|||||||
|
|
||||||
UE on machine 2:
|
UE on machine 2:
|
||||||
|
|
||||||
`sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --sa`
|
`sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 -s 516 --sa`
|
||||||
|
|
||||||
With the RF simulator (on the same machine):
|
With the RF simulator (on the same machine):
|
||||||
|
|
||||||
`sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --rfsim --sa`
|
`sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --rfsim --sa`
|
||||||
|
|
||||||
`sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --sa`
|
`sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 -s 516 --rfsim --sa`
|
||||||
|
|
||||||
|
where `-r` sets the transmission bandwidth configuration in terms of RBs, `-C` sets the downlink carrier frequency and `-s` sets the SSB start subcarrier.
|
||||||
|
|
||||||
|
Additionally, at UE side `--uecap_file` option can be used to pass the UE Capabilities input file (path location + filename), e.g. `--uecap_file ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml`
|
||||||
|
|
||||||
## IF setup with OAI
|
## IF setup with OAI
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
A[ru_thread] --> RFin>block rx_rf] --> feprx
|
||||||
|
feprx --> half-slot --> end_feprx
|
||||||
|
feprx --> second-thread -- block_end_feprx --> end_feprx>feprx]
|
||||||
|
end_feprx --> rx_nr_prach_ru
|
||||||
|
rx_nr_prach_ru -- block_queue_singleton --> resp_L1>resp L1]
|
||||||
|
resp_L1 -- async launch --> rx_func
|
||||||
|
resp_L1 -- immediate return --> RFin
|
||||||
|
|
||||||
|
subgraph rxfunc
|
||||||
|
rx_func_implem[rx_func]
|
||||||
|
subgraph rxfuncbeg
|
||||||
|
handle_nr_slot_ind
|
||||||
|
--> rnti_to_remove-mgmt
|
||||||
|
--> L1_nr_prach_procedures
|
||||||
|
--> apply_nr_rotation_ul
|
||||||
|
end
|
||||||
|
subgraph phy_procedures_gNB_uespec_RX
|
||||||
|
fill_ul_rb_mask
|
||||||
|
--> pucch(decode each gNB->pucch)
|
||||||
|
-->nr_fill_ul_indication
|
||||||
|
--> nr_ulsch_procedures
|
||||||
|
--> nr_ulsch_decoding
|
||||||
|
--> segInParallel[[all segments decode in parallel]]
|
||||||
|
--> barrier_end_of_ulsch_decoding
|
||||||
|
end
|
||||||
|
subgraph NR_UL_indication
|
||||||
|
handle_nr_rach
|
||||||
|
--> handle_nr_uci
|
||||||
|
--> handle_nr_ulsch
|
||||||
|
subgraph gNB_dlsch_ulsch_scheduler
|
||||||
|
run_pdcp
|
||||||
|
--> nr_rrc_trigger
|
||||||
|
--> schedule_xxxx
|
||||||
|
end
|
||||||
|
handle_nr_ulsch --> gNB_dlsch_ulsch_scheduler
|
||||||
|
subgraph NR_Schedule_response
|
||||||
|
L1_tx_free3>L1_tx_free]
|
||||||
|
--> handle_nr_nfapi_xxx_pdu
|
||||||
|
--> sendTxFilled((L1_tx_filled))
|
||||||
|
--> nr_fill_ul_xxx
|
||||||
|
--> nr_fill_prach
|
||||||
|
end
|
||||||
|
gNB_dlsch_ulsch_scheduler --> NR_Schedule_response
|
||||||
|
end
|
||||||
|
rx_func_implem --> rxfuncbeg
|
||||||
|
rxfuncbeg --> phy_procedures_gNB_uespec_RX
|
||||||
|
phy_procedures_gNB_uespec_RX --> NR_UL_indication
|
||||||
|
-- block_queue_block_PNF_monolithic --> L1_tx_free2>L1 tx filled]
|
||||||
|
-- async launch --> tx_func
|
||||||
|
L1_tx_free2 -- send_msg --> rsp((resp_L1))
|
||||||
|
end
|
||||||
|
rx_func --> rxfunc
|
||||||
|
|
||||||
|
|
||||||
|
subgraph tx_func
|
||||||
|
direction LR
|
||||||
|
subgraph phy_procedures_gNB_TX
|
||||||
|
dcitop[nr_generate dci top]
|
||||||
|
--> nr_generate_csi_rs
|
||||||
|
--> apply_nr_rotation
|
||||||
|
-- send_msg --> end_tx_func((L1_tx_out))
|
||||||
|
end
|
||||||
|
subgraph tx_reorder_thread
|
||||||
|
L1_tx_out>L1_tx_out]
|
||||||
|
--> reorder{re order} --> reorder
|
||||||
|
reorder --> ru_tx_func
|
||||||
|
reorder --> L1_tx_free((L1_tx_free))
|
||||||
|
ru_tx_func --> feptx_prec
|
||||||
|
--> feptx_ofdm
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
```
|
||||||
@@ -17,6 +17,70 @@ body {
|
|||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TB
|
||||||
|
A[ru_thread] --> RFin>block rx_rf] --> feprx
|
||||||
|
feprx --> half-slot --> end_feprx
|
||||||
|
feprx --> second-thread -- block_end_feprx --> end_feprx>feprx]
|
||||||
|
end_feprx --> rx_nr_prach_ru
|
||||||
|
rx_nr_prach_ru -- block_queue --> resp_L1>resp L1]
|
||||||
|
resp_L1 -- async launch --> rx_func
|
||||||
|
resp_L1 -- immediate return --> RFin
|
||||||
|
|
||||||
|
subgraph rxfunc
|
||||||
|
rx_func_implem[rx_func]
|
||||||
|
subgraph rxfuncbeg
|
||||||
|
handle_nr_slot_ind
|
||||||
|
--> rnti_to_remove-mgmt
|
||||||
|
--> L1_nr_prach_procedures
|
||||||
|
--> apply_nr_rotation_ul
|
||||||
|
end
|
||||||
|
subgraph phy_procedures_gNB_uespec_RX
|
||||||
|
fill_ul_rb_mask
|
||||||
|
--> pucch(decode each gNB->pucch)
|
||||||
|
-->nr_fill_ul_indication
|
||||||
|
--> nr_ulsch_procedures
|
||||||
|
--> nr_ulsch_decoding
|
||||||
|
--> segInParallel[[all segments decode in parallel]]
|
||||||
|
--> barrier_end_of_ulsch_decoding
|
||||||
|
end
|
||||||
|
subgraph NR_UL_indication
|
||||||
|
handle_nr_rach
|
||||||
|
--> handle_nr_uci
|
||||||
|
--> handle_nr_ulsch
|
||||||
|
--> gNB_dlsch_ulsch_scheduler
|
||||||
|
--> NR_Schedule_response
|
||||||
|
end
|
||||||
|
rx_func_implem --> rxfuncbeg
|
||||||
|
rxfuncbeg --> phy_procedures_gNB_uespec_RX
|
||||||
|
phy_procedures_gNB_uespec_RX --> NR_UL_indication
|
||||||
|
-- block_queue --> L1_tx_free2>L1 tx free]
|
||||||
|
-- async launch --> tx_func
|
||||||
|
L1_tx_free2 -- send_msg --> rsp((resp_L1))
|
||||||
|
end
|
||||||
|
rx_func --> rxfunc
|
||||||
|
|
||||||
|
|
||||||
|
subgraph tx
|
||||||
|
direction LR
|
||||||
|
subgraph tx_func2
|
||||||
|
phy_procedures_gNB_TX
|
||||||
|
--> dcitop[nr_generate dci top]
|
||||||
|
--> nr_generate_csi_rs
|
||||||
|
--> apply_nr_rotation
|
||||||
|
-- send_msg --> end_tx_func((L1_tx_out))
|
||||||
|
end
|
||||||
|
subgraph tx_reorder_thread
|
||||||
|
L1_tx_out>L1_tx_out]
|
||||||
|
--> reorder{re order} --> reorder
|
||||||
|
reorder --> ru_tx_func
|
||||||
|
reorder --> L1_tx_free((L1_tx_free))
|
||||||
|
ru_tx_func --> feptx_prec
|
||||||
|
--> feptx_ofdm
|
||||||
|
end
|
||||||
|
tx_func2 --> tx_reorder_thread
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
This tuto for 5G gNB design, with Open Cells main
|
This tuto for 5G gNB design, with Open Cells main
|
||||||
{: .text-center}
|
{: .text-center}
|
||||||
|
|||||||
@@ -35,4 +35,4 @@ COPY . .
|
|||||||
RUN /bin/sh oaienv && \
|
RUN /bin/sh oaienv && \
|
||||||
cd cmake_targets && \
|
cd cmake_targets && \
|
||||||
mkdir -p log && \
|
mkdir -p log && \
|
||||||
./build_oai --eNB --gNB --RU --UE --nrUE --ninja -w USRP --verbose-ci
|
./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci
|
||||||
|
|||||||
@@ -35,4 +35,4 @@ COPY . .
|
|||||||
RUN /bin/sh oaienv && \
|
RUN /bin/sh oaienv && \
|
||||||
cd cmake_targets && \
|
cd cmake_targets && \
|
||||||
mkdir -p log && \
|
mkdir -p log && \
|
||||||
./build_oai --eNB --gNB --RU --UE --nrUE --ninja -w USRP --verbose-ci
|
./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci
|
||||||
|
|||||||
@@ -69,6 +69,8 @@ COPY --from=enb-build \
|
|||||||
/oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
|
/oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
|
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/liboai_iqplayer.so \
|
/oai-ran/cmake_targets/ran_build/build/liboai_iqplayer.so \
|
||||||
|
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
|
||||||
|
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv_enb.so \
|
||||||
/usr/local/lib/
|
/usr/local/lib/
|
||||||
|
|
||||||
COPY --from=enb-base \
|
COPY --from=enb-base \
|
||||||
|
|||||||
@@ -76,6 +76,8 @@ COPY --from=enb-build \
|
|||||||
/oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
|
/oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
|
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/liboai_iqplayer.so \
|
/oai-ran/cmake_targets/ran_build/build/liboai_iqplayer.so \
|
||||||
|
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
|
||||||
|
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv_enb.so \
|
||||||
/usr/local/lib/
|
/usr/local/lib/
|
||||||
|
|
||||||
# Now we are copying from builder-image the UHD files.
|
# Now we are copying from builder-image the UHD files.
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ COPY --from=gnb-build \
|
|||||||
/oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
|
/oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
|
/oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
|
/oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
|
||||||
|
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
|
||||||
/usr/local/lib/
|
/usr/local/lib/
|
||||||
|
|
||||||
COPY --from=gnb-base \
|
COPY --from=gnb-base \
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ COPY --from=gnb-build \
|
|||||||
/oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
|
/oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
|
/oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
|
/oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
|
||||||
|
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
|
||||||
/usr/local/lib/
|
/usr/local/lib/
|
||||||
|
|
||||||
# Now we are copying from builder-image the UHD files.
|
# Now we are copying from builder-image the UHD files.
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ COPY --from=lte-ue-build \
|
|||||||
/oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
|
/oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libSIMU.so \
|
/oai-ran/cmake_targets/ran_build/build/libSIMU.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
|
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
|
||||||
|
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
|
||||||
/usr/local/lib/
|
/usr/local/lib/
|
||||||
|
|
||||||
COPY --from=lte-ue-base \
|
COPY --from=lte-ue-base \
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ COPY --from=lte-ue-build \
|
|||||||
/oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
|
/oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libSIMU.so \
|
/oai-ran/cmake_targets/ran_build/build/libSIMU.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
|
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
|
||||||
|
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
|
||||||
/usr/local/lib/
|
/usr/local/lib/
|
||||||
|
|
||||||
# Now we are copying from builder-image the UHD files.
|
# Now we are copying from builder-image the UHD files.
|
||||||
|
|||||||
@@ -76,6 +76,8 @@ COPY --from=nr-ue-build \
|
|||||||
/oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
|
/oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
|
/oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
|
/oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
|
||||||
|
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
|
||||||
|
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv_5Gue.so \
|
||||||
/usr/local/lib/
|
/usr/local/lib/
|
||||||
|
|
||||||
COPY --from=nr-ue-base \
|
COPY --from=nr-ue-base \
|
||||||
|
|||||||
@@ -81,6 +81,8 @@ COPY --from=nr-ue-build \
|
|||||||
/oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
|
/oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
|
/oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
|
||||||
/oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
|
/oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
|
||||||
|
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
|
||||||
|
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv_5Gue.so \
|
||||||
/usr/local/lib/
|
/usr/local/lib/
|
||||||
|
|
||||||
# Now we are copying from builder-image the UHD files.
|
# Now we are copying from builder-image the UHD files.
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user