Merge remote-tracking branch 'origin/develop' into NR_handling_PMI_report
This commit is contained in:
@@ -4,11 +4,11 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
|
||||
image:
|
||||
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
|
||||
# pullPolicy: IfNotPresent or Never or Always
|
||||
pullPolicy: Always
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
|
||||
image:
|
||||
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
|
||||
# pullPolicy: IfNotPresent or Never or Always
|
||||
pullPolicy: Always
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
|
||||
image:
|
||||
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
|
||||
# pullPolicy: IfNotPresent or Never or Always
|
||||
pullPolicy: Always
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
|
||||
image:
|
||||
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
|
||||
# pullPolicy: IfNotPresent or Never or Always
|
||||
pullPolicy: Always
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
|
||||
image:
|
||||
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
|
||||
# pullPolicy: IfNotPresent or Never or Always
|
||||
pullPolicy: Always
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
|
||||
image:
|
||||
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
|
||||
# pullPolicy: IfNotPresent or Never or Always
|
||||
pullPolicy: Always
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
|
||||
image:
|
||||
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
|
||||
# pullPolicy: IfNotPresent or Never or Always
|
||||
pullPolicy: Always
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
|
||||
image:
|
||||
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
|
||||
# pullPolicy: IfNotPresent or Never or Always
|
||||
pullPolicy: Always
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
|
||||
image:
|
||||
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
|
||||
# pullPolicy: IfNotPresent or Never or Always
|
||||
pullPolicy: Always
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
|
||||
image:
|
||||
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
|
||||
# pullPolicy: IfNotPresent or Never or Always
|
||||
pullPolicy: Always
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
|
||||
image:
|
||||
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
|
||||
# pullPolicy: IfNotPresent or Never or Always
|
||||
pullPolicy: Always
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
|
||||
image:
|
||||
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
|
||||
# pullPolicy: IfNotPresent or Never or Always
|
||||
pullPolicy: Always
|
||||
|
||||
@@ -1,12 +1,26 @@
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
kind: ClusterRoleBinding
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: Role
|
||||
metadata:
|
||||
name: {{ .Chart.Name }}-{{ .Values.global.namespace }}-rbac
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: cluster-admin
|
||||
name: {{ .Chart.Name }}-{{ .Release.Namespace }}-role
|
||||
rules:
|
||||
- apiGroups:
|
||||
- security.openshift.io
|
||||
resourceNames:
|
||||
- privileged
|
||||
resources:
|
||||
- securitycontextconstraints
|
||||
verbs:
|
||||
- use
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: RoleBinding
|
||||
metadata:
|
||||
name: {{ .Chart.Name }}-{{ .Release.Namespace }}-binding
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
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:
|
||||
serviceAccountName: oai-physim-sa
|
||||
namespace: "oaicicd-ran-tmp"
|
||||
namespace: "OAICICD_PROJECT"
|
||||
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
|
||||
|
||||
## Declaring values specific to coressponding physim to overwrite
|
||||
|
||||
@@ -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") {
|
||||
when { expression {doMandatoryTests} }
|
||||
steps {
|
||||
|
||||
@@ -26,6 +26,9 @@ def nodeExecutor = params.nodeExecutor
|
||||
// Name of the phone resource
|
||||
def ciServerResource = params.serverResource
|
||||
|
||||
// Docker Hub account to push to
|
||||
def DH_Account = "oaisoftwarealliance"
|
||||
|
||||
pipeline {
|
||||
agent {
|
||||
label nodeExecutor
|
||||
@@ -66,11 +69,11 @@ pipeline {
|
||||
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"
|
||||
listOfImages.eachWithIndex { item, iindex ->
|
||||
sh "docker image tag ${item}:develop ${DH_Username}/${item}:develop"
|
||||
sh "docker image tag ${item}:develop ${DH_Username}/${item}:${WEEK_TAG}"
|
||||
sh "docker push --quiet ${DH_Username}/${item}:${WEEK_TAG}"
|
||||
sh "docker push --quiet ${DH_Username}/${item}:develop"
|
||||
sh "docker rmi ${DH_Username}/${item}:${WEEK_TAG} ${DH_Username}/${item}:develop"
|
||||
sh "docker image tag ${item}:develop ${DH_Account}/${item}:develop"
|
||||
sh "docker image tag ${item}:develop ${DH_Account}/${item}:${WEEK_TAG}"
|
||||
sh "docker push --quiet ${DH_Account}/${item}:${WEEK_TAG}"
|
||||
sh "docker push --quiet ${DH_Account}/${item}:develop"
|
||||
sh "docker rmi ${DH_Account}/${item}:${WEEK_TAG} ${DH_Account}/${item}:develop"
|
||||
}
|
||||
sh "docker logout > /dev/null 2>&1"
|
||||
}
|
||||
|
||||
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
|
||||
ADBIPAddress : 192.168.18.196
|
||||
ADBIPAddress : 172.21.16.132
|
||||
ADBUserName : oaici
|
||||
ADBPassword : KkexF6CErOi1fNuebCPsuIVK
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ idefix:
|
||||
LogStore : /media/usb-drive/ci_qlogs
|
||||
PLMN : 22201
|
||||
UENetwork : wwan0
|
||||
HostIPAddress : 192.168.18.188
|
||||
HostIPAddress : 172.21.16.135
|
||||
HostUsername : oaicicd
|
||||
HostPassword : oaicicd
|
||||
HostSourceCodePath : none
|
||||
@@ -32,13 +32,61 @@ nrmodule2_quectel:
|
||||
LogStore : /media/ci_qlogs
|
||||
PLMN : 20897
|
||||
UENetwork : wwan0
|
||||
HostIPAddress : 192.168.18.189
|
||||
HostIPAddress : 172.21.16.139
|
||||
HostUsername : nrmodule2
|
||||
HostPassword : linux
|
||||
HostSourceCodePath : none
|
||||
StartCommands :
|
||||
- sudo -S ip link set dev wwan1 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 : 192.168.18.89
|
||||
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:
|
||||
ID: ''
|
||||
State : ''
|
||||
@@ -50,7 +98,7 @@ dummy:
|
||||
DetachScript : ''
|
||||
PLMN : 22201
|
||||
UENetwork : wwan0
|
||||
HostIPAddress : 192.168.18.188
|
||||
HostIPAddress : 172.21.16.135
|
||||
HostUsername : oaicicd
|
||||
HostPassword : oaicicd
|
||||
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()
|
||||
|
||||
|
||||
|
||||
+125
-48
@@ -93,6 +93,7 @@ class Containerize():
|
||||
self.allImagesSize = {}
|
||||
self.collectInfo = {}
|
||||
|
||||
self.deployedContainers = []
|
||||
self.tsharkStarted = False
|
||||
self.pingContName = ''
|
||||
self.pingOptions = ''
|
||||
@@ -242,7 +243,7 @@ class Containerize():
|
||||
# Build the base image only on Push Events (not on Merge Requests)
|
||||
# On when the base image docker file is being modified.
|
||||
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.
|
||||
status = True
|
||||
mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' ' + baseImage + ':' + baseTag, '\$', 5)
|
||||
@@ -682,12 +683,28 @@ class Containerize():
|
||||
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps -a'
|
||||
count = 0
|
||||
healthy = 0
|
||||
newContainers = []
|
||||
while (count < 10):
|
||||
count += 1
|
||||
containerStatus = []
|
||||
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||
healthy = 0
|
||||
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:
|
||||
healthy += 1
|
||||
if re.search('rfsim4g-db-init.*Exit 0', state) is not None:
|
||||
@@ -698,16 +715,33 @@ class Containerize():
|
||||
else:
|
||||
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 self.tsharkStarted == False:
|
||||
logging.debug('Starting tshark on public network')
|
||||
self.CaptureOnDockerNetworks()
|
||||
HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
HTML.CreateHtmlTestRowQueue('n/a', 'OK', 1, html_queue)
|
||||
for cState in containerStatus:
|
||||
logging.debug(cState)
|
||||
logging.info('\u001B[1m Deploying OAI Object(s) PASS\u001B[0m')
|
||||
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:
|
||||
logging.debug(cState)
|
||||
logging.error('\u001B[1m Deploying OAI Object(s) FAILED\u001B[0m')
|
||||
@@ -723,13 +757,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: @@"'
|
||||
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:
|
||||
# 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)"'
|
||||
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:
|
||||
return
|
||||
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 += ' -w /tmp/capture_'
|
||||
ymlPath = self.yamlPath[0].split('/')
|
||||
@@ -781,46 +821,48 @@ class Containerize():
|
||||
# Analyzing log file(s)!
|
||||
listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du']
|
||||
for container in listOfPossibleRanContainers:
|
||||
filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log'
|
||||
cmd = 'ls ' + filename
|
||||
filenames = self.yamlPath[0] + '/*-oai-' + container + '.log'
|
||||
cmd = 'ls ' + filenames
|
||||
containerStatus = True
|
||||
try:
|
||||
lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
||||
filename = str(lsStatus).strip()
|
||||
filenames = str(lsStatus).strip()
|
||||
except:
|
||||
containerStatus = False
|
||||
if not containerStatus:
|
||||
continue
|
||||
|
||||
logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m')
|
||||
logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
|
||||
if (logStatus < 0):
|
||||
fullStatus = False
|
||||
self.exitStatus = 1
|
||||
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
|
||||
else:
|
||||
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
||||
for filename in filenames.split('\n'):
|
||||
logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m')
|
||||
logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers)
|
||||
if (logStatus < 0):
|
||||
fullStatus = False
|
||||
self.exitStatus = 1
|
||||
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
|
||||
else:
|
||||
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
||||
|
||||
listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*']
|
||||
for container in listOfPossibleUeContainers:
|
||||
filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log'
|
||||
cmd = 'ls ' + filename
|
||||
filenames = self.yamlPath[0] + '/*-oai-' + container + '.log'
|
||||
cmd = 'ls ' + filenames
|
||||
containerStatus = True
|
||||
try:
|
||||
lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
|
||||
filename = str(lsStatus).strip()
|
||||
filenames = str(lsStatus).strip()
|
||||
except:
|
||||
containerStatus = False
|
||||
if not containerStatus:
|
||||
continue
|
||||
|
||||
logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
|
||||
logStatus = UE.AnalyzeLogFile_UE(filename, HTML, RAN)
|
||||
if (logStatus < 0):
|
||||
fullStatus = False
|
||||
HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus)
|
||||
else:
|
||||
HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
for filename in filenames.split('\n'):
|
||||
logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
|
||||
logStatus = UE.AnalyzeLogFile_UE(filename, HTML, RAN)
|
||||
if (logStatus < 0):
|
||||
fullStatus = False
|
||||
HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus)
|
||||
else:
|
||||
HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
|
||||
cmd = 'rm ' + self.yamlPath[0] + '/*.log'
|
||||
logging.debug(cmd)
|
||||
@@ -851,6 +893,7 @@ class Containerize():
|
||||
logging.error('\u001B[1m Undeploying OAI Object(s) FAILED\u001B[0m')
|
||||
return
|
||||
|
||||
self.deployedContainers = []
|
||||
# Cleaning any created tmp volume
|
||||
cmd = 'docker volume prune --force || true'
|
||||
logging.debug(cmd)
|
||||
@@ -863,6 +906,40 @@ class Containerize():
|
||||
HTML.CreateHtmlTestRow('n/a', 'KO', CONST.ALL_PROCESSES_OK)
|
||||
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):
|
||||
self.exitStatus = 0
|
||||
ymlPath = self.yamlPath[0].split('/')
|
||||
@@ -1069,19 +1146,19 @@ class Containerize():
|
||||
mySSH.open(ipAddr, userName, password)
|
||||
# Check if route to asterix gnb exists
|
||||
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:
|
||||
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
|
||||
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:
|
||||
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
|
||||
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:
|
||||
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
|
||||
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
|
||||
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
|
||||
@@ -1097,19 +1174,19 @@ class Containerize():
|
||||
mySSH.open(ipAddr, userName, password)
|
||||
# Check if route to porcepix epc exists
|
||||
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:
|
||||
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
|
||||
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:
|
||||
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
|
||||
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:
|
||||
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
|
||||
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
|
||||
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
|
||||
@@ -1125,19 +1202,19 @@ class Containerize():
|
||||
mySSH.open(ipAddr, userName, password)
|
||||
# Check if route to porcepix epc exists
|
||||
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:
|
||||
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
|
||||
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:
|
||||
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
|
||||
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:
|
||||
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
|
||||
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
|
||||
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
|
||||
@@ -1153,14 +1230,14 @@ class Containerize():
|
||||
mySSH.open(ipAddr, userName, password)
|
||||
# Check if route to porcepix epc exists
|
||||
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:
|
||||
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
|
||||
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:
|
||||
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
|
||||
mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10)
|
||||
result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore())
|
||||
|
||||
@@ -64,10 +64,10 @@ class Log_Mgt:
|
||||
if m is not None:
|
||||
return int(m.group(1))
|
||||
|
||||
def __RemoveOldest(self):
|
||||
def __RemoveOldest(self, days):
|
||||
mySSH = sshconnection.SSHConnection()
|
||||
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.close()
|
||||
|
||||
@@ -79,13 +79,18 @@ class Log_Mgt:
|
||||
|
||||
|
||||
def LogRotation(self):
|
||||
used_space = self.__CheckUsedSpace() #avail space in target folder
|
||||
if used_space > 80 :
|
||||
logging.debug('\u001B[1;37;41m Used Disk > 80%, on ' + self.Username+'@'+self.IPAddress + '\u001B[0m')
|
||||
logging.debug('\u001B[1;37;41m Removing Artifacts older than 14 days \u001B[0m')
|
||||
self.__RemoveOldest()
|
||||
else:
|
||||
logging.debug('Used Disk < 80%, on ' + self.Username+'@'+self.IPAddress +', no cleaning required')
|
||||
doLoop = True
|
||||
nbDays = 14
|
||||
while doLoop and nbDays > 1:
|
||||
used_space = self.__CheckUsedSpace() #avail space in target folder
|
||||
if used_space > 80 :
|
||||
logging.debug('\u001B[1;37;41m Used Disk (' + str(used_space) + '%) > 80%, on ' + self.Username+'@'+self.IPAddress + '\u001B[0m')
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -107,14 +107,15 @@ class Module_UE:
|
||||
def GetModuleIPAddress(self):
|
||||
HOST=self.HostUsername+'@'+self.HostIPAddress
|
||||
response= []
|
||||
tentative = 3
|
||||
tentative = 8
|
||||
while (len(response)==0) and (tentative>0):
|
||||
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)
|
||||
response = ssh.stdout.readlines()
|
||||
tentative-=1
|
||||
time.sleep(10)
|
||||
time.sleep(2)
|
||||
if (tentative==0) and (len(response)==0):
|
||||
logging.debug('\u001B[1;37;41m Module IP Address Not Found! Time expired \u001B[0m')
|
||||
return -1
|
||||
|
||||
+160
-83
@@ -55,6 +55,7 @@ import constants as CONST
|
||||
import sshconnection
|
||||
|
||||
import cls_module_ue
|
||||
import cls_amarisoft_ue
|
||||
import cls_ci_ueinfra #class defining the multi Ue infrastrucure
|
||||
|
||||
logging.getLogger("matplotlib").setLevel(logging.WARNING)
|
||||
@@ -419,49 +420,63 @@ class OaiCiTest():
|
||||
for job in multi_jobs:
|
||||
job.join()
|
||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
else: #if an ID is specified, it is a module from the yaml infrastructure file
|
||||
#RH
|
||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||
Module_UE.ue_trace=ue_trace
|
||||
is_module=Module_UE.CheckCMProcess(EPC.Type)
|
||||
if is_module:
|
||||
Module_UE.EnableTrace()
|
||||
time.sleep(5)
|
||||
else: #if an ID is specified, it is a UE from the yaml infrastructure file
|
||||
ue_kind = InfraUE.ci_ue_infra[self.ue_id]['Kind']
|
||||
logging.debug("Detected UE Kind : " + ue_kind)
|
||||
|
||||
# Looping attach / detach / wait to be successful at least once
|
||||
cnt = 0
|
||||
status = -1
|
||||
while cnt < 4:
|
||||
Module_UE.Command("wup")
|
||||
logging.debug("Waiting for IP address to be assigned")
|
||||
time.sleep(20)
|
||||
logging.debug("Retrieve IP address")
|
||||
status=Module_UE.GetModuleIPAddress()
|
||||
if status==0:
|
||||
cnt = 10
|
||||
else:
|
||||
cnt += 1
|
||||
Module_UE.Command("detach")
|
||||
time.sleep(20)
|
||||
#case it is a quectel module (only 1 at a time supported at the moment)
|
||||
if ue_kind == 'quectel':
|
||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||
Module_UE.ue_trace=ue_trace
|
||||
is_module=Module_UE.CheckCMProcess(EPC.Type)
|
||||
if is_module:
|
||||
Module_UE.EnableTrace()
|
||||
time.sleep(5)
|
||||
|
||||
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
|
||||
|
||||
# Looping attach / detach / wait to be successful at least once
|
||||
cnt = 0
|
||||
status = -1
|
||||
while cnt < 4:
|
||||
Module_UE.Command("wup")
|
||||
logging.debug("Waiting for IP address to be assigned")
|
||||
time.sleep(5)
|
||||
logging.debug("Retrieve IP address")
|
||||
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:
|
||||
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):
|
||||
@@ -1096,7 +1111,7 @@ class OaiCiTest():
|
||||
while cnt < 4:
|
||||
Module_UE.Command("wup")
|
||||
logging.debug("Waiting for IP address to be assigned")
|
||||
time.sleep(20)
|
||||
time.sleep(5)
|
||||
logging.debug("Retrieve IP address")
|
||||
status=Module_UE.GetModuleIPAddress()
|
||||
if status==0:
|
||||
@@ -1570,16 +1585,23 @@ class OaiCiTest():
|
||||
SSH = sshconnection.SSHConnection()
|
||||
# Launch ping on the EPC side (true for ltebox and old open-air-cn)
|
||||
# But for OAI-Rel14-CUPS, we launch from python executor
|
||||
ping_status = 0
|
||||
launchFromEpc = True
|
||||
launchFromModule = False
|
||||
launchFromASUE = False
|
||||
if re.match('OAI-Rel14-CUPS', EPC.Type, re.IGNORECASE):
|
||||
launchFromEpc = False
|
||||
#if module, ping from module to EPC
|
||||
if self.ue_id!='':
|
||||
launchFromEpc = False
|
||||
launchfromModule = True
|
||||
|
||||
ping_time = re.findall("-c (\d+)",str(self.ping_args))
|
||||
if (re.match('amarisoft', self.ue_id, re.IGNORECASE)):
|
||||
launchFromEpc = False
|
||||
launchFromASUE = True
|
||||
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:
|
||||
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password)
|
||||
@@ -1597,14 +1619,14 @@ class OaiCiTest():
|
||||
#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', '.')
|
||||
else:
|
||||
if launchfromModule == False:
|
||||
if (launchFromModule == False) and (launchFromASUE == False):
|
||||
#ping log file is on the python executor
|
||||
cmd = 'ping ' + self.ping_args + ' ' + UE_IPAddress + ' > ping_' + self.testCase_id + '_' + device_id + '.log 2>&1'
|
||||
message = cmd + '\n'
|
||||
logging.debug(cmd)
|
||||
ret = subprocess.run(cmd, shell=True)
|
||||
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')
|
||||
#copy the ping log file to have it locally for analysis (ping stats)
|
||||
logging.debug(EPC.SourceCodePath + 'ping_' + self.testCase_id + '_' + device_id + '.log')
|
||||
@@ -1614,7 +1636,8 @@ class OaiCiTest():
|
||||
#cat is executed on EPC
|
||||
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'
|
||||
else: #launch from Module
|
||||
|
||||
elif (launchFromModule == True) and (launchFromASUE == False): #launch from Module
|
||||
SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword)
|
||||
#target address is different depending on EPC type
|
||||
if re.match('OAI-Rel14-Docker', EPC.Type, re.IGNORECASE):
|
||||
@@ -1626,13 +1649,27 @@ class OaiCiTest():
|
||||
#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 + ' > ping_' + self.testCase_id + '_' + self.ue_id + '.log 2>&1'
|
||||
SSH.command(cmd,'\$',int(ping_time[0])*1.5)
|
||||
|
||||
#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', '.')
|
||||
|
||||
#cat is executed locally
|
||||
SSH.command('cat ping_' + self.testCase_id + '_' + self.ue_id + '.log', '\$', 5)
|
||||
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
|
||||
if ping_status < 0:
|
||||
@@ -1680,28 +1717,30 @@ class OaiCiTest():
|
||||
|
||||
#adding extra ping stats from local file
|
||||
#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=''
|
||||
if (ping_stat!=-1) and (len(ping_stat)!=0):
|
||||
ping_stat_msg+='Ping stats before removing largest value : \n'
|
||||
ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_0'])) + 'ms \n'
|
||||
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'
|
||||
ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_0'])) + 'ms \n'
|
||||
ping_stat_msg+='Max Index : ' + str(ping_stat['max_loc']) + '\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'
|
||||
if launchFromASUE == False : #skip in case of AS UE (for the moment)
|
||||
logging.debug('Analyzing Ping log file : ' + os.getcwd() + '/' + ping_log_file)
|
||||
ping_stat=GetPingTimeAnalysis(RAN,ping_log_file,self.ping_rttavg_threshold)
|
||||
|
||||
if (ping_stat!=-1) and (len(ping_stat)!=0):
|
||||
ping_stat_msg+='Ping stats before removing largest value : \n'
|
||||
ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_0'])) + 'ms \n'
|
||||
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'
|
||||
ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_0'])) + 'ms \n'
|
||||
ping_stat_msg+='Max Index : ' + str(ping_stat['max_loc']) + '\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
|
||||
qMsg = pal_msg + '\n' + min_msg + '\n' + avg_msg + '\n' + max_msg + '\n' + ping_stat_msg
|
||||
|
||||
#checking packet loss compliance
|
||||
packetLossOK = True
|
||||
if packetloss is not None:
|
||||
if (packetloss is not None) :
|
||||
if float(packetloss) > float(self.ping_packetloss_threshold):
|
||||
qMsg += '\nPacket Loss too high'
|
||||
logging.debug('\u001B[1;37;41m Packet Loss too high; Target: '+ self.ping_packetloss_threshold + '%\u001B[0m')
|
||||
@@ -1729,6 +1768,7 @@ class OaiCiTest():
|
||||
lock.release()
|
||||
SSH.close()
|
||||
except:
|
||||
logging.debug('exit from Ping_Common except')
|
||||
os.kill(os.getppid(),signal.SIGUSR1)
|
||||
|
||||
def PingNoS1_wrong_exit(self, qMsg,HTML):
|
||||
@@ -1856,11 +1896,21 @@ class OaiCiTest():
|
||||
HTML.CreateHtmlTestRow(self.ping_args, 'KO', CONST.UE_IP_ADDRESS_ISSUE)
|
||||
self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS)
|
||||
return
|
||||
else:
|
||||
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)
|
||||
else: #if an ID is specified, it is a UE from the yaml infrastructure file
|
||||
ue_kind = InfraUE.ci_ue_infra[self.ue_id]['Kind']
|
||||
logging.debug("Detected UE Kind : " + ue_kind)
|
||||
|
||||
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)
|
||||
multi_jobs = []
|
||||
i = 0
|
||||
@@ -1871,6 +1921,7 @@ class OaiCiTest():
|
||||
device_id = self.UEDevices[i]
|
||||
else:
|
||||
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.daemon = True
|
||||
p.start()
|
||||
@@ -3156,10 +3207,12 @@ class OaiCiTest():
|
||||
nrFoundDCI = 0
|
||||
nrCRCOK = 0
|
||||
mbms_messages = 0
|
||||
nbPduSessAccept = 0
|
||||
nbPduDiscard = 0
|
||||
HTML.htmlUEFailureMsg=''
|
||||
global_status = CONST.ALL_PROCESSES_OK
|
||||
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:
|
||||
nrUEFlag = True
|
||||
if nrUEFlag:
|
||||
@@ -3172,6 +3225,15 @@ class OaiCiTest():
|
||||
result = re.search('CRC OK', str(line))
|
||||
if result is not None:
|
||||
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))
|
||||
if result is not None:
|
||||
exitSignalReceived = True
|
||||
@@ -3302,21 +3364,29 @@ class OaiCiTest():
|
||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||
if nrUEFlag:
|
||||
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')
|
||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||
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')
|
||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||
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')
|
||||
HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n'
|
||||
if not frequency_found:
|
||||
statMsg = 'NR-UE could NOT synch!'
|
||||
logging.error('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
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:
|
||||
statMsg = 'UE showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
|
||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
@@ -3447,16 +3517,23 @@ class OaiCiTest():
|
||||
job.join()
|
||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
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])
|
||||
Module_UE.ue_trace=ue_trace
|
||||
Module_UE.Command("detach")
|
||||
Module_UE.DisableTrace()
|
||||
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)
|
||||
ue_kind = InfraUE.ci_ue_infra[self.ue_id]['Kind']
|
||||
logging.debug("Detected UE Kind : " + ue_kind)
|
||||
if ue_kind == 'quectel':
|
||||
Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
|
||||
Module_UE.ue_trace=ue_trace
|
||||
Module_UE.Command("detach")
|
||||
Module_UE.DisableTrace()
|
||||
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:
|
||||
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):
|
||||
SSH = sshconnection.SSHConnection()
|
||||
|
||||
@@ -32,7 +32,7 @@ import logging
|
||||
#to create a SSH object locally in the methods
|
||||
import sshconnection
|
||||
#to update the HTML object
|
||||
import html
|
||||
import cls_oai_html
|
||||
from multiprocessing import SimpleQueue
|
||||
#for log folder maintenance
|
||||
import os
|
||||
|
||||
+22
-10
@@ -33,7 +33,7 @@
|
||||
#-----------------------------------------------------------
|
||||
import logging
|
||||
import sshconnection as SSH
|
||||
import html
|
||||
import cls_oai_html
|
||||
import os
|
||||
import re
|
||||
import time
|
||||
@@ -153,6 +153,7 @@ class PhySim:
|
||||
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:
|
||||
logging.error(f'\u001B[1m Unable to access OC project {ocProjectName}\u001B[0m')
|
||||
mySSH.command('oc logout', '\$', 30)
|
||||
mySSH.close()
|
||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PROJECT_FAIL)
|
||||
RAN.prematureExit = True
|
||||
@@ -161,9 +162,10 @@ class PhySim:
|
||||
logging.debug(f'\u001B[1m Now using project {ocProjectName}\u001B[0m')
|
||||
|
||||
# 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:
|
||||
logging.error('\u001B[1m Podman Login to OC Cluster Registry Failed\u001B[0m')
|
||||
mySSH.command('oc logout', '\$', 30)
|
||||
mySSH.close()
|
||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL)
|
||||
RAN.prematureExit = True
|
||||
@@ -171,9 +173,11 @@ class PhySim:
|
||||
else:
|
||||
logging.debug('\u001B[1m Podman Login to OC Cluster Registry Successfully\u001B[0m')
|
||||
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:
|
||||
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()
|
||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_IS_FAIL)
|
||||
RAN.prematureExit = True
|
||||
@@ -181,11 +185,13 @@ class PhySim:
|
||||
else:
|
||||
logging.debug(f'\u001B[1m Image Stream "oai-physim" created on OC project {ocProjectName}\u001B[0m')
|
||||
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)
|
||||
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:
|
||||
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()
|
||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_IS_FAIL)
|
||||
RAN.prematureExit = True
|
||||
@@ -195,8 +201,9 @@ class PhySim:
|
||||
|
||||
# Using helm charts deployment
|
||||
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('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:
|
||||
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)
|
||||
@@ -206,8 +213,10 @@ class PhySim:
|
||||
mySSH.command('oc get pods -l app.kubernetes.io/instance=physim', '\$', 6, resync=True)
|
||||
if re.search('No resources found', mySSH.getBefore()):
|
||||
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('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6)
|
||||
mySSH.command('oc logout', '\$', 30)
|
||||
mySSH.close()
|
||||
self.AnalyzeLogFile_phySim(HTML)
|
||||
RAN.prematureExit = True
|
||||
@@ -227,7 +236,7 @@ class PhySim:
|
||||
if isRunning == False:
|
||||
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('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)
|
||||
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)
|
||||
if re.search('No resources found', mySSH.getBefore()):
|
||||
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('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.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult)
|
||||
RAN.prematureExit = True
|
||||
@@ -293,9 +304,10 @@ class PhySim:
|
||||
isFinished1 = True
|
||||
if isFinished1 == True:
|
||||
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)
|
||||
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.close()
|
||||
self.AnalyzeLogFile_phySim(HTML)
|
||||
|
||||
@@ -237,7 +237,7 @@ RUs = (
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
eNB_instances = [0];
|
||||
sdr_addrs = "mgmt_addr=192.168.18.241,addr=192.168.20.2,second_addr=192.168.10.2";
|
||||
sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.20.2,second_addr=192.168.10.2";
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
@@ -237,7 +237,7 @@ RUs = (
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
eNB_instances = [0];
|
||||
sdr_addrs = "mgmt_addr=192.168.18.241,addr=192.168.20.2,second_addr=192.168.10.2";
|
||||
sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.20.2,second_addr=192.168.10.2";
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
@@ -231,13 +231,13 @@ RUs = (
|
||||
local_rf = "yes"
|
||||
nb_tx = 2
|
||||
nb_rx = 2
|
||||
att_tx = 0
|
||||
att_tx = 10
|
||||
att_rx = 5;
|
||||
bands = [38];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
eNB_instances = [0];
|
||||
sdr_addrs = "mgmt_addr=192.168.18.241,addr=192.168.20.2,second_addr=192.168.10.2";
|
||||
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:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
ul_prbblacklist = "51,52,53,54"
|
||||
min_rxtxtime = 6;
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
@@ -73,15 +70,6 @@ gNBs =
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
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
|
||||
#frequencyInfoUL
|
||||
@@ -136,19 +124,6 @@ gNBs =
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
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;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
@@ -264,7 +239,7 @@ RUs = (
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
#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:
|
||||
|
||||
ssb_SubcarrierOffset = 31; //0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
|
||||
min_rxtxtime = 6;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
controlResourceSetZero = 12;
|
||||
searchSpaceZero = 0;
|
||||
}
|
||||
);
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
@@ -54,15 +59,6 @@ gNBs =
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 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
|
||||
#frequencyInfoUL
|
||||
@@ -117,18 +113,6 @@ gNBs =
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
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;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
@@ -33,9 +33,6 @@ gNBs =
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
ul_prbblacklist = "51,52,53,54"
|
||||
min_rxtxtime = 6;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
@@ -74,15 +71,6 @@ gNBs =
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
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
|
||||
#frequencyInfoUL
|
||||
@@ -137,19 +125,6 @@ gNBs =
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
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;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
@@ -265,7 +240,7 @@ RUs = (
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
#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:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
@@ -53,29 +53,6 @@ gNBs =
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
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
|
||||
#frequencyInfoUL
|
||||
@@ -130,22 +107,6 @@ gNBs =
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
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;
|
||||
p0_NominalWithGrant =-90;
|
||||
|
||||
|
||||
@@ -45,10 +45,7 @@ gNBs =
|
||||
remote_s_portc = 500;
|
||||
remote_s_portd = 2152;
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
min_rxtxtime = 6;
|
||||
sib1_tda = 0;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
|
||||
@@ -38,7 +38,6 @@ gNBs =
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
min_rxtxtime = 6;
|
||||
sib1_tda = 0;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
|
||||
@@ -209,9 +209,9 @@ gNBs =
|
||||
{
|
||||
|
||||
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_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
|
||||
};
|
||||
|
||||
@@ -258,7 +258,7 @@ RUs = (
|
||||
## beamforming 4x4 matrix:
|
||||
#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"
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -206,9 +206,9 @@ gNBs =
|
||||
{
|
||||
|
||||
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_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
|
||||
};
|
||||
|
||||
@@ -254,7 +254,7 @@ RUs = (
|
||||
## beamforming 4x4 matrix:
|
||||
#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"
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -199,12 +199,12 @@ gNBs =
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
ulsch_max_frame_inactivity = 1;
|
||||
}
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
@@ -213,6 +213,7 @@ L1s = (
|
||||
tr_n_preference = "local_mac";
|
||||
thread_pool_size = 8;
|
||||
prach_dtx_threshold = 120;
|
||||
pucch0_dtx_threshold = 80;
|
||||
}
|
||||
);
|
||||
|
||||
@@ -230,7 +231,7 @@ RUs = (
|
||||
bf_weights = [0x00007fff, 0x00007fff];
|
||||
#clock_src = "external";
|
||||
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"
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -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";
|
||||
};
|
||||
@@ -261,7 +261,7 @@ RUs = (
|
||||
## 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=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"
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -263,7 +263,7 @@ RUs = (
|
||||
## 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=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"
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -262,7 +262,7 @@ RUs = (
|
||||
## 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=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"
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 1;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
|
||||
@@ -221,11 +221,11 @@ RUs = (
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 3
|
||||
att_rx = 0;
|
||||
att_tx = 12
|
||||
att_rx = 12;
|
||||
bands = [7];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 111;
|
||||
max_rxgain = 114;
|
||||
eNB_instances = [0];
|
||||
# sdr_addrs = "serial=30C51D4";
|
||||
# clock_src = "external";
|
||||
|
||||
@@ -33,10 +33,7 @@ gNBs =
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
min_rxtxtime = 6;
|
||||
sib1_tda = 0;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
|
||||
+6
-4
@@ -66,6 +66,8 @@ class EPCManagement():
|
||||
self.mmeConfFile = 'mme.conf'
|
||||
self.yamlPath = ''
|
||||
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,8 +253,8 @@ class EPCManagement():
|
||||
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('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5)
|
||||
mySSH.command('cd /opt/oai-cn5g-fed/docker-compose', '\$', 5)
|
||||
mySSH.command('./core-network.sh start nrf spgwu', '\$', 60)
|
||||
mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5)
|
||||
mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60)
|
||||
time.sleep(2)
|
||||
mySSH.command('docker-compose -p 5gcn ps -a', '\$', 60)
|
||||
if mySSH.getBefore().count('Up (healthy)') != 6:
|
||||
@@ -530,8 +532,8 @@ class EPCManagement():
|
||||
mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5)
|
||||
|
||||
logging.debug('Terminating OAI CN5G')
|
||||
mySSH.command('cd /opt/oai-cn5g-fed/docker-compose', '\$', 5)
|
||||
mySSH.command('./core-network.sh stop nrf spgwu', '\$', 60)
|
||||
mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5)
|
||||
mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60)
|
||||
mySSH.command('docker volume prune --force || true', '\$', 60)
|
||||
time.sleep(2)
|
||||
mySSH.command('tshark -r /tmp/oai-cn5g.pcap | egrep --colour=never "Tracking area update" ','\$', 30)
|
||||
|
||||
+22
-10
@@ -49,7 +49,7 @@ import cls_physim1 #class PhySim for physical simulators deploy and run
|
||||
import sshconnection
|
||||
import epc
|
||||
import ran
|
||||
import html
|
||||
import cls_oai_html
|
||||
|
||||
|
||||
#-----------------------------------------------------------
|
||||
@@ -376,6 +376,16 @@ def GetParametersFromXML(action):
|
||||
if (string_field is not None):
|
||||
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':
|
||||
eNB_instance=test.findtext('eNB_instance')
|
||||
if (eNB_instance is None):
|
||||
@@ -391,7 +401,7 @@ def GetParametersFromXML(action):
|
||||
if (string_field is not None):
|
||||
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')
|
||||
if (string_field is not None):
|
||||
CONTAINERS.yamlPath[0] = string_field
|
||||
@@ -508,7 +518,7 @@ CiTestObj = cls_oaicitest.OaiCiTest()
|
||||
SSH = sshconnection.SSHConnection()
|
||||
EPC = epc.EPCManagement()
|
||||
RAN = ran.RANManagement()
|
||||
HTML = html.HTMLManagement()
|
||||
HTML = cls_oai_html.HTMLManagement()
|
||||
CONTAINERS = cls_containerize.Containerize()
|
||||
SCA = cls_static_code_analysis.StaticCodeAnalysis()
|
||||
PHYSIM = cls_physim1.PhySim()
|
||||
@@ -769,19 +779,19 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
||||
HTML.CreateHtmlTabHeader()
|
||||
|
||||
# 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)
|
||||
if CONTAINERS.eNBIPAddress == '192.168.18.194':
|
||||
if CONTAINERS.eNBIPAddress == '172.21.16.127':
|
||||
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)
|
||||
if CONTAINERS.eNBIPAddress == '192.168.18.193':
|
||||
if CONTAINERS.eNBIPAddress == '172.21.16.128':
|
||||
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)
|
||||
if CONTAINERS.eNBIPAddress == '192.168.18.209':
|
||||
if CONTAINERS.eNBIPAddress == '172.21.16.137':
|
||||
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)
|
||||
|
||||
CiTestObj.FailReportCnt = 0
|
||||
@@ -931,6 +941,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
||||
CONTAINERS.IperfFromContainer(HTML, RAN)
|
||||
if CONTAINERS.exitStatus==1:
|
||||
RAN.prematureExit = True
|
||||
elif action == 'StatsFromGenObject':
|
||||
CONTAINERS.StatsFromGenObject(HTML)
|
||||
else:
|
||||
sys.exit('Invalid class (action) from xml')
|
||||
if RAN.prematureExit:
|
||||
|
||||
@@ -5,15 +5,15 @@ import subprocess
|
||||
import sys
|
||||
|
||||
AUTH_SERVICE = 'registry.docker.io'
|
||||
AUTH_SCOPE = 'repository:rdefosseoai/oai-enb:pull'
|
||||
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 + '" | jq --raw-output ".token"'
|
||||
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/rdefosseoai/oai-enb/tags/list" | jq .'
|
||||
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
|
||||
|
||||
+32
-9
@@ -677,13 +677,13 @@ class RANManagement():
|
||||
# if T tracer was run with option 0 (no logs), analyze logs
|
||||
# from textlog, otherwise do normal analysis (e.g., option 2)
|
||||
result = re.search('T_stdout 0', str(self.Initialize_eNB_args))
|
||||
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):
|
||||
logging.debug('\u001B[1m Replaying RAW record file\u001B[0m')
|
||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||
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_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)
|
||||
@@ -706,8 +706,6 @@ class RANManagement():
|
||||
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/*.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, '.')
|
||||
if (copyin_res == -1):
|
||||
@@ -723,9 +721,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, './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.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,'./'+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, './gnb_stats_monitor.png', 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)
|
||||
@@ -826,6 +822,8 @@ class RANManagement():
|
||||
RealTimeProcessingIssue = False
|
||||
DLRetxIssue = False
|
||||
ULRetxIssue = False
|
||||
nrRrcRcfgComplete = 0
|
||||
harqFeedbackPast = 0
|
||||
|
||||
line_cnt=0 #log file line counter
|
||||
for line in enb_log_file.readlines():
|
||||
@@ -999,8 +997,25 @@ class RANManagement():
|
||||
for k in keys:
|
||||
result = re.search(k, line)
|
||||
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
|
||||
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
|
||||
@@ -1089,6 +1104,14 @@ class RANManagement():
|
||||
statMsg = nodeB_prefix + 'NB ran with TX Write thread enabled'
|
||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||
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
|
||||
if NSA_RAPROC_PUSCH_check:
|
||||
statMsg = '[RAPROC] PUSCH with TC_RNTI message check for ' + nodeB_prefix + 'NB : PASS '
|
||||
|
||||
@@ -1899,7 +1899,7 @@ function run_test_on_vm {
|
||||
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
|
||||
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
|
||||
echo "Problem w/ gNB and NR-UE not syncing"
|
||||
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
|
||||
fi
|
||||
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
|
||||
|
||||
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
|
||||
#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
|
||||
if [ $NR_UE_SYNC -eq 0 ]
|
||||
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||
then
|
||||
echo "Problem w/ gNB and NR-UE not syncing"
|
||||
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
|
||||
fi
|
||||
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
|
||||
|
||||
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
|
||||
#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
|
||||
if [ $NR_UE_SYNC -eq 0 ]
|
||||
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||
then
|
||||
echo "Problem w/ gNB and NR-UE not syncing"
|
||||
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))
|
||||
fi
|
||||
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
|
||||
|
||||
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
|
||||
#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
|
||||
if [ $NR_UE_SYNC -eq 0 ]
|
||||
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||
then
|
||||
echo "Problem w/ gNB and NR-UE not syncing"
|
||||
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))
|
||||
fi
|
||||
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
|
||||
########### end RA test
|
||||
|
||||
@@ -2253,7 +2278,7 @@ function run_test_on_vm {
|
||||
echo "############################################################"
|
||||
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
|
||||
if [ $NR_UE_SYNC -eq 0 ]
|
||||
if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ]
|
||||
then
|
||||
echo "Problem w/ gNB and NR-UE not syncing"
|
||||
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))
|
||||
fi
|
||||
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
|
||||
######### end of loop
|
||||
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 [ $RA_FR2_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 [ $IPERF_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||
if [ $NR_STATUS -eq 0 ]
|
||||
|
||||
@@ -56,6 +56,7 @@ class SSHConnection():
|
||||
self.picocom_closure = True
|
||||
|
||||
def open(self, ipaddress, username, password):
|
||||
prompt = "#" if username == "root" else "\$"
|
||||
count = 0
|
||||
connect_status = False
|
||||
while count < 4:
|
||||
@@ -68,7 +69,7 @@ class SSHConnection():
|
||||
self.sshresponse = self.ssh.expect(['password:', username + '@'])
|
||||
if self.sshresponse == 0:
|
||||
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:
|
||||
count = 10
|
||||
connect_status = True
|
||||
@@ -76,7 +77,7 @@ class SSHConnection():
|
||||
logging.debug('self.sshresponse = ' + str(self.sshresponse))
|
||||
elif self.sshresponse == 1:
|
||||
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:
|
||||
count = 10
|
||||
connect_status = True
|
||||
@@ -84,7 +85,7 @@ class SSHConnection():
|
||||
logging.debug('self.sshresponse = ' + str(self.sshresponse))
|
||||
elif self.sshresponse == 2:
|
||||
# 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))
|
||||
if result is None:
|
||||
self.close()
|
||||
@@ -100,7 +101,7 @@ class SSHConnection():
|
||||
time.sleep(1)
|
||||
count += 1
|
||||
if connect_status:
|
||||
self.command('unset HISTFILE', '\$', 5, silent=True)
|
||||
self.command('unset HISTFILE', prompt, 5, silent=True)
|
||||
else:
|
||||
sys.exit('SSH Connection Failed')
|
||||
self.ipaddress = ipaddress
|
||||
|
||||
@@ -46,3 +46,4 @@
|
||||
- UndeployGenObject
|
||||
- PingFromContainer
|
||||
- IperfFromContainer
|
||||
- StatsFromGenObject
|
||||
|
||||
@@ -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
|
||||
000002
|
||||
000003
|
||||
000004
|
||||
020001
|
||||
020002
|
||||
020003
|
||||
020004
|
||||
030001
|
||||
030002
|
||||
100001
|
||||
@@ -71,6 +74,14 @@
|
||||
<nb_healthy>8</nb_healthy>
|
||||
</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">
|
||||
<class>PingFromContainer</class>
|
||||
<desc>Ping ext-dn from NR-UE</desc>
|
||||
@@ -87,6 +98,22 @@
|
||||
<loss_threshold>5</loss_threshold>
|
||||
</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">
|
||||
<class>IperfFromContainer</class>
|
||||
<desc>Iperf UDP Downlink</desc>
|
||||
|
||||
@@ -138,19 +138,19 @@
|
||||
|
||||
<testCase id="070000">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/40Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 40M -t 60 -i 1 -fm</iperf_args>
|
||||
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 125M -t 60 -i 1 -fm</iperf_args>
|
||||
<direction>DL</direction>
|
||||
<id>idefix</id>
|
||||
<iperf_packetloss_threshold>20</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>85</iperf_bitrate_threshold>
|
||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="070001">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 3M -t 60 -i 1 -fm</iperf_args>
|
||||
<desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 8M -t 60 -i 1 -fm</iperf_args>
|
||||
<direction>UL</direction>
|
||||
<id>idefix</id>
|
||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
<air_interface>lte</air_interface>
|
||||
<eNB_Trace>yes</eNB_Trace>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<USRP_IPAddress>192.168.18.241</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.13</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
<air_interface>nr</air_interface>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||
<USRP_IPAddress>192.168.18.252</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
@@ -115,11 +115,12 @@
|
||||
|
||||
<testCase id="070000">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 60M -t 60</iperf_args>
|
||||
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 125M -t 60</iperf_args>
|
||||
<direction>DL</direction>
|
||||
<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>
|
||||
</testCase>
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
<air_interface>lte</air_interface>
|
||||
<eNB_Trace>yes</eNB_Trace>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<USRP_IPAddress>192.168.18.241</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.13</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
<air_interface>nr</air_interface>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||
<USRP_IPAddress>192.168.18.252</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
<testCase id="040000">
|
||||
<class>Initialize_eNB</class>
|
||||
<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_serverId>1</eNB_serverId>
|
||||
<air_interface>nr</air_interface>
|
||||
@@ -117,37 +117,37 @@
|
||||
<iperf_args>-u -b 30M -t 30</iperf_args>
|
||||
<direction>DL</direction>
|
||||
<id>idefix</id>
|
||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="070001">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/40Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 40M -t 30</iperf_args>
|
||||
<desc>iperf (DL/90Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 90M -t 30</iperf_args>
|
||||
<direction>DL</direction>
|
||||
<id>idefix</id>
|
||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||
<iperf_packetloss_threshold>1</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>
|
||||
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 125M -t 60</iperf_args>
|
||||
<direction>DL</direction>
|
||||
<id>idefix</id>
|
||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
||||
<iperf_packetloss_threshold>1</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>
|
||||
<desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 8M -t 60</iperf_args>
|
||||
<direction>UL</direction>
|
||||
<id>idefix</id>
|
||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||
|
||||
@@ -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>
|
||||
<eNB_Trace>yes</eNB_Trace>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<USRP_IPAddress>192.168.18.252</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
<class>Initialize_OAI_UE</class>
|
||||
<desc>Initialize OAI UE (N310)</desc>
|
||||
<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 id="010002">
|
||||
@@ -60,7 +60,7 @@
|
||||
<air_interface>nr</air_interface>
|
||||
<eNB_Trace>yes</eNB_Trace>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<USRP_IPAddress>192.168.18.252</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
<air_interface>nr</air_interface>
|
||||
<eNB_Trace>yes</eNB_Trace>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<USRP_IPAddress>192.168.18.252</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<eNB_Trace>yes</eNB_Trace>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||
<USRP_IPAddress>192.168.18.252</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
<eNB_Trace>yes</eNB_Trace>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||
<USRP_IPAddress>192.168.18.252</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
<eNB_Trace>yes</eNB_Trace>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||
<USRP_IPAddress>192.168.18.252</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
<eNB_Trace>yes</eNB_Trace>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
||||
<USRP_IPAddress>192.168.18.252</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<air_interface>lte</air_interface>
|
||||
<eNB_Trace>yes</eNB_Trace>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<USRP_IPAddress>192.168.18.241</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.13</USRP_IPAddress>
|
||||
</testCase>
|
||||
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<air_interface>lte</air_interface>
|
||||
<eNB_Trace>yes</eNB_Trace>
|
||||
<eNB_Stats>yes</eNB_Stats>
|
||||
<USRP_IPAddress>192.168.18.241</USRP_IPAddress>
|
||||
<USRP_IPAddress>172.21.19.13</USRP_IPAddress>
|
||||
</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 #
|
||||
|
||||
Currently the images are hosted under the user account `rdefosseoai`.
|
||||
|
||||
This may change in the future.
|
||||
Currently the images are hosted under the team account `oaisoftwarealliance`. They were previously hosted under the user account `rdefosseoai`.
|
||||
|
||||
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
|
||||
$ docker pull cassandra:2.1
|
||||
$ docker pull redis:6.0.5
|
||||
$ docker pull rdefosseoai/oai-hss:latest
|
||||
$ docker pull rdefosseoai/magma-mme:latest
|
||||
$ docker pull rdefosseoai/oai-spgwc:latest
|
||||
$ docker pull rdefosseoai/oai-spgwu-tiny:latest
|
||||
$ docker pull oaisoftwarealliance/oai-hss:latest
|
||||
$ docker pull oaisoftwarealliance/magma-mme:latest
|
||||
$ docker pull oaisoftwarealliance/oai-spgwc:latest
|
||||
$ docker pull oaisoftwarealliance/oai-spgwu-tiny:latest
|
||||
|
||||
$ docker pull rdefosseoai/oai-enb:develop
|
||||
$ docker pull rdefosseoai/oai-lte-ue:develop
|
||||
$ docker pull oaisoftwarealliance/oai-enb: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).
|
||||
@@ -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.
|
||||
|
||||
```bash
|
||||
$ docker image tag rdefosseoai/oai-spgwc:latest oai-spgwc:latest
|
||||
$ docker image tag rdefosseoai/oai-hss:latest oai-hss:latest
|
||||
$ docker image tag rdefosseoai/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
|
||||
$ docker image tag rdefosseoai/magma-mme:latest magma-mme:latest
|
||||
$ docker image tag oaisoftwarealliance/oai-spgwc:latest oai-spgwc:latest
|
||||
$ docker image tag oaisoftwarealliance/oai-hss:latest oai-hss:latest
|
||||
$ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
|
||||
$ docker image tag oaisoftwarealliance/magma-mme:latest magma-mme:latest
|
||||
|
||||
$ docker image tag rdefosseoai/oai-enb:develop oai-enb:develop
|
||||
$ docker image tag rdefosseoai/oai-lte-ue:develop oai-lte-ue:develop
|
||||
$ docker image tag oaisoftwarealliance/oai-enb:develop oai-enb:develop
|
||||
$ docker image tag oaisoftwarealliance/oai-lte-ue:develop oai-lte-ue:develop
|
||||
```
|
||||
|
||||
```bash
|
||||
@@ -505,7 +503,7 @@ In my traffic test, I was able to ping outside of my local network.
|
||||
in SPGW-C config:
|
||||
|
||||
```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
|
||||
PUSH_PROTOCOL_OPTION: 'true'
|
||||
```
|
||||
|
||||
@@ -115,7 +115,7 @@ services:
|
||||
TZ: Europe/Paris
|
||||
SGW_INTERFACE_NAME_FOR_S11: eth0
|
||||
PGW_INTERFACE_NAME_FOR_SX: eth0
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100
|
||||
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||
PUSH_PROTOCOL_OPTION: 'true'
|
||||
APN_NI_1: oai.ipv4
|
||||
|
||||
@@ -115,7 +115,7 @@ services:
|
||||
TZ: Europe/Paris
|
||||
SGW_INTERFACE_NAME_FOR_S11: eth0
|
||||
PGW_INTERFACE_NAME_FOR_SX: eth0
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100
|
||||
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||
PUSH_PROTOCOL_OPTION: 'true'
|
||||
APN_NI_1: oai.ipv4
|
||||
|
||||
@@ -115,7 +115,7 @@ services:
|
||||
TZ: Europe/Paris
|
||||
SGW_INTERFACE_NAME_FOR_S11: eth0
|
||||
PGW_INTERFACE_NAME_FOR_SX: eth0
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100
|
||||
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||
PUSH_PROTOCOL_OPTION: 'true'
|
||||
APN_NI_1: oai.ipv4
|
||||
|
||||
@@ -115,7 +115,7 @@ services:
|
||||
TZ: Europe/Paris
|
||||
SGW_INTERFACE_NAME_FOR_S11: eth0
|
||||
PGW_INTERFACE_NAME_FOR_SX: eth0
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100
|
||||
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||
PUSH_PROTOCOL_OPTION: 'true'
|
||||
APN_NI_1: oai.ipv4
|
||||
|
||||
@@ -120,7 +120,7 @@ services:
|
||||
- SMF_INTERFACE_PORT_FOR_SBI=80
|
||||
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
|
||||
- SMF_API_VERSION=v1
|
||||
- DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129
|
||||
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
|
||||
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
|
||||
- AMF_IPV4_ADDRESS=0.0.0.0
|
||||
- AMF_PORT=80
|
||||
|
||||
@@ -120,7 +120,7 @@ services:
|
||||
- SMF_INTERFACE_PORT_FOR_SBI=80
|
||||
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
|
||||
- SMF_API_VERSION=v1
|
||||
- DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129
|
||||
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
|
||||
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
|
||||
- AMF_IPV4_ADDRESS=0.0.0.0
|
||||
- AMF_PORT=80
|
||||
|
||||
@@ -0,0 +1,353 @@
|
||||
<table style="border-collapse: collapse; border: none;">
|
||||
<tr style="border-collapse: collapse; border: none;">
|
||||
<td style="border-collapse: collapse; border: none;">
|
||||
<a href="http://www.openairinterface.org/">
|
||||
<img src="../../../doc/images/oai_final_logo.png" alt="" border=3 height=50 width=150>
|
||||
</img>
|
||||
</a>
|
||||
</td>
|
||||
<td style="border-collapse: collapse; border: none; vertical-align: center;">
|
||||
<b><font size = "5">OAI Full Stack 5G-NR L2 simulation with containers and a proxy</font></b>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
This page is only valid for an `Ubuntu18` host.
|
||||
|
||||
This tutorial is only valid once this file is merged into the `develop` branch.
|
||||
|
||||
# 1. Retrieving the images on Docker-Hub #
|
||||
|
||||
Currently the images are hosted under the team account `oaisoftwarealliance`. They were previously hosted under the user account `rdefosseoai`.
|
||||
|
||||
Once again you may need to log on [docker-hub](https://hub.docker.com/) if your organization has reached pulling limit as `anonymous`.
|
||||
|
||||
```bash
|
||||
$ docker login
|
||||
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
|
||||
Username:
|
||||
Password:
|
||||
```
|
||||
|
||||
Now pull images.
|
||||
|
||||
```bash
|
||||
$ docker pull mysql:5.7
|
||||
$ docker pull oaisoftwarealliance/oai-amf:latest
|
||||
$ docker pull oaisoftwarealliance/oai-nrf:latest
|
||||
$ docker pull oaisoftwarealliance/oai-smf:latest
|
||||
$ docker pull oaisoftwarealliance/oai-spgwu-tiny:latest
|
||||
|
||||
$ docker pull oaisoftwarealliance/oai-gnb:develop
|
||||
$ docker pull oaisoftwarealliance/oai-nr-ue:develop
|
||||
$ docker pull oaisoftwarealliance/proxy:latest
|
||||
```
|
||||
|
||||
And **re-tag** them for tutorials' docker-compose file to work.
|
||||
|
||||
```bash
|
||||
$ docker image tag oaisoftwarealliance/oai-amf:latest oai-amf:latest
|
||||
$ docker image tag oaisoftwarealliance/oai-nrf:latest oai-nrf:latest
|
||||
$ docker image tag oaisoftwarealliance/oai-smf:latest oai-smf:latest
|
||||
$ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
|
||||
|
||||
$ docker image tag oaisoftwarealliance/oai-gnb:develop oai-gnb:develop
|
||||
$ docker image tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue:develop
|
||||
$ docker image tag oaisoftwarealliance/proxy:latest oai-lte-multi-ue-proxy:latest
|
||||
```
|
||||
|
||||
```bash
|
||||
$ docker logout
|
||||
```
|
||||
|
||||
Note that the proxy image is based on the source available at [https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy](https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy).
|
||||
|
||||
At time of writing, the `latest` tag corresponded to `56cfdc046a5f96d5e67d42a2fc2bf6ba2fe58b41` commit.
|
||||
|
||||
# 2. Deploy containers #
|
||||
|
||||
**CAUTION: this SHALL be done in multiple steps.**
|
||||
|
||||
**Just `docker-compose up -d` WILL NOT WORK!**
|
||||
|
||||
All the following commands **SHALL** be run from the `ci-scripts/yaml_files/5g_l2sim_tdd` folder.
|
||||
|
||||
The `gNB`, `proxy` and `NR-UE` containers will be deployed in `host`-mode. It will use the host loopback interface to connect.
|
||||
|
||||
```bash
|
||||
sudo ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up
|
||||
```
|
||||
|
||||
## 2.1. Deploy OAI 5G Core Network ##
|
||||
|
||||
```bash
|
||||
$ cd ci-scripts/yaml_files/5g_l2sim_tdd
|
||||
$ docker-compose up -d mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn
|
||||
Creating network "l2sim-oai-public-net" with driver "bridge"
|
||||
Creating network "l2sim-oai-traffic_net-net" with driver "bridge"
|
||||
Creating l2sim-oai-nrf ... done
|
||||
Creating l2sim-mysql ... done
|
||||
Creating l2sim-oai-spgwu ... done
|
||||
Creating l2sim-oai-amf ... done
|
||||
Creating l2sim-oai-smf ... done
|
||||
Creating l2sim-oai-ext-dn ... done
|
||||
```
|
||||
|
||||
Wait for a bit.
|
||||
|
||||
```bash
|
||||
$ docker-compose ps -a
|
||||
Name Command State Ports
|
||||
-------------------------------------------------------------------------------------------------
|
||||
l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
|
||||
l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp
|
||||
l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy)
|
||||
l2sim-oai-nrf /bin/bash /openair-nrf/bin ... Up (healthy) 80/tcp, 9090/tcp
|
||||
l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp
|
||||
l2sim-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
|
||||
```
|
||||
|
||||
At this point, you can prepare a capture on the newly-created public docker bridges:
|
||||
|
||||
```bash
|
||||
$ ifconfig
|
||||
...
|
||||
l2sim-public: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
|
||||
inet 192.168.71.129 netmask 255.255.255.192 broadcast 192.168.71.191
|
||||
inet6 fe80::42:c4ff:fe2b:3d38 prefixlen 64 scopeid 0x20<link>
|
||||
ether 02:42:c4:2b:3d:38 txqueuelen 0 (Ethernet)
|
||||
RX packets 4 bytes 112 (112.0 B)
|
||||
RX errors 0 dropped 0 overruns 0 frame 0
|
||||
TX packets 7 bytes 626 (626.0 B)
|
||||
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
||||
|
||||
l2sim-traffic: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
|
||||
inet 192.168.72.129 netmask 255.255.255.192 broadcast 192.168.72.191
|
||||
inet6 fe80::42:b5ff:fed3:e732 prefixlen 64 scopeid 0x20<link>
|
||||
ether 02:42:b5:d3:e7:32 txqueuelen 0 (Ethernet)
|
||||
RX packets 2652 bytes 142335 (142.3 KB)
|
||||
RX errors 0 dropped 0 overruns 0 frame 0
|
||||
TX packets 3999 bytes 23367972 (23.3 MB)
|
||||
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
||||
...
|
||||
|
||||
$ 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)" -i l2sim-public -i l2sim-traffic -w /tmp/capture_5g_l2sim_tdd.pcap > /tmp/tshark.log 2>&1 &
|
||||
```
|
||||
|
||||
## 2.2. Deploy OAI gNB in Standalone Mode as a VNF ##
|
||||
|
||||
**CAUTION: To execute this 2nd step, the whole `CN5G` SHALL be in `healthy` state (especially the `mysql` container).**
|
||||
|
||||
```bash
|
||||
$ docker-compose up -d oai-gnb
|
||||
l2sim-oai-nrf is up-to-date
|
||||
l2sim-oai-spgwu is up-to-date
|
||||
l2sim-oai-ext-dn is up-to-date
|
||||
Creating l2sim-oai-gnb ... done
|
||||
```
|
||||
|
||||
Wait for a bit.
|
||||
|
||||
```bash
|
||||
$ docker-compose ps -a
|
||||
Name Command State Ports
|
||||
-------------------------------------------------------------------------------------------------
|
||||
l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
|
||||
l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp
|
||||
l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy)
|
||||
l2sim-oai-gnb /opt/oai-gnb/bin/entrypoin ... Up (healthy)
|
||||
l2sim-oai-nrf /bin/bash /openair-nrf/bin ... Up (healthy) 80/tcp, 9090/tcp
|
||||
l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp
|
||||
l2sim-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
|
||||
```
|
||||
|
||||
You can verify that the `gNB` is connected with the `AMF`:
|
||||
|
||||
```bagh
|
||||
$ docker logs rfsim5g-oai-amf
|
||||
...
|
||||
[AMF] [amf_app] [info ] |----------------------------------------------------gNBs' information-------------------------------------------|
|
||||
[AMF] [amf_app] [info ] | Index | Status | Global ID | gNB Name | PLMN |
|
||||
[AMF] [amf_app] [info ] | 1 | Connected | 0x0 | gnb-l2sim-vnf | 208, 99 |
|
||||
[AMF] [amf_app] [info ] |----------------------------------------------------------------------------------------------------------------|
|
||||
...
|
||||
```
|
||||
|
||||
## 2.3. Deploy OAI NR-UE and proxy
|
||||
|
||||
```bash
|
||||
$ docker-compose up -d proxy oai-nr-ue0
|
||||
l2sim-mysql is up-to-date
|
||||
l2sim-oai-nrf is up-to-date
|
||||
l2sim-oai-amf is up-to-date
|
||||
l2sim-oai-smf is up-to-date
|
||||
l2sim-oai-spgwu is up-to-date
|
||||
l2sim-oai-ext-dn is up-to-date
|
||||
l2sim-oai-gnb is up-to-date
|
||||
Creating l2sim-oai-nr-ue ... done
|
||||
Creating l2sim-proxy ... done
|
||||
```
|
||||
|
||||
Wait for a bit.
|
||||
|
||||
```bash
|
||||
$ docker-compose ps -a
|
||||
Name Command State Ports
|
||||
-------------------------------------------------------------------------------------------------
|
||||
l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
|
||||
l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp
|
||||
l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy)
|
||||
l2sim-oai-gnb /opt/oai-gnb/bin/entrypoin ... Up (healthy)
|
||||
l2sim-oai-nr-ue0 /opt/oai-nr-ue/bin/entrypo ... Up (healthy)
|
||||
l2sim-oai-nrf /bin/bash /openair-nrf/bin ... Up (healthy) 80/tcp, 9090/tcp
|
||||
l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp
|
||||
l2sim-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp
|
||||
l2sim-proxy /oai-lte-multi-ue-proxy/bi ... Up (healthy)
|
||||
|
||||
$ docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}} {{.MemUsage}}\t{{.MemPerc}}" l2sim-mysql l2sim-oai-amf l2sim-oai-ext-dn l2sim-oai-gnb l2sim-oai-nr-ue0 l2sim-oai-nrf l2sim-oai-smf l2sim-oai-spgwu l2sim-proxy
|
||||
CONTAINER CPU % MEM USAGE / LIMIT MEM %
|
||||
l2sim-mysql 0.03% 206.7MiB / 62.54GiB 0.32%
|
||||
l2sim-oai-amf 4.05% 29.49MiB / 62.54GiB 0.05%
|
||||
l2sim-oai-ext-dn 0.00% 31.27MiB / 62.54GiB 0.05%
|
||||
l2sim-oai-gnb 1.29% 1.853GiB / 62.54GiB 2.96%
|
||||
l2sim-oai-nr-ue0 1.43% 350.8MiB / 62.54GiB 0.55%
|
||||
l2sim-oai-nrf 0.21% 9.105MiB / 62.54GiB 0.01%
|
||||
l2sim-oai-smf 3.24% 30.23MiB / 62.54GiB 0.05%
|
||||
l2sim-oai-spgwu 0.00% 11.78MiB / 62.54GiB 0.02%
|
||||
l2sim-proxy 6.97% 290.4MiB / 62.54GiB 0.45%
|
||||
```
|
||||
|
||||
**CAUTION: As you can see the CPU usage is not that important compared to a 5G RF simulator equivalent.**
|
||||
|
||||
But the CPU speed matters; I am running on a fast server:
|
||||
|
||||
```bash
|
||||
$ lscpu
|
||||
Architecture: x86_64
|
||||
CPU(s): 16
|
||||
...
|
||||
Model name: Intel(R) Xeon(R) Silver 4215R CPU @ 3.20GHz
|
||||
```
|
||||
|
||||
I tried on a slower server with more CPUs and it did not work:
|
||||
|
||||
```bash
|
||||
oaici@orion:~$ lscpu
|
||||
Architecture: x86_64
|
||||
CPU(s): 48
|
||||
...
|
||||
Model name: Intel(R) Xeon(R) CPU E5-2658 v3 @ 2.20GHz
|
||||
```
|
||||
|
||||
We will work on this issue.
|
||||
|
||||
|
||||
Making sure the OAI UE is connected:
|
||||
|
||||
```bash
|
||||
$ docker exec -it l2sim-oai-nr-ue /bin/bash
|
||||
root@bb4d400a832d:/opt/oai-nr-ue# ifconfig
|
||||
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
|
||||
inet 192.168.71.137 netmask 255.255.255.192 broadcast 192.168.71.191
|
||||
ether 02:42:c0:a8:47:89 txqueuelen 0 (Ethernet)
|
||||
RX packets 224259 bytes 5821372018 (5.8 GB)
|
||||
RX errors 0 dropped 0 overruns 0 frame 0
|
||||
TX packets 235916 bytes 7848786376 (7.8 GB)
|
||||
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
||||
|
||||
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
|
||||
inet 127.0.0.1 netmask 255.0.0.0
|
||||
loop txqueuelen 1000 (Local Loopback)
|
||||
RX packets 0 bytes 0 (0.0 B)
|
||||
RX errors 0 dropped 0 overruns 0 frame 0
|
||||
TX packets 0 bytes 0 (0.0 B)
|
||||
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
||||
|
||||
oaitun_ue1: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
|
||||
inet 12.1.1.2 netmask 255.255.255.0 destination 12.1.1.2
|
||||
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
|
||||
RX packets 0 bytes 0 (0.0 B)
|
||||
RX errors 0 dropped 0 overruns 0 frame 0
|
||||
TX packets 0 bytes 0 (0.0 B)
|
||||
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
||||
```
|
||||
|
||||
# 3. Check traffic #
|
||||
|
||||
## 3.1. Check your Internet connectivity ##
|
||||
|
||||
You can also check with the `ext-dn` container (IP address is `192.168.72.135` in docker-compose)
|
||||
|
||||
```bash
|
||||
$ docker exec -it l2sim-oai-nr-ue /bin/bash
|
||||
root@bb4d400a832d# ping -I oaitun_ue1 -c 20 192.168.72.135
|
||||
PING 192.168.72.135 (192.168.72.135) from 12.1.1.2 oaitun_ue1: 56(84) bytes of data.
|
||||
64 bytes from 192.168.72.135: icmp_seq=1 ttl=63 time=65.1 ms
|
||||
64 bytes from 192.168.72.135: icmp_seq=2 ttl=63 time=74.2 ms
|
||||
...
|
||||
64 bytes from 192.168.72.135: icmp_seq=19 ttl=63 time=25.0 ms
|
||||
64 bytes from 192.168.72.135: icmp_seq=20 ttl=63 time=34.7 ms
|
||||
|
||||
--- 192.168.72.135 ping statistics ---
|
||||
20 packets transmitted, 20 received, 0% packet loss, time 19025ms
|
||||
rtt min/avg/max/mdev = 16.413/120.639/209.673/57.159 ms
|
||||
```
|
||||
|
||||
# 4. Un-deployment #
|
||||
|
||||
```bash
|
||||
$ docker-compose down
|
||||
Stopping l2sim-oai-nr-ue2 ... done
|
||||
Stopping l2sim-oai-nr-ue ... done
|
||||
Stopping l2sim-oai-gnb ... done
|
||||
Stopping l2sim-oai-ext-dn ... done
|
||||
Stopping l2sim-oai-spgwu ... done
|
||||
Stopping l2sim-oai-smf ... done
|
||||
Stopping l2sim-oai-amf ... done
|
||||
Stopping l2sim-oai-nrf ... done
|
||||
Stopping l2sim-mysql ... done
|
||||
Removing l2sim-oai-nr-ue2 ... done
|
||||
Removing l2sim-oai-nr-ue ... done
|
||||
Removing l2sim-oai-gnb ... done
|
||||
Removing l2sim-oai-ext-dn ... done
|
||||
Removing l2sim-oai-spgwu ... done
|
||||
Removing l2sim-oai-smf ... done
|
||||
Removing l2sim-oai-amf ... done
|
||||
Removing l2sim-oai-nrf ... done
|
||||
Removing l2sim-mysql ... done
|
||||
Removing network l2sim-oai-public-net
|
||||
Removing network l2sim-oai-traffic-net
|
||||
```
|
||||
|
||||
# 5. Adapt the `docker-compose` to your environment #
|
||||
|
||||
In the `SMF` section, provide your own DNS IP address:
|
||||
|
||||
```yaml
|
||||
DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
|
||||
```
|
||||
|
||||
In the `gNB` section, provide your docker-host primary IP address and interface name: in our case `172.21.16.128` and `eno1`.
|
||||
|
||||
```yaml
|
||||
GNB_NGA_IF_NAME: eno1
|
||||
GNB_NGA_IP_ADDRESS: 172.21.16.128
|
||||
GNB_NGU_IF_NAME: eno1
|
||||
GNB_NGU_IP_ADDRESS: 172.21.16.128
|
||||
```
|
||||
|
||||
Same thing in the `nr-ue` section:
|
||||
|
||||
```yaml
|
||||
NR_UE_NFAPI_IF_NAME: eno1
|
||||
```
|
||||
|
||||
This tutorial is a first draft. This nFAPI feature and the proxy are still under development.
|
||||
|
||||
At time of writing, we were able to run in `host-mode`, 1 `NR-UE` and just ping traffic.
|
||||
|
||||
Later development will include:
|
||||
|
||||
- deploying `gNB-VNF`, `proxy` and `UE` in isolated containers (with their own IP address)
|
||||
- more UEs
|
||||
- more traffic (`UDP` and `TCP`)
|
||||
@@ -0,0 +1,322 @@
|
||||
version: '3.8'
|
||||
services:
|
||||
oai-nrf:
|
||||
container_name: "l2sim-oai-nrf"
|
||||
image: oai-nrf:latest
|
||||
environment:
|
||||
- NRF_INTERFACE_NAME_FOR_SBI=eth0
|
||||
- NRF_INTERFACE_PORT_FOR_SBI=80
|
||||
- NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
|
||||
- NRF_API_VERSION=v1
|
||||
- INSTANCE=0
|
||||
- PID_DIRECTORY=/var/run
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.71.130
|
||||
volumes:
|
||||
- ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
mysql:
|
||||
container_name: "l2sim-mysql"
|
||||
image: mysql:5.7
|
||||
volumes:
|
||||
- ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
|
||||
- ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- MYSQL_DATABASE=oai_db
|
||||
- MYSQL_USER=test
|
||||
- MYSQL_PASSWORD=test
|
||||
- MYSQL_ROOT_PASSWORD=linux
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.71.131
|
||||
oai-amf:
|
||||
container_name: "l2sim-oai-amf"
|
||||
image: oai-amf:latest
|
||||
environment:
|
||||
- TZ=Europe/paris
|
||||
- INSTANCE=0
|
||||
- PID_DIRECTORY=/var/run
|
||||
- MCC=208
|
||||
- MNC=99
|
||||
- REGION_ID=128
|
||||
- AMF_SET_ID=1
|
||||
- SERVED_GUAMI_MCC_0=208
|
||||
- SERVED_GUAMI_MNC_0=99
|
||||
- SERVED_GUAMI_REGION_ID_0=128
|
||||
- SERVED_GUAMI_AMF_SET_ID_0=1
|
||||
- SERVED_GUAMI_MCC_1=460
|
||||
- SERVED_GUAMI_MNC_1=11
|
||||
- SERVED_GUAMI_REGION_ID_1=10
|
||||
- SERVED_GUAMI_AMF_SET_ID_1=1
|
||||
- PLMN_SUPPORT_MCC=208
|
||||
- PLMN_SUPPORT_MNC=99
|
||||
- PLMN_SUPPORT_TAC=0x0001
|
||||
- SST_0=1
|
||||
- SD_0=1
|
||||
- SST_1=1
|
||||
- SD_1=12
|
||||
- AMF_INTERFACE_NAME_FOR_NGAP=eth0
|
||||
- AMF_INTERFACE_NAME_FOR_N11=eth0
|
||||
- SMF_INSTANCE_ID_0=1
|
||||
- SMF_FQDN_0=oai-smf
|
||||
- SMF_IPV4_ADDR_0=0.0.0.0
|
||||
- SMF_HTTP_VERSION_0=v1
|
||||
- SELECTED_0=true
|
||||
- SMF_INSTANCE_ID_1=2
|
||||
- SMF_FQDN_1=oai-smf
|
||||
- SMF_IPV4_ADDR_1=0.0.0.0
|
||||
- SMF_HTTP_VERSION_1=v1
|
||||
- SELECTED_1=false
|
||||
- MYSQL_SERVER=192.168.71.131
|
||||
- MYSQL_USER=root
|
||||
- MYSQL_PASS=linux
|
||||
- MYSQL_DB=oai_db
|
||||
- OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1
|
||||
- NRF_IPV4_ADDRESS=192.168.71.130
|
||||
- NRF_PORT=80
|
||||
- NF_REGISTRATION=yes
|
||||
- SMF_SELECTION=yes
|
||||
- USE_FQDN_DNS=yes
|
||||
- NRF_API_VERSION=v1
|
||||
- NRF_FQDN=oai-nrf
|
||||
- EXTERNAL_AUSF=no
|
||||
- AUSF_IPV4_ADDRESS=0.0.0.0
|
||||
- AUSF_PORT=80
|
||||
- AUSF_API_VERSION=v1
|
||||
- AUSF_FQDN=localhost
|
||||
depends_on:
|
||||
- oai-nrf
|
||||
- mysql
|
||||
volumes:
|
||||
- ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh"
|
||||
interval: 10s
|
||||
timeout: 15s
|
||||
retries: 5
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.71.132
|
||||
oai-smf:
|
||||
container_name: "l2sim-oai-smf"
|
||||
image: oai-smf:latest
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- INSTANCE=0
|
||||
- PID_DIRECTORY=/var/run
|
||||
- SMF_INTERFACE_NAME_FOR_N4=eth0
|
||||
- SMF_INTERFACE_NAME_FOR_SBI=eth0
|
||||
- SMF_INTERFACE_PORT_FOR_SBI=80
|
||||
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
|
||||
- SMF_API_VERSION=v1
|
||||
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
|
||||
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
|
||||
- AMF_IPV4_ADDRESS=0.0.0.0
|
||||
- AMF_PORT=80
|
||||
- AMF_API_VERSION=v1
|
||||
- AMF_FQDN=oai-amf
|
||||
- UDM_IPV4_ADDRESS=127.0.0.1
|
||||
- UDM_PORT=80
|
||||
- UDM_API_VERSION=v1
|
||||
- UDM_FQDN=localhost
|
||||
- UPF_IPV4_ADDRESS=192.168.71.134
|
||||
- UPF_FQDN_0=oai-spgwu
|
||||
- NRF_IPV4_ADDRESS=192.168.71.130
|
||||
- NRF_PORT=80
|
||||
- NRF_API_VERSION=v1
|
||||
- NRF_FQDN=oai-nrf
|
||||
- REGISTER_NRF=yes
|
||||
- DISCOVER_UPF=yes
|
||||
- USE_FQDN_DNS=yes
|
||||
- DNN_NI0=oai
|
||||
- DNN_NI2=oai.ipv4
|
||||
depends_on:
|
||||
- oai-nrf
|
||||
- oai-amf
|
||||
volumes:
|
||||
- ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.71.133
|
||||
oai-spgwu:
|
||||
container_name: "l2sim-oai-spgwu"
|
||||
image: oai-spgwu-tiny:latest
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- PID_DIRECTORY=/var/run
|
||||
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0
|
||||
- SGW_INTERFACE_NAME_FOR_SX=eth0
|
||||
- PGW_INTERFACE_NAME_FOR_SGI=eth0
|
||||
- NETWORK_UE_NAT_OPTION=yes
|
||||
- NETWORK_UE_IP=12.1.1.0/24
|
||||
- SPGWC0_IP_ADDRESS=192.168.71.133
|
||||
- BYPASS_UL_PFCP_RULES=no
|
||||
- MCC=208
|
||||
- MNC=99
|
||||
- MNC03=099
|
||||
- TAC=1
|
||||
- GTP_EXTENSION_HEADER_PRESENT=yes
|
||||
- GW_ID=1
|
||||
- REALM=openairinterface.org
|
||||
- ENABLE_5G_FEATURES=yes
|
||||
- REGISTER_NRF=yes
|
||||
- USE_FQDN_NRF=yes
|
||||
- UPF_FQDN_5G=oai-spgwu
|
||||
- NRF_IPV4_ADDRESS=192.168.71.130
|
||||
- NRF_PORT=80
|
||||
- NRF_API_VERSION=v1
|
||||
- NRF_FQDN=oai-nrf
|
||||
- NSSAI_SST_0=1
|
||||
- NSSAI_SD_0=1
|
||||
- DNN_0=oai
|
||||
depends_on:
|
||||
- oai-nrf
|
||||
- oai-smf
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
- SYS_ADMIN
|
||||
cap_drop:
|
||||
- ALL
|
||||
privileged: true
|
||||
volumes:
|
||||
- ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh
|
||||
healthcheck:
|
||||
test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.71.134
|
||||
traffic_net:
|
||||
ipv4_address: 192.168.72.134
|
||||
oai-ext-dn:
|
||||
image: ubuntu:bionic
|
||||
privileged: true
|
||||
container_name: "l2sim-oai-ext-dn"
|
||||
entrypoint: /bin/bash -c \
|
||||
"apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\
|
||||
"ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
|
||||
depends_on:
|
||||
- oai-spgwu
|
||||
networks:
|
||||
traffic_net:
|
||||
ipv4_address: 192.168.72.135
|
||||
healthcheck:
|
||||
test: /bin/bash -c "ping -c 2 192.168.72.134"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
oai-gnb:
|
||||
image: oai-gnb:develop
|
||||
privileged: true
|
||||
container_name: "l2sim-oai-gnb"
|
||||
network_mode: "host"
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_SA_NFAPI_VNF: 'yes'
|
||||
GNB_NAME: gnb-l2sim-vnf
|
||||
TAC: 1
|
||||
MCC: '208'
|
||||
MNC: '99'
|
||||
MNC_LENGTH: 2
|
||||
NSSAI_SST: 1
|
||||
NSSAI_SD0: 1
|
||||
NSSAI_SD1: 112233
|
||||
AMF_IP_ADDRESS: 192.168.71.132
|
||||
GNB_NGA_IF_NAME: eno1
|
||||
GNB_NGA_IP_ADDRESS: 172.21.16.128
|
||||
GNB_NGU_IF_NAME: eno1
|
||||
GNB_NGU_IP_ADDRESS: 172.21.16.128
|
||||
LOCAL_S_IF_NAME: 'lo:'
|
||||
REMOTE_S_ADDRESS: 127.0.0.1
|
||||
LOCAL_S_ADDRESS: 127.0.0.2
|
||||
USE_ADDITIONAL_OPTIONS: --sa --nfapi 2 --emulate-l1 --log_config.global_log_options level,time,thread_id,nocolor
|
||||
depends_on:
|
||||
- oai-spgwu
|
||||
- oai-amf
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep nr-softmodem"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
proxy:
|
||||
image: oai-lte-multi-ue-proxy:latest
|
||||
privileged: true
|
||||
container_name: "l2sim-proxy"
|
||||
network_mode: "host"
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
command: "/oai-lte-multi-ue-proxy/bin/proxy 1 --nr"
|
||||
depends_on:
|
||||
- oai-gnb
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep proxy"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
oai-nr-ue0:
|
||||
image: oai-nr-ue:develop
|
||||
privileged: true
|
||||
container_name: "l2sim-oai-nr-ue0"
|
||||
network_mode: "host"
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_NFAPI: 'yes'
|
||||
OPENAIR_DIR: /opt/oai-nr-ue
|
||||
FULL_IMSI: '208990100001100'
|
||||
FULL_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
|
||||
OPC: 'C42449363BBAD02B66D16BC975D77CC1'
|
||||
DNN: oai
|
||||
NSSAI_SST: 1
|
||||
NSSAI_SD: 1
|
||||
NR_UE_NFAPI_IF_NAME: eno1
|
||||
GNB_IP_ADDRESS: 127.0.0.1
|
||||
NR_UE_IP_ADDRESS: 127.0.0.1
|
||||
USE_ADDITIONAL_OPTIONS: --nokrnmod 1 --nfapi 5 --node-number 2 --sa --emulate-l1 --log_config.global_log_options level,time,thread_id,nocolor
|
||||
volumes:
|
||||
- ../../../openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results:/opt/oai-nr-ue/openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results
|
||||
depends_on:
|
||||
- oai-gnb
|
||||
- proxy
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep nr-uesoftmodem"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
public_net:
|
||||
driver: bridge
|
||||
name: l2sim-oai-public-net
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 192.168.71.128/26
|
||||
driver_opts:
|
||||
com.docker.network.bridge.name: "l2sim-public"
|
||||
traffic_net:
|
||||
driver: bridge
|
||||
name: l2sim-oai-traffic-net
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 192.168.72.128/26
|
||||
driver_opts:
|
||||
com.docker.network.bridge.name: "l2sim-traffic"
|
||||
@@ -35,9 +35,7 @@ This page is only valid for an `Ubuntu18` host.
|
||||
|
||||
# 1. Retrieving the images on Docker-Hub #
|
||||
|
||||
Currently the images are hosted under the user account `rdefosseoai`.
|
||||
|
||||
This may change in the future.
|
||||
Currently the images are hosted under the team account `oaisoftwarealliance`. They were previously hosted under the user account `rdefosseoai`.
|
||||
|
||||
Once again you may need to log on [docker-hub](https://hub.docker.com/) if your organization has reached pulling limit as `anonymous`.
|
||||
|
||||
@@ -52,25 +50,25 @@ Now pull images.
|
||||
|
||||
```bash
|
||||
$ docker pull mysql:5.7
|
||||
$ docker pull rdefosseoai/oai-amf:latest
|
||||
$ docker pull rdefosseoai/oai-nrf:latest
|
||||
$ docker pull rdefosseoai/oai-smf:latest
|
||||
$ docker pull rdefosseoai/oai-spgwu-tiny:latest
|
||||
$ docker pull oaisoftwarealliance/oai-amf:latest
|
||||
$ docker pull oaisoftwarealliance/oai-nrf:latest
|
||||
$ docker pull oaisoftwarealliance/oai-smf:latest
|
||||
$ docker pull oaisoftwarealliance/oai-spgwu-tiny:latest
|
||||
|
||||
$ docker pull rdefosseoai/oai-gnb:develop
|
||||
$ docker pull rdefosseoai/oai-nr-ue:develop
|
||||
$ docker pull oaisoftwarealliance/oai-gnb:develop
|
||||
$ docker pull oaisoftwarealliance/oai-nr-ue:develop
|
||||
```
|
||||
|
||||
And **re-tag** them for tutorials' docker-compose file to work.
|
||||
|
||||
```bash
|
||||
$ docker image tag rdefosseoai/oai-amf:latest oai-amf:latest
|
||||
$ docker image tag rdefosseoai/oai-nrf:latest oai-nrf:latest
|
||||
$ docker image tag rdefosseoai/oai-smf:latest oai-smf:latest
|
||||
$ docker image tag rdefosseoai/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
|
||||
$ docker image tag oaisoftwarealliance/oai-amf:latest oai-amf:latest
|
||||
$ docker image tag oaisoftwarealliance/oai-nrf:latest oai-nrf:latest
|
||||
$ docker image tag oaisoftwarealliance/oai-smf:latest oai-smf:latest
|
||||
$ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
|
||||
|
||||
$ docker image tag rdefosseoai/oai-gnb:develop oai-gnb:develop
|
||||
$ docker image tag rdefosseoai/oai-nr-ue:develop oai-nr-ue:develop
|
||||
$ docker image tag oaisoftwarealliance/oai-gnb:develop oai-gnb:develop
|
||||
$ docker image tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue:develop
|
||||
```
|
||||
|
||||
```bash
|
||||
|
||||
@@ -120,7 +120,7 @@ services:
|
||||
- SMF_INTERFACE_PORT_FOR_SBI=80
|
||||
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
|
||||
- SMF_API_VERSION=v1
|
||||
- DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129
|
||||
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
|
||||
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
|
||||
- AMF_IPV4_ADDRESS=0.0.0.0
|
||||
- AMF_PORT=80
|
||||
|
||||
@@ -132,7 +132,7 @@ services:
|
||||
TZ: Europe/Paris
|
||||
SGW_INTERFACE_NAME_FOR_S11: eth0
|
||||
PGW_INTERFACE_NAME_FOR_SX: eth0
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100
|
||||
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||
PUSH_PROTOCOL_OPTION: 'true'
|
||||
APN_NI_1: oai.ipv4
|
||||
|
||||
@@ -116,7 +116,7 @@ services:
|
||||
TZ: Europe/Paris
|
||||
SGW_INTERFACE_NAME_FOR_S11: eth0
|
||||
PGW_INTERFACE_NAME_FOR_SX: eth0
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100
|
||||
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||
PUSH_PROTOCOL_OPTION: 'true'
|
||||
APN_NI_1: oai.ipv4
|
||||
|
||||
@@ -20,7 +20,7 @@ services:
|
||||
NB_PRB: 25
|
||||
ENABLE_MEASUREMENT_REPORTS: 'yes'
|
||||
ENABLE_X2: 'yes'
|
||||
MME_S1C_IP_ADDRESS: 192.168.18.210
|
||||
MME_S1C_IP_ADDRESS: 172.21.16.136
|
||||
ENB_S1C_IF_NAME: eth0
|
||||
ENB_S1C_IP_ADDRESS: 192.168.68.130
|
||||
ENB_S1U_IF_NAME: eth0
|
||||
@@ -29,7 +29,7 @@ services:
|
||||
RRC_INACTIVITY_THRESHOLD: 0
|
||||
FLEXRAN_ENABLED: 'no'
|
||||
FLEXRAN_INTERFACE_NAME: eth0
|
||||
FLEXRAN_IPV4_ADDRESS: 192.168.18.210
|
||||
FLEXRAN_IPV4_ADDRESS: 172.21.16.136
|
||||
THREAD_PARALLEL_CONFIG: PARALLEL_SINGLE_THREAD
|
||||
USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time,line_num,function
|
||||
volumes:
|
||||
|
||||
@@ -15,7 +15,7 @@ services:
|
||||
TAC: 1
|
||||
ENABLE_X2: 'yes'
|
||||
ENB_X2_IP_ADDRESS: 192.168.68.130
|
||||
MME_S1C_IP_ADDRESS: 192.168.18.210
|
||||
MME_S1C_IP_ADDRESS: 172.21.16.136
|
||||
GNB_S1C_IF_NAME: eth0
|
||||
GNB_S1C_IP_ADDRESS: 192.168.68.194
|
||||
GNB_S1U_IF_NAME: eth0
|
||||
@@ -24,9 +24,9 @@ services:
|
||||
RRC_INACTIVITY_THRESHOLD: 0
|
||||
FLEXRAN_ENABLED: 'no'
|
||||
FLEXRAN_INTERFACE_NAME: eth0
|
||||
FLEXRAN_IPV4_ADDRESS: 192.168.18.210
|
||||
FLEXRAN_IPV4_ADDRESS: 172.21.16.136
|
||||
THREAD_PARALLEL_CONFIG: PARALLEL_RU_L1_TRX_SPLIT
|
||||
USE_ADDITIONAL_OPTIONS: -E -q --RUs.[0].sdr_addrs serial=30C51D4 --log_config.global_log_options level,nocolor,time,line_num,function
|
||||
USE_ADDITIONAL_OPTIONS: -E -q --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function
|
||||
volumes:
|
||||
- /dev:/dev
|
||||
networks:
|
||||
|
||||
@@ -1781,7 +1781,8 @@ set(NR_PDCP_SRC
|
||||
)
|
||||
|
||||
set(NR_SDAP_SRC
|
||||
${OPENAIR2_DIR}/SDAP/nr_sdap/nr_sdap_gnb.c
|
||||
${OPENAIR2_DIR}/SDAP/nr_sdap/nr_sdap.c
|
||||
${OPENAIR2_DIR}/SDAP/nr_sdap/nr_sdap_entity.c
|
||||
)
|
||||
|
||||
set(L2_SRC
|
||||
@@ -1867,6 +1868,7 @@ set(NR_L2_SRC_UE
|
||||
${NR_RRC_DIR}/nr_rrc_config.c
|
||||
${NR_UE_RRC_DIR}/rrc_UE.c
|
||||
${NR_UE_RRC_DIR}/rrc_nsa.c
|
||||
${NR_RRC_DIR}/nr_rrc_config.c
|
||||
)
|
||||
|
||||
set (MAC_SRC
|
||||
|
||||
@@ -1093,7 +1093,7 @@
|
||||
(Test8: 217 PRB 100 PDSCH-PRBs 110 PDSCH-Offset),
|
||||
(Test9: 106 PRBs 50 PDSCH-PRBs MCS Index 27),
|
||||
(Test10: 106 PRBs 50 PDSCH-PRBs MCS Index 16),
|
||||
(Test11: 106 MCS-TABLE 256 QAM MCS Index 27),
|
||||
(Test11: 106 MCS-TABLE 256 QAM MCS Index 26),
|
||||
(Test12: HARQ test 25% TP 4 rounds),
|
||||
(Test13: HARQ test 33% TP 3 rounds),
|
||||
(Test14: HARQ test 50% TP 2 rounds),
|
||||
@@ -1121,7 +1121,7 @@
|
||||
-n100 -R217 -a110 -s5 -b100
|
||||
-n100 -e27 -s30
|
||||
-n100 -e16 -s10
|
||||
-n100 -q1 -e27 -s30
|
||||
-n100 -q1 -e26 -s30
|
||||
-n100 -s1 -t25
|
||||
-n100 -s1 -t33
|
||||
-n100 -s1 -t50
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
ran_build/
|
||||
@@ -478,6 +478,7 @@ int logInit (void)
|
||||
register_log_component("NAS","log",NAS);
|
||||
register_log_component("UDP","",UDP_);
|
||||
register_log_component("GTPU","",GTPU);
|
||||
register_log_component("SDAP","",SDAP);
|
||||
register_log_component("S1AP","",S1AP);
|
||||
register_log_component("F1AP","",F1AP);
|
||||
register_log_component("M2AP","",M2AP);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user