Merge remote-tracking branch 'origin/develop' into F1_interop_ACC_n78
Conflicts: openair2/F1AP/f1ap_du_ue_context_management.c openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c openair2/RRC/NR/MESSAGES/asn1_msg.h openair2/RRC/NR/rrc_gNB.c openair3/ocp-gtpu/gtp_itf.cpp There were some important conflicts in openair3/ocp-gtpu/gtp_itf.cpp I rewrote a bit the function Gtpv1uHandleGpdu(). It might have been done wrongly. To be tested and fixed if needed. To redo the merge, if needed: git checkout9b2a163ebbgit merge5ea828e149
This commit is contained in:
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
|
|
||||||
image:
|
image:
|
||||||
registry: local
|
registry: local
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: temp
|
version: temp
|
||||||
# pullPolicy: IfNotPresent or Never or Always
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
|
|
||||||
image:
|
image:
|
||||||
registry: local
|
registry: local
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: temp
|
version: temp
|
||||||
# pullPolicy: IfNotPresent or Never or Always
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
|
|
||||||
image:
|
image:
|
||||||
registry: local
|
registry: local
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: temp
|
version: temp
|
||||||
# pullPolicy: IfNotPresent or Never or Always
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
|
|
||||||
image:
|
image:
|
||||||
registry: local
|
registry: local
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: temp
|
version: temp
|
||||||
# pullPolicy: IfNotPresent or Never or Always
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
|
|
||||||
image:
|
image:
|
||||||
registry: local
|
registry: local
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: temp
|
version: temp
|
||||||
# pullPolicy: IfNotPresent or Never or Always
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
|
|
||||||
image:
|
image:
|
||||||
registry: local
|
registry: local
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: temp
|
version: temp
|
||||||
# pullPolicy: IfNotPresent or Never or Always
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
|
|
||||||
image:
|
image:
|
||||||
registry: local
|
registry: local
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: temp
|
version: temp
|
||||||
# pullPolicy: IfNotPresent or Never or Always
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
|
|
||||||
image:
|
image:
|
||||||
registry: local
|
registry: local
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: temp
|
version: temp
|
||||||
# pullPolicy: IfNotPresent or Never or Always
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
|
|
||||||
image:
|
image:
|
||||||
registry: local
|
registry: local
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: temp
|
version: temp
|
||||||
# pullPolicy: IfNotPresent or Never or Always
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
|
|
||||||
image:
|
image:
|
||||||
registry: local
|
registry: local
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: temp
|
version: temp
|
||||||
# pullPolicy: IfNotPresent or Never or Always
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
|
|
||||||
image:
|
image:
|
||||||
registry: local
|
registry: local
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: temp
|
version: temp
|
||||||
# pullPolicy: IfNotPresent or Never or Always
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
|
|
||||||
image:
|
image:
|
||||||
registry: local
|
registry: local
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: temp
|
version: temp
|
||||||
# pullPolicy: IfNotPresent or Never or Always
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
|
|||||||
@@ -1,12 +1,26 @@
|
|||||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
kind: ClusterRoleBinding
|
kind: Role
|
||||||
metadata:
|
metadata:
|
||||||
name: {{ .Chart.Name }}-{{ .Values.global.namespace }}-rbac
|
name: {{ .Chart.Name }}-{{ .Release.Namespace }}-role
|
||||||
roleRef:
|
rules:
|
||||||
apiGroup: rbac.authorization.k8s.io
|
- apiGroups:
|
||||||
kind: ClusterRole
|
- security.openshift.io
|
||||||
name: cluster-admin
|
resourceNames:
|
||||||
|
- privileged
|
||||||
|
resources:
|
||||||
|
- securitycontextconstraints
|
||||||
|
verbs:
|
||||||
|
- use
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: {{ .Chart.Name }}-{{ .Release.Namespace }}-binding
|
||||||
subjects:
|
subjects:
|
||||||
- kind: ServiceAccount
|
- kind: ServiceAccount
|
||||||
name: {{ .Values.global.serviceAccountName }}
|
name: {{ .Values.global.serviceAccountName }}
|
||||||
namespace: {{ .Values.global.namespace }}
|
namespace: {{ .Release.Namespace }}
|
||||||
|
roleRef:
|
||||||
|
kind: Role
|
||||||
|
name: {{ .Chart.Name }}-{{ .Release.Namespace }}-role
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
|
|
||||||
global:
|
global:
|
||||||
serviceAccountName: oai-physim-sa
|
serviceAccountName: oai-physim-sa
|
||||||
namespace: "oaicicd-ran-tmp"
|
namespace: "OAICICD_PROJECT"
|
||||||
image:
|
image:
|
||||||
repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim
|
repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim
|
||||||
version: TAG
|
version: TAG
|
||||||
|
|
||||||
## Declaring values specific to coressponding physim to overwrite
|
## Declaring values specific to coressponding physim to overwrite
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ pipeline {
|
|||||||
when { expression {doMandatoryTests} }
|
when { expression {doMandatoryTests} }
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
triggerSlaveJob ('RAN-RF-Sim-Test-5G', 'Test-RF-Sim-Container-4G')
|
triggerSlaveJob ('RAN-RF-Sim-Test-5G', 'Test-RF-Sim-Container-5G')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
@@ -238,6 +238,26 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stage ("5G L2 Simulators") {
|
||||||
|
when { expression {doMandatoryTests} }
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
triggerSlaveJob ('RAN-L2-Sim-Test-5G', 'Test-L2-Sim-Container-5G')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
script {
|
||||||
|
finalizeSlaveJob('RAN-L2-Sim-Test-5G')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
failure {
|
||||||
|
script {
|
||||||
|
currentBuild.result = 'FAILURE'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
stage ("NSA B200 Sanity Check") {
|
stage ("NSA B200 Sanity Check") {
|
||||||
when { expression {doMandatoryTests} }
|
when { expression {doMandatoryTests} }
|
||||||
steps {
|
steps {
|
||||||
|
|||||||
@@ -26,6 +26,9 @@ def nodeExecutor = params.nodeExecutor
|
|||||||
// Name of the phone resource
|
// Name of the phone resource
|
||||||
def ciServerResource = params.serverResource
|
def ciServerResource = params.serverResource
|
||||||
|
|
||||||
|
// Docker Hub account to push to
|
||||||
|
def DH_Account = "oaisoftwarealliance"
|
||||||
|
|
||||||
pipeline {
|
pipeline {
|
||||||
agent {
|
agent {
|
||||||
label nodeExecutor
|
label nodeExecutor
|
||||||
@@ -55,7 +58,9 @@ pipeline {
|
|||||||
stage ("Push to DockerHub") {
|
stage ("Push to DockerHub") {
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
WEEK_TAG = sh returnStdout: true, script: 'date +"%Y.w%U"'
|
WEEK_REF = sh returnStdout: true, script: 'date +"%Y.w%V"'
|
||||||
|
WEEK_REF = WEEK_REF.trim()
|
||||||
|
WEEK_TAG = sh returnStdout: true, script: 'python3 ./ci-scripts/provideUniqueImageTag.py --start_tag ' + WEEK_REF
|
||||||
WEEK_TAG = WEEK_TAG.trim()
|
WEEK_TAG = WEEK_TAG.trim()
|
||||||
|
|
||||||
withCredentials([
|
withCredentials([
|
||||||
@@ -64,11 +69,11 @@ pipeline {
|
|||||||
def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue"]
|
def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue"]
|
||||||
sh "docker login -u ${DH_Username} -p ${DH_Password} > /dev/null 2>&1"
|
sh "docker login -u ${DH_Username} -p ${DH_Password} > /dev/null 2>&1"
|
||||||
listOfImages.eachWithIndex { item, iindex ->
|
listOfImages.eachWithIndex { item, iindex ->
|
||||||
sh "docker image tag ${item}:develop ${DH_Username}/${item}:develop"
|
sh "docker image tag ${item}:develop ${DH_Account}/${item}:develop"
|
||||||
sh "docker image tag ${item}:develop ${DH_Username}/${item}:${WEEK_TAG}"
|
sh "docker image tag ${item}:develop ${DH_Account}/${item}:${WEEK_TAG}"
|
||||||
sh "docker push --quiet ${DH_Username}/${item}:${WEEK_TAG}"
|
sh "docker push --quiet ${DH_Account}/${item}:${WEEK_TAG}"
|
||||||
sh "docker push --quiet ${DH_Username}/${item}:develop"
|
sh "docker push --quiet ${DH_Account}/${item}:develop"
|
||||||
sh "docker rmi ${DH_Username}/${item}:${WEEK_TAG} ${DH_Username}/${item}:develop"
|
sh "docker rmi ${DH_Account}/${item}:${WEEK_TAG} ${DH_Account}/${item}:develop"
|
||||||
}
|
}
|
||||||
sh "docker logout > /dev/null 2>&1"
|
sh "docker logout > /dev/null 2>&1"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,6 +113,21 @@ pipeline {
|
|||||||
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
|
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
|
||||||
echo GitPostArgs
|
echo GitPostArgs
|
||||||
|
|
||||||
|
//calling SA-AmariS
|
||||||
|
jobName = "RAN-SA-AmariS-CN5G"
|
||||||
|
jobStatus = build job: jobName, 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))
|
||||||
|
]
|
||||||
|
jobResult = jobStatus.getResult()
|
||||||
|
build_url = jobStatus.getAbsoluteUrl()
|
||||||
|
build_id = jobStatus.getNumber().toString()
|
||||||
|
GitPostArgs += jobName + ' ' + build_url + ' ' + build_id + ' ' + jobResult + ' '
|
||||||
|
echo GitPostArgs
|
||||||
|
|
||||||
//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: [
|
||||||
|
|||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
ue_id="$1" # UE id
|
||||||
|
duration="$2" # Sim duration
|
||||||
|
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
|
||||||
|
function end
|
||||||
|
{
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
trap end INT TERM
|
||||||
|
|
||||||
|
echo "ip netns exec $ue_id $@ > /tmp/test_${ue_id}.log"
|
||||||
|
ip netns exec $ue_id $@ > /tmp/test_$ue_id.log
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,172 @@
|
|||||||
|
/* UE simulator configuration */
|
||||||
|
|
||||||
|
|
||||||
|
/* UE simulator configuration file version 2021-06-17
|
||||||
|
* LTE / 5G Non StandAlone
|
||||||
|
* Copyright (C) 2019-2021 Amarisoft
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
#define N_ANTENNA_DL 1
|
||||||
|
#define TDD 1
|
||||||
|
#define CELL_BANDWIDTH 40
|
||||||
|
#define UE_COUNT 3 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129
|
||||||
|
|
||||||
|
|
||||||
|
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||||
|
log_filename: "/tmp/ue0.log",
|
||||||
|
|
||||||
|
/* Enable remote API and Web interface */
|
||||||
|
com_addr: "0.0.0.0:9002",
|
||||||
|
|
||||||
|
include "rf_driver/1chan.cfg",
|
||||||
|
|
||||||
|
/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */
|
||||||
|
|
||||||
|
cell_groups: [{
|
||||||
|
group_type: "nr",
|
||||||
|
multi_ue: true,
|
||||||
|
cells: [{
|
||||||
|
rf_port: 0,
|
||||||
|
bandwidth: CELL_BANDWIDTH,
|
||||||
|
#if TDD == 1
|
||||||
|
band: 78,
|
||||||
|
dl_nr_arfcn:621312,
|
||||||
|
ssb_nr_arfcn:621312,
|
||||||
|
|
||||||
|
//band: 41,
|
||||||
|
//dl_nr_arfcn:517020,
|
||||||
|
//ssb_nr_arfcn:516990,
|
||||||
|
#else
|
||||||
|
band: 7,
|
||||||
|
dl_nr_arfcn: 536020,
|
||||||
|
ssb_nr_arfcn: 535930,
|
||||||
|
ssb_subcarrier_spacing: 15,
|
||||||
|
#endif
|
||||||
|
subcarrier_spacing: 30,
|
||||||
|
n_antenna_dl: N_ANTENNA_DL,
|
||||||
|
n_antenna_ul: 1,
|
||||||
|
rx_to_tx_latency:2,
|
||||||
|
}],
|
||||||
|
}],
|
||||||
|
|
||||||
|
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_bind_addr: "127.0.10.11",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ue_list: [
|
||||||
|
{
|
||||||
|
/* UE capabilities */
|
||||||
|
/* USIM data */
|
||||||
|
"ue_id" : 0,
|
||||||
|
"imsi": "208970100001127",
|
||||||
|
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||||
|
"sim_algo":"milenage",
|
||||||
|
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||||
|
as_release: 15,
|
||||||
|
ue_category: "nr",
|
||||||
|
apn:"oai",
|
||||||
|
attach_pdn_type:"ipv4",
|
||||||
|
default_nssai: [
|
||||||
|
{
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
default_pdu_session_snssai: {
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_addr: "127.1.0.0",
|
||||||
|
/* Enable it to create a TUN interface for each UE PDN */
|
||||||
|
tun_setup_script: "ue-ifup",
|
||||||
|
sim_events: [
|
||||||
|
{
|
||||||
|
event: "power_on",
|
||||||
|
start_time: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: "power_off",
|
||||||
|
start_time: 30,
|
||||||
|
}
|
||||||
|
] /*end sim events */
|
||||||
|
}, /*end UE object 0*/
|
||||||
|
{
|
||||||
|
/* UE capabilities */
|
||||||
|
/* USIM data */
|
||||||
|
"ue_id" : 1,
|
||||||
|
"imsi": "208970100001128",
|
||||||
|
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||||
|
"sim_algo":"milenage",
|
||||||
|
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||||
|
as_release: 15,
|
||||||
|
ue_category: "nr",
|
||||||
|
apn:"oai",
|
||||||
|
attach_pdn_type:"ipv4",
|
||||||
|
default_nssai: [
|
||||||
|
{
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
default_pdu_session_snssai: {
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_addr: "127.1.0.0",
|
||||||
|
/* Enable it to create a TUN interface for each UE PDN */
|
||||||
|
tun_setup_script: "ue-ifup",
|
||||||
|
sim_events: [
|
||||||
|
{
|
||||||
|
event: "power_on",
|
||||||
|
start_time: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: "power_off",
|
||||||
|
start_time: 30,
|
||||||
|
}
|
||||||
|
] /*end sim events */
|
||||||
|
}, /*end UE object 1*/
|
||||||
|
{
|
||||||
|
/* UE capabilities */
|
||||||
|
/* USIM data */
|
||||||
|
"ue_id" : 2,
|
||||||
|
"imsi": "208970100001129",
|
||||||
|
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||||
|
"sim_algo":"milenage",
|
||||||
|
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||||
|
as_release: 15,
|
||||||
|
ue_category: "nr",
|
||||||
|
apn:"oai",
|
||||||
|
attach_pdn_type:"ipv4",
|
||||||
|
default_nssai: [
|
||||||
|
{
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
default_pdu_session_snssai: {
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_addr: "127.1.0.0",
|
||||||
|
/* Enable it to create a TUN interface for each UE PDN */
|
||||||
|
tun_setup_script: "ue-ifup",
|
||||||
|
sim_events: [
|
||||||
|
{
|
||||||
|
event: "power_on",
|
||||||
|
start_time: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: "power_off",
|
||||||
|
start_time: 30,
|
||||||
|
}
|
||||||
|
] /*end sim events */
|
||||||
|
} /*end UE object 2*/
|
||||||
|
],/*end UE list*/
|
||||||
|
}/*end json*/
|
||||||
|
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
/* UE simulator configuration */
|
||||||
|
|
||||||
|
|
||||||
|
/* UE simulator configuration file version 2021-06-17
|
||||||
|
* LTE / 5G Non StandAlone
|
||||||
|
* Copyright (C) 2019-2021 Amarisoft
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
#define N_ANTENNA_DL 1
|
||||||
|
#define TDD 1
|
||||||
|
#define CELL_BANDWIDTH 40
|
||||||
|
#define UE_COUNT 2 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129
|
||||||
|
|
||||||
|
|
||||||
|
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||||
|
log_filename: "/tmp/ue0.log",
|
||||||
|
|
||||||
|
/* Enable remote API and Web interface */
|
||||||
|
com_addr: "0.0.0.0:9002",
|
||||||
|
|
||||||
|
include "rf_driver/1chan.cfg",
|
||||||
|
|
||||||
|
/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */
|
||||||
|
|
||||||
|
cell_groups: [{
|
||||||
|
group_type: "nr",
|
||||||
|
multi_ue: true,
|
||||||
|
cells: [{
|
||||||
|
rf_port: 0,
|
||||||
|
bandwidth: CELL_BANDWIDTH,
|
||||||
|
#if TDD == 1
|
||||||
|
band: 78,
|
||||||
|
dl_nr_arfcn:621312,
|
||||||
|
ssb_nr_arfcn:621312,
|
||||||
|
|
||||||
|
//band: 41,
|
||||||
|
//dl_nr_arfcn:517020,
|
||||||
|
//ssb_nr_arfcn:516990,
|
||||||
|
#else
|
||||||
|
band: 7,
|
||||||
|
dl_nr_arfcn: 536020,
|
||||||
|
ssb_nr_arfcn: 535930,
|
||||||
|
ssb_subcarrier_spacing: 15,
|
||||||
|
#endif
|
||||||
|
subcarrier_spacing: 30,
|
||||||
|
n_antenna_dl: N_ANTENNA_DL,
|
||||||
|
n_antenna_ul: 1,
|
||||||
|
rx_to_tx_latency:2,
|
||||||
|
}],
|
||||||
|
}],
|
||||||
|
|
||||||
|
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_bind_addr: "127.0.10.11",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ue_list: [
|
||||||
|
{
|
||||||
|
/* UE capabilities */
|
||||||
|
/* USIM data */
|
||||||
|
"ue_id" : 1,
|
||||||
|
"imsi": "208970100001127",
|
||||||
|
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||||
|
"sim_algo":"milenage",
|
||||||
|
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||||
|
as_release: 15,
|
||||||
|
ue_category: "nr",
|
||||||
|
apn:"oai",
|
||||||
|
attach_pdn_type:"ipv4",
|
||||||
|
default_nssai: [
|
||||||
|
{
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
default_pdu_session_snssai: {
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_addr: "127.1.0.0",
|
||||||
|
/* Enable it to create a TUN interface for each UE PDN */
|
||||||
|
tun_setup_script: "ue-ifup",
|
||||||
|
sim_events: [
|
||||||
|
{
|
||||||
|
event: "power_on",
|
||||||
|
start_time: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: "power_off",
|
||||||
|
start_time: 30,
|
||||||
|
}
|
||||||
|
] /*end sim events */
|
||||||
|
}, /*end UE object 0*/
|
||||||
|
{
|
||||||
|
/* UE capabilities */
|
||||||
|
/* USIM data */
|
||||||
|
"ue_id" : 2,
|
||||||
|
"imsi": "208970100001128",
|
||||||
|
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||||
|
"sim_algo":"milenage",
|
||||||
|
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||||
|
as_release: 15,
|
||||||
|
ue_category: "nr",
|
||||||
|
apn:"oai",
|
||||||
|
attach_pdn_type:"ipv4",
|
||||||
|
default_nssai: [
|
||||||
|
{
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
default_pdu_session_snssai: {
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_addr: "127.1.0.0",
|
||||||
|
/* Enable it to create a TUN interface for each UE PDN */
|
||||||
|
tun_setup_script: "ue-ifup",
|
||||||
|
sim_events: [
|
||||||
|
{
|
||||||
|
event: "power_on",
|
||||||
|
start_time: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "ping",
|
||||||
|
"prog":"oai_ext_app.sh",
|
||||||
|
start_time: 15,
|
||||||
|
end_time: 25,
|
||||||
|
"args":["ping 192.168.70.136"],
|
||||||
|
"event":"ext_app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: "power_off",
|
||||||
|
start_time: 30,
|
||||||
|
}
|
||||||
|
] /*end sim events */
|
||||||
|
} /*end UE object 1*/
|
||||||
|
],/*end UE list*/
|
||||||
|
}/*end json*/
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
/* UE simulator configuration */
|
||||||
|
|
||||||
|
|
||||||
|
/* UE simulator configuration file version 2021-06-17
|
||||||
|
* LTE / 5G Non StandAlone
|
||||||
|
* Copyright (C) 2019-2021 Amarisoft
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
#define N_ANTENNA_DL 1
|
||||||
|
#define TDD 1
|
||||||
|
#define CELL_BANDWIDTH 40
|
||||||
|
#define UE_COUNT 2 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129
|
||||||
|
|
||||||
|
|
||||||
|
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||||
|
log_filename: "/tmp/ue0.log",
|
||||||
|
|
||||||
|
/* Enable remote API and Web interface */
|
||||||
|
com_addr: "0.0.0.0:9002",
|
||||||
|
|
||||||
|
include "rf_driver/1chan.cfg",
|
||||||
|
|
||||||
|
/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */
|
||||||
|
|
||||||
|
cell_groups: [{
|
||||||
|
group_type: "nr",
|
||||||
|
multi_ue: true,
|
||||||
|
cells: [{
|
||||||
|
rf_port: 0,
|
||||||
|
bandwidth: CELL_BANDWIDTH,
|
||||||
|
#if TDD == 1
|
||||||
|
band: 78,
|
||||||
|
dl_nr_arfcn:621312,
|
||||||
|
ssb_nr_arfcn:621312,
|
||||||
|
|
||||||
|
//band: 41,
|
||||||
|
//dl_nr_arfcn:517020,
|
||||||
|
//ssb_nr_arfcn:516990,
|
||||||
|
#else
|
||||||
|
band: 7,
|
||||||
|
dl_nr_arfcn: 536020,
|
||||||
|
ssb_nr_arfcn: 535930,
|
||||||
|
ssb_subcarrier_spacing: 15,
|
||||||
|
#endif
|
||||||
|
subcarrier_spacing: 30,
|
||||||
|
n_antenna_dl: N_ANTENNA_DL,
|
||||||
|
n_antenna_ul: 1,
|
||||||
|
rx_to_tx_latency:2,
|
||||||
|
}],
|
||||||
|
}],
|
||||||
|
|
||||||
|
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_bind_addr: "127.0.10.11",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ue_list: [
|
||||||
|
{
|
||||||
|
/* UE capabilities */
|
||||||
|
/* USIM data */
|
||||||
|
"ue_id" : 1,
|
||||||
|
"imsi": "208970100001127",
|
||||||
|
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||||
|
"sim_algo":"milenage",
|
||||||
|
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||||
|
as_release: 15,
|
||||||
|
ue_category: "nr",
|
||||||
|
apn:"oai",
|
||||||
|
attach_pdn_type:"ipv4",
|
||||||
|
default_nssai: [
|
||||||
|
{
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
default_pdu_session_snssai: {
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_addr: "127.1.0.0",
|
||||||
|
/* Enable it to create a TUN interface for each UE PDN */
|
||||||
|
tun_setup_script: "ue-ifup",
|
||||||
|
sim_events: [
|
||||||
|
{
|
||||||
|
event: "power_on",
|
||||||
|
start_time: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "ping",
|
||||||
|
"prog":"oai_ext_app.sh",
|
||||||
|
start_time: 15,
|
||||||
|
end_time: 25,
|
||||||
|
"args":["ping 192.168.70.136"],
|
||||||
|
"event":"ext_app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: "power_off",
|
||||||
|
start_time: 30,
|
||||||
|
}
|
||||||
|
] /*end sim events */
|
||||||
|
}, /*end UE object 0*/
|
||||||
|
{
|
||||||
|
/* UE capabilities */
|
||||||
|
/* USIM data */
|
||||||
|
"ue_id" : 2,
|
||||||
|
"imsi": "208970100001128",
|
||||||
|
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||||
|
"sim_algo":"milenage",
|
||||||
|
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||||
|
as_release: 15,
|
||||||
|
ue_category: "nr",
|
||||||
|
apn:"oai",
|
||||||
|
attach_pdn_type:"ipv4",
|
||||||
|
default_nssai: [
|
||||||
|
{
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
default_pdu_session_snssai: {
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_addr: "127.1.0.0",
|
||||||
|
/* Enable it to create a TUN interface for each UE PDN */
|
||||||
|
tun_setup_script: "ue-ifup",
|
||||||
|
sim_events: [
|
||||||
|
{
|
||||||
|
event: "power_on",
|
||||||
|
start_time: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "ping",
|
||||||
|
"prog":"oai_ext_app.sh",
|
||||||
|
start_time: 15,
|
||||||
|
end_time: 25,
|
||||||
|
"args":["ping 192.168.70.136"],
|
||||||
|
"event":"ext_app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: "power_off",
|
||||||
|
start_time: 30,
|
||||||
|
}
|
||||||
|
] /*end sim events */
|
||||||
|
} /*end UE object 1*/
|
||||||
|
],/*end UE list*/
|
||||||
|
}/*end json*/
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
/* UE simulator configuration */
|
||||||
|
|
||||||
|
|
||||||
|
/* UE simulator configuration file version 2021-06-17
|
||||||
|
* LTE / 5G Non StandAlone
|
||||||
|
* Copyright (C) 2019-2021 Amarisoft
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
#define N_ANTENNA_DL 1
|
||||||
|
#define TDD 1
|
||||||
|
#define CELL_BANDWIDTH 40
|
||||||
|
#define UE_COUNT 2 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129
|
||||||
|
|
||||||
|
|
||||||
|
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||||
|
log_filename: "/tmp/ue0.log",
|
||||||
|
|
||||||
|
/* Enable remote API and Web interface */
|
||||||
|
com_addr: "0.0.0.0:9002",
|
||||||
|
|
||||||
|
include "rf_driver/1chan.cfg",
|
||||||
|
|
||||||
|
/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */
|
||||||
|
|
||||||
|
cell_groups: [{
|
||||||
|
group_type: "nr",
|
||||||
|
multi_ue: true,
|
||||||
|
cells: [{
|
||||||
|
rf_port: 0,
|
||||||
|
bandwidth: CELL_BANDWIDTH,
|
||||||
|
#if TDD == 1
|
||||||
|
band: 78,
|
||||||
|
dl_nr_arfcn:621312,
|
||||||
|
ssb_nr_arfcn:621312,
|
||||||
|
|
||||||
|
//band: 41,
|
||||||
|
//dl_nr_arfcn:517020,
|
||||||
|
//ssb_nr_arfcn:516990,
|
||||||
|
#else
|
||||||
|
band: 7,
|
||||||
|
dl_nr_arfcn: 536020,
|
||||||
|
ssb_nr_arfcn: 535930,
|
||||||
|
ssb_subcarrier_spacing: 15,
|
||||||
|
#endif
|
||||||
|
subcarrier_spacing: 30,
|
||||||
|
n_antenna_dl: N_ANTENNA_DL,
|
||||||
|
n_antenna_ul: 1,
|
||||||
|
rx_to_tx_latency:2,
|
||||||
|
}],
|
||||||
|
}],
|
||||||
|
|
||||||
|
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_bind_addr: "127.0.10.11",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ue_list: [
|
||||||
|
{
|
||||||
|
/* UE capabilities */
|
||||||
|
/* USIM data */
|
||||||
|
"ue_id" : 1,
|
||||||
|
"imsi": "208970100001127",
|
||||||
|
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||||
|
"sim_algo":"milenage",
|
||||||
|
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||||
|
as_release: 15,
|
||||||
|
ue_category: "nr",
|
||||||
|
apn:"oai",
|
||||||
|
attach_pdn_type:"ipv4",
|
||||||
|
default_nssai: [
|
||||||
|
{
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
default_pdu_session_snssai: {
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_addr: "127.1.0.0",
|
||||||
|
/* Enable it to create a TUN interface for each UE PDN */
|
||||||
|
tun_setup_script: "ue-ifup",
|
||||||
|
sim_events: [
|
||||||
|
{
|
||||||
|
event: "power_on",
|
||||||
|
start_time: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "ping",
|
||||||
|
"prog":"oai_ext_app.sh",
|
||||||
|
start_time: 20,
|
||||||
|
end_time: 30,
|
||||||
|
"args":["ping 192.168.70.136"],
|
||||||
|
"event":"ext_app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: "power_off",
|
||||||
|
start_time: 60,
|
||||||
|
}
|
||||||
|
] /*end sim events */
|
||||||
|
}, /*end UE object 0*/
|
||||||
|
{
|
||||||
|
/* UE capabilities */
|
||||||
|
/* USIM data */
|
||||||
|
"ue_id" : 2,
|
||||||
|
"imsi": "208970100001128",
|
||||||
|
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||||
|
"sim_algo":"milenage",
|
||||||
|
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||||
|
as_release: 15,
|
||||||
|
ue_category: "nr",
|
||||||
|
apn:"oai",
|
||||||
|
attach_pdn_type:"ipv4",
|
||||||
|
default_nssai: [
|
||||||
|
{
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
default_pdu_session_snssai: {
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_addr: "127.1.0.0",
|
||||||
|
/* Enable it to create a TUN interface for each UE PDN */
|
||||||
|
tun_setup_script: "ue-ifup",
|
||||||
|
sim_events: [
|
||||||
|
{
|
||||||
|
event: "power_on",
|
||||||
|
start_time: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tag": "ping",
|
||||||
|
"prog":"oai_ext_app.sh",
|
||||||
|
start_time: 40,
|
||||||
|
end_time: 50,
|
||||||
|
"args":["ping 192.168.70.136"],
|
||||||
|
"event":"ext_app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: "power_off",
|
||||||
|
start_time: 60,
|
||||||
|
}
|
||||||
|
] /*end sim events */
|
||||||
|
} /*end UE object 1*/
|
||||||
|
],/*end UE list*/
|
||||||
|
}/*end json*/
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
/* UE simulator configuration */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* UE simulator configuration file version 2021-06-17
|
||||||
|
* LTE / 5G Non StandAlone
|
||||||
|
* Copyright (C) 2019-2021 Amarisoft
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
#define N_ANTENNA_DL 1
|
||||||
|
#define TDD 1
|
||||||
|
#define CELL_BANDWIDTH 40
|
||||||
|
|
||||||
|
|
||||||
|
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||||
|
log_filename: "/tmp/ue1.log",
|
||||||
|
|
||||||
|
/* Enable remote API and Web interface */
|
||||||
|
com_addr: "0.0.0.0:9002",
|
||||||
|
|
||||||
|
include "rf_driver/1chan.cfg",
|
||||||
|
|
||||||
|
/* If true, allow the simulation of several UEs at the same time and
|
||||||
|
allow dynamic UE creation from remote API */
|
||||||
|
|
||||||
|
cell_groups: [{
|
||||||
|
group_type: "nr",
|
||||||
|
multi_ue: false,
|
||||||
|
cells: [{
|
||||||
|
rf_port: 0,
|
||||||
|
bandwidth: CELL_BANDWIDTH,
|
||||||
|
#if TDD == 1
|
||||||
|
band: 78,
|
||||||
|
dl_nr_arfcn:621312,
|
||||||
|
ssb_nr_arfcn:621312,
|
||||||
|
|
||||||
|
//band: 41,
|
||||||
|
//dl_nr_arfcn:517020,
|
||||||
|
//ssb_nr_arfcn:516990,
|
||||||
|
#else
|
||||||
|
band: 7,
|
||||||
|
dl_nr_arfcn: 536020,
|
||||||
|
ssb_nr_arfcn: 535930,
|
||||||
|
ssb_subcarrier_spacing: 15,
|
||||||
|
#endif
|
||||||
|
subcarrier_spacing: 30,
|
||||||
|
n_antenna_dl: N_ANTENNA_DL,
|
||||||
|
n_antenna_ul: 1,
|
||||||
|
rx_to_tx_latency:2,
|
||||||
|
}],
|
||||||
|
}],
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_bind_addr: "127.0.10.11",
|
||||||
|
|
||||||
|
ue_list: [
|
||||||
|
{
|
||||||
|
/* UE capabilities */
|
||||||
|
|
||||||
|
/* USIM data */
|
||||||
|
|
||||||
|
|
||||||
|
"imsi": "208970100001127",
|
||||||
|
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||||
|
"sim_algo":"milenage",
|
||||||
|
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||||
|
|
||||||
|
|
||||||
|
as_release: 15,
|
||||||
|
ue_category: "nr",
|
||||||
|
apn:"oai",
|
||||||
|
attach_pdn_type:"ipv4",
|
||||||
|
default_nssai: [
|
||||||
|
{
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
default_pdu_session_snssai: {
|
||||||
|
sst: 1,
|
||||||
|
sd: 66051,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_addr: "127.1.0.0",
|
||||||
|
|
||||||
|
/* Enable it to create a TUN interface for each UE PDN */
|
||||||
|
tun_setup_script: "ue-ifup",
|
||||||
|
|
||||||
|
sim_events: [{
|
||||||
|
event: "power_on",
|
||||||
|
start_time: 5,
|
||||||
|
}, {
|
||||||
|
"tag": "ping",
|
||||||
|
"prog":"oai_ext_app.sh",
|
||||||
|
start_time: 15,
|
||||||
|
end_time: 25,
|
||||||
|
"args":["ping 192.168.70.136"],
|
||||||
|
"event":"ext_app"
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
event: "power_off",
|
||||||
|
start_time: 30,
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
/* UE simulator configuration */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* UE simulator configuration file version 2021-06-17
|
||||||
|
* LTE / 5G Non StandAlone
|
||||||
|
* Copyright (C) 2019-2021 Amarisoft
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
#define N_ANTENNA_DL 1
|
||||||
|
#define TDD 1
|
||||||
|
#define CELL_BANDWIDTH 20
|
||||||
|
|
||||||
|
|
||||||
|
log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1",
|
||||||
|
log_filename: "/tmp/ue0.log",
|
||||||
|
|
||||||
|
/* Enable remote API and Web interface */
|
||||||
|
com_addr: "0.0.0.0:9002",
|
||||||
|
|
||||||
|
include "rf_driver/1chan.cfg",
|
||||||
|
|
||||||
|
/* If true, allow the simulation of several UEs at the same time and
|
||||||
|
allow dynamic UE creation from remote API */
|
||||||
|
|
||||||
|
cell_groups: [{
|
||||||
|
group_type: "nr",
|
||||||
|
multi_ue: false,
|
||||||
|
cells: [{
|
||||||
|
rf_port: 0,
|
||||||
|
bandwidth: CELL_BANDWIDTH,
|
||||||
|
#if TDD == 1
|
||||||
|
// band: 78,
|
||||||
|
// dl_nr_arfcn:621312,
|
||||||
|
// ssb_nr_arfcn:621312,*/
|
||||||
|
|
||||||
|
band: 41,
|
||||||
|
dl_nr_arfcn:517020,
|
||||||
|
ssb_nr_arfcn:516990,
|
||||||
|
#else
|
||||||
|
band: 7,
|
||||||
|
dl_nr_arfcn: 536020,
|
||||||
|
ssb_nr_arfcn: 535930,
|
||||||
|
ssb_subcarrier_spacing: 15,
|
||||||
|
#endif
|
||||||
|
subcarrier_spacing: 30,
|
||||||
|
n_antenna_dl: N_ANTENNA_DL,
|
||||||
|
n_antenna_ul: 1,
|
||||||
|
rx_to_tx_latency:2,
|
||||||
|
}],
|
||||||
|
}],
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_bind_addr: "127.0.10.11",
|
||||||
|
|
||||||
|
ue_list: [
|
||||||
|
{
|
||||||
|
/* UE capabilities */
|
||||||
|
|
||||||
|
/* USIM data */
|
||||||
|
|
||||||
|
"imsi": "208970100001127",
|
||||||
|
"K": "fec86ba6eb707ed08905757b1bb44b8f",
|
||||||
|
"sim_algo":"milenage",
|
||||||
|
"op": "1006020f0a478bf6b699f15c062e42b3",
|
||||||
|
|
||||||
|
|
||||||
|
as_release: 15,
|
||||||
|
ue_category: "nr",
|
||||||
|
apn:"oai",
|
||||||
|
attach_pdn_type:"ipv4",
|
||||||
|
default_nssai: [
|
||||||
|
{
|
||||||
|
sst: 1,
|
||||||
|
sd: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
default_pdu_session_snssai: {
|
||||||
|
sst: 1,
|
||||||
|
sd: 1,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/* Enable it to allow sim_events to be handled remotely */
|
||||||
|
//rue_addr: "127.1.0.0",
|
||||||
|
|
||||||
|
/* Enable it to create a TUN interface for each UE PDN */
|
||||||
|
tun_setup_script: "ue-ifup",
|
||||||
|
|
||||||
|
sim_events: [{
|
||||||
|
event: "power_on",
|
||||||
|
start_time: 5,
|
||||||
|
}, {
|
||||||
|
event: "ext_app",
|
||||||
|
start_time: 15,
|
||||||
|
end_time: 25,
|
||||||
|
prog: "ext_app.sh",
|
||||||
|
args: ["iperf", " -c 172.21.10.5", " -u"," -b 1M"," -i 1"," -t 10"]
|
||||||
|
}, {
|
||||||
|
event: "power_off",
|
||||||
|
start_time: 30,
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
@@ -14,7 +14,7 @@ steps:
|
|||||||
|
|
||||||
|
|
||||||
ADB: #on Caracal
|
ADB: #on Caracal
|
||||||
ADBIPAddress : 192.168.18.196
|
ADBIPAddress : 172.21.16.132
|
||||||
ADBUserName : oaici
|
ADBUserName : oaici
|
||||||
ADBPassword : KkexF6CErOi1fNuebCPsuIVK
|
ADBPassword : KkexF6CErOi1fNuebCPsuIVK
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ if [ $# -eq 0 ]
|
|||||||
then
|
then
|
||||||
echo " ---- Checking the whole repository ----"
|
echo " ---- Checking the whole repository ----"
|
||||||
echo ""
|
echo ""
|
||||||
NB_FILES_TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt --recursive *.c *.h | grep -c Formatted || true`
|
NB_FILES_TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt --recursive --exclude=ci-scripts --exclude=cmake_targets *.c *.h | grep -c Formatted || true`
|
||||||
echo "Nb Files that do NOT follow OAI rules: $NB_FILES_TO_FORMAT"
|
echo "Nb Files that do NOT follow OAI rules: $NB_FILES_TO_FORMAT"
|
||||||
echo $NB_FILES_TO_FORMAT > ./oai_rules_result.txt
|
echo $NB_FILES_TO_FORMAT > ./oai_rules_result.txt
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@ fi
|
|||||||
# Merge request scenario
|
# Merge request scenario
|
||||||
|
|
||||||
MERGE_COMMMIT=`git log -n1 --pretty=format:%H`
|
MERGE_COMMMIT=`git log -n1 --pretty=format:%H`
|
||||||
TARGET_INIT_COMMIT=`cat .git/refs/remotes/origin/$TARGET_BRANCH`
|
TARGET_INIT_COMMIT=`git log -n1 --pretty=format:%H origin/$TARGET_BRANCH`
|
||||||
|
|
||||||
echo " ---- Checking the modified files by the merge request ----"
|
echo " ---- Checking the modified files by the merge request ----"
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ idefix:
|
|||||||
LogStore : /media/usb-drive/ci_qlogs
|
LogStore : /media/usb-drive/ci_qlogs
|
||||||
PLMN : 22201
|
PLMN : 22201
|
||||||
UENetwork : wwan0
|
UENetwork : wwan0
|
||||||
HostIPAddress : 192.168.18.188
|
HostIPAddress : 172.21.16.135
|
||||||
HostUsername : oaicicd
|
HostUsername : oaicicd
|
||||||
HostPassword : oaicicd
|
HostPassword : oaicicd
|
||||||
HostSourceCodePath : none
|
HostSourceCodePath : none
|
||||||
@@ -27,18 +27,66 @@ nrmodule2_quectel:
|
|||||||
Apn :
|
Apn :
|
||||||
OAICN5G : oai
|
OAICN5G : oai
|
||||||
OAI-Rel14-Docker : oai.ipv4
|
OAI-Rel14-Docker : oai.ipv4
|
||||||
WakeupScript : ci_ctl_qtel.py /dev/ttyUSB7 wup
|
WakeupScript : ci_ctl_qtel.py /dev/ttyUSB2 wup
|
||||||
DetachScript : ci_ctl_qtel.py /dev/ttyUSB7 detach
|
DetachScript : ci_ctl_qtel.py /dev/ttyUSB2 detach
|
||||||
LogStore : /media/ci_qlogs
|
LogStore : /media/ci_qlogs
|
||||||
PLMN : 20897
|
PLMN : 20897
|
||||||
UENetwork : wwan1
|
UENetwork : wwan0
|
||||||
HostIPAddress : 192.168.18.189
|
HostIPAddress : 172.21.16.139
|
||||||
HostUsername : nrmodule2
|
HostUsername : nrmodule2
|
||||||
HostPassword : linux
|
HostPassword : linux
|
||||||
HostSourceCodePath : none
|
HostSourceCodePath : none
|
||||||
StartCommands :
|
StartCommands :
|
||||||
- sudo -S ip link set dev wwan1 mtu 1500
|
- sudo -S ip link set dev wwan1 mtu 1500
|
||||||
MTU : 1500
|
MTU : 1500
|
||||||
|
|
||||||
|
# CAUTION: 192.168.18.89 address has to be changed when the server is moved
|
||||||
|
#single UE single ping
|
||||||
|
amarisoft_ue_1:
|
||||||
|
ID: amarisoft_ue_1
|
||||||
|
State : enabled
|
||||||
|
Kind : amarisoft
|
||||||
|
#not required for AS config but needed for py script
|
||||||
|
WakeupScript : none
|
||||||
|
DetachScript : none
|
||||||
|
#end
|
||||||
|
Cmd : /root/NV17-12-21/ue/lteue
|
||||||
|
Config : /root/NV17-12-21/ue/config/oaicicd-ue-Ping-SATest.cfg
|
||||||
|
Duration : 60
|
||||||
|
Ping : /tmp/test_ue1.log
|
||||||
|
UELog : /tmp/ue1.log
|
||||||
|
HostIPAddress : 172.21.16.144
|
||||||
|
HostUsername : root
|
||||||
|
HostPassword : toor
|
||||||
|
HostSourceCodePath : /tmp
|
||||||
|
|
||||||
|
|
||||||
|
#an other scenario example
|
||||||
|
#notice : this will not work as such, only suggestion for multi ue scenario
|
||||||
|
amarisoft_ue_2:
|
||||||
|
ID: amarisoft_ue_2
|
||||||
|
State : enabled
|
||||||
|
Kind : amarisoft
|
||||||
|
#not required for AS config but needed for py script
|
||||||
|
WakeupScript : none
|
||||||
|
DetachScript : none
|
||||||
|
#end
|
||||||
|
Cmd : /root/NV17-12-21/ue/lteue
|
||||||
|
Config : /root/NV17-12-21/ue/config/xxxxxxx.cfg #to be updated for an other scenario
|
||||||
|
Duration : 60
|
||||||
|
Ping :
|
||||||
|
- /tmp/test_ue1.log #to be updated fo an other scenario
|
||||||
|
- /tmp/test_ue2.log #could be a list for a multi ue scenario
|
||||||
|
UELog :
|
||||||
|
- /tmp/ue1.log
|
||||||
|
- /tmp/ue1.log
|
||||||
|
HostIPAddress : 192.168.18.89
|
||||||
|
HostUsername : root
|
||||||
|
HostPassword : toor
|
||||||
|
HostSourceCodePath : /tmp
|
||||||
|
|
||||||
|
|
||||||
|
#do not remove
|
||||||
dummy:
|
dummy:
|
||||||
ID: ''
|
ID: ''
|
||||||
State : ''
|
State : ''
|
||||||
@@ -50,7 +98,7 @@ dummy:
|
|||||||
DetachScript : ''
|
DetachScript : ''
|
||||||
PLMN : 22201
|
PLMN : 22201
|
||||||
UENetwork : wwan0
|
UENetwork : wwan0
|
||||||
HostIPAddress : 192.168.18.188
|
HostIPAddress : 172.21.16.135
|
||||||
HostUsername : oaicicd
|
HostUsername : oaicicd
|
||||||
HostPassword : oaicicd
|
HostPassword : oaicicd
|
||||||
HostSourceCodePath : none
|
HostSourceCodePath : none
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
# * 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
|
||||||
|
# */
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Required Python Version
|
||||||
|
# Python 3.x
|
||||||
|
#
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#to use isfile
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import logging
|
||||||
|
#to create a SSH object locally in the methods
|
||||||
|
import sshconnection
|
||||||
|
#time.sleep
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
|
class AS_UE:
|
||||||
|
|
||||||
|
def __init__(self,Module):
|
||||||
|
#create attributes as in the UE dictionary
|
||||||
|
for k, v in Module.items():
|
||||||
|
setattr(self, k, v)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------$
|
||||||
|
#PUBLIC Methods$
|
||||||
|
#-----------------$
|
||||||
|
|
||||||
|
def WaitEndScenario(self):
|
||||||
|
logging.debug('waiting for scenario duration')
|
||||||
|
time.sleep(int(self.Duration))
|
||||||
|
|
||||||
|
def KillASUE(self):
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
|
||||||
|
mySSH.command('killall --signal SIGKILL lteue-avx2', '#', 5)
|
||||||
|
mySSH.close()
|
||||||
|
|
||||||
|
def RunScenario(self):
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
|
||||||
|
|
||||||
|
logging.debug("Deleting old artifacts :")
|
||||||
|
cmd='rm -rf ' + self.Ping + ' ' + self.UELog
|
||||||
|
mySSH.command(cmd,'#',5)
|
||||||
|
logging.debug("Running scenario :")
|
||||||
|
cmd='echo $USER; nohup '+self.Cmd + ' ' + self.Config + ' &'
|
||||||
|
mySSH.command(cmd,'#',5)
|
||||||
|
|
||||||
|
mySSH.close()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
+130
-48
@@ -93,6 +93,7 @@ class Containerize():
|
|||||||
self.allImagesSize = {}
|
self.allImagesSize = {}
|
||||||
self.collectInfo = {}
|
self.collectInfo = {}
|
||||||
|
|
||||||
|
self.deployedContainers = []
|
||||||
self.tsharkStarted = False
|
self.tsharkStarted = False
|
||||||
self.pingContName = ''
|
self.pingContName = ''
|
||||||
self.pingOptions = ''
|
self.pingOptions = ''
|
||||||
@@ -242,7 +243,7 @@ class Containerize():
|
|||||||
# Build the base image only on Push Events (not on Merge Requests)
|
# Build the base image only on Push Events (not on Merge Requests)
|
||||||
# On when the base image docker file is being modified.
|
# On when the base image docker file is being modified.
|
||||||
if forceBaseImageBuild:
|
if forceBaseImageBuild:
|
||||||
mySSH.command(self.cli + ' build ' + self.cliBuildOptions + ' --target ' + baseImage + ' --tag ' + baseImage + ':' + baseTag + ' --file docker/Dockerfile.base' + self.dockerfileprefix + ' --build-arg NEEDED_GIT_PROXY="http://proxy.eurecom.fr:8080" . > cmake_targets/log/ran-base.log 2>&1', '\$', 1600)
|
mySSH.command(self.cli + ' build ' + self.cliBuildOptions + ' --target ' + baseImage + ' --tag ' + baseImage + ':' + baseTag + ' --file docker/Dockerfile.base' + self.dockerfileprefix + ' . > cmake_targets/log/ran-base.log 2>&1', '\$', 1600)
|
||||||
# First verify if the base image was properly created.
|
# First verify if the base image was properly created.
|
||||||
status = True
|
status = True
|
||||||
mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' ' + baseImage + ':' + baseTag, '\$', 5)
|
mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' ' + baseImage + ':' + baseTag, '\$', 5)
|
||||||
@@ -293,6 +294,9 @@ class Containerize():
|
|||||||
if image != 'ran-build':
|
if image != 'ran-build':
|
||||||
mySSH.command('sed -i -e "s#' + "ran-build" + ':latest#' + "ran-build" + ':' + imageTag + '#" docker/Dockerfile.' + pattern + self.dockerfileprefix, '\$', 5)
|
mySSH.command('sed -i -e "s#' + "ran-build" + ':latest#' + "ran-build" + ':' + imageTag + '#" docker/Dockerfile.' + pattern + self.dockerfileprefix, '\$', 5)
|
||||||
mySSH.command(self.cli + ' build ' + self.cliBuildOptions + ' --target ' + image + ' --tag ' + image + ':' + imageTag + ' --file docker/Dockerfile.' + pattern + self.dockerfileprefix + ' . > cmake_targets/log/' + image + '.log 2>&1', '\$', 1200)
|
mySSH.command(self.cli + ' build ' + self.cliBuildOptions + ' --target ' + image + ' --tag ' + image + ':' + imageTag + ' --file docker/Dockerfile.' + pattern + self.dockerfileprefix + ' . > cmake_targets/log/' + image + '.log 2>&1', '\$', 1200)
|
||||||
|
# Flatten Image
|
||||||
|
if image != 'ran-build':
|
||||||
|
mySSH.command('python3 ./ci-scripts/flatten_image.py --tag ' + image + ':' + imageTag, '\$', 300)
|
||||||
# split the log
|
# split the log
|
||||||
mySSH.command('mkdir -p cmake_targets/log/' + image, '\$', 5)
|
mySSH.command('mkdir -p cmake_targets/log/' + image, '\$', 5)
|
||||||
mySSH.command('python3 ci-scripts/docker_log_split.py --logfilename=cmake_targets/log/' + image + '.log', '\$', 5)
|
mySSH.command('python3 ci-scripts/docker_log_split.py --logfilename=cmake_targets/log/' + image + '.log', '\$', 5)
|
||||||
@@ -606,6 +610,8 @@ class Containerize():
|
|||||||
if containerToKill:
|
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 kill --signal KILL ' + containerName, '\$', 30)
|
||||||
|
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)
|
||||||
mySSH.command('docker rm -f ' + containerName, '\$', 30)
|
mySSH.command('docker rm -f ' + containerName, '\$', 30)
|
||||||
# Forcing the down now to remove the networks and any artifacts
|
# Forcing the down now to remove the networks and any artifacts
|
||||||
@@ -680,12 +686,28 @@ class Containerize():
|
|||||||
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps -a'
|
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps -a'
|
||||||
count = 0
|
count = 0
|
||||||
healthy = 0
|
healthy = 0
|
||||||
|
newContainers = []
|
||||||
while (count < 10):
|
while (count < 10):
|
||||||
count += 1
|
count += 1
|
||||||
containerStatus = []
|
containerStatus = []
|
||||||
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)
|
||||||
healthy = 0
|
healthy = 0
|
||||||
for state in deployStatus.split('\n'):
|
for state in deployStatus.split('\n'):
|
||||||
|
res = re.search('Name|----------', state)
|
||||||
|
if res is not None:
|
||||||
|
continue
|
||||||
|
if len(state) == 0:
|
||||||
|
continue
|
||||||
|
res = re.search('^(?P<container_name>[a-zA-Z0-9\-\_]+) ', state)
|
||||||
|
if res is not None:
|
||||||
|
cName = res.group('container_name')
|
||||||
|
found = False
|
||||||
|
for alreadyDeployed in self.deployedContainers:
|
||||||
|
if cName == alreadyDeployed:
|
||||||
|
found = True
|
||||||
|
if not found:
|
||||||
|
newContainers.append(cName)
|
||||||
|
self.deployedContainers.append(cName)
|
||||||
if re.search('Up \(healthy\)', state) is not None:
|
if re.search('Up \(healthy\)', state) is not None:
|
||||||
healthy += 1
|
healthy += 1
|
||||||
if re.search('rfsim4g-db-init.*Exit 0', state) is not None:
|
if re.search('rfsim4g-db-init.*Exit 0', state) is not None:
|
||||||
@@ -696,16 +718,33 @@ class Containerize():
|
|||||||
else:
|
else:
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
|
|
||||||
|
imagesInfo = ''
|
||||||
|
for newCont in newContainers:
|
||||||
|
cmd = 'docker inspect -f "{{.Config.Image}}" ' + newCont
|
||||||
|
imageName = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||||
|
imageName = str(imageName).strip()
|
||||||
|
cmd = 'docker image inspect --format "{{.RepoTags}}\t{{.Size}}\t{{.Created}}" ' + imageName
|
||||||
|
imagesInfo += subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||||
|
|
||||||
|
html_queue = SimpleQueue()
|
||||||
|
html_cell = '<pre style="background-color:white">\n'
|
||||||
|
for imageInfo in imagesInfo.split('\n'):
|
||||||
|
html_cell += imageInfo[:-11] + '\n'
|
||||||
|
html_cell += '\n'
|
||||||
|
for cState in containerStatus:
|
||||||
|
html_cell += cState + '\n'
|
||||||
|
html_cell += '</pre>'
|
||||||
|
html_queue.put(html_cell)
|
||||||
if count == 100 and healthy == self.nb_healthy[0]:
|
if count == 100 and healthy == self.nb_healthy[0]:
|
||||||
if self.tsharkStarted == False:
|
if self.tsharkStarted == False:
|
||||||
logging.debug('Starting tshark on public network')
|
logging.debug('Starting tshark on public network')
|
||||||
self.CaptureOnDockerNetworks()
|
self.CaptureOnDockerNetworks()
|
||||||
HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTestRowQueue('n/a', 'OK', 1, html_queue)
|
||||||
for cState in containerStatus:
|
for cState in containerStatus:
|
||||||
logging.debug(cState)
|
logging.debug(cState)
|
||||||
logging.info('\u001B[1m Deploying OAI Object(s) PASS\u001B[0m')
|
logging.info('\u001B[1m Deploying OAI Object(s) PASS\u001B[0m')
|
||||||
else:
|
else:
|
||||||
HTML.CreateHtmlTestRow('Could not deploy in time', 'KO', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTestRowQueue('Could not deploy in time', 'KO', 1, html_queue)
|
||||||
for cState in containerStatus:
|
for cState in containerStatus:
|
||||||
logging.debug(cState)
|
logging.debug(cState)
|
||||||
logging.error('\u001B[1m Deploying OAI Object(s) FAILED\u001B[0m')
|
logging.error('\u001B[1m Deploying OAI Object(s) FAILED\u001B[0m')
|
||||||
@@ -721,13 +760,19 @@ class Containerize():
|
|||||||
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)
|
||||||
if re.search('4g.*rfsimulator', self.yamlPath[0]) is not None:
|
if re.search('4g.*rfsimulator', self.yamlPath[0]) is not None:
|
||||||
|
# Excluding any traffic from LTE-UE container (192.168.61.30)
|
||||||
|
# From the trf-gen, keeping only PING traffic
|
||||||
cmd = 'sudo nohup tshark -f "(host 192.168.61.11 and icmp) or (not host 192.168.61.11 and not host 192.168.61.30 and not arp and not port 53 and not port 2152)"'
|
cmd = 'sudo nohup tshark -f "(host 192.168.61.11 and icmp) or (not host 192.168.61.11 and not host 192.168.61.30 and not arp and not port 53 and not port 2152)"'
|
||||||
elif re.search('5g.*rfsimulator', self.yamlPath[0]) is not None:
|
elif re.search('5g.*rfsimulator', self.yamlPath[0]) is not None:
|
||||||
cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not host 192.168.71.150 and not arp and not port 53 and not port 2152 and not port 2153)"'
|
# Excluding any traffic from NR-UE containers (192.168.71.150 and 192.168.71.151)
|
||||||
|
# From the ext-dn, keeping only PING traffic
|
||||||
|
cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not host 192.168.71.150 and not host 192.168.71.151 and not arp and not port 53 and not port 2152 and not port 2153)"'
|
||||||
|
elif re.search('5g_l2sim', self.yamlPath[0]) is not None:
|
||||||
|
cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not arp and not port 53 and not port 2152 and not port 2153)"'
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
for name in networkNames.split('\n'):
|
for name in networkNames.split('\n'):
|
||||||
if re.search('rfsim', name) is not None:
|
if re.search('rfsim', name) is not None or re.search('l2sim', name) is not None:
|
||||||
cmd += ' -i ' + name
|
cmd += ' -i ' + name
|
||||||
cmd += ' -w /tmp/capture_'
|
cmd += ' -w /tmp/capture_'
|
||||||
ymlPath = self.yamlPath[0].split('/')
|
ymlPath = self.yamlPath[0].split('/')
|
||||||
@@ -779,46 +824,48 @@ class Containerize():
|
|||||||
# Analyzing log file(s)!
|
# Analyzing log file(s)!
|
||||||
listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du']
|
listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du']
|
||||||
for container in listOfPossibleRanContainers:
|
for container in listOfPossibleRanContainers:
|
||||||
filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log'
|
filenames = self.yamlPath[0] + '/*-oai-' + container + '.log'
|
||||||
cmd = 'ls ' + filename
|
cmd = 'ls ' + filenames
|
||||||
containerStatus = True
|
containerStatus = True
|
||||||
try:
|
try:
|
||||||
lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
||||||
filename = str(lsStatus).strip()
|
filenames = str(lsStatus).strip()
|
||||||
except:
|
except:
|
||||||
containerStatus = False
|
containerStatus = False
|
||||||
if not containerStatus:
|
if not containerStatus:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m')
|
for filename in filenames.split('\n'):
|
||||||
logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
|
logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m')
|
||||||
if (logStatus < 0):
|
logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
|
||||||
fullStatus = False
|
if (logStatus < 0):
|
||||||
self.exitStatus = 1
|
fullStatus = False
|
||||||
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
|
self.exitStatus = 1
|
||||||
else:
|
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
|
||||||
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
else:
|
||||||
|
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
|
||||||
listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*']
|
listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*']
|
||||||
for container in listOfPossibleUeContainers:
|
for container in listOfPossibleUeContainers:
|
||||||
filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log'
|
filenames = self.yamlPath[0] + '/*-oai-' + container + '.log'
|
||||||
cmd = 'ls ' + filename
|
cmd = 'ls ' + filenames
|
||||||
containerStatus = True
|
containerStatus = True
|
||||||
try:
|
try:
|
||||||
lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
||||||
filename = str(lsStatus).strip()
|
filenames = str(lsStatus).strip()
|
||||||
except:
|
except:
|
||||||
containerStatus = False
|
containerStatus = False
|
||||||
if not containerStatus:
|
if not containerStatus:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
|
for filename in filenames.split('\n'):
|
||||||
logStatus = UE.AnalyzeLogFile_UE(filename, HTML, RAN)
|
logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
|
||||||
if (logStatus < 0):
|
logStatus = UE.AnalyzeLogFile_UE(filename, HTML, RAN)
|
||||||
fullStatus = False
|
if (logStatus < 0):
|
||||||
HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus)
|
fullStatus = False
|
||||||
else:
|
HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus)
|
||||||
HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
|
else:
|
||||||
|
HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
|
||||||
cmd = 'rm ' + self.yamlPath[0] + '/*.log'
|
cmd = 'rm ' + self.yamlPath[0] + '/*.log'
|
||||||
logging.debug(cmd)
|
logging.debug(cmd)
|
||||||
@@ -849,6 +896,7 @@ class Containerize():
|
|||||||
logging.error('\u001B[1m Undeploying OAI Object(s) FAILED\u001B[0m')
|
logging.error('\u001B[1m Undeploying OAI Object(s) FAILED\u001B[0m')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
self.deployedContainers = []
|
||||||
# Cleaning any created tmp volume
|
# Cleaning any created tmp volume
|
||||||
cmd = 'docker volume prune --force || true'
|
cmd = 'docker volume prune --force || true'
|
||||||
logging.debug(cmd)
|
logging.debug(cmd)
|
||||||
@@ -861,6 +909,40 @@ class Containerize():
|
|||||||
HTML.CreateHtmlTestRow('n/a', 'KO', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTestRow('n/a', 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
logging.info('\u001B[1m Undeploying OAI Object(s) FAIL\u001B[0m')
|
logging.info('\u001B[1m Undeploying OAI Object(s) FAIL\u001B[0m')
|
||||||
|
|
||||||
|
def StatsFromGenObject(self, HTML):
|
||||||
|
self.exitStatus = 0
|
||||||
|
ymlPath = self.yamlPath[0].split('/')
|
||||||
|
logPath = '../cmake_targets/log/' + ymlPath[1]
|
||||||
|
|
||||||
|
# if the containers are running, recover the logs!
|
||||||
|
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all'
|
||||||
|
logging.debug(cmd)
|
||||||
|
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||||
|
cmd = 'docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" '
|
||||||
|
anyLogs = False
|
||||||
|
for state in deployStatus.split('\n'):
|
||||||
|
res = re.search('Name|----------', state)
|
||||||
|
if res is not None:
|
||||||
|
continue
|
||||||
|
if len(state) == 0:
|
||||||
|
continue
|
||||||
|
res = re.search('^(?P<container_name>[a-zA-Z0-9\-\_]+) ', state)
|
||||||
|
if res is not None:
|
||||||
|
anyLogs = True
|
||||||
|
cmd += res.group('container_name') + ' '
|
||||||
|
message = ''
|
||||||
|
if anyLogs:
|
||||||
|
logging.debug(cmd)
|
||||||
|
stats = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||||
|
for statLine in stats.split('\n'):
|
||||||
|
logging.debug(statLine)
|
||||||
|
message += statLine + '\n'
|
||||||
|
|
||||||
|
html_queue = SimpleQueue()
|
||||||
|
html_cell = '<pre style="background-color:white">\n' + message + '</pre>'
|
||||||
|
html_queue.put(html_cell)
|
||||||
|
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', 1, html_queue)
|
||||||
|
|
||||||
def PingFromContainer(self, HTML, RAN, UE):
|
def PingFromContainer(self, HTML, RAN, UE):
|
||||||
self.exitStatus = 0
|
self.exitStatus = 0
|
||||||
ymlPath = self.yamlPath[0].split('/')
|
ymlPath = self.yamlPath[0].split('/')
|
||||||
@@ -1067,19 +1149,19 @@ class Containerize():
|
|||||||
mySSH.open(ipAddr, userName, password)
|
mySSH.open(ipAddr, userName, password)
|
||||||
# Check if route to asterix gnb exists
|
# Check if route to asterix gnb exists
|
||||||
mySSH.command('ip route | grep --colour=never "192.168.68.64/26"', '\$', 10)
|
mySSH.command('ip route | grep --colour=never "192.168.68.64/26"', '\$', 10)
|
||||||
result = re.search('192.168.18.194', mySSH.getBefore())
|
result = re.search('172.21.16.127', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.64/26 via 192.168.18.194 dev eno1', '\$', 10)
|
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.64/26 via 172.21.16.127 dev eno1', '\$', 10)
|
||||||
# Check if route to obelix enb exists
|
# Check if route to obelix enb exists
|
||||||
mySSH.command('ip route | grep --colour=never "192.168.68.128/26"', '\$', 10)
|
mySSH.command('ip route | grep --colour=never "192.168.68.128/26"', '\$', 10)
|
||||||
result = re.search('192.168.18.193', mySSH.getBefore())
|
result = re.search('172.21.16.128', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 192.168.18.193 dev eno1', '\$', 10)
|
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 172.21.16.128 dev eno1', '\$', 10)
|
||||||
# Check if route to nepes gnb exists
|
# Check if route to nepes gnb exists
|
||||||
mySSH.command('ip route | grep --colour=never "192.168.68.192/26"', '\$', 10)
|
mySSH.command('ip route | grep --colour=never "192.168.68.192/26"', '\$', 10)
|
||||||
result = re.search('192.168.18.209', mySSH.getBefore())
|
result = re.search('172.21.16.137', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.192/26 via 192.168.18.209 dev eno1', '\$', 10)
|
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.192/26 via 172.21.16.137 dev eno1', '\$', 10)
|
||||||
# Check if forwarding is enabled
|
# Check if forwarding is enabled
|
||||||
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
|
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
|
||||||
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
|
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
|
||||||
@@ -1095,19 +1177,19 @@ class Containerize():
|
|||||||
mySSH.open(ipAddr, userName, password)
|
mySSH.open(ipAddr, userName, password)
|
||||||
# Check if route to porcepix epc exists
|
# Check if route to porcepix epc exists
|
||||||
mySSH.command('ip route | grep --colour=never "192.168.61.192/26"', '\$', 10)
|
mySSH.command('ip route | grep --colour=never "192.168.61.192/26"', '\$', 10)
|
||||||
result = re.search('192.168.18.210', mySSH.getBefore())
|
result = re.search('172.21.16.136', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 192.168.18.210 dev em1', '\$', 10)
|
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 172.21.16.136 dev em1', '\$', 10)
|
||||||
# Check if route to porcepix cn5g exists
|
# Check if route to porcepix cn5g exists
|
||||||
mySSH.command('ip route | grep --colour=never "192.168.70.128/26"', '\$', 10)
|
mySSH.command('ip route | grep --colour=never "192.168.70.128/26"', '\$', 10)
|
||||||
result = re.search('192.168.18.210', mySSH.getBefore())
|
result = re.search('172.21.16.136', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.70.128/26 via 192.168.18.210 dev em1', '\$', 10)
|
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.70.128/26 via 172.21.16.136 dev em1', '\$', 10)
|
||||||
# Check if X2 route to obelix enb exists
|
# Check if X2 route to obelix enb exists
|
||||||
mySSH.command('ip route | grep --colour=never "192.168.68.128/26"', '\$', 10)
|
mySSH.command('ip route | grep --colour=never "192.168.68.128/26"', '\$', 10)
|
||||||
result = re.search('192.168.18.193', mySSH.getBefore())
|
result = re.search('172.21.16.128', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 192.168.18.193 dev em1', '\$', 10)
|
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 172.21.16.128 dev em1', '\$', 10)
|
||||||
# Check if forwarding is enabled
|
# Check if forwarding is enabled
|
||||||
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
|
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
|
||||||
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
|
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
|
||||||
@@ -1123,19 +1205,19 @@ class Containerize():
|
|||||||
mySSH.open(ipAddr, userName, password)
|
mySSH.open(ipAddr, userName, password)
|
||||||
# Check if route to porcepix epc exists
|
# Check if route to porcepix epc exists
|
||||||
mySSH.command('ip route | grep --colour=never "192.168.61.192/26"', '\$', 10)
|
mySSH.command('ip route | grep --colour=never "192.168.61.192/26"', '\$', 10)
|
||||||
result = re.search('192.168.18.210', mySSH.getBefore())
|
result = re.search('172.21.16.136', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 192.168.18.210 dev eno1', '\$', 10)
|
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 172.21.16.136 dev eno1', '\$', 10)
|
||||||
# Check if X2 route to asterix gnb exists
|
# Check if X2 route to asterix gnb exists
|
||||||
mySSH.command('ip route | grep --colour=never "192.168.68.64/26"', '\$', 10)
|
mySSH.command('ip route | grep --colour=never "192.168.68.64/26"', '\$', 10)
|
||||||
result = re.search('192.168.18.194', mySSH.getBefore())
|
result = re.search('172.21.16.127', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.64/26 via 192.168.18.194 dev eno1', '\$', 10)
|
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.64/26 via 172.21.16.127 dev eno1', '\$', 10)
|
||||||
# Check if X2 route to nepes gnb exists
|
# Check if X2 route to nepes gnb exists
|
||||||
mySSH.command('ip route | grep --colour=never "192.168.68.192/26"', '\$', 10)
|
mySSH.command('ip route | grep --colour=never "192.168.68.192/26"', '\$', 10)
|
||||||
result = re.search('192.168.18.209', mySSH.getBefore())
|
result = re.search('172.21.16.137', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.192/26 via 192.168.18.209 dev eno1', '\$', 10)
|
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.192/26 via 172.21.16.137 dev eno1', '\$', 10)
|
||||||
# Check if forwarding is enabled
|
# Check if forwarding is enabled
|
||||||
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
|
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
|
||||||
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
|
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
|
||||||
@@ -1151,14 +1233,14 @@ class Containerize():
|
|||||||
mySSH.open(ipAddr, userName, password)
|
mySSH.open(ipAddr, userName, password)
|
||||||
# Check if route to porcepix epc exists
|
# Check if route to porcepix epc exists
|
||||||
mySSH.command('ip route | grep --colour=never "192.168.61.192/26"', '\$', 10)
|
mySSH.command('ip route | grep --colour=never "192.168.61.192/26"', '\$', 10)
|
||||||
result = re.search('192.168.18.210', mySSH.getBefore())
|
result = re.search('172.21.16.136', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 192.168.18.210 dev enp0s31f6', '\$', 10)
|
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 172.21.16.136 dev enp0s31f6', '\$', 10)
|
||||||
# Check if X2 route to obelix enb exists
|
# Check if X2 route to obelix enb exists
|
||||||
mySSH.command('ip route | grep --colour=never "192.168.68.128/26"', '\$', 10)
|
mySSH.command('ip route | grep --colour=never "192.168.68.128/26"', '\$', 10)
|
||||||
result = re.search('192.168.18.193', mySSH.getBefore())
|
result = re.search('172.21.16.128', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 192.168.18.193 dev enp0s31f6', '\$', 10)
|
mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 172.21.16.128 dev enp0s31f6', '\$', 10)
|
||||||
# Check if forwarding is enabled
|
# Check if forwarding is enabled
|
||||||
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
|
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
|
||||||
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
|
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
|
||||||
|
|||||||
@@ -64,10 +64,10 @@ class Log_Mgt:
|
|||||||
if m is not None:
|
if m is not None:
|
||||||
return int(m.group(1))
|
return int(m.group(1))
|
||||||
|
|
||||||
def __RemoveOldest(self):
|
def __RemoveOldest(self, days):
|
||||||
mySSH = sshconnection.SSHConnection()
|
mySSH = sshconnection.SSHConnection()
|
||||||
mySSH.open(self.IPAddress, self.Username, self.Password)
|
mySSH.open(self.IPAddress, self.Username, self.Password)
|
||||||
COMMAND='echo ' + self.Password + ' | sudo -S find ' + self.path + ' -type f -mtime +14 -delete'
|
COMMAND='echo ' + self.Password + ' | sudo -S find ' + self.path + ' -type f -mtime +' + str(days) + ' -delete'
|
||||||
mySSH.command(COMMAND,'\$',20)
|
mySSH.command(COMMAND,'\$',20)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
|
|
||||||
@@ -79,13 +79,18 @@ class Log_Mgt:
|
|||||||
|
|
||||||
|
|
||||||
def LogRotation(self):
|
def LogRotation(self):
|
||||||
used_space = self.__CheckUsedSpace() #avail space in target folder
|
doLoop = True
|
||||||
if used_space > 80 :
|
nbDays = 14
|
||||||
logging.debug('\u001B[1;37;41m Used Disk > 80%, on ' + self.Username+'@'+self.IPAddress + '\u001B[0m')
|
while doLoop and nbDays > 1:
|
||||||
logging.debug('\u001B[1;37;41m Removing Artifacts older than 14 days \u001B[0m')
|
used_space = self.__CheckUsedSpace() #avail space in target folder
|
||||||
self.__RemoveOldest()
|
if used_space > 80 :
|
||||||
else:
|
logging.debug('\u001B[1;37;41m Used Disk (' + str(used_space) + '%) > 80%, on ' + self.Username+'@'+self.IPAddress + '\u001B[0m')
|
||||||
logging.debug('Used Disk < 80%, on ' + self.Username+'@'+self.IPAddress +', no cleaning required')
|
logging.debug('\u001B[1;37;41m Removing Artifacts older than ' + str(nbDays) + ' days \u001B[0m')
|
||||||
|
self.__RemoveOldest(nbDays)
|
||||||
|
nbDays -= 1
|
||||||
|
else:
|
||||||
|
logging.debug('Used Disk (' + str(used_space) + '%) < 80%, on ' + self.Username+'@'+self.IPAddress +', no cleaning required')
|
||||||
|
doLoop = False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,8 @@ class Module_UE:
|
|||||||
logging.debug('Starting ' + self.Process['Name'])
|
logging.debug('Starting ' + self.Process['Name'])
|
||||||
mySSH = sshconnection.SSHConnection()
|
mySSH = sshconnection.SSHConnection()
|
||||||
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
|
mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
|
||||||
mySSH.command('echo $USER; echo ' + self.HostPassword + ' | nohup sudo -S ' + self.Process['Cmd'] + ' ' + self.Process['Apn'][CNType] + ' > /dev/null 2>&1 &','\$',5)
|
mySSH.command('echo ' + self.HostPassword + ' | sudo -S rm -f /tmp/quectel-cm.log','\$',5)
|
||||||
|
mySSH.command('echo $USER; echo ' + self.HostPassword + ' | nohup sudo -S stdbuf -o0 ' + self.Process['Cmd'] + ' ' + self.Process['Apn'][CNType] + ' > /tmp/quectel-cm.log 2>&1 &','\$',5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
#checking the process
|
#checking the process
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
@@ -106,14 +107,15 @@ class Module_UE:
|
|||||||
def GetModuleIPAddress(self):
|
def GetModuleIPAddress(self):
|
||||||
HOST=self.HostUsername+'@'+self.HostIPAddress
|
HOST=self.HostUsername+'@'+self.HostIPAddress
|
||||||
response= []
|
response= []
|
||||||
tentative = 3
|
tentative = 8
|
||||||
while (len(response)==0) and (tentative>0):
|
while (len(response)==0) and (tentative>0):
|
||||||
COMMAND="ip a show dev " + self.UENetwork + " | grep --colour=never inet | grep " + self.UENetwork
|
COMMAND="ip a show dev " + self.UENetwork + " | grep --colour=never inet | grep " + self.UENetwork
|
||||||
logging.debug(COMMAND)
|
if tentative == 8:
|
||||||
|
logging.debug(COMMAND)
|
||||||
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
|
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
|
||||||
response = ssh.stdout.readlines()
|
response = ssh.stdout.readlines()
|
||||||
tentative-=1
|
tentative-=1
|
||||||
time.sleep(10)
|
time.sleep(2)
|
||||||
if (tentative==0) and (len(response)==0):
|
if (tentative==0) and (len(response)==0):
|
||||||
logging.debug('\u001B[1;37;41m Module IP Address Not Found! Time expired \u001B[0m')
|
logging.debug('\u001B[1;37;41m Module IP Address Not Found! Time expired \u001B[0m')
|
||||||
return -1
|
return -1
|
||||||
|
|||||||
+192
-115
@@ -55,6 +55,7 @@ import constants as CONST
|
|||||||
import sshconnection
|
import sshconnection
|
||||||
|
|
||||||
import cls_module_ue
|
import cls_module_ue
|
||||||
|
import cls_amarisoft_ue
|
||||||
import cls_ci_ueinfra #class defining the multi Ue infrastrucure
|
import cls_ci_ueinfra #class defining the multi Ue infrastrucure
|
||||||
|
|
||||||
logging.getLogger("matplotlib").setLevel(logging.WARNING)
|
logging.getLogger("matplotlib").setLevel(logging.WARNING)
|
||||||
@@ -122,6 +123,7 @@ def GetPingTimeAnalysis(RAN,ping_log_file,ping_rttavg_threshold):
|
|||||||
try:
|
try:
|
||||||
mySSH = sshconnection.SSHConnection()
|
mySSH = sshconnection.SSHConnection()
|
||||||
mySSH.copyout(RAN.eNBIPAddress, RAN.eNBUserName, RAN.eNBPassword, ping_log_file+'.png', RAN.eNBSourceCodePath + '/cmake_targets/')
|
mySSH.copyout(RAN.eNBIPAddress, RAN.eNBUserName, RAN.eNBPassword, ping_log_file+'.png', RAN.eNBSourceCodePath + '/cmake_targets/')
|
||||||
|
mySSH.copyout(RAN.eNBIPAddress, RAN.eNBUserName, RAN.eNBPassword, ping_log_file, RAN.eNBSourceCodePath + '/cmake_targets/')
|
||||||
except:
|
except:
|
||||||
logging.debug('\u001B[1;37;41m Ping PNG SCP to eNB FAILED\u001B[0m')
|
logging.debug('\u001B[1;37;41m Ping PNG SCP to eNB FAILED\u001B[0m')
|
||||||
|
|
||||||
@@ -418,49 +420,63 @@ class OaiCiTest():
|
|||||||
for job in multi_jobs:
|
for job in multi_jobs:
|
||||||
job.join()
|
job.join()
|
||||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
else: #if an ID is specified, it is a module from the yaml infrastructure file
|
else: #if an ID is specified, it is a UE from the yaml infrastructure file
|
||||||
#RH
|
ue_kind = InfraUE.ci_ue_infra[self.ue_id]['Kind']
|
||||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
logging.debug("Detected UE Kind : " + ue_kind)
|
||||||
Module_UE.ue_trace=ue_trace
|
|
||||||
is_module=Module_UE.CheckCMProcess(EPC.Type)
|
|
||||||
if is_module:
|
|
||||||
Module_UE.EnableTrace()
|
|
||||||
time.sleep(5)
|
|
||||||
|
|
||||||
# Looping attach / detach / wait to be successful at least once
|
#case it is a quectel module (only 1 at a time supported at the moment)
|
||||||
cnt = 0
|
if ue_kind == 'quectel':
|
||||||
status = -1
|
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||||
while cnt < 4:
|
Module_UE.ue_trace=ue_trace
|
||||||
Module_UE.Command("wup")
|
is_module=Module_UE.CheckCMProcess(EPC.Type)
|
||||||
logging.debug("Waiting for IP address to be assigned")
|
if is_module:
|
||||||
time.sleep(20)
|
Module_UE.EnableTrace()
|
||||||
logging.debug("Retrieve IP address")
|
time.sleep(5)
|
||||||
status=Module_UE.GetModuleIPAddress()
|
|
||||||
if status==0:
|
|
||||||
cnt = 10
|
|
||||||
else:
|
|
||||||
cnt += 1
|
|
||||||
Module_UE.Command("detach")
|
|
||||||
time.sleep(20)
|
|
||||||
|
|
||||||
if cnt == 10 and status == 0:
|
# Looping attach / detach / wait to be successful at least once
|
||||||
HTML.CreateHtmlTestRow(Module_UE.UEIPAddress, 'OK', CONST.ALL_PROCESSES_OK)
|
cnt = 0
|
||||||
logging.debug('UE IP addresss : '+ Module_UE.UEIPAddress)
|
status = -1
|
||||||
#execute additional commands from yaml file after UE attach
|
while cnt < 4:
|
||||||
SSH = sshconnection.SSHConnection()
|
Module_UE.Command("wup")
|
||||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
logging.debug("Waiting for IP address to be assigned")
|
||||||
if hasattr(Module_UE,'StartCommands'):
|
time.sleep(5)
|
||||||
for startcommand in Module_UE.StartCommands:
|
logging.debug("Retrieve IP address")
|
||||||
cmd = 'echo ' + Module_UE.HostPassword + ' | ' + startcommand
|
status=Module_UE.GetModuleIPAddress()
|
||||||
SSH.command(cmd,'\$',5)
|
if status==0:
|
||||||
SSH.close()
|
cnt = 10
|
||||||
#check that the MTU is as expected / requested
|
else:
|
||||||
Module_UE.CheckModuleMTU()
|
cnt += 1
|
||||||
else: #status==-1 failed to retrieve IP address
|
Module_UE.Command("detach")
|
||||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.UE_IP_ADDRESS_ISSUE)
|
time.sleep(20)
|
||||||
self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS)
|
|
||||||
return
|
if cnt == 10 and status == 0:
|
||||||
|
HTML.CreateHtmlTestRow(Module_UE.UEIPAddress, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
logging.debug('UE IP addresss : '+ Module_UE.UEIPAddress)
|
||||||
|
#execute additional commands from yaml file after UE attach
|
||||||
|
SSH = sshconnection.SSHConnection()
|
||||||
|
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||||
|
if hasattr(Module_UE,'StartCommands'):
|
||||||
|
for startcommand in Module_UE.StartCommands:
|
||||||
|
cmd = 'echo ' + Module_UE.HostPassword + ' | ' + startcommand
|
||||||
|
SSH.command(cmd,'\$',5)
|
||||||
|
SSH.close()
|
||||||
|
#check that the MTU is as expected / requested
|
||||||
|
Module_UE.CheckModuleMTU()
|
||||||
|
else: #status==-1 failed to retrieve IP address
|
||||||
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.UE_IP_ADDRESS_ISSUE)
|
||||||
|
self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS)
|
||||||
|
return
|
||||||
|
|
||||||
|
#case it is a amarisoft ue (only 1 at a time supported at the moment)
|
||||||
|
elif ue_kind == 'amarisoft':
|
||||||
|
AS_UE = cls_amarisoft_ue.AS_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||||
|
HTML.CreateHtmlTestRow(AS_UE.Config, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
AS_UE.RunScenario()
|
||||||
|
AS_UE.WaitEndScenario()
|
||||||
|
AS_UE.KillASUE()
|
||||||
|
|
||||||
|
else:
|
||||||
|
logging.debug("Incorrect UE Kind was detected")
|
||||||
|
|
||||||
|
|
||||||
def InitializeOAIUE(self,HTML,RAN,EPC,COTS_UE,InfraUE,CONTAINERS):
|
def InitializeOAIUE(self,HTML,RAN,EPC,COTS_UE,InfraUE,CONTAINERS):
|
||||||
@@ -534,7 +550,7 @@ class OaiCiTest():
|
|||||||
while (doOutterLoop):
|
while (doOutterLoop):
|
||||||
SSH.command('cd ' + self.UESourceCodePath + '/cmake_targets/ran_build/build', '\$', 5)
|
SSH.command('cd ' + self.UESourceCodePath + '/cmake_targets/ran_build/build', '\$', 5)
|
||||||
SSH.command('echo ' + self.UEPassword + ' | sudo -S rm -Rf ' + self.UESourceCodePath + '/cmake_targets/ue_' + self.testCase_id + '.log', '\$', 5)
|
SSH.command('echo ' + self.UEPassword + ' | sudo -S rm -Rf ' + self.UESourceCodePath + '/cmake_targets/ue_' + self.testCase_id + '.log', '\$', 5)
|
||||||
SSH.command('echo $USER; nohup sudo -E ./my-lte-uesoftmodem-run' + str(self.UE_instance) + '.sh' + ' > ' + self.UESourceCodePath + '/cmake_targets/ue_' + self.testCase_id + '.log ' + ' 2>&1 &', self.UEUserName, 5)
|
SSH.command('echo $USER; nohup sudo -E stdbuf -o0 ./my-lte-uesoftmodem-run' + str(self.UE_instance) + '.sh' + ' > ' + self.UESourceCodePath + '/cmake_targets/ue_' + self.testCase_id + '.log ' + ' 2>&1 &', self.UEUserName, 5)
|
||||||
time.sleep(6)
|
time.sleep(6)
|
||||||
SSH.command('cd ../..', '\$', 5)
|
SSH.command('cd ../..', '\$', 5)
|
||||||
doLoop = True
|
doLoop = True
|
||||||
@@ -1095,7 +1111,7 @@ class OaiCiTest():
|
|||||||
while cnt < 4:
|
while cnt < 4:
|
||||||
Module_UE.Command("wup")
|
Module_UE.Command("wup")
|
||||||
logging.debug("Waiting for IP address to be assigned")
|
logging.debug("Waiting for IP address to be assigned")
|
||||||
time.sleep(20)
|
time.sleep(5)
|
||||||
logging.debug("Retrieve IP address")
|
logging.debug("Retrieve IP address")
|
||||||
status=Module_UE.GetModuleIPAddress()
|
status=Module_UE.GetModuleIPAddress()
|
||||||
if status==0:
|
if status==0:
|
||||||
@@ -1569,16 +1585,23 @@ class OaiCiTest():
|
|||||||
SSH = sshconnection.SSHConnection()
|
SSH = sshconnection.SSHConnection()
|
||||||
# Launch ping on the EPC side (true for ltebox and old open-air-cn)
|
# Launch ping on the EPC side (true for ltebox and old open-air-cn)
|
||||||
# But for OAI-Rel14-CUPS, we launch from python executor
|
# But for OAI-Rel14-CUPS, we launch from python executor
|
||||||
|
ping_status = 0
|
||||||
launchFromEpc = True
|
launchFromEpc = True
|
||||||
launchFromModule = False
|
launchFromModule = False
|
||||||
|
launchFromASUE = False
|
||||||
if re.match('OAI-Rel14-CUPS', EPC.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-CUPS', EPC.Type, re.IGNORECASE):
|
||||||
launchFromEpc = False
|
launchFromEpc = False
|
||||||
#if module, ping from module to EPC
|
#if module, ping from module to EPC
|
||||||
if self.ue_id!='':
|
if self.ue_id!='':
|
||||||
launchFromEpc = False
|
if (re.match('amarisoft', self.ue_id, re.IGNORECASE)):
|
||||||
launchfromModule = True
|
launchFromEpc = False
|
||||||
|
launchFromASUE = True
|
||||||
ping_time = re.findall("-c (\d+)",str(self.ping_args))
|
else:
|
||||||
|
launchFromEpc = False
|
||||||
|
launchFromModule = True
|
||||||
|
#no ping args for ASUE
|
||||||
|
if self.ping_args!='':
|
||||||
|
ping_time = re.findall("-c (\d+)",str(self.ping_args))
|
||||||
|
|
||||||
if launchFromEpc:
|
if launchFromEpc:
|
||||||
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||||
@@ -1596,14 +1619,14 @@ class OaiCiTest():
|
|||||||
#copy the ping log file to have it locally for analysis (ping stats)
|
#copy the ping log file to have it locally for analysis (ping stats)
|
||||||
SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, EPC.SourceCodePath + '/scripts/ping_' + self.testCase_id + '_' + device_id + '.log', '.')
|
SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, EPC.SourceCodePath + '/scripts/ping_' + self.testCase_id + '_' + device_id + '.log', '.')
|
||||||
else:
|
else:
|
||||||
if launchfromModule == False:
|
if (launchFromModule == False) and (launchFromASUE == False):
|
||||||
#ping log file is on the python executor
|
#ping log file is on the python executor
|
||||||
cmd = 'ping ' + self.ping_args + ' ' + UE_IPAddress + ' 2>&1 > ping_' + self.testCase_id + '_' + device_id + '.log'
|
cmd = 'ping ' + self.ping_args + ' ' + UE_IPAddress + ' > ping_' + self.testCase_id + '_' + device_id + '.log 2>&1'
|
||||||
message = cmd + '\n'
|
message = cmd + '\n'
|
||||||
logging.debug(cmd)
|
logging.debug(cmd)
|
||||||
ret = subprocess.run(cmd, shell=True)
|
ret = subprocess.run(cmd, shell=True)
|
||||||
ping_status = ret.returncode
|
ping_status = ret.returncode
|
||||||
#copy the ping log file to an other folder for log collection (source and destination are EPC)
|
#copy the ping log file to an other folder for log collection (source and desti elif (launchfromModule == True) and (launchfromASUE == False): #launch from Modulenation are EPC)
|
||||||
SSH.copyout(EPC.IPAddress, EPC.UserName, EPC.Password, 'ping_' + self.testCase_id + '_' + device_id + '.log', EPC.SourceCodePath + '/scripts')
|
SSH.copyout(EPC.IPAddress, EPC.UserName, EPC.Password, 'ping_' + self.testCase_id + '_' + device_id + '.log', EPC.SourceCodePath + '/scripts')
|
||||||
#copy the ping log file to have it locally for analysis (ping stats)
|
#copy the ping log file to have it locally for analysis (ping stats)
|
||||||
logging.debug(EPC.SourceCodePath + 'ping_' + self.testCase_id + '_' + device_id + '.log')
|
logging.debug(EPC.SourceCodePath + 'ping_' + self.testCase_id + '_' + device_id + '.log')
|
||||||
@@ -1613,7 +1636,8 @@ class OaiCiTest():
|
|||||||
#cat is executed on EPC
|
#cat is executed on EPC
|
||||||
SSH.command('cat ' + EPC.SourceCodePath + '/scripts/ping_' + self.testCase_id + '_' + device_id + '.log', '\$', 5)
|
SSH.command('cat ' + EPC.SourceCodePath + '/scripts/ping_' + self.testCase_id + '_' + device_id + '.log', '\$', 5)
|
||||||
ping_log_file='/scripts/ping_' + self.testCase_id + '_' + device_id + '.log'
|
ping_log_file='/scripts/ping_' + self.testCase_id + '_' + device_id + '.log'
|
||||||
else: #launch from Module
|
|
||||||
|
elif (launchFromModule == True) and (launchFromASUE == False): #launch from Module
|
||||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||||
#target address is different depending on EPC type
|
#target address is different depending on EPC type
|
||||||
if re.match('OAI-Rel14-Docker', EPC.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', EPC.Type, re.IGNORECASE):
|
||||||
@@ -1623,15 +1647,29 @@ class OaiCiTest():
|
|||||||
else:
|
else:
|
||||||
Target = EPC.IPAddress
|
Target = EPC.IPAddress
|
||||||
#ping from module NIC rather than IP address to make sure round trip is over the air
|
#ping from module NIC rather than IP address to make sure round trip is over the air
|
||||||
cmd = 'ping -I ' + Module_UE.UENetwork + ' ' + self.ping_args + ' ' + Target + ' 2>&1 > ping_' + self.testCase_id + '_' + self.ue_id + '.log'
|
cmd = 'ping -I ' + Module_UE.UENetwork + ' ' + self.ping_args + ' ' + Target + ' > ping_' + self.testCase_id + '_' + self.ue_id + '.log 2>&1'
|
||||||
SSH.command(cmd,'\$',int(ping_time[0])*1.5)
|
SSH.command(cmd,'\$',int(ping_time[0])*1.5)
|
||||||
|
|
||||||
#copy the ping log file to have it locally for analysis (ping stats)
|
#copy the ping log file to have it locally for analysis (ping stats)
|
||||||
SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, 'ping_' + self.testCase_id + '_' + self.ue_id + '.log', '.')
|
SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, 'ping_' + self.testCase_id + '_' + self.ue_id + '.log', '.')
|
||||||
|
|
||||||
#cat is executed locally
|
#cat is executed locally
|
||||||
SSH.command('cat ping_' + self.testCase_id + '_' + self.ue_id + '.log', '\$', 5)
|
SSH.command('cat ping_' + self.testCase_id + '_' + self.ue_id + '.log', '\$', 5)
|
||||||
ping_log_file='ping_' + self.testCase_id + '_' + self.ue_id + '.log'
|
ping_log_file='ping_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
ping_status=0
|
|
||||||
|
elif (launchFromASUE == True):
|
||||||
|
#ping was already executed when running scenario
|
||||||
|
#we only need to retrieve ping log file, whose location is in the ci_ueinfra.yaml
|
||||||
|
logging.debug("Get logs from AS server : " + Module_UE.Ping + ", " + Module_UE.UELog)
|
||||||
|
SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, Module_UE.Ping, '.')
|
||||||
|
SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, Module_UE.UELog, '.')
|
||||||
|
logging.debug("Ping analysis from Amarisoft scenario")
|
||||||
|
path,ping_log_file = os.path.split(Module_UE.Ping)
|
||||||
|
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||||
|
SSH.command('cat ' + Module_UE.Ping, '\#', 5)
|
||||||
|
|
||||||
|
else:
|
||||||
|
ping_status=-1
|
||||||
|
|
||||||
# TIMEOUT CASE
|
# TIMEOUT CASE
|
||||||
if ping_status < 0:
|
if ping_status < 0:
|
||||||
@@ -1679,28 +1717,30 @@ class OaiCiTest():
|
|||||||
|
|
||||||
#adding extra ping stats from local file
|
#adding extra ping stats from local file
|
||||||
#ping_log_file variable is defined above in this function, depending on device/ue
|
#ping_log_file variable is defined above in this function, depending on device/ue
|
||||||
logging.debug('Analyzing Ping log file : ' + os.getcwd() + '/' + ping_log_file)
|
|
||||||
ping_stat=GetPingTimeAnalysis(RAN,ping_log_file,self.ping_rttavg_threshold)
|
|
||||||
ping_stat_msg=''
|
ping_stat_msg=''
|
||||||
if (ping_stat!=-1) and (len(ping_stat)!=0):
|
if launchFromASUE == False : #skip in case of AS UE (for the moment)
|
||||||
ping_stat_msg+='Ping stats before removing largest value : \n'
|
logging.debug('Analyzing Ping log file : ' + os.getcwd() + '/' + ping_log_file)
|
||||||
ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_0'])) + 'ms \n'
|
ping_stat=GetPingTimeAnalysis(RAN,ping_log_file,self.ping_rttavg_threshold)
|
||||||
ping_stat_msg+='RTT(Mean) : ' + str("{:.2f}".format(ping_stat['mean_0'])) + 'ms \n'
|
|
||||||
ping_stat_msg+='RTT(Median) : ' + str("{:.2f}".format(ping_stat['median_0'])) + 'ms \n'
|
if (ping_stat!=-1) and (len(ping_stat)!=0):
|
||||||
ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_0'])) + 'ms \n'
|
ping_stat_msg+='Ping stats before removing largest value : \n'
|
||||||
ping_stat_msg+='Max Index : ' + str(ping_stat['max_loc']) + '\n'
|
ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_0'])) + 'ms \n'
|
||||||
ping_stat_msg+='Ping stats after removing largest value : \n'
|
ping_stat_msg+='RTT(Mean) : ' + str("{:.2f}".format(ping_stat['mean_0'])) + 'ms \n'
|
||||||
ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_1'])) + 'ms \n'
|
ping_stat_msg+='RTT(Median) : ' + str("{:.2f}".format(ping_stat['median_0'])) + 'ms \n'
|
||||||
ping_stat_msg+='RTT(Mean) : ' + str("{:.2f}".format(ping_stat['mean_1'])) + 'ms \n'
|
ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_0'])) + 'ms \n'
|
||||||
ping_stat_msg+='RTT(Median) : ' + str("{:.2f}".format(ping_stat['median_1'])) + 'ms \n'
|
ping_stat_msg+='Max Index : ' + str(ping_stat['max_loc']) + '\n'
|
||||||
ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_1'])) + 'ms \n'
|
ping_stat_msg+='Ping stats after removing largest value : \n'
|
||||||
|
ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_1'])) + 'ms \n'
|
||||||
|
ping_stat_msg+='RTT(Mean) : ' + str("{:.2f}".format(ping_stat['mean_1'])) + 'ms \n'
|
||||||
|
ping_stat_msg+='RTT(Median) : ' + str("{:.2f}".format(ping_stat['median_1'])) + 'ms \n'
|
||||||
|
ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_1'])) + 'ms \n'
|
||||||
|
|
||||||
#building html message
|
#building html message
|
||||||
qMsg = pal_msg + '\n' + min_msg + '\n' + avg_msg + '\n' + max_msg + '\n' + ping_stat_msg
|
qMsg = pal_msg + '\n' + min_msg + '\n' + avg_msg + '\n' + max_msg + '\n' + ping_stat_msg
|
||||||
|
|
||||||
#checking packet loss compliance
|
#checking packet loss compliance
|
||||||
packetLossOK = True
|
packetLossOK = True
|
||||||
if packetloss is not None:
|
if (packetloss is not None) :
|
||||||
if float(packetloss) > float(self.ping_packetloss_threshold):
|
if float(packetloss) > float(self.ping_packetloss_threshold):
|
||||||
qMsg += '\nPacket Loss too high'
|
qMsg += '\nPacket Loss too high'
|
||||||
logging.debug('\u001B[1;37;41m Packet Loss too high; Target: '+ self.ping_packetloss_threshold + '%\u001B[0m')
|
logging.debug('\u001B[1;37;41m Packet Loss too high; Target: '+ self.ping_packetloss_threshold + '%\u001B[0m')
|
||||||
@@ -1728,6 +1768,7 @@ class OaiCiTest():
|
|||||||
lock.release()
|
lock.release()
|
||||||
SSH.close()
|
SSH.close()
|
||||||
except:
|
except:
|
||||||
|
logging.debug('exit from Ping_Common except')
|
||||||
os.kill(os.getppid(),signal.SIGUSR1)
|
os.kill(os.getppid(),signal.SIGUSR1)
|
||||||
|
|
||||||
def PingNoS1_wrong_exit(self, qMsg,HTML):
|
def PingNoS1_wrong_exit(self, qMsg,HTML):
|
||||||
@@ -1855,11 +1896,21 @@ class OaiCiTest():
|
|||||||
HTML.CreateHtmlTestRow(self.ping_args, 'KO', CONST.UE_IP_ADDRESS_ISSUE)
|
HTML.CreateHtmlTestRow(self.ping_args, 'KO', CONST.UE_IP_ADDRESS_ISSUE)
|
||||||
self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS)
|
self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS)
|
||||||
return
|
return
|
||||||
else:
|
else: #if an ID is specified, it is a UE from the yaml infrastructure file
|
||||||
self.UEIPAddresses=[]
|
ue_kind = InfraUE.ci_ue_infra[self.ue_id]['Kind']
|
||||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
logging.debug("Detected UE Kind : " + ue_kind)
|
||||||
Module_UE.GetModuleIPAddress()
|
|
||||||
self.UEIPAddresses.append(Module_UE.UEIPAddress)
|
if ue_kind == 'quectel':
|
||||||
|
self.UEIPAddresses=[]
|
||||||
|
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||||
|
Module_UE.GetModuleIPAddress()
|
||||||
|
self.UEIPAddresses.append(Module_UE.UEIPAddress)
|
||||||
|
elif ue_kind == 'amarisoft':
|
||||||
|
self.UEIPAddresses=['AS UE IP']
|
||||||
|
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||||
|
else:
|
||||||
|
logging.debug("Incorrect UE Kind was detected")
|
||||||
|
|
||||||
logging.debug(self.UEIPAddresses)
|
logging.debug(self.UEIPAddresses)
|
||||||
multi_jobs = []
|
multi_jobs = []
|
||||||
i = 0
|
i = 0
|
||||||
@@ -1870,6 +1921,7 @@ class OaiCiTest():
|
|||||||
device_id = self.UEDevices[i]
|
device_id = self.UEDevices[i]
|
||||||
else:
|
else:
|
||||||
device_id = Module_UE.ID + "-" + Module_UE.Kind
|
device_id = Module_UE.ID + "-" + Module_UE.Kind
|
||||||
|
logging.debug(device_id)
|
||||||
p = Process(target = self.Ping_common, args = (lock,UE_IPAddress,device_id,status_queue,EPC,Module_UE,RAN,))
|
p = Process(target = self.Ping_common, args = (lock,UE_IPAddress,device_id,status_queue,EPC,Module_UE,RAN,))
|
||||||
p.daemon = True
|
p.daemon = True
|
||||||
p.start()
|
p.start()
|
||||||
@@ -2084,7 +2136,8 @@ class OaiCiTest():
|
|||||||
statusQueue.put(UE_IPAddress)
|
statusQueue.put(UE_IPAddress)
|
||||||
statusQueue.put(report_msg)
|
statusQueue.put(report_msg)
|
||||||
logging.debug('\u001B[1;37;45m TCP Bidir Iperf Result (' + UE_IPAddress + ') \u001B[0m')
|
logging.debug('\u001B[1;37;45m TCP Bidir Iperf Result (' + UE_IPAddress + ') \u001B[0m')
|
||||||
logging.debug('\u001B[1;35m ' + report_msg + '\u001B[0m')
|
for rLine in report_msg.split('\n'):
|
||||||
|
logging.debug('\u001B[1;35m ' + rLine + '\u001B[0m')
|
||||||
lock.release()
|
lock.release()
|
||||||
else:
|
else:
|
||||||
self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Bidir TCP : Could not analyze from Log file')
|
self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Bidir TCP : Could not analyze from Log file')
|
||||||
@@ -2379,10 +2432,12 @@ class OaiCiTest():
|
|||||||
SSH.copyout(EPC.IPAddress, EPC.UserName, EPC.Password, 'iperf_' + self.testCase_id + '_' + device_id + '.log', EPC.SourceCodePath + '/scripts')
|
SSH.copyout(EPC.IPAddress, EPC.UserName, EPC.Password, 'iperf_' + self.testCase_id + '_' + device_id + '.log', EPC.SourceCodePath + '/scripts')
|
||||||
|
|
||||||
|
|
||||||
def Iperf_Module(self, lock, UE_IPAddress, device_id, idx, ue_num, statusQueue,EPC, Module_UE):
|
def Iperf_Module(self, lock, UE_IPAddress, device_id, idx, ue_num, statusQueue,EPC, Module_UE, RAN):
|
||||||
|
SSH = sshconnection.SSHConnection()
|
||||||
|
server_filename = 'iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
|
client_filename = 'iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
if (re.match('OAI-Rel14-Docker', EPC.Type, re.IGNORECASE)) or (re.match('OAICN5G', EPC.Type, re.IGNORECASE)):
|
if (re.match('OAI-Rel14-Docker', EPC.Type, re.IGNORECASE)) or (re.match('OAICN5G', EPC.Type, re.IGNORECASE)):
|
||||||
#retrieve trf-gen container IP address
|
#retrieve trf-gen container IP address
|
||||||
SSH = sshconnection.SSHConnection()
|
|
||||||
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||||
SSH.command('docker inspect --format="TRF_IP_ADDR = {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" prod-trf-gen', '\$', 5)
|
SSH.command('docker inspect --format="TRF_IP_ADDR = {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" prod-trf-gen', '\$', 5)
|
||||||
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())
|
||||||
@@ -2404,20 +2459,18 @@ class OaiCiTest():
|
|||||||
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
|
||||||
server_filename='iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
|
||||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||||
cmd = 'rm ' + server_filename
|
cmd = 'rm ' + server_filename
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
cmd = 'echo $USER; nohup iperf -s -B ' + UE_IPAddress + ' -u 2>&1 > ' + server_filename + ' &'
|
cmd = 'echo $USER; nohup iperf -s -B ' + UE_IPAddress + ' -u -i 1 > ' + server_filename + ' 2>&1 &'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
##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'
|
|
||||||
#remove old client file in EPC.SourceCodePath
|
#remove old client file in EPC.SourceCodePath
|
||||||
cmd = 'rm ' + EPC.SourceCodePath + '/' + client_filename
|
cmd = 'rm ' + EPC.SourceCodePath + '/' + client_filename
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',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 + ' > ' + client_filename + ' 2>&1'
|
||||||
cmd = 'docker exec -w /iperf-2.0.13 -it prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"'
|
cmd = 'docker exec -w /iperf-2.0.13 -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)
|
||||||
SSH.command('docker cp prod-trf-gen:/iperf-2.0.13/'+ client_filename + ' ' + EPC.SourceCodePath, '\$', 5)
|
SSH.command('docker cp prod-trf-gen:/iperf-2.0.13/'+ client_filename + ' ' + EPC.SourceCodePath, '\$', 5)
|
||||||
@@ -2433,19 +2486,17 @@ class OaiCiTest():
|
|||||||
logging.debug("Iperf for Module in UL mode detected")
|
logging.debug("Iperf for Module in UL mode detected")
|
||||||
#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'
|
|
||||||
|
|
||||||
iperf_cmd = 'echo $USER; nohup bin/iperf -s -u 2>&1 > ' + server_filename
|
iperf_cmd = 'echo $USER; nohup bin/iperf -s -u -i 1 > ' + server_filename + ' 2>&1'
|
||||||
cmd = 'docker exec -d -w /iperf-2.0.13 prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"'
|
cmd = 'docker exec -d -w /iperf-2.0.13 prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
|
|
||||||
#client side UE
|
#client side UE
|
||||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
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
|
cmd = 'rm '+ client_filename
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
SSH.command('iperf -B ' + UE_IPAddress + ' -c ' + trf_gen_IP + ' ' + self.iperf_args + ' 2>&1 > ' + client_filename, '\$', int(iperf_time)*5.0)
|
SSH.command('iperf -B ' + UE_IPAddress + ' -c ' + trf_gen_IP + ' ' + self.iperf_args + ' > ' + client_filename + ' 2>&1', '\$', int(iperf_time)*5.0)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
|
|
||||||
#once client is done, retrieve the server file from container to EPC Host
|
#once client is done, retrieve the server file from container to EPC Host
|
||||||
@@ -2461,12 +2512,10 @@ class OaiCiTest():
|
|||||||
|
|
||||||
elif self.iperf_direction=="BIDIR":
|
elif self.iperf_direction=="BIDIR":
|
||||||
logging.debug("Iperf for Module in BIDIR mode detected")
|
logging.debug("Iperf for Module in BIDIR mode detected")
|
||||||
server_filename = 'iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
|
||||||
client_filename = 'iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
|
|
||||||
|
|
||||||
#server side EPC
|
#server side EPC
|
||||||
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||||
iperf_cmd = 'echo $USER; nohup /usr/local/bin/iperf3 -s 2>&1 > ' + server_filename
|
iperf_cmd = 'echo $USER; nohup /usr/local/bin/iperf3 -s -i 1 > ' + server_filename + ' 2>&1'
|
||||||
cmd = 'docker exec -d -w /iperf-2.0.13 prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"'
|
cmd = 'docker exec -d -w /iperf-2.0.13 prod-trf-gen /bin/bash -c \"' + iperf_cmd + '\"'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
@@ -2475,7 +2524,7 @@ class OaiCiTest():
|
|||||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||||
cmd = 'rm '+ client_filename
|
cmd = 'rm '+ client_filename
|
||||||
SSH.command(cmd,'\$',5)
|
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.command('iperf3 -B ' + UE_IPAddress + ' -c ' + trf_gen_IP + ' ' + self.iperf_args + ' > ' + client_filename + ' 2>&1', '\$', int(iperf_time)*5.0)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
|
|
||||||
#once client is done, retrieve the server file from container to EPC Host
|
#once client is done, retrieve the server file from container to EPC Host
|
||||||
@@ -2499,8 +2548,6 @@ class OaiCiTest():
|
|||||||
|
|
||||||
else: #default is ltebox
|
else: #default is ltebox
|
||||||
|
|
||||||
SSH = sshconnection.SSHConnection()
|
|
||||||
|
|
||||||
#kill iperf processes before (in case there are still some remaining)
|
#kill iperf processes 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'
|
||||||
@@ -2524,14 +2571,14 @@ class OaiCiTest():
|
|||||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||||
cmd = 'rm iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
cmd = 'rm iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
cmd = 'echo $USER; nohup /opt/iperf-2.0.10/iperf -s -B ' + UE_IPAddress + ' -u 2>&1 > iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log &'
|
cmd = 'echo $USER; nohup /opt/iperf-2.0.10/iperf -s -B ' + UE_IPAddress + ' -u -i 1 > iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log 2>&1 &'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
#client side EPC
|
#client side EPC
|
||||||
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||||
cmd = 'rm iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
|
cmd = 'rm iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
cmd = 'iperf -c ' + UE_IPAddress + ' ' + self.iperf_args + ' 2>&1 > iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
|
cmd = 'iperf -c ' + UE_IPAddress + ' ' + self.iperf_args + ' > iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log 2>&1'
|
||||||
SSH.command(cmd,'\$',int(iperf_time)*5.0)
|
SSH.command(cmd,'\$',int(iperf_time)*5.0)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
#copy the 2 resulting files locally
|
#copy the 2 resulting files locally
|
||||||
@@ -2547,7 +2594,7 @@ class OaiCiTest():
|
|||||||
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||||
cmd = 'rm iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
cmd = 'rm iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
cmd = 'echo $USER; nohup iperf -s -u 2>&1 > iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log &'
|
cmd = 'echo $USER; nohup iperf -s -u -i 1 > iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log 2>&1 &'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
|
|
||||||
@@ -2555,7 +2602,7 @@ class OaiCiTest():
|
|||||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||||
cmd = 'rm iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
|
cmd = 'rm iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
SSH.command('/opt/iperf-2.0.10/iperf -c 192.172.0.1 ' + self.iperf_args + ' 2>&1 > iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log', '\$', int(iperf_time)*5.0)
|
SSH.command('/opt/iperf-2.0.10/iperf -c 192.172.0.1 ' + self.iperf_args + ' > iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log 2>&1', '\$', int(iperf_time)*5.0)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
|
|
||||||
#copy the 2 resulting files locally
|
#copy the 2 resulting files locally
|
||||||
@@ -2566,15 +2613,13 @@ class OaiCiTest():
|
|||||||
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":
|
elif self.iperf_direction=="BIDIR":
|
||||||
logging.debug("Iperf for Module in BIDIR mode detected")
|
logging.debug("Iperf for Module in BIDIR mode detected")
|
||||||
server_filename = 'iperf_server_' + self.testCase_id + '_' + self.ue_id + '.log'
|
|
||||||
client_filename = 'iperf_client_' + self.testCase_id + '_' + self.ue_id + '.log'
|
|
||||||
|
|
||||||
|
|
||||||
#server side EPC
|
#server side EPC
|
||||||
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||||
cmd = 'rm ' + server_filename
|
cmd = 'rm ' + server_filename
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
cmd = 'echo $USER; nohup iperf3 -s 2>&1 > '+server_filename+' &'
|
cmd = 'echo $USER; nohup iperf3 -s -i 1 > '+server_filename+' 2>&1 &'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
|
|
||||||
@@ -2582,7 +2627,7 @@ class OaiCiTest():
|
|||||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||||
cmd = 'rm ' + client_filename
|
cmd = 'rm ' + client_filename
|
||||||
SSH.command(cmd,'\$',5)
|
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.command('iperf3 -c 192.172.0.1 ' + self.iperf_args + ' > '+client_filename + ' 2>&1', '\$', int(iperf_time)*5.0)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
|
|
||||||
#copy the 2 resulting files locally
|
#copy the 2 resulting files locally
|
||||||
@@ -2593,6 +2638,7 @@ class OaiCiTest():
|
|||||||
else :
|
else :
|
||||||
logging.debug("Incorrect or missing IPERF direction in XML")
|
logging.debug("Incorrect or missing IPERF direction in XML")
|
||||||
|
|
||||||
|
|
||||||
#kill iperf processes after to be clean
|
#kill iperf processes after to be clean
|
||||||
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'
|
||||||
@@ -2606,7 +2652,12 @@ class OaiCiTest():
|
|||||||
cmd = 'killall --signal=SIGKILL iperf3'
|
cmd = 'killall --signal=SIGKILL iperf3'
|
||||||
SSH.command(cmd,'\$',5)
|
SSH.command(cmd,'\$',5)
|
||||||
SSH.close()
|
SSH.close()
|
||||||
return
|
|
||||||
|
# Copying to xNB server for Jenkins artifacting
|
||||||
|
if (os.path.isfile(server_filename)):
|
||||||
|
SSH.copyout(RAN.eNBIPAddress, RAN.eNBUserName, RAN.eNBPassword, server_filename, RAN.eNBSourceCodePath + '/cmake_targets/')
|
||||||
|
if (os.path.isfile(client_filename)):
|
||||||
|
SSH.copyout(RAN.eNBIPAddress, RAN.eNBUserName, RAN.eNBPassword, client_filename, RAN.eNBSourceCodePath + '/cmake_targets/')
|
||||||
|
|
||||||
def Iperf_common(self, lock, UE_IPAddress, device_id, idx, ue_num, statusQueue,EPC):
|
def Iperf_common(self, lock, UE_IPAddress, device_id, idx, ue_num, statusQueue,EPC):
|
||||||
try:
|
try:
|
||||||
@@ -2804,12 +2855,12 @@ class OaiCiTest():
|
|||||||
else:
|
else:
|
||||||
SSH.copyin(self.ADBIPAddress, self.ADBUserName, self.ADBPassword, EPC.SourceCodePath + '/scripts/iperf_server_' + self.testCase_id + '_' + device_id + '.log', '.')
|
SSH.copyin(self.ADBIPAddress, self.ADBUserName, self.ADBPassword, EPC.SourceCodePath + '/scripts/iperf_server_' + self.testCase_id + '_' + device_id + '.log', '.')
|
||||||
# fromdos has to be called on the python executor not on ADB server
|
# fromdos has to be called on the python executor not on ADB server
|
||||||
cmd = 'fromdos -o iperf_server_' + self.testCase_id + '_' + device_id + '.log 2>&1 > /dev/null'
|
cmd = 'fromdos -o iperf_server_' + self.testCase_id + '_' + device_id + '.log > /dev/null 2>&1'
|
||||||
try:
|
try:
|
||||||
subprocess.run(cmd, shell=True)
|
subprocess.run(cmd, shell=True)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
cmd = 'dos2unix -o iperf_server_' + self.testCase_id + '_' + device_id + '.log 2>&1 > /dev/null'
|
cmd = 'dos2unix -o iperf_server_' + self.testCase_id + '_' + device_id + '.log > /dev/null 2>&1'
|
||||||
try:
|
try:
|
||||||
subprocess.run(cmd, shell=True)
|
subprocess.run(cmd, shell=True)
|
||||||
except:
|
except:
|
||||||
@@ -2995,7 +3046,7 @@ class OaiCiTest():
|
|||||||
#special quick and dirty treatment for modules, iperf to be restructured
|
#special quick and dirty treatment for modules, iperf to be restructured
|
||||||
if self.ue_id!="": #is module
|
if self.ue_id!="": #is module
|
||||||
device_id = Module_UE.ID + "-" + Module_UE.Kind
|
device_id = Module_UE.ID + "-" + Module_UE.Kind
|
||||||
p = Process(target = self.Iperf_Module ,args = (lock, UE_IPAddress, device_id, i, ue_num, status_queue, EPC, Module_UE,))
|
p = Process(target = self.Iperf_Module ,args = (lock, UE_IPAddress, device_id, i, ue_num, status_queue, EPC, Module_UE, RAN, ))
|
||||||
else: #legacy code
|
else: #legacy code
|
||||||
p = Process(target = self.Iperf_common, args = (lock, UE_IPAddress, device_id, i, ue_num, status_queue, EPC, ))
|
p = Process(target = self.Iperf_common, args = (lock, UE_IPAddress, device_id, i, ue_num, status_queue, EPC, ))
|
||||||
p.daemon = True
|
p.daemon = True
|
||||||
@@ -3156,10 +3207,12 @@ class OaiCiTest():
|
|||||||
nrFoundDCI = 0
|
nrFoundDCI = 0
|
||||||
nrCRCOK = 0
|
nrCRCOK = 0
|
||||||
mbms_messages = 0
|
mbms_messages = 0
|
||||||
|
nbPduSessAccept = 0
|
||||||
|
nbPduDiscard = 0
|
||||||
HTML.htmlUEFailureMsg=''
|
HTML.htmlUEFailureMsg=''
|
||||||
global_status = CONST.ALL_PROCESSES_OK
|
global_status = CONST.ALL_PROCESSES_OK
|
||||||
for line in ue_log_file.readlines():
|
for line in ue_log_file.readlines():
|
||||||
result = re.search('nr_synchro_time', str(line))
|
result = re.search('nr_synchro_time|Starting NR UE soft modem', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
nrUEFlag = True
|
nrUEFlag = True
|
||||||
if nrUEFlag:
|
if nrUEFlag:
|
||||||
@@ -3172,6 +3225,15 @@ class OaiCiTest():
|
|||||||
result = re.search('CRC OK', str(line))
|
result = re.search('CRC OK', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
nrCRCOK += 1
|
nrCRCOK += 1
|
||||||
|
result = re.search('Received PDU Session Establishment Accept', str(line))
|
||||||
|
if result is not None:
|
||||||
|
nbPduSessAccept += 1
|
||||||
|
result = re.search('warning: discard PDU, sn out of window', str(line))
|
||||||
|
if result is not None:
|
||||||
|
nbPduDiscard += 1
|
||||||
|
result = re.search('--nfapi 5 --node-number 2 --sa', str(line))
|
||||||
|
if result is not None:
|
||||||
|
frequency_found = True
|
||||||
result = re.search('Exiting OAI softmodem', str(line))
|
result = re.search('Exiting OAI softmodem', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
exitSignalReceived = True
|
exitSignalReceived = True
|
||||||
@@ -3302,21 +3364,29 @@ class OaiCiTest():
|
|||||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||||
if nrUEFlag:
|
if nrUEFlag:
|
||||||
if nrDecodeMib > 0:
|
if nrDecodeMib > 0:
|
||||||
statMsg = 'UE showed ' + str(nrDecodeMib) + ' MIB decode message(s)'
|
statMsg = 'UE showed ' + str(nrDecodeMib) + ' "MIB decode" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||||
if nrFoundDCI > 0:
|
if nrFoundDCI > 0:
|
||||||
statMsg = 'UE showed ' + str(nrFoundDCI) + ' DCI found message(s)'
|
statMsg = 'UE showed ' + str(nrFoundDCI) + ' "DCI found" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||||
if nrCRCOK > 0:
|
if nrCRCOK > 0:
|
||||||
statMsg = 'UE showed ' + str(nrCRCOK) + ' PDSCH decoding message(s)'
|
statMsg = 'UE showed ' + str(nrCRCOK) + ' "PDSCH decoding" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||||
if not frequency_found:
|
if not frequency_found:
|
||||||
statMsg = 'NR-UE could NOT synch!'
|
statMsg = 'NR-UE could NOT synch!'
|
||||||
logging.error('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.error('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||||
|
if nbPduSessAccept > 0:
|
||||||
|
statMsg = 'UE showed ' + str(nbPduSessAccept) + ' "Received PDU Session Establishment Accept" message(s)'
|
||||||
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
|
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||||
|
if nbPduDiscard > 0:
|
||||||
|
statMsg = 'UE showed ' + str(nbPduDiscard) + ' "warning: discard PDU, sn out of window" message(s)'
|
||||||
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
|
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||||
if uciStatMsgCount > 0:
|
if uciStatMsgCount > 0:
|
||||||
statMsg = 'UE showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
|
statMsg = 'UE 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')
|
||||||
@@ -3447,16 +3517,23 @@ class OaiCiTest():
|
|||||||
job.join()
|
job.join()
|
||||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
else: #if an ID is specified, it is a module from the yaml infrastructure file
|
else: #if an ID is specified, it is a module from the yaml infrastructure file
|
||||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
ue_kind = InfraUE.ci_ue_infra[self.ue_id]['Kind']
|
||||||
Module_UE.ue_trace=ue_trace
|
logging.debug("Detected UE Kind : " + ue_kind)
|
||||||
Module_UE.Command("detach")
|
if ue_kind == 'quectel':
|
||||||
Module_UE.DisableTrace()
|
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||||
Module_UE.DisableCM()
|
Module_UE.ue_trace=ue_trace
|
||||||
archive_destination=Module_UE.LogCollect()
|
Module_UE.Command("detach")
|
||||||
if Module_UE.ue_trace=='yes':
|
Module_UE.DisableTrace()
|
||||||
HTML.CreateHtmlTestRow('QLog at : '+archive_destination, 'OK', CONST.ALL_PROCESSES_OK)
|
Module_UE.DisableCM()
|
||||||
|
archive_destination=Module_UE.LogCollect()
|
||||||
|
if Module_UE.ue_trace=='yes':
|
||||||
|
HTML.CreateHtmlTestRow('QLog at : '+archive_destination, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
else:
|
||||||
|
HTML.CreateHtmlTestRow('QLog trace is disabled', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
elif ue_kind == 'amarisoft':
|
||||||
|
HTML.CreateHtmlTestRow('AS UE is already terminated', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
else:
|
else:
|
||||||
HTML.CreateHtmlTestRow('QLog trace is disabled', 'OK', CONST.ALL_PROCESSES_OK)
|
logging.debug("Incorrect UE Kind was detected")
|
||||||
|
|
||||||
def TerminateOAIUE(self,HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS):
|
def TerminateOAIUE(self,HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS):
|
||||||
SSH = sshconnection.SSHConnection()
|
SSH = sshconnection.SSHConnection()
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ import logging
|
|||||||
#to create a SSH object locally in the methods
|
#to create a SSH object locally in the methods
|
||||||
import sshconnection
|
import sshconnection
|
||||||
#to update the HTML object
|
#to update the HTML object
|
||||||
import html
|
import cls_oai_html
|
||||||
from multiprocessing import SimpleQueue
|
from multiprocessing import SimpleQueue
|
||||||
#for log folder maintenance
|
#for log folder maintenance
|
||||||
import os
|
import os
|
||||||
@@ -168,7 +168,7 @@ class PhySim:
|
|||||||
|
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
#check build status and update HTML object
|
#check build status and update HTML object
|
||||||
lHTML = html.HTMLManagement()
|
lHTML = cls_oai_html.HTMLManagement()
|
||||||
lHTML=self.__CheckBuild_PhySim(htmlObj,constObj)
|
lHTML=self.__CheckBuild_PhySim(htmlObj,constObj)
|
||||||
return lHTML
|
return lHTML
|
||||||
|
|
||||||
@@ -186,6 +186,6 @@ class PhySim:
|
|||||||
mySSH.command(self.__workSpacePath+'ran_build/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 = cls_oai_html.HTMLManagement()
|
||||||
lHTML=self.__CheckResults_PhySim(htmlObj,constObj,testcase_id)
|
lHTML=self.__CheckResults_PhySim(htmlObj,constObj,testcase_id)
|
||||||
return lHTML
|
return lHTML
|
||||||
|
|||||||
+22
-10
@@ -33,7 +33,7 @@
|
|||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
import logging
|
import logging
|
||||||
import sshconnection as SSH
|
import sshconnection as SSH
|
||||||
import html
|
import cls_oai_html
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
@@ -153,6 +153,7 @@ class PhySim:
|
|||||||
mySSH.command(f'oc project {ocProjectName}', '\$', 30)
|
mySSH.command(f'oc project {ocProjectName}', '\$', 30)
|
||||||
if mySSH.getBefore().count(f'Already on project "{ocProjectName}"') == 0 and mySSH.getBefore().count(f'Now using project "{self.OCProjectName}"') == 0:
|
if mySSH.getBefore().count(f'Already on project "{ocProjectName}"') == 0 and mySSH.getBefore().count(f'Now using project "{self.OCProjectName}"') == 0:
|
||||||
logging.error(f'\u001B[1m Unable to access OC project {ocProjectName}\u001B[0m')
|
logging.error(f'\u001B[1m Unable to access OC project {ocProjectName}\u001B[0m')
|
||||||
|
mySSH.command('oc logout', '\$', 30)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PROJECT_FAIL)
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PROJECT_FAIL)
|
||||||
RAN.prematureExit = True
|
RAN.prematureExit = True
|
||||||
@@ -161,9 +162,10 @@ class PhySim:
|
|||||||
logging.debug(f'\u001B[1m Now using project {ocProjectName}\u001B[0m')
|
logging.debug(f'\u001B[1m Now using project {ocProjectName}\u001B[0m')
|
||||||
|
|
||||||
# Tag the image and push to the OC cluster
|
# Tag the image and push to the OC cluster
|
||||||
mySSH.command('oc whoami -t | sudo podman login -u ' + ocUserName + ' --password-stdin https://default-route-openshift-image-registry.apps.5glab.nsa.eurecom.fr/ --tls-verify=false', '\$', 30)
|
mySSH.command('oc whoami -t | sudo podman login -u ' + ocUserName + ' --password-stdin https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/ --tls-verify=false', '\$', 30)
|
||||||
if mySSH.getBefore().count('Login Succeeded!') == 0:
|
if mySSH.getBefore().count('Login Succeeded!') == 0:
|
||||||
logging.error('\u001B[1m Podman Login to OC Cluster Registry Failed\u001B[0m')
|
logging.error('\u001B[1m Podman Login to OC Cluster Registry Failed\u001B[0m')
|
||||||
|
mySSH.command('oc logout', '\$', 30)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL)
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL)
|
||||||
RAN.prematureExit = True
|
RAN.prematureExit = True
|
||||||
@@ -171,9 +173,11 @@ class PhySim:
|
|||||||
else:
|
else:
|
||||||
logging.debug('\u001B[1m Podman Login to OC Cluster Registry Successfully\u001B[0m')
|
logging.debug('\u001B[1m Podman Login to OC Cluster Registry Successfully\u001B[0m')
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
mySSH.command('oc create -f openshift/oai-physim-image-stream.yml', '\$', 30)
|
mySSH.command('oc create -f openshift/oai-physim-image-stream.yml || true', '\$', 30)
|
||||||
if mySSH.getBefore().count('(AlreadyExists):') == 0 and mySSH.getBefore().count('created') == 0:
|
if mySSH.getBefore().count('(AlreadyExists):') == 0 and mySSH.getBefore().count('created') == 0:
|
||||||
logging.error(f'\u001B[1m Image Stream "oai-physim" Creation Failed on OC Cluster {ocProjectName}\u001B[0m')
|
logging.error(f'\u001B[1m Image Stream "oai-physim" Creation Failed on OC Cluster {ocProjectName}\u001B[0m')
|
||||||
|
mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
|
||||||
|
mySSH.command('oc logout', '\$', 30)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_IS_FAIL)
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_IS_FAIL)
|
||||||
RAN.prematureExit = True
|
RAN.prematureExit = True
|
||||||
@@ -181,11 +185,13 @@ class PhySim:
|
|||||||
else:
|
else:
|
||||||
logging.debug(f'\u001B[1m Image Stream "oai-physim" created on OC project {ocProjectName}\u001B[0m')
|
logging.debug(f'\u001B[1m Image Stream "oai-physim" created on OC project {ocProjectName}\u001B[0m')
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
mySSH.command(f'sudo podman tag oai-physim:{imageTag} default-route-openshift-image-registry.apps.5glab.nsa.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 30)
|
mySSH.command(f'sudo podman tag oai-physim:{imageTag} default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 30)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
mySSH.command(f'sudo podman push default-route-openshift-image-registry.apps.5glab.nsa.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag} --tls-verify=false', '\$', 180)
|
mySSH.command(f'sudo podman push default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag} --tls-verify=false', '\$', 180)
|
||||||
if mySSH.getBefore().count('Storing signatures') == 0:
|
if mySSH.getBefore().count('Storing signatures') == 0:
|
||||||
logging.error('\u001B[1m Image "oai-physim" push to OC Cluster Registry Failed\u001B[0m')
|
logging.error('\u001B[1m Image "oai-physim" push to OC Cluster Registry Failed\u001B[0m')
|
||||||
|
mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
|
||||||
|
mySSH.command('oc logout', '\$', 30)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_IS_FAIL)
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_IS_FAIL)
|
||||||
RAN.prematureExit = True
|
RAN.prematureExit = True
|
||||||
@@ -195,8 +201,9 @@ class PhySim:
|
|||||||
|
|
||||||
# Using helm charts deployment
|
# Using helm charts deployment
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
|
mySSH.command(f'grep -rl OAICICD_PROJECT ./charts/ | xargs sed -i -e "s#OAICICD_PROJECT#{ocProjectName}#"', '\$', 30)
|
||||||
mySSH.command(f'sed -i -e "s#TAG#{imageTag}#g" ./charts/physims/values.yaml', '\$', 6)
|
mySSH.command(f'sed -i -e "s#TAG#{imageTag}#g" ./charts/physims/values.yaml', '\$', 6)
|
||||||
mySSH.command('helm install physim ./charts/physims/ | tee -a cmake_targets/log/physim_helm_summary.txt 2>&1', '\$', 30)
|
mySSH.command('helm install physim ./charts/physims/ 2>&1 | tee -a cmake_targets/log/physim_helm_summary.txt', '\$', 30)
|
||||||
if mySSH.getBefore().count('STATUS: deployed') == 0:
|
if mySSH.getBefore().count('STATUS: deployed') == 0:
|
||||||
logging.error('\u001B[1m Deploying PhySim Failed using helm chart on OC Cluster\u001B[0m')
|
logging.error('\u001B[1m Deploying PhySim Failed using helm chart on OC Cluster\u001B[0m')
|
||||||
mySSH.command('helm uninstall physim >> cmake_targets/log/physim_helm_summary.txt 2>&1', '\$', 30)
|
mySSH.command('helm uninstall physim >> cmake_targets/log/physim_helm_summary.txt 2>&1', '\$', 30)
|
||||||
@@ -206,8 +213,10 @@ class PhySim:
|
|||||||
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim', '\$', 6, resync=True)
|
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim', '\$', 6, resync=True)
|
||||||
if re.search('No resources found', mySSH.getBefore()):
|
if re.search('No resources found', mySSH.getBefore()):
|
||||||
isFinished1 = True
|
isFinished1 = True
|
||||||
mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.5glab.nsa.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 30)
|
mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 30)
|
||||||
mySSH.command('oc delete is oai-physim', '\$', 30)
|
mySSH.command('oc delete is oai-physim', '\$', 30)
|
||||||
|
mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
|
||||||
|
mySSH.command('oc logout', '\$', 30)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
self.AnalyzeLogFile_phySim(HTML)
|
self.AnalyzeLogFile_phySim(HTML)
|
||||||
RAN.prematureExit = True
|
RAN.prematureExit = True
|
||||||
@@ -227,7 +236,7 @@ class PhySim:
|
|||||||
if isRunning == False:
|
if isRunning == False:
|
||||||
logging.error('\u001B[1m Some PODS Running FAILED \u001B[0m')
|
logging.error('\u001B[1m Some PODS Running FAILED \u001B[0m')
|
||||||
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim 2>&1 | tee -a cmake_targets/log/physim_pods_summary.txt', '\$', 6)
|
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim 2>&1 | tee -a cmake_targets/log/physim_pods_summary.txt', '\$', 6)
|
||||||
mySSH.command('helm uninstall physim >> cmake_targets/log/physim_helm_summary.txt 2>&1', '\$', 6)
|
mySSH.command('helm uninstall physim 2>&1 >> cmake_targets/log/physim_helm_summary.txt', '\$', 6)
|
||||||
self.AnalyzeLogFile_phySim(HTML)
|
self.AnalyzeLogFile_phySim(HTML)
|
||||||
isFinished1 = False
|
isFinished1 = False
|
||||||
while(isFinished1 == False):
|
while(isFinished1 == False):
|
||||||
@@ -235,8 +244,10 @@ class PhySim:
|
|||||||
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim', '\$', 6, resync=True)
|
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim', '\$', 6, resync=True)
|
||||||
if re.search('No resources found', mySSH.getBefore()):
|
if re.search('No resources found', mySSH.getBefore()):
|
||||||
isFinished1 = True
|
isFinished1 = True
|
||||||
mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.5glab.nsa.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 6)
|
mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 6)
|
||||||
mySSH.command('oc delete is oai-physim', '\$', 6)
|
mySSH.command('oc delete is oai-physim', '\$', 6)
|
||||||
|
mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
|
||||||
|
mySSH.command('oc logout', '\$', 30)
|
||||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PHYSIM_DEPLOY_FAIL)
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PHYSIM_DEPLOY_FAIL)
|
||||||
HTML.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult)
|
HTML.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult)
|
||||||
RAN.prematureExit = True
|
RAN.prematureExit = True
|
||||||
@@ -293,9 +304,10 @@ class PhySim:
|
|||||||
isFinished1 = True
|
isFinished1 = True
|
||||||
if isFinished1 == True:
|
if isFinished1 == True:
|
||||||
logging.debug('\u001B[1m UnDeployed PhySim Successfully on OC Cluster\u001B[0m')
|
logging.debug('\u001B[1m UnDeployed PhySim Successfully on OC Cluster\u001B[0m')
|
||||||
mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.5glab.nsa.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 6)
|
mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 6)
|
||||||
mySSH.command('oc delete is oai-physim', '\$', 6)
|
mySSH.command('oc delete is oai-physim', '\$', 6)
|
||||||
logging.debug('\u001B[1m Deleted the Image and ImageStream\u001B[0m')
|
logging.debug('\u001B[1m Deleted the Image and ImageStream\u001B[0m')
|
||||||
|
mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
|
||||||
mySSH.command('oc logout', '\$', 6)
|
mySSH.command('oc logout', '\$', 6)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
self.AnalyzeLogFile_phySim(HTML)
|
self.AnalyzeLogFile_phySim(HTML)
|
||||||
|
|||||||
@@ -35,7 +35,9 @@ import sys # arg
|
|||||||
import re # reg
|
import re # reg
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
from pathlib import Path
|
||||||
import time
|
import time
|
||||||
|
from multiprocessing import Process, Lock, SimpleQueue
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# OAI Testing modules
|
# OAI Testing modules
|
||||||
@@ -51,7 +53,7 @@ class CppCheckResults():
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
||||||
self.variants = ['xenial', 'bionic']
|
self.variants = ['bionic', 'focal']
|
||||||
self.versions = ['','']
|
self.versions = ['','']
|
||||||
self.nbErrors = [0,0]
|
self.nbErrors = [0,0]
|
||||||
self.nbWarnings = [0,0]
|
self.nbWarnings = [0,0]
|
||||||
@@ -116,12 +118,22 @@ class StaticCodeAnalysis():
|
|||||||
# if the commit ID is provided use it to point to it
|
# if the commit ID is provided use it to point to it
|
||||||
if self.ranCommitID != '':
|
if self.ranCommitID != '':
|
||||||
mySSH.command('git checkout -f ' + self.ranCommitID, '\$', 30)
|
mySSH.command('git checkout -f ' + self.ranCommitID, '\$', 30)
|
||||||
|
# if the branch is not develop, then it is a merge request and we need to do
|
||||||
|
# the potential merge. Note that merge conflicts should already been checked earlier
|
||||||
|
if (self.ranAllowMerge):
|
||||||
|
if self.ranTargetBranch == '':
|
||||||
|
if (self.ranBranch != 'develop') and (self.ranBranch != 'origin/develop'):
|
||||||
|
mySSH.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5)
|
||||||
|
else:
|
||||||
|
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('docker image rm oai-cppcheck:bionic oai-cppcheck:xenial || true', '\$', 60)
|
mySSH.command('docker image rm oai-cppcheck:bionic oai-cppcheck:focal || true', '\$', 60)
|
||||||
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', '\$', 30)
|
mySSH.command('sed -e "s@xenial@focal@" ci-scripts/docker/Dockerfile.cppcheck.xenial > ci-scripts/docker/Dockerfile.cppcheck.focal', '\$', 6)
|
||||||
|
mySSH.command('docker build --tag oai-cppcheck:focal --file ci-scripts/docker/Dockerfile.cppcheck.focal . > cmake_targets/log/cppcheck-focal.txt 2>&1', '\$', 600)
|
||||||
|
mySSH.command('docker image rm oai-cppcheck:bionic oai-cppcheck:focal || true', '\$', 30)
|
||||||
|
|
||||||
# Analyzing the logs
|
# Analyzing the logs
|
||||||
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
|
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
|
||||||
@@ -131,8 +143,22 @@ class StaticCodeAnalysis():
|
|||||||
|
|
||||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/build_log_' + self.testCase_id + '/*', '.')
|
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/build_log_' + self.testCase_id + '/*', '.')
|
||||||
CCR = CppCheckResults()
|
CCR = CppCheckResults()
|
||||||
|
CCR_ref = CppCheckResults()
|
||||||
vId = 0
|
vId = 0
|
||||||
for variant in CCR.variants:
|
for variant in CCR.variants:
|
||||||
|
refAvailable = False
|
||||||
|
if self.ranAllowMerge:
|
||||||
|
refFolder = str(Path.home()) + '/cppcheck-references'
|
||||||
|
if (os.path.isfile(refFolder + '/cppcheck-'+ variant + '.txt')):
|
||||||
|
refAvailable = True
|
||||||
|
with open(refFolder + '/cppcheck-'+ variant + '.txt', 'r') as refFile:
|
||||||
|
for line in refFile:
|
||||||
|
ret = re.search(' (?P<nb_errors>[0-9\.]+) errors', str(line))
|
||||||
|
if ret is not None:
|
||||||
|
CCR_ref.nbErrors[vId] = int(ret.group('nb_errors'))
|
||||||
|
ret = re.search(' (?P<nb_warnings>[0-9\.]+) warnings', str(line))
|
||||||
|
if ret is not None:
|
||||||
|
CCR_ref.nbWarnings[vId] = int(ret.group('nb_warnings'))
|
||||||
if (os.path.isfile('./cppcheck-'+ variant + '.txt')):
|
if (os.path.isfile('./cppcheck-'+ variant + '.txt')):
|
||||||
xmlStart = False
|
xmlStart = False
|
||||||
with open('./cppcheck-'+ variant + '.txt', 'r') as logfile:
|
with open('./cppcheck-'+ variant + '.txt', 'r') as logfile:
|
||||||
@@ -167,21 +193,43 @@ class StaticCodeAnalysis():
|
|||||||
CCR.nbPtrAddNotNull[vId] += 1
|
CCR.nbPtrAddNotNull[vId] += 1
|
||||||
if re.search('id="oppositeInnerCondition"', str(line)) is not None:
|
if re.search('id="oppositeInnerCondition"', str(line)) is not None:
|
||||||
CCR.nbOppoInnerCondition[vId] += 1
|
CCR.nbOppoInnerCondition[vId] += 1
|
||||||
logging.debug('======== Variant ' + variant + ' - ' + CCR.versions[vId] + ' ========')
|
vMsg = ''
|
||||||
logging.debug(' ' + str(CCR.nbErrors[vId]) + ' errors')
|
vMsg += '======== Variant ' + variant + ' - ' + CCR.versions[vId] + ' ========\n'
|
||||||
logging.debug(' ' + str(CCR.nbWarnings[vId]) + ' warnings')
|
vMsg += ' ' + str(CCR.nbErrors[vId]) + ' errors\n'
|
||||||
logging.debug(' -- Details --')
|
vMsg += ' ' + str(CCR.nbWarnings[vId]) + ' warnings\n'
|
||||||
logging.debug(' Memory leak: ' + str(CCR.nbMemLeaks[vId]))
|
vMsg += ' -- Details --\n'
|
||||||
logging.debug(' Possible null pointer deference: ' + str(CCR.nbNullPtrs[vId]))
|
vMsg += ' Memory leak: ' + str(CCR.nbMemLeaks[vId]) + '\n'
|
||||||
logging.debug(' Uninitialized variable: ' + str(CCR.nbUninitVars[vId]))
|
vMsg += ' Possible null pointer deference: ' + str(CCR.nbNullPtrs[vId]) + '\n'
|
||||||
logging.debug(' Undefined behaviour shifting: ' + str(CCR.nbTooManyBitsShift[vId]))
|
vMsg += ' Uninitialized variable: ' + str(CCR.nbUninitVars[vId]) + '\n'
|
||||||
logging.debug(' Signed integer overflow: ' + str(CCR.nbIntegerOverflow[vId]))
|
vMsg += ' Undefined behaviour shifting: ' + str(CCR.nbTooManyBitsShift[vId]) + '\n'
|
||||||
logging.debug('')
|
vMsg += ' Signed integer overflow: ' + str(CCR.nbIntegerOverflow[vId]) + '\n'
|
||||||
logging.debug(' Printf formatting issue: ' + str(CCR.nbInvalidPrintf[vId]))
|
vMsg += '\n'
|
||||||
logging.debug(' Modulo result is predetermined: ' + str(CCR.nbModuloAlways[vId]))
|
vMsg += ' Printf formatting issue: ' + str(CCR.nbInvalidPrintf[vId]) + '\n'
|
||||||
logging.debug(' Opposite Condition -> dead code: ' + str(CCR.nbOppoInnerCondition[vId]))
|
vMsg += ' Modulo result is predetermined: ' + str(CCR.nbModuloAlways[vId]) + '\n'
|
||||||
logging.debug(' Wrong Scanf Nb Args: ' + str(CCR.nbWrongScanfArg[vId]))
|
vMsg += ' Opposite Condition -> dead code: ' + str(CCR.nbOppoInnerCondition[vId]) + '\n'
|
||||||
logging.debug('')
|
vMsg += ' Wrong Scanf Nb Args: ' + str(CCR.nbWrongScanfArg[vId]) + '\n'
|
||||||
|
for vLine in vMsg.split('\n'):
|
||||||
|
logging.debug(vLine)
|
||||||
|
if self.ranAllowMerge and refAvailable:
|
||||||
|
if CCR_ref.nbErrors[vId] == CCR.nbErrors[vId]:
|
||||||
|
logging.debug(' No change in number of errors')
|
||||||
|
elif CCR_ref.nbErrors[vId] > CCR.nbErrors[vId]:
|
||||||
|
logging.debug(' Good! Decrease in number of errors')
|
||||||
|
else:
|
||||||
|
logging.debug(' Bad! increase in number of errors')
|
||||||
|
if CCR_ref.nbWarnings[vId] == CCR.nbWarnings[vId]:
|
||||||
|
logging.debug(' No change in number of warnings')
|
||||||
|
elif CCR_ref.nbWarnings[vId] > CCR.nbWarnings[vId]:
|
||||||
|
logging.debug(' Good! Decrease in number of warnings')
|
||||||
|
else:
|
||||||
|
logging.debug(' Bad! increase in number of warnings')
|
||||||
|
# Create new reference file
|
||||||
|
if not self.ranAllowMerge:
|
||||||
|
refFolder = str(Path.home()) + '/cppcheck-references'
|
||||||
|
if not os.path.isdir(refFolder):
|
||||||
|
os.mkdir(refFolder)
|
||||||
|
with open(refFolder + '/cppcheck-'+ variant + '.txt', 'w') as refFile:
|
||||||
|
refFile.write(vMsg)
|
||||||
vId += 1
|
vId += 1
|
||||||
|
|
||||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
@@ -190,3 +238,205 @@ class StaticCodeAnalysis():
|
|||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
def LicenceAndFormattingCheck(self, HTML):
|
||||||
|
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
|
||||||
|
HELP.GenericHelp(CONST.Version)
|
||||||
|
sys.exit('Insufficient Parameter')
|
||||||
|
lIpAddr = self.eNBIPAddress
|
||||||
|
lUserName = self.eNBUserName
|
||||||
|
lPassWord = self.eNBPassword
|
||||||
|
lSourcePath = self.eNBSourceCodePath
|
||||||
|
|
||||||
|
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
||||||
|
HELP.GenericHelp(CONST.Version)
|
||||||
|
sys.exit('Insufficient Parameter')
|
||||||
|
logging.debug('Building on server: ' + lIpAddr)
|
||||||
|
mySSH = SSH.SSHConnection()
|
||||||
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
|
|
||||||
|
self.testCase_id = HTML.testCase_id
|
||||||
|
|
||||||
|
# on RedHat/CentOS .git extension is mandatory
|
||||||
|
result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository)
|
||||||
|
if result is not None:
|
||||||
|
full_ran_repo_name = self.ranRepository.replace('git/', 'git')
|
||||||
|
else:
|
||||||
|
full_ran_repo_name = self.ranRepository + '.git'
|
||||||
|
mySSH.command('mkdir -p ' + lSourcePath, '\$', 5)
|
||||||
|
mySSH.command('cd ' + lSourcePath, '\$', 5)
|
||||||
|
mySSH.command('if [ ! -e .git ]; then stdbuf -o0 git clone ' + full_ran_repo_name + ' .; else stdbuf -o0 git fetch --prune; fi', '\$', 600)
|
||||||
|
# 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.name "OAI Jenkins"', '\$', 5)
|
||||||
|
|
||||||
|
mySSH.command('echo ' + lPassWord + ' | sudo -S git clean -x -d -ff', '\$', 30)
|
||||||
|
mySSH.command('mkdir -p cmake_targets/log', '\$', 5)
|
||||||
|
# if the commit ID is provided use it to point to it
|
||||||
|
if self.ranCommitID != '':
|
||||||
|
mySSH.command('git checkout -f ' + self.ranCommitID, '\$', 30)
|
||||||
|
# if the branch is not develop, then it is a merge request and we need to do
|
||||||
|
# the potential merge. Note that merge conflicts should already been checked earlier
|
||||||
|
argToPass = ''
|
||||||
|
if (self.ranAllowMerge):
|
||||||
|
argToPass = '--build-arg MERGE_REQUEST=true --build-arg SRC_BRANCH=' + self.ranBranch
|
||||||
|
if self.ranTargetBranch == '':
|
||||||
|
if (self.ranBranch != 'develop') and (self.ranBranch != 'origin/develop'):
|
||||||
|
mySSH.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5)
|
||||||
|
argToPass += ' --build-arg TARGET_BRANCH=develop '
|
||||||
|
else:
|
||||||
|
logging.debug('Merging with the target branch: ' + self.ranTargetBranch)
|
||||||
|
mySSH.command('git merge --ff origin/' + self.ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 5)
|
||||||
|
argToPass += ' --build-arg TARGET_BRANCH=' + self.ranTargetBranch + ' '
|
||||||
|
|
||||||
|
mySSH.command('docker image rm oai-formatting-check:latest || true', '\$', 60)
|
||||||
|
mySSH.command('docker build --target oai-formatting-check --tag oai-formatting-check:latest ' + argToPass + '--file ci-scripts/docker/Dockerfile.formatting.bionic . > cmake_targets/log/oai-formatting-check.txt 2>&1', '\$', 600)
|
||||||
|
|
||||||
|
mySSH.command('docker image rm oai-formatting-check:latest || true', '\$', 60)
|
||||||
|
mySSH.command('docker image prune --force', '\$', 60)
|
||||||
|
mySSH.command('docker volume prune --force', '\$', 60)
|
||||||
|
|
||||||
|
# Analyzing the logs
|
||||||
|
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
|
||||||
|
mySSH.command('mkdir -p build_log_' + self.testCase_id, '\$', 5)
|
||||||
|
mySSH.command('mv log/* ' + 'build_log_' + self.testCase_id, '\$', 5)
|
||||||
|
mySSH.close()
|
||||||
|
|
||||||
|
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/build_log_' + self.testCase_id + '/*', '.')
|
||||||
|
|
||||||
|
finalStatus = 0
|
||||||
|
if (os.path.isfile('./oai-formatting-check.txt')):
|
||||||
|
analyzed = False
|
||||||
|
nbFilesNotFormatted = 0
|
||||||
|
listFiles = False
|
||||||
|
listFilesNotFormatted = []
|
||||||
|
circularHeaderDependency = False
|
||||||
|
circularHeaderDependencyFiles = []
|
||||||
|
gnuGplLicence = False
|
||||||
|
gnuGplLicenceFiles = []
|
||||||
|
suspectLicence = False
|
||||||
|
suspectLicenceFiles = []
|
||||||
|
with open('./oai-formatting-check.txt', 'r') as logfile:
|
||||||
|
for line in logfile:
|
||||||
|
ret = re.search('./ci-scripts/checkCodingFormattingRules.sh', str(line))
|
||||||
|
if ret is not None:
|
||||||
|
analyzed = True
|
||||||
|
if analyzed:
|
||||||
|
ret = re.search('Nb Files that do NOT follow OAI rules: (?P<nb_errors>[0-9\.]+)', str(line))
|
||||||
|
if ret is not None:
|
||||||
|
nbFilesNotFormatted = int(ret.group('nb_errors'))
|
||||||
|
|
||||||
|
if re.search('=== Files not properly formatted ===', str(line)) is not None:
|
||||||
|
listFiles = True
|
||||||
|
if listFiles:
|
||||||
|
if re.search('Removing intermediate container', str(line)) is not None:
|
||||||
|
listFiles = False
|
||||||
|
elif re.search('Running in|Files not properly formatted', str(line)) is not None:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
listFilesNotFormatted.append(str(line).strip())
|
||||||
|
|
||||||
|
if re.search('=== Files with incorrect define protection ===', str(line)) is not None:
|
||||||
|
circularHeaderDependency = True
|
||||||
|
if circularHeaderDependency:
|
||||||
|
if re.search('Removing intermediate container', str(line)) is not None:
|
||||||
|
circularHeaderDependency = False
|
||||||
|
elif re.search('Running in|Files with incorrect define protection', str(line)) is not None:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
circularHeaderDependencyFiles.append(str(line).strip())
|
||||||
|
|
||||||
|
if re.search('=== Files with a GNU GPL licence Banner ===', str(line)) is not None:
|
||||||
|
gnuGplLicence = True
|
||||||
|
if gnuGplLicence:
|
||||||
|
if re.search('Removing intermediate container', str(line)) is not None:
|
||||||
|
gnuGplLicence = False
|
||||||
|
elif re.search('Running in|Files with a GNU GPL licence Banner', str(line)) is not None:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
gnuGplLicenceFiles.append(str(line).strip())
|
||||||
|
|
||||||
|
if re.search('=== Files with a suspect Banner ===', str(line)) is not None:
|
||||||
|
suspectLicence = True
|
||||||
|
if suspectLicence:
|
||||||
|
if re.search('Removing intermediate container', str(line)) is not None:
|
||||||
|
suspectLicence = False
|
||||||
|
elif re.search('Running in|Files with a suspect Banner', str(line)) is not None:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
suspectLicenceFiles.append(str(line).strip())
|
||||||
|
|
||||||
|
logfile.close()
|
||||||
|
if analyzed:
|
||||||
|
logging.debug('files not formatted properly: ' + str(nbFilesNotFormatted))
|
||||||
|
if nbFilesNotFormatted == 0:
|
||||||
|
HTML.CreateHtmlTestRow('File(s) Format', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
else:
|
||||||
|
html_queue = SimpleQueue()
|
||||||
|
html_cell = '<pre style="background-color:white">\n'
|
||||||
|
html_cell += 'Number of files not following OAI Rules: ' + str(nbFilesNotFormatted) + '\n'
|
||||||
|
for nFile in listFilesNotFormatted:
|
||||||
|
html_cell += str(nFile).strip() + '\n'
|
||||||
|
html_cell += '</pre>'
|
||||||
|
html_queue.put(html_cell)
|
||||||
|
HTML.CreateHtmlTestRowQueue('File(s) Format', 'KO', 1, html_queue)
|
||||||
|
del(html_cell)
|
||||||
|
del(html_queue)
|
||||||
|
|
||||||
|
logging.debug('header files not respecting the circular dependency protection: ' + str(len(circularHeaderDependencyFiles)))
|
||||||
|
if len(circularHeaderDependencyFiles) == 0:
|
||||||
|
HTML.CreateHtmlTestRow('Header Circular Dependency', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
else:
|
||||||
|
html_queue = SimpleQueue()
|
||||||
|
html_cell = '<pre style="background-color:white">\n'
|
||||||
|
html_cell += 'Number of files not respecting: ' + str(len(circularHeaderDependencyFiles)) + '\n'
|
||||||
|
for nFile in circularHeaderDependencyFiles:
|
||||||
|
html_cell += str(nFile).strip() + '\n'
|
||||||
|
html_cell += '</pre>'
|
||||||
|
html_queue.put(html_cell)
|
||||||
|
HTML.CreateHtmlTestRowQueue('Header Circular Dependency', 'KO', 1, html_queue)
|
||||||
|
del(html_cell)
|
||||||
|
del(html_queue)
|
||||||
|
finalStatus = -1
|
||||||
|
|
||||||
|
logging.debug('files with a GNU GPL license: ' + str(len(gnuGplLicenceFiles)))
|
||||||
|
if len(gnuGplLicenceFiles) == 0:
|
||||||
|
HTML.CreateHtmlTestRow('Files w/ GNU GPL License', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
else:
|
||||||
|
html_queue = SimpleQueue()
|
||||||
|
html_cell = '<pre style="background-color:white">\n'
|
||||||
|
html_cell += 'Number of files not respecting: ' + str(len(gnuGplLicenceFiles)) + '\n'
|
||||||
|
for nFile in gnuGplLicenceFiles:
|
||||||
|
html_cell += str(nFile).strip() + '\n'
|
||||||
|
html_cell += '</pre>'
|
||||||
|
html_queue.put(html_cell)
|
||||||
|
HTML.CreateHtmlTestRowQueue('Files w/ GNU GPL License', 'KO', 1, html_queue)
|
||||||
|
del(html_cell)
|
||||||
|
del(html_queue)
|
||||||
|
finalStatus = -1
|
||||||
|
|
||||||
|
logging.debug('files with a suspect license: ' + str(len(suspectLicenceFiles)))
|
||||||
|
if len(suspectLicenceFiles) == 0:
|
||||||
|
HTML.CreateHtmlTestRow('Files with suspect license', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
else:
|
||||||
|
html_queue = SimpleQueue()
|
||||||
|
html_cell = '<pre style="background-color:white">\n'
|
||||||
|
html_cell += 'Number of files not respecting: ' + str(len(suspectLicenceFiles)) + '\n'
|
||||||
|
for nFile in suspectLicenceFiles:
|
||||||
|
html_cell += str(nFile).strip() + '\n'
|
||||||
|
html_cell += '</pre>'
|
||||||
|
html_queue.put(html_cell)
|
||||||
|
HTML.CreateHtmlTestRowQueue('Files with suspect license', 'KO', 1, html_queue)
|
||||||
|
del(html_cell)
|
||||||
|
del(html_queue)
|
||||||
|
finalStatus = -1
|
||||||
|
|
||||||
|
else:
|
||||||
|
finalStatus = -1
|
||||||
|
HTML.htmleNBFailureMsg = 'Could not fully analyze oai-formatting-check.txt file'
|
||||||
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
|
||||||
|
else:
|
||||||
|
finalStatus = -1
|
||||||
|
HTML.htmleNBFailureMsg = 'Could not access oai-formatting-check.txt file'
|
||||||
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
|
||||||
|
|
||||||
|
return finalStatus
|
||||||
|
|||||||
@@ -22,9 +22,7 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 31; //0;
|
ssb_SubcarrierOffset = 31; //0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
#spCellConfigCommon
|
#spCellConfigCommon
|
||||||
|
|||||||
@@ -211,8 +211,8 @@ MACRLCs = (
|
|||||||
bler_target_upper = 20.0;
|
bler_target_upper = 20.0;
|
||||||
bler_target_lower = 10.0;
|
bler_target_lower = 10.0;
|
||||||
max_ul_rb_index = 27;
|
max_ul_rb_index = 27;
|
||||||
puSch10xSnr = 200;
|
puSch10xSnr = 190;
|
||||||
puCch10xSnr = 150;
|
puCch10xSnr = 160;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -231,13 +231,13 @@ RUs = (
|
|||||||
local_rf = "yes"
|
local_rf = "yes"
|
||||||
nb_tx = 2
|
nb_tx = 2
|
||||||
nb_rx = 2
|
nb_rx = 2
|
||||||
att_tx = 0
|
att_tx = 10
|
||||||
att_rx = 0;
|
att_rx = 5;
|
||||||
bands = [38];
|
bands = [38];
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 75;
|
max_rxgain = 75;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
sdr_addrs = "mgmt_addr=192.168.18.241,addr=192.168.20.2,second_addr=192.168.10.2";
|
sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.20.2,second_addr=192.168.10.2";
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -211,8 +211,8 @@ MACRLCs = (
|
|||||||
bler_target_upper = 20.0;
|
bler_target_upper = 20.0;
|
||||||
bler_target_lower = 10.0;
|
bler_target_lower = 10.0;
|
||||||
max_ul_rb_index = 27;
|
max_ul_rb_index = 27;
|
||||||
puSch10xSnr = 200;
|
puSch10xSnr = 190;
|
||||||
puCch10xSnr = 150;
|
puCch10xSnr = 160;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -231,13 +231,13 @@ RUs = (
|
|||||||
local_rf = "yes"
|
local_rf = "yes"
|
||||||
nb_tx = 2
|
nb_tx = 2
|
||||||
nb_rx = 2
|
nb_rx = 2
|
||||||
att_tx = 0
|
att_tx = 10
|
||||||
att_rx = 0;
|
att_rx = 5;
|
||||||
bands = [38];
|
bands = [38];
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 75;
|
max_rxgain = 75;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
sdr_addrs = "mgmt_addr=192.168.18.241,addr=192.168.20.2,second_addr=192.168.10.2";
|
sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.20.2,second_addr=192.168.10.2";
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -211,8 +211,8 @@ MACRLCs = (
|
|||||||
bler_target_upper = 20.0;
|
bler_target_upper = 20.0;
|
||||||
bler_target_lower = 10.0;
|
bler_target_lower = 10.0;
|
||||||
max_ul_rb_index = 27;
|
max_ul_rb_index = 27;
|
||||||
puSch10xSnr = 200;
|
puSch10xSnr = 190;
|
||||||
puCch10xSnr = 150;
|
puCch10xSnr = 160;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -231,13 +231,13 @@ RUs = (
|
|||||||
local_rf = "yes"
|
local_rf = "yes"
|
||||||
nb_tx = 2
|
nb_tx = 2
|
||||||
nb_rx = 2
|
nb_rx = 2
|
||||||
att_tx = 0
|
att_tx = 10
|
||||||
att_rx = 0;
|
att_rx = 5;
|
||||||
bands = [38];
|
bands = [38];
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 75;
|
max_rxgain = 75;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
sdr_addrs = "mgmt_addr=192.168.18.241,addr=192.168.20.2,second_addr=192.168.10.2";
|
sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.20.2,second_addr=192.168.10.2";
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -33,9 +33,6 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
ul_prbblacklist = "51,52,53,54"
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
{
|
{
|
||||||
@@ -73,15 +70,6 @@ gNBs =
|
|||||||
#pdcch-ConfigCommon
|
#pdcch-ConfigCommon
|
||||||
initialDLBWPcontrolResourceSetZero = 12;
|
initialDLBWPcontrolResourceSetZero = 12;
|
||||||
initialDLBWPsearchSpaceZero = 0;
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
#pdsch-ConfigCommon
|
|
||||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
|
||||||
initialDLBWPk0_0 = 0; #for DL slot
|
|
||||||
initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB
|
|
||||||
initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13
|
|
||||||
|
|
||||||
initialDLBWPk0_1 = 0; #for mixed slot
|
|
||||||
initialDLBWPmappingType_1 = 0;
|
|
||||||
initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5
|
|
||||||
|
|
||||||
#uplinkConfigCommon
|
#uplinkConfigCommon
|
||||||
#frequencyInfoUL
|
#frequencyInfoUL
|
||||||
@@ -136,19 +124,6 @@ gNBs =
|
|||||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
restrictedSetConfig = 0,
|
restrictedSetConfig = 0,
|
||||||
|
|
||||||
# pusch-ConfigCommon (up to 16 elements)
|
|
||||||
initialULBWPk2_0 = 6; # used for UL slot
|
|
||||||
initialULBWPmappingType_0 = 1
|
|
||||||
initialULBWPstartSymbolAndLength_0 = 41; # this is SS=0 L=13
|
|
||||||
|
|
||||||
initialULBWPk2_1 = 6; # used for mixed slot
|
|
||||||
initialULBWPmappingType_1 = 1;
|
|
||||||
initialULBWPstartSymbolAndLength_1 = 52; # this is SS=10 L=4
|
|
||||||
|
|
||||||
initialULBWPk2_2 = 7; # used for Msg.3 during RA
|
|
||||||
initialULBWPmappingType_2 = 1;
|
|
||||||
initialULBWPstartSymbolAndLength_2 = 52; # this is SS=10 L=4
|
|
||||||
|
|
||||||
msg3_DeltaPreamble = 1;
|
msg3_DeltaPreamble = 1;
|
||||||
p0_NominalWithGrant =-90;
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
@@ -264,7 +239,7 @@ RUs = (
|
|||||||
#beamforming 1x4 matrix:
|
#beamforming 1x4 matrix:
|
||||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||||
#clock_src = "external";
|
#clock_src = "external";
|
||||||
sdr_addrs = "mgmt_addr=192.168.18.240,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
log_config = {
|
|
||||||
global_log_level ="info";
|
|
||||||
hw_log_level ="info";
|
|
||||||
phy_log_level ="info";
|
|
||||||
mac_log_level ="info";
|
|
||||||
rlc_log_level ="info";
|
|
||||||
pdcp_log_level ="info";
|
|
||||||
rrc_log_level ="info";
|
|
||||||
};
|
|
||||||
|
|
||||||
uicc0 = {
|
|
||||||
imsi = "208950000000031";
|
|
||||||
key = "0c0a34601d4f07677303652c0462535b";
|
|
||||||
opc= "63bfa50ee6523365ff14c1f45f88737d";
|
|
||||||
dnn= "oai";
|
|
||||||
nssai_sst=222;
|
|
||||||
nssai_sd=123;
|
|
||||||
}
|
|
||||||
|
|
||||||
L1s = (
|
|
||||||
{
|
|
||||||
num_cc = 1;
|
|
||||||
tr_n_preference = "nfapi";
|
|
||||||
local_n_if_name = "ens3";
|
|
||||||
remote_n_address = "127.0.0.1"; //Proxy IP
|
|
||||||
local_n_address = "127.0.0.1";
|
|
||||||
local_n_portc = 50600;
|
|
||||||
remote_n_portc = 50601;
|
|
||||||
local_n_portd = 50610;
|
|
||||||
remote_n_portd = 50611;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
RUs = (
|
|
||||||
{
|
|
||||||
local_rf = "yes"
|
|
||||||
nb_tx = 1
|
|
||||||
nb_rx = 1
|
|
||||||
att_tx = 90
|
|
||||||
att_rx = 0;
|
|
||||||
bands = [7,38,42,43];
|
|
||||||
max_pdschReferenceSignalPower = -27;
|
|
||||||
max_rxgain = 125;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
log_config = {
|
|
||||||
global_log_level ="info";
|
|
||||||
hw_log_level ="info";
|
|
||||||
phy_log_level ="info";
|
|
||||||
mac_log_level ="info";
|
|
||||||
rlc_log_level ="info";
|
|
||||||
pdcp_log_level ="info";
|
|
||||||
rrc_log_level ="info";
|
|
||||||
};
|
|
||||||
|
|
||||||
uicc0 = {
|
|
||||||
imsi = "208950000000032";
|
|
||||||
key = "0c0a34601d4f07677303652c0462535b";
|
|
||||||
opc= "63bfa50ee6523365ff14c1f45f88737d";
|
|
||||||
dnn= "oai";
|
|
||||||
nssai_sst=222;
|
|
||||||
nssai_sd=123;
|
|
||||||
}
|
|
||||||
|
|
||||||
L1s = (
|
|
||||||
{
|
|
||||||
num_cc = 1;
|
|
||||||
tr_n_preference = "nfapi";
|
|
||||||
local_n_if_name = "ens3";
|
|
||||||
remote_n_address = "127.0.0.1"; //Proxy IP
|
|
||||||
local_n_address = "127.0.0.1";
|
|
||||||
local_n_portc = 50600;
|
|
||||||
remote_n_portc = 50601;
|
|
||||||
local_n_portd = 50610;
|
|
||||||
remote_n_portd = 50611;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
RUs = (
|
|
||||||
{
|
|
||||||
local_rf = "yes"
|
|
||||||
nb_tx = 1
|
|
||||||
nb_rx = 1
|
|
||||||
att_tx = 90
|
|
||||||
att_rx = 0;
|
|
||||||
bands = [7,38,42,43];
|
|
||||||
max_pdschReferenceSignalPower = -27;
|
|
||||||
max_rxgain = 125;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
log_config = {
|
|
||||||
global_log_level ="info";
|
|
||||||
hw_log_level ="info";
|
|
||||||
phy_log_level ="info";
|
|
||||||
mac_log_level ="info";
|
|
||||||
rlc_log_level ="info";
|
|
||||||
pdcp_log_level ="info";
|
|
||||||
rrc_log_level ="info";
|
|
||||||
};
|
|
||||||
|
|
||||||
uicc0 = {
|
|
||||||
imsi = "208950000000033";
|
|
||||||
key = "0c0a34601d4f07677303652c0462535b";
|
|
||||||
opc= "63bfa50ee6523365ff14c1f45f88737d";
|
|
||||||
dnn= "oai";
|
|
||||||
nssai_sst=222;
|
|
||||||
nssai_sd=123;
|
|
||||||
}
|
|
||||||
|
|
||||||
L1s = (
|
|
||||||
{
|
|
||||||
num_cc = 1;
|
|
||||||
tr_n_preference = "nfapi";
|
|
||||||
local_n_if_name = "ens3";
|
|
||||||
remote_n_address = "127.0.0.1"; //Proxy IP
|
|
||||||
local_n_address = "127.0.0.1";
|
|
||||||
local_n_portc = 50600;
|
|
||||||
remote_n_portc = 50601;
|
|
||||||
local_n_portd = 50610;
|
|
||||||
remote_n_portd = 50611;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
RUs = (
|
|
||||||
{
|
|
||||||
local_rf = "yes"
|
|
||||||
nb_tx = 1
|
|
||||||
nb_rx = 1
|
|
||||||
att_tx = 90
|
|
||||||
att_rx = 0;
|
|
||||||
bands = [7,38,42,43];
|
|
||||||
max_pdschReferenceSignalPower = -27;
|
|
||||||
max_rxgain = 125;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
log_config = {
|
|
||||||
global_log_level ="info";
|
|
||||||
hw_log_level ="info";
|
|
||||||
phy_log_level ="info";
|
|
||||||
mac_log_level ="info";
|
|
||||||
rlc_log_level ="info";
|
|
||||||
pdcp_log_level ="info";
|
|
||||||
rrc_log_level ="info";
|
|
||||||
};
|
|
||||||
|
|
||||||
uicc0 = {
|
|
||||||
imsi = "208950000000034";
|
|
||||||
key = "0c0a34601d4f07677303652c0462535b";
|
|
||||||
opc= "63bfa50ee6523365ff14c1f45f88737d";
|
|
||||||
dnn= "oai";
|
|
||||||
nssai_sst=222;
|
|
||||||
nssai_sd=123;
|
|
||||||
}
|
|
||||||
|
|
||||||
L1s = (
|
|
||||||
{
|
|
||||||
num_cc = 1;
|
|
||||||
tr_n_preference = "nfapi";
|
|
||||||
local_n_if_name = "ens3";
|
|
||||||
remote_n_address = "127.0.0.1"; //Proxy IP
|
|
||||||
local_n_address = "127.0.0.1";
|
|
||||||
local_n_portc = 50600;
|
|
||||||
remote_n_portc = 50601;
|
|
||||||
local_n_portd = 50610;
|
|
||||||
remote_n_portd = 50611;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
RUs = (
|
|
||||||
{
|
|
||||||
local_rf = "yes"
|
|
||||||
nb_tx = 1
|
|
||||||
nb_rx = 1
|
|
||||||
att_tx = 90
|
|
||||||
att_rx = 0;
|
|
||||||
bands = [7,38,42,43];
|
|
||||||
max_pdschReferenceSignalPower = -27;
|
|
||||||
max_rxgain = 125;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
@@ -22,9 +22,14 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 31; //0;
|
ssb_SubcarrierOffset = 31; //0;
|
||||||
pdsch_AntennaPorts = 1;
|
min_rxtxtime = 6;
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
|
pdcch_ConfigSIB1 = (
|
||||||
|
{
|
||||||
|
controlResourceSetZero = 12;
|
||||||
|
searchSpaceZero = 0;
|
||||||
|
}
|
||||||
|
);
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
#spCellConfigCommon
|
#spCellConfigCommon
|
||||||
@@ -54,15 +59,6 @@ gNBs =
|
|||||||
#pdcch-ConfigCommon
|
#pdcch-ConfigCommon
|
||||||
initialDLBWPcontrolResourceSetZero = 0;
|
initialDLBWPcontrolResourceSetZero = 0;
|
||||||
initialDLBWPsearchSpaceZero = 0;
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
#pdsch-ConfigCommon
|
|
||||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
|
||||||
initialDLBWPk0_0 = 0; #for DL slot
|
|
||||||
initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB
|
|
||||||
initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13
|
|
||||||
|
|
||||||
initialDLBWPk0_1 = 0; #for mixed slot
|
|
||||||
initialDLBWPmappingType_1 = 0;
|
|
||||||
initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5
|
|
||||||
|
|
||||||
#uplinkConfigCommon
|
#uplinkConfigCommon
|
||||||
#frequencyInfoUL
|
#frequencyInfoUL
|
||||||
@@ -117,18 +113,6 @@ gNBs =
|
|||||||
# restrictedSetConfig
|
# restrictedSetConfig
|
||||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
restrictedSetConfig = 0,
|
restrictedSetConfig = 0,
|
||||||
# pusch-ConfigCommon (up to 16 elements)
|
|
||||||
initialULBWPk2_0 = 6; # used for UL slot
|
|
||||||
initialULBWPmappingType_0 = 1
|
|
||||||
initialULBWPstartSymbolAndLength_0 = 41; # this is SS=0 L=13
|
|
||||||
|
|
||||||
initialULBWPk2_1 = 6; # used for mixed slot
|
|
||||||
initialULBWPmappingType_1 = 1;
|
|
||||||
initialULBWPstartSymbolAndLength_1 = 52; # this is SS=10 L=4
|
|
||||||
|
|
||||||
initialULBWPk2_2 = 7; # used for Msg.3 during RA
|
|
||||||
initialULBWPmappingType_2 = 1;
|
|
||||||
initialULBWPstartSymbolAndLength_2 = 52; # this is SS=10 L=4
|
|
||||||
|
|
||||||
msg3_DeltaPreamble = 1;
|
msg3_DeltaPreamble = 1;
|
||||||
p0_NominalWithGrant =-90;
|
p0_NominalWithGrant =-90;
|
||||||
|
|||||||
@@ -33,9 +33,6 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
ul_prbblacklist = "51,52,53,54"
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
@@ -74,15 +71,6 @@ gNBs =
|
|||||||
#pdcch-ConfigCommon
|
#pdcch-ConfigCommon
|
||||||
initialDLBWPcontrolResourceSetZero = 12;
|
initialDLBWPcontrolResourceSetZero = 12;
|
||||||
initialDLBWPsearchSpaceZero = 0;
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
#pdsch-ConfigCommon
|
|
||||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
|
||||||
initialDLBWPk0_0 = 0; #for DL slot
|
|
||||||
initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB
|
|
||||||
initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13
|
|
||||||
|
|
||||||
initialDLBWPk0_1 = 0; #for mixed slot
|
|
||||||
initialDLBWPmappingType_1 = 0;
|
|
||||||
initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5
|
|
||||||
|
|
||||||
#uplinkConfigCommon
|
#uplinkConfigCommon
|
||||||
#frequencyInfoUL
|
#frequencyInfoUL
|
||||||
@@ -137,19 +125,6 @@ gNBs =
|
|||||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
restrictedSetConfig = 0,
|
restrictedSetConfig = 0,
|
||||||
|
|
||||||
# pusch-ConfigCommon (up to 16 elements)
|
|
||||||
initialULBWPk2_0 = 6; # used for UL slot
|
|
||||||
initialULBWPmappingType_0 = 1
|
|
||||||
initialULBWPstartSymbolAndLength_0 = 41; # this is SS=0 L=13
|
|
||||||
|
|
||||||
initialULBWPk2_1 = 6; # used for mixed slot
|
|
||||||
initialULBWPmappingType_1 = 1;
|
|
||||||
initialULBWPstartSymbolAndLength_1 = 52; # this is SS=10 L=4
|
|
||||||
|
|
||||||
initialULBWPk2_2 = 7; # used for Msg.3 during RA
|
|
||||||
initialULBWPmappingType_2 = 1;
|
|
||||||
initialULBWPstartSymbolAndLength_2 = 52; # this is SS=10 L=4
|
|
||||||
|
|
||||||
msg3_DeltaPreamble = 1;
|
msg3_DeltaPreamble = 1;
|
||||||
p0_NominalWithGrant =-90;
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
@@ -265,7 +240,7 @@ RUs = (
|
|||||||
#beamforming 1x4 matrix:
|
#beamforming 1x4 matrix:
|
||||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||||
#clock_src = "external";
|
#clock_src = "external";
|
||||||
sdr_addrs = "mgmt_addr=192.168.18.240,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
@@ -53,29 +53,6 @@ gNBs =
|
|||||||
#pdcch-ConfigCommon
|
#pdcch-ConfigCommon
|
||||||
initialDLBWPcontrolResourceSetZero = 12;
|
initialDLBWPcontrolResourceSetZero = 12;
|
||||||
initialDLBWPsearchSpaceZero = 0;
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
#pdsch-ConfigCommon
|
|
||||||
#pdschTimeDomainAllocationList (up to 16 entries)
|
|
||||||
initialDLBWPk0_0 = 0;
|
|
||||||
#initialULBWPmappingType
|
|
||||||
#0=typeA,1=typeB
|
|
||||||
initialDLBWPmappingType_0 = 0;
|
|
||||||
#this is SS=1,L=13
|
|
||||||
initialDLBWPstartSymbolAndLength_0 = 40;
|
|
||||||
|
|
||||||
initialDLBWPk0_1 = 0;
|
|
||||||
initialDLBWPmappingType_1 = 0;
|
|
||||||
#this is SS=2,L=12
|
|
||||||
initialDLBWPstartSymbolAndLength_1 = 53;
|
|
||||||
|
|
||||||
initialDLBWPk0_2 = 0;
|
|
||||||
initialDLBWPmappingType_2 = 0;
|
|
||||||
#this is SS=1,L=12
|
|
||||||
initialDLBWPstartSymbolAndLength_2 = 54;
|
|
||||||
|
|
||||||
initialDLBWPk0_3 = 0;
|
|
||||||
initialDLBWPmappingType_3 = 0;
|
|
||||||
#this is SS=1,L=5
|
|
||||||
initialDLBWPstartSymbolAndLength_3 = 57;
|
|
||||||
|
|
||||||
#uplinkConfigCommon
|
#uplinkConfigCommon
|
||||||
#frequencyInfoUL
|
#frequencyInfoUL
|
||||||
@@ -130,22 +107,6 @@ gNBs =
|
|||||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
restrictedSetConfig = 0,
|
restrictedSetConfig = 0,
|
||||||
|
|
||||||
# pusch-ConfigCommon (up to 16 elements)
|
|
||||||
initialULBWPk2_0 = 6;
|
|
||||||
initialULBWPmappingType_0 = 1
|
|
||||||
# this is SS=0 L=11
|
|
||||||
initialULBWPstartSymbolAndLength_0 = 55;
|
|
||||||
|
|
||||||
initialULBWPk2_1 = 6;
|
|
||||||
initialULBWPmappingType_1 = 1;
|
|
||||||
# this is SS=0 L=12
|
|
||||||
initialULBWPstartSymbolAndLength_1 = 69;
|
|
||||||
|
|
||||||
initialULBWPk2_2 = 7;
|
|
||||||
initialULBWPmappingType_2 = 1;
|
|
||||||
# this is SS=10 L=4
|
|
||||||
initialULBWPstartSymbolAndLength_2 = 52;
|
|
||||||
|
|
||||||
msg3_DeltaPreamble = 1;
|
msg3_DeltaPreamble = 1;
|
||||||
p0_NominalWithGrant =-90;
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
|
|||||||
@@ -45,10 +45,7 @@ gNBs =
|
|||||||
remote_s_portc = 500;
|
remote_s_portc = 500;
|
||||||
remote_s_portd = 2152;
|
remote_s_portd = 2152;
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
sib1_tda = 0;
|
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -37,10 +37,7 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
sib1_tda = 0;
|
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
pdsch_AntennaPorts_XP = 2;
|
||||||
pusch_AntennaPorts = 2;
|
pusch_AntennaPorts = 2;
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
@@ -209,9 +209,9 @@ gNBs =
|
|||||||
{
|
{
|
||||||
|
|
||||||
GNB_INTERFACE_NAME_FOR_NG_AMF = "em1";
|
GNB_INTERFACE_NAME_FOR_NG_AMF = "em1";
|
||||||
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.18.194/24";
|
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.127/24";
|
||||||
GNB_INTERFACE_NAME_FOR_NGU = "em1";
|
GNB_INTERFACE_NAME_FOR_NGU = "em1";
|
||||||
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.18.194/24";
|
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.127/24";
|
||||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -258,7 +258,7 @@ RUs = (
|
|||||||
## beamforming 4x4 matrix:
|
## beamforming 4x4 matrix:
|
||||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||||
|
|
||||||
sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
pdsch_AntennaPorts_XP = 2;
|
||||||
pusch_AntennaPorts = 2;
|
pusch_AntennaPorts = 2;
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
@@ -206,9 +206,9 @@ gNBs =
|
|||||||
{
|
{
|
||||||
|
|
||||||
GNB_INTERFACE_NAME_FOR_NG_AMF = "em1";
|
GNB_INTERFACE_NAME_FOR_NG_AMF = "em1";
|
||||||
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.18.194/24";
|
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.127/24";
|
||||||
GNB_INTERFACE_NAME_FOR_NGU = "em1";
|
GNB_INTERFACE_NAME_FOR_NGU = "em1";
|
||||||
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.18.194/24";
|
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.127/24";
|
||||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -254,7 +254,7 @@ RUs = (
|
|||||||
## beamforming 4x4 matrix:
|
## beamforming 4x4 matrix:
|
||||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||||
|
|
||||||
sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,6 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
@@ -22,8 +22,6 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
@@ -20,10 +20,8 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 31; //0;
|
ssb_SubcarrierOffset = 31; //0;
|
||||||
pdsch_AntennaPorts = 1;
|
pdsch_AntennaPorts_XP = 2;
|
||||||
pusch_AntennaPorts = 2;
|
pusch_AntennaPorts = 2;
|
||||||
pusch_TargetSNRx10 = 200;
|
|
||||||
pucch_TargetSNRx10 = 200;
|
|
||||||
ul_prbblacklist = "51,52,53,54"
|
ul_prbblacklist = "51,52,53,54"
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
@@ -201,12 +199,12 @@ gNBs =
|
|||||||
);
|
);
|
||||||
|
|
||||||
MACRLCs = (
|
MACRLCs = (
|
||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_s_preference = "local_L1";
|
tr_s_preference = "local_L1";
|
||||||
tr_n_preference = "local_RRC";
|
tr_n_preference = "local_RRC";
|
||||||
ulsch_max_frame_inactivity = 1;
|
ulsch_max_frame_inactivity = 0;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s = (
|
||||||
@@ -215,6 +213,7 @@ L1s = (
|
|||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
thread_pool_size = 8;
|
thread_pool_size = 8;
|
||||||
prach_dtx_threshold = 120;
|
prach_dtx_threshold = 120;
|
||||||
|
pucch0_dtx_threshold = 80;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -232,15 +231,14 @@ RUs = (
|
|||||||
bf_weights = [0x00007fff, 0x00007fff];
|
bf_weights = [0x00007fff, 0x00007fff];
|
||||||
#clock_src = "external";
|
#clock_src = "external";
|
||||||
sf_extension = 0
|
sf_extension = 0
|
||||||
sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
THREAD_STRUCT = (
|
THREAD_STRUCT = (
|
||||||
{
|
{
|
||||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||||
//parallel_config = "PARALLEL_SINGLE_THREAD";
|
|
||||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
worker_config = "WORKER_ENABLE";
|
worker_config = "WORKER_ENABLE";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,307 @@
|
|||||||
|
Active_gNBs = ( "gNB-OAI");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
gNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
gNB_CU_ID = 0xe00;
|
||||||
|
|
||||||
|
# cell_type = "CELL_MACRO_GNB";
|
||||||
|
|
||||||
|
gNB_name = "gNB-OAI";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
|
||||||
|
plmn_list = ({
|
||||||
|
mcc = 208;
|
||||||
|
mnc = 97;
|
||||||
|
mnc_length = 2;
|
||||||
|
snssaiList = (
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x1; // 0 false, else true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x010203; // 0 false, else true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x112233; // 0 false, else true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
nr_cellid = 12345678L
|
||||||
|
|
||||||
|
# tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
ssb_SubcarrierOffset = 0;
|
||||||
|
pusch_AntennaPorts = 2;
|
||||||
|
ul_prbblacklist = "51,52,53,54"
|
||||||
|
do_SRS = 1;
|
||||||
|
|
||||||
|
pdcch_ConfigSIB1 = (
|
||||||
|
{
|
||||||
|
controlResourceSetZero = 11;
|
||||||
|
searchSpaceZero = 0;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
servingCellConfigCommon = (
|
||||||
|
{
|
||||||
|
#spCellConfigCommon
|
||||||
|
|
||||||
|
physCellId = 0;
|
||||||
|
|
||||||
|
# downlinkConfigCommon
|
||||||
|
#frequencyInfoDL
|
||||||
|
# this is 3301.68 MHz + 22*12*30e-3 MHz = 3309.6
|
||||||
|
#absoluteFrequencySSB = 620640;
|
||||||
|
# this is 3300.60 MHz + 53*12*30e-3 MHz = 3319.68
|
||||||
|
absoluteFrequencySSB = 621312;
|
||||||
|
# this is 3503.28 MHz + 22*12*30e-3 MHz = 3511.2
|
||||||
|
#absoluteFrequencySSB = 634080;
|
||||||
|
# this is 3600.48 MHz
|
||||||
|
#absoluteFrequencySSB = 640032;
|
||||||
|
#dl_frequencyBand = 78;
|
||||||
|
# this is 3301.68 MHz
|
||||||
|
#dl_absoluteFrequencyPointA = 620112;
|
||||||
|
# this is 3300.60 MHz
|
||||||
|
dl_absoluteFrequencyPointA = 620040;
|
||||||
|
# this is 3502.56 MHz
|
||||||
|
#dl_absoluteFrequencyPointA = 633552;
|
||||||
|
# this is 3600.48 MHz
|
||||||
|
#dl_absoluteFrequencyPointA = 640032;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
dl_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
dl_subcarrierSpacing = 1;
|
||||||
|
dl_carrierBandwidth = 106;
|
||||||
|
#initialDownlinkBWP
|
||||||
|
#genericParameters
|
||||||
|
# this is RBstart=0,L=106 (275*(L-1))+RBstart
|
||||||
|
initialDLBWPlocationAndBandwidth = 28875;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
|
#pdcch-ConfigCommon
|
||||||
|
initialDLBWPcontrolResourceSetZero = 11;
|
||||||
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
|
|
||||||
|
#uplinkConfigCommon
|
||||||
|
#frequencyInfoUL
|
||||||
|
ul_frequencyBand = 78;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
ul_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
ul_subcarrierSpacing = 1;
|
||||||
|
ul_carrierBandwidth = 106;
|
||||||
|
pMax = 20;
|
||||||
|
#initialUplinkBWP
|
||||||
|
#genericParameters
|
||||||
|
initialULBWPlocationAndBandwidth = 28875;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
|
#rach-ConfigCommon
|
||||||
|
#rach-ConfigGeneric
|
||||||
|
prach_ConfigurationIndex = 98;
|
||||||
|
#prach_msg1_FDM
|
||||||
|
#0 = one, 1=two, 2=four, 3=eight
|
||||||
|
prach_msg1_FDM = 0;
|
||||||
|
prach_msg1_FrequencyStart = 0;
|
||||||
|
zeroCorrelationZoneConfig = 12;
|
||||||
|
preambleReceivedTargetPower = -104;
|
||||||
|
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||||
|
preambleTransMax = 6;
|
||||||
|
#powerRampingStep
|
||||||
|
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||||
|
powerRampingStep = 1;
|
||||||
|
#ra_ReponseWindow
|
||||||
|
#1,2,4,8,10,20,40,80
|
||||||
|
ra_ResponseWindow = 4;
|
||||||
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
||||||
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
|
#ra_ContentionResolutionTimer
|
||||||
|
#(0..7) 8,16,24,32,40,48,56,64
|
||||||
|
ra_ContentionResolutionTimer = 7;
|
||||||
|
rsrp_ThresholdSSB = 19;
|
||||||
|
#prach-RootSequenceIndex_PR
|
||||||
|
#1 = 839, 2 = 139
|
||||||
|
prach_RootSequenceIndex_PR = 2;
|
||||||
|
prach_RootSequenceIndex = 1;
|
||||||
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
|
#
|
||||||
|
msg1_SubcarrierSpacing = 1,
|
||||||
|
# restrictedSetConfig
|
||||||
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
|
restrictedSetConfig = 0,
|
||||||
|
|
||||||
|
msg3_DeltaPreamble = 1;
|
||||||
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
|
# pucch-ConfigCommon setup :
|
||||||
|
# pucchGroupHopping
|
||||||
|
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||||
|
pucchGroupHopping = 0;
|
||||||
|
hoppingId = 40;
|
||||||
|
p0_nominal = -90;
|
||||||
|
# ssb_PositionsInBurs_BitmapPR
|
||||||
|
# 1=short, 2=medium, 3=long
|
||||||
|
ssb_PositionsInBurst_PR = 2;
|
||||||
|
ssb_PositionsInBurst_Bitmap = 1;
|
||||||
|
|
||||||
|
# ssb_periodicityServingCell
|
||||||
|
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||||
|
ssb_periodicityServingCell = 2;
|
||||||
|
|
||||||
|
# dmrs_TypeA_position
|
||||||
|
# 0 = pos2, 1 = pos3
|
||||||
|
dmrs_TypeA_Position = 0;
|
||||||
|
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
subcarrierSpacing = 1;
|
||||||
|
|
||||||
|
|
||||||
|
#tdd-UL-DL-ConfigurationCommon
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
referenceSubcarrierSpacing = 1;
|
||||||
|
# pattern1
|
||||||
|
# dl_UL_TransmissionPeriodicity
|
||||||
|
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||||
|
dl_UL_TransmissionPeriodicity = 6;
|
||||||
|
nrofDownlinkSlots = 7;
|
||||||
|
nrofDownlinkSymbols = 6;
|
||||||
|
nrofUplinkSlots = 2;
|
||||||
|
nrofUplinkSymbols = 4;
|
||||||
|
|
||||||
|
ssPBCH_BlockPower = -25;
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
////////// AMF parameters:
|
||||||
|
amf_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
GNB_INTERFACE_NAME_FOR_NG_AMF = "em1";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NG_AMF = "CI_GNB_IP_ADDR";
|
||||||
|
GNB_INTERFACE_NAME_FOR_NGU = "em1";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NGU = "CI_GNB_IP_ADDR";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
# pusch_TargetSNRx10 = 200;
|
||||||
|
# pucch_TargetSNRx10 = 150;
|
||||||
|
ulsch_max_frame_inactivity = 0;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
thread_pool_size = 8;
|
||||||
|
prach_dtx_threshold = 120;
|
||||||
|
# pucch0_dtx_threshold = 150;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 2
|
||||||
|
nb_rx = 2
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [78];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 75;
|
||||||
|
eNB_instances = [0];
|
||||||
|
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||||
|
bf_weights = [0x00007fff, 0x0000];
|
||||||
|
##beamforming 1x4 matrix: 1 layer x 4 antennas
|
||||||
|
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
||||||
|
## beamforming 2x2 matrix:
|
||||||
|
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
||||||
|
## beamforming 4x4 matrix:
|
||||||
|
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||||
|
sf_extension = 0
|
||||||
|
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
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";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
#security = {
|
||||||
|
# preferred ciphering algorithms
|
||||||
|
# the first one of the list that an UE supports in chosen
|
||||||
|
# valid values: nea0, nea1, nea2, nea3
|
||||||
|
# ciphering_algorithms = ( "nea2" );
|
||||||
|
|
||||||
|
# preferred integrity algorithms
|
||||||
|
# the first one of the list that an UE supports in chosen
|
||||||
|
# valid values: nia0, nia1, nia2, nia3
|
||||||
|
# integrity_algorithms = ( "nia2", "nia0" );
|
||||||
|
|
||||||
|
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
|
||||||
|
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
|
||||||
|
# drb_ciphering = "yes";
|
||||||
|
# drb_integrity = "no";
|
||||||
|
#};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
hw_log_level ="info";
|
||||||
|
phy_log_level ="info";
|
||||||
|
mac_log_level ="info";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
f1ap_log_level ="debug";
|
||||||
|
};
|
||||||
@@ -38,7 +38,7 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
pdsch_AntennaPorts_XP = 2;
|
||||||
pusch_AntennaPorts = 2;
|
pusch_AntennaPorts = 2;
|
||||||
ul_prbblacklist = "51,52,53,54"
|
ul_prbblacklist = "51,52,53,54"
|
||||||
do_SRS = 1;
|
do_SRS = 1;
|
||||||
@@ -261,7 +261,7 @@ RUs = (
|
|||||||
## beamforming 4x4 matrix:
|
## beamforming 4x4 matrix:
|
||||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||||
sf_extension = 0
|
sf_extension = 0
|
||||||
sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 2;
|
pusch_AntennaPorts = 2;
|
||||||
ul_prbblacklist = "51,52,53,54"
|
ul_prbblacklist = "51,52,53,54"
|
||||||
do_SRS = 1;
|
do_SRS = 1;
|
||||||
@@ -261,7 +260,7 @@ RUs = (
|
|||||||
## beamforming 4x4 matrix:
|
## beamforming 4x4 matrix:
|
||||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||||
sf_extension = 0
|
sf_extension = 0
|
||||||
sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||||
sl_ahead = 5;
|
sl_ahead = 5;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -38,8 +38,6 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
#pusch_TargetSNRx10 = 200;
|
#pusch_TargetSNRx10 = 200;
|
||||||
#pucch_TargetSNRx10 = 200;
|
#pucch_TargetSNRx10 = 200;
|
||||||
ul_prbblacklist = "51,52,53,54"
|
ul_prbblacklist = "51,52,53,54"
|
||||||
@@ -265,7 +263,7 @@ RUs = (
|
|||||||
## beamforming 4x4 matrix:
|
## beamforming 4x4 matrix:
|
||||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||||
sf_extension = 0
|
sf_extension = 0
|
||||||
sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -38,8 +38,10 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
pdsch_AntennaPorts_XP = 2;
|
||||||
pusch_AntennaPorts = 2;
|
pusch_AntennaPorts = 2;
|
||||||
|
#pusch_TargetSNRx10 = 200;
|
||||||
|
#pucch_TargetSNRx10 = 200;
|
||||||
ul_prbblacklist = "79,80,81,82"
|
ul_prbblacklist = "79,80,81,82"
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
@@ -83,7 +85,7 @@ gNBs =
|
|||||||
#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 = 31899;
|
initialDLBWPlocationAndBandwidth = 31624;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialDLBWPsubcarrierSpacing = 1;
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
@@ -103,7 +105,7 @@ gNBs =
|
|||||||
pMax = 20;
|
pMax = 20;
|
||||||
#initialUplinkBWP
|
#initialUplinkBWP
|
||||||
#genericParameters
|
#genericParameters
|
||||||
initialULBWPlocationAndBandwidth = 31899;
|
initialULBWPlocationAndBandwidth = 31624;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialULBWPsubcarrierSpacing = 1;
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
@@ -260,7 +262,7 @@ RUs = (
|
|||||||
## beamforming 4x4 matrix:
|
## beamforming 4x4 matrix:
|
||||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||||
sf_extension = 0
|
sf_extension = 0
|
||||||
sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,6 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
@@ -221,8 +219,7 @@ RUs = (
|
|||||||
## beamforming 4x4 matrix:
|
## beamforming 4x4 matrix:
|
||||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||||
|
|
||||||
sdr_addrs = "addr=192.168.30.2,mgmt_addr=192.168.30.2,second_addr=192.168.50.2";
|
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2,mgmt_addr=192.168.18.85";
|
||||||
clock_src = "external";
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,6 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 31; //0;
|
ssb_SubcarrierOffset = 31; //0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
@@ -205,7 +203,7 @@ MACRLCs = (
|
|||||||
tr_n_preference = "local_RRC";
|
tr_n_preference = "local_RRC";
|
||||||
pusch_TargetSNRx10 = 200;
|
pusch_TargetSNRx10 = 200;
|
||||||
pucch_TargetSNRx10 = 200;
|
pucch_TargetSNRx10 = 200;
|
||||||
ulsch_max_frame_inactivity = 1;
|
ulsch_max_frame_inactivity = 0;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -223,11 +221,11 @@ RUs = (
|
|||||||
local_rf = "yes"
|
local_rf = "yes"
|
||||||
nb_tx = 1
|
nb_tx = 1
|
||||||
nb_rx = 1
|
nb_rx = 1
|
||||||
att_tx = 3
|
att_tx = 12
|
||||||
att_rx = 0;
|
att_rx = 12;
|
||||||
bands = [7];
|
bands = [7];
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 111;
|
max_rxgain = 114;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
# sdr_addrs = "serial=30C51D4";
|
# sdr_addrs = "serial=30C51D4";
|
||||||
# clock_src = "external";
|
# clock_src = "external";
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 31; //0;
|
ssb_SubcarrierOffset = 31; //0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
@@ -33,10 +33,7 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
ssb_SubcarrierOffset = 0;
|
ssb_SubcarrierOffset = 0;
|
||||||
pdsch_AntennaPorts = 1;
|
|
||||||
pusch_AntennaPorts = 1;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
sib1_tda = 0;
|
|
||||||
|
|
||||||
pdcch_ConfigSIB1 = (
|
pdcch_ConfigSIB1 = (
|
||||||
{
|
{
|
||||||
@@ -66,8 +63,8 @@ gNBs =
|
|||||||
dl_carrierBandwidth = 106;
|
dl_carrierBandwidth = 106;
|
||||||
#initialDownlinkBWP
|
#initialDownlinkBWP
|
||||||
#genericParameters
|
#genericParameters
|
||||||
# this is RBstart=27,L=48 (275*(L-1))+RBstart
|
# this is RBstart=0,L=106 (275*(L-1))+RBstart
|
||||||
initialDLBWPlocationAndBandwidth = 13475; # 6366 12925 12956 28875 12952
|
initialDLBWPlocationAndBandwidth = 28875;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialDLBWPsubcarrierSpacing = 1;
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
@@ -88,7 +85,7 @@ gNBs =
|
|||||||
pMax = 20;
|
pMax = 20;
|
||||||
#initialUplinkBWP
|
#initialUplinkBWP
|
||||||
#genericParameters
|
#genericParameters
|
||||||
initialULBWPlocationAndBandwidth = 13475;
|
initialULBWPlocationAndBandwidth = 28875;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialULBWPsubcarrierSpacing = 1;
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ Ref :
|
|||||||
DLSCH encoding : 230.0
|
DLSCH encoding : 230.0
|
||||||
L1 Rx processing : 175.0
|
L1 Rx processing : 175.0
|
||||||
PUSCH inner-receiver : 100.0
|
PUSCH inner-receiver : 100.0
|
||||||
PUSCH decoding : 180.0
|
#PUSCH decoding : 180.0
|
||||||
|
PUSCH decoding : 240.0
|
||||||
DL & UL scheduling timing stats : 37.0
|
DL & UL scheduling timing stats : 37.0
|
||||||
UL Indication : 38.0
|
UL Indication : 38.0
|
||||||
Threshold :
|
Threshold :
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
FROM ubuntu:bionic AS oai-formatting-check
|
||||||
|
|
||||||
|
ARG MERGE_REQUEST
|
||||||
|
ARG SRC_BRANCH
|
||||||
|
ARG TARGET_BRANCH
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
|
||||||
|
astyle \
|
||||||
|
gawk \
|
||||||
|
git
|
||||||
|
|
||||||
|
WORKDIR /oai-ran
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN /bin/bash -c "if [[ -v MERGE_REQUEST ]]; then echo 'Source Branch = $SRC_BRANCH'; echo 'Target Branch = $TARGET_BRANCH'; else echo 'Push to develop'; fi"
|
||||||
|
RUN /bin/bash -c "if [[ -v MERGE_REQUEST ]]; then ./ci-scripts/checkCodingFormattingRules.sh --src-branch $SRC_BRANCH --target-branch $TARGET_BRANCH; else ./ci-scripts/checkCodingFormattingRules.sh; fi"
|
||||||
|
|
||||||
|
RUN echo "=== Files not properly formatted ===" && \
|
||||||
|
/bin/bash -c "if [[ -f oai_rules_result_list.txt ]]; then cat oai_rules_result_list.txt; fi"
|
||||||
|
|
||||||
|
RUN echo "=== Files with incorrect define protection ===" && \
|
||||||
|
/bin/bash -c "if [[ -f header-files-w-incorrect-define.txt ]]; then cat header-files-w-incorrect-define.txt; fi"
|
||||||
|
|
||||||
|
RUN echo "=== Files with a GNU GPL licence Banner ===" && \
|
||||||
|
/bin/bash -c "if [[ -f files-w-gnu-gpl-license-banner.txt ]]; then cat files-w-gnu-gpl-license-banner.txt; fi"
|
||||||
|
|
||||||
|
RUN echo "=== Files with a suspect Banner ===" && \
|
||||||
|
/bin/bash -c "if [[ -f files-w-suspect-banner.txt ]]; then cat files-w-suspect-banner.txt; fi"
|
||||||
+17
-12
@@ -66,6 +66,8 @@ class EPCManagement():
|
|||||||
self.mmeConfFile = 'mme.conf'
|
self.mmeConfFile = 'mme.conf'
|
||||||
self.yamlPath = ''
|
self.yamlPath = ''
|
||||||
self.isMagmaUsed = False
|
self.isMagmaUsed = False
|
||||||
|
self.cfgDeploy = '--type start-mini --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.3.pcap' #from xml, 'mini' is default normal for docker-network.py
|
||||||
|
self.cfgUnDeploy = '--type stop-mini --fqdn yes --scenario 1' #from xml, 'mini' is default normal for docker-network.py
|
||||||
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
@@ -251,18 +253,21 @@ class EPCManagement():
|
|||||||
logging.debug('Starting OAI CN5G')
|
logging.debug('Starting OAI CN5G')
|
||||||
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
|
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
|
||||||
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5)
|
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5)
|
||||||
mySSH.command('cd /opt/oai-cn5g-fed/docker-compose', '\$', 5)
|
mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5)
|
||||||
mySSH.command('./core-network.sh start nrf spgwu', '\$', 60)
|
mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60)
|
||||||
time.sleep(2)
|
if re.search('start-mini-as-ue', self.cfgDeploy):
|
||||||
mySSH.command('docker-compose -p 5gcn ps -a', '\$', 60)
|
dFile = 'docker-compose-mini-nrf-asue.yaml'
|
||||||
|
else:
|
||||||
|
dFile = 'docker-compose-mini-nrf.yaml'
|
||||||
|
mySSH.command('docker-compose -p 5gcn -f ' + dFile + ' ps -a', '\$', 60)
|
||||||
if mySSH.getBefore().count('Up (healthy)') != 6:
|
if mySSH.getBefore().count('Up (healthy)') != 6:
|
||||||
logging.error('Not all container healthy')
|
logging.error('Not all container healthy')
|
||||||
else:
|
else:
|
||||||
logging.debug('OK')
|
logging.debug('OK --> all containers are healthy')
|
||||||
mySSH.command('docker-compose config | grep --colour=never image', '\$', 10)
|
mySSH.command('docker-compose -p 5gcn -f ' + dFile + ' config | grep --colour=never image', '\$', 10)
|
||||||
listOfImages = mySSH.getBefore()
|
listOfImages = mySSH.getBefore()
|
||||||
for imageLine in listOfImages.split('\\r\\n'):
|
for imageLine in listOfImages.split('\\r\\n'):
|
||||||
res1 = re.search('image: (?P<name>[a-zA-Z0-9\-]+):(?P<tag>[a-zA-Z0-9\-]+)', str(imageLine))
|
res1 = re.search('image: (?P<name>[a-zA-Z0-9\-/]+):(?P<tag>[a-zA-Z0-9\-]+)', str(imageLine))
|
||||||
res2 = re.search('mysql', str(imageLine))
|
res2 = re.search('mysql', str(imageLine))
|
||||||
if res1 is not None and res2 is None:
|
if res1 is not None and res2 is None:
|
||||||
html_cell += res1.group('name') + ':' + res1.group('tag') + ' '
|
html_cell += res1.group('name') + ':' + res1.group('tag') + ' '
|
||||||
@@ -530,11 +535,11 @@ class EPCManagement():
|
|||||||
mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5)
|
mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5)
|
||||||
|
|
||||||
logging.debug('Terminating OAI CN5G')
|
logging.debug('Terminating OAI CN5G')
|
||||||
mySSH.command('cd /opt/oai-cn5g-fed/docker-compose', '\$', 5)
|
mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5)
|
||||||
mySSH.command('./core-network.sh stop nrf spgwu', '\$', 60)
|
mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60)
|
||||||
mySSH.command('docker volume prune --force || true', '\$', 60)
|
mySSH.command('docker volume prune --force || true', '\$', 60)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
mySSH.command('tshark -r /tmp/oai-cn5g.pcap | egrep --colour=never "Tracking area update" ','\$', 30)
|
mySSH.command('tshark -r /tmp/oai-cn5g-v1.3.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())
|
||||||
if result is not None:
|
if result is not None:
|
||||||
message = 'UE requested ' + str(mySSH.getBefore().count('Tracking area update request')) + 'Tracking area update request(s)'
|
message = 'UE requested ' + str(mySSH.getBefore().count('Tracking area update request')) + 'Tracking area update request(s)'
|
||||||
@@ -828,8 +833,8 @@ class EPCManagement():
|
|||||||
mySSH.command('zip mme.log.zip mme_check_run.*', '\$', 60)
|
mySSH.command('zip mme.log.zip mme_check_run.*', '\$', 60)
|
||||||
elif re.match('OAICN5G', self.Type, re.IGNORECASE):
|
elif re.match('OAICN5G', self.Type, re.IGNORECASE):
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/logs','\$', 5)
|
mySSH.command('cd ' + self.SourceCodePath + '/logs','\$', 5)
|
||||||
mySSH.command('cp -f /tmp/oai-cn5g.pcap .','\$', 30)
|
mySSH.command('cp -f /tmp/oai-cn5g-v1.3.pcap .','\$', 30)
|
||||||
mySSH.command('zip mme.log.zip oai-amf.log oai-nrf.log oai-cn5g.pcap','\$', 30)
|
mySSH.command('zip mme.log.zip oai-amf.log oai-nrf.log oai-cn5g*.pcap','\$', 30)
|
||||||
mySSH.command('mv mme.log.zip ' + self.SourceCodePath + '/scripts','\$', 30)
|
mySSH.command('mv mme.log.zip ' + self.SourceCodePath + '/scripts','\$', 30)
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
||||||
mySSH.command('zip mme.log.zip mme*.log', '\$', 60)
|
mySSH.command('zip mme.log.zip mme*.log', '\$', 60)
|
||||||
|
|||||||
@@ -0,0 +1,116 @@
|
|||||||
|
"""
|
||||||
|
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
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
args = _parse_args()
|
||||||
|
status = perform_flattening(args.tag)
|
||||||
|
sys.exit(status)
|
||||||
|
|
||||||
|
def _parse_args() -> argparse.Namespace:
|
||||||
|
parser = argparse.ArgumentParser(description='Flattening Image')
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'--tag', '-t',
|
||||||
|
action='store',
|
||||||
|
required=True,
|
||||||
|
help='Image Tag in image-name:image tag format',
|
||||||
|
)
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
def perform_flattening(tag):
|
||||||
|
# First detect which docker/podman command to use
|
||||||
|
cli = ''
|
||||||
|
image_prefix = ''
|
||||||
|
cmd = 'which podman || true'
|
||||||
|
podman_check = subprocess.check_output(cmd, shell=True, universal_newlines=True)
|
||||||
|
if re.search('podman', podman_check.strip()):
|
||||||
|
cli = 'sudo podman'
|
||||||
|
image_prefix = 'localhost/'
|
||||||
|
if cli == '':
|
||||||
|
cmd = 'which docker || true'
|
||||||
|
docker_check = subprocess.check_output(cmd, shell=True, universal_newlines=True)
|
||||||
|
if re.search('docker', docker_check.strip()):
|
||||||
|
cli = 'docker'
|
||||||
|
image_prefix = ''
|
||||||
|
if cli == '':
|
||||||
|
print ('No docker / podman installed: quitting')
|
||||||
|
return -1
|
||||||
|
print (f'Flattening {tag}')
|
||||||
|
|
||||||
|
# Creating a container
|
||||||
|
cmd = cli + ' run --name test-flatten --entrypoint /bin/true -d ' + tag
|
||||||
|
print (cmd)
|
||||||
|
subprocess.check_output(cmd, shell=True, universal_newlines=True)
|
||||||
|
|
||||||
|
# Export / Import trick
|
||||||
|
cmd = cli + ' export test-flatten | ' + cli + ' import '
|
||||||
|
# Bizarro syntax issue with podman
|
||||||
|
if cli == 'docker':
|
||||||
|
cmd += ' --change "ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" '
|
||||||
|
else:
|
||||||
|
cmd += ' --change "ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" '
|
||||||
|
if re.search('oai-enb', tag):
|
||||||
|
cmd += ' --change "WORKDIR /opt/oai-enb" '
|
||||||
|
cmd += ' --change "EXPOSE 2152/udp" '
|
||||||
|
cmd += ' --change "EXPOSE 36412/udp" '
|
||||||
|
cmd += ' --change "EXPOSE 36422/udp" '
|
||||||
|
cmd += ' --change "CMD [\\"/opt/oai-enb/bin/lte-softmodem.Rel15\\", \\"-O\\", \\"/opt/oai-enb/etc/enb.conf\\"]" '
|
||||||
|
cmd += ' --change "ENTRYPOINT [\\"/opt/oai-enb/bin/entrypoint.sh\\"]" '
|
||||||
|
if re.search('oai-gnb', tag):
|
||||||
|
cmd += ' --change "WORKDIR /opt/oai-gnb" '
|
||||||
|
cmd += ' --change "EXPOSE 2152/udp" '
|
||||||
|
cmd += ' --change "EXPOSE 36422/udp" '
|
||||||
|
cmd += ' --change "CMD [\\"/opt/oai-gnb/bin/nr-softmodem.Rel15\\", \\"-O\\", \\"/opt/oai-gnb/etc/gnb.conf\\"]" '
|
||||||
|
cmd += ' --change "ENTRYPOINT [\\"/opt/oai-gnb/bin/entrypoint.sh\\"]" '
|
||||||
|
if re.search('oai-lte-ue', tag):
|
||||||
|
cmd += ' --change "WORKDIR /opt/oai-lte-ue" '
|
||||||
|
cmd += ' --change "CMD [\\"/opt/oai-lte-ue/bin/lte-uesoftmodem.Rel15\\"]" '
|
||||||
|
cmd += ' --change "ENTRYPOINT [\\"/opt/oai-lte-ue/bin/entrypoint.sh\\"]" '
|
||||||
|
if re.search('oai-nr-ue', tag):
|
||||||
|
cmd += ' --change "WORKDIR /opt/oai-nr-ue" '
|
||||||
|
cmd += ' --change "CMD [\\"/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15\\", \\"-O\\", \\"/opt/oai-nr-ue/etc/nr-ue.conf\\"]" '
|
||||||
|
cmd += ' --change "ENTRYPOINT [\\"/opt/oai-nr-ue/bin/entrypoint.sh\\"]" '
|
||||||
|
if re.search('oai-lte-ru', tag):
|
||||||
|
cmd += ' --change "WORKDIR /opt/oai-lte-ru" '
|
||||||
|
cmd += ' --change "CMD [\\"/opt/oai-lte-ru/bin/oairu.Rel15\\", \\"-O\\", \\"/opt/oai-lte-ru/etc/rru.conf\\"]" '
|
||||||
|
cmd += ' --change "ENTRYPOINT [\\"/opt/oai-lte-ru/bin/entrypoint.sh\\"]" '
|
||||||
|
if re.search('oai-physim', tag):
|
||||||
|
cmd += ' --change "WORKDIR /opt/oai-physim" '
|
||||||
|
cmd += ' - ' + image_prefix + tag
|
||||||
|
print (cmd)
|
||||||
|
subprocess.check_output(cmd, shell=True, universal_newlines=True)
|
||||||
|
|
||||||
|
# Remove container
|
||||||
|
cmd = cli + ' rm -f test-flatten'
|
||||||
|
print (cmd)
|
||||||
|
subprocess.check_output(cmd, shell=True, universal_newlines=True)
|
||||||
|
|
||||||
|
# At this point the original image is a dangling image.
|
||||||
|
# CI pipeline will clean up (`image prune --force`)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
+27
-11
@@ -49,7 +49,7 @@ import cls_physim1 #class PhySim for physical simulators deploy and run
|
|||||||
import sshconnection
|
import sshconnection
|
||||||
import epc
|
import epc
|
||||||
import ran
|
import ran
|
||||||
import html
|
import cls_oai_html
|
||||||
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
@@ -376,6 +376,16 @@ def GetParametersFromXML(action):
|
|||||||
if (string_field is not None):
|
if (string_field is not None):
|
||||||
EPC.yamlPath = string_field
|
EPC.yamlPath = string_field
|
||||||
|
|
||||||
|
elif action == 'Initialize_5GCN':
|
||||||
|
string_field = test.findtext('args')
|
||||||
|
if (string_field is not None):
|
||||||
|
EPC.cfgDeploy = string_field
|
||||||
|
|
||||||
|
elif action == 'Terminate_5GCN':
|
||||||
|
string_field = test.findtext('args')
|
||||||
|
if (string_field is not None):
|
||||||
|
EPC.cfgUnDeploy = string_field
|
||||||
|
|
||||||
elif action == 'Deploy_Object' or action == 'Undeploy_Object':
|
elif action == 'Deploy_Object' or action == 'Undeploy_Object':
|
||||||
eNB_instance=test.findtext('eNB_instance')
|
eNB_instance=test.findtext('eNB_instance')
|
||||||
if (eNB_instance is None):
|
if (eNB_instance is None):
|
||||||
@@ -391,7 +401,7 @@ def GetParametersFromXML(action):
|
|||||||
if (string_field is not None):
|
if (string_field is not None):
|
||||||
CONTAINERS.yamlPath[CONTAINERS.eNB_instance] = string_field
|
CONTAINERS.yamlPath[CONTAINERS.eNB_instance] = string_field
|
||||||
|
|
||||||
elif action == 'DeployGenObject' or action == 'UndeployGenObject':
|
elif action == 'DeployGenObject' or action == 'UndeployGenObject' or action == 'StatsFromGenObject':
|
||||||
string_field=test.findtext('yaml_path')
|
string_field=test.findtext('yaml_path')
|
||||||
if (string_field is not None):
|
if (string_field is not None):
|
||||||
CONTAINERS.yamlPath[0] = string_field
|
CONTAINERS.yamlPath[0] = string_field
|
||||||
@@ -508,7 +518,7 @@ CiTestObj = cls_oaicitest.OaiCiTest()
|
|||||||
SSH = sshconnection.SSHConnection()
|
SSH = sshconnection.SSHConnection()
|
||||||
EPC = epc.EPCManagement()
|
EPC = epc.EPCManagement()
|
||||||
RAN = ran.RANManagement()
|
RAN = ran.RANManagement()
|
||||||
HTML = html.HTMLManagement()
|
HTML = cls_oai_html.HTMLManagement()
|
||||||
CONTAINERS = cls_containerize.Containerize()
|
CONTAINERS = cls_containerize.Containerize()
|
||||||
SCA = cls_static_code_analysis.StaticCodeAnalysis()
|
SCA = cls_static_code_analysis.StaticCodeAnalysis()
|
||||||
PHYSIM = cls_physim1.PhySim()
|
PHYSIM = cls_physim1.PhySim()
|
||||||
@@ -769,19 +779,19 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
|||||||
HTML.CreateHtmlTabHeader()
|
HTML.CreateHtmlTabHeader()
|
||||||
|
|
||||||
# On CI bench w/ containers, we need to validate if IP routes are set
|
# On CI bench w/ containers, we need to validate if IP routes are set
|
||||||
if EPC.IPAddress == '192.168.18.210':
|
if EPC.IPAddress == '172.21.16.136':
|
||||||
CONTAINERS.CheckAndAddRoute('porcepix', EPC.IPAddress, EPC.UserName, EPC.Password)
|
CONTAINERS.CheckAndAddRoute('porcepix', EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||||
if CONTAINERS.eNBIPAddress == '192.168.18.194':
|
if CONTAINERS.eNBIPAddress == '172.21.16.127':
|
||||||
CONTAINERS.CheckAndAddRoute('asterix', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
|
CONTAINERS.CheckAndAddRoute('asterix', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
|
||||||
if CONTAINERS.eNB1IPAddress == '192.168.18.194':
|
if CONTAINERS.eNB1IPAddress == '172.21.16.127':
|
||||||
CONTAINERS.CheckAndAddRoute('asterix', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password)
|
CONTAINERS.CheckAndAddRoute('asterix', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password)
|
||||||
if CONTAINERS.eNBIPAddress == '192.168.18.193':
|
if CONTAINERS.eNBIPAddress == '172.21.16.128':
|
||||||
CONTAINERS.CheckAndAddRoute('obelix', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
|
CONTAINERS.CheckAndAddRoute('obelix', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
|
||||||
if CONTAINERS.eNB1IPAddress == '192.168.18.193':
|
if CONTAINERS.eNB1IPAddress == '172.21.16.128':
|
||||||
CONTAINERS.CheckAndAddRoute('obelix', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password)
|
CONTAINERS.CheckAndAddRoute('obelix', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password)
|
||||||
if CONTAINERS.eNBIPAddress == '192.168.18.209':
|
if CONTAINERS.eNBIPAddress == '172.21.16.137':
|
||||||
CONTAINERS.CheckAndAddRoute('nepes', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
|
CONTAINERS.CheckAndAddRoute('nepes', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
|
||||||
if CONTAINERS.eNB1IPAddress == '192.168.18.209':
|
if CONTAINERS.eNB1IPAddress == '172.21.16.137':
|
||||||
CONTAINERS.CheckAndAddRoute('nepes', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password)
|
CONTAINERS.CheckAndAddRoute('nepes', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password)
|
||||||
|
|
||||||
CiTestObj.FailReportCnt = 0
|
CiTestObj.FailReportCnt = 0
|
||||||
@@ -789,7 +799,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
|||||||
HTML.startTime=int(round(time.time() * 1000))
|
HTML.startTime=int(round(time.time() * 1000))
|
||||||
while CiTestObj.FailReportCnt < CiTestObj.repeatCounts[0] and RAN.prematureExit:
|
while CiTestObj.FailReportCnt < CiTestObj.repeatCounts[0] and RAN.prematureExit:
|
||||||
RAN.prematureExit=False
|
RAN.prematureExit=False
|
||||||
# At every iteratin of the retry loop, a separator will be added
|
# At every iteration of the retry loop, a separator will be added
|
||||||
# pass CiTestObj.FailReportCnt as parameter of HTML.CreateHtmlRetrySeparator
|
# pass CiTestObj.FailReportCnt as parameter of HTML.CreateHtmlRetrySeparator
|
||||||
HTML.CreateHtmlRetrySeparator(CiTestObj.FailReportCnt)
|
HTML.CreateHtmlRetrySeparator(CiTestObj.FailReportCnt)
|
||||||
for test_case_id in todo_tests:
|
for test_case_id in todo_tests:
|
||||||
@@ -913,6 +923,10 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
|||||||
CONTAINERS.UndeployObject(HTML, RAN)
|
CONTAINERS.UndeployObject(HTML, RAN)
|
||||||
elif action == 'Cppcheck_Analysis':
|
elif action == 'Cppcheck_Analysis':
|
||||||
SCA.CppCheckAnalysis(HTML)
|
SCA.CppCheckAnalysis(HTML)
|
||||||
|
elif action == 'LicenceAndFormattingCheck':
|
||||||
|
ret = SCA.LicenceAndFormattingCheck(HTML)
|
||||||
|
if ret != 0:
|
||||||
|
RAN.prematureExit = True
|
||||||
elif action == 'Deploy_Run_PhySim':
|
elif action == 'Deploy_Run_PhySim':
|
||||||
PHYSIM.Deploy_PhySim(HTML, RAN)
|
PHYSIM.Deploy_PhySim(HTML, RAN)
|
||||||
elif action == 'DeployGenObject':
|
elif action == 'DeployGenObject':
|
||||||
@@ -931,6 +945,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
|||||||
CONTAINERS.IperfFromContainer(HTML, RAN)
|
CONTAINERS.IperfFromContainer(HTML, RAN)
|
||||||
if CONTAINERS.exitStatus==1:
|
if CONTAINERS.exitStatus==1:
|
||||||
RAN.prematureExit = True
|
RAN.prematureExit = True
|
||||||
|
elif action == 'StatsFromGenObject':
|
||||||
|
CONTAINERS.StatsFromGenObject(HTML)
|
||||||
else:
|
else:
|
||||||
sys.exit('Invalid class (action) from xml')
|
sys.exit('Invalid class (action) from xml')
|
||||||
if RAN.prematureExit:
|
if RAN.prematureExit:
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
AUTH_SERVICE = 'registry.docker.io'
|
||||||
|
AUTH_SCOPE = 'repository:oaisoftwarealliance/oai-enb:pull'
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
args = _parse_args()
|
||||||
|
|
||||||
|
cmd = 'curl -fsSL "https://auth.docker.io/token?service=' + AUTH_SERVICE + '&scope=' + AUTH_SCOPE + '" 2>/dev/null | jq --raw-output ".token"'
|
||||||
|
token = subprocess.check_output(cmd, shell=True, universal_newlines=True)
|
||||||
|
token = str(token).strip()
|
||||||
|
cmd = 'curl -fsSL -H "Authorization: Bearer ' + token + '" "https://index.docker.io/v2/oaisoftwarealliance/oai-enb/tags/list" 2>/dev/null | jq .'
|
||||||
|
listOfTags = subprocess.check_output(cmd, shell=True, universal_newlines=True)
|
||||||
|
|
||||||
|
foundTag = False
|
||||||
|
for tag in listOfTags.split('\n'):
|
||||||
|
if re.search('"' + args.start_tag + '"', tag) is not None:
|
||||||
|
foundTag = True
|
||||||
|
|
||||||
|
if not foundTag:
|
||||||
|
print (args.start_tag)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
proposedVariants = ['a', 'b', 'c', 'd']
|
||||||
|
for variant in proposedVariants:
|
||||||
|
foundTag = False
|
||||||
|
currentVariant = variant
|
||||||
|
for tag in listOfTags.split('\n'):
|
||||||
|
if re.search('"' + args.start_tag + variant + '"', tag) is not None:
|
||||||
|
foundTag = True
|
||||||
|
break
|
||||||
|
if not foundTag:
|
||||||
|
break
|
||||||
|
|
||||||
|
if not foundTag:
|
||||||
|
print (args.start_tag + currentVariant)
|
||||||
|
|
||||||
|
def _parse_args() -> argparse.Namespace:
|
||||||
|
parser = argparse.ArgumentParser(description='Provides an unique new image tag for DockerHub')
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'--start_tag', '-st',
|
||||||
|
action='store',
|
||||||
|
required=True,
|
||||||
|
help='Proposed Starting Tag',
|
||||||
|
)
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
+62
-49
@@ -372,36 +372,30 @@ class RANManagement():
|
|||||||
else:
|
else:
|
||||||
pcapfile_prefix="gnb_"
|
pcapfile_prefix="gnb_"
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
mySSH.command('ip addr show | awk -f /tmp/active_net_interfaces.awk | egrep -v "lo|tun"', '\$', 5)
|
eth_interface = 'any'
|
||||||
result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
|
fltr = 'sctp'
|
||||||
if result is not None:
|
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
|
||||||
eth_interface = result.group('eth_interface')
|
pcapfile = pcapfile_prefix + self.testCase_id + '_log.pcap'
|
||||||
fltr = 'port 38412 or port 36412 or port 36422' # NGAP, S1AP, X2AP
|
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -f /tmp/' + pcapfile , '\$', 5)
|
||||||
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
|
mySSH.command('echo $USER; nohup sudo -E tshark -i ' + eth_interface + ' -f "' + fltr + '" -w /tmp/' + pcapfile + ' > /dev/null 2>&1 &','\$', 5)
|
||||||
pcapfile = pcapfile_prefix + self.testCase_id + '_log.pcap'
|
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -f /tmp/' + pcapfile , '\$', 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()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# If tracer options is on, running tshark on EPC side and capture traffic b/ EPC and eNB
|
# If tracer options is on, running tshark on EPC side and capture traffic b/ EPC and eNB
|
||||||
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
if EPC.IPAddress != "none":
|
||||||
if (result is not None):
|
|
||||||
localEpcIpAddr = EPC.IPAddress
|
localEpcIpAddr = EPC.IPAddress
|
||||||
localEpcUserName = EPC.UserName
|
localEpcUserName = EPC.UserName
|
||||||
localEpcPassword = EPC.Password
|
localEpcPassword = EPC.Password
|
||||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
||||||
mySSH.command('ip addr show | awk -f /tmp/active_net_interfaces.awk | egrep -v "lo|tun"', '\$', 5)
|
eth_interface = 'any'
|
||||||
result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
|
fltr = 'sctp'
|
||||||
if result is not None:
|
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
|
||||||
eth_interface = result.group('eth_interface')
|
self.epcPcapFile = 'enb_' + self.testCase_id + '_s1log.pcap'
|
||||||
fltr = 'port 38412 or port 36412 or port 36422' # NGAP, S1AP, X2AP
|
mySSH.command('echo ' + localEpcPassword + ' | sudo -S rm -f /tmp/' + self.epcPcapFile , '\$', 5)
|
||||||
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
|
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)
|
||||||
self.epcPcapFile = 'enb_' + self.testCase_id + '_s1log.pcap'
|
|
||||||
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 + ' -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)
|
||||||
# Initialize_eNB_args usually start with -O and followed by the location in repository
|
# Initialize_eNB_args usually start with -O and followed by the location in repository
|
||||||
@@ -485,7 +479,7 @@ class RANManagement():
|
|||||||
|
|
||||||
mySSH.command('chmod 775 ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
mySSH.command('chmod 775 ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf enb_' + self.testCase_id + '.log', '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf enb_' + self.testCase_id + '.log', '\$', 5)
|
||||||
mySSH.command('echo $USER; nohup sudo -E ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh > ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '.log 2>&1 &', lUserName, 10)
|
mySSH.command('echo $USER; nohup sudo -E stdbuf -o0 ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh > ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '.log 2>&1 &', lUserName, 10)
|
||||||
|
|
||||||
|
|
||||||
#stats monitoring during runtime
|
#stats monitoring during runtime
|
||||||
@@ -519,23 +513,19 @@ class RANManagement():
|
|||||||
logging.error('\u001B[1;37;41m eNB/gNB/ocp-eNB logging system did not show got sync! \u001B[0m')
|
logging.error('\u001B[1;37;41m eNB/gNB/ocp-eNB logging system did not show got sync! \u001B[0m')
|
||||||
HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'KO', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
# In case of T tracer recording, we need to kill tshark on EPC side
|
# In case of T tracer recording, we need to kill tshark on EPC side
|
||||||
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
localEpcIpAddr = EPC.IPAddress
|
||||||
if (result is not None):
|
localEpcUserName = EPC.UserName
|
||||||
localEpcIpAddr = EPC.IPAddress
|
localEpcPassword = EPC.Password
|
||||||
localEpcUserName = EPC.UserName
|
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
||||||
localEpcPassword = EPC.Password
|
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
||||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
||||||
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
if self.epcPcapFile != '':
|
||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
mySSH.command('echo ' + localEpcPassword + ' | sudo -S chmod 666 /tmp/' + self.epcPcapFile, '\$', 5)
|
||||||
if self.epcPcapFile != '':
|
mySSH.close()
|
||||||
time.sleep(0.5)
|
if self.epcPcapFile != '':
|
||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S chmod 666 /tmp/' + self.epcPcapFile, '\$', 5)
|
copyin_res = mySSH.copyin(localEpcIpAddr, localEpcUserName, localEpcPassword, '/tmp/' + self.epcPcapFile, '.')
|
||||||
mySSH.close()
|
if (copyin_res == 0):
|
||||||
time.sleep(1)
|
mySSH.copyout(lIpAddr, lUserName, lPassWord, self.epcPcapFile, lSourcePath + '/cmake_targets/.')
|
||||||
if self.epcPcapFile != '':
|
|
||||||
copyin_res = mySSH.copyin(localEpcIpAddr, localEpcUserName, localEpcPassword, '/tmp/' + self.epcPcapFile, '.')
|
|
||||||
if (copyin_res == 0):
|
|
||||||
mySSH.copyout(lIpAddr, lUserName, lPassWord, self.epcPcapFile, lSourcePath + '/cmake_targets/.')
|
|
||||||
self.prematureExit = True
|
self.prematureExit = True
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
@@ -677,13 +667,13 @@ class RANManagement():
|
|||||||
# if T tracer was run with option 0 (no logs), analyze logs
|
# if T tracer was run with option 0 (no logs), analyze logs
|
||||||
# from textlog, otherwise do normal analysis (e.g., option 2)
|
# from textlog, otherwise do normal analysis (e.g., option 2)
|
||||||
result = re.search('T_stdout 0', str(self.Initialize_eNB_args))
|
result = re.search('T_stdout 0', str(self.Initialize_eNB_args))
|
||||||
enbLogFile = self.eNBLogFiles[int(self.eNB_instance)]
|
|
||||||
raw_record_file = enbLogFile.replace('.log', '_record.raw')
|
|
||||||
replay_log_file = enbLogFile.replace('.log', '_replay.log')
|
|
||||||
if (result is not None):
|
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('cd ' + lSourcePath + '/common/utils/T/tracer/', '\$', 5)
|
mySSH.command('cd ' + lSourcePath + '/common/utils/T/tracer/', '\$', 5)
|
||||||
|
enbLogFile = self.eNBLogFiles[int(self.eNB_instance)]
|
||||||
|
raw_record_file = enbLogFile.replace('.log', '_record.raw')
|
||||||
|
replay_log_file = enbLogFile.replace('.log', '_replay.log')
|
||||||
extracted_txt_file = enbLogFile.replace('.log', '_extracted_messages.txt')
|
extracted_txt_file = enbLogFile.replace('.log', '_extracted_messages.txt')
|
||||||
extracted_log_file = enbLogFile.replace('.log', '_extracted_messages.log')
|
extracted_log_file = enbLogFile.replace('.log', '_extracted_messages.log')
|
||||||
mySSH.command('./extract_config -i ' + lSourcePath + '/cmake_targets/' + raw_record_file + ' > ' + lSourcePath + '/cmake_targets/' + extracted_txt_file, '\$', 5)
|
mySSH.command('./extract_config -i ' + lSourcePath + '/cmake_targets/' + raw_record_file + ' > ' + lSourcePath + '/cmake_targets/' + extracted_txt_file, '\$', 5)
|
||||||
@@ -706,8 +696,6 @@ class RANManagement():
|
|||||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*stats.log', '.')
|
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*stats.log', '.')
|
||||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*.pickle', '.')
|
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*.pickle', '.')
|
||||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*.png', '.')
|
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*.png', '.')
|
||||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/'+raw_record_file, '.')
|
|
||||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/'+replay_log_file, '.')
|
|
||||||
#
|
#
|
||||||
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + fileToAnalyze, '.')
|
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + fileToAnalyze, '.')
|
||||||
if (copyin_res == -1):
|
if (copyin_res == -1):
|
||||||
@@ -723,9 +711,7 @@ class RANManagement():
|
|||||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './nrL1_stats.log', self.eNBSourceCodePath + '/cmake_targets/')
|
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './nrL1_stats.log', self.eNBSourceCodePath + '/cmake_targets/')
|
||||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './nrMAC_stats.log', self.eNBSourceCodePath + '/cmake_targets/')
|
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './nrMAC_stats.log', self.eNBSourceCodePath + '/cmake_targets/')
|
||||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.pickle', self.eNBSourceCodePath + '/cmake_targets/')
|
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.pickle', self.eNBSourceCodePath + '/cmake_targets/')
|
||||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.png', self.eNBSourceCodePath + '/cmake_targets/')#RH 21/02/2002 this does not work, there are more than 1 png file
|
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.png', self.eNBSourceCodePath + '/cmake_targets/')
|
||||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword,'./'+raw_record_file, self.eNBSourceCodePath + '/cmake_targets/')
|
|
||||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword,'./'+replay_log_file, self.eNBSourceCodePath + '/cmake_targets/')
|
|
||||||
#
|
#
|
||||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + fileToAnalyze, self.eNBSourceCodePath + '/cmake_targets/')
|
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + fileToAnalyze, self.eNBSourceCodePath + '/cmake_targets/')
|
||||||
logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + fileToAnalyze)
|
logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + fileToAnalyze)
|
||||||
@@ -756,11 +742,11 @@ 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 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* iperf*.log log/*/*.log log/*/*.pcap', '\$', 60)
|
||||||
result = re.search('core.\d+', mySSH.getBefore())
|
result = re.search('core.\d+', mySSH.getBefore())
|
||||||
if result is not None:
|
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 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* iperf*.log log/*/*.log log/*/*.pcap', '\$', 15)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
|
|
||||||
def AnalyzeLogFile_eNB(self, eNBlogFile, HTML, checkers={}):
|
def AnalyzeLogFile_eNB(self, eNBlogFile, HTML, checkers={}):
|
||||||
@@ -826,6 +812,8 @@ class RANManagement():
|
|||||||
RealTimeProcessingIssue = False
|
RealTimeProcessingIssue = False
|
||||||
DLRetxIssue = False
|
DLRetxIssue = False
|
||||||
ULRetxIssue = False
|
ULRetxIssue = False
|
||||||
|
nrRrcRcfgComplete = 0
|
||||||
|
harqFeedbackPast = 0
|
||||||
|
|
||||||
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():
|
||||||
@@ -999,8 +987,25 @@ class RANManagement():
|
|||||||
for k in keys:
|
for k in keys:
|
||||||
result = re.search(k, line)
|
result = re.search(k, line)
|
||||||
if result is not None:
|
if result is not None:
|
||||||
|
ue_prefix = 'ue0'
|
||||||
|
ue_res = re.search('UE ID 1|UE 1:', line)
|
||||||
|
if ue_res is not None:
|
||||||
|
ue_prefix = 'ue1'
|
||||||
|
ue_res = re.search('UE ID 2|UE 2:', line)
|
||||||
|
if ue_res is not None:
|
||||||
|
ue_prefix = 'ue2'
|
||||||
|
ue_res = re.search('UE ID 3|UE 3:', line)
|
||||||
|
if ue_res is not None:
|
||||||
|
ue_prefix = 'ue3'
|
||||||
#remove 1- all useless char before relevant info (ulsch or dlsch) 2- trailing char
|
#remove 1- all useless char before relevant info (ulsch or dlsch) 2- trailing char
|
||||||
dlsch_ulsch_stats[k]=re.sub(r'^.*\]\s+', r'' , line.rstrip())
|
dlsch_ulsch_stats[ue_prefix+k]=re.sub(r'^.*\]\s+', r'' , line.rstrip())
|
||||||
|
|
||||||
|
result = re.search('Received NR_RRCReconfigurationComplete from UE', str(line))
|
||||||
|
if result is not None:
|
||||||
|
nrRrcRcfgComplete += 1
|
||||||
|
result = re.search('HARQ feedback is in the past', str(line))
|
||||||
|
if result is not None:
|
||||||
|
harqFeedbackPast += 1
|
||||||
|
|
||||||
|
|
||||||
#count "problem receiving samples" msg
|
#count "problem receiving samples" msg
|
||||||
@@ -1089,6 +1094,14 @@ class RANManagement():
|
|||||||
statMsg = nodeB_prefix + 'NB ran with TX Write thread enabled'
|
statMsg = nodeB_prefix + 'NB ran with TX Write thread enabled'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
htmleNBFailureMsg += statMsg + '\n'
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
|
if nrRrcRcfgComplete > 0:
|
||||||
|
statMsg = nodeB_prefix + 'NB showed ' + str(nrRrcRcfgComplete) + ' "Received NR_RRCReconfigurationComplete from UE" message(s)'
|
||||||
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
|
if harqFeedbackPast > 0:
|
||||||
|
statMsg = nodeB_prefix + 'NB showed ' + str(harqFeedbackPast) + ' "HARQ feedback is in the past" message(s)'
|
||||||
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
#FR1 NSA test : add new markers to make sure gNB is used
|
#FR1 NSA test : add new markers to make sure gNB is used
|
||||||
if NSA_RAPROC_PUSCH_check:
|
if NSA_RAPROC_PUSCH_check:
|
||||||
statMsg = '[RAPROC] PUSCH with TC_RNTI message check for ' + nodeB_prefix + 'NB : PASS '
|
statMsg = '[RAPROC] PUSCH with TC_RNTI message check for ' + nodeB_prefix + 'NB : PASS '
|
||||||
|
|||||||
@@ -528,15 +528,15 @@ class Dashboard:
|
|||||||
editable_mr = project.mergerequests.get(int(mr))
|
editable_mr = project.mergerequests.get(int(mr))
|
||||||
mr_notes = editable_mr.notes.list(all=True)
|
mr_notes = editable_mr.notes.list(all=True)
|
||||||
|
|
||||||
body = '<a href="https://oaitestdashboard.s3.eu-west-1.amazonaws.com/MR'+mr+'/index.html">Consolidated Test Results</a><br>'+\
|
body = '[Consolidated Test Results](https://oaitestdashboard.s3.eu-west-1.amazonaws.com/MR'+mr+'/index.html)\\\n'
|
||||||
'Tested CommitID: ' + commit + '<br>'
|
body += 'Tested CommitID: ' + commit + '\\\n'
|
||||||
|
|
||||||
for i in range(0,n_tests):
|
for i in range(0,n_tests):
|
||||||
jobname = args[4*i]
|
jobname = args[4*i]
|
||||||
buildurl = args[4*i+1]
|
buildurl = args[4*i+1]
|
||||||
buildid = args[4*i+2]
|
buildid = args[4*i+2]
|
||||||
status = args[4*i+3]
|
status = args[4*i+3]
|
||||||
body += jobname+', status is <b>'+status+'</b>, (<a href="'+buildurl+'">'+buildid+'</a>)<br>'
|
body += jobname+': **'+status+'** ([' + buildid + '](' + buildurl + '))\\\n'
|
||||||
|
|
||||||
#create new note
|
#create new note
|
||||||
mr_note = editable_mr.notes.create({
|
mr_note = editable_mr.notes.create({
|
||||||
|
|||||||
@@ -1899,7 +1899,7 @@ function run_test_on_vm {
|
|||||||
CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_sa_test.log
|
CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_sa_test.log
|
||||||
#last argument = 2 is to enable --sa for SA test for 106PRB
|
#last argument = 2 is to enable --sa for SA test for 106PRB
|
||||||
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 2
|
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 2
|
||||||
if [ $NR_UE_SYNC -eq 0 ]
|
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "Problem w/ gNB and NR-UE not syncing"
|
echo "Problem w/ gNB and NR-UE not syncing"
|
||||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||||
@@ -1939,6 +1939,12 @@ function run_test_on_vm {
|
|||||||
SA_106PRB_STATUS=0
|
SA_106PRB_STATUS=0
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
#manage SYNC issue after try_cnt
|
||||||
|
if [ $SYNC_STATUS -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "SA 106PRB test NOT OK, NOT SYNC'ED"
|
||||||
|
SA_106PRB_STATUS=-1
|
||||||
|
fi
|
||||||
########### end SA test
|
########### end SA test
|
||||||
|
|
||||||
sleep 30
|
sleep 30
|
||||||
@@ -1982,7 +1988,7 @@ function run_test_on_vm {
|
|||||||
CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_sa_test.log
|
CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_sa_test.log
|
||||||
#last argument = 3 is to enable --sa for SA test for 24PRB
|
#last argument = 3 is to enable --sa for SA test for 24PRB
|
||||||
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 3
|
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 3
|
||||||
if [ $NR_UE_SYNC -eq 0 ]
|
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "Problem w/ gNB and NR-UE not syncing"
|
echo "Problem w/ gNB and NR-UE not syncing"
|
||||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||||
@@ -2022,6 +2028,12 @@ function run_test_on_vm {
|
|||||||
SA_24PRB_STATUS=0
|
SA_24PRB_STATUS=0
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
#manage SYNC issue after try_cnt
|
||||||
|
if [ $SYNC_STATUS -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "SA 24PRB test NOT OK, NOT SYNC'ED"
|
||||||
|
SA_24PRB_STATUS=-1
|
||||||
|
fi
|
||||||
########### end SA test
|
########### end SA test
|
||||||
|
|
||||||
sleep 30
|
sleep 30
|
||||||
@@ -2070,7 +2082,7 @@ function run_test_on_vm {
|
|||||||
CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_ra_fr2_test.log
|
CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_ra_fr2_test.log
|
||||||
#last argument = 1 is to enable --do-ra for RA test
|
#last argument = 1 is to enable --do-ra for RA test
|
||||||
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1
|
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1
|
||||||
if [ $NR_UE_SYNC -eq 0 ]
|
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "Problem w/ gNB and NR-UE not syncing"
|
echo "Problem w/ gNB and NR-UE not syncing"
|
||||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||||
@@ -2110,6 +2122,12 @@ function run_test_on_vm {
|
|||||||
try_cnt=$((try_cnt+10))
|
try_cnt=$((try_cnt+10))
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
#manage SYNC issue after try_cnt
|
||||||
|
if [ $SYNC_STATUS -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "RA FR2 test NOT OK, NOT SYNC'ED"
|
||||||
|
RA_FR2_STATUS=-1
|
||||||
|
fi
|
||||||
########### end RA FR2 test
|
########### end RA FR2 test
|
||||||
|
|
||||||
sleep 30
|
sleep 30
|
||||||
@@ -2172,7 +2190,7 @@ function run_test_on_vm {
|
|||||||
CURRENT_NR_UE_LOG_FILE=${TMODE}_${PRB}prb_${CN_CONFIG}_ue_ra_test.log
|
CURRENT_NR_UE_LOG_FILE=${TMODE}_${PRB}prb_${CN_CONFIG}_ue_ra_test.log
|
||||||
#last argument = 1 is to enable --do-ra for RA test
|
#last argument = 1 is to enable --do-ra for RA test
|
||||||
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1
|
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1
|
||||||
if [ $NR_UE_SYNC -eq 0 ]
|
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "Problem w/ gNB and NR-UE not syncing"
|
echo "Problem w/ gNB and NR-UE not syncing"
|
||||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||||
@@ -2212,6 +2230,13 @@ function run_test_on_vm {
|
|||||||
try_cnt=$((try_cnt+10))
|
try_cnt=$((try_cnt+10))
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
#manage SYNC issue after try_cnt
|
||||||
|
if [ $SYNC_STATUS -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "RA FR1 test NOT OK, NOT SYNC'ED"
|
||||||
|
RA_FR1_STATUS=-1
|
||||||
|
fi
|
||||||
|
|
||||||
done
|
done
|
||||||
########### end RA test
|
########### end RA test
|
||||||
|
|
||||||
@@ -2253,7 +2278,7 @@ function run_test_on_vm {
|
|||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
CURRENT_NR_UE_LOG_FILE=${TMODE}_${PRB}prb_${CN_CONFIG}_ue.log
|
CURRENT_NR_UE_LOG_FILE=${TMODE}_${PRB}prb_${CN_CONFIG}_ue.log
|
||||||
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 0
|
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 0
|
||||||
if [ $NR_UE_SYNC -eq 0 ]
|
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "Problem w/ gNB and NR-UE not syncing"
|
echo "Problem w/ gNB and NR-UE not syncing"
|
||||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||||
@@ -2332,6 +2357,13 @@ function run_test_on_vm {
|
|||||||
try_cnt=$((try_cnt+10))
|
try_cnt=$((try_cnt+10))
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
#manage SYNC issue after try_cnt
|
||||||
|
if [ $SYNC_STATUS -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "PHY test NOT OK, NOT SYNC'ED"
|
||||||
|
IPERF_STATUS=-1
|
||||||
|
fi
|
||||||
|
|
||||||
done
|
done
|
||||||
######### end of loop
|
######### end of loop
|
||||||
full_l2_sim_destroy
|
full_l2_sim_destroy
|
||||||
@@ -2345,7 +2377,6 @@ function run_test_on_vm {
|
|||||||
if [ $SA_24PRB_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
if [ $SA_24PRB_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||||
if [ $RA_FR2_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
if [ $RA_FR2_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||||
if [ $RA_FR1_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
if [ $RA_FR1_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||||
if [ $SYNC_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
|
||||||
if [ $PING_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
if [ $PING_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||||
if [ $IPERF_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
if [ $IPERF_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||||
if [ $NR_STATUS -eq 0 ]
|
if [ $NR_STATUS -eq 0 ]
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ class SSHConnection():
|
|||||||
self.picocom_closure = True
|
self.picocom_closure = True
|
||||||
|
|
||||||
def open(self, ipaddress, username, password):
|
def open(self, ipaddress, username, password):
|
||||||
|
prompt = "#" if username == "root" else "\$"
|
||||||
count = 0
|
count = 0
|
||||||
connect_status = False
|
connect_status = False
|
||||||
while count < 4:
|
while count < 4:
|
||||||
@@ -68,7 +69,7 @@ class SSHConnection():
|
|||||||
self.sshresponse = self.ssh.expect(['password:', username + '@'])
|
self.sshresponse = self.ssh.expect(['password:', username + '@'])
|
||||||
if self.sshresponse == 0:
|
if self.sshresponse == 0:
|
||||||
self.ssh.sendline(password)
|
self.ssh.sendline(password)
|
||||||
self.sshresponse = self.ssh.expect(['\$', 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT])
|
self.sshresponse = self.ssh.expect([prompt, 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT])
|
||||||
if self.sshresponse == 0:
|
if self.sshresponse == 0:
|
||||||
count = 10
|
count = 10
|
||||||
connect_status = True
|
connect_status = True
|
||||||
@@ -76,7 +77,7 @@ class SSHConnection():
|
|||||||
logging.debug('self.sshresponse = ' + str(self.sshresponse))
|
logging.debug('self.sshresponse = ' + str(self.sshresponse))
|
||||||
elif self.sshresponse == 1:
|
elif self.sshresponse == 1:
|
||||||
self.ssh.sendline(password)
|
self.ssh.sendline(password)
|
||||||
self.sshresponse = self.ssh.expect(['\$', 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT])
|
self.sshresponse = self.ssh.expect([prompt, 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT])
|
||||||
if self.sshresponse == 0:
|
if self.sshresponse == 0:
|
||||||
count = 10
|
count = 10
|
||||||
connect_status = True
|
connect_status = True
|
||||||
@@ -84,7 +85,7 @@ class SSHConnection():
|
|||||||
logging.debug('self.sshresponse = ' + str(self.sshresponse))
|
logging.debug('self.sshresponse = ' + str(self.sshresponse))
|
||||||
elif self.sshresponse == 2:
|
elif self.sshresponse == 2:
|
||||||
# Checking if we are really on the remote client defined by its IP address
|
# Checking if we are really on the remote client defined by its IP address
|
||||||
self.command('stdbuf -o0 ifconfig | egrep --color=never "inet addr:|inet "', '\$', 5)
|
self.command('stdbuf -o0 ifconfig | egrep --color=never "inet addr:|inet "', prompt, 5)
|
||||||
result = re.search(str(ipaddress), str(self.ssh.before))
|
result = re.search(str(ipaddress), str(self.ssh.before))
|
||||||
if result is None:
|
if result is None:
|
||||||
self.close()
|
self.close()
|
||||||
@@ -100,7 +101,7 @@ class SSHConnection():
|
|||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
count += 1
|
count += 1
|
||||||
if connect_status:
|
if connect_status:
|
||||||
self.command('unset HISTFILE', '\$', 5, silent=True)
|
self.command('unset HISTFILE', prompt, 5, silent=True)
|
||||||
else:
|
else:
|
||||||
sys.exit('SSH Connection Failed')
|
sys.exit('SSH Connection Failed')
|
||||||
self.ipaddress = ipaddress
|
self.ipaddress = ipaddress
|
||||||
|
|||||||
@@ -46,3 +46,5 @@
|
|||||||
- UndeployGenObject
|
- UndeployGenObject
|
||||||
- PingFromContainer
|
- PingFromContainer
|
||||||
- IperfFromContainer
|
- IperfFromContainer
|
||||||
|
- StatsFromGenObject
|
||||||
|
- LicenceAndFormattingCheck
|
||||||
|
|||||||
@@ -33,12 +33,10 @@
|
|||||||
000013
|
000013
|
||||||
020011
|
020011
|
||||||
020012
|
020012
|
||||||
100011
|
|
||||||
</TestCaseRequestedList>
|
|
||||||
<!-- Not done yet because of code instability
|
|
||||||
030011
|
030011
|
||||||
030012
|
030012
|
||||||
-->
|
100011
|
||||||
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="000010">
|
<testCase id="000010">
|
||||||
@@ -104,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 1M</client_options>
|
<client_options>-B 12.1.1.2 -c 192.168.72.135 -u -i 1 -t 30 -b 3M</client_options>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="100011">
|
<testCase id="100011">
|
||||||
|
|||||||
@@ -0,0 +1,115 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>l2sim-5gnr-tdd</htmlTabRef>
|
||||||
|
<htmlTabName>Testing 5G NR L2 sim - TDD gNB</htmlTabName>
|
||||||
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<repeatCount>2</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
100001
|
||||||
|
000000
|
||||||
|
000001
|
||||||
|
000002
|
||||||
|
000003
|
||||||
|
000011
|
||||||
|
200000
|
||||||
|
020001
|
||||||
|
020002
|
||||||
|
200001
|
||||||
|
100001
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000000">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy MySql Database</desc>
|
||||||
|
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||||
|
<services>mysql</services>
|
||||||
|
<nb_healthy>1</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 5G CoreNetwork</desc>
|
||||||
|
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||||
|
<services>oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn</services>
|
||||||
|
<nb_healthy>6</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 5G gNB L2 sim SA</desc>
|
||||||
|
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||||
|
<services>oai-gnb</services>
|
||||||
|
<nb_healthy>7</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000003">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy OAI 5G NR-UE L2 sim SA and Proxy</desc>
|
||||||
|
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||||
|
<services>proxy oai-nr-ue0</services>
|
||||||
|
<nb_healthy>9</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000011">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="020001">
|
||||||
|
<class>PingFromContainer</class>
|
||||||
|
<desc>Ping ext-dn from NR-UE</desc>
|
||||||
|
<container_name>l2sim-oai-nr-ue0</container_name>
|
||||||
|
<options>-I oaitun_ue1 -c 20 192.168.72.135</options>
|
||||||
|
<loss_threshold>5</loss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="020002">
|
||||||
|
<class>PingFromContainer</class>
|
||||||
|
<desc>Ping NR-UE from ext-dn</desc>
|
||||||
|
<container_name>l2sim-oai-ext-dn</container_name>
|
||||||
|
<options>-c 20 12.1.1.2</options>
|
||||||
|
<loss_threshold>5</loss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="100001">
|
||||||
|
<class>UndeployGenObject</class>
|
||||||
|
<desc>Undeploy all OAI 5G stack</desc>
|
||||||
|
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="200000">
|
||||||
|
<class>StatsFromGenObject</class>
|
||||||
|
<desc>Statistics before Traffic Test</desc>
|
||||||
|
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="200001">
|
||||||
|
<class>StatsFromGenObject</class>
|
||||||
|
<desc>Statistics after Traffic Test</desc>
|
||||||
|
<yaml_path>yaml_files/5g_l2sim_tdd</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>l2sim-5gnr-down</htmlTabRef>
|
||||||
|
<htmlTabName>CleanUp 5G L2 sim - TDD gNB</htmlTabName>
|
||||||
|
<htmlTabIcon>trash</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
100002
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="100002">
|
||||||
|
<class>UndeployGenObject</class>
|
||||||
|
<desc>Undeploy all OAI 5G stack</desc>
|
||||||
|
<yaml_path>yaml_files/5g_l2sim_tdd</yaml_path>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -31,8 +31,11 @@
|
|||||||
000001
|
000001
|
||||||
000002
|
000002
|
||||||
000003
|
000003
|
||||||
|
000004
|
||||||
020001
|
020001
|
||||||
020002
|
020002
|
||||||
|
020003
|
||||||
|
020004
|
||||||
030001
|
030001
|
||||||
030002
|
030002
|
||||||
100001
|
100001
|
||||||
@@ -71,6 +74,14 @@
|
|||||||
<nb_healthy>8</nb_healthy>
|
<nb_healthy>8</nb_healthy>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000004">
|
||||||
|
<class>DeployGenObject</class>
|
||||||
|
<desc>Deploy Second OAI 5G NR-UE RF sim SA</desc>
|
||||||
|
<yaml_path>yaml_files/5g_rfsimulator</yaml_path>
|
||||||
|
<services>oai-nr-ue2</services>
|
||||||
|
<nb_healthy>9</nb_healthy>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
<testCase id="020001">
|
<testCase id="020001">
|
||||||
<class>PingFromContainer</class>
|
<class>PingFromContainer</class>
|
||||||
<desc>Ping ext-dn from NR-UE</desc>
|
<desc>Ping ext-dn from NR-UE</desc>
|
||||||
@@ -87,6 +98,22 @@
|
|||||||
<loss_threshold>5</loss_threshold>
|
<loss_threshold>5</loss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="020003">
|
||||||
|
<class>PingFromContainer</class>
|
||||||
|
<desc>Ping ext-dn from Second NR-UE</desc>
|
||||||
|
<container_name>rfsim5g-oai-nr-ue2</container_name>
|
||||||
|
<options>-I oaitun_ue1 -c 20 192.168.72.135</options>
|
||||||
|
<loss_threshold>5</loss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="020004">
|
||||||
|
<class>PingFromContainer</class>
|
||||||
|
<desc>Ping Second NR-UE from ext-dn</desc>
|
||||||
|
<container_name>rfsim5g-oai-ext-dn</container_name>
|
||||||
|
<options>-c 20 12.1.1.3</options>
|
||||||
|
<loss_threshold>5</loss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030001">
|
<testCase id="030001">
|
||||||
<class>IperfFromContainer</class>
|
<class>IperfFromContainer</class>
|
||||||
<desc>Iperf UDP Downlink</desc>
|
<desc>Iperf UDP Downlink</desc>
|
||||||
|
|||||||
@@ -39,8 +39,9 @@
|
|||||||
050001
|
050001
|
||||||
070001
|
070001
|
||||||
070000
|
070000
|
||||||
050000
|
070002
|
||||||
050001
|
050002
|
||||||
|
050003
|
||||||
010002
|
010002
|
||||||
000001
|
000001
|
||||||
030202
|
030202
|
||||||
@@ -117,21 +118,39 @@
|
|||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="050002">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
|
<id>idefix</id>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="050003">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
|
<id>idefix</id>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/40Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 40M -t 60</iperf_args>
|
<iperf_args>-u -b 125M -t 60 -i 1 -fm</iperf_args>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>85</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 3M -t 60</iperf_args>
|
<iperf_args>-u -b 8M -t 60 -i 1 -fm</iperf_args>
|
||||||
<direction>UL</direction>
|
<direction>UL</direction>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||||
@@ -139,6 +158,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>idefix</id>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030201">
|
<testCase id="030201">
|
||||||
<class>Undeploy_Object</class>
|
<class>Undeploy_Object</class>
|
||||||
<desc>Undeploy eNB</desc>
|
<desc>Undeploy eNB</desc>
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>formatting-tab</htmlTabRef>
|
||||||
|
<htmlTabName>License and Formatting Checks</htmlTabName>
|
||||||
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
000002
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>LicenceAndFormattingCheck</class>
|
||||||
|
<desc>License and Formatting Checks</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
<air_interface>lte</air_interface>
|
<air_interface>lte</air_interface>
|
||||||
<eNB_Trace>yes</eNB_Trace>
|
<eNB_Trace>yes</eNB_Trace>
|
||||||
<eNB_Stats>yes</eNB_Stats>
|
<eNB_Stats>yes</eNB_Stats>
|
||||||
<USRP_IPAddress>192.168.18.241</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.13</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
<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>
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000001">
|
<testCase id="000001">
|
||||||
@@ -115,11 +115,12 @@
|
|||||||
|
|
||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 60M -t 60</iperf_args>
|
<iperf_args>-u -b 125M -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>15</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>85</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,7 @@
|
|||||||
<air_interface>lte</air_interface>
|
<air_interface>lte</air_interface>
|
||||||
<eNB_Trace>yes</eNB_Trace>
|
<eNB_Trace>yes</eNB_Trace>
|
||||||
<eNB_Stats>yes</eNB_Stats>
|
<eNB_Stats>yes</eNB_Stats>
|
||||||
<USRP_IPAddress>192.168.18.241</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.13</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
@@ -100,7 +100,7 @@
|
|||||||
<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>
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000001">
|
<testCase id="000001">
|
||||||
|
|||||||
@@ -34,8 +34,8 @@
|
|||||||
050000
|
050000
|
||||||
050001
|
050001
|
||||||
000001
|
000001
|
||||||
070003
|
070000
|
||||||
070002
|
070001
|
||||||
000001
|
000001
|
||||||
050000
|
050000
|
||||||
050001
|
050001
|
||||||
@@ -52,14 +52,12 @@
|
|||||||
<UE_Trace>yes</UE_Trace>
|
<UE_Trace>yes</UE_Trace>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="010002">
|
<testCase id="010002">
|
||||||
<class>Terminate_UE</class>
|
<class>Terminate_UE</class>
|
||||||
<desc>Terminate Quectel</desc>
|
<desc>Terminate Quectel</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="030000">
|
<testCase id="030000">
|
||||||
<class>Initialize_eNB</class>
|
<class>Initialize_eNB</class>
|
||||||
<desc>Initialize eNB</desc>
|
<desc>Initialize eNB</desc>
|
||||||
@@ -70,11 +68,10 @@
|
|||||||
<eNB_Trace>yes</eNB_Trace>
|
<eNB_Trace>yes</eNB_Trace>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<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.tm1.fr1.106PRB.usrpb210.conf -E -q --RUs.[0].sdr_addrs "serial=30C51D4" --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
|
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf -E -q --RUs.[0].sdr_addrs "serial=30C51D4" --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
|
||||||
<eNB_instance>1</eNB_instance>
|
<eNB_instance>1</eNB_instance>
|
||||||
<eNB_serverId>1</eNB_serverId>
|
<eNB_serverId>1</eNB_serverId>
|
||||||
<air_interface>nr</air_interface>
|
<air_interface>nr</air_interface>
|
||||||
@@ -92,7 +89,6 @@
|
|||||||
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="050000">
|
<testCase id="050000">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
@@ -113,41 +109,19 @@
|
|||||||
|
|
||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/30Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 30M -t 30</iperf_args>
|
<iperf_args>-u -b 125M -t 60</iperf_args>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/40Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 40M -t 30</iperf_args>
|
<iperf_args>-u -b 8M -t 60</iperf_args>
|
||||||
<direction>DL</direction>
|
|
||||||
<id>idefix</id>
|
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="070002">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
|
||||||
<iperf_args>-u -b 60M -t 60</iperf_args>
|
|
||||||
<direction>DL</direction>
|
|
||||||
<id>idefix</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/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
|
||||||
<iperf_args>-u -b 3M -t 60</iperf_args>
|
|
||||||
<direction>UL</direction>
|
<direction>UL</direction>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||||
@@ -155,7 +129,6 @@
|
|||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
<testCase id="080000">
|
<testCase id="080000">
|
||||||
<class>Terminate_eNB</class>
|
<class>Terminate_eNB</class>
|
||||||
<desc>Terminate eNB</desc>
|
<desc>Terminate eNB</desc>
|
||||||
|
|||||||
@@ -0,0 +1,87 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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-SA-FR1-Tab1</htmlTabRef>
|
||||||
|
<htmlTabName>SA Ping DL UL with 1 AS UE</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
040000
|
||||||
|
000001
|
||||||
|
010000
|
||||||
|
000002
|
||||||
|
050000
|
||||||
|
080000
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="010000">
|
||||||
|
<class>Initialize_UE</class>
|
||||||
|
<desc>Run AS UE Scenario</desc>
|
||||||
|
<id>amarisoft_ue_1</id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
<testCase id="040000">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize gNB</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.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_serverId>0</eNB_serverId>
|
||||||
|
<air_interface>nr</air_interface>
|
||||||
|
<eNB_Trace>yes</eNB_Trace>
|
||||||
|
<eNB_Stats>yes</eNB_Stats>
|
||||||
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
|
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="050000">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>Ping Log Analysis</desc>
|
||||||
|
<id>amarisoft_ue_1</id>
|
||||||
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>60</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="080000">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate gNB</desc>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<air_interface>nr</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
|
|
||||||
@@ -60,7 +60,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>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000001">
|
<testCase id="000001">
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
<class>Initialize_OAI_UE</class>
|
<class>Initialize_OAI_UE</class>
|
||||||
<desc>Initialize OAI UE (N310)</desc>
|
<desc>Initialize OAI UE (N310)</desc>
|
||||||
<air_interface>nr</air_interface>
|
<air_interface>nr</air_interface>
|
||||||
<Initialize_OAI_UE_args>--sa -O ../../../ci-scripts/conf_files/ue.sa.conf --usrp-args "mgmt_addr=192.168.18.241,addr=192.168.10.2" --numerology 1 -r 106 --band 78 -C 3319680000 --nokrnmod 1 --ue-txgain 0 --ue-rxgain 70 --ue-fo-compensation --log_config.global_log_options level,nocolor,time</Initialize_OAI_UE_args>
|
<Initialize_OAI_UE_args>--sa -O ../../../ci-scripts/conf_files/ue.sa.conf --usrp-args "mgmt_addr=172.21.19.13,addr=192.168.10.2" --numerology 1 -r 106 --band 78 -C 3319680000 --nokrnmod 1 --ue-txgain 0 --ue-rxgain 70 --ue-fo-compensation --log_config.global_log_options level,nocolor,time</Initialize_OAI_UE_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="010002">
|
<testCase id="010002">
|
||||||
@@ -60,7 +60,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>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000001">
|
<testCase id="000001">
|
||||||
|
|||||||
@@ -60,7 +60,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>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000001">
|
<testCase id="000001">
|
||||||
|
|||||||
@@ -70,7 +70,7 @@
|
|||||||
<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>
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000001">
|
<testCase id="000001">
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
<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>
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000001">
|
<testCase id="000001">
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
<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>
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000001">
|
<testCase id="000001">
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
<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>
|
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||||
<USRP_IPAddress>192.168.18.240</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000001">
|
<testCase id="000001">
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<htmlTabRef>gNB-PHY-Test</htmlTabRef>
|
<htmlTabRef>gNB-PHY-Test</htmlTabRef>
|
||||||
<htmlTabName>Run-gNB-PHY-Test</htmlTabName>
|
<htmlTabName>Run-gNB-PHY-Test</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
<repeatCount>3</repeatCount>
|
<repeatCount>1</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
090101 000001 090109
|
090101 000001 090109
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
@@ -33,9 +33,9 @@
|
|||||||
<testCase id="090101">
|
<testCase id="090101">
|
||||||
<class>Initialize_eNB</class>
|
<class>Initialize_eNB</class>
|
||||||
<desc>Initialize gNB USRP</desc>
|
<desc>Initialize gNB USRP</desc>
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf --phy-test -q -U 787200 -T 106 -t 28 -D 130175 -m 28 -M 106 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf --phy-test -q -U 787200 -T 106 -t 28 -D 130175 -m 28 -M 106 --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||||
<air_interface>NR</air_interface>
|
<air_interface>NR</air_interface>
|
||||||
<USRP_IPAddress>192.168.30.2</USRP_IPAddress>
|
<USRP_IPAddress>192.168.20.2</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000001">
|
<testCase id="000001">
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
<mode>TesteNB</mode>
|
<mode>TesteNB</mode>
|
||||||
<class>Build_eNB</class>
|
<class>Build_eNB</class>
|
||||||
<desc>Build gNB (USRP)</desc>
|
<desc>Build gNB (USRP)</desc>
|
||||||
<Build_eNB_args>--gNB -w USRP --ninja</Build_eNB_args>
|
<Build_eNB_args>--gNB -w USRP --ninja --cmake-opt -DBoost_INCLUDE_DIR=/usr/include/boost169</Build_eNB_args>
|
||||||
<forced_workspace_cleanup>True</forced_workspace_cleanup>
|
<forced_workspace_cleanup>True</forced_workspace_cleanup>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
<air_interface>lte</air_interface>
|
<air_interface>lte</air_interface>
|
||||||
<eNB_Trace>yes</eNB_Trace>
|
<eNB_Trace>yes</eNB_Trace>
|
||||||
<eNB_Stats>yes</eNB_Stats>
|
<eNB_Stats>yes</eNB_Stats>
|
||||||
<USRP_IPAddress>192.168.18.241</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.13</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
<air_interface>lte</air_interface>
|
<air_interface>lte</air_interface>
|
||||||
<eNB_Trace>yes</eNB_Trace>
|
<eNB_Trace>yes</eNB_Trace>
|
||||||
<eNB_Stats>yes</eNB_Stats>
|
<eNB_Stats>yes</eNB_Stats>
|
||||||
<USRP_IPAddress>192.168.18.241</USRP_IPAddress>
|
<USRP_IPAddress>172.21.19.13</USRP_IPAddress>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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>cn5g-closure</htmlTabRef>
|
||||||
|
<htmlTabName>CN5G-Closure</htmlTabName>
|
||||||
|
<htmlTabIcon>log-out</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
060000
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="060000">
|
||||||
|
<class>Terminate_5GCN</class>
|
||||||
|
<desc>Terminate 5G Core</desc>
|
||||||
|
<args>--type stop-mini-as-ue --fqdn yes --scenario 1</args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.openairinterface.org/?page_id=698
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
contact@openairinterface.org
|
||||||
|
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>cn5g-start-tab</htmlTabRef>
|
||||||
|
<htmlTabName>CN5G-Start</htmlTabName>
|
||||||
|
<htmlTabIcon>log-in</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
000100
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList>
|
||||||
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000100">
|
||||||
|
<class>Initialize_5GCN</class>
|
||||||
|
<desc>Initialize 5G Core</desc>
|
||||||
|
<args>--type start-mini-as-ue --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.3.pcap</args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -31,9 +31,7 @@ This page is only valid for an `Ubuntu18` host.
|
|||||||
|
|
||||||
# 1. Retrieving the images on Docker-Hub #
|
# 1. Retrieving the images on Docker-Hub #
|
||||||
|
|
||||||
Currently the images are hosted under the user account `rdefosseoai`.
|
Currently the images are hosted under the team account `oaisoftwarealliance`. They were previously hosted under the user account `rdefosseoai`.
|
||||||
|
|
||||||
This may change in the future.
|
|
||||||
|
|
||||||
Once again you may need to log on [docker-hub](https://hub.docker.com/) if your organization has reached pulling limit as `anonymous`.
|
Once again you may need to log on [docker-hub](https://hub.docker.com/) if your organization has reached pulling limit as `anonymous`.
|
||||||
|
|
||||||
@@ -49,13 +47,13 @@ Now pull images.
|
|||||||
```bash
|
```bash
|
||||||
$ docker pull cassandra:2.1
|
$ docker pull cassandra:2.1
|
||||||
$ docker pull redis:6.0.5
|
$ docker pull redis:6.0.5
|
||||||
$ docker pull rdefosseoai/oai-hss:latest
|
$ docker pull oaisoftwarealliance/oai-hss:latest
|
||||||
$ docker pull rdefosseoai/magma-mme:latest
|
$ docker pull oaisoftwarealliance/magma-mme:latest
|
||||||
$ docker pull rdefosseoai/oai-spgwc:latest
|
$ docker pull oaisoftwarealliance/oai-spgwc:latest
|
||||||
$ docker pull rdefosseoai/oai-spgwu-tiny:latest
|
$ docker pull oaisoftwarealliance/oai-spgwu-tiny:latest
|
||||||
|
|
||||||
$ docker pull rdefosseoai/oai-enb:develop
|
$ docker pull oaisoftwarealliance/oai-enb:develop
|
||||||
$ docker pull rdefosseoai/oai-lte-ue:develop
|
$ docker pull oaisoftwarealliance/oai-lte-ue:develop
|
||||||
```
|
```
|
||||||
|
|
||||||
If the `redis` tag is not available, pick the newest available `6.0.x` tag at [Docker Hub Redis Tags](https://hub.docker.com/_/redis?tab=tags).
|
If the `redis` tag is not available, pick the newest available `6.0.x` tag at [Docker Hub Redis Tags](https://hub.docker.com/_/redis?tab=tags).
|
||||||
@@ -63,13 +61,13 @@ If the `redis` tag is not available, pick the newest available `6.0.x` tag at [D
|
|||||||
And **re-tag** them for tutorials' docker-compose file to work.
|
And **re-tag** them for tutorials' docker-compose file to work.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ docker image tag rdefosseoai/oai-spgwc:latest oai-spgwc:latest
|
$ docker image tag oaisoftwarealliance/oai-spgwc:latest oai-spgwc:latest
|
||||||
$ docker image tag rdefosseoai/oai-hss:latest oai-hss:latest
|
$ docker image tag oaisoftwarealliance/oai-hss:latest oai-hss:latest
|
||||||
$ docker image tag rdefosseoai/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
|
$ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
|
||||||
$ docker image tag rdefosseoai/magma-mme:latest magma-mme:latest
|
$ docker image tag oaisoftwarealliance/magma-mme:latest magma-mme:latest
|
||||||
|
|
||||||
$ docker image tag rdefosseoai/oai-enb:develop oai-enb:develop
|
$ docker image tag oaisoftwarealliance/oai-enb:develop oai-enb:develop
|
||||||
$ docker image tag rdefosseoai/oai-lte-ue:develop oai-lte-ue:develop
|
$ docker image tag oaisoftwarealliance/oai-lte-ue:develop oai-lte-ue:develop
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -505,7 +503,7 @@ In my traffic test, I was able to ping outside of my local network.
|
|||||||
in SPGW-C config:
|
in SPGW-C config:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
|
DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100
|
||||||
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||||
PUSH_PROTOCOL_OPTION: 'true'
|
PUSH_PROTOCOL_OPTION: 'true'
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ services:
|
|||||||
TZ: Europe/Paris
|
TZ: Europe/Paris
|
||||||
SGW_INTERFACE_NAME_FOR_S11: eth0
|
SGW_INTERFACE_NAME_FOR_S11: eth0
|
||||||
PGW_INTERFACE_NAME_FOR_SX: eth0
|
PGW_INTERFACE_NAME_FOR_SX: eth0
|
||||||
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
|
DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100
|
||||||
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||||
PUSH_PROTOCOL_OPTION: 'true'
|
PUSH_PROTOCOL_OPTION: 'true'
|
||||||
APN_NI_1: oai.ipv4
|
APN_NI_1: oai.ipv4
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user