Merge remote-tracking branch 'origin/develop' into oairu
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
*.log
|
||||||
|
cmake_targets/log/
|
||||||
|
cmake_targets/ran_build/
|
||||||
|
common/utils/T/T_IDs.h
|
||||||
|
common/utils/T/T_messages.txt.h
|
||||||
|
common/utils/T/genids
|
||||||
|
common/utils/T/genids.o
|
||||||
|
targets/bin/
|
||||||
@@ -12,3 +12,9 @@ targets/bin/
|
|||||||
|
|
||||||
# vscode
|
# vscode
|
||||||
.vscode
|
.vscode
|
||||||
|
|
||||||
|
# Tags for vim/global
|
||||||
|
GPATH
|
||||||
|
GRTAGS
|
||||||
|
GTAGS
|
||||||
|
tags
|
||||||
|
|||||||
+4
-5
@@ -2,13 +2,12 @@
|
|||||||
|
|
||||||
We want to make contributing to this project as easy and transparent as possible.
|
We want to make contributing to this project as easy and transparent as possible.
|
||||||
|
|
||||||
Please refer to the steps described on our website: [How to contribute to OAI](https://www.openairinterface.org/?page_id=112)
|
|
||||||
|
|
||||||
1. Sign and return a Contributor License Agreement to OAI team.
|
1. Sign and return a Contributor License Agreement to OAI team.
|
||||||
2. Create an account on [Eurecom GitLab Server](https://gitlab.eurecom.fr).
|
2. We recommend that you provide us with a professional or student email address
|
||||||
3. Provide the identifiant of this account to the OAI team (mailto:contact@openairinterface.org) so you have developer rights on this repository.
|
2. Register on [Eurecom GitLab Server](https://gitlab.eurecom.fr/users/sign_in)
|
||||||
|
3. Provide the OAI team with the **username** of this account to (mailto:contact@openairinterface.org) ; we will give you the developer rights on this repository.
|
||||||
4. The policies are described in these wiki pages: [OAI Policies](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/oai-policies-home)
|
4. The policies are described in these wiki pages: [OAI Policies](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/oai-policies-home)
|
||||||
- PLEASE DO NOT FORK the OAI repository on your own Eurecom GitLab account. It just eats up space on our servers.
|
- PLEASE DO NOT FORK the OAI repository on your own Eurecom GitLab account. It just eats up space on our servers.
|
||||||
- You can fork onto another hosting system. But we will NOT accept a merge request from a forked repository.
|
- You can fork onto another hosting system. But we will NOT accept a merge request from a forked repository.
|
||||||
* This decision was made for the license reasons.
|
* This decision was made for the license reasons.
|
||||||
* The Continuous Integration will reject your merge request.
|
* The Continuous Integration will reject your merge request.
|
||||||
|
|||||||
@@ -21,3 +21,7 @@ The Regents of the University of California: BSD 3-Clause Licence.
|
|||||||
|
|
||||||
Niels Provos <provos@citi.umich.edu>: BSD 2-Clause Licence.
|
Niels Provos <provos@citi.umich.edu>: BSD 2-Clause Licence.
|
||||||
|
|
||||||
|
## Credits for source code openair3/GTPV1-U/nw-gtpv1u: ##
|
||||||
|
|
||||||
|
Amit Chawre <http://www.amitchawre.net/contact.html>: BSD 2-Clause Licence.
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
r*.raw
|
||||||
enb_*.log
|
enb_*.log
|
||||||
ue_*.log
|
ue_*.log
|
||||||
ping_*.*
|
ping_*.*
|
||||||
|
|||||||
@@ -30,12 +30,14 @@ def sendSocialMediaMessage(pipeChannel, pipeColor, pipeMessage) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def doRedHatBuild = false
|
|
||||||
def doFlexranCtrlTest = false
|
def doFlexranCtrlTest = false
|
||||||
|
|
||||||
// Location of the executor node
|
// Location of the executor node
|
||||||
def nodeExecutor = params.nodeExecutor
|
def nodeExecutor = params.nodeExecutor
|
||||||
|
|
||||||
|
// VM Lockable resources
|
||||||
|
def vmResource = params.vmLockableResource
|
||||||
|
|
||||||
pipeline {
|
pipeline {
|
||||||
agent {
|
agent {
|
||||||
label nodeExecutor
|
label nodeExecutor
|
||||||
@@ -66,7 +68,8 @@ pipeline {
|
|||||||
"Test-IF4p5-TDD-Band38-Multi-RRU",
|
"Test-IF4p5-TDD-Band38-Multi-RRU",
|
||||||
"Test-eNB-OAI-UE-FDD-Band7",
|
"Test-eNB-OAI-UE-FDD-Band7",
|
||||||
"Test-Mono-FDD-Band13-X2-HO",
|
"Test-Mono-FDD-Band13-X2-HO",
|
||||||
"Test-TDD-Band78-gNB-NR-UE"
|
"Test-TDD-Band78-gNB-NR-UE",
|
||||||
|
"Test-OCP-FDD-Band7"
|
||||||
])
|
])
|
||||||
ansiColor('xterm')
|
ansiColor('xterm')
|
||||||
}
|
}
|
||||||
@@ -84,21 +87,6 @@ pipeline {
|
|||||||
echo "Platform is ${env.TESTPLATFORM_OWNER}"
|
echo "Platform is ${env.TESTPLATFORM_OWNER}"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.RedHatRemoteServer == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.RedHatRemoteCredentials == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.RedHatWorkingPath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (allParametersPresent) {
|
|
||||||
echo "Performing Red Hat Build"
|
|
||||||
doRedHatBuild = true
|
|
||||||
} else {
|
|
||||||
doRedHatBuild = false
|
|
||||||
}
|
|
||||||
if (params.FlexRanRtcGitLabRepository_Credentials != null) {
|
if (params.FlexRanRtcGitLabRepository_Credentials != null) {
|
||||||
doFlexranCtrlTest = true
|
doFlexranCtrlTest = true
|
||||||
}
|
}
|
||||||
@@ -174,65 +162,81 @@ pipeline {
|
|||||||
|
|
||||||
stage ("Start VM -- basic-sim") {
|
stage ("Start VM -- basic-sim") {
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
timeout (time: 5, unit: 'MINUTES') {
|
timeout (time: 5, unit: 'MINUTES') {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant basic-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant basic-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage ("Start VM -- gnb-usrp") {
|
stage ("Start VM -- gnb-usrp") {
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
timeout (time: 5, unit: 'MINUTES') {
|
timeout (time: 5, unit: 'MINUTES') {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant gnb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant gnb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage ("Start VM -- nr-ue-usrp") {
|
stage ("Start VM -- nr-ue-usrp") {
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
timeout (time: 5, unit: 'MINUTES') {
|
timeout (time: 5, unit: 'MINUTES') {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant nr-ue-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant nr-ue-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage ("Start VM -- enb-usrp") {
|
stage ("Start VM -- enb-usrp") {
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
timeout (time: 5, unit: 'MINUTES') {
|
timeout (time: 5, unit: 'MINUTES') {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage ("Start VM -- phy-sim") {
|
stage ("Start VM -- phy-sim") {
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
timeout (time: 5, unit: 'MINUTES') {
|
timeout (time: 5, unit: 'MINUTES') {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage ("Start VM -- enb-ethernet") {
|
stage ("Start VM -- enb-ethernet") {
|
||||||
steps {
|
steps {
|
||||||
timeout (time: 5, unit: 'MINUTES') {
|
lock (vmResource) {
|
||||||
|
timeout (time: 7, unit: 'MINUTES') {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant enb-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant enb-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage ("Start VM -- ue-ethernet") {
|
stage ("Start VM -- ue-ethernet") {
|
||||||
steps {
|
steps {
|
||||||
timeout (time: 5, unit: 'MINUTES') {
|
lock (vmResource) {
|
||||||
|
timeout (time: 7, unit: 'MINUTES') {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant ue-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant ue-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage ("Start VM -- cppcheck") {
|
stage ("Start VM -- cppcheck") {
|
||||||
steps {
|
steps {
|
||||||
timeout (time: 5, unit: 'MINUTES') {
|
lock (vmResource) {
|
||||||
|
timeout (time: 7, unit: 'MINUTES') {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant cppcheck --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant cppcheck --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,7 +282,7 @@ pipeline {
|
|||||||
steps {
|
steps {
|
||||||
gitlabCommitStatus(name: "Build eNB-USRP") {
|
gitlabCommitStatus(name: "Build eNB-USRP") {
|
||||||
timeout (time: 20, unit: 'MINUTES') {
|
timeout (time: 20, unit: 'MINUTES') {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
|
sh "./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -303,33 +307,14 @@ pipeline {
|
|||||||
}
|
}
|
||||||
stage ("Build UE-ethernet") {
|
stage ("Build UE-ethernet") {
|
||||||
steps {
|
steps {
|
||||||
|
// This is typically the last one to finish.
|
||||||
|
lock (vmResource) {
|
||||||
gitlabCommitStatus(name: "Build UE-ethernet") {
|
gitlabCommitStatus(name: "Build UE-ethernet") {
|
||||||
timeout (time: 20, unit: 'MINUTES') {
|
timeout (time: 20, unit: 'MINUTES') {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant ue-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
|
sh "./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant ue-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
stage ("Build eNB-USRP on Red Hat") {
|
|
||||||
when {
|
|
||||||
expression {doRedHatBuild}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
gitlabCommitStatus(name: "Build eNB-USRP-RHE") {
|
|
||||||
script {
|
|
||||||
try {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.RedHatRemoteCredentials}", usernameVariable: 'RH_Username', passwordVariable: 'RH_Password']
|
|
||||||
]) {
|
|
||||||
timeout (time: 20, unit: 'MINUTES') {
|
|
||||||
sh "./ci-scripts/buildOnRH.sh --workspace $WORKSPACE --job-name ${JOB_NAME} --build-id ${BUILD_ID} --remote-host ${params.RedHatRemoteServer} --remote-path ${params.RedHatWorkingPath} --remote-user-name ${RH_Username} --remote-password ${RH_Password}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
echo "Red Hat build failed but we could keep running pipeline if all ubuntu-based build passed"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -391,6 +376,7 @@ pipeline {
|
|||||||
stages {
|
stages {
|
||||||
stage ("Test physical simulators") {
|
stage ("Test physical simulators") {
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
script {
|
script {
|
||||||
timeout (time: 90, unit: 'MINUTES') {
|
timeout (time: 90, unit: 'MINUTES') {
|
||||||
try {
|
try {
|
||||||
@@ -402,6 +388,7 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Build Flexran Controller") {
|
stage ("Build Flexran Controller") {
|
||||||
@@ -409,6 +396,7 @@ pipeline {
|
|||||||
expression {doFlexranCtrlTest}
|
expression {doFlexranCtrlTest}
|
||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
script {
|
script {
|
||||||
timeout (time: 20, unit: 'MINUTES') {
|
timeout (time: 20, unit: 'MINUTES') {
|
||||||
try {
|
try {
|
||||||
@@ -418,10 +406,12 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test basic simulator") {
|
stage ("Test basic simulator") {
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
script {
|
script {
|
||||||
timeout (time: 30, unit: 'MINUTES') {
|
timeout (time: 30, unit: 'MINUTES') {
|
||||||
try {
|
try {
|
||||||
@@ -433,10 +423,12 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test L1 simulator") {
|
stage ("Test L1 simulator") {
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
script {
|
script {
|
||||||
timeout (time: 30, unit: 'MINUTES') {
|
timeout (time: 30, unit: 'MINUTES') {
|
||||||
try {
|
try {
|
||||||
@@ -448,12 +440,14 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test RF simulator") {
|
stage ("Test RF simulator") {
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
script {
|
script {
|
||||||
timeout (time: 30, unit: 'MINUTES') {
|
timeout (time: 40, unit: 'MINUTES') {
|
||||||
try {
|
try {
|
||||||
gitlabCommitStatus(name: "Test RF-sim") {
|
gitlabCommitStatus(name: "Test RF-sim") {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool test --workspace $WORKSPACE --variant rf-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
|
sh "./ci-scripts/oai-ci-vm-tool test --workspace $WORKSPACE --variant rf-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
|
||||||
@@ -463,10 +457,12 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test L2 simulator") {
|
stage ("Test L2 simulator") {
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
script {
|
script {
|
||||||
timeout (time: 30, unit: 'MINUTES') {
|
timeout (time: 30, unit: 'MINUTES') {
|
||||||
try {
|
try {
|
||||||
@@ -478,11 +474,14 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Destroy all Virtual Machines") {
|
stage ("Destroy all Virtual Machines") {
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool destroy --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
|
sh "./ci-scripts/oai-ci-vm-tool destroy --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -683,6 +682,25 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stage ("Test OAI OCP-eNB - FDD - Band 7 - B210") {
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
triggerSlaveJob ('OCPeNB-FDD-Band7-B210', 'Test-OCP-FDD-Band7')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
script {
|
||||||
|
finalizeSlaveJob('OCPeNB-FDD-Band7-B210')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
failure {
|
||||||
|
script {
|
||||||
|
currentBuild.result = 'FAILURE'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
|
|||||||
@@ -266,6 +266,42 @@ pipeline {
|
|||||||
}
|
}
|
||||||
stage('Log Collection') {
|
stage('Log Collection') {
|
||||||
parallel {
|
parallel {
|
||||||
|
stage('Log Collection (eNB - Build)') {
|
||||||
|
steps {
|
||||||
|
withCredentials([
|
||||||
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password']
|
||||||
|
]) {
|
||||||
|
echo '\u2705 \u001B[32mLog Collection (eNB - Build)\u001B[0m'
|
||||||
|
sh "python3 ci-scripts/main.py --mode=LogCollectBuild --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath}"
|
||||||
|
|
||||||
|
echo '\u2705 \u001B[32mLog Transfer (eNB - Build)\u001B[0m'
|
||||||
|
sh "sshpass -p \'${eNB_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${eNB_Username}@${params.eNB_IPAddress}:${eNB_SourceCodePath}/cmake_targets/build.log.zip ./build.log.${env.BUILD_ID}.zip || true"
|
||||||
|
}
|
||||||
|
script {
|
||||||
|
if(fileExists("build.log.${env.BUILD_ID}.zip")) {
|
||||||
|
archiveArtifacts "build.log.${env.BUILD_ID}.zip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('Log Collection (OAI UE - Build)') {
|
||||||
|
steps {
|
||||||
|
echo '\u2705 \u001B[32mLog Collection (OAI UE - Build)\u001B[0m'
|
||||||
|
withCredentials([
|
||||||
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
|
||||||
|
]) {
|
||||||
|
sh "python3 ci-scripts/main.py --mode=LogCollectBuild --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath}"
|
||||||
|
|
||||||
|
echo '\u2705 \u001B[32mLog Transfer (UE - Build)\u001B[0m'
|
||||||
|
sh "sshpass -p \'${UE_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${UE_Username}@${params.UE_IPAddress}:${UE_SourceCodePath}/cmake_targets/build.log.zip ./build.log.${env.BUILD_ID}.zip || true"
|
||||||
|
}
|
||||||
|
script {
|
||||||
|
if(fileExists("build.log.${env.BUILD_ID}.zip")) {
|
||||||
|
archiveArtifacts "build.log.${env.BUILD_ID}.zip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
stage('Log Collection (eNB - Run)') {
|
stage('Log Collection (eNB - Run)') {
|
||||||
steps {
|
steps {
|
||||||
withCredentials([
|
withCredentials([
|
||||||
|
|||||||
@@ -0,0 +1,246 @@
|
|||||||
|
|
||||||
|
# * 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
|
||||||
|
# */
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
# Python for CI of OAI-eNB + COTS-UE
|
||||||
|
#
|
||||||
|
# Required Python Version
|
||||||
|
# Python 3.x
|
||||||
|
#
|
||||||
|
# Required Python Package
|
||||||
|
# pexpect
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
# Import Libs
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
import sys # arg
|
||||||
|
import re # reg
|
||||||
|
import yaml
|
||||||
|
import constants as CONST
|
||||||
|
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
# Parsing Command Line Arguements
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP):
|
||||||
|
|
||||||
|
|
||||||
|
py_param_file_present = False
|
||||||
|
py_params={}
|
||||||
|
|
||||||
|
while len(argvs) > 1:
|
||||||
|
myArgv = argvs.pop(1) # 0th is this file's name
|
||||||
|
|
||||||
|
#--help
|
||||||
|
if re.match('^\-\-help$', myArgv, re.IGNORECASE):
|
||||||
|
HELP.GenericHelp(CONST.Version)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
#--apply=<filename> as parameters file, to replace inline parameters
|
||||||
|
elif re.match('^\-\-Apply=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-Apply=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
py_params_file = matchReg.group(1)
|
||||||
|
with open(py_params_file,'r') as file:
|
||||||
|
# The FullLoader parameter handles the conversion from YAML
|
||||||
|
# scalar values to Python dictionary format
|
||||||
|
py_params = yaml.load(file,Loader=yaml.FullLoader)
|
||||||
|
py_param_file_present = True #to be removed once validated
|
||||||
|
#AssignParams(py_params) #to be uncommented once validated
|
||||||
|
|
||||||
|
#consider inline parameters
|
||||||
|
elif re.match('^\-\-mode=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-mode=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
mode = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBRepository=(.+)$|^\-\-ranRepository(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
else:
|
||||||
|
matchReg = re.match('^\-\-ranRepository=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ranRepository = matchReg.group(1)
|
||||||
|
RAN.ranRepository=matchReg.group(1)
|
||||||
|
HTML.ranRepository=matchReg.group(1)
|
||||||
|
ldpc.ranRepository=matchReg.group(1)
|
||||||
|
CONTAINERS.ranRepository=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB_AllowMerge=(.+)$|^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
else:
|
||||||
|
matchReg = re.match('^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
doMerge = matchReg.group(1)
|
||||||
|
ldpc.ranAllowMerge=matchReg.group(1)
|
||||||
|
if ((doMerge == 'true') or (doMerge == 'True')):
|
||||||
|
CiTestObj.ranAllowMerge = True
|
||||||
|
RAN.ranAllowMerge=True
|
||||||
|
HTML.ranAllowMerge=True
|
||||||
|
CONTAINERS.ranAllowMerge=True
|
||||||
|
elif re.match('^\-\-eNBBranch=(.+)$|^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
else:
|
||||||
|
matchReg = re.match('^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ranBranch = matchReg.group(1)
|
||||||
|
RAN.ranBranch=matchReg.group(1)
|
||||||
|
HTML.ranBranch=matchReg.group(1)
|
||||||
|
ldpc.ranBranch=matchReg.group(1)
|
||||||
|
CONTAINERS.ranBranch=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBCommitID=(.*)$|^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE)
|
||||||
|
else:
|
||||||
|
matchReg = re.match('^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ranCommitID = matchReg.group(1)
|
||||||
|
RAN.ranCommitID=matchReg.group(1)
|
||||||
|
HTML.ranCommitID=matchReg.group(1)
|
||||||
|
ldpc.ranCommitID=matchReg.group(1)
|
||||||
|
CONTAINERS.ranCommitID=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBTargetBranch=(.*)$|^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE)
|
||||||
|
else:
|
||||||
|
matchReg = re.match('^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ranTargetBranch = matchReg.group(1)
|
||||||
|
RAN.ranTargetBranch=matchReg.group(1)
|
||||||
|
HTML.ranTargetBranch=matchReg.group(1)
|
||||||
|
ldpc.ranTargetBranch=matchReg.group(1)
|
||||||
|
CONTAINERS.ranTargetBranch=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBIPAddress=(.+)$|^\-\-eNB[1-2]IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNBIPAddress=matchReg.group(1)
|
||||||
|
ldpc.eNBIpAddr=matchReg.group(1)
|
||||||
|
CONTAINERS.eNBIPAddress=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB1IPAddress=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB1IPAddress=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB2IPAddress=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB2IPAddress=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBUserName=(.+)$|^\-\-eNB[1-2]UserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNBUserName=matchReg.group(1)
|
||||||
|
ldpc.eNBUserName=matchReg.group(1)
|
||||||
|
CONTAINERS.eNBUserName=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB1UserName=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB1UserName=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB2UserName=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB2UserName=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBPassword=(.+)$|^\-\-eNB[1-2]Password=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNBPassword=matchReg.group(1)
|
||||||
|
ldpc.eNBPassWord=matchReg.group(1)
|
||||||
|
CONTAINERS.eNBPassword=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB1Password=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB1Password=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB2Password=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB2Password=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNBSourceCodePath=(.+)$|^\-\-eNB[1-2]SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
if re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNBSourceCodePath=matchReg.group(1)
|
||||||
|
ldpc.eNBSourceCodePath=matchReg.group(1)
|
||||||
|
CONTAINERS.eNBSourceCodePath=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB1SourceCodePath=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB1SourceCodePath=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
RAN.eNB2SourceCodePath=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB2SourceCodePath=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
EPC.IPAddress=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
EPC.UserName=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
EPC.Password=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
EPC.SourceCodePath=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
if re.match('OAI', matchReg.group(1), re.IGNORECASE) or re.match('ltebox', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-CUPS', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-Docker', matchReg.group(1), re.IGNORECASE):
|
||||||
|
EPC.Type=matchReg.group(1)
|
||||||
|
else:
|
||||||
|
sys.exit('Invalid EPC Type: ' + matchReg.group(1) + ' -- (should be OAI or ltebox or OAI-Rel14-CUPS or OAI-Rel14-Docker)')
|
||||||
|
elif re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
EPC.ContainerPrefix=matchReg.group(1)
|
||||||
|
elif re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ADBIPAddress = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ADBUserName = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
if re.match('centralized', matchReg.group(1), re.IGNORECASE) or re.match('distributed', matchReg.group(1), re.IGNORECASE):
|
||||||
|
if re.match('distributed', matchReg.group(1), re.IGNORECASE):
|
||||||
|
CiTestObj.ADBCentralized = False
|
||||||
|
else:
|
||||||
|
CiTestObj.ADBCentralized = True
|
||||||
|
else:
|
||||||
|
sys.exit('Invalid ADB Type: ' + matchReg.group(1) + ' -- (should be centralized or distributed)')
|
||||||
|
elif re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.ADBPassword = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.testXMLfiles.append(matchReg.group(1))
|
||||||
|
HTML.testXMLfiles.append(matchReg.group(1))
|
||||||
|
HTML.nbTestXMLfiles=HTML.nbTestXMLfiles+1
|
||||||
|
elif re.match('^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.UEIPAddress = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.UEUserName = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.UEPassword = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
CiTestObj.UESourceCodePath = matchReg.group(1)
|
||||||
|
elif re.match('^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE):
|
||||||
|
matchReg = re.match('^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE)
|
||||||
|
finalStatus = matchReg.group(1)
|
||||||
|
if ((finalStatus == 'true') or (finalStatus == 'True')):
|
||||||
|
CiTestObj.finalStatus = True
|
||||||
|
else:
|
||||||
|
HELP.GenericHelp(CONST.Version)
|
||||||
|
sys.exit('Invalid Parameter: ' + myArgv)
|
||||||
|
|
||||||
|
return py_param_file_present, py_params, mode
|
||||||
Executable
+83
@@ -0,0 +1,83 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
Created on Tue Jul 7 23:04:51 2020
|
||||||
|
|
||||||
|
@author: hardy
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
import sys
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
f_yaml=sys.argv[1]
|
||||||
|
f_sh=sys.argv[2]
|
||||||
|
#filename='py_params_template.yaml'
|
||||||
|
with open(f_yaml,'r') as file:
|
||||||
|
# The FullLoader parameter handles the conversion from YAML
|
||||||
|
# scalar values to Python the dictionary format
|
||||||
|
print('Loading '+f_yaml)
|
||||||
|
params = yaml.load(file,Loader=yaml.FullLoader)
|
||||||
|
|
||||||
|
|
||||||
|
with open(f_sh,'w') as f:
|
||||||
|
f.write('#!/bin/sh\n')
|
||||||
|
for i in range (0, len(params['steps'])):
|
||||||
|
step=params['steps'][i].split(',')
|
||||||
|
mode=step[0]
|
||||||
|
f_xml=step[1]
|
||||||
|
line='python3 main.py ' + \
|
||||||
|
'--mode='+ mode + ' ' + \
|
||||||
|
'--ranRepository=' + params['ranRepository'] + ' ' + \
|
||||||
|
'--ranBranch=' + params['ranBranch'] + ' ' + \
|
||||||
|
'--ranCommitID=' + params['ranCommitID'] + ' ' + \
|
||||||
|
'--ranAllowMerge=' + params['ranAllowMerge'] + ' ' + \
|
||||||
|
'--ranTargetBranch=' + params['ranTargetBranch'] + ' ' + \
|
||||||
|
\
|
||||||
|
'--ADBIPAddress=' + params['ADB']['ADBIPAddress'] + ' ' + \
|
||||||
|
'--ADBUserName=' + params['ADB']['ADBUserName'] + ' ' + \
|
||||||
|
'--ADBPassword=' + params['ADB']['ADBPassword'] + ' ' + \
|
||||||
|
\
|
||||||
|
'--UEIPAddress=' + params['UE']['UEIPAddress'] + ' ' + \
|
||||||
|
'--UEUserName=' + params['UE']['UEUserName'] + ' ' + \
|
||||||
|
'--UEPassword=' + params['UE']['UEPassword'] + ' ' + \
|
||||||
|
'--UESourceCodePath=' + params['UE']['UESourceCodePath'] + ' ' + \
|
||||||
|
\
|
||||||
|
'--EPCIPAddress=' + params['EPC']['EPCIPAddress'] + ' ' + \
|
||||||
|
'--EPCUserName=' + params['EPC']['EPCUserName'] + ' ' + \
|
||||||
|
'--EPCPassword=' + params['EPC']['EPCPassword'] + ' ' + \
|
||||||
|
'--EPCSourceCodePath=' + params['EPC']['EPCSourceCodePath'] + ' ' + \
|
||||||
|
'--EPCType=' + params['EPC']['EPCType'] + ' ' + \
|
||||||
|
\
|
||||||
|
'--eNBIPAddress=' + params['RAN'][0]['eNBIPAddress'] + ' ' + \
|
||||||
|
'--eNBUserName=' + params['RAN'][0]['eNBUserName'] + ' ' + \
|
||||||
|
'--eNBPassword=' + params['RAN'][0]['eNBPassword'] + ' ' + \
|
||||||
|
'--eNBSourceCodePath=' + params['RAN'][0]['eNBSourceCodePath'] + ' ' + \
|
||||||
|
\
|
||||||
|
'--eNB1IPAddress=' + params['RAN'][1]['eNB1IPAddress'] + ' ' + \
|
||||||
|
'--eNB1UserName=' + params['RAN'][1]['eNB1UserName'] + ' ' + \
|
||||||
|
'--eNB1Password=' + params['RAN'][1]['eNB1Password'] + ' ' + \
|
||||||
|
'--eNB1SourceCodePath=' + params['RAN'][1]['eNB1SourceCodePath'] + ' '
|
||||||
|
if mode!="InitiateHtml":
|
||||||
|
line+='--XMLTestFile=' + f_xml
|
||||||
|
#if mode is InitiateHTML we have a special processing to mention all xml files from the list
|
||||||
|
#loop starting at 1 to avoid the xml file mentioned with InitiateHtml in yaml file (file is none)
|
||||||
|
else:
|
||||||
|
for i in range (1, len(params['steps'])):
|
||||||
|
step=params['steps'][i].split(',')
|
||||||
|
f_xml=step[1]
|
||||||
|
line+='--XMLTestFile=' + f_xml+' '
|
||||||
|
line+='\n'
|
||||||
|
print(line)
|
||||||
|
f.write(line)
|
||||||
|
subprocess.call(['chmod','777',f_sh])
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||
Executable
+46
@@ -0,0 +1,46 @@
|
|||||||
|
|
||||||
|
ranRepository : https://gitlab.eurecom.fr/oai/openairinterface5g.git
|
||||||
|
ranBranch : BRANCH_NAME
|
||||||
|
ranCommitID : COMMIT_ID
|
||||||
|
ranAllowMerge : 'true'
|
||||||
|
ranTargetBranch : develop
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- InitiateHtml,none
|
||||||
|
- TesteNB,xml_files/fr1_multi_node_build.xml
|
||||||
|
- TesteNB,xml_files/fr1_epc_start.xml
|
||||||
|
- TesteNB,xml_files/fr1_ran_ue_base.xml #ue toggle, nodes initialize, ue toggle, ping, nodes terminate
|
||||||
|
- TesteNB,xml_files/fr1_epc_closure.xml
|
||||||
|
|
||||||
|
|
||||||
|
ADB: #on Caracal
|
||||||
|
ADBIPAddress : 192.168.18.196
|
||||||
|
ADBUserName : oaici
|
||||||
|
ADBPassword : KkexF6CErOi1fNuebCPsuIVK
|
||||||
|
|
||||||
|
RAN:
|
||||||
|
- eNBIPAddress : 192.168.18.199 #eNB on Minimassive
|
||||||
|
eNBUserName : oaicicd
|
||||||
|
eNBPassword : HzB*nkryaITdVd08TKlT#2Z5a!7M#~qn
|
||||||
|
eNBSourceCodePath : /tmp/CI-FR1-eNB
|
||||||
|
- eNB1IPAddress : 192.168.18.198 #gNB on Mozart
|
||||||
|
eNB1UserName : oaicicd
|
||||||
|
eNB1Password : 7zkDOFgh@w3HvRBMPTMh@BAx
|
||||||
|
eNB1SourceCodePath : /tmp/CI-FR1-gNB
|
||||||
|
|
||||||
|
|
||||||
|
EPC: #on Nikaia
|
||||||
|
EPCIPAddress : 192.168.18.99
|
||||||
|
EPCUserName : nikaia
|
||||||
|
EPCPassword : linux
|
||||||
|
EPCSourceCodePath : /tmp/CI-FR1-EPC
|
||||||
|
EPCType : ltebox
|
||||||
|
|
||||||
|
|
||||||
|
UE:
|
||||||
|
UEIPAddress : none
|
||||||
|
UEUserName : none
|
||||||
|
UEPassword : none
|
||||||
|
UESourceCodePath : none
|
||||||
|
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ if [ $# -eq 0 ]
|
|||||||
then
|
then
|
||||||
echo " ---- Checking the whole repository ----"
|
echo " ---- Checking the whole repository ----"
|
||||||
echo ""
|
echo ""
|
||||||
NB_FILES_TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt --recursive *.c *.h | grep -c Formatted `
|
NB_FILES_TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt --recursive *.c *.h | grep -c Formatted || true`
|
||||||
echo "Nb Files that do NOT follow OAI rules: $NB_FILES_TO_FORMAT"
|
echo "Nb Files that do NOT follow OAI rules: $NB_FILES_TO_FORMAT"
|
||||||
echo $NB_FILES_TO_FORMAT > ./oai_rules_result.txt
|
echo $NB_FILES_TO_FORMAT > ./oai_rules_result.txt
|
||||||
|
|
||||||
@@ -67,17 +67,17 @@ then
|
|||||||
awk '/#[ \t]*ifndef/ { gsub("^.*ifndef *",""); if (names[$1]!="") print "files with same {define ", FILENAME, names[$1]; names[$1]=FILENAME } /#[ \t]*define/ { gsub("^.*define *",""); if(names[$1]!=FILENAME) print "error in declaration", FILENAME, $1, names[$1]; nextfile }' `find openair* common targets executables -name *.h |grep -v LFDS` > header-files-w-incorrect-define.txt
|
awk '/#[ \t]*ifndef/ { gsub("^.*ifndef *",""); if (names[$1]!="") print "files with same {define ", FILENAME, names[$1]; names[$1]=FILENAME } /#[ \t]*define/ { gsub("^.*define *",""); if(names[$1]!=FILENAME) print "error in declaration", FILENAME, $1, names[$1]; nextfile }' `find openair* common targets executables -name *.h |grep -v LFDS` > header-files-w-incorrect-define.txt
|
||||||
|
|
||||||
# Testing if explicit GNU GPL license banner
|
# Testing if explicit GNU GPL license banner
|
||||||
egrep -irl --exclude-dir=.git --include=*.cpp --include=*.c --include=*.h "General Public License" . > files-w-gnu-gpl-license-banner.txt
|
egrep -irl --exclude-dir=.git --include=*.cpp --include=*.c --include=*.h "General Public License" . | egrep -v "openair3/NAS/COMMON/milenage.h" > files-w-gnu-gpl-license-banner.txt
|
||||||
|
|
||||||
# Looking at exotic/suspect banner
|
# Looking at exotic/suspect banner
|
||||||
LIST_OF_FILES_W_BANNER=`egrep -irl --exclude-dir=.git --include=*.cpp --include=*.c --include=*.h "Copyright|copyleft" .`
|
LIST_OF_FILES_W_BANNER=`egrep -irl --exclude-dir=.git --include=*.cpp --include=*.c --include=*.h "Copyright|copyleft" .`
|
||||||
if [ -f ./files-w-suspect-banner.txt ]; then rm -f ./files-w-suspect-banner.txt; fi
|
if [ -f ./files-w-suspect-banner.txt ]; then rm -f ./files-w-suspect-banner.txt; fi
|
||||||
for FILE in $LIST_OF_FILES_W_BANNER
|
for FILE in $LIST_OF_FILES_W_BANNER
|
||||||
do
|
do
|
||||||
IS_NFAPI=`echo $FILE | egrep -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext"`
|
IS_NFAPI=`echo $FILE | egrep -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext" || true`
|
||||||
IS_OAI_LICENCE_PRESENT=`egrep -c "OAI Public License" $FILE`
|
IS_OAI_LICENCE_PRESENT=`egrep -c "OAI Public License" $FILE || true`
|
||||||
IS_BSD_LICENCE_PRESENT=`egrep -c "the terms of the BSD Licence" $FILE`
|
IS_BSD_LICENCE_PRESENT=`egrep -c "the terms of the BSD Licence" $FILE || true`
|
||||||
IS_EXCEPTION=`echo $FILE | egrep -c "common/utils/collection/tree.h|common/utils/collection/queue.h|common/utils/itti_analyzer/common/queue.h|openair3/UTILS/tree.h|openair3/UTILS/queue.h"`
|
IS_EXCEPTION=`echo $FILE | egrep -c "common/utils/collection/tree.h|common/utils/collection/queue.h|common/utils/itti_analyzer/common/queue.h|openair3/UTILS/tree.h|openair3/UTILS/queue.h|openair3/GTPV1-U/nw-gtpv1u|openair2/UTIL/OPT/ws_|openair3/NAS/COMMON/milenage.h" || true`
|
||||||
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ]
|
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ]
|
||||||
then
|
then
|
||||||
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
|
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
|
||||||
@@ -178,7 +178,7 @@ do
|
|||||||
EXT="${filename##*.}"
|
EXT="${filename##*.}"
|
||||||
if [ $EXT = "c" ] || [ $EXT = "h" ] || [ $EXT = "cpp" ] || [ $EXT = "hpp" ]
|
if [ $EXT = "c" ] || [ $EXT = "h" ] || [ $EXT = "cpp" ] || [ $EXT = "hpp" ]
|
||||||
then
|
then
|
||||||
TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt $FULLFILE | grep -c Formatted `
|
TO_FORMAT=`astyle --dry-run --options=ci-scripts/astyle-options.txt $FULLFILE | grep -c Formatted || true`
|
||||||
NB_TO_FORMAT=$((NB_TO_FORMAT + TO_FORMAT))
|
NB_TO_FORMAT=$((NB_TO_FORMAT + TO_FORMAT))
|
||||||
if [ $TO_FORMAT -ne 0 ]
|
if [ $TO_FORMAT -ne 0 ]
|
||||||
then
|
then
|
||||||
@@ -186,20 +186,24 @@ do
|
|||||||
echo $FULLFILE >> ./oai_rules_result_list.txt
|
echo $FULLFILE >> ./oai_rules_result_list.txt
|
||||||
fi
|
fi
|
||||||
# Testing if explicit GNU GPL license banner
|
# Testing if explicit GNU GPL license banner
|
||||||
egrep -i "General Public License" $FULLFILE >> files-w-gnu-gpl-license-banner.txt
|
GNU_EXCEPTION=`echo $FULLFILE | egrep -c "openair3/NAS/COMMON/milenage.h" || true`
|
||||||
|
if [ $GNU_EXCEPTION -eq 0 ]
|
||||||
|
then
|
||||||
|
egrep -il "General Public License" $FULLFILE >> files-w-gnu-gpl-license-banner.txt
|
||||||
|
fi
|
||||||
# Looking at exotic/suspect banner
|
# Looking at exotic/suspect banner
|
||||||
IS_BANNER=`egrep -i -c "Copyright|copyleft" $FULLFILE`
|
IS_BANNER=`egrep -i -c "Copyright|copyleft" $FULLFILE || true`
|
||||||
if [ $IS_BANNER -ne 0 ]
|
if [ $IS_BANNER -ne 0 ]
|
||||||
then
|
then
|
||||||
IS_NFAPI=`echo $FULLFILE | egrep -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext"`
|
IS_NFAPI=`echo $FULLFILE | egrep -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext" || true`
|
||||||
IS_OAI_LICENCE_PRESENT=`egrep -c "OAI Public License" $FULLFILE`
|
IS_OAI_LICENCE_PRESENT=`egrep -c "OAI Public License" $FULLFILE || true`
|
||||||
IS_BSD_LICENCE_PRESENT=`egrep -c "the terms of the BSD Licence" $FULLFILE`
|
IS_BSD_LICENCE_PRESENT=`egrep -c "the terms of the BSD Licence" $FULLFILE || true`
|
||||||
IS_EXCEPTION=`echo $FILE | egrep -c "common/utils/collection/tree.h|common/utils/collection/queue.h|common/utils/itti_analyzer/common/queue.h|openair3/UTILS/tree.h|openair3/UTILS/queue.h"`
|
IS_EXCEPTION=`echo $FULLFILE | egrep -c "common/utils/collection/tree.h|common/utils/collection/queue.h|common/utils/itti_analyzer/common/queue.h|openair3/UTILS/tree.h|openair3/UTILS/queue.h|openair3/GTPV1-U/nw-gtpv1u|openair2/UTIL/OPT/ws_|openair3/NAS/COMMON/milenage.h" || true`
|
||||||
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ]
|
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ]
|
||||||
then
|
then
|
||||||
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
|
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
|
||||||
then
|
then
|
||||||
echo $FILE >> ./files-w-suspect-banner.txt
|
echo $FULLFILE >> ./files-w-suspect-banner.txt
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -0,0 +1,410 @@
|
|||||||
|
#/*
|
||||||
|
# * 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
|
||||||
|
# */
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
# Python for CI of OAI-eNB + COTS-UE
|
||||||
|
#
|
||||||
|
# Required Python Version
|
||||||
|
# Python 3.x
|
||||||
|
#
|
||||||
|
# Required Python Package
|
||||||
|
# pexpect
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
# Import
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
import sys # arg
|
||||||
|
import re # reg
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
from multiprocessing import Process, Lock, SimpleQueue
|
||||||
|
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
# OAI Testing modules
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
import sshconnection as SSH
|
||||||
|
import helpreadme as HELP
|
||||||
|
import constants as CONST
|
||||||
|
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
# Class Declaration
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
class Containerize():
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
|
||||||
|
self.ranRepository = ''
|
||||||
|
self.ranBranch = ''
|
||||||
|
self.ranAllowMerge = False
|
||||||
|
self.ranCommitID = ''
|
||||||
|
self.ranTargetBranch = ''
|
||||||
|
self.eNBIPAddress = ''
|
||||||
|
self.eNBUserName = ''
|
||||||
|
self.eNBPassword = ''
|
||||||
|
self.eNBSourceCodePath = ''
|
||||||
|
self.eNB1IPAddress = ''
|
||||||
|
self.eNB1UserName = ''
|
||||||
|
self.eNB1Password = ''
|
||||||
|
self.eNB1SourceCodePath = ''
|
||||||
|
self.eNB2IPAddress = ''
|
||||||
|
self.eNB2UserName = ''
|
||||||
|
self.eNB2Password = ''
|
||||||
|
self.eNB2SourceCodePath = ''
|
||||||
|
self.forcedWorkspaceCleanup = False
|
||||||
|
self.imageKind = ''
|
||||||
|
self.eNB_instance = 0
|
||||||
|
self.eNB_serverId = ['', '', '']
|
||||||
|
self.yamlPath = ['', '', '']
|
||||||
|
self.eNB_logFile = ['', '', '']
|
||||||
|
|
||||||
|
self.testCase_id = ''
|
||||||
|
|
||||||
|
self.flexranCtrlDeployed = False
|
||||||
|
self.flexranCtrlIpAddress = ''
|
||||||
|
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
# Container management functions
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
|
||||||
|
def BuildImage(self, HTML):
|
||||||
|
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
|
||||||
|
HELP.GenericHelp(CONST.Version)
|
||||||
|
sys.exit('Insufficient Parameter')
|
||||||
|
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||||
|
lIpAddr = self.eNBIPAddress
|
||||||
|
lUserName = self.eNBUserName
|
||||||
|
lPassWord = self.eNBPassword
|
||||||
|
lSourcePath = self.eNBSourceCodePath
|
||||||
|
elif self.eNB_serverId[self.eNB_instance] == '1':
|
||||||
|
lIpAddr = self.eNB1IPAddress
|
||||||
|
lUserName = self.eNB1UserName
|
||||||
|
lPassWord = self.eNB1Password
|
||||||
|
lSourcePath = self.eNB1SourceCodePath
|
||||||
|
elif self.eNB_serverId[self.eNB_instance] == '2':
|
||||||
|
lIpAddr = self.eNB2IPAddress
|
||||||
|
lUserName = self.eNB2UserName
|
||||||
|
lPassWord = self.eNB2Password
|
||||||
|
lSourcePath = self.eNB2SourceCodePath
|
||||||
|
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
||||||
|
HELP.GenericHelp(CONST.Version)
|
||||||
|
sys.exit('Insufficient Parameter')
|
||||||
|
logging.debug('Building on server: ' + lIpAddr)
|
||||||
|
mySSH = SSH.SSHConnection()
|
||||||
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
|
|
||||||
|
imageNames = []
|
||||||
|
result = re.search('eNB', self.imageKind)
|
||||||
|
# Creating a tupple with the imageName and the DockerFile prefix pattern
|
||||||
|
if result is not None:
|
||||||
|
imageNames.append(('oai-enb', 'eNB'))
|
||||||
|
else:
|
||||||
|
result = re.search('gNB', self.imageKind)
|
||||||
|
if result is not None:
|
||||||
|
imageNames.append(('oai-gnb', 'gNB'))
|
||||||
|
else:
|
||||||
|
result = re.search('all', self.imageKind)
|
||||||
|
if result is not None:
|
||||||
|
imageNames.append(('oai-enb', 'eNB'))
|
||||||
|
imageNames.append(('oai-gnb', 'gNB'))
|
||||||
|
imageNames.append(('oai-lte-ue', 'lteUE'))
|
||||||
|
imageNames.append(('oai-nr-ue', 'nrUE'))
|
||||||
|
if len(imageNames) == 0:
|
||||||
|
imageNames.append(('oai-enb', 'eNB'))
|
||||||
|
# Workaround for some servers, we need to erase completely the workspace
|
||||||
|
if self.forcedWorkspaceCleanup:
|
||||||
|
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf ' + lSourcePath, '\$', 15)
|
||||||
|
self.testCase_id = HTML.testCase_id
|
||||||
|
# on RedHat/CentOS .git extension is mandatory
|
||||||
|
result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository)
|
||||||
|
if result is not None:
|
||||||
|
full_ran_repo_name = self.ranRepository
|
||||||
|
else:
|
||||||
|
full_ran_repo_name = self.ranRepository + '.git'
|
||||||
|
mySSH.command('mkdir -p ' + lSourcePath, '\$', 5)
|
||||||
|
mySSH.command('cd ' + lSourcePath, '\$', 5)
|
||||||
|
mySSH.command('if [ ! -e .git ]; then stdbuf -o0 git clone ' + full_ran_repo_name + ' .; else stdbuf -o0 git fetch --prune; fi', '\$', 600)
|
||||||
|
# Raphael: here add a check if git clone or git fetch went smoothly
|
||||||
|
mySSH.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
|
||||||
|
mySSH.command('git config user.name "OAI Jenkins"', '\$', 5)
|
||||||
|
|
||||||
|
mySSH.command('echo ' + lPassWord + ' | sudo -S git clean -x -d -ff', '\$', 30)
|
||||||
|
mySSH.command('mkdir -p cmake_targets/log', '\$', 5)
|
||||||
|
# if the commit ID is provided use it to point to it
|
||||||
|
if self.ranCommitID != '':
|
||||||
|
mySSH.command('git checkout -f ' + self.ranCommitID, '\$', 5)
|
||||||
|
# if the branch is not develop, then it is a merge request and we need to do
|
||||||
|
# the potential merge. Note that merge conflicts should already been checked earlier
|
||||||
|
imageTag = 'develop'
|
||||||
|
if (self.ranAllowMerge):
|
||||||
|
imageTag = 'ci-temp'
|
||||||
|
if self.ranTargetBranch == '':
|
||||||
|
if (self.ranBranch != 'develop') and (self.ranBranch != 'origin/develop'):
|
||||||
|
mySSH.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5)
|
||||||
|
else:
|
||||||
|
logging.debug('Merging with the target branch: ' + self.ranTargetBranch)
|
||||||
|
mySSH.command('git merge --ff origin/' + self.ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 5)
|
||||||
|
# Let's remove any previous run artifacts if still there
|
||||||
|
mySSH.command('docker image prune --force', '\$', 5)
|
||||||
|
mySSH.command('docker image rm ran-build:' + imageTag, '\$', 5)
|
||||||
|
for image,pattern in imageNames:
|
||||||
|
mySSH.command('docker image rm ' + image + ':' + imageTag, '\$', 5)
|
||||||
|
# Build the shared image
|
||||||
|
mySSH.command('docker build --target ran-build --tag ran-build:' + imageTag + ' --file docker/Dockerfile.ran.ubuntu18 --build-arg NEEDED_GIT_PROXY="http://proxy.eurecom.fr:8080" . > cmake_targets/log/ran-build.log 2>&1', '\$', 800)
|
||||||
|
# Build the target image(s)
|
||||||
|
previousImage='ran-build:' + imageTag
|
||||||
|
danglingShaOnes=[]
|
||||||
|
for image,pattern in imageNames:
|
||||||
|
# the archived Dockerfiles have "ran-build:latest" as base image
|
||||||
|
# we need to update them with proper tag
|
||||||
|
mySSH.command('sed -i -e "s#ran-build:latest#ran-build:' + imageTag + '#" docker/Dockerfile.' + pattern + '.ubuntu18', '\$', 5)
|
||||||
|
mySSH.command('docker build --target ' + image + ' --tag ' + image + ':' + imageTag + ' --file docker/Dockerfile.' + pattern + '.ubuntu18 . > cmake_targets/log/' + image + '.log 2>&1', '\$', 600)
|
||||||
|
# Retrieving the dangling image(s) for the log collection
|
||||||
|
mySSH.command('docker images --filter "dangling=true" --filter "since=' + previousImage + '" -q | sed -e "s#^#sha=#"', '\$', 5)
|
||||||
|
result = re.search('sha=(?P<imageShaOne>[a-zA-Z0-9\-\_]+)', mySSH.getBefore())
|
||||||
|
if result is not None:
|
||||||
|
danglingShaOnes.append((image, result.group('imageShaOne')))
|
||||||
|
previousImage=image + ':' + imageTag
|
||||||
|
|
||||||
|
imageTag = 'ci-temp'
|
||||||
|
# First verify if images were properly created.
|
||||||
|
status = True
|
||||||
|
mySSH.command('docker image inspect --format=\'Size = {{.Size}} bytes\' ran-build:' + imageTag, '\$', 5)
|
||||||
|
if mySSH.getBefore().count('No such object') != 0:
|
||||||
|
logging.error('Could not build properly ran-build')
|
||||||
|
status = False
|
||||||
|
else:
|
||||||
|
result = re.search('Size = (?P<size>[0-9\-]+) bytes', mySSH.getBefore())
|
||||||
|
if result is not None:
|
||||||
|
imageSize = float(result.group('size'))
|
||||||
|
imageSize = imageSize / 1000
|
||||||
|
if imageSize < 1000:
|
||||||
|
logging.debug('\u001B[1m ran-build size is ' + ('%.0f' % imageSize) + ' kbytes\u001B[0m')
|
||||||
|
else:
|
||||||
|
imageSize = imageSize / 1000
|
||||||
|
if imageSize < 1000:
|
||||||
|
logging.debug('\u001B[1m ran-build size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
|
||||||
|
else:
|
||||||
|
imageSize = imageSize / 1000
|
||||||
|
logging.debug('\u001B[1m ran-build size is ' + ('%.3f' % imageSize) + ' Gbytes\u001B[0m')
|
||||||
|
else:
|
||||||
|
logging.debug('ran-build size is unknown')
|
||||||
|
for image,pattern in imageNames:
|
||||||
|
mySSH.command('docker image inspect --format=\'Size = {{.Size}} bytes\' ' + image + ':' + imageTag, '\$', 5)
|
||||||
|
if mySSH.getBefore().count('No such object') != 0:
|
||||||
|
logging.error('Could not build properly ' + image)
|
||||||
|
status = False
|
||||||
|
else:
|
||||||
|
result = re.search('Size = (?P<size>[0-9\-]+) bytes', mySSH.getBefore())
|
||||||
|
if result is not None:
|
||||||
|
imageSize = float(result.group('size'))
|
||||||
|
imageSize = imageSize / 1000
|
||||||
|
if imageSize < 1000:
|
||||||
|
logging.debug('\u001B[1m ' + image + ' size is ' + ('%.0f' % imageSize) + ' kbytes\u001B[0m')
|
||||||
|
else:
|
||||||
|
imageSize = imageSize / 1000
|
||||||
|
if imageSize < 1000:
|
||||||
|
logging.debug('\u001B[1m ' + image + ' size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
|
||||||
|
else:
|
||||||
|
imageSize = imageSize / 1000
|
||||||
|
logging.debug('\u001B[1m ' + image + ' size is ' + ('%.3f' % imageSize) + ' Gbytes\u001B[0m')
|
||||||
|
else:
|
||||||
|
logging.debug('ran-build size is unknown')
|
||||||
|
if not status:
|
||||||
|
mySSH.close()
|
||||||
|
logging.error('\u001B[1m Building OAI Images Failed\u001B[0m')
|
||||||
|
HTML.CreateHtmlTestRow(self.imageKind, 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
|
HTML.CreateHtmlTabFooter(False)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Recover build logs, for the moment only possible when build is successful
|
||||||
|
mySSH.command('docker create --name test ran-build:' + imageTag, '\$', 5)
|
||||||
|
mySSH.command('mkdir -p cmake_targets/log/ran-build', '\$', 5)
|
||||||
|
mySSH.command('docker cp test:/oai-ran/cmake_targets/log/. cmake_targets/log/ran-build', '\$', 5)
|
||||||
|
mySSH.command('docker rm -f test', '\$', 5)
|
||||||
|
for image,shaone in danglingShaOnes:
|
||||||
|
mySSH.command('mkdir -p cmake_targets/log/' + image, '\$', 5)
|
||||||
|
mySSH.command('docker create --name test ' + shaone, '\$', 5)
|
||||||
|
mySSH.command('docker cp test:/oai-ran/cmake_targets/log/. cmake_targets/log/' + image, '\$', 5)
|
||||||
|
mySSH.command('docker rm -f test', '\$', 5)
|
||||||
|
mySSH.command('docker image prune --force', '\$', 5)
|
||||||
|
mySSH.command('cd cmake_targets', '\$', 5)
|
||||||
|
mySSH.command('mkdir -p build_log_' + self.testCase_id, '\$', 5)
|
||||||
|
mySSH.command('mv log/* ' + 'build_log_' + self.testCase_id, '\$', 5)
|
||||||
|
mySSH.close()
|
||||||
|
|
||||||
|
logging.info('\u001B[1m Building OAI Image(s) Pass\u001B[0m')
|
||||||
|
HTML.CreateHtmlTestRow(self.imageKind, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
|
||||||
|
def DeployObject(self, HTML, EPC):
|
||||||
|
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||||
|
lIpAddr = self.eNBIPAddress
|
||||||
|
lUserName = self.eNBUserName
|
||||||
|
lPassWord = self.eNBPassword
|
||||||
|
lSourcePath = self.eNBSourceCodePath
|
||||||
|
elif self.eNB_serverId[self.eNB_instance] == '1':
|
||||||
|
lIpAddr = self.eNB1IPAddress
|
||||||
|
lUserName = self.eNB1UserName
|
||||||
|
lPassWord = self.eNB1Password
|
||||||
|
lSourcePath = self.eNB1SourceCodePath
|
||||||
|
elif self.eNB_serverId[self.eNB_instance] == '2':
|
||||||
|
lIpAddr = self.eNB2IPAddress
|
||||||
|
lUserName = self.eNB2UserName
|
||||||
|
lPassWord = self.eNB2Password
|
||||||
|
lSourcePath = self.eNB2SourceCodePath
|
||||||
|
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
||||||
|
HELP.GenericHelp(CONST.Version)
|
||||||
|
sys.exit('Insufficient Parameter')
|
||||||
|
logging.debug('\u001B[1m Deploying OAI Object on server: ' + lIpAddr + '\u001B[0m')
|
||||||
|
mySSH = SSH.SSHConnection()
|
||||||
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
|
# Putting the CPUs in a good state, we do that only on a few servers
|
||||||
|
mySSH.command('hostname', '\$', 5)
|
||||||
|
result = re.search('obelix|asterix', mySSH.getBefore())
|
||||||
|
if result is not None:
|
||||||
|
mySSH.command('if command -v cpupower &> /dev/null; then echo ' + lPassWord + ' | sudo -S cpupower idle-set -D 0; fi', '\$', 5)
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
|
||||||
|
mySSH.command('cp docker-compose.yml ci-docker-compose.yml', '\$', 5)
|
||||||
|
imageTag = 'develop'
|
||||||
|
if (self.ranAllowMerge):
|
||||||
|
imageTag = 'ci-temp'
|
||||||
|
mySSH.command('sed -i -e "s/image: oai-enb:latest/image: oai-enb:' + imageTag + '/" ci-docker-compose.yml', '\$', 2)
|
||||||
|
localMmeIpAddr = EPC.MmeIPAddress
|
||||||
|
mySSH.command('sed -i -e "s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/" ci-docker-compose.yml', '\$', 2)
|
||||||
|
if self.flexranCtrlDeployed:
|
||||||
|
mySSH.command('sed -i -e \'s/FLEXRAN_ENABLED:.*/FLEXRAN_ENABLED: "yes"/\' ci-docker-compose.yml', '\$', 2)
|
||||||
|
mySSH.command('sed -i -e "s/CI_FLEXRAN_CTL_IP_ADDR/' + self.flexranCtrlIpAddress + '/" ci-docker-compose.yml', '\$', 2)
|
||||||
|
else:
|
||||||
|
mySSH.command('sed -i -e "s/FLEXRAN_ENABLED:.*$/FLEXRAN_ENABLED: \"no\"/" ci-docker-compose.yml', '\$', 2)
|
||||||
|
mySSH.command('sed -i -e "s/CI_FLEXRAN_CTL_IP_ADDR/127.0.0.1/" ci-docker-compose.yml', '\$', 2)
|
||||||
|
# Currently support only one
|
||||||
|
mySSH.command('docker-compose --file ci-docker-compose.yml config --services | sed -e "s@^@service=@"', '\$', 2)
|
||||||
|
result = re.search('service=(?P<svc_name>[a-zA-Z0-9\_]+)', mySSH.getBefore())
|
||||||
|
if result is not None:
|
||||||
|
svcName = result.group('svc_name')
|
||||||
|
mySSH.command('docker-compose --file ci-docker-compose.yml up -d ' + svcName, '\$', 2)
|
||||||
|
|
||||||
|
# Checking Status
|
||||||
|
mySSH.command('docker-compose --file ci-docker-compose.yml config', '\$', 5)
|
||||||
|
result = re.search('container_name: (?P<container_name>[a-zA-Z0-9\-\_]+)', mySSH.getBefore())
|
||||||
|
unhealthyNb = 0
|
||||||
|
healthyNb = 0
|
||||||
|
startingNb = 0
|
||||||
|
containerName = ''
|
||||||
|
if result is not None:
|
||||||
|
containerName = result.group('container_name')
|
||||||
|
time.sleep(5)
|
||||||
|
cnt = 0
|
||||||
|
while (cnt < 3):
|
||||||
|
mySSH.command('docker inspect --format=\'{{.State.Health.Status}}\' ' + containerName, '\$', 5)
|
||||||
|
unhealthyNb = mySSH.getBefore().count('unhealthy')
|
||||||
|
healthyNb = mySSH.getBefore().count('healthy') - unhealthyNb
|
||||||
|
startingNb = mySSH.getBefore().count('starting')
|
||||||
|
if healthyNb == 1:
|
||||||
|
cnt = 10
|
||||||
|
else:
|
||||||
|
time.sleep(10)
|
||||||
|
cnt += 1
|
||||||
|
logging.debug(' -- ' + str(healthyNb) + ' healthy container(s)')
|
||||||
|
logging.debug(' -- ' + str(unhealthyNb) + ' unhealthy container(s)')
|
||||||
|
logging.debug(' -- ' + str(startingNb) + ' still starting container(s)')
|
||||||
|
|
||||||
|
status = False
|
||||||
|
if healthyNb == 1:
|
||||||
|
cnt = 0
|
||||||
|
while (cnt < 20):
|
||||||
|
mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting"', '\$', 30)
|
||||||
|
result = re.search('got sync|Starting F1AP at CU', mySSH.getBefore())
|
||||||
|
if result is None:
|
||||||
|
time.sleep(6)
|
||||||
|
cnt += 1
|
||||||
|
else:
|
||||||
|
cnt = 100
|
||||||
|
status = True
|
||||||
|
logging.info('\u001B[1m Deploying OAI object Pass\u001B[0m')
|
||||||
|
time.sleep(10)
|
||||||
|
mySSH.close()
|
||||||
|
|
||||||
|
self.testCase_id = HTML.testCase_id
|
||||||
|
self.eNB_logFile[self.eNB_instance] = 'enb_' + self.testCase_id + '.log'
|
||||||
|
|
||||||
|
if status:
|
||||||
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
else:
|
||||||
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
|
|
||||||
|
def UndeployObject(self, HTML, RAN):
|
||||||
|
logging.info('\u001B[1m Undeploying OAI Object Pass\u001B[0m')
|
||||||
|
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||||
|
lIpAddr = self.eNBIPAddress
|
||||||
|
lUserName = self.eNBUserName
|
||||||
|
lPassWord = self.eNBPassword
|
||||||
|
lSourcePath = self.eNBSourceCodePath
|
||||||
|
elif self.eNB_serverId[self.eNB_instance] == '1':
|
||||||
|
lIpAddr = self.eNB1IPAddress
|
||||||
|
lUserName = self.eNB1UserName
|
||||||
|
lPassWord = self.eNB1Password
|
||||||
|
lSourcePath = self.eNB1SourceCodePath
|
||||||
|
elif self.eNB_serverId[self.eNB_instance] == '2':
|
||||||
|
lIpAddr = self.eNB2IPAddress
|
||||||
|
lUserName = self.eNB2UserName
|
||||||
|
lPassWord = self.eNB2Password
|
||||||
|
lSourcePath = self.eNB2SourceCodePath
|
||||||
|
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
||||||
|
HELP.GenericHelp(CONST.Version)
|
||||||
|
sys.exit('Insufficient Parameter')
|
||||||
|
logging.debug('\u001B[1m Deploying OAI Object on server: ' + lIpAddr + '\u001B[0m')
|
||||||
|
mySSH = SSH.SSHConnection()
|
||||||
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
|
mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
|
||||||
|
# Currently support only one
|
||||||
|
mySSH.command('docker-compose --file ci-docker-compose.yml config', '\$', 5)
|
||||||
|
result = re.search('container_name: (?P<container_name>[a-zA-Z0-9\-\_]+)', mySSH.getBefore())
|
||||||
|
if result is not None:
|
||||||
|
containerName = result.group('container_name')
|
||||||
|
mySSH.command('docker kill --signal INT ' + containerName, '\$', 30)
|
||||||
|
time.sleep(5)
|
||||||
|
mySSH.command('docker logs ' + containerName + ' > ' + lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '\$', 30)
|
||||||
|
mySSH.command('docker rm -f ' + containerName, '\$', 30)
|
||||||
|
|
||||||
|
# Putting the CPUs back in a idle state, we do that only on a few servers
|
||||||
|
mySSH.command('hostname', '\$', 5)
|
||||||
|
result = re.search('obelix|asterix', mySSH.getBefore())
|
||||||
|
if result is not None:
|
||||||
|
mySSH.command('if command -v cpupower &> /dev/null; then echo ' + lPassWord + ' | sudo -S cpupower idle-set -E; fi', '\$', 5)
|
||||||
|
mySSH.close()
|
||||||
|
|
||||||
|
# Analyzing log file!
|
||||||
|
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '.')
|
||||||
|
nodeB_prefix = 'e'
|
||||||
|
if (copyin_res == -1):
|
||||||
|
HTML.htmleNBFailureMsg='Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!'
|
||||||
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
|
||||||
|
else:
|
||||||
|
logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + self.eNB_logFile[self.eNB_instance])
|
||||||
|
logStatus = RAN.AnalyzeLogFile_eNB(self.eNB_logFile[self.eNB_instance], HTML)
|
||||||
|
if (logStatus < 0):
|
||||||
|
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
|
||||||
|
else:
|
||||||
|
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
# * 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
|
||||||
|
# */
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
# Python for CI of OAI-eNB + COTS-UE
|
||||||
|
#
|
||||||
|
# Required Python Version
|
||||||
|
# Python 3.x
|
||||||
|
#
|
||||||
|
# Required Python Package
|
||||||
|
# pexpect
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#to use isfile
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
#to use logging.info()
|
||||||
|
import logging
|
||||||
|
#to create a SSH object locally in the methods
|
||||||
|
import sshconnection
|
||||||
|
#time.sleep
|
||||||
|
import time
|
||||||
|
#to load cots_ue dictionary
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
class CotsUe:
|
||||||
|
def __init__(self,ADBIPAddr,ADBUserName,ADBPassWord):
|
||||||
|
self.cots_id = '' #cots id from yaml oppo, s10 etc...
|
||||||
|
self.ADBIPAddr = ADBIPAddr
|
||||||
|
self.ADBUserName = ADBUserName
|
||||||
|
self.ADBPassWord = ADBPassWord
|
||||||
|
self.cots_run_mode = '' #on of off to toggle airplane mode on/off
|
||||||
|
self.__cots_cde_dict_file = 'cots_ue_ctl.yaml'
|
||||||
|
self.__SetAirplaneRetry = 3
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------$
|
||||||
|
#PUBLIC Methods$
|
||||||
|
#-----------------$
|
||||||
|
|
||||||
|
def Check_Airplane(self):
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.ADBIPAddr, self.ADBUserName, self.ADBPassWord)
|
||||||
|
status=mySSH.cde_check_value('adb shell settings get global airplane_mode_on ', ['0','1'],5)
|
||||||
|
mySSH.close()
|
||||||
|
return status
|
||||||
|
|
||||||
|
#simply check if the device id exists in the dictionary
|
||||||
|
#returns true if it exists, false otherwise
|
||||||
|
def Check_Exists(self,target_id):
|
||||||
|
#load cots commands dictionary
|
||||||
|
if (os.path.isfile(self.__cots_cde_dict_file)):
|
||||||
|
yaml_file=self.__cots_cde_dict_file
|
||||||
|
elif (os.path.isfile('ci-scripts/'+self.__cots_cde_dict_file)):
|
||||||
|
yaml_file='ci-scripts/'+self.__cots_cde_dict_file
|
||||||
|
else:
|
||||||
|
logging.error("COTS UE dictionary yaml file cannot be found")
|
||||||
|
sys.exit("COTS UE dictionary yaml file cannot be found")
|
||||||
|
|
||||||
|
#load cots commands dictionary
|
||||||
|
with open(yaml_file,'r') as file:
|
||||||
|
cots_ue_ctl = yaml.load(file,Loader=yaml.FullLoader)
|
||||||
|
#check if ue id is in the dictionary
|
||||||
|
if target_id in cots_ue_ctl:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def Set_Airplane(self, target_id, target_state_str):
|
||||||
|
#loading cots commands dictionary
|
||||||
|
|
||||||
|
if (os.path.isfile(self.__cots_cde_dict_file)):
|
||||||
|
yaml_file=self.__cots_cde_dict_file
|
||||||
|
elif (os.path.isfile('ci-scripts/'+self.__cots_cde_dict_file)):
|
||||||
|
yaml_file='ci-scripts/'+self.__cots_cde_dict_file
|
||||||
|
else:
|
||||||
|
logging.error("COTS UE dictionary yaml file cannot be found")
|
||||||
|
sys.exit("COTS UE dictionary yaml file cannot be found")
|
||||||
|
|
||||||
|
#load cots commands dictionary
|
||||||
|
with open(yaml_file,'r') as file:
|
||||||
|
cots_ue_ctl = yaml.load(file,Loader=yaml.FullLoader)
|
||||||
|
#check if ue id is in the dictionary
|
||||||
|
if target_id in cots_ue_ctl:
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.ADBIPAddr, self.ADBUserName, self.ADBPassWord)
|
||||||
|
logging.info(str(self.ADBIPAddr)+' '+str(self.ADBUserName)+' '+str(self.ADBPassWord))
|
||||||
|
mySSH.command('adb start-server','\$',5)
|
||||||
|
mySSH.command('adb devices','\$',5)
|
||||||
|
logging.info("Toggling COTS UE Airplane mode to : "+target_state_str)
|
||||||
|
#get current state
|
||||||
|
current_state = self.Check_Airplane()
|
||||||
|
if target_state_str.lower()=="on":
|
||||||
|
target_state=1
|
||||||
|
else:
|
||||||
|
target_state=0
|
||||||
|
if current_state != target_state:
|
||||||
|
#toggle state
|
||||||
|
retry = 0
|
||||||
|
while (current_state!=target_state) and (retry < self.__SetAirplaneRetry):
|
||||||
|
#loop over the command list from dictionary for the selected ue, to switch to required state
|
||||||
|
for i in range (0,len(cots_ue_ctl[target_id])):
|
||||||
|
mySSH.command(cots_ue_ctl[target_id][i], '\$', 5)
|
||||||
|
time.sleep(1)
|
||||||
|
current_state = self.Check_Airplane()
|
||||||
|
retry+=1
|
||||||
|
#could not toggle despite the retry
|
||||||
|
if current_state != target_state:
|
||||||
|
logging.error("ATTENTION : Could not toggle to : "+target_state_str)
|
||||||
|
logging.error("Current state is : "+ str(current_state))
|
||||||
|
else:
|
||||||
|
logging.info("Airplane mode is already "+ target_state_str)
|
||||||
|
mySSH.command('adb kill-server','\$',5)
|
||||||
|
mySSH.close()
|
||||||
|
#ue id is NOT in the dictionary
|
||||||
|
else:
|
||||||
|
logging.error("COTS UE Id from XML could not be found in UE YAML dictionary " + self.__cots_cde_dict_file)
|
||||||
|
sys.exit("COTS UE Id from XML could not be found in UE YAML dictionary " + self.__cots_cde_dict_file)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,191 @@
|
|||||||
|
# * 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
|
||||||
|
# */
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
# Python for CI of OAI-eNB + COTS-UE
|
||||||
|
#
|
||||||
|
# Required Python Version
|
||||||
|
# Python 3.x
|
||||||
|
#
|
||||||
|
# Required Python Package
|
||||||
|
# pexpect
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#to use logging.info()
|
||||||
|
import logging
|
||||||
|
#to create a SSH object locally in the methods
|
||||||
|
import sshconnection
|
||||||
|
#to update the HTML object
|
||||||
|
import html
|
||||||
|
from multiprocessing import SimpleQueue
|
||||||
|
#for log folder maintenance
|
||||||
|
import os
|
||||||
|
|
||||||
|
class PhySim:
|
||||||
|
def __init__(self):
|
||||||
|
self.buildargs = ""
|
||||||
|
self.runargs = ""
|
||||||
|
self.eNBIpAddr = ""
|
||||||
|
self.eNBUserName = ""
|
||||||
|
self.eNBPassWord = ""
|
||||||
|
self.eNBSourceCodePath = ""
|
||||||
|
self.ranRepository = ""
|
||||||
|
self.ranBranch = ""
|
||||||
|
self.ranCommitID= ""
|
||||||
|
self.ranAllowMerge= ""
|
||||||
|
self.ranTargetBranch= ""
|
||||||
|
self.exitStatus=0
|
||||||
|
self.forced_workspace_cleanup=False
|
||||||
|
#private attributes
|
||||||
|
self.__workSpacePath=''
|
||||||
|
self.__buildLogFile='compile_phy_sim.log'
|
||||||
|
self.__runLogFile=''
|
||||||
|
self.__runResults=[]
|
||||||
|
self.__runLogPath='phy_sim_logs'
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------
|
||||||
|
#PRIVATE Methods
|
||||||
|
#-----------------
|
||||||
|
|
||||||
|
def __CheckResults_PhySim(self,HTML,CONST,testcase_id):
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
||||||
|
#retrieve run log file and store it locally$
|
||||||
|
mySSH.copyin(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord, self.__workSpacePath+self.__runLogFile, '.')
|
||||||
|
mySSH.close()
|
||||||
|
#parse results looking for Encoding and Decoding mean values
|
||||||
|
self.__runResults=[]
|
||||||
|
with open(self.__runLogFile) as f:
|
||||||
|
for line in f:
|
||||||
|
if 'mean' in line:
|
||||||
|
self.__runResults.append(line)
|
||||||
|
#the values are appended for each mean value (2), so we take these 2 values from the list
|
||||||
|
info=self.__runResults[0]+self.__runResults[1]
|
||||||
|
|
||||||
|
#once parsed move the local logfile to its folder for tidiness
|
||||||
|
os.system('mv '+self.__runLogFile+' '+ self.__runLogPath+'/.')
|
||||||
|
|
||||||
|
#updating the HTML with results
|
||||||
|
html_cell = '<pre style="background-color:white">' + info + '</pre>'
|
||||||
|
html_queue=SimpleQueue()
|
||||||
|
html_queue.put(html_cell)
|
||||||
|
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', 1, html_queue)
|
||||||
|
return HTML
|
||||||
|
|
||||||
|
|
||||||
|
def __CheckBuild_PhySim(self, HTML, CONST):
|
||||||
|
self.__workSpacePath=self.eNBSourceCodePath+'/cmake_targets/'
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
||||||
|
#retrieve compile log file and store it locally
|
||||||
|
mySSH.copyin(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord, self.__workSpacePath+self.__buildLogFile, '.')
|
||||||
|
#delete older run log file
|
||||||
|
mySSH.command('rm ' + self.__workSpacePath+self.__runLogFile, '\$', 5)
|
||||||
|
mySSH.close()
|
||||||
|
#check build result from local compile log file
|
||||||
|
buildStatus=False
|
||||||
|
with open(self.__buildLogFile) as f:
|
||||||
|
#nr_prachsim is the last compile step
|
||||||
|
if 'nr_prachsim compiled' in f.read():
|
||||||
|
buildStatus=True
|
||||||
|
#update HTML based on build status
|
||||||
|
if buildStatus:
|
||||||
|
HTML.CreateHtmlTestRow(self.buildargs, 'OK', CONST.ALL_PROCESSES_OK, 'LDPC')
|
||||||
|
self.exitStatus=0
|
||||||
|
else:
|
||||||
|
logging.error('\u001B[1m Building Physical Simulators Failed\u001B[0m')
|
||||||
|
HTML.CreateHtmlTestRow(self.buildargs, 'KO', CONST.ALL_PROCESSES_OK, 'LDPC')
|
||||||
|
HTML.CreateHtmlTabFooter(False)
|
||||||
|
#exitStatus=1 will do a sys.exit in main
|
||||||
|
self.exitStatus=1
|
||||||
|
return HTML
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------$
|
||||||
|
#PUBLIC Methods$
|
||||||
|
#-----------------$
|
||||||
|
|
||||||
|
def Build_PhySim(self,htmlObj,constObj):
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
||||||
|
|
||||||
|
#create working dir
|
||||||
|
mySSH.command('mkdir -p ' + self.eNBSourceCodePath, '\$', 5)
|
||||||
|
mySSH.command('cd ' + self.eNBSourceCodePath, '\$', 5)
|
||||||
|
|
||||||
|
if not self.ranRepository.lower().endswith('.git'):
|
||||||
|
self.ranRepository+='.git'
|
||||||
|
|
||||||
|
#git clone
|
||||||
|
mySSH.command('if [ ! -e .git ]; then stdbuf -o0 git clone ' + self.ranRepository + ' .; else stdbuf -o0 git fetch --prune; fi', '\$', 600)
|
||||||
|
#git config
|
||||||
|
mySSH.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
|
||||||
|
mySSH.command('git config user.name "OAI Jenkins"', '\$', 5)
|
||||||
|
|
||||||
|
#git clean depending on self.forced_workspace_cleanup captured in xml
|
||||||
|
if self.forced_workspace_cleanup==True:
|
||||||
|
logging.info('Cleaning workspace ...')
|
||||||
|
mySSH.command('echo ' + self.eNBPassWord + ' | sudo -S git clean -x -d -ff', '\$', 30)
|
||||||
|
else:
|
||||||
|
logging.info('Workspace cleaning was disabled')
|
||||||
|
|
||||||
|
# if the commit ID is provided, use it to point to it
|
||||||
|
if self.ranCommitID != '':
|
||||||
|
mySSH.command('git checkout -f ' + self.ranCommitID, '\$', 5)
|
||||||
|
# if the branch is not develop, then it is a merge request and we need to do
|
||||||
|
# the potential merge. Note that merge conflicts should have already been checked earlier
|
||||||
|
if (self.ranAllowMerge):
|
||||||
|
if self.ranTargetBranch == '':
|
||||||
|
if (self.ranBranch != 'develop') and (self.ranBranch != 'origin/develop'):
|
||||||
|
mySSH.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5)
|
||||||
|
else:
|
||||||
|
logging.info('Merging with the target branch: ' + self.ranTargetBranch)
|
||||||
|
mySSH.command('git merge --ff origin/' + self.ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 5)
|
||||||
|
|
||||||
|
#build
|
||||||
|
mySSH.command('source oaienv', '\$', 5)
|
||||||
|
mySSH.command('cd cmake_targets', '\$', 5)
|
||||||
|
mySSH.command('mkdir -p log', '\$', 5)
|
||||||
|
mySSH.command('chmod 777 log', '\$', 5)
|
||||||
|
mySSH.command('stdbuf -o0 ./build_oai ' + self.buildargs + ' 2>&1 | stdbuf -o0 tee ' + self.__buildLogFile, 'Bypassing the Tests|build have failed', 1500)
|
||||||
|
|
||||||
|
mySSH.close()
|
||||||
|
#check build status and update HTML object
|
||||||
|
lHTML = html.HTMLManagement()
|
||||||
|
lHTML=self.__CheckBuild_PhySim(htmlObj,constObj)
|
||||||
|
return lHTML
|
||||||
|
|
||||||
|
|
||||||
|
def Run_PhySim(self,htmlObj,constObj,testcase_id):
|
||||||
|
#create run logs folder locally
|
||||||
|
os.system('mkdir -p ./'+self.__runLogPath)
|
||||||
|
#log file is tc_<testcase_id>.log remotely
|
||||||
|
self.__runLogFile='physim_'+str(testcase_id)+'.log'
|
||||||
|
#open a session for test run
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
||||||
|
mySSH.command('cd '+self.__workSpacePath,'\$',5)
|
||||||
|
#run and redirect the results to a log file
|
||||||
|
mySSH.command(self.__workSpacePath+'phy_simulators/build/ldpctest ' + self.runargs + ' >> '+self.__runLogFile, '\$', 30)
|
||||||
|
mySSH.close()
|
||||||
|
#return updated HTML to main
|
||||||
|
lHTML = html.HTMLManagement()
|
||||||
|
lHTML=self.__CheckResults_PhySim(htmlObj,constObj,testcase_id)
|
||||||
|
return lHTML
|
||||||
@@ -181,6 +181,7 @@ eNBs = (
|
|||||||
{
|
{
|
||||||
ipv4 = "CI_MME_IP_ADDR";
|
ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -214,7 +215,7 @@ log_config = {
|
|||||||
NETWORK_CONTROLLER : {
|
NETWORK_CONTROLLER : {
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -181,6 +181,7 @@ eNBs = (
|
|||||||
{
|
{
|
||||||
ipv4 = "CI_MME_IP_ADDR";
|
ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -214,7 +215,7 @@ log_config = {
|
|||||||
NETWORK_CONTROLLER : {
|
NETWORK_CONTROLLER : {
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -181,6 +181,7 @@ eNBs = (
|
|||||||
{
|
{
|
||||||
ipv4 = "CI_MME_IP_ADDR";
|
ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -214,7 +215,7 @@ log_config = {
|
|||||||
NETWORK_CONTROLLER : {
|
NETWORK_CONTROLLER : {
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ log_config = {
|
|||||||
NETWORK_CONTROLLER : {
|
NETWORK_CONTROLLER : {
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ log_config = {
|
|||||||
NETWORK_CONTROLLER : {
|
NETWORK_CONTROLLER : {
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ log_config = {
|
|||||||
NETWORK_CONTROLLER : {
|
NETWORK_CONTROLLER : {
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -184,6 +185,8 @@ eNBs =
|
|||||||
enable_x2 = "yes";
|
enable_x2 = "yes";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -236,7 +239,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "eth0";
|
FLEXRAN_INTERFACE_NAME = "eth0";
|
||||||
FLEXRAN_IPV4_ADDRESS = "CI_MME_IP_ADDR";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -356,6 +356,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -367,6 +368,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -445,7 +448,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ eNBs =
|
|||||||
ue_TimersAndConstants_n310 = 20;
|
ue_TimersAndConstants_n310 = 20;
|
||||||
ue_TimersAndConstants_n311 = 1;
|
ue_TimersAndConstants_n311 = 1;
|
||||||
ue_TransmissionMode = 1;
|
ue_TransmissionMode = 1;
|
||||||
|
mbms_dedicated_serving_cell = "DISABLE"
|
||||||
|
|
||||||
//Parameters for SIB18
|
//Parameters for SIB18
|
||||||
rxPool_sc_CP_Len = "normal";
|
rxPool_sc_CP_Len = "normal";
|
||||||
@@ -176,6 +177,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -187,6 +189,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -247,7 +251,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "eth0";
|
FLEXRAN_INTERFACE_NAME = "eth0";
|
||||||
FLEXRAN_IPV4_ADDRESS = "CI_MME_IP_ADDR";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -105,6 +105,8 @@ eNBs =
|
|||||||
ue_TimersAndConstants_n310 = 20;
|
ue_TimersAndConstants_n310 = 20;
|
||||||
ue_TimersAndConstants_n311 = 1;
|
ue_TimersAndConstants_n311 = 1;
|
||||||
ue_TransmissionMode = 1;
|
ue_TransmissionMode = 1;
|
||||||
|
mbms_dedicated_serving_cell = "DISABLE"
|
||||||
|
|
||||||
|
|
||||||
//Parameters for SIB18
|
//Parameters for SIB18
|
||||||
rxPool_sc_CP_Len = "normal";
|
rxPool_sc_CP_Len = "normal";
|
||||||
@@ -176,6 +178,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -187,6 +190,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
///M2
|
///M2
|
||||||
target_mce_m2_ip_address = ( { ipv4 = "127.0.0.7";
|
target_mce_m2_ip_address = ( { ipv4 = "127.0.0.7";
|
||||||
@@ -247,7 +252,6 @@ MCEs = (
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
MCE_INTERFACE_NAME_FOR_M2_ENB = "lo";
|
MCE_INTERFACE_NAME_FOR_M2_ENB = "lo";
|
||||||
@@ -271,12 +275,12 @@ MCEs = (
|
|||||||
mcch_update_time = 10;
|
mcch_update_time = 10;
|
||||||
mbms_area_config_list = (
|
mbms_area_config_list = (
|
||||||
{
|
{
|
||||||
common_sf_allocation_period = 2; #rf4(0) rf8(1) rf16(2) rf32(3) rf64(4) rf128(5) rf256(6)
|
common_sf_allocation_period = 1; #rf4(0) rf8(1) rf16(2) rf32(3) rf64(4) rf128(5) rf256(6)
|
||||||
mbms_area_id = 0;
|
mbms_area_id = 0;
|
||||||
pmch_config_list = (
|
pmch_config_list = (
|
||||||
{
|
{
|
||||||
allocated_sf_end=64;
|
allocated_sf_end=40;
|
||||||
data_mcs=10;
|
data_mcs=20;
|
||||||
mch_scheduling_period = 0; #rf8(0)
|
mch_scheduling_period = 0; #rf8(0)
|
||||||
mbms_session_list = (
|
mbms_session_list = (
|
||||||
{
|
{
|
||||||
@@ -288,7 +292,7 @@ MCEs = (
|
|||||||
mnc_length = 2;
|
mnc_length = 2;
|
||||||
}
|
}
|
||||||
service_id=0;
|
service_id=0;
|
||||||
lcid=5; #this must be properly defined lcid:8+service:0 -> rab_id:5
|
lcid=5; #this must be properly defined lcid:8+service:0 -> rab_id:5 //with new RLC set lcid either 4 or 5
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -296,10 +300,10 @@ MCEs = (
|
|||||||
|
|
||||||
mbms_sf_config_list = (
|
mbms_sf_config_list = (
|
||||||
{
|
{
|
||||||
radioframe_allocation_period=1; #n1(0) n2(1) n4(2) n8(3) n16(4) n32(5)
|
radioframe_allocation_period=0; #n1(0) n2(1) n4(2) n8(3) n16(4) n32(5)
|
||||||
radioframe_alloocation_offset=0;
|
radioframe_alloocation_offset=0;
|
||||||
num_frame="oneFrame";
|
num_frame="oneFrame";
|
||||||
subframe_allocation=57; #xx100000
|
subframe_allocation=59; #xx111011 #57; #xx111001
|
||||||
//num_frame="fourFrame";
|
//num_frame="fourFrame";
|
||||||
//subframe_allocation=14548987; #
|
//subframe_allocation=14548987; #
|
||||||
}
|
}
|
||||||
@@ -391,7 +395,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "eth0";
|
FLEXRAN_INTERFACE_NAME = "eth0";
|
||||||
FLEXRAN_IPV4_ADDRESS = "CI_MME_IP_ADDR";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -147,6 +148,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -225,7 +228,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -147,6 +148,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -225,7 +228,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -147,6 +148,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -225,7 +228,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -145,6 +146,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -223,7 +226,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -173,6 +173,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -184,6 +185,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -244,7 +247,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -176,6 +176,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -187,6 +188,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
target_enb_x2_ip_address = (
|
target_enb_x2_ip_address = (
|
||||||
{ ipv4 = "CI_RCC_IP_ADDR";
|
{ ipv4 = "CI_RCC_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
@@ -253,7 +256,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "eth0";
|
FLEXRAN_INTERFACE_NAME = "eth0";
|
||||||
FLEXRAN_IPV4_ADDRESS = "CI_MME_IP_ADDR";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -28,83 +28,85 @@ eNBs =
|
|||||||
node_function = "3GPP_eNODEB";
|
node_function = "3GPP_eNODEB";
|
||||||
node_timing = "synch_to_ext_device";
|
node_timing = "synch_to_ext_device";
|
||||||
node_synch_ref = 0;
|
node_synch_ref = 0;
|
||||||
frame_type = "FDD";
|
frame_type = "FDD";
|
||||||
tdd_config = 3;
|
tdd_config = 3;
|
||||||
tdd_config_s = 0;
|
tdd_config_s = 0;
|
||||||
prefix_type = "NORMAL";
|
prefix_type = "NORMAL";
|
||||||
eutra_band = 7;
|
eutra_band = 7;
|
||||||
downlink_frequency = 2680000000L;
|
downlink_frequency = 2680000000L;
|
||||||
uplink_frequency_offset = -120000000;
|
uplink_frequency_offset = -120000000;
|
||||||
Nid_cell = 0;
|
Nid_cell = 0;
|
||||||
N_RB_DL = 25;
|
N_RB_DL = 25;
|
||||||
Nid_cell_mbsfn = 0;
|
Nid_cell_mbsfn = 0;
|
||||||
nb_antenna_ports = 1;
|
nb_antenna_ports = 1;
|
||||||
nb_antennas_tx = 1;
|
nb_antennas_tx = 1;
|
||||||
nb_antennas_rx = 1;
|
nb_antennas_rx = 1;
|
||||||
tx_gain = 90;
|
tx_gain = 90;
|
||||||
rx_gain = 125;
|
rx_gain = 125;
|
||||||
pbch_repetition = "FALSE";
|
pbch_repetition = "FALSE";
|
||||||
prach_root = 0;
|
prach_root = 0;
|
||||||
prach_config_index = 0;
|
prach_config_index = 0;
|
||||||
prach_high_speed = "DISABLE";
|
prach_high_speed = "DISABLE";
|
||||||
prach_zero_correlation = 1;
|
prach_zero_correlation = 1;
|
||||||
prach_freq_offset = 2;
|
prach_freq_offset = 2;
|
||||||
pucch_delta_shift = 1;
|
pucch_delta_shift = 1;
|
||||||
pucch_nRB_CQI = 0;
|
pucch_nRB_CQI = 0;
|
||||||
pucch_nCS_AN = 0;
|
pucch_nCS_AN = 0;
|
||||||
pucch_n1_AN = 0;
|
pucch_n1_AN = 0;
|
||||||
pdsch_referenceSignalPower = -25;
|
pdsch_referenceSignalPower= -25;
|
||||||
pdsch_p_b = 0;
|
pdsch_p_b = 0;
|
||||||
pusch_n_SB = 1;
|
pusch_n_SB = 1;
|
||||||
pusch_enable64QAM = "DISABLE";
|
pusch_enable64QAM = "DISABLE";
|
||||||
pusch_hoppingMode = "interSubFrame";
|
pusch_hoppingMode = "interSubFrame";
|
||||||
pusch_hoppingOffset = 0;
|
pusch_hoppingOffset = 0;
|
||||||
pusch_groupHoppingEnabled = "ENABLE";
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
pusch_groupAssignment = 0;
|
pusch_groupAssignment = 0;
|
||||||
pusch_sequenceHoppingEnabled = "DISABLE";
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
pusch_nDMRS1 = 1;
|
pusch_nDMRS1 = 1;
|
||||||
phich_duration = "NORMAL";
|
phich_duration = "NORMAL";
|
||||||
phich_resource = "ONESIXTH";
|
phich_resource = "ONESIXTH";
|
||||||
srs_enable = "DISABLE";
|
srs_enable = "DISABLE";
|
||||||
/* srs_BandwidthConfig =;
|
|
||||||
srs_SubframeConfig =;
|
|
||||||
srs_ackNackST =;
|
|
||||||
srs_MaxUpPts =;*/
|
|
||||||
|
|
||||||
pusch_p0_Nominal = -96;
|
|
||||||
pusch_alpha = "AL1";
|
|
||||||
pucch_p0_Nominal = -104;
|
|
||||||
msg3_delta_Preamble = 6;
|
|
||||||
pucch_deltaF_Format1 = "deltaF2";
|
|
||||||
pucch_deltaF_Format1b = "deltaF3";
|
|
||||||
pucch_deltaF_Format2 = "deltaF0";
|
|
||||||
pucch_deltaF_Format2a = "deltaF0";
|
|
||||||
pucch_deltaF_Format2b = "deltaF0";
|
|
||||||
|
|
||||||
rach_numberOfRA_Preambles = 64;
|
|
||||||
rach_preamblesGroupAConfig = "DISABLE";
|
|
||||||
/*
|
/*
|
||||||
rach_sizeOfRA_PreamblesGroupA = ;
|
srs_BandwidthConfig =;
|
||||||
rach_messageSizeGroupA = ;
|
srs_SubframeConfig =;
|
||||||
rach_messagePowerOffsetGroupB = ;
|
srs_ackNackST =;
|
||||||
|
srs_MaxUpPts =;
|
||||||
*/
|
*/
|
||||||
rach_powerRampingStep = 4;
|
|
||||||
rach_preambleInitialReceivedTargetPower = -108;
|
|
||||||
rach_preambleTransMax = 10;
|
|
||||||
rach_raResponseWindowSize = 10;
|
|
||||||
rach_macContentionResolutionTimer = 48;
|
|
||||||
rach_maxHARQ_Msg3Tx = 4;
|
|
||||||
|
|
||||||
pcch_default_PagingCycle = 128;
|
pusch_p0_Nominal = -96;
|
||||||
pcch_nB = "oneT";
|
pusch_alpha = "AL1";
|
||||||
bcch_modificationPeriodCoeff = 2;
|
pucch_p0_Nominal = -104;
|
||||||
ue_TimersAndConstants_t300 = 1000;
|
msg3_delta_Preamble = 6;
|
||||||
ue_TimersAndConstants_t301 = 1000;
|
pucch_deltaF_Format1 = "deltaF2";
|
||||||
ue_TimersAndConstants_t310 = 1000;
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
ue_TimersAndConstants_t311 = 10000;
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
ue_TimersAndConstants_n310 = 20;
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
ue_TimersAndConstants_n311 = 1;
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
ue_TransmissionMode = 1;
|
|
||||||
|
rach_numberOfRA_Preambles = 64;
|
||||||
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
|
/*
|
||||||
|
rach_sizeOfRA_PreamblesGroupA = ;
|
||||||
|
rach_messageSizeGroupA = ;
|
||||||
|
rach_messagePowerOffsetGroupB = ;
|
||||||
|
*/
|
||||||
|
rach_powerRampingStep = 4;
|
||||||
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
|
rach_preambleTransMax = 10;
|
||||||
|
rach_raResponseWindowSize = 10;
|
||||||
|
rach_macContentionResolutionTimer = 48;
|
||||||
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
|
|
||||||
|
pcch_default_PagingCycle = 128;
|
||||||
|
pcch_nB = "oneT";
|
||||||
|
bcch_modificationPeriodCoeff = 2;
|
||||||
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
|
ue_TimersAndConstants_n310 = 20;
|
||||||
|
ue_TimersAndConstants_n311 = 1;
|
||||||
|
ue_TransmissionMode = 1;
|
||||||
|
|
||||||
//Parameters for SIB18
|
//Parameters for SIB18
|
||||||
rxPool_sc_CP_Len = "normal";
|
rxPool_sc_CP_Len = "normal";
|
||||||
@@ -116,27 +118,28 @@ eNBs =
|
|||||||
rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
rxPool_ResourceConfig_offsetIndicator_choice = 0;
|
rxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
|
||||||
rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
/* rxPool_dataHoppingConfig_hoppingParameter = 0;
|
/*
|
||||||
rxPool_dataHoppingConfig_numSubbands = "ns1";
|
rxPool_dataHoppingConfig_hoppingParameter = 0;
|
||||||
rxPool_dataHoppingConfig_rbOffset = 0;
|
rxPool_dataHoppingConfig_numSubbands = "ns1";
|
||||||
rxPool_commTxResourceUC-ReqAllowed = "TRUE";
|
rxPool_dataHoppingConfig_rbOffset = 0;
|
||||||
|
rxPool_commTxResourceUC-ReqAllowed = "TRUE";
|
||||||
*/
|
*/
|
||||||
// Parameters for SIB19
|
// Parameters for SIB19
|
||||||
discRxPool_cp_Len = "normal"
|
discRxPool_cp_Len = "normal"
|
||||||
discRxPool_discPeriod = "rf32"
|
discRxPool_discPeriod = "rf32"
|
||||||
discRxPool_numRetx = 1;
|
discRxPool_numRetx = 1;
|
||||||
discRxPool_numRepetition = 2;
|
discRxPool_numRepetition = 2;
|
||||||
discRxPool_ResourceConfig_prb_Num = 5;
|
discRxPool_ResourceConfig_prb_Num = 5;
|
||||||
discRxPool_ResourceConfig_prb_Start = 3;
|
discRxPool_ResourceConfig_prb_Start = 3;
|
||||||
discRxPool_ResourceConfig_prb_End = 21;
|
discRxPool_ResourceConfig_prb_End = 21;
|
||||||
discRxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
discRxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
discRxPool_ResourceConfig_offsetIndicator_choice = 0;
|
discRxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
discRxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
discRxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff";
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff";
|
||||||
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size= 5;
|
||||||
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -176,6 +179,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -187,6 +191,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -201,40 +207,43 @@ eNBs =
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
MACRLCs = (
|
MACRLCs =
|
||||||
{
|
(
|
||||||
num_cc = 1;
|
{
|
||||||
tr_s_preference = "local_L1";
|
num_cc = 1;
|
||||||
tr_n_preference = "local_RRC";
|
tr_s_preference = "local_L1";
|
||||||
phy_test_mode = 0;
|
tr_n_preference = "local_RRC";
|
||||||
puSch10xSnr = 160;
|
phy_test_mode = 0;
|
||||||
puCch10xSnr = 160;
|
puSch10xSnr = 160;
|
||||||
}
|
puCch10xSnr = 160;
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
L1s = (
|
L1s =
|
||||||
{
|
(
|
||||||
num_cc = 1;
|
{
|
||||||
tr_n_preference = "local_mac";
|
num_cc = 1;
|
||||||
}
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
RUs = (
|
RUs =
|
||||||
{
|
(
|
||||||
local_rf = "yes"
|
{
|
||||||
nb_tx = 1
|
local_rf = "yes"
|
||||||
nb_rx = 1
|
nb_tx = 1
|
||||||
att_tx = 0
|
nb_rx = 1
|
||||||
att_rx = 0;
|
att_tx = 0
|
||||||
bands = [7];
|
att_rx = 0;
|
||||||
max_pdschReferenceSignalPower = -27;
|
bands = [7];
|
||||||
max_rxgain = 125;
|
max_pdschReferenceSignalPower = -27;
|
||||||
eNB_instances = [0];
|
max_rxgain = 125;
|
||||||
|
eNB_instances = [0];
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
THREAD_STRUCT = (
|
THREAD_STRUCT =
|
||||||
|
(
|
||||||
{
|
{
|
||||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||||
@@ -247,27 +256,27 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "eth0";
|
FLEXRAN_INTERFACE_NAME = "eth0";
|
||||||
FLEXRAN_IPV4_ADDRESS = "CI_MME_IP_ADDR";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
{
|
{
|
||||||
global_log_level ="info";
|
global_log_level ="info";
|
||||||
global_log_verbosity ="medium";
|
global_log_verbosity ="medium";
|
||||||
hw_log_level ="info";
|
hw_log_level ="info";
|
||||||
hw_log_verbosity ="medium";
|
hw_log_verbosity ="medium";
|
||||||
phy_log_level ="info";
|
phy_log_level ="info";
|
||||||
phy_log_verbosity ="medium";
|
phy_log_verbosity ="medium";
|
||||||
mac_log_level ="info";
|
mac_log_level ="info";
|
||||||
mac_log_verbosity ="high";
|
mac_log_verbosity ="high";
|
||||||
rlc_log_level ="info";
|
rlc_log_level ="info";
|
||||||
rlc_log_verbosity ="medium";
|
rlc_log_verbosity ="medium";
|
||||||
pdcp_log_level ="info";
|
pdcp_log_level ="info";
|
||||||
pdcp_log_verbosity ="medium";
|
pdcp_log_verbosity ="medium";
|
||||||
rrc_log_level ="info";
|
rrc_log_level ="info";
|
||||||
rrc_log_verbosity ="medium";
|
rrc_log_verbosity ="medium";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -181,6 +181,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -192,6 +193,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -252,7 +255,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -0,0 +1,289 @@
|
|||||||
|
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
eNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
# real_time choice in {hard, rt-preempt, no}
|
||||||
|
real_time = "no";
|
||||||
|
////////// Identification parameters:
|
||||||
|
eNB_ID = 0xe01;
|
||||||
|
cell_type = "CELL_MACRO_ENB";
|
||||||
|
eNB_name = "eNB-Eurecom-LTEBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
plmn_list = (
|
||||||
|
{ mcc = 222; mnc = 01; mnc_length = 2; }
|
||||||
|
);
|
||||||
|
|
||||||
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
node_function = "eNodeB_3GPP";
|
||||||
|
node_timing = "synch_to_ext_device";
|
||||||
|
node_synch_ref = 0;
|
||||||
|
nb_antenna_ports = 1;
|
||||||
|
ue_TransmissionMode = 1;
|
||||||
|
frame_type = "FDD";
|
||||||
|
tdd_config = 3;
|
||||||
|
tdd_config_s = 0;
|
||||||
|
prefix_type = "NORMAL";
|
||||||
|
eutra_band = 7;
|
||||||
|
downlink_frequency = 2680000000L;
|
||||||
|
uplink_frequency_offset = -120000000;
|
||||||
|
|
||||||
|
Nid_cell = 0;
|
||||||
|
N_RB_DL = 25;
|
||||||
|
Nid_cell_mbsfn = 0;
|
||||||
|
nb_antennas_tx = 1;
|
||||||
|
nb_antennas_rx = 1;
|
||||||
|
prach_root = 0;
|
||||||
|
tx_gain = 90;
|
||||||
|
rx_gain = 115;
|
||||||
|
pbch_repetition = "FALSE";
|
||||||
|
|
||||||
|
prach_config_index = 0;
|
||||||
|
prach_high_speed = "DISABLE";
|
||||||
|
prach_zero_correlation = 1;
|
||||||
|
prach_freq_offset = 2;
|
||||||
|
|
||||||
|
pucch_delta_shift = 1;
|
||||||
|
pucch_nRB_CQI = 0;
|
||||||
|
pucch_nCS_AN = 0;
|
||||||
|
pucch_n1_AN = 0;
|
||||||
|
pdsch_referenceSignalPower = -29;
|
||||||
|
pdsch_p_b = 0;
|
||||||
|
pusch_n_SB = 1;
|
||||||
|
pusch_enable64QAM = "DISABLE";
|
||||||
|
pusch_hoppingMode = "interSubFrame";
|
||||||
|
pusch_hoppingOffset = 0;
|
||||||
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
|
pusch_groupAssignment = 0;
|
||||||
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
|
pusch_nDMRS1 = 1;
|
||||||
|
phich_duration = "NORMAL";
|
||||||
|
phich_resource = "ONESIXTH";
|
||||||
|
srs_enable = "DISABLE";
|
||||||
|
/*
|
||||||
|
srs_BandwidthConfig =;
|
||||||
|
srs_SubframeConfig =;
|
||||||
|
srs_ackNackST =;
|
||||||
|
srs_MaxUpPts =;
|
||||||
|
*/
|
||||||
|
|
||||||
|
pusch_p0_Nominal = -96;
|
||||||
|
pusch_alpha = "AL1";
|
||||||
|
pucch_p0_Nominal = -96;
|
||||||
|
msg3_delta_Preamble = 6;
|
||||||
|
pucch_deltaF_Format1 = "deltaF2";
|
||||||
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
|
rach_numberOfRA_Preambles = 64;
|
||||||
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
|
/*
|
||||||
|
rach_sizeOfRA_PreamblesGroupA = ;
|
||||||
|
rach_messageSizeGroupA = ;
|
||||||
|
rach_messagePowerOffsetGroupB = ;
|
||||||
|
*/
|
||||||
|
rach_powerRampingStep = 4;
|
||||||
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
|
rach_preambleTransMax = 10;
|
||||||
|
rach_raResponseWindowSize = 10;
|
||||||
|
rach_macContentionResolutionTimer = 48;
|
||||||
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
|
|
||||||
|
pcch_default_PagingCycle = 128;
|
||||||
|
pcch_nB = "oneT";
|
||||||
|
bcch_modificationPeriodCoeff = 2;
|
||||||
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
|
ue_TimersAndConstants_n310 = 20;
|
||||||
|
ue_TimersAndConstants_n311 = 1;
|
||||||
|
|
||||||
|
//Parameters for SIB18
|
||||||
|
rxPool_sc_CP_Len = "normal";
|
||||||
|
rxPool_sc_Period = "sf40";
|
||||||
|
rxPool_data_CP_Len = "normal";
|
||||||
|
rxPool_ResourceConfig_prb_Num = 20;
|
||||||
|
rxPool_ResourceConfig_prb_Start = 5;
|
||||||
|
rxPool_ResourceConfig_prb_End = 44;
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
/*
|
||||||
|
rxPool_dataHoppingConfig_hoppingParameter = 0;
|
||||||
|
rxPool_dataHoppingConfig_numSubbands = "ns1";
|
||||||
|
rxPool_dataHoppingConfig_rbOffset = 0;
|
||||||
|
rxPool_commTxResourceUC-ReqAllowed = "TRUE";
|
||||||
|
*/
|
||||||
|
// Parameters for SIB19
|
||||||
|
discRxPool_cp_Len = "normal"
|
||||||
|
discRxPool_discPeriod = "rf32"
|
||||||
|
discRxPool_numRetx = 1;
|
||||||
|
discRxPool_numRepetition = 2;
|
||||||
|
discRxPool_ResourceConfig_prb_Num = 5;
|
||||||
|
discRxPool_ResourceConfig_prb_Start = 3;
|
||||||
|
discRxPool_ResourceConfig_prb_End = 21;
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
|
||||||
|
//SSB central frequency of NR secondary cell group (for ENDC NSA)
|
||||||
|
nr_scg_ssb_freq = 641272;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
srb1_parameters :
|
||||||
|
{
|
||||||
|
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||||
|
timer_poll_retransmit = 80;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||||
|
timer_reordering = 35;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||||
|
timer_status_prohibit = 0;
|
||||||
|
|
||||||
|
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||||
|
poll_pdu = 4;
|
||||||
|
|
||||||
|
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||||
|
poll_byte = 99999;
|
||||||
|
|
||||||
|
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||||
|
max_retx_threshold = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
enable_measurement_reports = "yes";
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
///X2
|
||||||
|
enable_x2 = "yes";
|
||||||
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth1";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
|
||||||
|
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1U = "eth1";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="high";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="debug";
|
||||||
|
rlc_log_verbosity ="high";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="high";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
phy_test_mode = 0;
|
||||||
|
puSch10xSnr = 160;
|
||||||
|
puCch10xSnr = 160;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||||
|
worker_config = "ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [7];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 118;
|
||||||
|
eNB_instances = [0];
|
||||||
|
# clock_src = "external";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="high";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="high";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="high";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
@@ -176,6 +176,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -187,6 +188,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -246,7 +249,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -183,6 +184,8 @@ eNBs =
|
|||||||
enable_x2 = "yes";
|
enable_x2 = "yes";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
target_enb_x2_ip_address = (
|
target_enb_x2_ip_address = (
|
||||||
{ ipv4 = "CI_RCC_IP_ADDR";
|
{ ipv4 = "CI_RCC_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
@@ -241,7 +244,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "eth0";
|
FLEXRAN_INTERFACE_NAME = "eth0";
|
||||||
FLEXRAN_IPV4_ADDRESS = "CI_MME_IP_ADDR";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ gNBs =
|
|||||||
dl_carrierBandwidth = 106;
|
dl_carrierBandwidth = 106;
|
||||||
#initialDownlinkBWP
|
#initialDownlinkBWP
|
||||||
#genericParameters
|
#genericParameters
|
||||||
# this is RBstart=0,L=50 (275*(L-1))+RBstart
|
# this is RBstart=41,L=24 (275*(L-1))+RBstart
|
||||||
initialDLBWPlocationAndBandwidth = 13475;
|
initialDLBWPlocationAndBandwidth = 6366;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialDLBWPsubcarrierSpacing = 1;
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
@@ -59,7 +59,7 @@ gNBs =
|
|||||||
#initialULBWPmappingType
|
#initialULBWPmappingType
|
||||||
#0=typeA,1=typeB
|
#0=typeA,1=typeB
|
||||||
initialDLBWPmappingType_0 = 0;
|
initialDLBWPmappingType_0 = 0;
|
||||||
#this is SS=2,L=3
|
#this is SS=1,L=13
|
||||||
initialDLBWPstartSymbolAndLength_0 = 40;
|
initialDLBWPstartSymbolAndLength_0 = 40;
|
||||||
|
|
||||||
initialDLBWPk0_1 = 0;
|
initialDLBWPk0_1 = 0;
|
||||||
@@ -71,6 +71,12 @@ gNBs =
|
|||||||
initialDLBWPmappingType_2 = 0;
|
initialDLBWPmappingType_2 = 0;
|
||||||
#this is SS=1,L=12
|
#this is SS=1,L=12
|
||||||
initialDLBWPstartSymbolAndLength_2 = 54;
|
initialDLBWPstartSymbolAndLength_2 = 54;
|
||||||
|
|
||||||
|
initialDLBWPk0_3 = 0;
|
||||||
|
initialDLBWPmappingType_3 = 0;
|
||||||
|
#this is SS=1,L=5
|
||||||
|
initialDLBWPstartSymbolAndLength_3 = 57;
|
||||||
|
|
||||||
#uplinkConfigCommon
|
#uplinkConfigCommon
|
||||||
#frequencyInfoUL
|
#frequencyInfoUL
|
||||||
ul_frequencyBand = 78;
|
ul_frequencyBand = 78;
|
||||||
@@ -83,7 +89,7 @@ gNBs =
|
|||||||
pMax = 20;
|
pMax = 20;
|
||||||
#initialUplinkBWP
|
#initialUplinkBWP
|
||||||
#genericParameters
|
#genericParameters
|
||||||
initialULBWPlocationAndBandwidth = 13475;
|
initialULBWPlocationAndBandwidth = 6366;
|
||||||
# subcarrierSpacing
|
# subcarrierSpacing
|
||||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
initialULBWPsubcarrierSpacing = 1;
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
@@ -105,8 +111,8 @@ gNBs =
|
|||||||
#1,2,4,8,10,20,40,80
|
#1,2,4,8,10,20,40,80
|
||||||
ra_ResponseWindow = 4;
|
ra_ResponseWindow = 4;
|
||||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
#0=oneeighth,1=onefourth,2=half,3=one,4=two,5=four,6=eight,7=sixteen
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
#ra_ContentionResolutionTimer
|
#ra_ContentionResolutionTimer
|
||||||
@@ -114,27 +120,31 @@ gNBs =
|
|||||||
ra_ContentionResolutionTimer = 7;
|
ra_ContentionResolutionTimer = 7;
|
||||||
rsrp_ThresholdSSB = 19;
|
rsrp_ThresholdSSB = 19;
|
||||||
#prach-RootSequenceIndex_PR
|
#prach-RootSequenceIndex_PR
|
||||||
#0 = 839, 1 = 139
|
#1 = 839, 2 = 139
|
||||||
prach_RootSequenceIndex_PR = 1;
|
prach_RootSequenceIndex_PR = 2;
|
||||||
prach_RootSequenceIndex = 1;
|
prach_RootSequenceIndex = 1;
|
||||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
#
|
#
|
||||||
msg1_SubcarrierSpacing = 1,
|
msg1_SubcarrierSpacing = 1,
|
||||||
|
|
||||||
# restrictedSetConfig
|
# restrictedSetConfig
|
||||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
restrictedSetConfig = 0,
|
restrictedSetConfig = 0,
|
||||||
|
|
||||||
# pusch-ConfigCommon (up to 16 elements)
|
# pusch-ConfigCommon (up to 16 elements)
|
||||||
initialULBWPk2_0 = 2;
|
initialULBWPk2_0 = 6;
|
||||||
initialULBWPmappingType_0 = 1
|
initialULBWPmappingType_0 = 1
|
||||||
# this is SS=0 L=11
|
# this is SS=0 L=11
|
||||||
initialULBWPstartSymbolAndLength_0 = 55;
|
initialULBWPstartSymbolAndLength_0 = 55;
|
||||||
|
|
||||||
initialULBWPk2_1 = 2;
|
initialULBWPk2_1 = 6;
|
||||||
initialULBWPmappingType_1 = 1;
|
initialULBWPmappingType_1 = 1;
|
||||||
# this is SS=0 L=12
|
# this is SS=0 L=12
|
||||||
initialULBWPstartSymbolAndLength_1 = 69;
|
initialULBWPstartSymbolAndLength_1 = 69;
|
||||||
|
|
||||||
|
initialULBWPk2_2 = 7;
|
||||||
|
initialULBWPmappingType_2 = 1;
|
||||||
|
# this is SS=10 L=4
|
||||||
|
initialULBWPstartSymbolAndLength_2 = 52;
|
||||||
|
|
||||||
msg3_DeltaPreamble = 1;
|
msg3_DeltaPreamble = 1;
|
||||||
p0_NominalWithGrant =-90;
|
p0_NominalWithGrant =-90;
|
||||||
@@ -194,6 +204,7 @@ gNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "192.168.12.26";
|
mme_ip_address = ( { ipv4 = "192.168.12.26";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -235,9 +246,11 @@ RUs = (
|
|||||||
att_rx = 0;
|
att_rx = 0;
|
||||||
bands = [7];
|
bands = [7];
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 114;
|
max_rxgain = 75;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
|
#beamforming 1x4 matrix:
|
||||||
|
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||||
|
sdr_addrs = "addr=192.168.10.2,mgmt_addr=192.168.10.2,second_addr=192.168.20.2";
|
||||||
clock_src = "external";
|
clock_src = "external";
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -0,0 +1,302 @@
|
|||||||
|
Active_gNBs = ( "gNB-Eurecom-5GNRBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
Num_Threads_PUSCH = 8
|
||||||
|
|
||||||
|
|
||||||
|
gNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
gNB_ID = 0xe00;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_GNB";
|
||||||
|
gNB_name = "gNB-Eurecom-5GNRBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
plmn_list = ({mcc = 222; mnc = 01; mnc_length = 2;});
|
||||||
|
|
||||||
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
ssb_SubcarrierOffset = 31; //0;
|
||||||
|
pdsch_AntennaPorts = 1;
|
||||||
|
pusch_TargetSNRx10 = 200;
|
||||||
|
pucch_TargetSNRx10 = 200;
|
||||||
|
|
||||||
|
|
||||||
|
servingCellConfigCommon = (
|
||||||
|
{
|
||||||
|
#spCellConfigCommon
|
||||||
|
|
||||||
|
physCellId = 0;
|
||||||
|
|
||||||
|
# downlinkConfigCommon
|
||||||
|
#frequencyInfoDL
|
||||||
|
# this is 3600 MHz + 84 PRBs@30kHz SCS (same as initial BWP)
|
||||||
|
absoluteFrequencySSB = 641272; //641032; #641968; 641968=start of ssb at 3600MHz + 82 RBs 641032=center of SSB at center of cell
|
||||||
|
dl_frequencyBand = 78;
|
||||||
|
# this is 3600 MHz
|
||||||
|
dl_absoluteFrequencyPointA = 640000;
|
||||||
|
#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=84,L=13 (275*(L-1))+RBstart
|
||||||
|
initialDLBWPlocationAndBandwidth = 6366; //28875; //6366; #6407; #3384;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
|
#pdcch-ConfigCommon
|
||||||
|
initialDLBWPcontrolResourceSetZero = 0;
|
||||||
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
|
#pdsch-ConfigCommon
|
||||||
|
#pdschTimeDomainAllocationList (up to 16 entries)
|
||||||
|
initialDLBWPk0_0 = 0;
|
||||||
|
#initialULBWPmappingType
|
||||||
|
#0=typeA,1=typeB
|
||||||
|
initialDLBWPmappingType_0 = 0;
|
||||||
|
#this is SS=1,L=13
|
||||||
|
initialDLBWPstartSymbolAndLength_0 = 40;
|
||||||
|
|
||||||
|
initialDLBWPk0_1 = 0;
|
||||||
|
initialDLBWPmappingType_1 = 0;
|
||||||
|
#this is SS=2,L=12
|
||||||
|
initialDLBWPstartSymbolAndLength_1 = 53;
|
||||||
|
|
||||||
|
initialDLBWPk0_2 = 0;
|
||||||
|
initialDLBWPmappingType_2 = 0;
|
||||||
|
#this is SS=1,L=12
|
||||||
|
initialDLBWPstartSymbolAndLength_2 = 54;
|
||||||
|
|
||||||
|
initialDLBWPk0_3 = 0;
|
||||||
|
initialDLBWPmappingType_3 = 0;
|
||||||
|
#this is SS=1,L=4 //5 (4 is for 43, 5 is for 57)
|
||||||
|
initialDLBWPstartSymbolAndLength_3 = 57; //43; //57;
|
||||||
|
#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 = 6366; //28875; //6366; #6407; #3384;
|
||||||
|
# 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 = 13;
|
||||||
|
preambleReceivedTargetPower = -100;
|
||||||
|
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||||
|
preambleTransMax = 6;
|
||||||
|
#powerRampingStep
|
||||||
|
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||||
|
powerRampingStep = 1;
|
||||||
|
#ra_ReponseWindow
|
||||||
|
#1,2,4,8,10,20,40,80
|
||||||
|
ra_ResponseWindow = 5;
|
||||||
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||||
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14; //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,
|
||||||
|
# pusch-ConfigCommon (up to 16 elements)
|
||||||
|
initialULBWPk2_0 = 2;
|
||||||
|
initialULBWPmappingType_0 = 1
|
||||||
|
# this is SS=0 L=11
|
||||||
|
initialULBWPstartSymbolAndLength_0 = 55;
|
||||||
|
|
||||||
|
initialULBWPk2_1 = 2;
|
||||||
|
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;
|
||||||
|
|
||||||
|
# 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; #0x80;
|
||||||
|
|
||||||
|
# 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; //8; //7;
|
||||||
|
nrofDownlinkSymbols = 6; //0; //6;
|
||||||
|
nrofUplinkSlots = 2;
|
||||||
|
nrofUplinkSymbols = 4; //0; //4;
|
||||||
|
|
||||||
|
ssPBCH_BlockPower = -25;
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
///X2
|
||||||
|
enable_x2 = "yes";
|
||||||
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
target_enb_x2_ip_address = (
|
||||||
|
{ ipv4 = "CI_FR1_CTL_ENB_IP_ADDR";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_S1_MME = "CI_GNB_IP_ADDR";
|
||||||
|
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_S1U = "CI_GNB_IP_ADDR";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
GNB_IPV4_ADDRESS_FOR_X2C = "CI_GNB_IP_ADDR";
|
||||||
|
GNB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [7];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 114;
|
||||||
|
eNB_instances = [0];
|
||||||
|
# clock_src = "external";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
|
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||||
|
//parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||||
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
|
worker_config = "WORKER_ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
|
uicc: {
|
||||||
|
opc = "testopc";
|
||||||
|
};
|
||||||
@@ -173,6 +173,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -184,6 +185,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,429 @@
|
|||||||
|
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
eNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
eNB_ID = 0xe00;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_ENB";
|
||||||
|
|
||||||
|
eNB_name = "eNB-Eurecom-LTEBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
plmn_list = ( { mcc = 208; mnc = 93; mnc_length = 2; } );
|
||||||
|
|
||||||
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
node_function = "3GPP_eNODEB";
|
||||||
|
node_timing = "synch_to_ext_device";
|
||||||
|
node_synch_ref = 0;
|
||||||
|
frame_type = "FDD";
|
||||||
|
tdd_config = 3;
|
||||||
|
tdd_config_s = 0;
|
||||||
|
prefix_type = "NORMAL";
|
||||||
|
eutra_band = 7;
|
||||||
|
downlink_frequency = 2680000000L;
|
||||||
|
uplink_frequency_offset = -120000000;
|
||||||
|
Nid_cell = 0;
|
||||||
|
N_RB_DL = 25;
|
||||||
|
Nid_cell_mbsfn = 0;
|
||||||
|
nb_antenna_ports = 1;
|
||||||
|
nb_antennas_tx = 1;
|
||||||
|
nb_antennas_rx = 1;
|
||||||
|
tx_gain = 90;
|
||||||
|
rx_gain = 125;
|
||||||
|
pbch_repetition = "FALSE";
|
||||||
|
prach_root = 0;
|
||||||
|
prach_config_index = 0;
|
||||||
|
prach_high_speed = "DISABLE";
|
||||||
|
prach_zero_correlation = 1;
|
||||||
|
prach_freq_offset = 2;
|
||||||
|
pucch_delta_shift = 1;
|
||||||
|
pucch_nRB_CQI = 0;
|
||||||
|
pucch_nCS_AN = 0;
|
||||||
|
pucch_n1_AN = 0;
|
||||||
|
pdsch_referenceSignalPower = -27;
|
||||||
|
pdsch_p_b = 0;
|
||||||
|
pusch_n_SB = 1;
|
||||||
|
pusch_enable64QAM = "DISABLE";
|
||||||
|
pusch_hoppingMode = "interSubFrame";
|
||||||
|
pusch_hoppingOffset = 0;
|
||||||
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
|
pusch_groupAssignment = 0;
|
||||||
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
|
pusch_nDMRS1 = 1;
|
||||||
|
phich_duration = "NORMAL";
|
||||||
|
phich_resource = "ONESIXTH";
|
||||||
|
srs_enable = "DISABLE";
|
||||||
|
/* srs_BandwidthConfig =;
|
||||||
|
srs_SubframeConfig =;
|
||||||
|
srs_ackNackST =;
|
||||||
|
srs_MaxUpPts =;*/
|
||||||
|
|
||||||
|
pusch_p0_Nominal = -96;
|
||||||
|
pusch_alpha = "AL1";
|
||||||
|
pucch_p0_Nominal = -104;
|
||||||
|
msg3_delta_Preamble = 6;
|
||||||
|
pucch_deltaF_Format1 = "deltaF2";
|
||||||
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
|
rach_numberOfRA_Preambles = 64;
|
||||||
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
|
/*
|
||||||
|
rach_sizeOfRA_PreamblesGroupA = ;
|
||||||
|
rach_messageSizeGroupA = ;
|
||||||
|
rach_messagePowerOffsetGroupB = ;
|
||||||
|
*/
|
||||||
|
rach_powerRampingStep = 4;
|
||||||
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
|
rach_preambleTransMax = 10;
|
||||||
|
rach_raResponseWindowSize = 10;
|
||||||
|
rach_macContentionResolutionTimer = 48;
|
||||||
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
|
|
||||||
|
pcch_default_PagingCycle = 128;
|
||||||
|
pcch_nB = "oneT";
|
||||||
|
bcch_modificationPeriodCoeff = 2;
|
||||||
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
|
ue_TimersAndConstants_n310 = 20;
|
||||||
|
ue_TimersAndConstants_n311 = 1;
|
||||||
|
ue_TransmissionMode = 1;
|
||||||
|
mbms_dedicated_serving_cell = "ENABLE"
|
||||||
|
|
||||||
|
//Parameters for SIB18
|
||||||
|
rxPool_sc_CP_Len = "normal";
|
||||||
|
rxPool_sc_Period = "sf40";
|
||||||
|
rxPool_data_CP_Len = "normal";
|
||||||
|
rxPool_ResourceConfig_prb_Num = 20;
|
||||||
|
rxPool_ResourceConfig_prb_Start = 5;
|
||||||
|
rxPool_ResourceConfig_prb_End = 44;
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
/* rxPool_dataHoppingConfig_hoppingParameter = 0;
|
||||||
|
rxPool_dataHoppingConfig_numSubbands = "ns1";
|
||||||
|
rxPool_dataHoppingConfig_rbOffset = 0;
|
||||||
|
rxPool_commTxResourceUC-ReqAllowed = "TRUE";
|
||||||
|
*/
|
||||||
|
// Parameters for SIB19
|
||||||
|
discRxPool_cp_Len = "normal"
|
||||||
|
discRxPool_discPeriod = "rf32"
|
||||||
|
discRxPool_numRetx = 1;
|
||||||
|
discRxPool_numRepetition = 2;
|
||||||
|
discRxPool_ResourceConfig_prb_Num = 5;
|
||||||
|
discRxPool_ResourceConfig_prb_Start = 3;
|
||||||
|
discRxPool_ResourceConfig_prb_End = 21;
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
srb1_parameters :
|
||||||
|
{
|
||||||
|
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||||
|
timer_poll_retransmit = 80;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||||
|
timer_reordering = 35;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||||
|
timer_status_prohibit = 0;
|
||||||
|
|
||||||
|
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||||
|
poll_pdu = 4;
|
||||||
|
|
||||||
|
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||||
|
poll_byte = 99999;
|
||||||
|
|
||||||
|
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||||
|
max_retx_threshold = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
enable_measurement_reports = "no";
|
||||||
|
|
||||||
|
///X2
|
||||||
|
enable_x2 = "no";
|
||||||
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
|
////////// MCE parameters:
|
||||||
|
target_mce_m2_ip_address = ( { ipv4 = "127.0.0.7";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
///M2
|
||||||
|
enable_enb_m2 = "yes";
|
||||||
|
|
||||||
|
|
||||||
|
mbms_configuration_data_list = (
|
||||||
|
{
|
||||||
|
mbsfn_sync_area = 0x0001;
|
||||||
|
mbms_service_area_list=(
|
||||||
|
{
|
||||||
|
mbms_service_area=0x0001;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_M2C = "127.0.0.2/24";
|
||||||
|
ENB_PORT_FOR_M2C = 36443; # Spec 36443
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
phy_test_mode = 0;
|
||||||
|
puSch10xSnr = 200;
|
||||||
|
puCch10xSnr = 200;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MCEs = (
|
||||||
|
{
|
||||||
|
MCE_ID = 0xe00;
|
||||||
|
|
||||||
|
MCE_name = "MCE-Vicomtech-LTEBox";
|
||||||
|
|
||||||
|
//M2
|
||||||
|
enable_mce_m2 = "yes";
|
||||||
|
|
||||||
|
//M3
|
||||||
|
enable_mce_m3 = "yes";
|
||||||
|
|
||||||
|
target_mme_m3_ip_address = ( { ipv4 = "127.0.0.18";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
MCE_INTERFACE_NAME_FOR_M2_ENB = "lo";
|
||||||
|
MCE_IPV4_ADDRESS_FOR_M2C = "127.0.0.7/24";
|
||||||
|
MCE_PORT_FOR_M2C = 36443; # Spec 36443
|
||||||
|
|
||||||
|
MCE_INTERFACE_NAME_FOR_M3_MME = "lo";
|
||||||
|
MCE_IPV4_ADDRESS_FOR_M3C = "127.0.0.3/24";
|
||||||
|
MCE_PORT_FOR_M3C = 36444; # Spec 36444
|
||||||
|
};
|
||||||
|
|
||||||
|
plnm:
|
||||||
|
{
|
||||||
|
mcc = 208;
|
||||||
|
mnc = 93;
|
||||||
|
mnc_length = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
mbms_sched_info :
|
||||||
|
{
|
||||||
|
mcch_update_time = 10;
|
||||||
|
mbms_area_config_list = (
|
||||||
|
{
|
||||||
|
common_sf_allocation_period = 1; #rf4(0) rf8(1) rf16(2) rf32(3) rf64(4) rf128(5) rf256(6)
|
||||||
|
mbms_area_id = 0;
|
||||||
|
pmch_config_list = (
|
||||||
|
{
|
||||||
|
allocated_sf_end=512;
|
||||||
|
data_mcs=15;
|
||||||
|
mch_scheduling_period = 0; #rf8(0) rf16(1) rf32(2) rf64(3) rf128(4) rf256(5) rf512(6) rf1024(7)
|
||||||
|
mbms_session_list = (
|
||||||
|
{
|
||||||
|
#plnm + service_id ->tmgi
|
||||||
|
plnm:
|
||||||
|
{
|
||||||
|
mcc = 208;
|
||||||
|
mnc = 93;
|
||||||
|
mnc_length = 2;
|
||||||
|
}
|
||||||
|
service_id=0; #keep this allways as 0 (workaround for TUN if)
|
||||||
|
lcid=5; #this must be properly defined lcid:6+service:0 -> rab_id:5 //with new RLC set lcid either 4 or 5
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
mbms_sf_config_list = (
|
||||||
|
{
|
||||||
|
radioframe_allocation_period=0; #n1(0) n2(1) n4(2) n8(3) n16(4) n32(5)
|
||||||
|
radioframe_alloocation_offset=0;
|
||||||
|
num_frame="oneFrame";
|
||||||
|
subframe_allocation=57; #xx111001
|
||||||
|
//num_frame="fourFrame";
|
||||||
|
//subframe_allocation=14548987; #
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
mcch_config_per_mbsfn_area = (
|
||||||
|
{
|
||||||
|
mbsfn_area = 0;
|
||||||
|
pdcch_length = 1; #s1(0), s2(1)
|
||||||
|
repetition_period = 0; #rf32(0), rf64(1), rf128(2), rf256(3)
|
||||||
|
offset = 0;
|
||||||
|
modification_period = 0; #rf512(0; rf1024(1)
|
||||||
|
subframe_allocation_info = 32; #BITSTRING (6bits -> one frame) xx100000
|
||||||
|
mcs = 0; #n2(0), n7(1), n13(2), n19(3)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
#); #end mbms_scheduling_info
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MMEs = (
|
||||||
|
{
|
||||||
|
MME_ID = 0xe00;
|
||||||
|
|
||||||
|
MME_name = "MME-MBMS-Vicomtech-LTEBox";
|
||||||
|
|
||||||
|
//M3
|
||||||
|
enable_mme_m3 = "yes";
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
MME_INTERFACE_NAME_FOR_M3_MCE = "lo";
|
||||||
|
MME_IPV4_ADDRESS_FOR_M3C = "127.0.0.18/24";
|
||||||
|
MME_PORT_FOR_M3C = 36444; # Spec 36444
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [7];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 125;
|
||||||
|
eNB_instances = [0];
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
|
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||||
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
|
worker_config = "WORKER_ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_CONTROLLER :
|
||||||
|
{
|
||||||
|
FLEXRAN_ENABLED = "no";
|
||||||
|
FLEXRAN_INTERFACE_NAME = "ens3";
|
||||||
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
|
FLEXRAN_PORT = 2210;
|
||||||
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
|
//rfsimulator :
|
||||||
|
//{
|
||||||
|
//options = ("chanmod");
|
||||||
|
//modelname = "AWGN";
|
||||||
|
//};
|
||||||
|
|
||||||
@@ -102,6 +102,7 @@ eNBs =
|
|||||||
ue_TimersAndConstants_n310 = 20;
|
ue_TimersAndConstants_n310 = 20;
|
||||||
ue_TimersAndConstants_n311 = 1;
|
ue_TimersAndConstants_n311 = 1;
|
||||||
ue_TransmissionMode = 1;
|
ue_TransmissionMode = 1;
|
||||||
|
mbms_dedicated_serving_cell = "DISABLE"
|
||||||
|
|
||||||
//Parameters for SIB18
|
//Parameters for SIB18
|
||||||
rxPool_sc_CP_Len = "normal";
|
rxPool_sc_CP_Len = "normal";
|
||||||
@@ -173,6 +174,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -184,6 +186,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
////////// MCE parameters:
|
////////// MCE parameters:
|
||||||
target_mce_m2_ip_address = ( { ipv4 = "127.0.0.7";
|
target_mce_m2_ip_address = ( { ipv4 = "127.0.0.7";
|
||||||
@@ -295,8 +299,8 @@ MCEs = (
|
|||||||
pmch_config_list = (
|
pmch_config_list = (
|
||||||
{
|
{
|
||||||
allocated_sf_end=32;
|
allocated_sf_end=32;
|
||||||
data_mcs=14;
|
data_mcs=15;
|
||||||
mch_scheduling_period = 0; #rf8(0)
|
mch_scheduling_period = 0; #rf8(0) rf16(1) rf32(2) rf64(3) rf128(4) rf256(5) rf512(6) rf1024(7)
|
||||||
mbms_session_list = (
|
mbms_session_list = (
|
||||||
{
|
{
|
||||||
#plnm + service_id ->tmgi
|
#plnm + service_id ->tmgi
|
||||||
@@ -337,7 +341,7 @@ MCEs = (
|
|||||||
offset = 0;
|
offset = 0;
|
||||||
modification_period = 0; #rf512(0; rf1024(1)
|
modification_period = 0; #rf512(0; rf1024(1)
|
||||||
subframe_allocation_info = 32; #BITSTRING (6bits -> one frame) xx100000
|
subframe_allocation_info = 32; #BITSTRING (6bits -> one frame) xx100000
|
||||||
mcs = 1; #n2(0), n7(1), n13(2), n19(3)
|
mcs = 0; #n2(0), n7(1), n13(2), n19(3)
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -416,3 +420,10 @@ NETWORK_CONTROLLER :
|
|||||||
rrc_log_level ="info";
|
rrc_log_level ="info";
|
||||||
rrc_log_verbosity ="medium";
|
rrc_log_verbosity ="medium";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//rfsimulator :
|
||||||
|
//{
|
||||||
|
//options = ("chanmod");
|
||||||
|
//modelname = "AWGN";
|
||||||
|
//};
|
||||||
|
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -147,6 +148,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -141,6 +141,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -150,6 +151,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -232,7 +235,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -150,6 +151,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -232,7 +235,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -150,6 +151,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -232,7 +235,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -176,6 +176,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -187,6 +188,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -251,7 +254,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -176,6 +176,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -187,6 +188,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -251,7 +254,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -176,6 +176,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -187,6 +188,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
@@ -251,7 +254,7 @@ NETWORK_CONTROLLER :
|
|||||||
{
|
{
|
||||||
FLEXRAN_ENABLED = "no";
|
FLEXRAN_ENABLED = "no";
|
||||||
FLEXRAN_INTERFACE_NAME = "lo";
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
FLEXRAN_IPV4_ADDRESS = "CI_FLEXRAN_CTL_IP_ADDR";
|
||||||
FLEXRAN_PORT = 2210;
|
FLEXRAN_PORT = 2210;
|
||||||
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
FLEXRAN_AWAIT_RECONF = "no";
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
|||||||
@@ -144,6 +144,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "192.168.15.130";
|
mme_ip_address = ( { ipv4 = "192.168.15.130";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -155,6 +156,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
|
|
||||||
////////// MCE parameters:
|
////////// MCE parameters:
|
||||||
|
|||||||
@@ -144,6 +144,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "127.0.0.3";
|
mme_ip_address = ( { ipv4 = "127.0.0.3";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -155,6 +156,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
|
|
||||||
////////// MCE parameters:
|
////////// MCE parameters:
|
||||||
|
|||||||
@@ -174,6 +174,7 @@ eNBs =
|
|||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
|
port = 36412 ;
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
@@ -185,6 +186,8 @@ eNBs =
|
|||||||
enable_x2 = "no";
|
enable_x2 = "no";
|
||||||
t_reloc_prep = 1000; /* unit: millisecond */
|
t_reloc_prep = 1000; /* unit: millisecond */
|
||||||
tx2_reloc_overall = 2000; /* unit: millisecond */
|
tx2_reloc_overall = 2000; /* unit: millisecond */
|
||||||
|
t_dc_prep = 1000; /* unit: millisecond */
|
||||||
|
t_dc_overall = 2000; /* unit: millisecond */
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,23 +1,25 @@
|
|||||||
RUs = (
|
RUs =
|
||||||
{
|
(
|
||||||
local_if_name = "lo";
|
{
|
||||||
remote_address = "127.0.0.1"
|
local_if_name = "lo";
|
||||||
local_address = "127.0.0.2";
|
remote_address = "127.0.0.1"
|
||||||
local_portc = 50000;
|
local_address = "127.0.0.2";
|
||||||
remote_portc = 50000;
|
local_portc = 50000;
|
||||||
local_portd = 50001;
|
remote_portc = 50000;
|
||||||
remote_portd = 50001;
|
local_portd = 50001;
|
||||||
local_rf = "yes"
|
remote_portd = 50001;
|
||||||
tr_preference = "udp_if4p5";
|
local_rf = "yes"
|
||||||
nb_tx = 1;
|
tr_preference = "udp_if4p5";
|
||||||
nb_rx = 1;
|
nb_tx = 1;
|
||||||
max_pdschReferenceSignalPower = -27;
|
nb_rx = 1;
|
||||||
max_rxgain = 115;
|
max_pdschReferenceSignalPower = -27;
|
||||||
bands = [7];
|
max_rxgain = 115;
|
||||||
}
|
bands = [7];
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
THREAD_STRUCT = (
|
THREAD_STRUCT =
|
||||||
|
(
|
||||||
{
|
{
|
||||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||||
@@ -26,19 +28,20 @@ THREAD_STRUCT = (
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
log_config = {
|
log_config =
|
||||||
global_log_level ="error";
|
{
|
||||||
global_log_verbosity ="medium";
|
global_log_level ="error";
|
||||||
hw_log_level ="error";
|
global_log_verbosity ="medium";
|
||||||
hw_log_verbosity ="medium";
|
hw_log_level ="error";
|
||||||
phy_log_level ="error";
|
hw_log_verbosity ="medium";
|
||||||
phy_log_verbosity ="medium";
|
phy_log_level ="error";
|
||||||
mac_log_level ="error";
|
phy_log_verbosity ="medium";
|
||||||
mac_log_verbosity ="high";
|
mac_log_level ="error";
|
||||||
rlc_log_level ="error";
|
mac_log_verbosity ="high";
|
||||||
rlc_log_verbosity ="medium";
|
rlc_log_level ="error";
|
||||||
pdcp_log_level ="error";
|
rlc_log_verbosity ="medium";
|
||||||
pdcp_log_verbosity ="medium";
|
pdcp_log_level ="error";
|
||||||
rrc_log_level ="error";
|
pdcp_log_verbosity ="medium";
|
||||||
rrc_log_verbosity ="medium";
|
rrc_log_level ="error";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,23 +1,25 @@
|
|||||||
RUs = (
|
RUs =
|
||||||
{
|
(
|
||||||
local_if_name = "lo";
|
{
|
||||||
remote_address = "127.0.0.1"
|
local_if_name = "lo";
|
||||||
local_address = "127.0.0.2";
|
remote_address = "127.0.0.1"
|
||||||
local_portc = 50000;
|
local_address = "127.0.0.2";
|
||||||
remote_portc = 50000;
|
local_portc = 50000;
|
||||||
local_portd = 50001;
|
remote_portc = 50000;
|
||||||
remote_portd = 50001;
|
local_portd = 50001;
|
||||||
local_rf = "yes"
|
remote_portd = 50001;
|
||||||
tr_preference = "udp_if4p5";
|
local_rf = "yes"
|
||||||
nb_tx = 1;
|
tr_preference = "udp_if4p5";
|
||||||
nb_rx = 1;
|
nb_tx = 1;
|
||||||
max_pdschReferenceSignalPower = -27;
|
nb_rx = 1;
|
||||||
max_rxgain = 115;
|
max_pdschReferenceSignalPower = -27;
|
||||||
bands = [40];
|
max_rxgain = 115;
|
||||||
}
|
bands = [40];
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
THREAD_STRUCT = (
|
THREAD_STRUCT =
|
||||||
|
(
|
||||||
{
|
{
|
||||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||||
@@ -26,19 +28,20 @@ THREAD_STRUCT = (
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
log_config = {
|
log_config =
|
||||||
global_log_level ="error";
|
{
|
||||||
global_log_verbosity ="medium";
|
global_log_level ="error";
|
||||||
hw_log_level ="error";
|
global_log_verbosity ="medium";
|
||||||
hw_log_verbosity ="medium";
|
hw_log_level ="error";
|
||||||
phy_log_level ="error";
|
hw_log_verbosity ="medium";
|
||||||
phy_log_verbosity ="medium";
|
phy_log_level ="error";
|
||||||
mac_log_level ="error";
|
phy_log_verbosity ="medium";
|
||||||
mac_log_verbosity ="high";
|
mac_log_level ="error";
|
||||||
rlc_log_level ="error";
|
mac_log_verbosity ="high";
|
||||||
rlc_log_verbosity ="medium";
|
rlc_log_level ="error";
|
||||||
pdcp_log_level ="error";
|
rlc_log_verbosity ="medium";
|
||||||
pdcp_log_verbosity ="medium";
|
pdcp_log_level ="error";
|
||||||
rrc_log_level ="error";
|
pdcp_log_verbosity ="medium";
|
||||||
rrc_log_verbosity ="medium";
|
rrc_log_level ="error";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -57,7 +57,9 @@ OAI_UE_PROCESS_ASSERTION = -22
|
|||||||
OAI_UE_PROCESS_FAILED = -23
|
OAI_UE_PROCESS_FAILED = -23
|
||||||
OAI_UE_PROCESS_NO_TUNNEL_INTERFACE = -24
|
OAI_UE_PROCESS_NO_TUNNEL_INTERFACE = -24
|
||||||
OAI_UE_PROCESS_SEG_FAULT = -25
|
OAI_UE_PROCESS_SEG_FAULT = -25
|
||||||
|
OAI_UE_PROCESS_NO_MBMS_MSGS = -26
|
||||||
OAI_UE_PROCESS_OK = +6
|
OAI_UE_PROCESS_OK = +6
|
||||||
|
INVALID_PARAMETER = -50
|
||||||
|
|
||||||
UE_STATUS_DETACHED = 0
|
UE_STATUS_DETACHED = 0
|
||||||
UE_STATUS_DETACHING = 1
|
UE_STATUS_DETACHING = 1
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
9d690a12: #oppo
|
||||||
|
- adb shell input keyevent KEYCODE_POWER
|
||||||
|
- adb shell input swipe 300 700 300 0
|
||||||
|
- adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
|
||||||
|
- adb shell input keyevent 20
|
||||||
|
- adb shell input tap 968 324
|
||||||
|
002: #s10
|
||||||
|
- adb shell input keyevent KEYCODE_POWER
|
||||||
|
- adb shell input swipe 200 900 200 300
|
||||||
|
- adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
|
||||||
|
- adb shell input tap 968 324
|
||||||
|
003: #s20
|
||||||
|
- adb shell input keyevent KEYCODE_POWER
|
||||||
|
- adb shell input swipe 200 900 200 300
|
||||||
|
- adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
|
||||||
|
- adb shell input tap 968 324
|
||||||
|
004: #xperia
|
||||||
|
- tbd
|
||||||
|
- tbd
|
||||||
|
- tbd
|
||||||
@@ -37,6 +37,7 @@ memleak:openair2/UTIL/OMG/omg_hashtable.c
|
|||||||
// _emm_as_encode function creates the encoded buffer
|
// _emm_as_encode function creates the encoded buffer
|
||||||
//
|
//
|
||||||
memleak:openair3/NAS/UE/EMM/SAP/emm_as.c
|
memleak:openair3/NAS/UE/EMM/SAP/emm_as.c
|
||||||
|
memleak:openair1/PHY/INIT/nr_init_ue.c
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//*****************************************************************************
|
//*****************************************************************************
|
||||||
// section for files not used in oai exec's included in CI.
|
// section for files not used in oai exec's included in CI.
|
||||||
@@ -82,6 +83,16 @@ nullPointer:common/utils/T/tracer/multi.c:265
|
|||||||
// the tests
|
// the tests
|
||||||
arrayIndexOutOfBounds:openair2/LAYER2/rlc_v2/tests/test.c:401
|
arrayIndexOutOfBounds:openair2/LAYER2/rlc_v2/tests/test.c:401
|
||||||
//
|
//
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// this file is used for testing the NR RLC implementation, this error is
|
||||||
|
// not a problem, the programmer has to know what she does when writing
|
||||||
|
// the tests
|
||||||
|
arrayIndexOutOfBounds:openair2/LAYER2/nr_rlc/tests/test.c:451
|
||||||
|
//
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// cppcheck does not understand the different lengths of arrays
|
||||||
|
arrayIndexOutOfBounds:openair1/SIMULATION/TOOLS/random_channel.c:705
|
||||||
|
arrayIndexOutOfBounds:openair1/SIMULATION/TOOLS/random_channel.c:706
|
||||||
//*****************************************************************************
|
//*****************************************************************************
|
||||||
//
|
//
|
||||||
// True problems we don't know how to fix, Suppression is commented out,
|
// True problems we don't know how to fix, Suppression is commented out,
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ Last point, this documentation is valid for all CI-supported branches:
|
|||||||
|
|
||||||
* `master`
|
* `master`
|
||||||
* `develop`
|
* `develop`
|
||||||
* `develop-nr`
|
|
||||||
|
|
||||||
But the feature set may not be aligned. **The principles still apply.**
|
But the feature set may not be aligned. **The principles still apply.**
|
||||||
|
|
||||||
|
|||||||
+204
-70
@@ -46,7 +46,6 @@ from multiprocessing import Process, Lock, SimpleQueue
|
|||||||
import sshconnection as SSH
|
import sshconnection as SSH
|
||||||
import helpreadme as HELP
|
import helpreadme as HELP
|
||||||
import constants as CONST
|
import constants as CONST
|
||||||
import html
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# Class Declaration
|
# Class Declaration
|
||||||
@@ -61,49 +60,18 @@ class EPCManagement():
|
|||||||
self.SourceCodePath = ''
|
self.SourceCodePath = ''
|
||||||
self.Type = ''
|
self.Type = ''
|
||||||
self.PcapFileName = ''
|
self.PcapFileName = ''
|
||||||
self.htmlObj = None
|
|
||||||
self.testCase_id = ''
|
self.testCase_id = ''
|
||||||
self.MmeIPAddress = ''
|
self.MmeIPAddress = ''
|
||||||
self.containerPrefix = 'prod'
|
self.containerPrefix = 'prod'
|
||||||
|
self.mmeConfFile = 'mme.conf'
|
||||||
|
self.yamlPath = ''
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
# Setter and Getters on Public Members
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
|
|
||||||
def SetIPAddress(self, ipaddress):
|
|
||||||
self.IPAddress = ipaddress
|
|
||||||
def GetIPAddress(self):
|
|
||||||
return self.IPAddress
|
|
||||||
def SetUserName(self, username):
|
|
||||||
self.UserName = username
|
|
||||||
def GetUserName(self):
|
|
||||||
return self.UserName
|
|
||||||
def SetPassword(self, password):
|
|
||||||
self.Password = password
|
|
||||||
def GetPassword(self):
|
|
||||||
return self.Password
|
|
||||||
def SetSourceCodePath(self, sourcecodepath):
|
|
||||||
self.SourceCodePath = sourcecodepath
|
|
||||||
def GetSourceCodePath(self):
|
|
||||||
return self.SourceCodePath
|
|
||||||
def SetType(self, kind):
|
|
||||||
self.Type = kind
|
|
||||||
def GetType(self):
|
|
||||||
return self.Type
|
|
||||||
def SetHtmlObj(self, obj):
|
|
||||||
self.htmlObj = obj
|
|
||||||
def SetTestCase_id(self, idx):
|
|
||||||
self.testCase_id = idx
|
|
||||||
def GetMmeIPAddress(self):
|
|
||||||
return self.MmeIPAddress
|
|
||||||
def SetContainerPrefix(self, prefix):
|
|
||||||
self.containerPrefix = prefix
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# EPC management functions
|
# EPC management functions
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
|
|
||||||
def InitializeHSS(self):
|
def InitializeHSS(self, HTML):
|
||||||
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
|
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
|
||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
|
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
|
||||||
@@ -145,10 +113,9 @@ class EPCManagement():
|
|||||||
else:
|
else:
|
||||||
logging.error('This option should not occur!')
|
logging.error('This option should not occur!')
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
|
|
||||||
def InitializeMME(self):
|
def InitializeMME(self, HTML):
|
||||||
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
|
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
|
||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
|
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
|
||||||
@@ -159,7 +126,7 @@ class EPCManagement():
|
|||||||
logging.debug('Using the OAI EPC Release 14 MME in Docker')
|
logging.debug('Using the OAI EPC Release 14 MME in Docker')
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup tshark -i eth0 -i lo:s10 -w /tmp/mme_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup tshark -i eth0 -i lo:s10 -w /tmp/mme_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup ./bin/oai_mme -c ./etc/mme.conf > mme_check_run.log 2>&1"', '\$', 5)
|
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup ./bin/oai_mme -c ./etc/' + self.mmeConfFile + ' > mme_check_run.log 2>&1"', '\$', 5)
|
||||||
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
||||||
logging.debug('Using the OAI EPC Release 14 MME')
|
logging.debug('Using the OAI EPC Release 14 MME')
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
||||||
@@ -184,8 +151,7 @@ class EPCManagement():
|
|||||||
else:
|
else:
|
||||||
logging.error('This option should not occur!')
|
logging.error('This option should not occur!')
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
|
|
||||||
def SetMmeIPAddress(self):
|
def SetMmeIPAddress(self):
|
||||||
# Not an error if we don't need an EPC
|
# Not an error if we don't need an EPC
|
||||||
@@ -206,7 +172,7 @@ class EPCManagement():
|
|||||||
else:
|
else:
|
||||||
self.MmeIPAddress = self.IPAddress
|
self.MmeIPAddress = self.IPAddress
|
||||||
|
|
||||||
def InitializeSPGW(self):
|
def InitializeSPGW(self, HTML):
|
||||||
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
|
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
|
||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
|
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
|
||||||
@@ -243,15 +209,14 @@ class EPCManagement():
|
|||||||
else:
|
else:
|
||||||
logging.error('This option should not occur!')
|
logging.error('This option should not occur!')
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
|
|
||||||
def CheckHSSProcess(self, status_queue):
|
def CheckHSSProcess(self, status_queue):
|
||||||
try:
|
try:
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-hss /bin/bash -c "ps aux | grep oai_hss"', '\$', 5)
|
mySSH.command('docker top ' + self.containerPrefix + '-oai-hss', '\$', 5)
|
||||||
else:
|
else:
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never hss | grep -v grep', '\$', 5)
|
mySSH.command('stdbuf -o0 ps -aux | grep --color=never hss | grep -v grep', '\$', 5)
|
||||||
if re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
@@ -276,7 +241,7 @@ class EPCManagement():
|
|||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-mme /bin/bash -c "ps aux | grep oai_mme"', '\$', 5)
|
mySSH.command('docker top ' + self.containerPrefix + '-oai-mme', '\$', 5)
|
||||||
else:
|
else:
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never mme | grep -v grep', '\$', 5)
|
mySSH.command('stdbuf -o0 ps -aux | grep --color=never mme | grep -v grep', '\$', 5)
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
@@ -303,11 +268,11 @@ class EPCManagement():
|
|||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "ps aux | grep oai_spgwc"', '\$', 5)
|
mySSH.command('docker top ' + self.containerPrefix + '-oai-spgwc', '\$', 5)
|
||||||
result = re.search('oai_spgwc -o -c ', mySSH.getBefore())
|
result = re.search('oai_spgwc -', mySSH.getBefore())
|
||||||
if result is not None:
|
if result is not None:
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-spgwu-tiny /bin/bash -c "ps aux | grep oai_spgwu"', '\$', 5)
|
mySSH.command('docker top ' + self.containerPrefix + '-oai-spgwu-tiny', '\$', 5)
|
||||||
result = re.search('oai_spgwu -o -c ', mySSH.getBefore())
|
result = re.search('oai_spgwu -', mySSH.getBefore())
|
||||||
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never spgw | grep -v grep', '\$', 5)
|
mySSH.command('stdbuf -o0 ps -aux | grep --color=never spgw | grep -v grep', '\$', 5)
|
||||||
result = re.search('spgwu -c ', mySSH.getBefore())
|
result = re.search('spgwu -c ', mySSH.getBefore())
|
||||||
@@ -328,7 +293,7 @@ class EPCManagement():
|
|||||||
except:
|
except:
|
||||||
os.kill(os.getppid(),signal.SIGUSR1)
|
os.kill(os.getppid(),signal.SIGUSR1)
|
||||||
|
|
||||||
def TerminateHSS(self):
|
def TerminateHSS(self, HTML):
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
@@ -361,10 +326,9 @@ class EPCManagement():
|
|||||||
else:
|
else:
|
||||||
logging.error('This should not happen!')
|
logging.error('This should not happen!')
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
|
|
||||||
def TerminateMME(self):
|
def TerminateMME(self, HTML):
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
@@ -388,10 +352,9 @@ class EPCManagement():
|
|||||||
else:
|
else:
|
||||||
logging.error('This should not happen!')
|
logging.error('This should not happen!')
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
|
|
||||||
def TerminateSPGW(self):
|
def TerminateSPGW(self, HTML):
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
@@ -432,8 +395,155 @@ class EPCManagement():
|
|||||||
else:
|
else:
|
||||||
logging.error('This should not happen!')
|
logging.error('This should not happen!')
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
|
def DeployEpc(self, HTML):
|
||||||
|
logging.debug('Trying to deploy')
|
||||||
|
if not re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
|
HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
|
||||||
|
HTML.CreateHtmlTabFooter(False)
|
||||||
|
sys.exit('Deploy not possible with this EPC type: ' + self.Type)
|
||||||
|
|
||||||
|
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
|
||||||
|
HELP.GenericHelp(CONST.Version)
|
||||||
|
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
|
||||||
|
sys.exit('Insufficient EPC Parameters')
|
||||||
|
mySSH = SSH.SSHConnection()
|
||||||
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
||||||
|
mySSH.command('docker-compose --version', '\$', 5)
|
||||||
|
result = re.search('docker-compose version 1', mySSH.getBefore())
|
||||||
|
if result is None:
|
||||||
|
mySSH.close()
|
||||||
|
HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
|
||||||
|
HTML.CreateHtmlTabFooter(False)
|
||||||
|
sys.exit('docker-compose not installed on ' + self.IPAddress)
|
||||||
|
|
||||||
|
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
|
||||||
|
mySSH.command('if [ -d ' + self.SourceCodePath + '/logs ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/logs ; fi', '\$', 5)
|
||||||
|
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts ' + self.SourceCodePath + '/logs', '\$', 5)
|
||||||
|
|
||||||
|
# deploying and configuring the cassandra database
|
||||||
|
# container names and services are currently hard-coded.
|
||||||
|
# they could be recovered by:
|
||||||
|
# - docker-compose config --services
|
||||||
|
# - docker-compose config | grep container_name
|
||||||
|
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
||||||
|
mySSH.copyout(self.IPAddress, self.UserName, self.Password, './' + self.yamlPath + '/docker-compose.yml', self.SourceCodePath + '/scripts')
|
||||||
|
mySSH.command('wget --quiet --tries=3 --retry-connrefused https://raw.githubusercontent.com/OPENAIRINTERFACE/openair-hss/develop/src/hss_rel14/db/oai_db.cql', '\$', 30)
|
||||||
|
mySSH.command('docker-compose down', '\$', 60)
|
||||||
|
mySSH.command('docker-compose up -d db_init', '\$', 60)
|
||||||
|
|
||||||
|
# databases take time...
|
||||||
|
time.sleep(10)
|
||||||
|
cnt = 0
|
||||||
|
db_init_status = False
|
||||||
|
while (cnt < 10):
|
||||||
|
mySSH.command('docker logs prod-db-init', '\$', 5)
|
||||||
|
result = re.search('OK', mySSH.getBefore())
|
||||||
|
if result is not None:
|
||||||
|
cnt = 10
|
||||||
|
db_init_status = True
|
||||||
|
else:
|
||||||
|
time.sleep(5)
|
||||||
|
cnt += 1
|
||||||
|
mySSH.command('docker rm -f prod-db-init', '\$', 5)
|
||||||
|
if not db_init_status:
|
||||||
|
HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
|
||||||
|
HTML.CreateHtmlTabFooter(False)
|
||||||
|
sys.exit('Cassandra DB deployment/configuration went wrong!')
|
||||||
|
|
||||||
|
# deploying EPC cNFs
|
||||||
|
mySSH.command('docker-compose up -d oai_spgwu', '\$', 60)
|
||||||
|
listOfContainers = 'prod-cassandra prod-oai-hss prod-oai-mme prod-oai-spgwc prod-oai-spgwu-tiny'
|
||||||
|
expectedHealthyContainers = 5
|
||||||
|
|
||||||
|
# Checking for additional services
|
||||||
|
mySSH.command('docker-compose config', '\$', 5)
|
||||||
|
configResponse = mySSH.getBefore()
|
||||||
|
if configResponse.count('flexran_rtc') == 1:
|
||||||
|
mySSH.command('docker-compose up -d flexran_rtc', '\$', 60)
|
||||||
|
listOfContainers += ' prod-flexran-rtc'
|
||||||
|
expectedHealthyContainers += 1
|
||||||
|
if configResponse.count('trf_gen') == 1:
|
||||||
|
mySSH.command('docker-compose up -d trf_gen', '\$', 60)
|
||||||
|
listOfContainers += ' prod-trf-gen'
|
||||||
|
expectedHealthyContainers += 1
|
||||||
|
|
||||||
|
# Checking if all are healthy
|
||||||
|
cnt = 0
|
||||||
|
while (cnt < 3):
|
||||||
|
mySSH.command('docker inspect --format=\'{{.State.Health.Status}}\' ' + listOfContainers, '\$', 10)
|
||||||
|
unhealthyNb = mySSH.getBefore().count('unhealthy')
|
||||||
|
healthyNb = mySSH.getBefore().count('healthy') - unhealthyNb
|
||||||
|
startingNb = mySSH.getBefore().count('starting')
|
||||||
|
if healthyNb == expectedHealthyContainers:
|
||||||
|
cnt = 10
|
||||||
|
else:
|
||||||
|
time.sleep(10)
|
||||||
|
cnt += 1
|
||||||
|
logging.debug(' -- ' + str(healthyNb) + ' healthy container(s)')
|
||||||
|
logging.debug(' -- ' + str(unhealthyNb) + ' unhealthy container(s)')
|
||||||
|
logging.debug(' -- ' + str(startingNb) + ' still starting container(s)')
|
||||||
|
if healthyNb == expectedHealthyContainers:
|
||||||
|
mySSH.command('docker exec -d prod-oai-hss /bin/bash -c "nohup tshark -i any -f \'port 9042 or port 3868\' -w /tmp/hss_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
||||||
|
mySSH.command('docker exec -d prod-oai-mme /bin/bash -c "nohup tshark -i any -f \'port 3868 or port 2123 or port 36412\' -w /tmp/mme_check_run.pcap 2>&1 > /dev/null"', '\$', 10)
|
||||||
|
mySSH.command('docker exec -d prod-oai-spgwc /bin/bash -c "nohup tshark -i any -f \'port 2123 or port 8805\' -w /tmp/spgwc_check_run.pcap 2>&1 > /dev/null"', '\$', 10)
|
||||||
|
# on SPGW-U, not capturing on SGI to avoid huge file
|
||||||
|
mySSH.command('docker exec -d prod-oai-spgwu-tiny /bin/bash -c "nohup tshark -i any -f \'port 8805\' -w /tmp/spgwu_check_run.pcap 2>&1 > /dev/null"', '\$', 10)
|
||||||
|
mySSH.close()
|
||||||
|
logging.debug('Deployment OK')
|
||||||
|
HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
else:
|
||||||
|
mySSH.close()
|
||||||
|
logging.debug('Deployment went wrong')
|
||||||
|
HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
|
||||||
|
|
||||||
|
def UndeployEpc(self, HTML):
|
||||||
|
logging.debug('Trying to undeploy')
|
||||||
|
# No check down, we suppose everything done before.
|
||||||
|
|
||||||
|
mySSH = SSH.SSHConnection()
|
||||||
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
||||||
|
# Recovering logs and pcap files
|
||||||
|
mySSH.command('cd ' + self.SourceCodePath + '/logs', '\$', 5)
|
||||||
|
mySSH.command('docker exec -it prod-oai-hss /bin/bash -c "killall --signal SIGINT oai_hss tshark"', '\$', 5)
|
||||||
|
mySSH.command('docker exec -it prod-oai-mme /bin/bash -c "killall --signal SIGINT tshark"', '\$', 5)
|
||||||
|
mySSH.command('docker exec -it prod-oai-spgwc /bin/bash -c "killall --signal SIGINT oai_spgwc tshark"', '\$', 5)
|
||||||
|
mySSH.command('docker exec -it prod-oai-spgwu-tiny /bin/bash -c "killall --signal SIGINT tshark"', '\$', 5)
|
||||||
|
mySSH.command('docker logs prod-oai-hss > hss_' + self.testCase_id + '.log', '\$', 5)
|
||||||
|
mySSH.command('docker logs prod-oai-mme > mme_' + self.testCase_id + '.log', '\$', 5)
|
||||||
|
mySSH.command('docker logs prod-oai-spgwc > spgwc_' + self.testCase_id + '.log', '\$', 5)
|
||||||
|
mySSH.command('docker logs prod-oai-spgwu-tiny > spgwu_' + self.testCase_id + '.log', '\$', 5)
|
||||||
|
mySSH.command('docker cp prod-oai-hss:/tmp/hss_check_run.pcap hss_' + self.testCase_id + '.pcap', '\$', 60)
|
||||||
|
mySSH.command('docker cp prod-oai-mme:/tmp/mme_check_run.pcap mme_' + self.testCase_id + '.pcap', '\$', 60)
|
||||||
|
mySSH.command('docker cp prod-oai-spgwc:/tmp/spgwc_check_run.pcap spgwc_' + self.testCase_id + '.pcap', '\$', 60)
|
||||||
|
mySSH.command('docker cp prod-oai-spgwu-tiny:/tmp/spgwu_check_run.pcap spgwu_' + self.testCase_id + '.pcap', '\$', 60)
|
||||||
|
# Remove all
|
||||||
|
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
||||||
|
listOfContainers = 'prod-cassandra prod-oai-hss prod-oai-mme prod-oai-spgwc prod-oai-spgwu-tiny'
|
||||||
|
nbContainers = 5
|
||||||
|
# Checking for additional services
|
||||||
|
mySSH.command('docker-compose config', '\$', 5)
|
||||||
|
configResponse = mySSH.getBefore()
|
||||||
|
if configResponse.count('flexran_rtc') == 1:
|
||||||
|
listOfContainers += ' prod-flexran-rtc'
|
||||||
|
nbContainers += 1
|
||||||
|
if configResponse.count('trf_gen') == 1:
|
||||||
|
listOfContainers += ' prod-trf-gen'
|
||||||
|
nbContainers += 1
|
||||||
|
|
||||||
|
mySSH.command('docker-compose down', '\$', 60)
|
||||||
|
mySSH.command('docker inspect --format=\'{{.State.Health.Status}}\' ' + listOfContainers, '\$', 10)
|
||||||
|
noMoreContainerNb = mySSH.getBefore().count('No such object')
|
||||||
|
mySSH.command('docker inspect --format=\'{{.Name}}\' prod-oai-public-net prod-oai-private-net', '\$', 10)
|
||||||
|
noMoreNetworkNb = mySSH.getBefore().count('No such object')
|
||||||
|
mySSH.close()
|
||||||
|
if noMoreContainerNb == nbContainers and noMoreNetworkNb == 2:
|
||||||
|
logging.debug('Undeployment OK')
|
||||||
|
HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
else:
|
||||||
|
logging.debug('Undeployment went wrong')
|
||||||
|
HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
|
||||||
|
|
||||||
def LogCollectHSS(self):
|
def LogCollectHSS(self):
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
@@ -441,9 +551,17 @@ class EPCManagement():
|
|||||||
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
||||||
mySSH.command('rm -f hss.log.zip', '\$', 5)
|
mySSH.command('rm -f hss.log.zip', '\$', 5)
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-hss:/openair-hss/hss_check_run.log .', '\$', 60)
|
mySSH.command('docker inspect prod-oai-hss', '\$', 10)
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-hss:/tmp/hss_check_run.pcap .', '\$', 60)
|
result = re.search('No such object', mySSH.getBefore())
|
||||||
mySSH.command('zip hss.log.zip hss_check_run.*', '\$', 60)
|
if result is not None:
|
||||||
|
mySSH.command('cd ../logs', '\$', 5)
|
||||||
|
mySSH.command('rm -f hss.log.zip', '\$', 5)
|
||||||
|
mySSH.command('zip hss.log.zip hss_*.*', '\$', 60)
|
||||||
|
mySSH.command('mv hss.log.zip ../scripts', '\$', 60)
|
||||||
|
else:
|
||||||
|
mySSH.command('docker cp ' + self.containerPrefix + '-oai-hss:/openair-hss/hss_check_run.log .', '\$', 60)
|
||||||
|
mySSH.command('docker cp ' + self.containerPrefix + '-oai-hss:/tmp/hss_check_run.pcap .', '\$', 60)
|
||||||
|
mySSH.command('zip hss.log.zip hss_check_run.*', '\$', 60)
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
||||||
mySSH.command('zip hss.log.zip hss*.log', '\$', 60)
|
mySSH.command('zip hss.log.zip hss*.log', '\$', 60)
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S rm hss*.log', '\$', 5)
|
mySSH.command('echo ' + self.Password + ' | sudo -S rm hss*.log', '\$', 5)
|
||||||
@@ -463,9 +581,17 @@ class EPCManagement():
|
|||||||
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
||||||
mySSH.command('rm -f mme.log.zip', '\$', 5)
|
mySSH.command('rm -f mme.log.zip', '\$', 5)
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-mme:/openair-mme/mme_check_run.log .', '\$', 60)
|
mySSH.command('docker inspect prod-oai-mme', '\$', 10)
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-mme:/tmp/mme_check_run.pcap .', '\$', 60)
|
result = re.search('No such object', mySSH.getBefore())
|
||||||
mySSH.command('zip mme.log.zip mme_check_run.*', '\$', 60)
|
if result is not None:
|
||||||
|
mySSH.command('cd ../logs', '\$', 5)
|
||||||
|
mySSH.command('rm -f mme.log.zip', '\$', 5)
|
||||||
|
mySSH.command('zip mme.log.zip mme_*.*', '\$', 60)
|
||||||
|
mySSH.command('mv mme.log.zip ../scripts', '\$', 60)
|
||||||
|
else:
|
||||||
|
mySSH.command('docker cp ' + self.containerPrefix + '-oai-mme:/openair-mme/mme_check_run.log .', '\$', 60)
|
||||||
|
mySSH.command('docker cp ' + self.containerPrefix + '-oai-mme:/tmp/mme_check_run.pcap .', '\$', 60)
|
||||||
|
mySSH.command('zip mme.log.zip mme_check_run.*', '\$', 60)
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
||||||
mySSH.command('zip mme.log.zip mme*.log', '\$', 60)
|
mySSH.command('zip mme.log.zip mme*.log', '\$', 60)
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S rm mme*.log', '\$', 5)
|
mySSH.command('echo ' + self.Password + ' | sudo -S rm mme*.log', '\$', 5)
|
||||||
@@ -482,11 +608,19 @@ class EPCManagement():
|
|||||||
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
||||||
mySSH.command('rm -f spgw.log.zip', '\$', 5)
|
mySSH.command('rm -f spgw.log.zip', '\$', 5)
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-spgwc:/openair-spgwc/spgwc_check_run.log .', '\$', 60)
|
mySSH.command('docker inspect prod-oai-mme', '\$', 10)
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-spgwu-tiny:/openair-spgwu-tiny/spgwu_check_run.log .', '\$', 60)
|
result = re.search('No such object', mySSH.getBefore())
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-spgwc:/tmp/spgwc_check_run.pcap .', '\$', 60)
|
if result is not None:
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-spgwu-tiny:/tmp/spgwu_check_run.pcap .', '\$', 60)
|
mySSH.command('cd ../logs', '\$', 5)
|
||||||
mySSH.command('zip spgw.log.zip spgw*_check_run.*', '\$', 60)
|
mySSH.command('rm -f spgw.log.zip', '\$', 5)
|
||||||
|
mySSH.command('zip spgw.log.zip spgw*.*', '\$', 60)
|
||||||
|
mySSH.command('mv spgw.log.zip ../scripts', '\$', 60)
|
||||||
|
else:
|
||||||
|
mySSH.command('docker cp ' + self.containerPrefix + '-oai-spgwc:/openair-spgwc/spgwc_check_run.log .', '\$', 60)
|
||||||
|
mySSH.command('docker cp ' + self.containerPrefix + '-oai-spgwu-tiny:/openair-spgwu-tiny/spgwu_check_run.log .', '\$', 60)
|
||||||
|
mySSH.command('docker cp ' + self.containerPrefix + '-oai-spgwc:/tmp/spgwc_check_run.pcap .', '\$', 60)
|
||||||
|
mySSH.command('docker cp ' + self.containerPrefix + '-oai-spgwu-tiny:/tmp/spgwu_check_run.pcap .', '\$', 60)
|
||||||
|
mySSH.command('zip spgw.log.zip spgw*_check_run.*', '\$', 60)
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
||||||
mySSH.command('zip spgw.log.zip spgw*.log', '\$', 60)
|
mySSH.command('zip spgw.log.zip spgw*.log', '\$', 60)
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S rm spgw*.log', '\$', 5)
|
mySSH.command('echo ' + self.Password + ' | sudo -S rm spgw*.log', '\$', 5)
|
||||||
|
|||||||
+17
-62
@@ -64,6 +64,10 @@ class HTMLManagement():
|
|||||||
self.htmlTabIcons = []
|
self.htmlTabIcons = []
|
||||||
self.testXMLfiles = []
|
self.testXMLfiles = []
|
||||||
|
|
||||||
|
self.testUnstable = False
|
||||||
|
self.testMinStableId = '999999'
|
||||||
|
self.testStabilityPointReached = False
|
||||||
|
|
||||||
self.htmleNBFailureMsg = ''
|
self.htmleNBFailureMsg = ''
|
||||||
self.htmlUEFailureMsg = ''
|
self.htmlUEFailureMsg = ''
|
||||||
|
|
||||||
@@ -82,73 +86,14 @@ class HTMLManagement():
|
|||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# Setters and Getters
|
# Setters and Getters
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
def SethtmlUEFailureMsg(self,huefa):
|
|
||||||
self.htmlUEFailureMsg = huefa
|
|
||||||
def GethtmlUEFailureMsg(self):
|
|
||||||
return self.htmlUEFailureMsg
|
|
||||||
def SetHmleNBFailureMsg(self, msg):
|
|
||||||
self.htmleNBFailureMsg = msg
|
|
||||||
|
|
||||||
def Setdesc(self, dsc):
|
|
||||||
self.desc = dsc
|
|
||||||
|
|
||||||
def SetstartTime(self, sttime):
|
|
||||||
self.startTime = sttime
|
|
||||||
|
|
||||||
def SettestCase_id(self, tcid):
|
|
||||||
self.testCase_id = tcid
|
|
||||||
def GettestCase_id(self):
|
|
||||||
return self.testCase_id
|
|
||||||
|
|
||||||
def SetranRepository(self, repository):
|
|
||||||
self.ranRepository = repository
|
|
||||||
def SetranAllowMerge(self, merge):
|
|
||||||
self.ranAllowMerge = merge
|
|
||||||
def SetranBranch(self, branch):
|
|
||||||
self.ranBranch = branch
|
|
||||||
def SetranCommitID(self, commitid):
|
|
||||||
self.ranCommitID = commitid
|
|
||||||
def SetranTargetBranch(self, tbranch):
|
|
||||||
self.ranTargetBranch = tbranch
|
|
||||||
|
|
||||||
def SethtmlUEConnected(self, nbUEs):
|
def SethtmlUEConnected(self, nbUEs):
|
||||||
if nbUEs > 0:
|
if nbUEs > 0:
|
||||||
self.htmlUEConnected = nbUEs
|
self.htmlUEConnected = nbUEs
|
||||||
else:
|
else:
|
||||||
self.htmlUEConnected = 1
|
self.htmlUEConnected = 1
|
||||||
def SethtmlNb_Smartphones(self, nbUEs):
|
|
||||||
self.htmlNb_Smartphones = nbUEs
|
|
||||||
def SethtmlNb_CATM_Modules(self, nbUEs):
|
|
||||||
self.htmlNb_CATM_Modules = nbUEs
|
|
||||||
|
|
||||||
def SetnbTestXMLfiles(self, nb):
|
|
||||||
self.nbTestXMLfiles = nb
|
|
||||||
def GetnbTestXMLfiles(self):
|
|
||||||
return self.nbTestXMLfiles
|
|
||||||
|
|
||||||
def SettestXMLfiles(self, xmlFile):
|
|
||||||
self.testXMLfiles.append(xmlFile)
|
|
||||||
def SethtmlTabRefs(self, tabRef):
|
|
||||||
self.htmlTabRefs.append(tabRef)
|
|
||||||
def SethtmlTabNames(self, tabName):
|
|
||||||
self.htmlTabNames.append(tabName)
|
|
||||||
def SethtmlTabIcons(self, tabIcon):
|
|
||||||
self.htmlTabIcons.append(tabIcon)
|
|
||||||
|
|
||||||
def SetOsVersion(self, version, idx):
|
|
||||||
self.OsVersion[idx] = version
|
|
||||||
def SetKernelVersion(self, version, idx):
|
|
||||||
self.KernelVersion[idx] = version
|
|
||||||
def SetUhdVersion(self, version, idx):
|
|
||||||
self.UhdVersion[idx] = version
|
|
||||||
def SetUsrpBoard(self, version, idx):
|
|
||||||
self.UsrpBoard[idx] = version
|
|
||||||
def SetCpuNb(self, nb, idx):
|
|
||||||
self.CpuNb[idx] = nb
|
|
||||||
def SetCpuModel(self, model, idx):
|
|
||||||
self.CpuModel[idx] = model
|
|
||||||
def SetCpuMHz(self, freq, idx):
|
|
||||||
self.CpuMHz[idx] = freq
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# HTML structure creation functions
|
# HTML structure creation functions
|
||||||
@@ -289,13 +234,20 @@ class HTMLManagement():
|
|||||||
|
|
||||||
def CreateHtmlTabFooter(self, passStatus):
|
def CreateHtmlTabFooter(self, passStatus):
|
||||||
if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
|
if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
|
||||||
|
testOkEvenIfUnstable = False
|
||||||
|
if self.testUnstable and not passStatus:
|
||||||
|
if self.testStabilityPointReached or self.testMinStableId == '999999':
|
||||||
|
testOkEvenIfUnstable = True
|
||||||
self.htmlFile = open('test_results.html', 'a')
|
self.htmlFile = open('test_results.html', 'a')
|
||||||
self.htmlFile.write(' <tr>\n')
|
self.htmlFile.write(' <tr>\n')
|
||||||
self.htmlFile.write(' <th bgcolor = "#33CCFF" colspan=3>Final Tab Status</th>\n')
|
self.htmlFile.write(' <th bgcolor = "#33CCFF" colspan=3>Final Tab Status</th>\n')
|
||||||
if passStatus:
|
if passStatus:
|
||||||
self.htmlFile.write(' <th bgcolor = "green" colspan=' + str(2 + self.htmlUEConnected) + '><font color="white">PASS <span class="glyphicon glyphicon-ok"></span> </font></th>\n')
|
self.htmlFile.write(' <th bgcolor = "green" colspan=' + str(2 + self.htmlUEConnected) + '><font color="white">PASS <span class="glyphicon glyphicon-ok"></span> </font></th>\n')
|
||||||
else:
|
else:
|
||||||
self.htmlFile.write(' <th bgcolor = "red" colspan=' + str(2 + self.htmlUEConnected) + '><font color="white">FAIL <span class="glyphicon glyphicon-remove"></span> </font></th>\n')
|
if testOkEvenIfUnstable:
|
||||||
|
self.htmlFile.write(' <th bgcolor = "orange" colspan=' + str(2 + self.htmlUEConnected) + '><font color="white">KNOWN UNSTABLE SCENARIO <span class="glyphicon glyphicon-exclamation-sign"></span> </font></th>\n')
|
||||||
|
else:
|
||||||
|
self.htmlFile.write(' <th bgcolor = "red" colspan=' + str(2 + self.htmlUEConnected) + '><font color="white">FAIL <span class="glyphicon glyphicon-remove"></span> </font></th>\n')
|
||||||
self.htmlFile.write(' </tr>\n')
|
self.htmlFile.write(' </tr>\n')
|
||||||
self.htmlFile.write(' </table>\n')
|
self.htmlFile.write(' </table>\n')
|
||||||
self.htmlFile.write(' </div>\n')
|
self.htmlFile.write(' </div>\n')
|
||||||
@@ -305,7 +257,10 @@ class HTMLManagement():
|
|||||||
cmd = "sed -i -e 's/__STATE_" + self.htmlTabNames[0] + "__//' test_results.html"
|
cmd = "sed -i -e 's/__STATE_" + self.htmlTabNames[0] + "__//' test_results.html"
|
||||||
subprocess.run(cmd, shell=True)
|
subprocess.run(cmd, shell=True)
|
||||||
else:
|
else:
|
||||||
cmd = "sed -i -e 's/__STATE_" + self.htmlTabNames[0] + "__/<span class=\"glyphicon glyphicon-remove\"><\/span>/' test_results.html"
|
if testOkEvenIfUnstable:
|
||||||
|
cmd = "sed -i -e 's/__STATE_" + self.htmlTabNames[0] + "__/<span class=\"glyphicon glyphicon-exclamation-sign\"><\/span>/' test_results.html"
|
||||||
|
else:
|
||||||
|
cmd = "sed -i -e 's/__STATE_" + self.htmlTabNames[0] + "__/<span class=\"glyphicon glyphicon-remove\"><\/span>/' test_results.html"
|
||||||
subprocess.run(cmd, shell=True)
|
subprocess.run(cmd, shell=True)
|
||||||
self.htmlFooterCreated = False
|
self.htmlFooterCreated = False
|
||||||
|
|
||||||
@@ -326,7 +281,7 @@ class HTMLManagement():
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
self.htmlFile.write(' <tr>\n')
|
self.htmlFile.write(' <tr>\n')
|
||||||
self.htmlFile.write(' <th colspan=8>' + str('eNB') + ' Server Characteristics</th>\n')
|
self.htmlFile.write(' <th colspan=8>' + str(machine) + ' Server Characteristics</th>\n')
|
||||||
self.htmlFile.write(' </tr>\n')
|
self.htmlFile.write(' </tr>\n')
|
||||||
self.htmlFile.write(' <tr>\n')
|
self.htmlFile.write(' <tr>\n')
|
||||||
self.htmlFile.write(' <td>OS Version</td>\n')
|
self.htmlFile.write(' <td>OS Version</td>\n')
|
||||||
|
|||||||
+402
-3353
File diff suppressed because it is too large
Load Diff
@@ -186,7 +186,7 @@ function variant__v3__phy_sim {
|
|||||||
BUILD_OPTIONS="--phy_simulators"
|
BUILD_OPTIONS="--phy_simulators"
|
||||||
VM_MEMORY=8192
|
VM_MEMORY=8192
|
||||||
VM_DISK=20
|
VM_DISK=20
|
||||||
RUN_OPTIONS="./run_exec_autotests.bash -g \"01510* 015111\" -q -np -b"
|
RUN_OPTIONS="./run_exec_autotests.bash -g \"01510* 015111 015112\" -q -np -b"
|
||||||
}
|
}
|
||||||
|
|
||||||
function variant__v4__cppcheck {
|
function variant__v4__cppcheck {
|
||||||
@@ -197,7 +197,7 @@ function variant__v4__cppcheck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function variant__v5__gnb_usrp {
|
function variant__v5__gnb_usrp {
|
||||||
VM_MEMORY=8192
|
VM_MEMORY=10240
|
||||||
VM_CPU=8
|
VM_CPU=8
|
||||||
NB_PATTERN_FILES=9
|
NB_PATTERN_FILES=9
|
||||||
BUILD_OPTIONS="--gNB -w USRP"
|
BUILD_OPTIONS="--gNB -w USRP"
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
eNBRepository : b
|
||||||
|
ranRepository : c
|
||||||
|
eNB_AllowMerge :
|
||||||
|
ranAllowMerge :
|
||||||
|
eNBBranch : f
|
||||||
|
ranBranch : g
|
||||||
|
eNBCommitID :
|
||||||
|
ranCommitID : i
|
||||||
|
eNBTargetBranch : j
|
||||||
|
ranTargetBranch : k
|
||||||
|
|
||||||
|
nodes :
|
||||||
|
- type : eNB
|
||||||
|
IPAddress : 001.1.1
|
||||||
|
UserName : toto
|
||||||
|
Password : qwe
|
||||||
|
SourceCodePath : l
|
||||||
|
- type : gNB
|
||||||
|
IPAddress : 002.2.2
|
||||||
|
UserName : tata
|
||||||
|
Password : asd
|
||||||
|
SourceCodePath : m
|
||||||
|
- type : eNB
|
||||||
|
IPAddress : 003.3.3
|
||||||
|
UserName : titi
|
||||||
|
Password : zxc
|
||||||
|
SourceCodePath : n
|
||||||
|
- type : gNB
|
||||||
|
IPAddress : 004.4.4
|
||||||
|
UserName : caca
|
||||||
|
Password : pepe
|
||||||
|
SourceCodePath : o
|
||||||
|
|
||||||
|
EPCIPAddress : p
|
||||||
|
EPCUserName : q
|
||||||
|
EPCPassword : r
|
||||||
|
EPCSourceCodePath : s
|
||||||
|
EPCType : t
|
||||||
|
EPCContainerPrefix : u
|
||||||
|
|
||||||
|
ADBIPAddress : v
|
||||||
|
ADBUserName : w
|
||||||
|
ADBType : x
|
||||||
|
ADBPassword : y
|
||||||
|
|
||||||
|
XMLTestFile : z
|
||||||
|
|
||||||
|
UEIPAddress : qqq
|
||||||
|
UEUserName : www
|
||||||
|
UEPassword : eee
|
||||||
|
UESourceCodePath : yyy
|
||||||
|
|
||||||
|
finalStatus : bbb
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
eNBRepository : b
|
||||||
|
ranRepository : c
|
||||||
|
eNB_AllowMerge :
|
||||||
|
ranAllowMerge :
|
||||||
|
eNBBranch : f
|
||||||
|
ranBranch : g
|
||||||
|
eNBCommitID :
|
||||||
|
ranCommitID : i
|
||||||
|
eNBTargetBranch : j
|
||||||
|
ranTargetBranch : k
|
||||||
|
|
||||||
|
|
||||||
|
RAN:
|
||||||
|
RAN_inst_0:
|
||||||
|
name : RAN_1
|
||||||
|
nodes :
|
||||||
|
- type : eNB
|
||||||
|
IPAddress : 001.1.1
|
||||||
|
UserName : toto
|
||||||
|
Password : qwe
|
||||||
|
SourceCodePath : l
|
||||||
|
- type : gNB
|
||||||
|
IPAddress : 002.2.2
|
||||||
|
UserName : tata
|
||||||
|
Password : asd
|
||||||
|
SourceCodePath : m
|
||||||
|
- type : eNB
|
||||||
|
IPAddress : 003.3.3
|
||||||
|
UserName : titi
|
||||||
|
Password : zxc
|
||||||
|
SourceCodePath : n
|
||||||
|
- type : gNB
|
||||||
|
IPAddress : 004.4.4
|
||||||
|
UserName : caca
|
||||||
|
Password : pepe
|
||||||
|
SourceCodePath : o
|
||||||
|
RAN_inst_1:
|
||||||
|
name : RAN_2
|
||||||
|
nodes :
|
||||||
|
- type : eNB
|
||||||
|
IPAddress : 101.1.1
|
||||||
|
UserName : toto
|
||||||
|
Password : qwe
|
||||||
|
SourceCodePath : l
|
||||||
|
- type : gNB
|
||||||
|
IPAddress : 102.2.2
|
||||||
|
UserName : zaza
|
||||||
|
Password : asd
|
||||||
|
SourceCodePath : m
|
||||||
|
- type : eNB
|
||||||
|
IPAddress : 103.3.3
|
||||||
|
UserName : zizi
|
||||||
|
Password : zxc
|
||||||
|
SourceCodePath : n
|
||||||
|
- type : gNB
|
||||||
|
IPAddress : 104.4.4
|
||||||
|
UserName : aaaa
|
||||||
|
Password : pepe
|
||||||
|
SourceCodePath : o
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EPC:
|
||||||
|
EPC_inst_0:
|
||||||
|
EPCIPAddress : p
|
||||||
|
EPCUserName : q
|
||||||
|
EPCPassword : r
|
||||||
|
EPCSourceCodePath : s
|
||||||
|
EPCType : t
|
||||||
|
EPCContainerPrefix : u
|
||||||
|
|
||||||
|
ADB:
|
||||||
|
ADBIPAddress : v
|
||||||
|
ADBUserName : w
|
||||||
|
ADBType : x
|
||||||
|
ADBPassword : y
|
||||||
|
|
||||||
|
|
||||||
|
UE:
|
||||||
|
UE_inst_0:
|
||||||
|
name : UE_1
|
||||||
|
type :
|
||||||
|
UEIPAddress : qqq
|
||||||
|
UEUserName : www
|
||||||
|
UEPassword : eee
|
||||||
|
UESourceCodePath : yyy
|
||||||
|
UE_inst_1:
|
||||||
|
name : UE_2
|
||||||
|
type :
|
||||||
|
UEIPAddress : bloblob
|
||||||
|
UEUserName : gwou
|
||||||
|
UEPassword : zebu
|
||||||
|
UESourceCodePath : pop
|
||||||
|
|
||||||
|
|
||||||
|
XMLTestFile : z
|
||||||
|
finalStatus : bbb
|
||||||
+253
-274
@@ -42,10 +42,8 @@ from multiprocessing import Process, Lock, SimpleQueue
|
|||||||
# OAI Testing modules
|
# OAI Testing modules
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
import sshconnection as SSH
|
import sshconnection as SSH
|
||||||
import epc
|
|
||||||
import helpreadme as HELP
|
import helpreadme as HELP
|
||||||
import constants as CONST
|
import constants as CONST
|
||||||
import html
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# Class Declaration
|
# Class Declaration
|
||||||
@@ -77,174 +75,43 @@ class RANManagement():
|
|||||||
self.backgroundBuildTestId = ['', '', '']
|
self.backgroundBuildTestId = ['', '', '']
|
||||||
self.Build_eNB_forced_workspace_cleanup = False
|
self.Build_eNB_forced_workspace_cleanup = False
|
||||||
self.Initialize_eNB_args = ''
|
self.Initialize_eNB_args = ''
|
||||||
self.air_interface = 'lte'
|
self.imageKind = ''
|
||||||
self.eNB_instance = ''
|
self.air_interface = ['', '', ''] #changed from 'lte' to '' may lead to side effects in main
|
||||||
self.eNB_serverId = ''
|
self.eNB_instance = 0
|
||||||
|
self.eNB_serverId = ['', '', '']
|
||||||
self.eNBLogFiles = ['', '', '']
|
self.eNBLogFiles = ['', '', '']
|
||||||
self.eNBOptions = ['', '', '']
|
self.eNBOptions = ['', '', '']
|
||||||
self.eNBmbmsEnables = [False, False, False]
|
self.eNBmbmsEnables = [False, False, False]
|
||||||
self.eNBstatuses = [-1, -1, -1]
|
self.eNBstatuses = [-1, -1, -1]
|
||||||
self.flexranCtrlInstalled = False
|
self.flexranCtrlInstalled = False
|
||||||
self.flexranCtrlStarted = False
|
self.flexranCtrlStarted = False
|
||||||
|
self.flexranCtrlDeployed = False
|
||||||
|
self.flexranCtrlIpAddress = ''
|
||||||
self.testCase_id = ''
|
self.testCase_id = ''
|
||||||
self.epcPcapFile = ''
|
self.epcPcapFile = ''
|
||||||
self.htmlObj = None
|
self.runtime_stats= ''
|
||||||
self.epcObj = None
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
# Setters and Getters on Public members
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
|
|
||||||
def SetHtmlObj(self, obj):
|
|
||||||
self.htmlObj = obj
|
|
||||||
def SetEpcObj(self, obj):
|
|
||||||
self.epcObj = obj
|
|
||||||
|
|
||||||
def SetflexranCtrlInstalled(self,fxrctin):
|
|
||||||
self.flexranCtrlInstalled = fxrctin
|
|
||||||
def GetflexranCtrlInstalled(self):
|
|
||||||
return self.flexranCtrlInstalled
|
|
||||||
def SetflexranCtrlStarted(self,fxrctst):
|
|
||||||
self.flexranCtrlStarted = fxrctst
|
|
||||||
def GetflexranCtrlStarted(self):
|
|
||||||
return self.flexranCtrlStarted
|
|
||||||
def SetpStatus(self, pSt):
|
|
||||||
self.pStatus = pSt
|
|
||||||
def SetranRepository(self, repository):
|
|
||||||
self.ranRepository = repository
|
|
||||||
def GetranRepository(self):
|
|
||||||
return self.ranRepository
|
|
||||||
def SetranBranch(self, branch):
|
|
||||||
self.ranBranch = branch
|
|
||||||
def GetranBranch(self):
|
|
||||||
return self.ranBranch
|
|
||||||
def SetranCommitID(self, commitid):
|
|
||||||
self.ranCommitID = commitid
|
|
||||||
def GetranCommitID(self):
|
|
||||||
return self.ranCommitID
|
|
||||||
def SeteNB_serverId(self, enbsrvid):
|
|
||||||
self.eNB_serverId = enbsrvid
|
|
||||||
def GeteNB_serverId(self):
|
|
||||||
return self.eNB_serverId
|
|
||||||
def SeteNBIPAddress(self, enbip):
|
|
||||||
self.eNBIPAddress = enbip
|
|
||||||
def GeteNBIPAddress(self):
|
|
||||||
return self.eNBIPAddress
|
|
||||||
def SeteNBUserName(self, enbusr):
|
|
||||||
self.eNBUserName = enbusr
|
|
||||||
def GeteNBUserName(self):
|
|
||||||
return self.eNBUserName
|
|
||||||
def SeteNBPassword(self, enbpw):
|
|
||||||
self.eNBPassword = enbpw
|
|
||||||
def GeteNBPassword(self):
|
|
||||||
return self.eNBPassword
|
|
||||||
def SeteNBSourceCodePath(self, enbcodepath):
|
|
||||||
self.eNBSourceCodePath = enbcodepath
|
|
||||||
def GeteNBSourceCodePath(self):
|
|
||||||
return self.eNBSourceCodePath
|
|
||||||
def SetranAllowMerge(self, merge):
|
|
||||||
self.ranAllowMerge = merge
|
|
||||||
def GetranAllowMerge(self):
|
|
||||||
return self.ranAllowMerge
|
|
||||||
def SetranTargetBranch(self, tbranch):
|
|
||||||
self.ranTargetBranch = tbranch
|
|
||||||
def GetranTargetBranch(self):
|
|
||||||
return self.ranTargetBranch
|
|
||||||
def SetBuild_eNB_args(self, enbbuildarg):
|
|
||||||
self.Build_eNB_args = enbbuildarg
|
|
||||||
def GetBuild_eNB_args(self):
|
|
||||||
return self.Build_eNB_args
|
|
||||||
def SetInitialize_eNB_args(self, initenbarg):
|
|
||||||
self.Initialize_eNB_args = initenbarg
|
|
||||||
def GetInitialize_eNB_args(self):
|
|
||||||
return self.Initialize_eNB_args
|
|
||||||
def SetbackgroundBuild(self, bkbuild):
|
|
||||||
self.backgroundBuild = bkbuild
|
|
||||||
def GetbackgroundBuild(self):
|
|
||||||
return self.backgroundBuild
|
|
||||||
def SetbackgroundBuildTestId(self, bkbuildid):
|
|
||||||
self.backgroundBuildTestId = bkbuildid
|
|
||||||
def GetbackgroundBuildTestId(self):
|
|
||||||
return self.backgroundBuildTestId
|
|
||||||
def SetBuild_eNB_forced_workspace_cleanup(self, fcdwspclean):
|
|
||||||
self.Build_eNB_forced_workspace_cleanup = fcdwspclean
|
|
||||||
def GetBuild_eNB_forced_workspace_cleanup(self):
|
|
||||||
return self.Build_eNB_forced_workspace_cleanup
|
|
||||||
def Setair_interface(self, airif):
|
|
||||||
self.air_interface = airif
|
|
||||||
def Getair_interface(self):
|
|
||||||
return self.air_interface
|
|
||||||
def SeteNB_instance(self, enbinst):
|
|
||||||
self.eNB_instance = enbinst
|
|
||||||
def GeteNB_instance(self):
|
|
||||||
return self.eNB_instance
|
|
||||||
|
|
||||||
def SeteNBLogFile(self, enblog, idx):
|
|
||||||
self.eNBLogFiles[idx] = enblog
|
|
||||||
def GeteNBLogFile(self, idx):
|
|
||||||
return self.eNBLogFiles[idx]
|
|
||||||
|
|
||||||
def GeteNBmbmsEnable(self, idx):
|
|
||||||
return self.eNBmbmsEnables[idx]
|
|
||||||
|
|
||||||
def SeteNB1IPAddress(self,enb1ip):
|
|
||||||
self.eNB1IPAddress = enb1ip
|
|
||||||
def GeteNB1IPAddress(self):
|
|
||||||
return self.eNB1IPAddress
|
|
||||||
def SeteNB1UserName(self, enb1usr):
|
|
||||||
self.eNB1UserName = enb1usr
|
|
||||||
def GeteNB1UserName(self):
|
|
||||||
return self.eNB1UserName
|
|
||||||
def SeteNB1Password(self, enb1pw):
|
|
||||||
self.eNB1Password = enb1pw
|
|
||||||
def GeteNB1Password(self):
|
|
||||||
return self.eNB1Password
|
|
||||||
def SeteNB1SourceCodePath(self, enb1codepath):
|
|
||||||
self.eNB1SourceCodePath = enb1codepath
|
|
||||||
def GeteNB1SourceCodePath(self):
|
|
||||||
return self.eNB1SourceCodePath
|
|
||||||
|
|
||||||
def SeteNB2IPAddress(self, enb2ip):
|
|
||||||
self.eNB2IPAddress = enb2ip
|
|
||||||
def GeteNB2IPAddress(self):
|
|
||||||
return self.eNB2IPAddress
|
|
||||||
def SeteNB2UserName(self, enb2usr):
|
|
||||||
self.eNB2UserName = enb2usr
|
|
||||||
def GeteNB2UserName(self):
|
|
||||||
return self.eNB2UserName
|
|
||||||
def SeteNB2Password(self, enb2pw):
|
|
||||||
self.eNB2Password = enb2pw
|
|
||||||
def GeteNB2Password(self):
|
|
||||||
return self.eNB2Password
|
|
||||||
def SeteNB2SourceCodePath(self, enb2codepath):
|
|
||||||
self.eNB2SourceCodePath = enb2codepath
|
|
||||||
def GeteNB2SourceCodePath(self):
|
|
||||||
return self.eNB2SourceCodePath
|
|
||||||
|
|
||||||
def SetprematureExit(self, premex):
|
|
||||||
self.prematureExit = premex
|
|
||||||
def GetprematureExit(self):
|
|
||||||
return self.prematureExit
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# RAN management functions
|
# RAN management functions
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
|
|
||||||
def BuildeNB(self):
|
def BuildeNB(self, HTML):
|
||||||
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
|
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
|
||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
if self.eNB_serverId == '0':
|
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||||
lIpAddr = self.eNBIPAddress
|
lIpAddr = self.eNBIPAddress
|
||||||
lUserName = self.eNBUserName
|
lUserName = self.eNBUserName
|
||||||
lPassWord = self.eNBPassword
|
lPassWord = self.eNBPassword
|
||||||
lSourcePath = self.eNBSourceCodePath
|
lSourcePath = self.eNBSourceCodePath
|
||||||
elif self.eNB_serverId == '1':
|
elif self.eNB_serverId[self.eNB_instance] == '1':
|
||||||
lIpAddr = self.eNB1IPAddress
|
lIpAddr = self.eNB1IPAddress
|
||||||
lUserName = self.eNB1UserName
|
lUserName = self.eNB1UserName
|
||||||
lPassWord = self.eNB1Password
|
lPassWord = self.eNB1Password
|
||||||
lSourcePath = self.eNB1SourceCodePath
|
lSourcePath = self.eNB1SourceCodePath
|
||||||
elif self.eNB_serverId == '2':
|
elif self.eNB_serverId[self.eNB_instance] == '2':
|
||||||
lIpAddr = self.eNB2IPAddress
|
lIpAddr = self.eNB2IPAddress
|
||||||
lUserName = self.eNB2UserName
|
lUserName = self.eNB2UserName
|
||||||
lPassWord = self.eNB2Password
|
lPassWord = self.eNB2Password
|
||||||
@@ -252,21 +119,25 @@ class RANManagement():
|
|||||||
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
|
logging.debug('Building on server: ' + lIpAddr)
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
# Check if we build an 5G-NR gNB or an LTE eNB
|
|
||||||
result = re.search('--gNB', self.Build_eNB_args)
|
# Check if we build an 5G-NR gNB or an LTE eNB or an OCP eNB
|
||||||
|
result = re.search('--eNBocp', self.Build_eNB_args)
|
||||||
if result is not None:
|
if result is not None:
|
||||||
self.air_interface = 'nr'
|
self.air_interface[self.eNB_instance] = 'ocp-enb'
|
||||||
else:
|
else:
|
||||||
self.air_interface = 'lte'
|
result = re.search('--gNB', self.Build_eNB_args)
|
||||||
|
if result is not None:
|
||||||
|
self.air_interface[self.eNB_instance] = 'nr-softmodem'
|
||||||
|
else:
|
||||||
|
self.air_interface[self.eNB_instance] = 'lte-softmodem'
|
||||||
|
|
||||||
# Worakround for some servers, we need to erase completely the workspace
|
# Worakround for some servers, we need to erase completely the workspace
|
||||||
if self.Build_eNB_forced_workspace_cleanup:
|
if self.Build_eNB_forced_workspace_cleanup:
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf ' + lSourcePath, '\$', 15)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf ' + lSourcePath, '\$', 15)
|
||||||
if self.htmlObj is not None:
|
self.testCase_id = HTML.testCase_id
|
||||||
self.testCase_id = self.htmlObj.GettestCase_id()
|
|
||||||
else:
|
|
||||||
self.testCase_id = '000000'
|
|
||||||
# on RedHat/CentOS .git extension is mandatory
|
# on RedHat/CentOS .git extension is mandatory
|
||||||
result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository)
|
result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository)
|
||||||
if result is not None:
|
if result is not None:
|
||||||
@@ -307,8 +178,7 @@ class RANManagement():
|
|||||||
mismatch = True
|
mismatch = True
|
||||||
if not mismatch:
|
if not mismatch:
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S git clean -x -d -ff', '\$', 30)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S git clean -x -d -ff', '\$', 30)
|
||||||
@@ -332,28 +202,28 @@ class RANManagement():
|
|||||||
if self.backgroundBuild:
|
if self.backgroundBuild:
|
||||||
mySSH.command('echo "./build_oai ' + self.Build_eNB_args + '" > ./my-lte-softmodem-build.sh', '\$', 5)
|
mySSH.command('echo "./build_oai ' + self.Build_eNB_args + '" > ./my-lte-softmodem-build.sh', '\$', 5)
|
||||||
mySSH.command('chmod 775 ./my-lte-softmodem-build.sh', '\$', 5)
|
mySSH.command('chmod 775 ./my-lte-softmodem-build.sh', '\$', 5)
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S -E daemon --inherit --unsafe --name=build_enb_daemon --chdir=' + lSourcePath + '/cmake_targets -o ' + lSourcePath + '/cmake_targets/compile_oai_enb.log ./my-lte-softmodem-build.sh', '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S ls', '\$', 5)
|
||||||
|
mySSH.command('echo $USER; nohup sudo -E ./my-lte-softmodem-build.sh' + ' > ' + lSourcePath + '/cmake_targets/compile_oai_enb.log ' + ' 2>&1 &', lUserName, 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
self.backgroundBuildTestId[int(self.eNB_instance)] = self.testCase_id
|
self.backgroundBuildTestId[int(self.eNB_instance)] = self.testCase_id
|
||||||
return
|
return
|
||||||
mySSH.command('stdbuf -o0 ./build_oai ' + self.Build_eNB_args + ' 2>&1 | stdbuf -o0 tee compile_oai_enb.log', 'Bypassing the Tests|build have failed', 1500)
|
mySSH.command('stdbuf -o0 ./build_oai ' + self.Build_eNB_args + ' 2>&1 | stdbuf -o0 tee compile_oai_enb.log', 'Bypassing the Tests|build have failed', 1500)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.testCase_id)
|
self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.testCase_id, HTML)
|
||||||
|
|
||||||
def WaitBuildeNBisFinished(self):
|
def WaitBuildeNBisFinished(self, HTML):
|
||||||
if self.eNB_serverId == '0':
|
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||||
lIpAddr = self.eNBIPAddress
|
lIpAddr = self.eNBIPAddress
|
||||||
lUserName = self.eNBUserName
|
lUserName = self.eNBUserName
|
||||||
lPassWord = self.eNBPassword
|
lPassWord = self.eNBPassword
|
||||||
lSourcePath = self.eNBSourceCodePath
|
lSourcePath = self.eNBSourceCodePath
|
||||||
elif self.eNB_serverId == '1':
|
elif self.eNB_serverId[self.eNB_instance] == '1':
|
||||||
lIpAddr = self.eNB1IPAddress
|
lIpAddr = self.eNB1IPAddress
|
||||||
lUserName = self.eNB1UserName
|
lUserName = self.eNB1UserName
|
||||||
lPassWord = self.eNB1Password
|
lPassWord = self.eNB1Password
|
||||||
lSourcePath = self.eNB1SourceCodePath
|
lSourcePath = self.eNB1SourceCodePath
|
||||||
elif self.eNB_serverId == '2':
|
elif self.eNB_serverId[self.eNB_instance] == '2':
|
||||||
lIpAddr = self.eNB2IPAddress
|
lIpAddr = self.eNB2IPAddress
|
||||||
lUserName = self.eNB2UserName
|
lUserName = self.eNB2UserName
|
||||||
lPassWord = self.eNB2Password
|
lPassWord = self.eNB2Password
|
||||||
@@ -361,12 +231,13 @@ class RANManagement():
|
|||||||
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
|
logging.debug('Waiting for end of build on server: ' + lIpAddr)
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
count = 40
|
count = 40
|
||||||
buildOAIprocess = True
|
buildOAIprocess = True
|
||||||
while (count > 0) and buildOAIprocess:
|
while (count > 0) and buildOAIprocess:
|
||||||
mySSH.command('ps aux | grep --color=never build_ | grep -v grep', '\$', 3)
|
mySSH.command('ps aux | grep --color=never build_ | grep -v grep', '\$', 6)
|
||||||
result = re.search('build_oai', mySSH.getBefore())
|
result = re.search('build_oai', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
buildOAIprocess = False
|
buildOAIprocess = False
|
||||||
@@ -374,25 +245,24 @@ class RANManagement():
|
|||||||
count -= 1
|
count -= 1
|
||||||
time.sleep(30)
|
time.sleep(30)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.backgroundBuildTestId[int(self.eNB_instance)])
|
self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.backgroundBuildTestId[int(self.eNB_instance)], HTML)
|
||||||
|
|
||||||
|
def checkBuildeNB(self, lIpAddr, lUserName, lPassWord, lSourcePath, testcaseId, HTML):
|
||||||
|
HTML.testCase_id=testcaseId
|
||||||
|
|
||||||
def checkBuildeNB(self, lIpAddr, lUserName, lPassWord, lSourcePath, testcaseId):
|
|
||||||
if self.htmlObj is not None:
|
|
||||||
self.htmlObj.SettestCase_id(testcaseId)
|
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 3)
|
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 3)
|
||||||
mySSH.command('ls ran_build/build', '\$', 3)
|
mySSH.command('ls ran_build/build', '\$', 3)
|
||||||
mySSH.command('ls ran_build/build', '\$', 3)
|
mySSH.command('ls ran_build/build', '\$', 3)
|
||||||
if self.air_interface == 'nr':
|
|
||||||
nodeB_prefix = 'g'
|
#check if we have the build corresponding to the air interface keywords (nr-softmode, lte-softmodem, ocp-enb)
|
||||||
else:
|
logging.info('CHECK Build with IP='+lIpAddr+' SourcePath='+lSourcePath)
|
||||||
nodeB_prefix = 'e'
|
result = re.search(self.air_interface[self.eNB_instance], mySSH.getBefore())
|
||||||
buildStatus = True
|
|
||||||
result = re.search(self.air_interface + '-softmodem', mySSH.getBefore())
|
|
||||||
if result is None:
|
if result is None:
|
||||||
buildStatus = False
|
buildStatus = False #if not, build failed
|
||||||
else:
|
else:
|
||||||
|
buildStatus = True
|
||||||
# Generating a BUILD INFO file
|
# Generating a BUILD INFO file
|
||||||
mySSH.command('echo "SRC_BRANCH: ' + self.ranBranch + '" > ../LAST_BUILD_INFO.txt', '\$', 2)
|
mySSH.command('echo "SRC_BRANCH: ' + self.ranBranch + '" > ../LAST_BUILD_INFO.txt', '\$', 2)
|
||||||
mySSH.command('echo "SRC_COMMIT: ' + self.ranCommitID + '" >> ../LAST_BUILD_INFO.txt', '\$', 2)
|
mySSH.command('echo "SRC_COMMIT: ' + self.ranCommitID + '" >> ../LAST_BUILD_INFO.txt', '\$', 2)
|
||||||
@@ -404,10 +274,12 @@ class RANManagement():
|
|||||||
mySSH.command('echo "TGT_BRANCH: ' + self.ranTargetBranch + '" >> ../LAST_BUILD_INFO.txt', '\$', 2)
|
mySSH.command('echo "TGT_BRANCH: ' + self.ranTargetBranch + '" >> ../LAST_BUILD_INFO.txt', '\$', 2)
|
||||||
else:
|
else:
|
||||||
mySSH.command('echo "MERGED_W_TGT_BRANCH: NO" >> ../LAST_BUILD_INFO.txt', '\$', 2)
|
mySSH.command('echo "MERGED_W_TGT_BRANCH: NO" >> ../LAST_BUILD_INFO.txt', '\$', 2)
|
||||||
|
|
||||||
|
|
||||||
mySSH.command('mkdir -p build_log_' + testcaseId, '\$', 5)
|
mySSH.command('mkdir -p build_log_' + testcaseId, '\$', 5)
|
||||||
mySSH.command('mv log/* ' + 'build_log_' + testcaseId, '\$', 5)
|
mySSH.command('mv log/* ' + 'build_log_' + testcaseId, '\$', 5)
|
||||||
mySSH.command('mv compile_oai_enb.log ' + 'build_log_' + testcaseId, '\$', 5)
|
mySSH.command('mv compile_oai_enb.log ' + 'build_log_' + testcaseId, '\$', 5)
|
||||||
if self.eNB_serverId != '0':
|
if self.eNB_serverId[self.eNB_instance] != '0':
|
||||||
mySSH.command('cd cmake_targets', '\$', 5)
|
mySSH.command('cd cmake_targets', '\$', 5)
|
||||||
mySSH.command('if [ -e tmp_build' + testcaseId + '.zip ]; then rm -f tmp_build' + testcaseId + '.zip; fi', '\$', 5)
|
mySSH.command('if [ -e tmp_build' + testcaseId + '.zip ]; then rm -f tmp_build' + testcaseId + '.zip; fi', '\$', 5)
|
||||||
mySSH.command('zip -r -qq tmp_build' + testcaseId + '.zip build_log_' + testcaseId, '\$', 5)
|
mySSH.command('zip -r -qq tmp_build' + testcaseId + '.zip build_log_' + testcaseId, '\$', 5)
|
||||||
@@ -420,35 +292,35 @@ class RANManagement():
|
|||||||
os.remove('./tmp_build' + testcaseId + '.zip')
|
os.remove('./tmp_build' + testcaseId + '.zip')
|
||||||
mySSH.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword)
|
mySSH.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword)
|
||||||
mySSH.command('cd ' + self.eNBSourceCodePath + '/cmake_targets', '\$', 5)
|
mySSH.command('cd ' + self.eNBSourceCodePath + '/cmake_targets', '\$', 5)
|
||||||
mySSH.command('unzip -qq -DD tmp_build' + testcaseId + '.zip', '\$', 5)
|
#-qq quiet / -u update orcreate files
|
||||||
|
mySSH.command('unzip -u -qq -DD tmp_build' + testcaseId + '.zip', '\$', 5)
|
||||||
mySSH.command('rm -f tmp_build' + testcaseId + '.zip', '\$', 5)
|
mySSH.command('rm -f tmp_build' + testcaseId + '.zip', '\$', 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
else:
|
else:
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
|
|
||||||
|
#generate logging info depending on buildStatus and air interface
|
||||||
if buildStatus:
|
if buildStatus:
|
||||||
logging.info('\u001B[1m Building OAI ' + nodeB_prefix + 'NB Pass\u001B[0m')
|
logging.info('\u001B[1m Building OAI ' + self.air_interface[self.eNB_instance] + ' Pass\u001B[0m')
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
else:
|
else:
|
||||||
logging.error('\u001B[1m Building OAI ' + nodeB_prefix + 'NB Failed\u001B[0m')
|
logging.error('\u001B[1m Building OAI ' + self.air_interface[self.eNB_instance] + ' Failed\u001B[0m')
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.Build_eNB_args, 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow(self.Build_eNB_args, 'KO', CONST.ALL_PROCESSES_OK)
|
HTML.CreateHtmlTabFooter(False)
|
||||||
self.htmlObj.CreateHtmlTabFooter(False)
|
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
def InitializeeNB(self):
|
def InitializeeNB(self, HTML, EPC):
|
||||||
if self.eNB_serverId == '0':
|
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||||
lIpAddr = self.eNBIPAddress
|
lIpAddr = self.eNBIPAddress
|
||||||
lUserName = self.eNBUserName
|
lUserName = self.eNBUserName
|
||||||
lPassWord = self.eNBPassword
|
lPassWord = self.eNBPassword
|
||||||
lSourcePath = self.eNBSourceCodePath
|
lSourcePath = self.eNBSourceCodePath
|
||||||
elif self.eNB_serverId == '1':
|
elif self.eNB_serverId[self.eNB_instance] == '1':
|
||||||
lIpAddr = self.eNB1IPAddress
|
lIpAddr = self.eNB1IPAddress
|
||||||
lUserName = self.eNB1UserName
|
lUserName = self.eNB1UserName
|
||||||
lPassWord = self.eNB1Password
|
lPassWord = self.eNB1Password
|
||||||
lSourcePath = self.eNB1SourceCodePath
|
lSourcePath = self.eNB1SourceCodePath
|
||||||
elif self.eNB_serverId == '2':
|
elif self.eNB_serverId[self.eNB_instance] == '2':
|
||||||
lIpAddr = self.eNB2IPAddress
|
lIpAddr = self.eNB2IPAddress
|
||||||
lUserName = self.eNB2UserName
|
lUserName = self.eNB2UserName
|
||||||
lPassWord = self.eNB2Password
|
lPassWord = self.eNB2Password
|
||||||
@@ -456,24 +328,21 @@ class RANManagement():
|
|||||||
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
|
logging.debug('Starting eNB/gNB on server: ' + lIpAddr)
|
||||||
|
|
||||||
if self.htmlObj is not None:
|
self.testCase_id = HTML.testCase_id
|
||||||
self.testCase_id = self.htmlObj.GettestCase_id()
|
|
||||||
else:
|
|
||||||
self.testCase_id = '000000'
|
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
|
|
||||||
if (self.pStatus < 0):
|
if (self.pStatus < 0):
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' ' + self.Initialize_eNB_args, 'KO', self.pStatus)
|
||||||
self.htmlObj.CreateHtmlTestRow(self.Initialize_eNB_args, 'KO', self.pStatus)
|
HTML.CreateHtmlTabFooter(False)
|
||||||
self.htmlObj.CreateHtmlTabFooter(False)
|
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
# If tracer options is on, running tshark on EPC side and capture traffic b/ EPC and eNB
|
# If tracer options is on, running tshark on EPC side and capture traffic b/ EPC and eNB
|
||||||
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
||||||
if (result is not None) and (self.epcObj is not None):
|
if (result is not None):
|
||||||
localEpcIpAddr = self.epcObj.GetIPAddress()
|
localEpcIpAddr = EPC.IPAddress
|
||||||
localEpcUserName = self.epcObj.GetUserName()
|
localEpcUserName = EPC.UserName
|
||||||
localEpcPassword = self.epcObj.GetPassword()
|
localEpcPassword = EPC.Password
|
||||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
||||||
mySSH.command('ip addr show | awk -f /tmp/active_net_interfaces.awk | egrep -v "lo|tun"', '\$', 5)
|
mySSH.command('ip addr show | awk -f /tmp/active_net_interfaces.awk | egrep -v "lo|tun"', '\$', 5)
|
||||||
result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
|
result = re.search('interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
|
||||||
@@ -521,15 +390,17 @@ class RANManagement():
|
|||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S uhd_find_devices', '\$', 60)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S uhd_find_devices', '\$', 60)
|
||||||
# Make a copy and adapt to EPC / eNB IP addresses
|
# Make a copy and adapt to EPC / eNB IP addresses
|
||||||
mySSH.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5)
|
mySSH.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5)
|
||||||
if self.epcObj is not None:
|
localMmeIpAddr = EPC.MmeIPAddress
|
||||||
localMmeIpAddr = self.epcObj.GetMmeIPAddress()
|
mySSH.command('sed -i -e \'s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
mySSH.command('sed -i -e \'s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
|
|
||||||
mySSH.command('sed -i -e \'s/CI_ENB_IP_ADDR/' + lIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
|
mySSH.command('sed -i -e \'s/CI_ENB_IP_ADDR/' + lIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
|
mySSH.command('sed -i -e \'s/CI_GNB_IP_ADDR/' + lIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
mySSH.command('sed -i -e \'s/CI_RCC_IP_ADDR/' + self.eNBIPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
mySSH.command('sed -i -e \'s/CI_RCC_IP_ADDR/' + self.eNBIPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
mySSH.command('sed -i -e \'s/CI_RRU1_IP_ADDR/' + self.eNB1IPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
mySSH.command('sed -i -e \'s/CI_RRU1_IP_ADDR/' + self.eNB1IPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
mySSH.command('sed -i -e \'s/CI_RRU2_IP_ADDR/' + self.eNB2IPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
mySSH.command('sed -i -e \'s/CI_RRU2_IP_ADDR/' + self.eNB2IPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
if self.flexranCtrlInstalled and self.flexranCtrlStarted:
|
mySSH.command('sed -i -e \'s/CI_FR1_CTL_ENB_IP_ADDR/' + self.eNBIPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
|
if (self.flexranCtrlInstalled and self.flexranCtrlStarted) or self.flexranCtrlDeployed:
|
||||||
mySSH.command('sed -i -e \'s/FLEXRAN_ENABLED.*;/FLEXRAN_ENABLED = "yes";/\' ' + ci_full_config_file, '\$', 2);
|
mySSH.command('sed -i -e \'s/FLEXRAN_ENABLED.*;/FLEXRAN_ENABLED = "yes";/\' ' + ci_full_config_file, '\$', 2);
|
||||||
|
mySSH.command('sed -i -e \'s/CI_FLEXRAN_CTL_IP_ADDR/' + self.flexranCtrlIpAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
else:
|
else:
|
||||||
mySSH.command('sed -i -e \'s/FLEXRAN_ENABLED.*;/FLEXRAN_ENABLED = "no";/\' ' + ci_full_config_file, '\$', 2);
|
mySSH.command('sed -i -e \'s/FLEXRAN_ENABLED.*;/FLEXRAN_ENABLED = "no";/\' ' + ci_full_config_file, '\$', 2);
|
||||||
self.eNBmbmsEnables[int(self.eNB_instance)] = False
|
self.eNBmbmsEnables[int(self.eNB_instance)] = False
|
||||||
@@ -546,15 +417,14 @@ class RANManagement():
|
|||||||
# Launch eNB with the modified config file
|
# Launch eNB with the modified config file
|
||||||
mySSH.command('source oaienv', '\$', 5)
|
mySSH.command('source oaienv', '\$', 5)
|
||||||
mySSH.command('cd cmake_targets', '\$', 5)
|
mySSH.command('cd cmake_targets', '\$', 5)
|
||||||
mySSH.command('echo "ulimit -c unlimited && ./ran_build/build/' + self.air_interface + '-softmodem -O ' + lSourcePath + '/' + ci_full_config_file + extra_options + '" > ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
if self.air_interface[self.eNB_instance] == 'nr-softmodem':
|
||||||
|
mySSH.command('if [ -e rbconfig.raw ]; then echo ' + lPassWord + ' | sudo -S rm rbconfig.raw; fi', '\$', 5)
|
||||||
|
mySSH.command('if [ -e reconfig.raw ]; then echo ' + lPassWord + ' | sudo -S rm reconfig.raw; fi', '\$', 5)
|
||||||
|
# NOTE: WE SHALL do a check if the executable is present (in case build went wrong)
|
||||||
|
mySSH.command('echo "ulimit -c unlimited && ./ran_build/build/' + self.air_interface[self.eNB_instance] + ' -O ' + lSourcePath + '/' + ci_full_config_file + extra_options + '" > ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
||||||
mySSH.command('chmod 775 ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
mySSH.command('chmod 775 ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf enb_' + self.testCase_id + '.log', '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf enb_' + self.testCase_id + '.log', '\$', 5)
|
||||||
mySSH.command('hostnamectl','\$', 5)
|
mySSH.command('echo $USER; nohup sudo -E ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh > ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '.log 2>&1 &', lUserName, 10)
|
||||||
result = re.search('CentOS Linux 7', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('echo $USER; nohup sudo ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh > ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '.log 2>&1 &', lUserName, 10)
|
|
||||||
else:
|
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S -E daemon --inherit --unsafe --name=enb' + str(self.eNB_instance) + '_daemon --chdir=' + lSourcePath + '/cmake_targets -o ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '.log ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
|
||||||
self.eNBLogFiles[int(self.eNB_instance)] = 'enb_' + self.testCase_id + '.log'
|
self.eNBLogFiles[int(self.eNB_instance)] = 'enb_' + self.testCase_id + '.log'
|
||||||
if extra_options != '':
|
if extra_options != '':
|
||||||
self.eNBOptions[int(self.eNB_instance)] = extra_options
|
self.eNBOptions[int(self.eNB_instance)] = extra_options
|
||||||
@@ -571,15 +441,14 @@ class RANManagement():
|
|||||||
mySSH.command('killall --signal SIGKILL record', '\$', 5)
|
mySSH.command('killall --signal SIGKILL record', '\$', 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
doLoop = False
|
doLoop = False
|
||||||
logging.error('\u001B[1;37;41m eNB logging system did not show got sync! \u001B[0m')
|
logging.error('\u001B[1;37;41m eNB/gNB/ocp-eNB logging system did not show got sync! \u001B[0m')
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'KO', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow('-O ' + config_file + extra_options, 'KO', CONST.ALL_PROCESSES_OK)
|
|
||||||
# In case of T tracer recording, we need to kill tshark on EPC side
|
# In case of T tracer recording, we need to kill tshark on EPC side
|
||||||
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
||||||
if (result is not None) and (self.epcObj is not None):
|
if (result is not None):
|
||||||
localEpcIpAddr = self.epcObj.GetIPAddress()
|
localEpcIpAddr = EPC.IPAddress
|
||||||
localEpcUserName = self.epcObj.GetUserName()
|
localEpcUserName = EPC.UserName
|
||||||
localEpcPassword = self.epcObj.GetPassword()
|
localEpcPassword = EPC.Password
|
||||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
||||||
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
||||||
@@ -607,7 +476,11 @@ class RANManagement():
|
|||||||
enbDidSync = True
|
enbDidSync = True
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
|
|
||||||
if enbDidSync and eNBinNoS1:
|
rruCheck = False
|
||||||
|
result = re.search('^rru|^du.band', str(config_file))
|
||||||
|
if result is not None:
|
||||||
|
rruCheck = True
|
||||||
|
if enbDidSync and eNBinNoS1 and not rruCheck:
|
||||||
mySSH.command('ifconfig oaitun_enb1', '\$', 4)
|
mySSH.command('ifconfig oaitun_enb1', '\$', 4)
|
||||||
mySSH.command('ifconfig oaitun_enb1', '\$', 4)
|
mySSH.command('ifconfig oaitun_enb1', '\$', 4)
|
||||||
result = re.search('inet addr:1|inet 1', mySSH.getBefore())
|
result = re.search('inet addr:1|inet 1', mySSH.getBefore())
|
||||||
@@ -623,12 +496,11 @@ class RANManagement():
|
|||||||
else:
|
else:
|
||||||
logging.error('\u001B[1m oaitun_enm1 interface is either NOT mounted or NOT configured\u001B[0m')
|
logging.error('\u001B[1m oaitun_enm1 interface is either NOT mounted or NOT configured\u001B[0m')
|
||||||
if enbDidSync:
|
if enbDidSync:
|
||||||
self.eNBstatuses[int(self.eNB_instance)] = int(self.eNB_serverId)
|
self.eNBstatuses[int(self.eNB_instance)] = int(self.eNB_serverId[self.eNB_instance])
|
||||||
|
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow('-O ' + config_file + extra_options, 'OK', CONST.ALL_PROCESSES_OK)
|
logging.debug('\u001B[1m Initialize eNB/gNB/ocp-eNB Completed\u001B[0m')
|
||||||
logging.debug('\u001B[1m Initialize eNB Completed\u001B[0m')
|
|
||||||
|
|
||||||
def CheckeNBProcess(self, status_queue):
|
def CheckeNBProcess(self, status_queue):
|
||||||
try:
|
try:
|
||||||
@@ -651,8 +523,8 @@ class RANManagement():
|
|||||||
lPassWord = self.eNBPassword
|
lPassWord = self.eNBPassword
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never ' + self.air_interface + '-softmodem | grep -v grep', '\$', 5)
|
mySSH.command('stdbuf -o0 ps -aux | grep --color=never ' + self.air_interface[self.eNB_instance] + ' | grep -v grep', '\$', 5)
|
||||||
result = re.search(self.air_interface + '-softmodem', mySSH.getBefore())
|
result = re.search(self.air_interface[self.eNB_instance], mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
logging.debug('\u001B[1;37;41m eNB Process Not Found! \u001B[0m')
|
logging.debug('\u001B[1;37;41m eNB Process Not Found! \u001B[0m')
|
||||||
status_queue.put(CONST.ENB_PROCESS_FAILED)
|
status_queue.put(CONST.ENB_PROCESS_FAILED)
|
||||||
@@ -662,18 +534,18 @@ class RANManagement():
|
|||||||
except:
|
except:
|
||||||
os.kill(os.getppid(),signal.SIGUSR1)
|
os.kill(os.getppid(),signal.SIGUSR1)
|
||||||
|
|
||||||
def TerminateeNB(self):
|
def TerminateeNB(self, HTML, EPC):
|
||||||
if self.eNB_serverId == '0':
|
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||||
lIpAddr = self.eNBIPAddress
|
lIpAddr = self.eNBIPAddress
|
||||||
lUserName = self.eNBUserName
|
lUserName = self.eNBUserName
|
||||||
lPassWord = self.eNBPassword
|
lPassWord = self.eNBPassword
|
||||||
lSourcePath = self.eNBSourceCodePath
|
lSourcePath = self.eNBSourceCodePath
|
||||||
elif self.eNB_serverId == '1':
|
elif self.eNB_serverId[self.eNB_instance] == '1':
|
||||||
lIpAddr = self.eNB1IPAddress
|
lIpAddr = self.eNB1IPAddress
|
||||||
lUserName = self.eNB1UserName
|
lUserName = self.eNB1UserName
|
||||||
lPassWord = self.eNB1Password
|
lPassWord = self.eNB1Password
|
||||||
lSourcePath = self.eNB1SourceCodePath
|
lSourcePath = self.eNB1SourceCodePath
|
||||||
elif self.eNB_serverId == '2':
|
elif self.eNB_serverId[self.eNB_instance] == '2':
|
||||||
lIpAddr = self.eNB2IPAddress
|
lIpAddr = self.eNB2IPAddress
|
||||||
lUserName = self.eNB2UserName
|
lUserName = self.eNB2UserName
|
||||||
lPassWord = self.eNB2Password
|
lPassWord = self.eNB2Password
|
||||||
@@ -681,32 +553,32 @@ class RANManagement():
|
|||||||
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
|
logging.debug('Stopping eNB/gNB on server: ' + lIpAddr)
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
|
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
|
||||||
if self.air_interface == 'lte':
|
if (self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb'):
|
||||||
nodeB_prefix = 'e'
|
nodeB_prefix = 'e'
|
||||||
else:
|
else:
|
||||||
nodeB_prefix = 'g'
|
nodeB_prefix = 'g'
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never softmodem | grep -v grep', '\$', 5)
|
mySSH.command('stdbuf -o0 ps -aux | grep --color=never -e softmodem -e ocp-enb | grep -v grep', '\$', 5)
|
||||||
result = re.search('-softmodem', mySSH.getBefore())
|
result = re.search('(-softmodem|ocp)', mySSH.getBefore())
|
||||||
if result is not None:
|
if result is not None:
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S daemon --name=enb' + str(self.eNB_instance) + '_daemon --stop', '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGINT -r .*-softmodem ocp-enb || true', '\$', 5)
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGINT -r .*-softmodem || true', '\$', 5)
|
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never softmodem | grep -v grep', '\$', 5)
|
mySSH.command('stdbuf -o0 ps -aux | grep --color=never -e softmodem -e ocp-enb | grep -v grep', '\$', 5)
|
||||||
result = re.search('-softmodem', mySSH.getBefore())
|
result = re.search('(-softmodem|ocp)', mySSH.getBefore())
|
||||||
if result is not None:
|
if result is not None:
|
||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL -r .*-softmodem || true', '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL -r .*-softmodem ocp-enb || true', '\$', 5)
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
mySSH.command('rm -f my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
mySSH.command('rm -f my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
# If tracer options is on, stopping tshark on EPC side
|
# If tracer options is on, stopping tshark on EPC side
|
||||||
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
||||||
if (result is not None) and (self.epcObj is not None):
|
if (result is not None):
|
||||||
localEpcIpAddr = self.epcObj.GetIPAddress()
|
localEpcIpAddr = EPC.IPAddress
|
||||||
localEpcUserName = self.epcObj.GetUserName()
|
localEpcUserName = EPC.UserName
|
||||||
localEpcPassword = self.epcObj.GetPassword()
|
localEpcPassword = EPC.Password
|
||||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
||||||
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
||||||
@@ -730,9 +602,8 @@ class RANManagement():
|
|||||||
mySSH.close()
|
mySSH.close()
|
||||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + extracted_log_file, '.')
|
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + extracted_log_file, '.')
|
||||||
logging.debug('\u001B[1m Analyzing eNB replay logfile \u001B[0m')
|
logging.debug('\u001B[1m Analyzing eNB replay logfile \u001B[0m')
|
||||||
logStatus = self.AnalyzeLogFile_eNB(extracted_log_file)
|
logStatus = self.AnalyzeLogFile_eNB(extracted_log_file, HTML)
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
self.eNBLogFiles[int(self.eNB_instance)] = ''
|
self.eNBLogFiles[int(self.eNB_instance)] = ''
|
||||||
else:
|
else:
|
||||||
analyzeFile = False
|
analyzeFile = False
|
||||||
@@ -744,27 +615,23 @@ class RANManagement():
|
|||||||
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + fileToAnalyze, '.')
|
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + fileToAnalyze, '.')
|
||||||
if (copyin_res == -1):
|
if (copyin_res == -1):
|
||||||
logging.debug('\u001B[1;37;41m Could not copy ' + nodeB_prefix + 'NB logfile to analyze it! \u001B[0m')
|
logging.debug('\u001B[1;37;41m Could not copy ' + nodeB_prefix + 'NB logfile to analyze it! \u001B[0m')
|
||||||
if self.htmlObj is not None:
|
HTML.htmleNBFailureMsg='Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!'
|
||||||
self.htmlObj.SetHmleNBFailureMsg('Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!')
|
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
|
||||||
self.htmlObj.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
|
|
||||||
self.eNBmbmsEnables[int(self.eNB_instance)] = False
|
self.eNBmbmsEnables[int(self.eNB_instance)] = False
|
||||||
return
|
return
|
||||||
if self.eNB_serverId != '0':
|
if self.eNB_serverId[self.eNB_instance] != '0':
|
||||||
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + fileToAnalyze, self.eNBSourceCodePath + '/cmake_targets/')
|
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + fileToAnalyze, self.eNBSourceCodePath + '/cmake_targets/')
|
||||||
logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + fileToAnalyze)
|
logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + fileToAnalyze)
|
||||||
logStatus = self.AnalyzeLogFile_eNB(fileToAnalyze)
|
logStatus = self.AnalyzeLogFile_eNB(fileToAnalyze, HTML)
|
||||||
if (logStatus < 0):
|
if (logStatus < 0):
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow('N/A', 'KO', logStatus)
|
||||||
self.htmlObj.CreateHtmlTestRow('N/A', 'KO', logStatus)
|
|
||||||
self.preamtureExit = True
|
self.preamtureExit = True
|
||||||
self.eNBmbmsEnables[int(self.eNB_instance)] = False
|
self.eNBmbmsEnables[int(self.eNB_instance)] = False
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
else:
|
else:
|
||||||
if self.htmlObj is not None:
|
HTML.CreateHtmlTestRow(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
self.htmlObj.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
self.eNBmbmsEnables[int(self.eNB_instance)] = False
|
self.eNBmbmsEnables[int(self.eNB_instance)] = False
|
||||||
self.eNBstatuses[int(self.eNB_instance)] = -1
|
self.eNBstatuses[int(self.eNB_instance)] = -1
|
||||||
|
|
||||||
@@ -774,11 +641,11 @@ class RANManagement():
|
|||||||
mySSH.command('cd ' + self.eNBSourceCodePath, '\$', 5)
|
mySSH.command('cd ' + self.eNBSourceCodePath, '\$', 5)
|
||||||
mySSH.command('cd cmake_targets', '\$', 5)
|
mySSH.command('cd cmake_targets', '\$', 5)
|
||||||
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm -f enb.log.zip', '\$', 5)
|
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm -f enb.log.zip', '\$', 5)
|
||||||
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip enb*.log core* enb_*record.raw enb_*.pcap enb_*txt', '\$', 60)
|
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip enb*.log core* enb_*record.raw enb_*.pcap enb_*txt physim_*.log', '\$', 60)
|
||||||
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap enb_*txt', '\$', 5)
|
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap enb_*txt', '\$', 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
|
|
||||||
def AnalyzeLogFile_eNB(self, eNBlogFile):
|
def AnalyzeLogFile_eNB(self, eNBlogFile, HTML):
|
||||||
if (not os.path.isfile('./' + eNBlogFile)):
|
if (not os.path.isfile('./' + eNBlogFile)):
|
||||||
return -1
|
return -1
|
||||||
enb_log_file = open('./' + eNBlogFile, 'r')
|
enb_log_file = open('./' + eNBlogFile, 'r')
|
||||||
@@ -800,8 +667,11 @@ class RANManagement():
|
|||||||
uciStatMsgCount = 0
|
uciStatMsgCount = 0
|
||||||
pdcpFailure = 0
|
pdcpFailure = 0
|
||||||
ulschFailure = 0
|
ulschFailure = 0
|
||||||
|
ulschAllocateCCEerror = 0
|
||||||
|
uplinkSegmentsAborted = 0
|
||||||
ulschReceiveOK = 0
|
ulschReceiveOK = 0
|
||||||
gnbRxTxWakeUpFailure = 0
|
gnbRxTxWakeUpFailure = 0
|
||||||
|
gnbTxWriteThreadEnabled = False
|
||||||
cdrxActivationMessageCount = 0
|
cdrxActivationMessageCount = 0
|
||||||
dropNotEnoughRBs = 0
|
dropNotEnoughRBs = 0
|
||||||
mbmsRequestMsg = 0
|
mbmsRequestMsg = 0
|
||||||
@@ -812,7 +682,44 @@ class RANManagement():
|
|||||||
X2HO_state = CONST.X2_HO_REQ_STATE__IDLE
|
X2HO_state = CONST.X2_HO_REQ_STATE__IDLE
|
||||||
X2HO_inNbProcedures = 0
|
X2HO_inNbProcedures = 0
|
||||||
X2HO_outNbProcedures = 0
|
X2HO_outNbProcedures = 0
|
||||||
|
global_status = CONST.ALL_PROCESSES_OK
|
||||||
|
# Runtime statistics
|
||||||
|
runTime = ''
|
||||||
|
userTime = ''
|
||||||
|
systemTime = ''
|
||||||
|
maxPhyMemUsage = ''
|
||||||
|
nbContextSwitches = ''
|
||||||
|
#NSA FR1 check
|
||||||
|
NSA_RAPROC_PUSCH_check = 0
|
||||||
|
#dlsch and ulsch statistics (dictionary)
|
||||||
|
dlsch_ulsch_stats = {}
|
||||||
|
#count "L1 thread not ready" msg
|
||||||
|
L1_thread_not_ready_cnt = 0
|
||||||
|
#count "problem receiving samples" msg
|
||||||
|
pb_receiving_samples_cnt = 0
|
||||||
|
|
||||||
for line in enb_log_file.readlines():
|
for line in enb_log_file.readlines():
|
||||||
|
# Runtime statistics
|
||||||
|
result = re.search('Run time:' ,str(line))
|
||||||
|
if result is not None:
|
||||||
|
runTime = str(line).strip()
|
||||||
|
if runTime != '':
|
||||||
|
result = re.search('Time executing user inst', str(line))
|
||||||
|
if result is not None:
|
||||||
|
fields=line.split(':')
|
||||||
|
userTime = 'userTime : ' + fields[1].replace('\n','')
|
||||||
|
result = re.search('Time executing system inst', str(line))
|
||||||
|
if result is not None:
|
||||||
|
fields=line.split(':')
|
||||||
|
systemTime = 'systemTime : ' + fields[1].replace('\n','')
|
||||||
|
result = re.search('Max. Phy. memory usage:', str(line))
|
||||||
|
if result is not None:
|
||||||
|
fields=line.split(':')
|
||||||
|
maxPhyMemUsage = 'maxPhyMemUsage : ' + fields[1].replace('\n','')
|
||||||
|
result = re.search('Number of context switch.*process origin', str(line))
|
||||||
|
if result is not None:
|
||||||
|
fields=line.split(':')
|
||||||
|
nbContextSwitches = 'nbContextSwitches : ' + fields[1].replace('\n','')
|
||||||
if X2HO_state == CONST.X2_HO_REQ_STATE__IDLE:
|
if X2HO_state == CONST.X2_HO_REQ_STATE__IDLE:
|
||||||
result = re.search('target eNB Receives X2 HO Req X2AP_HANDOVER_REQ', str(line))
|
result = re.search('target eNB Receives X2 HO Req X2AP_HANDOVER_REQ', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
@@ -885,8 +792,7 @@ class RANManagement():
|
|||||||
if result is not None:
|
if result is not None:
|
||||||
rrcSetupComplete += 1
|
rrcSetupComplete += 1
|
||||||
result = re.search('Generate LTE_RRCConnectionRelease|Generate RRCConnectionRelease', str(line))
|
result = re.search('Generate LTE_RRCConnectionRelease|Generate RRCConnectionRelease', str(line))
|
||||||
if result is not None:
|
if result is not None: rrcReleaseRequest += 1
|
||||||
rrcReleaseRequest += 1
|
|
||||||
result = re.search('Generate LTE_RRCConnectionReconfiguration', str(line))
|
result = re.search('Generate LTE_RRCConnectionReconfiguration', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
rrcReconfigRequest += 1
|
rrcReconfigRequest += 1
|
||||||
@@ -914,9 +820,18 @@ class RANManagement():
|
|||||||
result = re.search('could not wakeup gNB rxtx process', str(line))
|
result = re.search('could not wakeup gNB rxtx process', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
gnbRxTxWakeUpFailure += 1
|
gnbRxTxWakeUpFailure += 1
|
||||||
|
result = re.search('tx write thread ready', str(line))
|
||||||
|
if result is not None:
|
||||||
|
gnbTxWriteThreadEnabled = True
|
||||||
result = re.search('ULSCH in error in round|ULSCH 0 in error', str(line))
|
result = re.search('ULSCH in error in round|ULSCH 0 in error', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
ulschFailure += 1
|
ulschFailure += 1
|
||||||
|
result = re.search('ERROR ALLOCATING CCEs', str(line))
|
||||||
|
if result is not None:
|
||||||
|
ulschAllocateCCEerror += 1
|
||||||
|
result = re.search('uplink segment error.*aborted [1-9] segments', str(line))
|
||||||
|
if result is not None:
|
||||||
|
uplinkSegmentsAborted += 1
|
||||||
result = re.search('ULSCH received ok', str(line))
|
result = re.search('ULSCH received ok', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
ulschReceiveOK += 1
|
ulschReceiveOK += 1
|
||||||
@@ -933,13 +848,37 @@ class RANManagement():
|
|||||||
result = re.search('MBMS USER-PLANE.*Requesting.*bytes from RLC', str(line))
|
result = re.search('MBMS USER-PLANE.*Requesting.*bytes from RLC', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
mbmsRequestMsg += 1
|
mbmsRequestMsg += 1
|
||||||
|
#FR1 NSA test : add new markers to make sure gNB is used
|
||||||
|
result = re.search('\[gNB [0-9]+\]\[RAPROC\] PUSCH with TC_RNTI [0-9a-fA-F]+ received correctly, adding UE MAC Context UE_id [0-9]+\/RNTI [0-9a-fA-F]+', str(line))
|
||||||
|
if result is not None:
|
||||||
|
NSA_RAPROC_PUSCH_check = 1
|
||||||
|
#dlsch and ulsch statistics
|
||||||
|
#keys below are the markers we are loooking for, loop over this keys list
|
||||||
|
#everytime these markers are found in the log file, the previous ones are overwritten in the dict
|
||||||
|
#eventually we record and print only the last occurence
|
||||||
|
keys = {'dlsch_rounds','dlsch_total_bytes','ulsch_rounds','ulsch_total_bytes_scheduled'}
|
||||||
|
for k in keys:
|
||||||
|
result = re.search(k, line)
|
||||||
|
if result is not None:
|
||||||
|
#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())
|
||||||
|
#count "L1 thread not ready" msg
|
||||||
|
result = re.search('\[PHY\]\s+L1_thread isn\'t ready', str(line))
|
||||||
|
if result is not None:
|
||||||
|
L1_thread_not_ready_cnt += 1
|
||||||
|
#count "problem receiving samples" msg
|
||||||
|
result = re.search('\[PHY\]\s+problem receiving samples', str(line))
|
||||||
|
if result is not None:
|
||||||
|
pb_receiving_samples_cnt += 1
|
||||||
|
|
||||||
enb_log_file.close()
|
enb_log_file.close()
|
||||||
logging.debug(' File analysis completed')
|
logging.debug(' File analysis completed')
|
||||||
if self.air_interface == 'lte':
|
if (self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb'):
|
||||||
nodeB_prefix = 'e'
|
nodeB_prefix = 'e'
|
||||||
else:
|
else:
|
||||||
nodeB_prefix = 'g'
|
nodeB_prefix = 'g'
|
||||||
if self.air_interface == 'nr':
|
|
||||||
|
if self.air_interface[self.eNB_instance] == 'nr-softmodem':
|
||||||
if ulschReceiveOK > 0:
|
if ulschReceiveOK > 0:
|
||||||
statMsg = nodeB_prefix + 'NB showed ' + str(ulschReceiveOK) + ' "ULSCH received ok" message(s)'
|
statMsg = nodeB_prefix + 'NB showed ' + str(ulschReceiveOK) + ' "ULSCH received ok" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
@@ -948,6 +887,38 @@ class RANManagement():
|
|||||||
statMsg = nodeB_prefix + 'NB showed ' + str(gnbRxTxWakeUpFailure) + ' "could not wakeup gNB rxtx process" message(s)'
|
statMsg = nodeB_prefix + 'NB showed ' + str(gnbRxTxWakeUpFailure) + ' "could not wakeup gNB rxtx process" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
htmleNBFailureMsg += statMsg + '\n'
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
|
if gnbTxWriteThreadEnabled:
|
||||||
|
statMsg = nodeB_prefix + 'NB ran with TX Write thread enabled'
|
||||||
|
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 '
|
||||||
|
htmlMsg = statMsg+'\n'
|
||||||
|
else:
|
||||||
|
statMsg = '[RAPROC] PUSCH with TC_RNTI message check for ' + nodeB_prefix + 'NB : FAIL '
|
||||||
|
htmlMsg = statMsg+'\n'
|
||||||
|
logging.debug(statMsg)
|
||||||
|
htmleNBFailureMsg += htmlMsg
|
||||||
|
#L1 thread not ready log
|
||||||
|
statMsg = '[PHY] L1 thread is not ready msg count = '+str(L1_thread_not_ready_cnt)
|
||||||
|
htmlMsg = statMsg+'\n'
|
||||||
|
logging.debug(statMsg)
|
||||||
|
htmleNBFailureMsg += htmlMsg
|
||||||
|
#problem receiving samples log
|
||||||
|
statMsg = '[PHY] problem receiving samples msg count = '+str(pb_receiving_samples_cnt)
|
||||||
|
htmlMsg = statMsg+'\n'
|
||||||
|
logging.debug(statMsg)
|
||||||
|
htmleNBFailureMsg += htmlMsg
|
||||||
|
|
||||||
|
#ulsch and dlsch statistics
|
||||||
|
if len(dlsch_ulsch_stats)!=0: #check if dictionary is not empty
|
||||||
|
statMsg=''
|
||||||
|
for key in dlsch_ulsch_stats: #for each dictionary key
|
||||||
|
statMsg += dlsch_ulsch_stats[key] + '\n'
|
||||||
|
logging.debug(dlsch_ulsch_stats[key])
|
||||||
|
htmleNBFailureMsg += statMsg
|
||||||
|
|
||||||
if uciStatMsgCount > 0:
|
if uciStatMsgCount > 0:
|
||||||
statMsg = nodeB_prefix + 'NB showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
|
statMsg = nodeB_prefix + 'NB showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
@@ -960,6 +931,14 @@ class RANManagement():
|
|||||||
statMsg = nodeB_prefix + 'NB showed ' + str(ulschFailure) + ' "ULSCH in error in round" message(s)'
|
statMsg = nodeB_prefix + 'NB showed ' + str(ulschFailure) + ' "ULSCH in error in round" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
htmleNBFailureMsg += statMsg + '\n'
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
|
if ulschAllocateCCEerror > 0:
|
||||||
|
statMsg = nodeB_prefix + 'NB showed ' + str(ulschAllocateCCEerror) + ' "eNB_dlsch_ulsch_scheduler(); ERROR ALLOCATING CCEs" message(s)'
|
||||||
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
|
if uplinkSegmentsAborted > 0:
|
||||||
|
statMsg = nodeB_prefix + 'NB showed ' + str(uplinkSegmentsAborted) + ' "uplink segment error 0/2, aborted * segments" message(s)'
|
||||||
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
if dropNotEnoughRBs > 0:
|
if dropNotEnoughRBs > 0:
|
||||||
statMsg = 'eNB showed ' + str(dropNotEnoughRBs) + ' "dropping, not enough RBs" message(s)'
|
statMsg = 'eNB showed ' + str(dropNotEnoughRBs) + ' "dropping, not enough RBs" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
@@ -1030,30 +1009,30 @@ class RANManagement():
|
|||||||
rruMsg = 'Slave RRU DID NOT receive the RRU_frame_resynch command from RAU'
|
rruMsg = 'Slave RRU DID NOT receive the RRU_frame_resynch command from RAU'
|
||||||
logging.debug('\u001B[1;37;41m ' + rruMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;37;41m ' + rruMsg + ' \u001B[0m')
|
||||||
htmleNBFailureMsg += rruMsg + '\n'
|
htmleNBFailureMsg += rruMsg + '\n'
|
||||||
self.prematureExit(True)
|
self.prematureExit = True
|
||||||
return CONST.ENB_PROCESS_SLAVE_RRU_NOT_SYNCED
|
global_status = CONST.ENB_PROCESS_SLAVE_RRU_NOT_SYNCED
|
||||||
if foundSegFault:
|
if foundSegFault:
|
||||||
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with a Segmentation Fault! \u001B[0m')
|
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with a Segmentation Fault! \u001B[0m')
|
||||||
if self.htmlObj is not None:
|
global_status = CONST.ENB_PROCESS_SEG_FAULT
|
||||||
self.htmlObj.SetHmleNBFailureMsg(htmleNBFailureMsg)
|
|
||||||
return CONST.ENB_PROCESS_SEG_FAULT
|
|
||||||
if foundAssertion:
|
if foundAssertion:
|
||||||
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with an assertion! \u001B[0m')
|
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB ended with an assertion! \u001B[0m')
|
||||||
htmleNBFailureMsg += msgAssertion
|
htmleNBFailureMsg += msgAssertion
|
||||||
if self.htmlObj is not None:
|
global_status = CONST.ENB_PROCESS_ASSERTION
|
||||||
self.htmlObj.SetHmleNBFailureMsg(htmleNBFailureMsg)
|
|
||||||
return CONST.ENB_PROCESS_ASSERTION
|
|
||||||
if foundRealTimeIssue:
|
if foundRealTimeIssue:
|
||||||
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB faced real time issues! \u001B[0m')
|
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB faced real time issues! \u001B[0m')
|
||||||
htmleNBFailureMsg += nodeB_prefix + 'NB faced real time issues!\n'
|
htmleNBFailureMsg += nodeB_prefix + 'NB faced real time issues!\n'
|
||||||
#return CONST.ENB_PROCESS_REALTIME_ISSUE
|
|
||||||
if rlcDiscardBuffer > 0:
|
if rlcDiscardBuffer > 0:
|
||||||
rlcMsg = nodeB_prefix + 'NB RLC discarded ' + str(rlcDiscardBuffer) + ' buffer(s)'
|
rlcMsg = nodeB_prefix + 'NB RLC discarded ' + str(rlcDiscardBuffer) + ' buffer(s)'
|
||||||
logging.debug('\u001B[1;37;41m ' + rlcMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;37;41m ' + rlcMsg + ' \u001B[0m')
|
||||||
htmleNBFailureMsg += rlcMsg + '\n'
|
htmleNBFailureMsg += rlcMsg + '\n'
|
||||||
if self.htmlObj is not None:
|
global_status = CONST.ENB_PROCESS_REALTIME_ISSUE
|
||||||
self.htmlObj.SetHmleNBFailureMsg(htmleNBFailureMsg)
|
HTML.htmleNBFailureMsg=htmleNBFailureMsg
|
||||||
return CONST.ENB_PROCESS_REALTIME_ISSUE
|
# Runtime statistics for console output and HTML
|
||||||
if self.htmlObj is not None:
|
if runTime != '':
|
||||||
self.htmlObj.SetHmleNBFailureMsg(htmleNBFailureMsg)
|
logging.debug(runTime)
|
||||||
return 0
|
logging.debug(userTime)
|
||||||
|
logging.debug(systemTime)
|
||||||
|
logging.debug(maxPhyMemUsage)
|
||||||
|
logging.debug(nbContextSwitches)
|
||||||
|
self.runtime_stats='<pre>'+runTime + '\n'+ userTime + '\n' + systemTime + '\n' + maxPhyMemUsage + '\n' + nbContextSwitches+'</pre>'
|
||||||
|
return global_status
|
||||||
|
|||||||
@@ -470,7 +470,7 @@ function report_test {
|
|||||||
then
|
then
|
||||||
NB_UE_TUNNEL_UP=`egrep -c "Interface oaitun_ue1 successfully configured" $UE_LOG`
|
NB_UE_TUNNEL_UP=`egrep -c "Interface oaitun_ue1 successfully configured" $UE_LOG`
|
||||||
else
|
else
|
||||||
NB_UE_TUNNEL_UP=`egrep -c "executing ifconfig oaitun_ue1" $UE_LOG`
|
NB_UE_TUNNEL_UP=`egrep -c "ip link set oaitun_ue1 up" $UE_LOG`
|
||||||
fi
|
fi
|
||||||
if [ $NB_ENB_GOT_SYNC -gt 0 ] && [ $NB_UE_GOT_SYNC -gt 0 ] && [ $NB_ENB_SYNCED_WITH_UE -gt 0 ]
|
if [ $NB_ENB_GOT_SYNC -gt 0 ] && [ $NB_UE_GOT_SYNC -gt 0 ] && [ $NB_ENB_SYNCED_WITH_UE -gt 0 ]
|
||||||
then
|
then
|
||||||
@@ -620,6 +620,101 @@ function report_test {
|
|||||||
#IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_ul*client*txt | grep -v mbms 2> /dev/null`
|
#IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_ul*client*txt | grep -v mbms 2> /dev/null`
|
||||||
#analyzeIperfFiles
|
#analyzeIperfFiles
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# FeMBMS Case
|
||||||
|
CN_CONFIG="noS1"
|
||||||
|
TMODE="fdd"
|
||||||
|
BW_CASES=(05)
|
||||||
|
for BW in ${BW_CASES[@]}
|
||||||
|
do
|
||||||
|
echo " <tr bgcolor = \"#8FBC8F\" >" >> ./test_simulator_results.html
|
||||||
|
echo " <td align = \"center\" colspan = 4 >Test FeMBMS without EPC (aka noS1): ${TMODE} -- ${BW}MHz </td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
ENB_LOG=$ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_enb_fembms.log
|
||||||
|
UE_LOG=`echo $ENB_LOG | sed -e "s#enb#ue#"`
|
||||||
|
if [ -f $ENB_LOG ] && [ -f $UE_LOG ]
|
||||||
|
then
|
||||||
|
NAME_ENB=`echo $ENB_LOG | sed -e "s#$ARCHIVES_LOC/##"`
|
||||||
|
NAME_UE=`echo $UE_LOG | sed -e "s#$ARCHIVES_LOC/##"`
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>$NAME_ENB --- $NAME_UE</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>N/A</td>" >> ./test_simulator_results.html
|
||||||
|
#NB_ENB_GOT_SYNC=`egrep -c "got sync" $ENB_LOG`
|
||||||
|
NB_ENB_TUNNEL_UP=`egrep -c "Interface oaitun_enb1 successfully configured" $ENB_LOG`
|
||||||
|
NB_ENB_MTUNNEL_UP=`egrep -c "Interface oaitun_enm1 successfully configured" $ENB_LOG`
|
||||||
|
#NB_UE_GOT_SYNC=`egrep -c "rfsimulator: Success" $UE_LOG`
|
||||||
|
#NB_ENB_SYNCED_WITH_UE=`egrep -c "Generating RRCConnectionReconfigurationComplete" $UE_LOG`
|
||||||
|
NB_UE_TUNNEL_UP=`egrep -c "Interface oaitun_ue1 successfully configured" $UE_LOG`
|
||||||
|
NB_UE_MTUNNEL_UP=`egrep -c "Interface oaitun_uem1 successfully configured" $UE_LOG`
|
||||||
|
NB_UE_MBMS_PUSH_MSG=`egrep -c "TRIED TO PUSH MBMS DATA TO" $UE_LOG`
|
||||||
|
#if [ $NB_ENB_GOT_SYNC -gt 0 ] && [ $NB_UE_GOT_SYNC -gt 0 ] && [ $NB_ENB_SYNCED_WITH_UE -gt 0 ] && [ $NB_UE_MBMS_PUSH_MSG -gt 0 ]
|
||||||
|
if [ $NB_UE_MBMS_PUSH_MSG -gt 0 ]
|
||||||
|
then
|
||||||
|
echo " <td bgcolor = \"green\" >OK</td>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo " <td bgcolor = \"red\" >KO</td>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
echo " <td><pre>" >> ./test_simulator_results.html
|
||||||
|
#if [ $NB_ENB_GOT_SYNC -gt 0 ]
|
||||||
|
#then
|
||||||
|
# echo "<font color = \"blue\">- eNB --> got sync</font>" >> ./test_simulator_results.html
|
||||||
|
#else
|
||||||
|
# echo "<font color = \"red\"><b>- eNB NEVER got sync</b></font>" >> ./test_simulator_results.html
|
||||||
|
#fi
|
||||||
|
if [ $NB_ENB_TUNNEL_UP -gt 0 ]
|
||||||
|
then
|
||||||
|
echo "<font color = \"blue\">- eNB mounted oaitun_enb1 interface</font>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo "<font color = \"red\"><b>- eNB NEVER mounted oaitun_enb1 interface</b></font>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
if [ $NB_ENB_MTUNNEL_UP -gt 0 ]
|
||||||
|
then
|
||||||
|
echo "<font color = \"blue\">- eNB mounted oaitun_enm1 interface</font>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo "<font color = \"red\"><b>- eNB NEVER mounted oaitun_enm1 interface</b></font>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
#if [ $NB_UE_GOT_SYNC -gt 0 ]
|
||||||
|
#then
|
||||||
|
# echo "<font color = \"blue\">- LTE UE --> got sync</font>" >> ./test_simulator_results.html
|
||||||
|
#else
|
||||||
|
# echo "<font color = \"red\"><b>- LTE UE NEVER got sync</b></font>" >> ./test_simulator_results.html
|
||||||
|
#fi
|
||||||
|
#if [ $NB_ENB_SYNCED_WITH_UE -gt 0 ]
|
||||||
|
#then
|
||||||
|
# echo "<font color = \"blue\">- LTE UE attached to eNB</font>" >> ./test_simulator_results.html
|
||||||
|
#else
|
||||||
|
# echo "<font color = \"red\"><b>- LTE UE NEVER attached to eNB</b></font>" >> ./test_simulator_results.html
|
||||||
|
#fi
|
||||||
|
if [ $NB_UE_TUNNEL_UP -gt 0 ]
|
||||||
|
then
|
||||||
|
echo "<font color = \"blue\">- LTE UE mounted oaitun_ue1 interface</font>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo "<font color = \"red\"><b>- LTE UE NEVER mounted oaitun_ue1 interface</b></font>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
if [ $NB_UE_MTUNNEL_UP -gt 0 ]
|
||||||
|
then
|
||||||
|
echo "<font color = \"blue\">- LTE UE mounted oaitun_uem1 interface</font>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo "<font color = \"red\"><b>- LTE UE NEVER mounted oaitun_uem1 interface</b></font>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
if [ $NB_UE_MBMS_PUSH_MSG -gt 0 ]
|
||||||
|
then
|
||||||
|
echo "<font color = \"blue\">- LTE UE tried to push ${NB_UE_MBMS_PUSH_MSG} MBMS DATA</font>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo "<font color = \"red\"><b>- LTE UE NEVER pushed MBMS DATA</b></font>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
echo " </pre></td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
#PING_LOGS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_ping*.log 2> /dev/null`
|
||||||
|
#analyzePingFiles
|
||||||
|
|
||||||
|
#IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_dl*client*txt | grep -v mbms 2> /dev/null`
|
||||||
|
#analyzeIperfFiles
|
||||||
|
|
||||||
|
#IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_ul*client*txt | grep -v mbms 2> /dev/null`
|
||||||
|
#analyzeIperfFiles
|
||||||
|
done
|
||||||
echo " </table>" >> ./test_simulator_results.html
|
echo " </table>" >> ./test_simulator_results.html
|
||||||
echo " </div>" >> ./test_simulator_results.html
|
echo " </div>" >> ./test_simulator_results.html
|
||||||
|
|
||||||
@@ -670,6 +765,52 @@ function report_test {
|
|||||||
echo " <td align = \"center\" colspan = 4 >Test without EPC (aka noS1): ${TMODE} -- ${BW}PRB </td>" >> ./test_simulator_results.html
|
echo " <td align = \"center\" colspan = 4 >Test without EPC (aka noS1): ${TMODE} -- ${BW}PRB </td>" >> ./test_simulator_results.html
|
||||||
fi
|
fi
|
||||||
echo " </tr>" >> ./test_simulator_results.html
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
|
||||||
|
#RA test (--do-ra option)
|
||||||
|
|
||||||
|
#build log files names
|
||||||
|
RA_ENB_LOG=$ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_gnb_ra_test.log
|
||||||
|
RA_UE_LOG=$ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_ue_ra_test.log
|
||||||
|
if [ -f $RA_ENB_LOG ] && [ -f $RA_UE_LOG ]
|
||||||
|
then
|
||||||
|
#get rid of full path
|
||||||
|
NAME_ENB=`echo $RA_ENB_LOG | sed -e "s#$ARCHIVES_LOC/##"`
|
||||||
|
NAME_UE=`echo $RA_UE_LOG | sed -e "s#$ARCHIVES_LOC/##"`
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>$NAME_ENB --- $NAME_UE</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>Check if RA proc succeeded</td>" >> ./test_simulator_results.html
|
||||||
|
|
||||||
|
#gNB RA check
|
||||||
|
GNB_RECEIVED=`egrep -c "\[RAPROC\] PUSCH with TC_RNTI (.+) received correctly" $RA_ENB_LOG`
|
||||||
|
#UE RA check
|
||||||
|
UE_RA_PROC_OK=`egrep -c "\[RAPROC\] RA procedure succeeded" $RA_UE_LOG`
|
||||||
|
|
||||||
|
|
||||||
|
if [ $GNB_RECEIVED -gt 0 ] && [ $UE_RA_PROC_OK -gt 0 ]
|
||||||
|
then
|
||||||
|
echo " <td bgcolor = \"green\" >OK</td>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo " <td bgcolor = \"red\" >KO</td>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " <td><pre>" >> ./test_simulator_results.html
|
||||||
|
if [ $GNB_RECEIVED -gt 0 ]
|
||||||
|
then
|
||||||
|
echo "<font color = \"blue\">- gNB --> RA received</font>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo "<font color = \"red\"><b>- gNB RA NOT RECEIVED</b></font>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
if [ $UE_RA_PROC_OK -gt 0 ]
|
||||||
|
then
|
||||||
|
echo "<font color = \"blue\">- NR UE --> RA procedure succeded</font>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo "<font color = \"red\"><b>- NR UE RA procedure failed</b></font>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
echo " </pre></td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
|
||||||
|
#SYNC test
|
||||||
ENB_LOG=$ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_gnb.log
|
ENB_LOG=$ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_gnb.log
|
||||||
UE_LOG=`echo $ENB_LOG | sed -e "s#gnb#ue#"`
|
UE_LOG=`echo $ENB_LOG | sed -e "s#gnb#ue#"`
|
||||||
if [ -f $ENB_LOG ] && [ -f $UE_LOG ]
|
if [ -f $ENB_LOG ] && [ -f $UE_LOG ]
|
||||||
@@ -724,8 +865,8 @@ function report_test {
|
|||||||
echo " </pre></td>" >> ./test_simulator_results.html
|
echo " </pre></td>" >> ./test_simulator_results.html
|
||||||
echo " </tr>" >> ./test_simulator_results.html
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
fi
|
fi
|
||||||
#PING_LOGS=`ls $ARCHIVES_LOC/${TMODE}_${BW}MHz_${UES}users_${CN_CONFIG}_ping*.log 2> /dev/null`
|
PING_LOGS=`ls $ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_ping*.log 2> /dev/null`
|
||||||
#analyzePingFiles
|
analyzePingFiles
|
||||||
|
|
||||||
IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_iperf_dl*client*txt 2> /dev/null`
|
IPERF_TESTS=`ls $ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_iperf_dl*client*txt 2> /dev/null`
|
||||||
analyzeIperfFiles
|
analyzeIperfFiles
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
+284
-34
@@ -89,6 +89,9 @@ function start_basic_sim_enb {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
ENB_SYNC=0
|
ENB_SYNC=0
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
then
|
then
|
||||||
@@ -151,6 +154,9 @@ function start_basic_sim_ue {
|
|||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||||
rm $1
|
rm $1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
then
|
then
|
||||||
@@ -270,6 +276,43 @@ function check_ping_result {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function check_ra_result {
|
||||||
|
local LOC_GNB_LOG=$1
|
||||||
|
local LOC_UE_LOG=$2
|
||||||
|
|
||||||
|
#if log files exist
|
||||||
|
if [ -f $LOC_GNB_LOG ] && [ -f $LOC_UE_LOG ]
|
||||||
|
then
|
||||||
|
|
||||||
|
#gNB RA test
|
||||||
|
#console check
|
||||||
|
echo "Checking gNB Log for RA success"
|
||||||
|
egrep "\[RAPROC\] PUSCH with TC_RNTI (.+) received correctly" $1
|
||||||
|
#script check
|
||||||
|
local GNB_COMPLETE=`egrep -c "\[RAPROC\] PUSCH with TC_RNTI (.+) received correctly" $1`
|
||||||
|
|
||||||
|
#UE RA test
|
||||||
|
#console check
|
||||||
|
echo 'Checking UE Log for RA success'
|
||||||
|
egrep "\[RAPROC\] RA procedure succeeded" $2
|
||||||
|
#script check
|
||||||
|
local UE_COMPLETE=`egrep -c "\[RAPROC\] RA procedure succeeded" $2`
|
||||||
|
|
||||||
|
#generate status
|
||||||
|
if [ $GNB_COMPLETE -eq 0 ] || [ $UE_COMPLETE -eq 0 ]
|
||||||
|
then
|
||||||
|
RA_STATUS=-1
|
||||||
|
echo "RA test FAILED, could not find the markers"
|
||||||
|
fi
|
||||||
|
#case where log files do not exist
|
||||||
|
else
|
||||||
|
echo "RA test log files not present"
|
||||||
|
RA_STATUS=-1
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
# In DL: iperf server should be on UE side
|
# In DL: iperf server should be on UE side
|
||||||
# -B oaitun_ue{j}-IP-Addr
|
# -B oaitun_ue{j}-IP-Addr
|
||||||
# iperf client should be on EPC (S1) or eNB (noS1) side
|
# iperf client should be on EPC (S1) or eNB (noS1) side
|
||||||
@@ -523,9 +566,9 @@ function install_epc_on_vm {
|
|||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
echo "[ -f 01proxy ] && sudo cp 01proxy /etc/apt/apt.conf.d/" > $LOC_EPC_VM_CMDS
|
echo "[ -f 01proxy ] && sudo cp 01proxy /etc/apt/apt.conf.d/" > $LOC_EPC_VM_CMDS
|
||||||
echo "touch /home/ubuntu/.hushlogin" >> $LOC_EPC_VM_CMDS
|
echo "touch /home/ubuntu/.hushlogin" >> $LOC_EPC_VM_CMDS
|
||||||
echo "echo \"sudo apt-get --yes --quiet install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev daemon iperf\"" >> $LOC_EPC_VM_CMDS
|
echo "echo \"sudo apt-get --yes --quiet install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev iperf\"" >> $LOC_EPC_VM_CMDS
|
||||||
echo "sudo apt-get update > zip-install.txt 2>&1" >> $LOC_EPC_VM_CMDS
|
echo "sudo apt-get update > zip-install.txt 2>&1" >> $LOC_EPC_VM_CMDS
|
||||||
echo "sudo apt-get --yes install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev daemon iperf >> zip-install.txt 2>&1" >> $LOC_EPC_VM_CMDS
|
echo "sudo apt-get --yes install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev iperf >> zip-install.txt 2>&1" >> $LOC_EPC_VM_CMDS
|
||||||
|
|
||||||
# Installing HSS
|
# Installing HSS
|
||||||
echo "echo \"cd /opt\"" >> $LOC_EPC_VM_CMDS
|
echo "echo \"cd /opt\"" >> $LOC_EPC_VM_CMDS
|
||||||
@@ -588,8 +631,6 @@ function start_epc {
|
|||||||
echo "echo \"cd /opt/hss_sim0609\"" > $LOC_EPC_VM_CMDS
|
echo "echo \"cd /opt/hss_sim0609\"" > $LOC_EPC_VM_CMDS
|
||||||
echo "cd /opt/hss_sim0609" >> $LOC_EPC_VM_CMDS
|
echo "cd /opt/hss_sim0609" >> $LOC_EPC_VM_CMDS
|
||||||
echo "sudo rm -f hss.log" >> $LOC_EPC_VM_CMDS
|
echo "sudo rm -f hss.log" >> $LOC_EPC_VM_CMDS
|
||||||
#echo "echo \"sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real\"" >> $LOC_EPC_VM_CMDS
|
|
||||||
#echo "sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real" >> $LOC_EPC_VM_CMDS
|
|
||||||
echo "echo \"screen -dm -S simulated_hss ./starthss_real\"" >> $LOC_EPC_VM_CMDS
|
echo "echo \"screen -dm -S simulated_hss ./starthss_real\"" >> $LOC_EPC_VM_CMDS
|
||||||
echo "sudo su -c \"screen -dm -S simulated_hss ./starthss_real\"" >> $LOC_EPC_VM_CMDS
|
echo "sudo su -c \"screen -dm -S simulated_hss ./starthss_real\"" >> $LOC_EPC_VM_CMDS
|
||||||
|
|
||||||
@@ -656,8 +697,6 @@ function terminate_epc {
|
|||||||
echo "cd /opt/ltebox/tools" >> $1
|
echo "cd /opt/ltebox/tools" >> $1
|
||||||
echo "echo \"sudo ./stop_ltebox\"" >> $1
|
echo "echo \"sudo ./stop_ltebox\"" >> $1
|
||||||
echo "sudo ./stop_ltebox" >> $1
|
echo "sudo ./stop_ltebox" >> $1
|
||||||
echo "echo \"sudo daemon --name=simulated_hss --stop\"" >> $1
|
|
||||||
echo "sudo daemon --name=simulated_hss --stop" >> $1
|
|
||||||
echo "echo \"sudo killall --signal SIGKILL hss_sim\"" >> $1
|
echo "echo \"sudo killall --signal SIGKILL hss_sim\"" >> $1
|
||||||
echo "sudo killall --signal SIGKILL hss_sim" >> $1
|
echo "sudo killall --signal SIGKILL hss_sim" >> $1
|
||||||
ssh -T -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||||
@@ -764,6 +803,9 @@ function start_l2_sim_enb {
|
|||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_ENB_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
ENB_SYNC=1
|
ENB_SYNC=1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
@@ -872,6 +914,9 @@ function start_l2_sim_ue {
|
|||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_UE_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
UE_SYNC=1
|
UE_SYNC=1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
@@ -985,6 +1030,9 @@ function start_rf_sim_enb {
|
|||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_ENB_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
then
|
then
|
||||||
@@ -1114,6 +1162,9 @@ function start_rf_sim_ue {
|
|||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_UE_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
then
|
then
|
||||||
@@ -1158,11 +1209,19 @@ function start_rf_sim_gnb {
|
|||||||
local LOC_CONF_FILE=$5
|
local LOC_CONF_FILE=$5
|
||||||
# 1 is with S1 and 0 without S1 aka noS1
|
# 1 is with S1 and 0 without S1 aka noS1
|
||||||
local LOC_S1_CONFIGURATION=$6
|
local LOC_S1_CONFIGURATION=$6
|
||||||
|
#LOC_RA_TEST=1 will run the RA test check
|
||||||
|
local LOC_RA_TEST=$7
|
||||||
|
|
||||||
|
if [ -e rbconfig.raw ]; then rm -f rbconfig.raw; fi
|
||||||
|
if [ -e reconfig.raw ]; then rm -f reconfig.raw; fi
|
||||||
|
|
||||||
echo "cd /home/ubuntu/tmp" > $1
|
echo "cd /home/ubuntu/tmp" > $1
|
||||||
echo "echo \"sudo apt-get --yes --quiet install daemon \"" >> $1
|
echo "echo \"sudo apt-get --yes --quiet install daemon \"" >> $1
|
||||||
echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1
|
echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1
|
||||||
echo "echo \"source oaienv\"" >> $1
|
echo "echo \"source oaienv\"" >> $1
|
||||||
echo "source oaienv" >> $1
|
echo "source oaienv" >> $1
|
||||||
|
echo "echo \"export RFSIMULATOR=server\"" >> $1
|
||||||
|
echo "export RFSIMULATOR=server" >> $1
|
||||||
echo "cd ci-scripts/conf_files/" >> $1
|
echo "cd ci-scripts/conf_files/" >> $1
|
||||||
echo "cp $LOC_CONF_FILE ci-$LOC_CONF_FILE" >> $1
|
echo "cp $LOC_CONF_FILE ci-$LOC_CONF_FILE" >> $1
|
||||||
#echo "sed -i -e 's#N_RB_DL.*=.*;#N_RB_DL = $LOC_NB_RBS;#' -e 's#CI_MME_IP_ADDR#$LOC_EPC_IP_ADDR#' -e 's#CI_ENB_IP_ADDR#$LOC_ENB_VM_IP_ADDR#' -e 's#CI_UE_IP_ADDR#$LOC_UE_VM_IP_ADDR#' ci-$LOC_CONF_FILE" >> $1
|
#echo "sed -i -e 's#N_RB_DL.*=.*;#N_RB_DL = $LOC_NB_RBS;#' -e 's#CI_MME_IP_ADDR#$LOC_EPC_IP_ADDR#' -e 's#CI_ENB_IP_ADDR#$LOC_ENB_VM_IP_ADDR#' -e 's#CI_UE_IP_ADDR#$LOC_UE_VM_IP_ADDR#' ci-$LOC_CONF_FILE" >> $1
|
||||||
@@ -1171,9 +1230,15 @@ function start_rf_sim_gnb {
|
|||||||
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/ran_build/build/\"" >> $1
|
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/ran_build/build/\"" >> $1
|
||||||
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
||||||
echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
||||||
|
echo "sudo rm -f r*config.raw" >> $1
|
||||||
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "echo \"RFSIMULATOR=server ./nr-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --log_config.global_log_options level,nocolor --parallel-config PARALLEL_SINGLE_THREAD --noS1 --nokrnmod 1 --rfsim --phy-test\" > ./my-nr-softmodem-run.sh " >> $1
|
if [ $LOC_RA_TEST -eq 0 ] #no RA test => use --phy-test option
|
||||||
|
then
|
||||||
|
echo "echo \"./nr-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --log_config.global_log_options level,nocolor --parallel-config PARALLEL_SINGLE_THREAD --noS1 --nokrnmod 1 --rfsim --phy-test\" > ./my-nr-softmodem-run.sh " >> $1
|
||||||
|
else #RA test => use --do-ra option
|
||||||
|
echo "echo \"./nr-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-$LOC_CONF_FILE --log_config.global_log_options level,nocolor --parallel-config PARALLEL_SINGLE_THREAD --rfsim --do-ra\" > ./my-nr-softmodem-run.sh " >> $1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
|
echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
|
||||||
echo "cat ./my-nr-softmodem-run.sh" >> $1
|
echo "cat ./my-nr-softmodem-run.sh" >> $1
|
||||||
@@ -1183,6 +1248,7 @@ function start_rf_sim_gnb {
|
|||||||
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR < $1
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
|
|
||||||
|
|
||||||
local i="0"
|
local i="0"
|
||||||
echo "egrep -c \"got sync\" /home/ubuntu/tmp/cmake_targets/log/$LOC_LOG_FILE" > $1
|
echo "egrep -c \"got sync\" /home/ubuntu/tmp/cmake_targets/log/$LOC_LOG_FILE" > $1
|
||||||
while [ $i -lt 10 ]
|
while [ $i -lt 10 ]
|
||||||
@@ -1205,7 +1271,9 @@ function start_rf_sim_gnb {
|
|||||||
GNB_SYNC=1
|
GNB_SYNC=1
|
||||||
echo "RF-SIM gNB is sync'ed: waiting for UE(s) to connect"
|
echo "RF-SIM gNB is sync'ed: waiting for UE(s) to connect"
|
||||||
fi
|
fi
|
||||||
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
|
||||||
|
# check noS1 config only outside RA test (as it does not support noS1)
|
||||||
|
if [ $LOC_S1_CONFIGURATION -eq 0 ] && [ $LOC_RA_TEST -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "ifconfig oaitun_enb1 | egrep -c \"inet addr\"" > $1
|
echo "ifconfig oaitun_enb1 | egrep -c \"inet addr\"" > $1
|
||||||
# Checking oaitun_enb1 interface has now an IP address
|
# Checking oaitun_enb1 interface has now an IP address
|
||||||
@@ -1230,7 +1298,16 @@ function start_rf_sim_gnb {
|
|||||||
echo "RF-SIM gNB oaitun_enb1 is UP and CONFIGURED"
|
echo "RF-SIM gNB oaitun_enb1 is UP and CONFIGURED"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
sleep 10
|
sleep 10
|
||||||
|
echo "echo \"free -m\"" > $1
|
||||||
|
echo "free -m" >> $1
|
||||||
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR < $1
|
||||||
|
rm $1
|
||||||
|
# Copy the RAW files from the gNB run for the NR-UE
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/ran_build/build/rbconfig.raw .
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$LOC_GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/ran_build/build/reconfig.raw .
|
||||||
}
|
}
|
||||||
|
|
||||||
function start_rf_sim_nr_ue {
|
function start_rf_sim_nr_ue {
|
||||||
@@ -1241,14 +1318,30 @@ function start_rf_sim_nr_ue {
|
|||||||
local LOC_FREQUENCY=$6
|
local LOC_FREQUENCY=$6
|
||||||
# 1 is with S1 and 0 without S1 aka noS1
|
# 1 is with S1 and 0 without S1 aka noS1
|
||||||
local LOC_S1_CONFIGURATION=$7
|
local LOC_S1_CONFIGURATION=$7
|
||||||
|
#LOC_RA_TEST=1 will run the RA test check
|
||||||
|
local LOC_RA_TEST=$8
|
||||||
|
|
||||||
|
# Copy the RAW files from the gNB run
|
||||||
|
scp -o StrictHostKeyChecking=no rbconfig.raw ubuntu@$LOC_NR_UE_VM_IP_ADDR:/home/ubuntu/tmp
|
||||||
|
scp -o StrictHostKeyChecking=no reconfig.raw ubuntu@$LOC_NR_UE_VM_IP_ADDR:/home/ubuntu/tmp
|
||||||
|
|
||||||
echo "echo \"sudo apt-get --yes --quiet install daemon \"" > $1
|
echo "echo \"sudo apt-get --yes --quiet install daemon \"" > $1
|
||||||
echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1
|
echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1
|
||||||
|
echo "echo \"export RFSIMULATOR=${LOC_GNB_VM_IP_ADDR}\"" >> $1
|
||||||
|
echo "export RFSIMULATOR=${LOC_GNB_VM_IP_ADDR}" >> $1
|
||||||
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/ran_build/build/\"" >> $1
|
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/ran_build/build/\"" >> $1
|
||||||
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
||||||
|
echo "sudo cp /home/ubuntu/tmp/r*config.raw /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
||||||
|
echo "sudo chmod 666 /home/ubuntu/tmp/cmake_targets/ran_build/build/r*config.raw" >> $1
|
||||||
echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
echo "cd /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
||||||
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
if [ $LOC_S1_CONFIGURATION -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "echo \"RFSIMULATOR=${LOC_GNB_VM_IP_ADDR} ./nr-uesoftmodem --nokrnmod 1 --rfsim --phy-test --rrc_config_path /home/ubuntu/tmp/ci-scripts/rrc-files --log_config.global_log_options level,nocolor --noS1\" > ./my-nr-softmodem-run.sh " >> $1
|
if [ $LOC_RA_TEST -eq 0 ] #no RA test => use --phy-test option
|
||||||
|
then
|
||||||
|
echo "echo \"./nr-uesoftmodem --nokrnmod 1 --rfsim --phy-test --rrc_config_path /home/ubuntu/tmp/cmake_targets/ran_build/build/ --log_config.global_log_options level,nocolor --noS1\" > ./my-nr-softmodem-run.sh " >> $1
|
||||||
|
else #RA test => use --do-ra option
|
||||||
|
echo "echo \"./nr-uesoftmodem --rfsim --do-ra --log_config.global_log_options level,nocolor --rrc_config_path /home/ubuntu/tmp/cmake_targets/ran_build/build/\" > ./my-nr-softmodem-run.sh " >> $1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
|
echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
|
||||||
echo "cat ./my-nr-softmodem-run.sh" >> $1
|
echo "cat ./my-nr-softmodem-run.sh" >> $1
|
||||||
@@ -1281,11 +1374,13 @@ function start_rf_sim_nr_ue {
|
|||||||
else
|
else
|
||||||
echo "RF-SIM NR-UE is sync'ed w/ gNB"
|
echo "RF-SIM NR-UE is sync'ed w/ gNB"
|
||||||
fi
|
fi
|
||||||
# Checking oaitun_ue1 interface has now an IP address
|
# Checking oaitun_ue1 interface has now an IP address (only outside RA test)
|
||||||
i="0"
|
if [ $LOC_RA_TEST -eq 0 ]
|
||||||
echo "ifconfig oaitun_ue1 | egrep -c \"inet addr\"" > $1
|
then
|
||||||
while [ $i -lt 10 ]
|
i="0"
|
||||||
do
|
echo "ifconfig oaitun_ue1 | egrep -c \"inet addr\"" > $1
|
||||||
|
while [ $i -lt 10 ]
|
||||||
|
do
|
||||||
sleep 5
|
sleep 5
|
||||||
CONNECTED=`ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_NR_UE_VM_IP_ADDR < $1`
|
CONNECTED=`ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_NR_UE_VM_IP_ADDR < $1`
|
||||||
if [ $CONNECTED -eq 1 ]
|
if [ $CONNECTED -eq 1 ]
|
||||||
@@ -1294,16 +1389,20 @@ function start_rf_sim_nr_ue {
|
|||||||
else
|
else
|
||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
rm $1
|
echo "echo \"free -m\"" > $1
|
||||||
if [ $i -lt 50 ]
|
echo "free -m" >> $1
|
||||||
then
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_NR_UE_VM_IP_ADDR < $1
|
||||||
|
rm $1
|
||||||
|
if [ $i -lt 50 ]
|
||||||
|
then
|
||||||
NR_UE_SYNC=0
|
NR_UE_SYNC=0
|
||||||
echo "RF-SIM NR-UE oaitun_ue1 is DOWN or NOT CONFIGURED"
|
echo "RF-SIM NR-UE oaitun_ue1 is DOWN or NOT CONFIGURED"
|
||||||
else
|
else
|
||||||
echo "RF-SIM NR-UE oaitun_ue1 is UP and CONFIGURED"
|
echo "RF-SIM NR-UE oaitun_ue1 is UP and CONFIGURED"
|
||||||
fi
|
fi
|
||||||
sleep 10
|
sleep 10
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1991,6 +2090,70 @@ function run_test_on_vm {
|
|||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
####################
|
||||||
|
## FeMBMS CASE noS1 ##
|
||||||
|
####################
|
||||||
|
CONF_FILE=lte-fdd-fembms-basic-sim.conf
|
||||||
|
CN_CONFIG="noS1"
|
||||||
|
S1_NOS1_CFG=0
|
||||||
|
LTEBOX=0
|
||||||
|
TMODE="fdd"
|
||||||
|
FREQUENCY=2680
|
||||||
|
BW_CASES=(05)
|
||||||
|
FeMBMS_STATUS=0
|
||||||
|
|
||||||
|
for BW in ${BW_CASES[@]}
|
||||||
|
do
|
||||||
|
if [[ $BW =~ .*05.* ]]; then PRB=25; fi
|
||||||
|
if [[ $BW =~ .*10.* ]]; then PRB=50; fi
|
||||||
|
if [[ $BW =~ .*20.* ]]; then PRB=100; fi
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "${CN_CONFIG} : Starting the eNB with MSMS in ${TMODE}-${BW}MHz mode"
|
||||||
|
echo "############################################################"
|
||||||
|
CURRENT_ENB_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_enb_fembms.log
|
||||||
|
start_rf_sim_enb $ENB_VM_CMDS "$ENB_VM_IP_ADDR" "$EPC_VM_IP_ADDR" $CURRENT_ENB_LOG_FILE $PRB $CONF_FILE $S1_NOS1_CFG
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "${CN_CONFIG} : Starting the UE"
|
||||||
|
echo "############################################################"
|
||||||
|
CURRENT_UE_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_ue_fembms.log
|
||||||
|
start_rf_sim_ue $UE_VM_CMDS $UE_VM_IP_ADDR $ENB_VM_IP_ADDR $CURRENT_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1
|
||||||
|
if [ $UE_SYNC -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "Problem w/ eNB and UE not syncing"
|
||||||
|
terminate_enb_ue_basic_sim $ENB_VM_CMDS $ENB_VM_IP_ADDR 1
|
||||||
|
terminate_enb_ue_basic_sim $UE_VM_CMDS $UE_VM_IP_ADDR 2
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$ENB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
STATUS=-1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "${CN_CONFIG} : iperf DL -- UE is server and eNB is client"
|
||||||
|
echo "############################################################"
|
||||||
|
get_enb_mbms_noS1_ip_addr $ENB_VM_CMDS $ENB_VM_IP_ADDR
|
||||||
|
IPERF_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_iperf_dl_fembms
|
||||||
|
get_ue_mbms_ip_addr $UE_VM_CMDS $UE_VM_IP_ADDR 1
|
||||||
|
THROUGHPUT=2
|
||||||
|
generic_iperf $UE_VM_CMDS $UE_VM_IP_ADDR $UE_IP_ADDR $ENB_VM_CMDS $ENB_VM_IP_ADDR $ENB_IP_ADDR $THROUGHPUT $IPERF_LOG_FILE 1 0
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/${IPERF_LOG_FILE}_server.txt $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$ENB_VM_IP_ADDR:/home/ubuntu/${IPERF_LOG_FILE}_client.txt $ARCHIVES_LOC
|
||||||
|
#check_iperf $ARCHIVES_LOC/$IPERF_LOG_FILE $THROUGHPUT
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "${CN_CONFIG} : Terminate enb/ue simulators"
|
||||||
|
echo "############################################################"
|
||||||
|
terminate_enb_ue_basic_sim $ENB_VM_CMDS $ENB_VM_IP_ADDR 1
|
||||||
|
terminate_enb_ue_basic_sim $UE_VM_CMDS $UE_VM_IP_ADDR 2
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$ENB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
NB_UE_FeMBMS_MESSAGES=`egrep -c "TRIED TO PUSH MBMS DATA TO" $ARCHIVES_LOC/$CURRENT_UE_LOG_FILE`
|
||||||
|
if [ $NB_UE_FeMBMS_MESSAGES -eq 0 ]; then FeMBMS_STATUS=-1; fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
full_l2_sim_destroy
|
full_l2_sim_destroy
|
||||||
|
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
@@ -2006,6 +2169,13 @@ function run_test_on_vm {
|
|||||||
echo "LTE MBMS RFSIM seems to FAIL"
|
echo "LTE MBMS RFSIM seems to FAIL"
|
||||||
STATUS=-1
|
STATUS=-1
|
||||||
fi
|
fi
|
||||||
|
if [ $FeMBMS_STATUS -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "LTE FeMBMS RFSIM seems OK"
|
||||||
|
else
|
||||||
|
echo "LTE FeMBMS RFSIM seems to FAIL"
|
||||||
|
STATUS=-1
|
||||||
|
fi
|
||||||
if [ $STATUS -eq 0 ]
|
if [ $STATUS -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "LTE RFSIM seems OK"
|
echo "LTE RFSIM seems OK"
|
||||||
@@ -2014,6 +2184,7 @@ function run_test_on_vm {
|
|||||||
echo "LTE RFSIM seems to FAIL"
|
echo "LTE RFSIM seems to FAIL"
|
||||||
echo "LTE: TEST_KO" > $ARCHIVES_LOC/test_final_status.log
|
echo "LTE: TEST_KO" > $ARCHIVES_LOC/test_final_status.log
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-rf-sim.* ]]
|
if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-rf-sim.* ]]
|
||||||
@@ -2024,34 +2195,110 @@ function run_test_on_vm {
|
|||||||
PRB=106
|
PRB=106
|
||||||
FREQUENCY=3510
|
FREQUENCY=3510
|
||||||
|
|
||||||
local try_cnt="0"
|
if [ ! -d $ARCHIVES_LOC ]
|
||||||
|
then
|
||||||
|
mkdir --parents $ARCHIVES_LOC
|
||||||
|
fi
|
||||||
|
|
||||||
|
local try_cnt=0
|
||||||
NR_STATUS=0
|
NR_STATUS=0
|
||||||
|
|
||||||
######### start of loop
|
######### start of RA TEST loop
|
||||||
while [ $try_cnt -lt 5 ]
|
while [ $try_cnt -lt 5 ] #5 because it hardly succeed within CI
|
||||||
do
|
do
|
||||||
|
|
||||||
SYNC_STATUS=0
|
SYNC_STATUS=0
|
||||||
PING_STATUS=0
|
RA_STATUS=0
|
||||||
IPERF_STATUS=0
|
rm -f $ARCHIVES_LOC/tdd_${PRB}prb_${CN_CONFIG}*ra_test.log
|
||||||
|
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
echo "${CN_CONFIG} : Starting the gNB"
|
echo "${CN_CONFIG} : Starting the gNB"
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
CURRENT_GNB_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_gnb.log
|
CURRENT_GNB_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_gnb_ra_test.log
|
||||||
start_rf_sim_gnb $GNB_VM_CMDS "$GNB_VM_IP_ADDR" $CURRENT_GNB_LOG_FILE $PRB $CONF_FILE $S1_NOS1_CFG
|
#last argument = 1 is to enable --do-ra for RA test
|
||||||
|
start_rf_sim_gnb $GNB_VM_CMDS "$GNB_VM_IP_ADDR" $CURRENT_GNB_LOG_FILE $PRB $CONF_FILE $S1_NOS1_CFG 1
|
||||||
|
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
echo "${CN_CONFIG} : Starting the NR-UE"
|
echo "${CN_CONFIG} : Starting the NR-UE"
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue.log
|
CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_ra_test.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
|
#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 [ $NR_UE_SYNC -eq 0 ]
|
||||||
then
|
then
|
||||||
echo "Problem w/ gNB and NR-UE not syncing"
|
echo "Problem w/ gNB and NR-UE not syncing"
|
||||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||||
terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
|
terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$NR_UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
SYNC_STATUS=-1
|
SYNC_STATUS=-1
|
||||||
try_cnt=$[$try_cnt+1]
|
try_cnt=$((try_cnt+1))
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "${CN_CONFIG} : Terminate gNB/NR-UE simulators"
|
||||||
|
echo "############################################################"
|
||||||
|
sleep 20
|
||||||
|
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||||
|
terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$NR_UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
|
||||||
|
#check RA markers in gNB and NR UE log files
|
||||||
|
echo "############################################################"
|
||||||
|
echo "${CN_CONFIG} : Checking RA on gNB / NR-UE"
|
||||||
|
echo "############################################################"
|
||||||
|
|
||||||
|
# Proper check to be done when RA test is working!
|
||||||
|
check_ra_result $ARCHIVES_LOC/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC/$CURRENT_NR_UE_LOG_FILE
|
||||||
|
if [ $RA_STATUS -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "RA test NOT OK"
|
||||||
|
echo "try_cnt = " $try_cnt
|
||||||
|
try_cnt=$((try_cnt+1))
|
||||||
|
else
|
||||||
|
try_cnt=$((try_cnt+10))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
########### end RA test
|
||||||
|
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
|
||||||
|
######### start of PHY TEST loop
|
||||||
|
try_cnt=0
|
||||||
|
while [ $try_cnt -lt 4 ]
|
||||||
|
do
|
||||||
|
|
||||||
|
|
||||||
|
SYNC_STATUS=0
|
||||||
|
PING_STATUS=0
|
||||||
|
IPERF_STATUS=0
|
||||||
|
rm -f $ARCHIVES_LOC/tdd_${PRB}prb_${CN_CONFIG}_gnb.log $ARCHIVES_LOC/tdd_${PRB}prb_${CN_CONFIG}_ue.log
|
||||||
|
rm -f $ARCHIVES_LOC/tdd_${PRB}prb_${CN_CONFIG}_ping_gnb_from_nrue.log $ARCHIVES_LOC/tdd_${PRB}prb_${CN_CONFIG}_ping_from_gnb_nrue.log
|
||||||
|
rm -f $ARCHIVES_LOC/tdd_${PRB}prb_${CN_CONFIG}_iperf_dl*txt $ARCHIVES_LOC/tdd_${PRB}prb_${CN_CONFIG}_iperf_ul*txt
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "${CN_CONFIG} : Starting the gNB"
|
||||||
|
echo "############################################################"
|
||||||
|
CURRENT_GNB_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_gnb.log
|
||||||
|
start_rf_sim_gnb $GNB_VM_CMDS "$GNB_VM_IP_ADDR" $CURRENT_GNB_LOG_FILE $PRB $CONF_FILE $S1_NOS1_CFG 0
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "${CN_CONFIG} : Starting the NR-UE"
|
||||||
|
echo "############################################################"
|
||||||
|
CURRENT_NR_UE_LOG_FILE=tdd_${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 ]
|
||||||
|
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
|
||||||
|
terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$NR_UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
SYNC_STATUS=-1
|
||||||
|
try_cnt=$((try_cnt+1))
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -2089,7 +2336,9 @@ function run_test_on_vm {
|
|||||||
echo "DL test not OK"
|
echo "DL test not OK"
|
||||||
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2
|
||||||
terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
|
terminate_enb_ue_basic_sim $GNB_VM_CMDS $GNB_VM_IP_ADDR 1
|
||||||
try_cnt=$[$try_cnt+1]
|
scp -o StrictHostKeyChecking=no ubuntu@$GNB_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$NR_UE_VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
try_cnt=$((try_cnt+1))
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -2115,9 +2364,9 @@ function run_test_on_vm {
|
|||||||
if [ $IPERF_STATUS -ne 0 ]
|
if [ $IPERF_STATUS -ne 0 ]
|
||||||
then
|
then
|
||||||
echo "UL test not OK"
|
echo "UL test not OK"
|
||||||
try_cnt=$[$try_cnt+1]
|
try_cnt=$((try_cnt+1))
|
||||||
else
|
else
|
||||||
try_cnt=$[$try_cnt+10]
|
try_cnt=$((try_cnt+10))
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
######### end of loop
|
######### end of loop
|
||||||
@@ -2128,6 +2377,7 @@ function run_test_on_vm {
|
|||||||
echo "Checking run status"
|
echo "Checking run status"
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
|
|
||||||
|
if [ $RA_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||||
if [ $SYNC_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
if [ $SYNC_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||||
if [ $PING_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
if [ $PING_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||||
if [ $IPERF_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
if [ $IPERF_STATUS -ne 0 ]; then NR_STATUS=-1; fi
|
||||||
|
|||||||
@@ -101,6 +101,18 @@ class SSHConnection():
|
|||||||
else:
|
else:
|
||||||
sys.exit('SSH Connection Failed')
|
sys.exit('SSH Connection Failed')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def cde_check_value(self, commandline, expected, timeout):
|
||||||
|
logging.debug(commandline)
|
||||||
|
self.ssh.timeout = timeout
|
||||||
|
self.ssh.sendline(commandline)
|
||||||
|
expected.append(pexpect.EOF)
|
||||||
|
expected.append(pexpect.TIMEOUT)
|
||||||
|
self.sshresponse = self.ssh.expect(expected)
|
||||||
|
return self.sshresponse
|
||||||
|
|
||||||
def command(self, commandline, expectedline, timeout):
|
def command(self, commandline, expectedline, timeout):
|
||||||
logging.debug(commandline)
|
logging.debug(commandline)
|
||||||
self.ssh.timeout = timeout
|
self.ssh.timeout = timeout
|
||||||
|
|||||||
@@ -21,7 +21,11 @@
|
|||||||
BEGIN{max=0;min=10000}
|
BEGIN{max=0;min=10000}
|
||||||
{
|
{
|
||||||
if ($0 ~/Mbits/) {
|
if ($0 ~/Mbits/) {
|
||||||
split($0,a,"MBytes")
|
if ($0 ~/KBytes/) {
|
||||||
|
split($0,a,"KBytes")
|
||||||
|
} else {
|
||||||
|
split($0,a,"MBytes")
|
||||||
|
}
|
||||||
split(a[2],b)
|
split(a[2],b)
|
||||||
if (b[1]>max) {
|
if (b[1]>max) {
|
||||||
max=b[1]
|
max=b[1]
|
||||||
|
|||||||
Executable
+39
@@ -0,0 +1,39 @@
|
|||||||
|
- Build_PhySim
|
||||||
|
- Run_PhySim
|
||||||
|
- Build_eNB
|
||||||
|
- WaitEndBuild_eNB
|
||||||
|
- Initialize_eNB
|
||||||
|
- Terminate_eNB
|
||||||
|
- Initialize_UE
|
||||||
|
- Terminate_UE
|
||||||
|
- Attach_UE
|
||||||
|
- Detach_UE
|
||||||
|
- Build_OAI_UE
|
||||||
|
- Initialize_OAI_UE
|
||||||
|
- Terminate_OAI_UE
|
||||||
|
- DataDisable_UE
|
||||||
|
- DataEnable_UE
|
||||||
|
- CheckStatusUE
|
||||||
|
- Ping
|
||||||
|
- Iperf
|
||||||
|
- Reboot_UE
|
||||||
|
- Initialize_FlexranCtrl
|
||||||
|
- Terminate_FlexranCtrl
|
||||||
|
- Deploy_EPC
|
||||||
|
- Undeploy_EPC
|
||||||
|
- Initialize_HSS
|
||||||
|
- Terminate_HSS
|
||||||
|
- Initialize_MME
|
||||||
|
- Terminate_MME
|
||||||
|
- Initialize_SPGW
|
||||||
|
- Terminate_SPGW
|
||||||
|
- Initialize_CatM_module
|
||||||
|
- Terminate_CatM_module
|
||||||
|
- Attach_CatM_module
|
||||||
|
- Detach_CatM_module
|
||||||
|
- Ping_CatM_module
|
||||||
|
- IdleSleep
|
||||||
|
- Perform_X2_Handover
|
||||||
|
- Build_Image
|
||||||
|
- Deploy_Object
|
||||||
|
- Undeploy_Object
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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-05-tm1</htmlTabRef>
|
||||||
|
<htmlTabName>Test-05MHz-TM1</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>4</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
030201
|
||||||
|
040101
|
||||||
|
030101 040301 040501 040603 040604 040605 040606 040607 040641 040642 040643 040644 040401 040201 030201
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="030101">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize OCP-eNB (FDD/Band7/5MHz)</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf</Initialize_eNB_args>
|
||||||
|
<air_interface>ocp</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030201">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate OCP-eNB</desc>
|
||||||
|
<air_interface>ocp</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040101">
|
||||||
|
<class>Initialize_UE</class>
|
||||||
|
<desc>Initialize UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040201">
|
||||||
|
<class>Terminate_UE</class>
|
||||||
|
<desc>Terminate UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040301">
|
||||||
|
<class>Attach_UE</class>
|
||||||
|
<desc>Attach UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040401">
|
||||||
|
<class>Detach_UE</class>
|
||||||
|
<desc>Detach UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040501">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>ping (5MHz - 20 sec)</desc>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040603">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
|
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040604">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040605">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(unbalanced profile)</desc>
|
||||||
|
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040606">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040607">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040641">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
|
<iperf_args>-u -b 9M -t 30 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040642">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 9M -t 30 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040643">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040644">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</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>build-tab</htmlTabRef>
|
||||||
|
<htmlTabName>Build</htmlTabName>
|
||||||
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
010101
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="010101">
|
||||||
|
<class>Build_eNB</class>
|
||||||
|
<desc>Build eNB OCP (USRP)</desc>
|
||||||
|
<Build_eNB_args>-w USRP -c --eNBocp --ninja</Build_eNB_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -25,23 +25,10 @@
|
|||||||
<htmlTabName>EPC-Start</htmlTabName>
|
<htmlTabName>EPC-Start</htmlTabName>
|
||||||
<htmlTabIcon>log-in</htmlTabIcon>
|
<htmlTabIcon>log-in</htmlTabIcon>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
010101 090101
|
|
||||||
050101 060101 070101
|
050101 060101 070101
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="010101">
|
|
||||||
<class>Build_eNB</class>
|
|
||||||
<desc>Build eNB (USRP)</desc>
|
|
||||||
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="090101">
|
|
||||||
<class>Build_OAI_UE</class>
|
|
||||||
<desc>Build OAI UE</desc>
|
|
||||||
<Build_OAI_UE_args>-w USRP --UE</Build_OAI_UE_args>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="050101">
|
<testCase id="050101">
|
||||||
<class>Initialize_HSS</class>
|
<class>Initialize_HSS</class>
|
||||||
<desc>Initialize HSS</desc>
|
<desc>Initialize HSS</desc>
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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-05-tm1-fembms-nos1-tunnel</htmlTabRef>
|
||||||
|
<htmlTabName>Test-05MHz-FEMBMS-TM1-noS1-tunnel</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>2</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
030201 090109
|
||||||
|
030104 000001 090104 000002 040605 000001 090109 030201
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>15</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000003">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>60</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030104">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize eNB (FDD/Band7/5MHz/MBMS)</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band17.tm1.mbms.25PRB.usrpb210.conf --noS1 --eNBs.[0].rrc_inactivity_threshold 0 --nokrnmod 1 --eNBs.[0].component_carriers.[0].eutra_band 7 --eNBs.[0].component_carriers.[0].downlink_frequency 2680000000 --eNBs.[0].component_carriers.[0].uplink_frequency_offset -120000000 --eNBs.[0].component_carriers.[0].mbms_dedicated_serving_cell ENABLE --MCEs.[0].mbms_sched_info.mbms_area_config_list.[0].pmch_config_list.[0].allocated_sf_end 512</Initialize_eNB_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030201">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate eNB</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="090104">
|
||||||
|
<class>Initialize_OAI_UE</class>
|
||||||
|
<desc>Initialize OAI UE (FDD/Band7/5MHz/MBMS)</desc>
|
||||||
|
<Initialize_OAI_UE_args>-C 2680000000 -r 25 --ue-rxgain 120 --ue-txgain 0 --ue-max-power 0 --ue-scan-carrier --nokrnmod 1 --noS1</Initialize_OAI_UE_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="090109">
|
||||||
|
<class>Terminate_OAI_UE</class>
|
||||||
|
<desc>Terminate OAI UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040605">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/1.5Mbps/UDP/MBMS-sink)(20 sec)</desc>
|
||||||
|
<iperf_args>-c 10.0.2.2 -u -b 1.5M -t 20 -i 1 -fm -B 10.0.2.1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_options>sink</iperf_options>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
<testCase id="090101">
|
<testCase id="090101">
|
||||||
<class>Build_OAI_UE</class>
|
<class>Build_OAI_UE</class>
|
||||||
<desc>Build OAI UE</desc>
|
<desc>Build OAI UE</desc>
|
||||||
<Build_OAI_UE_args>-w USRP --UE</Build_OAI_UE_args>
|
<Build_OAI_UE_args>-w USRP --UE --ninja</Build_OAI_UE_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
<htmlTabName>Test-LTE-M-10MHz-TM1</htmlTabName>
|
<htmlTabName>Test-LTE-M-10MHz-TM1</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
<repeatCount>1</repeatCount>
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestUnstable>True</TestUnstable>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
030201
|
030201
|
||||||
040102
|
040102
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
<htmlTabName>Test-05MHz-TM2</htmlTabName>
|
<htmlTabName>Test-05MHz-TM2</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
<repeatCount>2</repeatCount>
|
<repeatCount>2</repeatCount>
|
||||||
|
<TestUnstable>True</TestUnstable>
|
||||||
|
<TestMinId>040608</TestMinId>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
030201
|
030201
|
||||||
040101
|
040101
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
<htmlTabRef>test-10-tm1</htmlTabRef>
|
<htmlTabRef>test-10-tm1</htmlTabRef>
|
||||||
<htmlTabName>Test-10MHz-TM1</htmlTabName>
|
<htmlTabName>Test-10MHz-TM1</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<TestUnstable>True</TestUnstable>
|
||||||
|
<TestMinId>040615</TestMinId>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
030201
|
030201
|
||||||
040101
|
040101
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
<htmlTabName>Test-20MHz-TM1</htmlTabName>
|
<htmlTabName>Test-20MHz-TM1</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
<repeatCount>4</repeatCount>
|
<repeatCount>4</repeatCount>
|
||||||
|
<TestUnstable>True</TestUnstable>
|
||||||
|
<TestMinId>040623</TestMinId>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
030201
|
030201
|
||||||
040101
|
040101
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
<htmlTabRef>test-20-tm1-defSched</htmlTabRef>
|
<htmlTabRef>test-20-tm1-defSched</htmlTabRef>
|
||||||
<htmlTabName>Test-20MHz-TM1-default-scheduler</htmlTabName>
|
<htmlTabName>Test-20MHz-TM1-default-scheduler</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<TestUnstable>True</TestUnstable>
|
||||||
|
<TestMinId>040522</TestMinId>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
030201
|
030201
|
||||||
040101
|
040101
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
<htmlTabRef>test-05-tm1-rrc-no-flex</htmlTabRef>
|
<htmlTabRef>test-05-tm1-rrc-no-flex</htmlTabRef>
|
||||||
<htmlTabName>Test-05MHz-TM1-RRC-Inactivity</htmlTabName>
|
<htmlTabName>Test-05MHz-TM1-RRC-Inactivity</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>2</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
030201
|
030201
|
||||||
040101
|
040101
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>epc-closure</htmlTabRef>
|
||||||
|
<htmlTabName>EPC-Closure</htmlTabName>
|
||||||
|
<htmlTabIcon>log-out</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
060000 060001 060002
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="060000">
|
||||||
|
<class>Terminate_HSS</class>
|
||||||
|
<desc>Terminate HSS</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="060001">
|
||||||
|
<class>Terminate_MME</class>
|
||||||
|
<desc>Terminate MME</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="060002">
|
||||||
|
<class>Terminate_SPGW</class>
|
||||||
|
<desc>Terminate SPGW</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>epc-start-tab</htmlTabRef>
|
||||||
|
<htmlTabName>EPC-Start</htmlTabName>
|
||||||
|
<htmlTabIcon>log-in</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
000100 000101 000102
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList>
|
||||||
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000100">
|
||||||
|
<class>Initialize_HSS</class>
|
||||||
|
<desc>Initialize HSS</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000101">
|
||||||
|
<class>Initialize_MME</class>
|
||||||
|
<desc>Initialize MME</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000102">
|
||||||
|
<class>Initialize_SPGW</class>
|
||||||
|
<desc>Initialize SPGW</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>epc-start-tab</htmlTabRef>
|
||||||
|
<htmlTabName>EPC-Start</htmlTabName>
|
||||||
|
<htmlTabIcon>log-in</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
000100 000101 000102
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList>
|
||||||
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000100">
|
||||||
|
<class>Initialize_HSS</class>
|
||||||
|
<desc>Initialize HSS</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000101">
|
||||||
|
<class>Initialize_MME</class>
|
||||||
|
<desc>Initialize MME</desc>
|
||||||
|
<option>mme-verizon.conf</option>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000102">
|
||||||
|
<class>Initialize_SPGW</class>
|
||||||
|
<desc>Initialize SPGW</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>build-tab</htmlTabRef>
|
||||||
|
<htmlTabName>Build</htmlTabName>
|
||||||
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
000001
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>Build_Image</class>
|
||||||
|
<desc>Build eNB Image</desc>
|
||||||
|
<kind>all</kind>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>build-tab</htmlTabRef>
|
||||||
|
<htmlTabName>Build</htmlTabName>
|
||||||
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
000001 000002
|
||||||
|
000003 000004
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>Build_eNB</class>
|
||||||
|
<desc>Build eNB</desc>
|
||||||
|
<Build_eNB_args>-w USRP -c --eNB --ninja</Build_eNB_args>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<backgroundBuild>True</backgroundBuild>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000004">
|
||||||
|
<class>WaitEndBuild_eNB</class>
|
||||||
|
<desc>Wait for end of Build eNB</desc>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>Build_eNB</class>
|
||||||
|
<desc>Build gNB</desc>
|
||||||
|
<Build_eNB_args>-w USRP -c --gNB --ninja</Build_eNB_args>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
<backgroundBuild>True</backgroundBuild>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000003">
|
||||||
|
<class>WaitEndBuild_eNB</class>
|
||||||
|
<desc>Wait for end of Build gNB</desc>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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-fr1-tm1</htmlTabRef>
|
||||||
|
<htmlTabName>Test-FR1-TM1</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
030000
|
||||||
|
040000
|
||||||
|
000001
|
||||||
|
070001
|
||||||
|
070000
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList>
|
||||||
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="030000">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize eNB</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf</Initialize_eNB_args>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<air_interface>lte</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040000">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize gNB (3/4 sampling rate)</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf -E</Initialize_eNB_args>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
<air_interface>nr</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>30</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070000">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate eNB</desc>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070001">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate gNB</desc>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
</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>epc-deploy-tab</htmlTabRef>
|
||||||
|
<htmlTabName>EPC-Deploy</htmlTabName>
|
||||||
|
<htmlTabIcon>log-in</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
000100
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList>
|
||||||
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000100">
|
||||||
|
<class>Deploy_EPC</class>
|
||||||
|
<desc>Deploy all EPC containers</desc>
|
||||||
|
<parameters>yaml_files/fr1_epc_tim</parameters>
|
||||||
|
</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>epc-undeploy-tab</htmlTabRef>
|
||||||
|
<htmlTabName>EPC-Undeploy</htmlTabName>
|
||||||
|
<htmlTabIcon>log-out</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
000200
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList>
|
||||||
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000200">
|
||||||
|
<class>Undeploy_EPC</class>
|
||||||
|
<desc>Undeploy all EPC containers</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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-FR1-TM1</htmlTabRef>
|
||||||
|
<htmlTabName>FR1</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
010000
|
||||||
|
030000
|
||||||
|
040000
|
||||||
|
010001
|
||||||
|
000001
|
||||||
|
050000
|
||||||
|
050001
|
||||||
|
050002
|
||||||
|
050002
|
||||||
|
000001
|
||||||
|
060000
|
||||||
|
060001
|
||||||
|
000001
|
||||||
|
010002
|
||||||
|
000001
|
||||||
|
070001
|
||||||
|
070000
|
||||||
|
010003
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="010000">
|
||||||
|
<class>Initialize_UE</class>
|
||||||
|
<desc>Initialize UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="010003">
|
||||||
|
<class>Terminate_UE</class>
|
||||||
|
<desc>Terminate UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="010001">
|
||||||
|
<class>Attach_UE</class>
|
||||||
|
<desc>Attach UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="010002">
|
||||||
|
<class>Detach_UE</class>
|
||||||
|
<desc>Detach UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
<testCase id="030000">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize eNB</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf</Initialize_eNB_args>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<air_interface>lte</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
<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</Initialize_eNB_args>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
<air_interface>nr</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="050000">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
|
<ping_packetloss_threshold>50</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="050001">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>Ping: 5pings in 1sec</desc>
|
||||||
|
<ping_args>-c 5 -i 0.2</ping_args>
|
||||||
|
<ping_packetloss_threshold>50</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="050002">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
|
<ping_packetloss_threshold>50</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
<testCase id="060000">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (DL/1Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 1M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="060001">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (UL/1Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 1M -t 30 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070000">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate eNB</desc>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<air_interface>lte</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070001">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate gNB</desc>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
<air_interface>nr</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
|
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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-FR1-TM1</htmlTabRef>
|
||||||
|
<htmlTabName>FR1</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
010000
|
||||||
|
030000
|
||||||
|
040000
|
||||||
|
010001
|
||||||
|
000001
|
||||||
|
050000
|
||||||
|
000001
|
||||||
|
060000
|
||||||
|
060001
|
||||||
|
000001
|
||||||
|
010002
|
||||||
|
000001
|
||||||
|
070001
|
||||||
|
070000
|
||||||
|
010003
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="010000">
|
||||||
|
<class>Initialize_UE</class>
|
||||||
|
<desc>Initialize UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="010003">
|
||||||
|
<class>Terminate_UE</class>
|
||||||
|
<desc>Terminate UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="010001">
|
||||||
|
<class>Attach_UE</class>
|
||||||
|
<desc>Attach UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="010002">
|
||||||
|
<class>Detach_UE</class>
|
||||||
|
<desc>Detach UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
<testCase id="030000">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize eNB</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf</Initialize_eNB_args>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<air_interface>lte</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
<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</Initialize_eNB_args>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
<air_interface>nr</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="050000">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
|
<ping_packetloss_threshold>50</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
<testCase id="060000">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (DL/2.5Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 2.5M -t 60 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="060001">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (UL/1.5Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 1.5M -t 60 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070000">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate eNB</desc>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<air_interface>lte</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070001">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate gNB</desc>
|
||||||
|
<eNB_instance>1</eNB_instance>
|
||||||
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
<air_interface>nr</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
|
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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-deploy-enb-mono</htmlTabRef>
|
||||||
|
<htmlTabName>Test-Deploy-eNB-Mono</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
040101
|
||||||
|
030101 000020 040301 000021 040501 040601 040611 040641 040651 040401 040201 030201
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Waiting for 60 seconds</desc>
|
||||||
|
<idle_sleep_time_in_sec>60</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Waiting for 10 seconds</desc>
|
||||||
|
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000020">
|
||||||
|
<class>CheckStatusUE</class>
|
||||||
|
<desc>Check UE(s) status before attachment</desc>
|
||||||
|
<expectedNbOfConnectedUEs>0</expectedNbOfConnectedUEs>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000021">
|
||||||
|
<class>CheckStatusUE</class>
|
||||||
|
<desc>Check UE(s) status after attachment</desc>
|
||||||
|
<expectedNbOfConnectedUEs>1</expectedNbOfConnectedUEs>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030101">
|
||||||
|
<class>Deploy_Object</class>
|
||||||
|
<desc>Deploy eNB (FDD/Band7/5MHz) in a container</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/fr1_enb_mono_fdd_tim</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030201">
|
||||||
|
<class>Undeploy_Object</class>
|
||||||
|
<desc>Undeploy eNB</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/fr1_enb_mono_fdd_tim</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040101">
|
||||||
|
<class>Initialize_UE</class>
|
||||||
|
<desc>Initialize UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040201">
|
||||||
|
<class>Terminate_UE</class>
|
||||||
|
<desc>Terminate UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040301">
|
||||||
|
<class>Attach_UE</class>
|
||||||
|
<desc>Attach UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040401">
|
||||||
|
<class>Detach_UE</class>
|
||||||
|
<desc>Detach UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040501">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>ping (5MHz - 20 sec)</desc>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040601">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)</desc>
|
||||||
|
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040611">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/TCP)(30 sec)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040641">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/7.5Mbps/UDP)(30 sec)</desc>
|
||||||
|
<iperf_args>-u -b 7.5M -t 30 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040651">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/TCP)(30 sec)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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
|
||||||
|
030101 040301 040501 040603 040604 040605 040606 040607 040641 040642 040643 040644 040401 040201 030201
|
||||||
|
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>test-05-tm1</htmlTabRef>
|
||||||
|
<htmlTabName>Test-05MHz-TM1</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
030201
|
||||||
|
040101
|
||||||
|
030101 040301 000001 040501 040603 040401 030201
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030101">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize eNB (FDD/Band7/5MHz)</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf --eNBs.[0].plmn_list.[0].mcc 311 --eNBs.[0].plmn_list.[0].mnc 480 --eNBs.[0].plmn_list.[0].mnc_length 3 --eNBs.[0].component_carriers.[0].Nid_cell 10</Initialize_eNB_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030201">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate eNB</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040101">
|
||||||
|
<class>Initialize_UE</class>
|
||||||
|
<desc>Initialize UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040201">
|
||||||
|
<class>Terminate_UE</class>
|
||||||
|
<desc>Terminate UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040301">
|
||||||
|
<class>Attach_UE</class>
|
||||||
|
<desc>Attach UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040401">
|
||||||
|
<class>Detach_UE</class>
|
||||||
|
<desc>Detach UE</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040501">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>ping (5MHz - 20 sec)</desc>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040603">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
|
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040604">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040605">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(unbalanced profile)</desc>
|
||||||
|
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040606">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040607">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -fm</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040641">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
|
<iperf_args>-u -b 9M -t 30 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040642">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 9M -t 30 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040643">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040644">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/TCP)(30 sec)(balanced profile)</desc>
|
||||||
|
<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
<testCase id="090102">
|
<testCase id="090102">
|
||||||
<class>Initialize_OAI_UE</class>
|
<class>Initialize_OAI_UE</class>
|
||||||
<desc>Initialize NR UE USRP</desc>
|
<desc>Initialize NR UE USRP</desc>
|
||||||
<Initialize_OAI_UE_args>--phy-test --usrp-args "addr=192.168.30.2,second_addr=192.168.50.2,clock_source=external,time_source=external" --threadoffset 16 --rrc_config_path ci-scripts/rrc-files</Initialize_OAI_UE_args>
|
<Initialize_OAI_UE_args>--phy-test --usrp-args "addr=192.168.30.2,second_addr=192.168.50.2,clock_source=external,time_source=external" --ue-rxgain 75 --threadoffset 16 --rrc_config_path .</Initialize_OAI_UE_args>
|
||||||
<air_interface>NR</air_interface>
|
<air_interface>NR</air_interface>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>run-oai-gnb-nr-ue-tx-write-thread</htmlTabRef>
|
||||||
|
<htmlTabName>Run-gNB-and-NR-UE-TX-Write-Thread</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>2</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
090103 000001 090104 000002 090108 090109
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="090103">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize gNB USRP (Tx-Write-Threading enabled)</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf --phy-test --usrp-tx-thread-config 1</Initialize_eNB_args>
|
||||||
|
<air_interface>NR</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Sleep</desc>
|
||||||
|
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>IdleSleep</class>
|
||||||
|
<desc>Waiting for NR UE to synchronize w/ gNB</desc>
|
||||||
|
<idle_sleep_time_in_sec>180</idle_sleep_time_in_sec>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="090104">
|
||||||
|
<class>Initialize_OAI_UE</class>
|
||||||
|
<desc>Initialize NR UE USRP</desc>
|
||||||
|
<Initialize_OAI_UE_args>--phy-test --usrp-args "addr=192.168.30.2,second_addr=192.168.50.2,clock_source=external,time_source=external" --ue-rxgain 75 --threadoffset 16 --rrc_config_path .</Initialize_OAI_UE_args>
|
||||||
|
<air_interface>NR</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="090108">
|
||||||
|
<class>Terminate_OAI_UE</class>
|
||||||
|
<desc>Terminate NR UE</desc>
|
||||||
|
<air_interface>NR</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="090109">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate gNB</desc>
|
||||||
|
<air_interface>NR</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -24,6 +24,7 @@
|
|||||||
<htmlTabRef>gnb-build-tab</htmlTabRef>
|
<htmlTabRef>gnb-build-tab</htmlTabRef>
|
||||||
<htmlTabName>Build-gNB</htmlTabName>
|
<htmlTabName>Build-gNB</htmlTabName>
|
||||||
<htmlTabIcon>wrench</htmlTabIcon>
|
<htmlTabIcon>wrench</htmlTabIcon>
|
||||||
|
<repeatCount>4</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
010101
|
010101
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
@@ -33,7 +34,7 @@
|
|||||||
<mode>TesteNB</mode>
|
<mode>TesteNB</mode>
|
||||||
<class>Build_eNB</class>
|
<class>Build_eNB</class>
|
||||||
<desc>Build gNB (USRP)</desc>
|
<desc>Build gNB (USRP)</desc>
|
||||||
<Build_eNB_args>--gNB -w USRP</Build_eNB_args>
|
<Build_eNB_args>--gNB -w USRP --ninja</Build_eNB_args>
|
||||||
<forced_workspace_cleanup>True</forced_workspace_cleanup>
|
<forced_workspace_cleanup>True</forced_workspace_cleanup>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,9 @@
|
|||||||
<htmlTabRef>test-10</htmlTabRef>
|
<htmlTabRef>test-10</htmlTabRef>
|
||||||
<htmlTabName>Test-10MHz</htmlTabName>
|
<htmlTabName>Test-10MHz</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>2</repeatCount>
|
||||||
|
<TestUnstable>True</TestUnstable>
|
||||||
|
<TestMinId>040612</TestMinId>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
030201
|
030201
|
||||||
040101
|
040101
|
||||||
|
|||||||
@@ -0,0 +1,161 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
030105 040301 040502 040606 040601 040603 040608 040605 040646 040641 040643 040648 040645 040401 040201 030201
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>test-ldpc-gpu</htmlTabRef>
|
||||||
|
<htmlTabName>Test-ldpc-GPU</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>000001 000002 000003 000004 000005 000006 000007 000008 000009 000010 000011 000012 000013 000014 000015 000016 000017 000018 000019 000020 000021</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>Build_PhySim</class>
|
||||||
|
<desc>Build for physical simulator</desc>
|
||||||
|
<physim_build_args>--phy_simulators --ninja</physim_build_args>
|
||||||
|
<forced_workspace_cleanup>FALSE</forced_workspace_cleanup>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 3872 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000003">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 3872 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000004">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 4224 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000005">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 4224 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000006">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 4576 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000007">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 4576 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000008">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 4928 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000009">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 4928 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000010">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 5280 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000011">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 5280 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000012">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 5632 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000013">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 5632 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000014">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 6336 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000015">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 6336 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000016">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 7040 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000017">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 7040 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000018">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 7744 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000019">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 7744 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000020">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
|
<physim_run_args>-l 8448 -s10 -n100</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000021">
|
||||||
|
<class>Run_PhySim</class>
|
||||||
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
|
<physim_run_args>-l 8448 -s10 -n100 -G 1</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user