Merge remote-tracking branch 'origin/develop' into NR_scheduling_CSIRS
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/
|
||||||
+126
-31
@@ -35,6 +35,13 @@ 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
|
||||||
|
|
||||||
|
// Tags to shorten pipeline duration
|
||||||
|
def doMandatoryTests = false
|
||||||
|
def doFullTestsuite = false
|
||||||
|
|
||||||
pipeline {
|
pipeline {
|
||||||
agent {
|
agent {
|
||||||
label nodeExecutor
|
label nodeExecutor
|
||||||
@@ -43,31 +50,6 @@ pipeline {
|
|||||||
disableConcurrentBuilds()
|
disableConcurrentBuilds()
|
||||||
timestamps()
|
timestamps()
|
||||||
gitLabConnection('OAI GitLab')
|
gitLabConnection('OAI GitLab')
|
||||||
gitlabBuilds(builds: [
|
|
||||||
"Build gNB-USRP",
|
|
||||||
"Build nr-UE-USRP",
|
|
||||||
"Build eNB-USRP",
|
|
||||||
"Build basic-sim",
|
|
||||||
"Build phy-sim",
|
|
||||||
"Build eNB-ethernet",
|
|
||||||
"Build UE-ethernet",
|
|
||||||
"Analysis with cppcheck",
|
|
||||||
"Test phy-sim",
|
|
||||||
"Test basic-sim",
|
|
||||||
"Test L1-sim",
|
|
||||||
"Test RF-sim",
|
|
||||||
"Test L2-sim",
|
|
||||||
"Test-Mono-FDD-Band7",
|
|
||||||
"Test-Mono-TDD-Band40",
|
|
||||||
"Test-IF4p5-FDD-Band7",
|
|
||||||
"Test-IF4p5-TDD-Band40",
|
|
||||||
"Test-Mono-FDD-Band13-LTE-M",
|
|
||||||
"Test-IF4p5-TDD-Band38-Multi-RRU",
|
|
||||||
"Test-eNB-OAI-UE-FDD-Band7",
|
|
||||||
"Test-Mono-FDD-Band13-X2-HO",
|
|
||||||
"Test-TDD-Band78-gNB-NR-UE",
|
|
||||||
"Test-OCP-FDD-Band7"
|
|
||||||
])
|
|
||||||
ansiColor('xterm')
|
ansiColor('xterm')
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,6 +72,33 @@ pipeline {
|
|||||||
if (fileExists("flexran")) {
|
if (fileExists("flexran")) {
|
||||||
sh "rm -Rf flexran > /dev/null 2>&1"
|
sh "rm -Rf flexran > /dev/null 2>&1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo '\u2705 \u001B[32mVerify Labels\u001B[0m'
|
||||||
|
if ("MERGE".equals(env.gitlabActionType)) {
|
||||||
|
LABEL_CHECK = sh returnStdout: true, script: 'ci-scripts/checkGitLabMergeRequestLabels.sh --mr-id ' + env.gitlabMergeRequestIid
|
||||||
|
LABEL_CHECK = LABEL_CHECK.trim()
|
||||||
|
if (LABEL_CHECK == 'NONE') {
|
||||||
|
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): Your merge request has none of the mandatory labels:\n\n"
|
||||||
|
message += " - BUILD-ONLY\n"
|
||||||
|
message += " - 4G-LTE\n"
|
||||||
|
message += " - 5G-NR\n"
|
||||||
|
message += " - CI\n\n"
|
||||||
|
message += "Not performing CI due to lack of labels"
|
||||||
|
addGitLabMRComment comment: message
|
||||||
|
error('Not performing CI due to lack of labels')
|
||||||
|
} else if (LABEL_CHECK == 'FULL') {
|
||||||
|
doMandatoryTests = true
|
||||||
|
doFullTestsuite = true
|
||||||
|
} else if (LABEL_CHECK == 'SHORTEN-5G') {
|
||||||
|
doMandatoryTests = true
|
||||||
|
} else {
|
||||||
|
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): We will perform only build stages on your Merge Request"
|
||||||
|
addGitLabMRComment comment: message
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
doMandatoryTests = true
|
||||||
|
doFullTestsuite = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -132,7 +141,7 @@ pipeline {
|
|||||||
// For the moment, there is no fail criteria. Just a notification of number of files that do not follow
|
// For the moment, there is no fail criteria. Just a notification of number of files that do not follow
|
||||||
sh "./ci-scripts/checkCodingFormattingRules.sh"
|
sh "./ci-scripts/checkCodingFormattingRules.sh"
|
||||||
}
|
}
|
||||||
if (doFlexranCtrlTest) {
|
if (doFlexranCtrlTest && doMandatoryTests) {
|
||||||
sh "mkdir flexran"
|
sh "mkdir flexran"
|
||||||
dir ('flexran') {
|
dir ('flexran') {
|
||||||
withCredentials([
|
withCredentials([
|
||||||
@@ -159,65 +168,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"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,11 +313,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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -353,7 +381,11 @@ pipeline {
|
|||||||
stage ("VM-based tests") {
|
stage ("VM-based tests") {
|
||||||
stages {
|
stages {
|
||||||
stage ("Test physical simulators") {
|
stage ("Test physical simulators") {
|
||||||
|
when {
|
||||||
|
expression {doMandatoryTests}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
script {
|
script {
|
||||||
timeout (time: 90, unit: 'MINUTES') {
|
timeout (time: 90, unit: 'MINUTES') {
|
||||||
try {
|
try {
|
||||||
@@ -365,13 +397,15 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Build Flexran Controller") {
|
stage ("Build Flexran Controller") {
|
||||||
when {
|
when {
|
||||||
expression {doFlexranCtrlTest}
|
expression {doFlexranCtrlTest && doMandatoryTests}
|
||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
script {
|
script {
|
||||||
timeout (time: 20, unit: 'MINUTES') {
|
timeout (time: 20, unit: 'MINUTES') {
|
||||||
try {
|
try {
|
||||||
@@ -381,10 +415,15 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test basic simulator") {
|
stage ("Test basic simulator") {
|
||||||
|
when {
|
||||||
|
expression {doMandatoryTests}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
script {
|
script {
|
||||||
timeout (time: 30, unit: 'MINUTES') {
|
timeout (time: 30, unit: 'MINUTES') {
|
||||||
try {
|
try {
|
||||||
@@ -396,10 +435,15 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test L1 simulator") {
|
stage ("Test L1 simulator") {
|
||||||
|
when {
|
||||||
|
expression {doMandatoryTests}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
script {
|
script {
|
||||||
timeout (time: 30, unit: 'MINUTES') {
|
timeout (time: 30, unit: 'MINUTES') {
|
||||||
try {
|
try {
|
||||||
@@ -411,12 +455,17 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test RF simulator") {
|
stage ("Test RF simulator") {
|
||||||
|
when {
|
||||||
|
expression {doMandatoryTests}
|
||||||
|
}
|
||||||
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"
|
||||||
@@ -426,10 +475,15 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test L2 simulator") {
|
stage ("Test L2 simulator") {
|
||||||
|
when {
|
||||||
|
expression {doFullTestsuite}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
|
lock (vmResource) {
|
||||||
script {
|
script {
|
||||||
timeout (time: 30, unit: 'MINUTES') {
|
timeout (time: 30, unit: 'MINUTES') {
|
||||||
try {
|
try {
|
||||||
@@ -441,16 +495,25 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Destroy all Virtual Machines") {
|
stage ("Destroy all Virtual Machines") {
|
||||||
|
when {
|
||||||
|
expression {doMandatoryTests}
|
||||||
|
}
|
||||||
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}"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test MONOLITHIC - FDD - Band 7 - B210") {
|
stage ("Test MONOLITHIC - FDD - Band 7 - B210") {
|
||||||
|
when {
|
||||||
|
expression {doFullTestsuite}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
triggerSlaveJob ('eNB-CI-FDD-Band7-B210', 'Test-Mono-FDD-Band7')
|
triggerSlaveJob ('eNB-CI-FDD-Band7-B210', 'Test-Mono-FDD-Band7')
|
||||||
@@ -470,6 +533,9 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test MONOLITHIC - TDD - Band 40 - B210") {
|
stage ("Test MONOLITHIC - TDD - Band 40 - B210") {
|
||||||
|
when {
|
||||||
|
expression {doFullTestsuite}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
triggerSlaveJob ('eNB-CI-TDD-Band40-B210', 'Test-Mono-TDD-Band40')
|
triggerSlaveJob ('eNB-CI-TDD-Band40-B210', 'Test-Mono-TDD-Band40')
|
||||||
@@ -489,6 +555,9 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test IF4p5 - FDD - Band 7 - B210") {
|
stage ("Test IF4p5 - FDD - Band 7 - B210") {
|
||||||
|
when {
|
||||||
|
expression {doFullTestsuite}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
sh "sleep 60"
|
sh "sleep 60"
|
||||||
@@ -509,6 +578,9 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test IF4p5 - TDD - Band 40 - B210") {
|
stage ("Test IF4p5 - TDD - Band 40 - B210") {
|
||||||
|
when {
|
||||||
|
expression {doFullTestsuite}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
sh "sleep 60"
|
sh "sleep 60"
|
||||||
@@ -529,6 +601,9 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test MONOLITHIC - FDD - Band 13 - B210") {
|
stage ("Test MONOLITHIC - FDD - Band 13 - B210") {
|
||||||
|
when {
|
||||||
|
expression {doFullTestsuite}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
sh "sleep 60"
|
sh "sleep 60"
|
||||||
@@ -549,6 +624,9 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test X2 Handover - FDD - Band 13 - B210") {
|
stage ("Test X2 Handover - FDD - Band 13 - B210") {
|
||||||
|
when {
|
||||||
|
expression {doFullTestsuite}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
sh "sleep 60"
|
sh "sleep 60"
|
||||||
@@ -569,6 +647,9 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test IF4p5 - TDD - Band 38 - B210 - MultiRRU") {
|
stage ("Test IF4p5 - TDD - Band 38 - B210 - MultiRRU") {
|
||||||
|
when {
|
||||||
|
expression {doFullTestsuite}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
triggerSlaveJob ('eNB-CI-IF4p5-TDD-Band38-MultiRRU-B210', 'Test-IF4p5-TDD-Band38-Multi-RRU')
|
triggerSlaveJob ('eNB-CI-IF4p5-TDD-Band38-MultiRRU-B210', 'Test-IF4p5-TDD-Band38-Multi-RRU')
|
||||||
@@ -588,6 +669,9 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test OAI UE - FDD - Band 20 - B200") {
|
stage ("Test OAI UE - FDD - Band 20 - B200") {
|
||||||
|
when {
|
||||||
|
expression {doFullTestsuite}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
triggerSlaveJobNoGitLab ('UE-CI-FDD-Band20-B200')
|
triggerSlaveJobNoGitLab ('UE-CI-FDD-Band20-B200')
|
||||||
@@ -607,6 +691,9 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test OAI UE - OAI eNB - FDD - Band 7 - B200") {
|
stage ("Test OAI UE - OAI eNB - FDD - Band 7 - B200") {
|
||||||
|
when {
|
||||||
|
expression {doFullTestsuite}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
// Delayed trigger on slave job, so it is always the last one to run
|
// Delayed trigger on slave job, so it is always the last one to run
|
||||||
@@ -628,6 +715,9 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test OAI NR UE - OAI gNB - TDD - Band 78 - N300") {
|
stage ("Test OAI NR UE - OAI gNB - TDD - Band 78 - N300") {
|
||||||
|
when {
|
||||||
|
expression {doMandatoryTests}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
triggerSlaveJob ('gNB-nrUE-MONO-TDD-Band78-N300', 'Test-TDD-Band78-gNB-NR-UE')
|
triggerSlaveJob ('gNB-nrUE-MONO-TDD-Band78-N300', 'Test-TDD-Band78-gNB-NR-UE')
|
||||||
@@ -647,6 +737,9 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test OAI OCP-eNB - FDD - Band 7 - B210") {
|
stage ("Test OAI OCP-eNB - FDD - Band 7 - B210") {
|
||||||
|
when {
|
||||||
|
expression {doFullTestsuite}
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
triggerSlaveJob ('OCPeNB-FDD-Band7-B210', 'Test-OCP-FDD-Band7')
|
triggerSlaveJob ('OCPeNB-FDD-Band7-B210', 'Test-OCP-FDD-Band7')
|
||||||
@@ -669,6 +762,7 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
|
if (doMandatoryTests) {
|
||||||
dir ('archives') {
|
dir ('archives') {
|
||||||
sh "if [ -d basic_sim/test ] || [ -d phy_sim/test ] || [ -d l2_sim/test ]; then zip -r -qq vm_tests_logs.zip */test ; fi"
|
sh "if [ -d basic_sim/test ] || [ -d phy_sim/test ] || [ -d l2_sim/test ]; then zip -r -qq vm_tests_logs.zip */test ; fi"
|
||||||
}
|
}
|
||||||
@@ -684,6 +778,7 @@ pipeline {
|
|||||||
archiveArtifacts artifacts: 'test_simulator_results.html'
|
archiveArtifacts artifacts: 'test_simulator_results.html'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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([
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ import constants as CONST
|
|||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,HELP):
|
def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP):
|
||||||
|
|
||||||
|
|
||||||
py_param_file_present = False
|
py_param_file_present = False
|
||||||
@@ -79,6 +79,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,HELP):
|
|||||||
RAN.ranRepository=matchReg.group(1)
|
RAN.ranRepository=matchReg.group(1)
|
||||||
HTML.ranRepository=matchReg.group(1)
|
HTML.ranRepository=matchReg.group(1)
|
||||||
ldpc.ranRepository=matchReg.group(1)
|
ldpc.ranRepository=matchReg.group(1)
|
||||||
|
CONTAINERS.ranRepository=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB_AllowMerge=(.+)$|^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNB_AllowMerge=(.+)$|^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE):
|
if re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE)
|
||||||
@@ -90,6 +91,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,HELP):
|
|||||||
CiTestObj.ranAllowMerge = True
|
CiTestObj.ranAllowMerge = True
|
||||||
RAN.ranAllowMerge=True
|
RAN.ranAllowMerge=True
|
||||||
HTML.ranAllowMerge=True
|
HTML.ranAllowMerge=True
|
||||||
|
CONTAINERS.ranAllowMerge=True
|
||||||
elif re.match('^\-\-eNBBranch=(.+)$|^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNBBranch=(.+)$|^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE):
|
if re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE)
|
||||||
@@ -99,6 +101,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,HELP):
|
|||||||
RAN.ranBranch=matchReg.group(1)
|
RAN.ranBranch=matchReg.group(1)
|
||||||
HTML.ranBranch=matchReg.group(1)
|
HTML.ranBranch=matchReg.group(1)
|
||||||
ldpc.ranBranch=matchReg.group(1)
|
ldpc.ranBranch=matchReg.group(1)
|
||||||
|
CONTAINERS.ranBranch=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNBCommitID=(.*)$|^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNBCommitID=(.*)$|^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE):
|
if re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE)
|
||||||
@@ -108,6 +111,7 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,HELP):
|
|||||||
RAN.ranCommitID=matchReg.group(1)
|
RAN.ranCommitID=matchReg.group(1)
|
||||||
HTML.ranCommitID=matchReg.group(1)
|
HTML.ranCommitID=matchReg.group(1)
|
||||||
ldpc.ranCommitID=matchReg.group(1)
|
ldpc.ranCommitID=matchReg.group(1)
|
||||||
|
CONTAINERS.ranCommitID=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNBTargetBranch=(.*)$|^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNBTargetBranch=(.*)$|^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
if re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE)
|
||||||
@@ -117,50 +121,63 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,HELP):
|
|||||||
RAN.ranTargetBranch=matchReg.group(1)
|
RAN.ranTargetBranch=matchReg.group(1)
|
||||||
HTML.ranTargetBranch=matchReg.group(1)
|
HTML.ranTargetBranch=matchReg.group(1)
|
||||||
ldpc.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):
|
elif re.match('^\-\-eNBIPAddress=(.+)$|^\-\-eNB[1-2]IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
if re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNBIPAddress=matchReg.group(1)
|
RAN.eNBIPAddress=matchReg.group(1)
|
||||||
ldpc.eNBIpAddr=matchReg.group(1)
|
ldpc.eNBIpAddr=matchReg.group(1)
|
||||||
|
CONTAINERS.eNBIPAddress=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB1IPAddress=matchReg.group(1)
|
RAN.eNB1IPAddress=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB1IPAddress=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB2IPAddress=matchReg.group(1)
|
RAN.eNB2IPAddress=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB2IPAddress=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNBUserName=(.+)$|^\-\-eNB[1-2]UserName=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNBUserName=(.+)$|^\-\-eNB[1-2]UserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE):
|
if re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNBUserName=matchReg.group(1)
|
RAN.eNBUserName=matchReg.group(1)
|
||||||
ldpc.eNBUserName=matchReg.group(1)
|
ldpc.eNBUserName=matchReg.group(1)
|
||||||
|
CONTAINERS.eNBUserName=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB1UserName=matchReg.group(1)
|
RAN.eNB1UserName=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB1UserName=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB2UserName=matchReg.group(1)
|
RAN.eNB2UserName=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB2UserName=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNBPassword=(.+)$|^\-\-eNB[1-2]Password=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNBPassword=(.+)$|^\-\-eNB[1-2]Password=(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE):
|
if re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNBPassword=matchReg.group(1)
|
RAN.eNBPassword=matchReg.group(1)
|
||||||
ldpc.eNBPassWord=matchReg.group(1)
|
ldpc.eNBPassWord=matchReg.group(1)
|
||||||
|
CONTAINERS.eNBPassword=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB1Password=matchReg.group(1)
|
RAN.eNB1Password=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB1Password=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB2Password=matchReg.group(1)
|
RAN.eNB2Password=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB2Password=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNBSourceCodePath=(.+)$|^\-\-eNB[1-2]SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNBSourceCodePath=(.+)$|^\-\-eNB[1-2]SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
if re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNBSourceCodePath=matchReg.group(1)
|
RAN.eNBSourceCodePath=matchReg.group(1)
|
||||||
ldpc.eNBSourceCodePath=matchReg.group(1)
|
ldpc.eNBSourceCodePath=matchReg.group(1)
|
||||||
|
CONTAINERS.eNBSourceCodePath=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB1SourceCodePath=matchReg.group(1)
|
RAN.eNB1SourceCodePath=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB1SourceCodePath=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB2SourceCodePath=matchReg.group(1)
|
RAN.eNB2SourceCodePath=matchReg.group(1)
|
||||||
|
CONTAINERS.eNB2SourceCodePath=matchReg.group(1)
|
||||||
elif re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
EPC.IPAddress=matchReg.group(1)
|
EPC.IPAddress=matchReg.group(1)
|
||||||
|
|||||||
@@ -178,6 +178,8 @@ function build_on_vm {
|
|||||||
echo "mkdir -p cmake_targets/log" >> $VM_CMDS
|
echo "mkdir -p cmake_targets/log" >> $VM_CMDS
|
||||||
echo "chmod 777 cmake_targets/log" >> $VM_CMDS
|
echo "chmod 777 cmake_targets/log" >> $VM_CMDS
|
||||||
echo "cp /home/ubuntu/zip-install.txt cmake_targets/log" >> $VM_CMDS
|
echo "cp /home/ubuntu/zip-install.txt cmake_targets/log" >> $VM_CMDS
|
||||||
|
# Patching the pistache build for Xenial (cmake too old for new commits)
|
||||||
|
echo "sed -i -e 's@cd pistache@cd pistache \&\& git checkout -f 9a65f40975fafca5bb5370ba6d0d00f42cbc4356@' ./tools/install_dependencies" >> $VM_CMDS
|
||||||
echo "echo \"./tools/install_dependencies \"" >> $VM_CMDS
|
echo "echo \"./tools/install_dependencies \"" >> $VM_CMDS
|
||||||
echo "./tools/install_dependencies > cmake_targets/log/install-build.txt 2>&1" >> $VM_CMDS
|
echo "./tools/install_dependencies > cmake_targets/log/install-build.txt 2>&1" >> $VM_CMDS
|
||||||
echo "echo \"mkdir build\"" >> $VM_CMDS
|
echo "echo \"mkdir build\"" >> $VM_CMDS
|
||||||
|
|||||||
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|openair3/GTPV1-U/nw-gtpv1u|openair2/UTIL/OPT/ws_"`
|
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,15 +186,19 @@ 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 $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_"`
|
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 ]
|
||||||
|
|||||||
Executable
+108
@@ -0,0 +1,108 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#/*
|
||||||
|
# * 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
|
||||||
|
# */
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "OAI GitLab merge request applying script"
|
||||||
|
echo " Original Author: Raphael Defosseux"
|
||||||
|
echo ""
|
||||||
|
echo "Usage:"
|
||||||
|
echo "------"
|
||||||
|
echo ""
|
||||||
|
echo " checkGitLabMergeRequestLabels.sh [OPTIONS]"
|
||||||
|
echo ""
|
||||||
|
echo "Options:"
|
||||||
|
echo "------------------"
|
||||||
|
echo ""
|
||||||
|
echo " --mr-id ####"
|
||||||
|
echo " Specify the ID of the merge request."
|
||||||
|
echo ""
|
||||||
|
echo " --help OR -h"
|
||||||
|
echo " Print this help message."
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -ne 2 ] && [ $# -ne 1 ]
|
||||||
|
then
|
||||||
|
echo "Syntax Error: not the correct number of arguments"
|
||||||
|
echo ""
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]
|
||||||
|
do
|
||||||
|
key="$1"
|
||||||
|
|
||||||
|
case $key in
|
||||||
|
-h|--help)
|
||||||
|
shift
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--mr-id)
|
||||||
|
MERGE_REQUEST_ID="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Syntax Error: unknown option: $key"
|
||||||
|
echo ""
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
LABELS=`curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests/$MERGE_REQUEST_ID" | jq '.labels' || true`
|
||||||
|
|
||||||
|
IS_MR_BUILD_ONLY=`echo $LABELS | grep -c BUILD-ONLY || true`
|
||||||
|
IS_MR_CI=`echo $LABELS | grep -c CI || true`
|
||||||
|
IS_MR_4G=`echo $LABELS | grep -c 4G-LTE || true`
|
||||||
|
IS_MR_5G=`echo $LABELS | grep -c 5G-NR || true`
|
||||||
|
|
||||||
|
# First case: none is present! No CI
|
||||||
|
if [ $IS_MR_BUILD_ONLY -eq 0 ] && [ $IS_MR_CI -eq 0 ] && [ $IS_MR_4G -eq 0 ] && [ $IS_MR_5G -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "NONE"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Second case: Build-Only
|
||||||
|
if [ $IS_MR_BUILD_ONLY -eq 1 ]
|
||||||
|
then
|
||||||
|
echo "BUILD-ONLY"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Third case: CI or 4G label --> Full CI run
|
||||||
|
if [ $IS_MR_4G -eq 1 ] || [ $IS_MR_CI -eq 1 ]
|
||||||
|
then
|
||||||
|
echo "FULL"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fourth case: 5G label
|
||||||
|
if [ $IS_MR_BUILD_ONLY -eq 0 ] && [ $IS_MR_CI -eq 0 ] && [ $IS_MR_4G -eq 0 ] && [ $IS_MR_5G -eq 1 ]
|
||||||
|
then
|
||||||
|
echo "SHORTEN-5G"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
@@ -0,0 +1,488 @@
|
|||||||
|
#/*
|
||||||
|
# * 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
|
||||||
|
from zipfile import ZipFile
|
||||||
|
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
# 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 = ''
|
||||||
|
self.cli = ''
|
||||||
|
self.dockerfileprefix = ''
|
||||||
|
self.host = ''
|
||||||
|
self.allImagesSize = {}
|
||||||
|
self.collectInfo = {}
|
||||||
|
#-----------------------------------------------------------
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
# Checking the hostname to get adapted on cli and dockerfileprefixes
|
||||||
|
mySSH.command('hostnamectl', '\$', 5)
|
||||||
|
result = re.search('Ubuntu|Red Hat', mySSH.getBefore())
|
||||||
|
self.host = result.group(0)
|
||||||
|
if self.host == 'Ubuntu':
|
||||||
|
self.cli = 'docker'
|
||||||
|
self.dockerfileprefix = '.ubuntu18'
|
||||||
|
elif self.host == 'Red Hat':
|
||||||
|
self.cli = 'podman'
|
||||||
|
self.dockerfileprefix = '.rhel8.2'
|
||||||
|
|
||||||
|
imageNames = []
|
||||||
|
result = re.search('eNB', self.imageKind)
|
||||||
|
# Creating a tupple with the imageName and the DockerFile prefix pattern on obelix
|
||||||
|
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)
|
||||||
|
|
||||||
|
# if asterix, copy the entitlement and subscription manager configurations
|
||||||
|
if self.host == 'Red Hat':
|
||||||
|
mySSH.command('mkdir -p tmp/ca/', '\$', 5)
|
||||||
|
mySSH.command('mkdir -p tmp/entitlement/', '\$', 5)
|
||||||
|
mySSH.command('sudo cp /etc/rhsm/ca/redhat-uep.pem tmp/ca/', '\$', 5)
|
||||||
|
mySSH.command('sudo cp /etc/pki/entitlement/*.pem tmp/entitlement/', '\$', 5)
|
||||||
|
|
||||||
|
#mySSH.close()
|
||||||
|
#return 0
|
||||||
|
sharedimage = 'ran-build'
|
||||||
|
# Let's remove any previous run artifacts if still there
|
||||||
|
mySSH.command(self.cli + ' image prune --force', '\$', 5)
|
||||||
|
mySSH.command(self.cli + ' image rm ' + sharedimage + ':' + imageTag, '\$', 5)
|
||||||
|
for image,pattern in imageNames:
|
||||||
|
mySSH.command(self.cli + ' image rm ' + image + ':' + imageTag, '\$', 5)
|
||||||
|
# Build the shared image
|
||||||
|
mySSH.command(self.cli + ' build --target ' + sharedimage + ' --tag ' + sharedimage + ':' + imageTag + ' --file docker/Dockerfile.ran' + self.dockerfileprefix + ' --build-arg NEEDED_GIT_PROXY="http://proxy.eurecom.fr:8080" . > cmake_targets/log/ran-build.log 2>&1', '\$', 1600)
|
||||||
|
# Build the target image(s)
|
||||||
|
previousImage = sharedimage + ':' + 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#' + sharedimage + ':latest#' + sharedimage + ':' + imageTag + '#" docker/Dockerfile.' + pattern + self.dockerfileprefix, '\$', 5)
|
||||||
|
mySSH.command(self.cli + ' build --target ' + image + ' --tag ' + image + ':' + imageTag + ' --file docker/Dockerfile.' + pattern + self.dockerfileprefix + ' . > cmake_targets/log/' + image + '.log 2>&1', '\$', 1200)
|
||||||
|
# Retrieving the dangling image(s) for the log collection
|
||||||
|
mySSH.command(self.cli + ' 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(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' ' + sharedimage + ':' + 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')
|
||||||
|
self.allImagesSize['ran-build'] = str(round(imageSize,1)) + ' kbytes'
|
||||||
|
else:
|
||||||
|
imageSize = imageSize / 1000
|
||||||
|
if imageSize < 1000:
|
||||||
|
logging.debug('\u001B[1m ran-build size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
|
||||||
|
self.allImagesSize['ran-build'] = str(round(imageSize,1)) + ' Mbytes'
|
||||||
|
else:
|
||||||
|
imageSize = imageSize / 1000
|
||||||
|
logging.debug('\u001B[1m ran-build size is ' + ('%.3f' % imageSize) + ' Gbytes\u001B[0m')
|
||||||
|
self.allImagesSize['ran-build'] = str(round(imageSize,1)) + ' Gbytes'
|
||||||
|
else:
|
||||||
|
logging.debug('ran-build size is unknown')
|
||||||
|
for image,pattern in imageNames:
|
||||||
|
mySSH.command(self.cli + ' 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')
|
||||||
|
self.allImagesSize[image] = str(round(imageSize,1)) + ' kbytes'
|
||||||
|
else:
|
||||||
|
imageSize = imageSize / 1000
|
||||||
|
if imageSize < 1000:
|
||||||
|
logging.debug('\u001B[1m ' + image + ' size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
|
||||||
|
self.allImagesSize[image] = str(round(imageSize,1)) + ' Mbytes'
|
||||||
|
else:
|
||||||
|
imageSize = imageSize / 1000
|
||||||
|
logging.debug('\u001B[1m ' + image + ' size is ' + ('%.3f' % imageSize) + ' Gbytes\u001B[0m')
|
||||||
|
self.allImagesSize[image] = str(round(imageSize,1)) + ' Gbytes'
|
||||||
|
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.CreateHtmlNextTabHeaderTestRow(self.collectInfo, self.allImagesSize)
|
||||||
|
HTML.CreateHtmlTabFooter(False)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Recover build logs, for the moment only possible when build is successful
|
||||||
|
mySSH.command(self.cli + ' create --name test ' + sharedimage + ':' + imageTag, '\$', 5)
|
||||||
|
mySSH.command('mkdir -p cmake_targets/log/ran-build', '\$', 5)
|
||||||
|
mySSH.command(self.cli + ' cp test:/oai-ran/cmake_targets/log/. cmake_targets/log/ran-build', '\$', 5)
|
||||||
|
mySSH.command(self.cli + ' rm -f test', '\$', 5)
|
||||||
|
for image,shaone in danglingShaOnes:
|
||||||
|
mySSH.command('mkdir -p cmake_targets/log/' + image, '\$', 5)
|
||||||
|
mySSH.command(self.cli + ' create --name test ' + shaone, '\$', 5)
|
||||||
|
mySSH.command(self.cli + ' cp test:/oai-ran/cmake_targets/log/. cmake_targets/log/' + image, '\$', 5)
|
||||||
|
mySSH.command(self.cli + ' rm -f test', '\$', 5)
|
||||||
|
mySSH.command(self.cli + ' 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()
|
||||||
|
|
||||||
|
mySSH.command('cd /tmp/CI-eNB/cmake_targets', '\$', 5)
|
||||||
|
if (os.path.isfile('./build_log_' + self.testCase_id + '.zip')):
|
||||||
|
os.remove('./build_log_' + self.testCase_id + '.zip')
|
||||||
|
mySSH.command('zip -r -qq build_log_' + self.testCase_id + '.zip build_log_' + self.testCase_id, '\$', 5)
|
||||||
|
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/build_log_' + self.testCase_id + '.zip', '.')
|
||||||
|
#mySSH.command('rm -f build_log_' + self.testCase_id + '.zip','\$', 5)
|
||||||
|
mySSH.close()
|
||||||
|
ZipFile('build_log_' + self.testCase_id + '.zip').extractall('.')
|
||||||
|
|
||||||
|
#Trying to identify the errors and warnings for each built images
|
||||||
|
imageNames1 = imageNames
|
||||||
|
shared = ('ran-build','ran')
|
||||||
|
imageNames1.insert(0, shared)
|
||||||
|
for image,pattern in imageNames1:
|
||||||
|
files = {}
|
||||||
|
file_list = [f for f in os.listdir('build_log_' + self.testCase_id + '/' + image) if os.path.isfile(os.path.join('build_log_' + self.testCase_id + '/' + image, f)) and f.endswith('.txt')]
|
||||||
|
for fil in file_list:
|
||||||
|
errorandwarnings = {}
|
||||||
|
warningsNo = 0
|
||||||
|
errorsNo = 0
|
||||||
|
with open('build_log_{}/{}/{}'.format(self.testCase_id,image,fil), mode='r') as inputfile:
|
||||||
|
for line in inputfile:
|
||||||
|
result = re.search(' ERROR ', str(line))
|
||||||
|
if result is not None:
|
||||||
|
errorsNo += 1
|
||||||
|
result = re.search(' error:', str(line))
|
||||||
|
if result is not None:
|
||||||
|
errorsNo += 1
|
||||||
|
result = re.search(' WARNING ', str(line))
|
||||||
|
if result is not None:
|
||||||
|
warningsNo += 1
|
||||||
|
result = re.search(' warning:', str(line))
|
||||||
|
if result is not None:
|
||||||
|
warningsNo += 1
|
||||||
|
errorandwarnings['errors'] = errorsNo
|
||||||
|
errorandwarnings['warnings'] = warningsNo
|
||||||
|
errorandwarnings['status'] = status
|
||||||
|
files[fil] = errorandwarnings
|
||||||
|
self.collectInfo[image] = files
|
||||||
|
|
||||||
|
logging.info('\u001B[1m Building OAI Image(s) Pass\u001B[0m')
|
||||||
|
HTML.CreateHtmlTestRow(self.imageKind, 'OK', CONST.ALL_PROCESSES_OK)
|
||||||
|
HTML.CreateHtmlNextTabHeaderTestRow(self.collectInfo, self.allImagesSize)
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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";
|
||||||
}
|
}
|
||||||
@@ -238,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";
|
||||||
}
|
}
|
||||||
@@ -447,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";
|
||||||
|
|||||||
@@ -177,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";
|
||||||
}
|
}
|
||||||
@@ -250,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";
|
||||||
|
|||||||
@@ -178,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";
|
||||||
}
|
}
|
||||||
@@ -394,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";
|
||||||
}
|
}
|
||||||
@@ -227,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";
|
||||||
}
|
}
|
||||||
@@ -227,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";
|
||||||
}
|
}
|
||||||
@@ -227,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";
|
||||||
}
|
}
|
||||||
@@ -225,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";
|
||||||
}
|
}
|
||||||
@@ -246,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";
|
||||||
}
|
}
|
||||||
@@ -255,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";
|
||||||
}
|
}
|
||||||
@@ -203,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";
|
||||||
@@ -249,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";
|
||||||
}
|
}
|
||||||
@@ -254,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";
|
||||||
|
|||||||
Executable → Regular
+2
-1
@@ -183,6 +183,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";
|
||||||
}
|
}
|
||||||
@@ -265,7 +266,7 @@ RUs = (
|
|||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 118;
|
max_rxgain = 118;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
clock_src = "external";
|
# clock_src = "external";
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -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";
|
||||||
}
|
}
|
||||||
@@ -248,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";
|
||||||
}
|
}
|
||||||
@@ -243,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;
|
||||||
@@ -74,7 +74,7 @@ gNBs =
|
|||||||
|
|
||||||
initialDLBWPk0_3 = 0;
|
initialDLBWPk0_3 = 0;
|
||||||
initialDLBWPmappingType_3 = 0;
|
initialDLBWPmappingType_3 = 0;
|
||||||
#this is SS=1,L=4
|
#this is SS=1,L=5
|
||||||
initialDLBWPstartSymbolAndLength_3 = 57;
|
initialDLBWPstartSymbolAndLength_3 = 57;
|
||||||
|
|
||||||
#uplinkConfigCommon
|
#uplinkConfigCommon
|
||||||
@@ -89,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;
|
||||||
@@ -126,17 +126,17 @@ gNBs =
|
|||||||
# 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 = 6;
|
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 = 6;
|
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;
|
||||||
@@ -145,7 +145,7 @@ gNBs =
|
|||||||
initialULBWPmappingType_2 = 1;
|
initialULBWPmappingType_2 = 1;
|
||||||
# this is SS=10 L=4
|
# this is SS=10 L=4
|
||||||
initialULBWPstartSymbolAndLength_2 = 52;
|
initialULBWPstartSymbolAndLength_2 = 52;
|
||||||
|
|
||||||
msg3_DeltaPreamble = 1;
|
msg3_DeltaPreamble = 1;
|
||||||
p0_NominalWithGrant =-90;
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
@@ -204,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";
|
||||||
}
|
}
|
||||||
@@ -249,7 +250,7 @@ RUs = (
|
|||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
#beamforming 1x4 matrix:
|
#beamforming 1x4 matrix:
|
||||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||||
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
|
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";
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
Executable → Regular
+11
-2
@@ -2,6 +2,7 @@ Active_gNBs = ( "gNB-Eurecom-5GNRBox");
|
|||||||
# Asn1_verbosity, choice in: none, info, annoying
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
Asn1_verbosity = "none";
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
|
||||||
gNBs =
|
gNBs =
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
@@ -21,7 +22,10 @@ gNBs =
|
|||||||
|
|
||||||
ssb_SubcarrierOffset = 31; //0;
|
ssb_SubcarrierOffset = 31; //0;
|
||||||
pdsch_AntennaPorts = 1;
|
pdsch_AntennaPorts = 1;
|
||||||
|
pusch_TargetSNRx10 = 200;
|
||||||
|
pucch_TargetSNRx10 = 200;
|
||||||
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
#spCellConfigCommon
|
#spCellConfigCommon
|
||||||
@@ -201,6 +205,7 @@ gNBs =
|
|||||||
////////// 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";
|
||||||
}
|
}
|
||||||
@@ -245,6 +250,7 @@ L1s = (
|
|||||||
{
|
{
|
||||||
num_cc = 1;
|
num_cc = 1;
|
||||||
tr_n_preference = "local_mac";
|
tr_n_preference = "local_mac";
|
||||||
|
pusch_proc_threads = 8;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -259,7 +265,7 @@ RUs = (
|
|||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 114;
|
max_rxgain = 114;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
clock_src = "external";
|
# clock_src = "external";
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -291,3 +297,6 @@ THREAD_STRUCT = (
|
|||||||
rrc_log_verbosity ="medium";
|
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";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
}
|
}
|
||||||
@@ -234,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";
|
||||||
}
|
}
|
||||||
@@ -234,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";
|
||||||
}
|
}
|
||||||
@@ -234,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";
|
||||||
}
|
}
|
||||||
@@ -253,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";
|
||||||
}
|
}
|
||||||
@@ -253,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";
|
||||||
}
|
}
|
||||||
@@ -253,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";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ 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_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
|
||||||
|
|||||||
@@ -84,6 +84,12 @@ nullPointer:common/utils/T/tracer/multi.c:265
|
|||||||
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
|
// cppcheck does not understand the different lengths of arrays
|
||||||
arrayIndexOutOfBounds:openair1/SIMULATION/TOOLS/random_channel.c:705
|
arrayIndexOutOfBounds:openair1/SIMULATION/TOOLS/random_channel.c:705
|
||||||
arrayIndexOutOfBounds:openair1/SIMULATION/TOOLS/random_channel.c:706
|
arrayIndexOutOfBounds:openair1/SIMULATION/TOOLS/random_channel.c:706
|
||||||
|
|||||||
+204
-38
@@ -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,17 +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 = ''
|
||||||
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# 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)
|
||||||
@@ -113,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)
|
||||||
@@ -127,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)
|
||||||
@@ -152,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
|
||||||
@@ -174,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)
|
||||||
@@ -211,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):
|
||||||
@@ -244,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):
|
||||||
@@ -271,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())
|
||||||
@@ -296,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):
|
||||||
@@ -329,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):
|
||||||
@@ -356,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):
|
||||||
@@ -400,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()
|
||||||
@@ -409,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)
|
||||||
@@ -431,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)
|
||||||
@@ -450,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)
|
||||||
|
|||||||
+64
-3
@@ -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 = ''
|
||||||
|
|
||||||
@@ -214,7 +218,7 @@ class HTMLManagement():
|
|||||||
self.htmlFile.write(' <div id="build-tab" class="tab-pane fade">\n')
|
self.htmlFile.write(' <div id="build-tab" class="tab-pane fade">\n')
|
||||||
self.htmlFile.write(' <table class="table" border = "1">\n')
|
self.htmlFile.write(' <table class="table" border = "1">\n')
|
||||||
self.htmlFile.write(' <tr bgcolor = "#33CCFF" >\n')
|
self.htmlFile.write(' <tr bgcolor = "#33CCFF" >\n')
|
||||||
self.htmlFile.write(' <th>Relative Time (ms)</th>\n')
|
self.htmlFile.write(' <th>Relative Time (s)</th>\n')
|
||||||
self.htmlFile.write(' <th>Test Id</th>\n')
|
self.htmlFile.write(' <th>Test Id</th>\n')
|
||||||
self.htmlFile.write(' <th>Test Desc</th>\n')
|
self.htmlFile.write(' <th>Test Desc</th>\n')
|
||||||
self.htmlFile.write(' <th>Test Options</th>\n')
|
self.htmlFile.write(' <th>Test Options</th>\n')
|
||||||
@@ -230,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')
|
||||||
@@ -246,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
|
||||||
|
|
||||||
@@ -385,6 +399,53 @@ class HTMLManagement():
|
|||||||
self.htmlFile.write(' </tr>\n')
|
self.htmlFile.write(' </tr>\n')
|
||||||
self.htmlFile.close()
|
self.htmlFile.close()
|
||||||
|
|
||||||
|
|
||||||
|
def CreateHtmlNextTabHeaderTestRow(self, collectInfo, allImagesSize, machine='eNB'):
|
||||||
|
if (self.htmlFooterCreated or (not self.htmlHeaderCreated)):
|
||||||
|
return
|
||||||
|
self.htmlFile = open('test_results.html', 'a')
|
||||||
|
if bool(collectInfo) == False:
|
||||||
|
self.htmlFile.write(' <tr bgcolor = "red" >\n')
|
||||||
|
self.htmlFile.write(' <td colspan=' + str(5+self.htmlUEConnected) + '><b> ----IMAGES BUILDING FAILED - Unable to recover the image logs ---- </b></td>\n')
|
||||||
|
self.htmlFile.write(' </tr>\n')
|
||||||
|
else:
|
||||||
|
for image in collectInfo:
|
||||||
|
files = collectInfo[image]
|
||||||
|
# TabHeader for image logs on built shared and target images
|
||||||
|
self.htmlFile.write(' <tr bgcolor = "#F0F0F0" >\n')
|
||||||
|
self.htmlFile.write(' <td colspan=' + str(5+self.htmlUEConnected) + '><b> ---- ' + image + ' IMAGE STATUS ----> Size ' + allImagesSize[image] + ' </b></td>\n')
|
||||||
|
self.htmlFile.write(' </tr>\n')
|
||||||
|
self.htmlFile.write(' <tr bgcolor = "#33CCFF" >\n')
|
||||||
|
self.htmlFile.write(' <th colspan="2">Element</th>\n')
|
||||||
|
self.htmlFile.write(' <th>Nb Errors</th>\n')
|
||||||
|
self.htmlFile.write(' <th>Nb Warnings</th>\n')
|
||||||
|
self.htmlFile.write(' <th colspan=' + str(1+self.htmlUEConnected) + '>Status</th>\n')
|
||||||
|
self.htmlFile.write(' </tr>\n')
|
||||||
|
|
||||||
|
for fil in files:
|
||||||
|
parameters = files[fil]
|
||||||
|
# TestRow for image logs on built shared and target images
|
||||||
|
self.htmlFile.write(' <tr>\n')
|
||||||
|
self.htmlFile.write(' <td colspan="2" bgcolor = "lightcyan" >' + fil + ' </td>\n')
|
||||||
|
if (parameters['errors'] == 0):
|
||||||
|
self.htmlFile.write(' <td bgcolor = "green" >' + str(parameters['errors']) + '</td>\n')
|
||||||
|
else:
|
||||||
|
self.htmlFile.write(' <td bgcolor = "red" >' + str(parameters['errors']) + '</td>\n')
|
||||||
|
if (parameters['warnings'] == 0):
|
||||||
|
self.htmlFile.write(' <td bgcolor = "green" >' + str(parameters['warnings']) + '</td>\n')
|
||||||
|
elif ((parameters['warnings'] > 0) and (parameters['warnings'] <= 20)):
|
||||||
|
self.htmlFile.write(' <td bgcolor = "orange" >' + str(parameters['warnings']) + '</td>\n')
|
||||||
|
else:
|
||||||
|
self.htmlFile.write(' <td bgcolor = "red" >' + str(parameters['warnings']) + '</td>\n')
|
||||||
|
if (parameters['errors'] == 0) and (parameters['warnings'] == 0):
|
||||||
|
self.htmlFile.write(' <th colspan=' + str(1+self.htmlUEConnected) + ' bgcolor = "green" ><font color="white">OK </font></th>\n')
|
||||||
|
elif (parameters['errors'] == 0) and ((parameters['warnings'] > 0) and (parameters['warnings'] <= 20)):
|
||||||
|
self.htmlFile.write(' <th colspan=' + str(1+self.htmlUEConnected) + ' bgcolor = "orange" ><font color="white">OK </font></th>\n')
|
||||||
|
else:
|
||||||
|
self.htmlFile.write(' <th colspan=' + str(1+self.htmlUEConnected) + ' bgcolor = "red" > NOT OK </th>\n')
|
||||||
|
self.htmlFile.write(' </tr>\n')
|
||||||
|
self.htmlFile.close()
|
||||||
|
|
||||||
def CreateHtmlTestRowQueue(self, options, status, ue_status, ue_queue):
|
def CreateHtmlTestRowQueue(self, options, status, ue_status, ue_queue):
|
||||||
if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
|
if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
|
||||||
self.htmlFile = open('test_results.html', 'a')
|
self.htmlFile = open('test_results.html', 'a')
|
||||||
|
|||||||
+148
-3131
File diff suppressed because it is too large
Load Diff
+131
-87
@@ -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,19 +75,20 @@ 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.imageKind = ''
|
||||||
self.air_interface = ['', '', ''] #changed from 'lte' to '' may lead to side effects in main
|
self.air_interface = ['', '', ''] #changed from 'lte' to '' may lead to side effects in main
|
||||||
self.eNB_instance = 0
|
self.eNB_instance = 0
|
||||||
self.eNB_serverId = ''
|
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.epcObj = None
|
|
||||||
self.runtime_stats= ''
|
self.runtime_stats= ''
|
||||||
|
|
||||||
|
|
||||||
@@ -98,21 +97,21 @@ class RANManagement():
|
|||||||
# 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
|
||||||
@@ -120,6 +119,7 @@ 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)
|
||||||
|
|
||||||
@@ -133,14 +133,11 @@ class RANManagement():
|
|||||||
self.air_interface[self.eNB_instance] = 'nr-softmodem'
|
self.air_interface[self.eNB_instance] = 'nr-softmodem'
|
||||||
else:
|
else:
|
||||||
self.air_interface[self.eNB_instance] = 'lte-softmodem'
|
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.testCase_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:
|
||||||
@@ -181,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)
|
||||||
@@ -209,26 +205,25 @@ class RANManagement():
|
|||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S ls', '\$', 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.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
|
||||||
@@ -236,6 +231,7 @@ 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
|
||||||
@@ -249,11 +245,10 @@ 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):
|
def checkBuildeNB(self, lIpAddr, lUserName, lPassWord, lSourcePath, testcaseId, HTML):
|
||||||
if self.htmlObj is not None:
|
HTML.testCase_id=testcaseId
|
||||||
self.htmlObj.testCase_id=testcaseId
|
|
||||||
|
|
||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
@@ -284,7 +279,7 @@ class RANManagement():
|
|||||||
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)
|
||||||
@@ -307,27 +302,25 @@ class RANManagement():
|
|||||||
#generate logging info depending on buildStatus and air interface
|
#generate logging info depending on buildStatus and air interface
|
||||||
if buildStatus:
|
if buildStatus:
|
||||||
logging.info('\u001B[1m Building OAI ' + self.air_interface[self.eNB_instance] + ' 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 ' + self.air_interface[self.eNB_instance] + ' 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
|
||||||
@@ -335,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.testCase_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.air_interface[self.eNB_instance] + ' ' + 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.IPAddress
|
localEpcIpAddr = EPC.IPAddress
|
||||||
localEpcUserName = self.epcObj.UserName
|
localEpcUserName = EPC.UserName
|
||||||
localEpcPassword = self.epcObj.Password
|
localEpcPassword = EPC.Password
|
||||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
||||||
mySSH.command('ip addr show | awk -f /tmp/active_net_interfaces.awk | egrep -v "lo|tun"', '\$', 5)
|
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())
|
||||||
@@ -400,17 +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.MmeIPAddress
|
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_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);
|
||||||
mySSH.command('sed -i -e \'s/CI_FR1_CTL_ENB_IP_ADDR/' + self.eNBIPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
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:
|
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
|
||||||
@@ -427,7 +417,7 @@ 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)
|
||||||
if self.air_interface == 'nr':
|
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 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)
|
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)
|
# NOTE: WE SHALL do a check if the executable is present (in case build went wrong)
|
||||||
@@ -452,14 +442,13 @@ class RANManagement():
|
|||||||
mySSH.close()
|
mySSH.close()
|
||||||
doLoop = False
|
doLoop = False
|
||||||
logging.error('\u001B[1;37;41m eNB/gNB/ocp-eNB logging system did not show got sync! \u001B[0m')
|
logging.error('\u001B[1;37;41m eNB/gNB/ocp-eNB logging system did not show got sync! \u001B[0m')
|
||||||
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(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'KO', CONST.ALL_PROCESSES_OK)
|
|
||||||
# In case of T tracer recording, we need to kill tshark on EPC side
|
# In case of T tracer recording, we need to kill tshark on EPC side
|
||||||
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
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.IPAddress
|
localEpcIpAddr = EPC.IPAddress
|
||||||
localEpcUserName = self.epcObj.UserName
|
localEpcUserName = EPC.UserName
|
||||||
localEpcPassword = self.epcObj.Password
|
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)
|
||||||
@@ -507,11 +496,10 @@ 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(self.air_interface[self.eNB_instance] + ' -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/gNB/ocp-eNB Completed\u001B[0m')
|
||||||
|
|
||||||
def CheckeNBProcess(self, status_queue):
|
def CheckeNBProcess(self, status_queue):
|
||||||
@@ -546,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
|
||||||
@@ -565,6 +553,7 @@ 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)
|
||||||
@@ -586,10 +575,10 @@ class RANManagement():
|
|||||||
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.IPAddress
|
localEpcIpAddr = EPC.IPAddress
|
||||||
localEpcUserName = self.epcObj.UserName
|
localEpcUserName = EPC.UserName
|
||||||
localEpcPassword = self.epcObj.Password
|
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)
|
||||||
@@ -613,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(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
self.eNBLogFiles[int(self.eNB_instance)] = ''
|
self.eNBLogFiles[int(self.eNB_instance)] = ''
|
||||||
else:
|
else:
|
||||||
analyzeFile = False
|
analyzeFile = False
|
||||||
@@ -627,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.htmleNBFailureMsg='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(self.runtime_stats, '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(self.runtime_stats, '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
|
||||||
|
|
||||||
@@ -661,7 +645,7 @@ class RANManagement():
|
|||||||
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')
|
||||||
@@ -705,6 +689,15 @@ class RANManagement():
|
|||||||
systemTime = ''
|
systemTime = ''
|
||||||
maxPhyMemUsage = ''
|
maxPhyMemUsage = ''
|
||||||
nbContextSwitches = ''
|
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
|
# Runtime statistics
|
||||||
result = re.search('Run time:' ,str(line))
|
result = re.search('Run time:' ,str(line))
|
||||||
@@ -855,12 +848,36 @@ 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[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb'):
|
if (self.air_interface[self.eNB_instance] == 'lte-softmodem') or (self.air_interface[self.eNB_instance] == 'ocp-enb'):
|
||||||
nodeB_prefix = 'e'
|
nodeB_prefix = 'e'
|
||||||
else:
|
else:
|
||||||
nodeB_prefix = 'g'
|
nodeB_prefix = 'g'
|
||||||
|
|
||||||
if self.air_interface[self.eNB_instance] == 'nr-softmodem':
|
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)'
|
||||||
@@ -874,6 +891,34 @@ class RANManagement():
|
|||||||
statMsg = nodeB_prefix + 'NB ran with TX Write thread enabled'
|
statMsg = nodeB_prefix + 'NB ran with TX Write thread enabled'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
htmleNBFailureMsg += statMsg + '\n'
|
htmleNBFailureMsg += statMsg + '\n'
|
||||||
|
#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')
|
||||||
@@ -981,8 +1026,7 @@ class RANManagement():
|
|||||||
logging.debug('\u001B[1;37;41m ' + rlcMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;37;41m ' + rlcMsg + ' \u001B[0m')
|
||||||
htmleNBFailureMsg += rlcMsg + '\n'
|
htmleNBFailureMsg += rlcMsg + '\n'
|
||||||
global_status = CONST.ENB_PROCESS_REALTIME_ISSUE
|
global_status = CONST.ENB_PROCESS_REALTIME_ISSUE
|
||||||
if self.htmlObj is not None:
|
HTML.htmleNBFailureMsg=htmleNBFailureMsg
|
||||||
self.htmlObj.htmleNBFailureMsg=htmleNBFailureMsg
|
|
||||||
# Runtime statistics for console output and HTML
|
# Runtime statistics for console output and HTML
|
||||||
if runTime != '':
|
if runTime != '':
|
||||||
logging.debug(runTime)
|
logging.debug(runTime)
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -769,8 +769,8 @@ function report_test {
|
|||||||
#RA test (--do-ra option)
|
#RA test (--do-ra option)
|
||||||
|
|
||||||
#build log files names
|
#build log files names
|
||||||
RA_ENB_LOG=$ARCHIVES_LOC/ra_check_${TMODE}_${BW}prb_${CN_CONFIG}_gnb.log
|
RA_ENB_LOG=$ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_gnb_ra_test.log
|
||||||
RA_UE_LOG=$ARCHIVES_LOC/ra_check_${TMODE}_${BW}prb_${CN_CONFIG}_ue.log
|
RA_UE_LOG=$ARCHIVES_LOC/${TMODE}_${BW}prb_${CN_CONFIG}_ue_ra_test.log
|
||||||
if [ -f $RA_ENB_LOG ] && [ -f $RA_UE_LOG ]
|
if [ -f $RA_ENB_LOG ] && [ -f $RA_UE_LOG ]
|
||||||
then
|
then
|
||||||
#get rid of full path
|
#get rid of full path
|
||||||
@@ -781,13 +781,12 @@ function report_test {
|
|||||||
echo " <td>Check if RA proc succeeded</td>" >> ./test_simulator_results.html
|
echo " <td>Check if RA proc succeeded</td>" >> ./test_simulator_results.html
|
||||||
|
|
||||||
#gNB RA check
|
#gNB RA check
|
||||||
GNB_RECEIVED=`egrep -c "received correctly" $RA_ENB_LOG`
|
GNB_RECEIVED=`egrep -c "\[RAPROC\] PUSCH with TC_RNTI (.+) received correctly" $RA_ENB_LOG`
|
||||||
GNB_CONNECTED=`egrep -c "now 5G connected" $RA_ENB_LOG`
|
|
||||||
#UE RA check
|
#UE RA check
|
||||||
UE_RA_PROC_OK=`egrep -c "RA procedure succeeded" $RA_UE_LOG`
|
UE_RA_PROC_OK=`egrep -c "\[RAPROC\] RA procedure succeeded" $RA_UE_LOG`
|
||||||
|
|
||||||
|
|
||||||
if [ $GNB_RECEIVED -gt 0 ] && [ $GNB_CONNECTED -gt 0 ] && [ $UE_RA_PROC_OK -gt 0 ]
|
if [ $GNB_RECEIVED -gt 0 ] && [ $UE_RA_PROC_OK -gt 0 ]
|
||||||
then
|
then
|
||||||
echo " <td bgcolor = \"green\" >OK</td>" >> ./test_simulator_results.html
|
echo " <td bgcolor = \"green\" >OK</td>" >> ./test_simulator_results.html
|
||||||
else
|
else
|
||||||
@@ -801,12 +800,6 @@ function report_test {
|
|||||||
else
|
else
|
||||||
echo "<font color = \"red\"><b>- gNB RA NOT RECEIVED</b></font>" >> ./test_simulator_results.html
|
echo "<font color = \"red\"><b>- gNB RA NOT RECEIVED</b></font>" >> ./test_simulator_results.html
|
||||||
fi
|
fi
|
||||||
if [ $GNB_CONNECTED -gt 0 ]
|
|
||||||
then
|
|
||||||
echo "<font color = \"blue\">- gNB --> 5G connected</font>" >> ./test_simulator_results.html
|
|
||||||
else
|
|
||||||
echo "<font color = \"red\"><b>- gNB NOT 5G CONNECTED</b></font>" >> ./test_simulator_results.html
|
|
||||||
fi
|
|
||||||
if [ $UE_RA_PROC_OK -gt 0 ]
|
if [ $UE_RA_PROC_OK -gt 0 ]
|
||||||
then
|
then
|
||||||
echo "<font color = \"blue\">- NR UE --> RA procedure succeded</font>" >> ./test_simulator_results.html
|
echo "<font color = \"blue\">- NR UE --> RA procedure succeded</font>" >> ./test_simulator_results.html
|
||||||
|
|||||||
+98
-52
@@ -281,14 +281,35 @@ function check_ra_result {
|
|||||||
local LOC_GNB_LOG=$1
|
local LOC_GNB_LOG=$1
|
||||||
local LOC_UE_LOG=$2
|
local LOC_UE_LOG=$2
|
||||||
|
|
||||||
#gNB RA test
|
#if log files exist
|
||||||
echo "Checking gNB Log for RA success"
|
if [ -f $LOC_GNB_LOG ] && [ -f $LOC_UE_LOG ]
|
||||||
egrep "received correctly" $1
|
then
|
||||||
egrep "now 5G connected" $1
|
|
||||||
|
#gNB RA test
|
||||||
#UE RA test
|
#console check
|
||||||
echo 'Checking UE Log for RA success'
|
echo "Checking gNB Log for RA success"
|
||||||
egrep "RA procedure succeeded" $2
|
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
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1199,6 +1220,8 @@ function start_rf_sim_gnb {
|
|||||||
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
|
||||||
@@ -1212,9 +1235,9 @@ function start_rf_sim_gnb {
|
|||||||
then
|
then
|
||||||
if [ $LOC_RA_TEST -eq 0 ] #no RA test => use --phy-test option
|
if [ $LOC_RA_TEST -eq 0 ] #no RA test => use --phy-test option
|
||||||
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
|
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
|
else #RA test => use --do-ra option
|
||||||
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 --do-ra\" > ./my-nr-softmodem-run.sh " >> $1
|
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
|
fi
|
||||||
echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
|
echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
|
||||||
@@ -1225,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 ]
|
||||||
@@ -1247,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
|
||||||
@@ -1301,6 +1327,8 @@ function start_rf_sim_nr_ue {
|
|||||||
|
|
||||||
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 cp /home/ubuntu/tmp/r*config.raw /home/ubuntu/tmp/cmake_targets/ran_build/build/" >> $1
|
||||||
@@ -1310,9 +1338,9 @@ function start_rf_sim_nr_ue {
|
|||||||
then
|
then
|
||||||
if [ $LOC_RA_TEST -eq 0 ] #no RA test => use --phy-test option
|
if [ $LOC_RA_TEST -eq 0 ] #no RA test => use --phy-test option
|
||||||
then
|
then
|
||||||
echo "echo \"RFSIMULATOR=${LOC_GNB_VM_IP_ADDR} ./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
|
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
|
else #RA test => use --do-ra option
|
||||||
echo "echo \"RFSIMULATOR=${LOC_GNB_VM_IP_ADDR} ./nr-uesoftmodem --nokrnmod 1 --rfsim --do-ra --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
|
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
|
fi
|
||||||
echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
|
echo "chmod 775 ./my-nr-softmodem-run.sh" >> $1
|
||||||
@@ -1346,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 ]
|
||||||
@@ -1359,21 +1389,20 @@ function start_rf_sim_nr_ue {
|
|||||||
else
|
else
|
||||||
i=$[$i+1]
|
i=$[$i+1]
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
echo "echo \"free -m\"" > $1
|
echo "echo \"free -m\"" > $1
|
||||||
echo "free -m" >> $1
|
echo "free -m" >> $1
|
||||||
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_NR_UE_VM_IP_ADDR < $1
|
ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_NR_UE_VM_IP_ADDR < $1
|
||||||
rm $1
|
rm $1
|
||||||
if [ $i -lt 50 ]
|
if [ $i -lt 50 ]
|
||||||
then
|
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
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2166,29 +2195,33 @@ 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 4 ]
|
while [ $try_cnt -lt 5 ] #5 because it hardly succeed within CI
|
||||||
do
|
do
|
||||||
|
|
||||||
#start RA test
|
|
||||||
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
|
||||||
#last argument = 1 is to enable --do-ra for RA test
|
#last argument = 1 is to enable --do-ra for RA test
|
||||||
start_rf_sim_gnb $GNB_VM_CMDS "$GNB_VM_IP_ADDR" $CURRENT_GNB_LOG_FILE $PRB $CONF_FILE $S1_NOS1_CFG 1
|
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
|
||||||
#last argument = 1 is to enable --do-ra for RA test
|
#last argument = 1 is to enable --do-ra for RA test
|
||||||
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1
|
start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1
|
||||||
if [ $NR_UE_SYNC -eq 0 ]
|
if [ $NR_UE_SYNC -eq 0 ]
|
||||||
@@ -2199,11 +2232,10 @@ function run_test_on_vm {
|
|||||||
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@$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
|
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
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
echo "${CN_CONFIG} : Terminate gNB/NR-UE simulators"
|
echo "${CN_CONFIG} : Terminate gNB/NR-UE simulators"
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
@@ -2213,26 +2245,39 @@ function run_test_on_vm {
|
|||||||
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@$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
|
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
|
#check RA markers in gNB and NR UE log files
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
echo "${CN_CONFIG} : Checking RA on gNB / NR-UE"
|
echo "${CN_CONFIG} : Checking RA on gNB / NR-UE"
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
|
|
||||||
mv $ARCHIVES_LOC/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC/ra_check_$CURRENT_GNB_LOG_FILE
|
# Proper check to be done when RA test is working!
|
||||||
mv $ARCHIVES_LOC/$CURRENT_NR_UE_LOG_FILE $ARCHIVES_LOC/ra_check_$CURRENT_NR_UE_LOG_FILE
|
check_ra_result $ARCHIVES_LOC/$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC/$CURRENT_NR_UE_LOG_FILE
|
||||||
check_ra_result $ARCHIVES_LOC/ra_check_$CURRENT_GNB_LOG_FILE $ARCHIVES_LOC/ra_check_$CURRENT_NR_UE_LOG_FILE
|
if [ $RA_STATUS -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "RA test NOT OK"
|
||||||
#end RA test
|
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
|
SYNC_STATUS=0
|
||||||
PING_STATUS=0
|
PING_STATUS=0
|
||||||
IPERF_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 "############################################################"
|
||||||
echo "${CN_CONFIG} : Starting the gNB"
|
echo "${CN_CONFIG} : Starting the gNB"
|
||||||
@@ -2253,7 +2298,7 @@ function run_test_on_vm {
|
|||||||
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@$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
|
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
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -2293,7 +2338,7 @@ function run_test_on_vm {
|
|||||||
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@$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
|
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]
|
try_cnt=$((try_cnt+1))
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -2319,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
|
||||||
@@ -2332,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
|
||||||
|
|||||||
@@ -52,13 +52,11 @@ class SSHConnection():
|
|||||||
self.picocom_closure = True
|
self.picocom_closure = True
|
||||||
|
|
||||||
def open(self, ipaddress, username, password):
|
def open(self, ipaddress, username, password):
|
||||||
extraSshOptions = ''
|
|
||||||
count = 0
|
count = 0
|
||||||
connect_status = False
|
connect_status = False
|
||||||
if ipaddress == '192.168.18.197':
|
|
||||||
extraSshOptions = ' -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
|
|
||||||
while count < 4:
|
while count < 4:
|
||||||
self.ssh = pexpect.spawn('ssh', [username + '@' + ipaddress + extraSshOptions], timeout = 5)
|
self.ssh = pexpect.spawn('ssh -o PubkeyAuthentication=no {}@{}'.format(username,ipaddress))
|
||||||
|
self.ssh.timeout = 5
|
||||||
self.sshresponse = self.ssh.expect(['Are you sure you want to continue connecting (yes/no)?', 'password:', 'Last login', pexpect.EOF, pexpect.TIMEOUT])
|
self.sshresponse = self.ssh.expect(['Are you sure you want to continue connecting (yes/no)?', 'password:', 'Last login', pexpect.EOF, pexpect.TIMEOUT])
|
||||||
if self.sshresponse == 0:
|
if self.sshresponse == 0:
|
||||||
self.ssh.sendline('yes')
|
self.ssh.sendline('yes')
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
- Reboot_UE
|
- Reboot_UE
|
||||||
- Initialize_FlexranCtrl
|
- Initialize_FlexranCtrl
|
||||||
- Terminate_FlexranCtrl
|
- Terminate_FlexranCtrl
|
||||||
|
- Deploy_EPC
|
||||||
|
- Undeploy_EPC
|
||||||
- Initialize_HSS
|
- Initialize_HSS
|
||||||
- Terminate_HSS
|
- Terminate_HSS
|
||||||
- Initialize_MME
|
- Initialize_MME
|
||||||
@@ -32,3 +34,6 @@
|
|||||||
- Ping_CatM_module
|
- Ping_CatM_module
|
||||||
- IdleSleep
|
- IdleSleep
|
||||||
- Perform_X2_Handover
|
- Perform_X2_Handover
|
||||||
|
- Build_Image
|
||||||
|
- Deploy_Object
|
||||||
|
- Undeploy_Object
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,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>
|
||||||
|
|
||||||
+24
-8
@@ -31,10 +31,14 @@
|
|||||||
010001
|
010001
|
||||||
000001
|
000001
|
||||||
050000
|
050000
|
||||||
050001
|
000001
|
||||||
|
060000
|
||||||
|
060001
|
||||||
|
000001
|
||||||
|
010002
|
||||||
|
000001
|
||||||
070001
|
070001
|
||||||
070000
|
070000
|
||||||
010002
|
|
||||||
010003
|
010003
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
@@ -89,14 +93,24 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
<ping_args>-c 20</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
<ping_packetloss_threshold>50</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="050001">
|
|
||||||
<class>Ping</class>
|
<testCase id="060000">
|
||||||
<desc>Ping: 5pings in 1sec</desc>
|
<class>Iperf</class>
|
||||||
<ping_args>-c 5 -i 0.2</ping_args>
|
<desc>iperf (DL/2.5Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
<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>
|
||||||
|
|
||||||
<testCase id="070000">
|
<testCase id="070000">
|
||||||
@@ -104,6 +118,7 @@
|
|||||||
<desc>Terminate eNB</desc>
|
<desc>Terminate eNB</desc>
|
||||||
<eNB_instance>0</eNB_instance>
|
<eNB_instance>0</eNB_instance>
|
||||||
<eNB_serverId>0</eNB_serverId>
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<air_interface>lte</air_interface>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="070001">
|
<testCase id="070001">
|
||||||
@@ -111,6 +126,7 @@
|
|||||||
<desc>Terminate gNB</desc>
|
<desc>Terminate gNB</desc>
|
||||||
<eNB_instance>1</eNB_instance>
|
<eNB_instance>1</eNB_instance>
|
||||||
<eNB_serverId>1</eNB_serverId>
|
<eNB_serverId>1</eNB_serverId>
|
||||||
|
<air_interface>nr</air_interface>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</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" --ue-rxgain 75 --threadoffset 16 --rrc_config_path .</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 50 --rrc_config_path . --dlsch-parallel 4 </Initialize_OAI_UE_args>
|
||||||
<air_interface>NR</air_interface>
|
<air_interface>NR</air_interface>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
<testCase id="090104">
|
<testCase id="090104">
|
||||||
<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" --ue-rxgain 75 --threadoffset 16 --rrc_config_path .</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 --rrc_config_path . --dlsch-parallel 4 </Initialize_OAI_UE_args>
|
||||||
<air_interface>NR</air_interface>
|
<air_interface>NR</air_interface>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
<htmlTabName>Test-10MHz</htmlTabName>
|
<htmlTabName>Test-10MHz</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
<repeatCount>2</repeatCount>
|
<repeatCount>2</repeatCount>
|
||||||
|
<TestUnstable>True</TestUnstable>
|
||||||
|
<TestMinId>040612</TestMinId>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
030201
|
030201
|
||||||
040101
|
040101
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
<htmlTabName>Test-X2-HO-FDD-05MHz-TM1</htmlTabName>
|
<htmlTabName>Test-X2-HO-FDD-05MHz-TM1</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
<repeatCount>2</repeatCount>
|
<repeatCount>2</repeatCount>
|
||||||
|
<TestUnstable>True</TestUnstable>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
030201 030202
|
030201 030202
|
||||||
040101
|
040101
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
enb_mono_fdd:
|
||||||
|
image: oai-enb:latest
|
||||||
|
privileged: true
|
||||||
|
container_name: prod-enb-mono-fdd
|
||||||
|
environment:
|
||||||
|
USE_FDD_MONO: 'yes'
|
||||||
|
USE_B2XX: 'yes'
|
||||||
|
ENB_NAME: eNB-in-docker
|
||||||
|
MCC: '222'
|
||||||
|
MNC: '01'
|
||||||
|
MNC_LENGTH: 2
|
||||||
|
TAC: 1
|
||||||
|
UTRA_BAND_ID: 7
|
||||||
|
DL_FREQUENCY_IN_MHZ: 2680
|
||||||
|
UL_FREQUENCY_OFFSET_IN_MHZ: 120
|
||||||
|
NID_CELL: 10
|
||||||
|
NB_PRB: 25
|
||||||
|
MME_S1C_IP_ADDRESS: CI_MME_IP_ADDR
|
||||||
|
ENB_S1C_IF_NAME: eth0
|
||||||
|
ENB_S1C_IP_ADDRESS: 192.168.61.30
|
||||||
|
ENB_S1U_IF_NAME: eth0
|
||||||
|
ENB_S1U_IP_ADDRESS: 192.168.61.30
|
||||||
|
ENB_X2_IP_ADDRESS: 192.168.61.30
|
||||||
|
FLEXRAN_ENABLED: 'no'
|
||||||
|
FLEXRAN_INTERFACE_NAME: eth0
|
||||||
|
FLEXRAN_IPV4_ADDRESS: CI_FLEXRAN_CTL_IP_ADDR
|
||||||
|
USE_ADDITIONAL_OPTIONS: '--RUs.[0].max_rxgain 115 --RUs.[0].max_pdschReferenceSignalPower -27 --eNBs.[0].component_carriers.[0].pucch_p0_Nominal -96'
|
||||||
|
volumes:
|
||||||
|
- /dev:/dev
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.30
|
||||||
|
healthcheck:
|
||||||
|
# pgrep does NOT work
|
||||||
|
test: /bin/bash -c "ps aux | grep -v grep | grep -c softmodem"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
name: prod-oai-public-net
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 192.168.61.0/26
|
||||||
|
|
||||||
@@ -0,0 +1,203 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
cassandra:
|
||||||
|
image: cassandra:2.1
|
||||||
|
container_name: prod-cassandra
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
ipv4_address: 192.168.68.2
|
||||||
|
environment:
|
||||||
|
CASSANDRA_CLUSTER_NAME: "OAI HSS Cluster"
|
||||||
|
CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "nodetool status"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
db_init:
|
||||||
|
image: cassandra:2.1
|
||||||
|
container_name: prod-db-init
|
||||||
|
depends_on: [cassandra]
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
max_attempts: 10
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
ipv4_address: 192.168.68.4
|
||||||
|
volumes:
|
||||||
|
- ./oai_db.cql:/home/oai_db.cql
|
||||||
|
entrypoint: /bin/bash -c "cqlsh --file /home/oai_db.cql 192.168.68.2 && echo 'OK'"
|
||||||
|
|
||||||
|
oai_hss:
|
||||||
|
image: oai-hss:production
|
||||||
|
container_name: prod-oai-hss
|
||||||
|
privileged: true
|
||||||
|
depends_on: [cassandra]
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
ipv4_address: 192.168.68.3
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.2
|
||||||
|
environment:
|
||||||
|
REALM: openairinterface.org
|
||||||
|
HSS_FQDN: hss.openairinterface.org
|
||||||
|
PREFIX: /openair-hss/etc
|
||||||
|
cassandra_Server_IP: 192.168.68.2
|
||||||
|
OP_KEY: 1006020f0a478bf6b699f15c062e42b3
|
||||||
|
LTE_K: fec86ba6eb707ed08905757b1bb44b8f
|
||||||
|
APN1: oai.ipv4
|
||||||
|
APN2: internet
|
||||||
|
FIRST_IMSI: 222010100001120
|
||||||
|
NB_USERS: 10
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_hss"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_mme:
|
||||||
|
image: oai-mme:production
|
||||||
|
container_name: prod-oai-mme
|
||||||
|
privileged: true
|
||||||
|
depends_on: [oai_hss]
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.3
|
||||||
|
environment:
|
||||||
|
REALM: openairinterface.org
|
||||||
|
PREFIX: /openair-mme/etc
|
||||||
|
INSTANCE: 1
|
||||||
|
PID_DIRECTORY: /var/run
|
||||||
|
HSS_IP_ADDR: 192.168.61.2
|
||||||
|
HSS_HOSTNAME: hss
|
||||||
|
HSS_FQDN: hss.openairinterface.org
|
||||||
|
HSS_REALM: openairinterface.org
|
||||||
|
MCC: '222'
|
||||||
|
MNC: '01'
|
||||||
|
MME_GID: 32768
|
||||||
|
MME_CODE: 3
|
||||||
|
TAC_0: 1
|
||||||
|
TAC_1: 2
|
||||||
|
TAC_2: 3
|
||||||
|
MME_FQDN: mme.openairinterface.org
|
||||||
|
MME_S6A_IP_ADDR: 192.168.61.3
|
||||||
|
MME_INTERFACE_NAME_FOR_S1_MME: eth0
|
||||||
|
MME_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.3
|
||||||
|
MME_INTERFACE_NAME_FOR_S11: eth0
|
||||||
|
MME_IPV4_ADDRESS_FOR_S11: 192.168.61.3
|
||||||
|
MME_INTERFACE_NAME_FOR_S10: lo
|
||||||
|
MME_IPV4_ADDRESS_FOR_S10: 127.0.0.10
|
||||||
|
OUTPUT: CONSOLE
|
||||||
|
SGW_IPV4_ADDRESS_FOR_S11_0: 192.168.61.4
|
||||||
|
PEER_MME_IPV4_ADDRESS_FOR_S10_0: 0.0.0.0
|
||||||
|
PEER_MME_IPV4_ADDRESS_FOR_S10_1: 0.0.0.0
|
||||||
|
MCC_SGW_0: '222'
|
||||||
|
MNC3_SGW_0: '001'
|
||||||
|
TAC_LB_SGW_0: '01'
|
||||||
|
TAC_HB_SGW_0: '00'
|
||||||
|
MCC_MME_0: '222'
|
||||||
|
MNC3_MME_0: '001'
|
||||||
|
TAC_LB_MME_0: '02'
|
||||||
|
TAC_HB_MME_0: '00'
|
||||||
|
MCC_MME_1: '222'
|
||||||
|
MNC3_MME_1: '001'
|
||||||
|
TAC_LB_MME_1: '03'
|
||||||
|
TAC_HB_MME_1: '00'
|
||||||
|
TAC_LB_SGW_TEST_0: '03'
|
||||||
|
TAC_HB_SGW_TEST_0: '00'
|
||||||
|
SGW_IPV4_ADDRESS_FOR_S11_TEST_0: 0.0.0.0
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_mme"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_spgwc:
|
||||||
|
image: oai-spgwc:production
|
||||||
|
privileged: true
|
||||||
|
depends_on: [oai_mme]
|
||||||
|
container_name: prod-oai-spgwc
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.4
|
||||||
|
environment:
|
||||||
|
PID_DIRECTORY: /var/run
|
||||||
|
SGW_INTERFACE_NAME_FOR_S11: eth0
|
||||||
|
SGW_IP_FOR_S5_S8_CP: 127.0.0.11/8
|
||||||
|
PGW_IP_FOR_S5_S8_CP: 127.0.0.12/8
|
||||||
|
PGW_INTERFACE_NAME_FOR_SX: eth0
|
||||||
|
DEFAULT_APN: oai.ipv4
|
||||||
|
DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129
|
||||||
|
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||||
|
UE_IP_ADDRESS_POOL: '12.1.1.2 - 12.1.1.254'
|
||||||
|
PUSH_PROTOCOL_OPTION: 'yes'
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_spgwc"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
oai_spgwu:
|
||||||
|
image: oai-spgwu-tiny:production
|
||||||
|
privileged: true
|
||||||
|
container_name: prod-oai-spgwu-tiny
|
||||||
|
depends_on: [oai_spgwc]
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.5
|
||||||
|
environment:
|
||||||
|
PID_DIRECTORY: /var/run
|
||||||
|
INSTANCE: 1
|
||||||
|
SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP: eth0
|
||||||
|
PGW_INTERFACE_NAME_FOR_SGI: eth0
|
||||||
|
SGW_INTERFACE_NAME_FOR_SX: eth0
|
||||||
|
SPGWC0_IP_ADDRESS: 192.168.61.4
|
||||||
|
NETWORK_UE_IP: '12.1.1.0/24'
|
||||||
|
NETWORK_UE_NAT_OPTION: 'yes'
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep oai_spgwu"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
flexran_rtc:
|
||||||
|
image: flexran-rtc:production
|
||||||
|
privileged: true
|
||||||
|
container_name: prod-flexran-rtc
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.10
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "pgrep rt_controller"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
trf_gen:
|
||||||
|
image: trf-gen:production
|
||||||
|
privileged: true
|
||||||
|
container_name: prod-trf-gen
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.61.11
|
||||||
|
entrypoint: /bin/bash -c "ip route add 12.1.1.0/24 via 192.168.61.5 dev eth0; sleep infinity"
|
||||||
|
healthcheck:
|
||||||
|
test: /bin/bash -c "ping -c 2 192.168.61.5"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
networks:
|
||||||
|
private_net:
|
||||||
|
name: prod-oai-private-net
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 192.168.68.0/26
|
||||||
|
public_net:
|
||||||
|
name: prod-oai-public-net
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 192.168.61.0/26
|
||||||
+450
-136
@@ -23,6 +23,114 @@
|
|||||||
|
|
||||||
cmake_minimum_required (VERSION 3.0)
|
cmake_minimum_required (VERSION 3.0)
|
||||||
|
|
||||||
|
|
||||||
|
# System packages that are required
|
||||||
|
# We use either the cmake buildin, in ubuntu are in: /usr/share/cmake*/Modules/
|
||||||
|
# or cmake provide a generic interface to pkg-config that widely used
|
||||||
|
###################################
|
||||||
|
include(FindPkgConfig)
|
||||||
|
|
||||||
|
pkg_search_module(LIBXML2 libxml-2.0 REQUIRED)
|
||||||
|
include_directories(${LIBXML2_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
pkg_search_module(LIBXSLT libxslt REQUIRED)
|
||||||
|
include_directories(${LIBXSLT_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
pkg_search_module(OPENSSL openssl REQUIRED)
|
||||||
|
include_directories(${OPENSSL_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
pkg_search_module(CONFIG libconfig REQUIRED)
|
||||||
|
include_directories(${CONFIG_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
pkg_search_module(CRYPTO libcrypto REQUIRED)
|
||||||
|
include_directories(${CRYPTO_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
#use native cmake method as this package is not in pkg-config
|
||||||
|
if (${RF_BOARD} STREQUAL "OAI_USRP")
|
||||||
|
find_package(Boost REQUIRED)
|
||||||
|
include_directories(${LIBBOOST_INCLUDE_DIR})
|
||||||
|
|
||||||
|
elseif (${RF_BOARD} STREQUAL "OAI_IRIS")
|
||||||
|
include_directories("${OPENAIR_TARGETS}/ARCH/IRIS/USERSPACE/LIB/")
|
||||||
|
include_directories("/usr/local/include/")
|
||||||
|
set(HW_SOURCE ${HW_SOURCE}
|
||||||
|
${OPENAIR_TARGETS}/ARCH/IRIS/USERSPACE/LIB/iris_lib.cpp)
|
||||||
|
LINK_DIRECTORIES("/usr/local/lib")
|
||||||
|
set(option_HW_lib "-lSoapySDR -rdynamic -ldl")
|
||||||
|
|
||||||
|
endif (${RF_BOARD} STREQUAL "OAI_USRP")
|
||||||
|
|
||||||
|
pkg_search_module(OPENPGM openpgm-5.1 openpgm-5.2)
|
||||||
|
if(NOT ${OPENPGM_FOUND})
|
||||||
|
message("PACKAGE openpgm-5.1 is required by binaries such as oaisim: will fail later if this target is built")
|
||||||
|
else()
|
||||||
|
include_directories(${OPENPGM_INCLUDE_DIRS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
pkg_search_module(NETTLE nettle)
|
||||||
|
if(NOT ${NETTLE_FOUND})
|
||||||
|
message( FATAL_ERROR "PACKAGE nettle not found: some targets will fail. Run build_oai -I again!")
|
||||||
|
else()
|
||||||
|
include_directories(${NETTLE_INCLUDE_DIRS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message ("NETTLE VERSION_INSTALLED = ${NETTLE_VERSION}")
|
||||||
|
|
||||||
|
string(REGEX REPLACE "([0-9]+).*" "\\1" NETTLE_VERSION_MAJOR ${NETTLE_VERSION})
|
||||||
|
string(REGEX REPLACE "[0-9]+\\.([0-9]+).*" "\\1" NETTLE_VERSION_MINOR ${NETTLE_VERSION})
|
||||||
|
message ("NETTLE_VERSION_MAJOR = ${NETTLE_VERSION_MAJOR}")
|
||||||
|
message ("NETTLE_VERSION_MINOR = ${NETTLE_VERSION_MINOR}")
|
||||||
|
|
||||||
|
if ("${NETTLE_VERSION_MAJOR}" STREQUAL "" OR "${NETTLE_VERSION_MINOR}" STREQUAL "")
|
||||||
|
message( FATAL_ERROR "The nettle version not detected properly. Try to run build_oai -I again" )
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_definitions("-DNETTLE_VERSION_MAJOR=${NETTLE_VERSION_MAJOR}")
|
||||||
|
add_definitions("-DNETTLE_VERSION_MINOR=${NETTLE_VERSION_MINOR}")
|
||||||
|
|
||||||
|
pkg_search_module(XPM xpm)
|
||||||
|
if(NOT ${XPM_FOUND})
|
||||||
|
message("PACKAGE xpm not found: some targets will fail")
|
||||||
|
else()
|
||||||
|
include_directories(${XPM_INCLUDE_DIRS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Atlas is required by some packages, but not found in pkg-config
|
||||||
|
# So, here are some hacks here. Hope this gets fixed in future!
|
||||||
|
if(EXISTS "/usr/include/atlas/cblas.h" OR EXISTS "/usr/include/cblas.h")
|
||||||
|
include_directories("/usr/include/atlas")
|
||||||
|
LINK_DIRECTORIES("/usr/lib/lapack")
|
||||||
|
LINK_DIRECTORIES("/usr/lib64")
|
||||||
|
LINK_DIRECTORIES("/usr/lib64/atlas") #Added because atlas libraries in CentOS 7 are here!
|
||||||
|
|
||||||
|
if(EXISTS "/usr/lib64/libblas.so" OR EXISTS "/usr/lib/libblas.so") #Case for CentOS7
|
||||||
|
list(APPEND ATLAS_LIBRARIES blas)
|
||||||
|
|
||||||
|
else() # Case for Ubuntu
|
||||||
|
list(APPEND ATLAS_LIBRARIES cblas)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(EXISTS "/usr/lib/atlas/libtatlas.so" OR EXISTS "/usr/lib64/atlas/libtatlas.so") #Case for CentOS7
|
||||||
|
list(APPEND ATLAS_LIBRARIES tatlas)
|
||||||
|
else()
|
||||||
|
list(APPEND ATLAS_LIBRARIES atlas) #Case for Ubuntu
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND ATLAS_LIBRARIES lapack)
|
||||||
|
|
||||||
|
# for ubuntu 17.10, directories are different
|
||||||
|
elseif(EXISTS "/usr/include/x86_64-linux-gnu/cblas.h")
|
||||||
|
|
||||||
|
include_directories("/usr/include/x86_64-linux-gnu")
|
||||||
|
LINK_DIRECTORIES("/usr/lib/x86_64-linux-gnu")
|
||||||
|
list(APPEND ATLAS_LIBRARIES cblas)
|
||||||
|
list(APPEND ATLAS_LIBRARIES atlas)
|
||||||
|
list(APPEND ATLAS_LIBRARIES lapack)
|
||||||
|
|
||||||
|
else()
|
||||||
|
message("No Blas/Atlas libs found, some targets will fail")
|
||||||
|
endif()
|
||||||
|
|
||||||
#########################################################
|
#########################################################
|
||||||
# Base directories, compatible with legacy OAI building #
|
# Base directories, compatible with legacy OAI building #
|
||||||
#########################################################
|
#########################################################
|
||||||
@@ -232,8 +340,8 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,${CMAKE_CU
|
|||||||
#########################
|
#########################
|
||||||
# set a flag for changes in the source code
|
# set a flag for changes in the source code
|
||||||
# these changes are related to hardcoded path to include .h files
|
# these changes are related to hardcoded path to include .h files
|
||||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g3 -DMALLOC_CHECK_=3")
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g3 -O0 -DMALLOC_CHECK_=3")
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g3 -DMALLOC_CHECK_=3 -O2")
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g3 -DMALLOC_CHECK_=3 -O2 -fno-delete-null-pointer-checks")
|
||||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -O3")
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -O3")
|
||||||
|
|
||||||
set(GIT_BRANCH "UNKNOWN")
|
set(GIT_BRANCH "UNKNOWN")
|
||||||
@@ -302,7 +410,6 @@ set (OCP_ITTI ${OPENAIR_DIR}/common/utils/ocp_itti)
|
|||||||
add_library(ITTI
|
add_library(ITTI
|
||||||
${OCP_ITTI}/intertask_interface.cpp
|
${OCP_ITTI}/intertask_interface.cpp
|
||||||
${OPENAIR_DIR}/common/utils/backtrace.c
|
${OPENAIR_DIR}/common/utils/backtrace.c
|
||||||
${OPENAIR_DIR}/common/utils/memory_pools.c
|
|
||||||
)
|
)
|
||||||
add_dependencies(ITTI rrc_flag)
|
add_dependencies(ITTI rrc_flag)
|
||||||
set(ITTI_LIB ITTI)
|
set(ITTI_LIB ITTI)
|
||||||
@@ -356,9 +463,9 @@ include_directories ("${RRC_FULL_DIR}")
|
|||||||
|
|
||||||
#NR RRC
|
#NR RRC
|
||||||
#######
|
#######
|
||||||
set (NR_RRC_ASN1_VERSION "NR_Rel15" )
|
set (NR_RRC_ASN1_VERSION "NR_Rel16" )
|
||||||
make_version(NR_RRC_VERSION 15 6 0)
|
make_version(NR_RRC_VERSION 16 1 0)
|
||||||
set (NR_RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1c/ASN1_files/nr-rrc-15.6.0.asn1)
|
set (NR_RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1c/ASN1_files/nr-rrc-16.1.0.asn1)
|
||||||
add_definitions(-DNR_RRC_VERSION=${NR_RRC_VERSION})
|
add_definitions(-DNR_RRC_VERSION=${NR_RRC_VERSION})
|
||||||
set (NR_RRC_FULL_DIR ${asn1_generated_dir}/RRC_${NR_RRC_ASN1_VERSION})
|
set (NR_RRC_FULL_DIR ${asn1_generated_dir}/RRC_${NR_RRC_ASN1_VERSION})
|
||||||
|
|
||||||
@@ -436,6 +543,59 @@ add_library(S1AP_ENB
|
|||||||
add_dependencies(S1AP_ENB rrc_flag s1ap_flag)
|
add_dependencies(S1AP_ENB rrc_flag s1ap_flag)
|
||||||
|
|
||||||
|
|
||||||
|
# NGAP
|
||||||
|
# Same limitation as described in RRC: unknown generated file list
|
||||||
|
# so we generate it at cmake time
|
||||||
|
##############
|
||||||
|
set (NGAP_RELEASE R15)
|
||||||
|
|
||||||
|
set(NGAP_DIR ${OPENAIR3_DIR}/NGAP)
|
||||||
|
make_version(NGAP_VERSION 15 8 0)
|
||||||
|
set(NGAP_ASN_FILES "ngap-15.8.0.asn1")
|
||||||
|
|
||||||
|
add_definitions(-DNGAP_VERSION=${NGAP_VERSION})
|
||||||
|
set(NGAP_ASN_DIR ${NGAP_DIR}/MESSAGES/ASN1/ASN1_files)
|
||||||
|
set(NGAP_C_DIR ${asn1_generated_dir}/NGAP_${NGAP_RELEASE})
|
||||||
|
|
||||||
|
# Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make
|
||||||
|
execute_process(COMMAND ${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${NGAP_C_DIR}" "${NGAP_ASN_DIR}/${NGAP_ASN_FILES}" "NGAP_" -fno-include-deps -findirect-choice
|
||||||
|
RESULT_VARIABLE ret)
|
||||||
|
if (NOT ${ret} STREQUAL 0)
|
||||||
|
message(FATAL_ERROR "${ret}: error")
|
||||||
|
endif (NOT ${ret} STREQUAL 0)
|
||||||
|
file(GLOB NGAP_source ${NGAP_C_DIR}/*.c)
|
||||||
|
|
||||||
|
add_custom_target (
|
||||||
|
ngap_flag ALL
|
||||||
|
${OPENAIR_CMAKE}/tools/make_asn1c_includes.sh "${NGAP_C_DIR}" "${NGAP_ASN_DIR}/${NGAP_ASN_FILES}" "NGAP_" -fno-include-deps
|
||||||
|
DEPENDS "${NGAP_ASN_DIR}/${NGAP_ASN_FILES}"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(NGAP_LIB
|
||||||
|
${NGAP_source}
|
||||||
|
# ${NGAP_DIR}/ngap_common.c
|
||||||
|
)
|
||||||
|
add_dependencies(NGAP_LIB rrc_flag ngap_flag)
|
||||||
|
|
||||||
|
include_directories ("${NGAP_C_DIR}")
|
||||||
|
include_directories ("${NGAP_DIR}")
|
||||||
|
|
||||||
|
add_library(NGAP_GNB
|
||||||
|
${NGAP_DIR}/ngap_gNB.c
|
||||||
|
${NGAP_DIR}/ngap_gNB_context_management_procedures.c
|
||||||
|
${NGAP_DIR}/ngap_gNB_decoder.c
|
||||||
|
${NGAP_DIR}/ngap_gNB_encoder.c
|
||||||
|
${NGAP_DIR}/ngap_gNB_handlers.c
|
||||||
|
${NGAP_DIR}/ngap_gNB_itti_messaging.c
|
||||||
|
${NGAP_DIR}/ngap_gNB_management_procedures.c
|
||||||
|
${NGAP_DIR}/ngap_gNB_nas_procedures.c
|
||||||
|
${NGAP_DIR}/ngap_gNB_nnsf.c
|
||||||
|
${NGAP_DIR}/ngap_gNB_overload.c
|
||||||
|
${NGAP_DIR}/ngap_gNB_trace.c
|
||||||
|
${NGAP_DIR}/ngap_gNB_ue_context.c
|
||||||
|
)
|
||||||
|
add_dependencies(NGAP_GNB rrc_flag ngap_flag)
|
||||||
|
|
||||||
#M2AP
|
#M2AP
|
||||||
# Same limitation as described in RRC/S1AP: unknown generated file list
|
# Same limitation as described in RRC/S1AP: unknown generated file list
|
||||||
# so we generate it at cmake time
|
# so we generate it at cmake time
|
||||||
@@ -622,7 +782,7 @@ add_library(X2AP_ENB
|
|||||||
${X2AP_DIR}/x2ap_ids.c
|
${X2AP_DIR}/x2ap_ids.c
|
||||||
${X2AP_DIR}/x2ap_timers.c
|
${X2AP_DIR}/x2ap_timers.c
|
||||||
)
|
)
|
||||||
add_dependencies(X2AP_ENB rrc_flag x2_flag)
|
add_dependencies(X2AP_ENB X2AP_LIB rrc_flag x2_flag)
|
||||||
|
|
||||||
|
|
||||||
# F1AP
|
# F1AP
|
||||||
@@ -813,7 +973,7 @@ Message("CPU_Affinity flag is ${CPU_AFFINITY}")
|
|||||||
add_boolean_option(NO_RRM True "DO WE HAVE A RADIO RESSOURCE MANAGER: NO")
|
add_boolean_option(NO_RRM True "DO WE HAVE A RADIO RESSOURCE MANAGER: NO")
|
||||||
|
|
||||||
add_boolean_option(OAI_NW_DRIVER_TYPE_ETHERNET False "????")
|
add_boolean_option(OAI_NW_DRIVER_TYPE_ETHERNET False "????")
|
||||||
add_boolean_option(DEADLINE_SCHEDULER True "Use the Linux scheduler SCHED_DEADLINE: kernel >= 3.14")
|
add_boolean_option(DEADLINE_SCHEDULER False "Use the Linux scheduler SCHED_DEADLINE: kernel >= 3.14")
|
||||||
add_boolean_option(CPU_AFFINITY False "Enable CPU Affinity of threads (only valid without deadline scheduler). It is enabled only with >2 CPUs")
|
add_boolean_option(CPU_AFFINITY False "Enable CPU Affinity of threads (only valid without deadline scheduler). It is enabled only with >2 CPUs")
|
||||||
add_boolean_option(NAS_NETLINK False "useless ??? Must be True to compile nasmesh driver without rtai ????")
|
add_boolean_option(NAS_NETLINK False "useless ??? Must be True to compile nasmesh driver without rtai ????")
|
||||||
add_boolean_option(OAI_NW_DRIVER_USE_NETLINK True "????")
|
add_boolean_option(OAI_NW_DRIVER_USE_NETLINK True "????")
|
||||||
@@ -826,6 +986,7 @@ add_boolean_option(UE_EXPANSION False "enable UE_EXPANSION w
|
|||||||
add_boolean_option(PHY_TX_THREAD False "enable UE_EXPANSION with max 256 UE")
|
add_boolean_option(PHY_TX_THREAD False "enable UE_EXPANSION with max 256 UE")
|
||||||
add_boolean_option(PRE_SCD_THREAD False "enable UE_EXPANSION with max 256 UE")
|
add_boolean_option(PRE_SCD_THREAD False "enable UE_EXPANSION with max 256 UE")
|
||||||
add_boolean_option(UESIM_EXPANSION False "enable UESIM_EXPANSION with max 256 UE")
|
add_boolean_option(UESIM_EXPANSION False "enable UESIM_EXPANSION with max 256 UE")
|
||||||
|
add_boolean_option(ITTI_SIM False "enable itti simulator")
|
||||||
|
|
||||||
########################
|
########################
|
||||||
# Include order
|
# Include order
|
||||||
@@ -835,9 +996,9 @@ add_boolean_option(ENB_MODE True "Swap the include directories between openair2
|
|||||||
##########################
|
##########################
|
||||||
# SCHEDULING/REAL-TIME/PERF options
|
# SCHEDULING/REAL-TIME/PERF options
|
||||||
##########################
|
##########################
|
||||||
add_boolean_option(ENABLE_USE_CPU_EXECUTION_TIME True "Add data in vcd traces: disable it if perf issues")
|
add_boolean_option(ENABLE_USE_CPU_EXECUTION_TIME False "Add data in vcd traces: disable it if perf issues")
|
||||||
add_boolean_option(ENABLE_VCD True "always true now, time measurements of proc calls and var displays")
|
add_boolean_option(ENABLE_VCD False "always true now, time measurements of proc calls and var displays")
|
||||||
add_boolean_option(ENABLE_VCD_FIFO True "time measurements of proc calls and var displays sent to FIFO (one more thread)")
|
add_boolean_option(ENABLE_VCD_FIFO False "time measurements of proc calls and var displays sent to FIFO (one more thread)")
|
||||||
add_boolean_option(LINUX False "used in weird memcpy() in pdcp.c ???")
|
add_boolean_option(LINUX False "used in weird memcpy() in pdcp.c ???")
|
||||||
add_boolean_option(LINUX_LIST False "used only in lists.c: either use OAI implementation of lists or Linux one (should be True, but it is False")
|
add_boolean_option(LINUX_LIST False "used only in lists.c: either use OAI implementation of lists or Linux one (should be True, but it is False")
|
||||||
add_boolean_option(OPENAIR_LTE True "Seems legacy: keep it to true")
|
add_boolean_option(OPENAIR_LTE True "Seems legacy: keep it to true")
|
||||||
@@ -1095,9 +1256,22 @@ add_library(FLEXRAN_AGENT
|
|||||||
${OPENAIR2_DIR}/ENB_APP/flexran_agent_async.c
|
${OPENAIR2_DIR}/ENB_APP/flexran_agent_async.c
|
||||||
${OPENAIR2_DIR}/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c
|
${OPENAIR2_DIR}/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c
|
||||||
${OPENAIR2_DIR}/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_slice_verification.c
|
${OPENAIR2_DIR}/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_slice_verification.c
|
||||||
|
${OPENAIR2_DIR}/ENB_APP/flexran_agent_app.c
|
||||||
)
|
)
|
||||||
add_dependencies(FLEXRAN_AGENT rrc_flag)
|
add_dependencies(FLEXRAN_AGENT rrc_flag)
|
||||||
set(FLEXRAN_AGENT_LIB FLEXRAN_AGENT)
|
set(FLEXRAN_AGENT_LIB FLEXRAN_AGENT)
|
||||||
|
add_library(flapp_sample SHARED
|
||||||
|
${OPENAIR2_DIR}/ENB_APP/flexran_apps/sample.c
|
||||||
|
)
|
||||||
|
set_target_properties(flapp_sample PROPERTIES C_VISIBILITY_PRESET hidden)
|
||||||
|
add_library(flapp_imsi SHARED
|
||||||
|
${OPENAIR2_DIR}/ENB_APP/flexran_apps/imsi.c
|
||||||
|
)
|
||||||
|
set_target_properties(flapp_imsi PROPERTIES C_VISIBILITY_PRESET hidden)
|
||||||
|
add_custom_target(flapp_all DEPENDS
|
||||||
|
flapp_sample
|
||||||
|
flapp_imsi
|
||||||
|
)
|
||||||
#include_directories(${OPENAIR2_DIR}/ENB_APP)
|
#include_directories(${OPENAIR2_DIR}/ENB_APP)
|
||||||
|
|
||||||
set(PROTOBUF_LIB "protobuf-c")
|
set(PROTOBUF_LIB "protobuf-c")
|
||||||
@@ -1238,6 +1412,7 @@ set(SECU_OSA_SRC
|
|||||||
${OPENAIR2_DIR}/UTIL/OSA/osa_stream_eia.c
|
${OPENAIR2_DIR}/UTIL/OSA/osa_stream_eia.c
|
||||||
)
|
)
|
||||||
add_library(SECU_OSA ${SECU_OSA_SRC})
|
add_library(SECU_OSA ${SECU_OSA_SRC})
|
||||||
|
target_link_libraries(SECU_OSA ${NETTLE_LIBRARIES})
|
||||||
|
|
||||||
set(SECU_CN_SRC
|
set(SECU_CN_SRC
|
||||||
${OPENAIR3_DIR}/SECU/kdf.c
|
${OPENAIR3_DIR}/SECU/kdf.c
|
||||||
@@ -1251,6 +1426,8 @@ set(SECU_CN_SRC
|
|||||||
)
|
)
|
||||||
add_library(SECU_CN ${SECU_CN_SRC})
|
add_library(SECU_CN ${SECU_CN_SRC})
|
||||||
|
|
||||||
|
target_link_libraries(SECU_CN ${NETTLE_LIBRARIES})
|
||||||
|
|
||||||
# Physical Channel Procedures Scheduling
|
# Physical Channel Procedures Scheduling
|
||||||
################################"
|
################################"
|
||||||
set(SCHED_SRC
|
set(SCHED_SRC
|
||||||
@@ -1580,6 +1757,7 @@ set(PHY_SRC_UE
|
|||||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_prach.c
|
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_prach.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c
|
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_ulsch_llr_computation.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
|
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
|
||||||
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/ul_ref_seq_nr.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_dmrs_rx.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_dmrs_rx.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_csi_rs.c
|
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_csi_rs.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gold.c
|
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gold.c
|
||||||
@@ -1616,6 +1794,7 @@ set(PHY_SRC_UE
|
|||||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/sss_nr.c
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/sss_nr.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/cic_filter_nr.c
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/cic_filter_nr.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
|
||||||
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_ue_rf_helpers.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_pbch.c
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_pbch.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
|
||||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
|
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
|
||||||
@@ -1789,6 +1968,7 @@ set(NR_PDCP_SRC
|
|||||||
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c
|
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c
|
||||||
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_entity.c
|
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_entity.c
|
||||||
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_entity_drb_am.c
|
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_entity_drb_am.c
|
||||||
|
${OPENAIR2_DIR}/LAYER2/nr_pdcp/asn1_utils.c
|
||||||
)
|
)
|
||||||
|
|
||||||
set(L2_SRC
|
set(L2_SRC
|
||||||
@@ -1841,6 +2021,7 @@ set(L2_NR_SRC
|
|||||||
${NR_RRC_DIR}/rrc_gNB_internode.c
|
${NR_RRC_DIR}/rrc_gNB_internode.c
|
||||||
${NR_RRC_DIR}/rrc_gNB_reconfig.c
|
${NR_RRC_DIR}/rrc_gNB_reconfig.c
|
||||||
${NR_RRC_DIR}/rrc_gNB_UE_context.c
|
${NR_RRC_DIR}/rrc_gNB_UE_context.c
|
||||||
|
${NR_RRC_DIR}/rrc_gNB_NGAP.c
|
||||||
)
|
)
|
||||||
|
|
||||||
set(L2_SRC_UE
|
set(L2_SRC_UE
|
||||||
@@ -1928,10 +2109,10 @@ set (MAC_NR_SRC_UE
|
|||||||
${NR_UE_MAC_DIR}/mac_vars.c
|
${NR_UE_MAC_DIR}/mac_vars.c
|
||||||
${NR_UE_MAC_DIR}/main_ue_nr.c
|
${NR_UE_MAC_DIR}/main_ue_nr.c
|
||||||
${NR_UE_MAC_DIR}/nr_ue_procedures.c
|
${NR_UE_MAC_DIR}/nr_ue_procedures.c
|
||||||
|
${NR_UE_MAC_DIR}/nr_ue_scheduler.c
|
||||||
${NR_UE_MAC_DIR}/nr_ue_dci_configuration.c
|
${NR_UE_MAC_DIR}/nr_ue_dci_configuration.c
|
||||||
${NR_UE_MAC_DIR}/nr_l1_helpers.c
|
${NR_UE_MAC_DIR}/nr_l1_helpers.c
|
||||||
${NR_UE_MAC_DIR}/nr_ra_procedures.c
|
${NR_UE_MAC_DIR}/nr_ra_procedures.c
|
||||||
${NR_UE_MAC_DIR}/rar_tools_nrUE.c
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set (ENB_APP_SRC
|
set (ENB_APP_SRC
|
||||||
@@ -2036,6 +2217,11 @@ set (GTPV1U_SRC
|
|||||||
add_library(GTPV1U ${GTPV1U_SRC})
|
add_library(GTPV1U ${GTPV1U_SRC})
|
||||||
add_dependencies(GTPV1U rrc_flag)
|
add_dependencies(GTPV1U rrc_flag)
|
||||||
|
|
||||||
|
#add_library (GTPV1U_OCP
|
||||||
|
#${OPENAIR3_DIR}/ocp-gtp/gtp_itf.cpp
|
||||||
|
#)
|
||||||
|
#include_directories(${OPENAIR3_DIR}/ocp-gtp)
|
||||||
|
|
||||||
#NR case
|
#NR case
|
||||||
set (NR_GTPV1U_SRC
|
set (NR_GTPV1U_SRC
|
||||||
${NR_RRC_DIR}/rrc_gNB_GTPV1U.c
|
${NR_RRC_DIR}/rrc_gNB_GTPV1U.c
|
||||||
@@ -2327,6 +2513,134 @@ if(NAS_UE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
if(ITTI_SIM)
|
||||||
|
set(libnas_ue_api_OBJS
|
||||||
|
${NAS_SRC}UE/API/USER/at_command.c
|
||||||
|
${NAS_SRC}UE/API/USER/at_error.c
|
||||||
|
${NAS_SRC}UE/API/USER/at_response.c
|
||||||
|
${NAS_SRC}UE/API/USER/user_api.c
|
||||||
|
${NAS_SRC}UE/API/USER/user_indication.c
|
||||||
|
${NAS_SRC}UE/API/USIM/aka_functions.c
|
||||||
|
${NAS_SRC}UE/API/USIM/usim_api.c
|
||||||
|
)
|
||||||
|
set(libnas_ue_emm_OBJS
|
||||||
|
${NAS_SRC}UE/EMM/Attach.c
|
||||||
|
${NAS_SRC}UE/EMM/Authentication.c
|
||||||
|
${NAS_SRC}UE/EMM/Detach.c
|
||||||
|
${NAS_SRC}UE/EMM/emm_main.c
|
||||||
|
${NAS_SRC}UE/EMM/EmmStatusHdl.c
|
||||||
|
${NAS_SRC}UE/EMM/Identification.c
|
||||||
|
${NAS_SRC}UE/EMM/IdleMode.c
|
||||||
|
${NAS_SRC}UE/EMM/LowerLayer.c
|
||||||
|
${NAS_SRC}UE/EMM/SecurityModeControl.c
|
||||||
|
${NAS_SRC}UE/EMM/ServiceRequestHdl.c
|
||||||
|
${NAS_SRC}UE/EMM/TrackingAreaUpdate.c
|
||||||
|
)
|
||||||
|
set(libnas_ue_emm_sap_OBJS
|
||||||
|
${NAS_SRC}UE/EMM/SAP/emm_as.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmDeregisteredAttachNeeded.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmDeregisteredAttemptingToAttach.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmDeregistered.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmDeregisteredInitiated.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmDeregisteredLimitedService.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmDeregisteredNoImsi.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmDeregisteredNormalService.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmDeregisteredPlmnSearch.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/emm_esm.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/emm_fsm.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmNull.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/emm_recv.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/emm_reg.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmRegisteredAttemptingToUpdate.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmRegistered.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmRegisteredImsiDetachInitiated.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmRegisteredInitiated.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmRegisteredLimitedService.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmRegisteredNoCellAvailable.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmRegisteredNormalService.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmRegisteredPlmnSearch.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmRegisteredUpdateNeeded.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/emm_sap.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/emm_send.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmServiceRequestInitiated.c
|
||||||
|
${NAS_SRC}UE/EMM/SAP/EmmTrackingAreaUpdatingInitiated.c
|
||||||
|
)
|
||||||
|
set (libnas_ue_esm_OBJS
|
||||||
|
${NAS_SRC}UE/ESM/DedicatedEpsBearerContextActivation.c
|
||||||
|
${NAS_SRC}UE/ESM/DefaultEpsBearerContextActivation.c
|
||||||
|
${NAS_SRC}UE/ESM/EpsBearerContextDeactivation.c
|
||||||
|
${NAS_SRC}UE/ESM/esm_ebr.c
|
||||||
|
${NAS_SRC}UE/ESM/esm_ebr_context.c
|
||||||
|
${NAS_SRC}UE/ESM/esm_ip.c
|
||||||
|
${NAS_SRC}UE/ESM/esm_main.c
|
||||||
|
${NAS_SRC}UE/ESM/esm_pt.c
|
||||||
|
${NAS_SRC}UE/ESM/EsmStatusHdl.c
|
||||||
|
${NAS_SRC}UE/ESM/PdnConnectivity.c
|
||||||
|
${NAS_SRC}UE/ESM/PdnDisconnect.c
|
||||||
|
)
|
||||||
|
set(libnas_ue_esm_sap_OBJS
|
||||||
|
${NAS_SRC}UE/ESM/SAP/esm_recv.c
|
||||||
|
${NAS_SRC}UE/ESM/SAP/esm_send.c
|
||||||
|
${NAS_SRC}UE/ESM/SAP/esm_sap.c
|
||||||
|
)
|
||||||
|
|
||||||
|
set(libnrnas_emm_msg_OBJS
|
||||||
|
${NAS_SRC}COMMON/EMM/MSG/RegistrationRequest.c
|
||||||
|
${NAS_SRC}COMMON/EMM/MSG/RegistrationAccept.c
|
||||||
|
${NAS_SRC}COMMON/EMM/MSG/FGSIdentityResponse.c
|
||||||
|
${NAS_SRC}COMMON/EMM/MSG/FGSAuthenticationResponse.c
|
||||||
|
${NAS_SRC}COMMON/EMM/MSG/FGSNASSecurityModeComplete.c
|
||||||
|
${NAS_SRC}COMMON/EMM/MSG/RegistrationComplete.c
|
||||||
|
${NAS_SRC}COMMON/EMM/MSG/FGSUplinkNasTransport.c
|
||||||
|
${NAS_SRC}COMMON/ESM/MSG/PduSessionEstablishRequest.c
|
||||||
|
)
|
||||||
|
|
||||||
|
set(libnrnas_ies_OBJS
|
||||||
|
${NAS_SRC}COMMON/IES/ExtendedProtocolDiscriminator.c
|
||||||
|
${NAS_SRC}COMMON/IES/FGSMobileIdentity.c
|
||||||
|
${NAS_SRC}COMMON/IES/FGSRegistrationType.c
|
||||||
|
${NAS_SRC}COMMON/IES/SpareHalfOctet.c
|
||||||
|
${NAS_SRC}COMMON/IES/FGSRegistrationResult.c
|
||||||
|
${NAS_SRC}COMMON/IES/FGMMCapability.c
|
||||||
|
${NAS_SRC}COMMON/IES/NrUESecurityCapability.c
|
||||||
|
${NAS_SRC}COMMON/IES/FGCNasMessageContainer.c
|
||||||
|
${NAS_SRC}COMMON/IES/SORTransparentContainer.c
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(LIB_NAS_SIMUE
|
||||||
|
${NAS_SRC}UE/nas_itti_messaging.c
|
||||||
|
${NAS_SRC}UE/nas_network.c
|
||||||
|
${NAS_SRC}UE/nas_parser.c
|
||||||
|
${NAS_SRC}UE/nas_proc.c
|
||||||
|
${NAS_SRC}UE/nas_user.c
|
||||||
|
${NAS_SRC}NR_UE/nr_nas_msg_sim.c
|
||||||
|
${libnas_api_OBJS}
|
||||||
|
${libnas_ue_api_OBJS}
|
||||||
|
${libnas_emm_msg_OBJS}
|
||||||
|
${libnas_esm_msg_OBJS}
|
||||||
|
${libnas_ies_OBJS}
|
||||||
|
${libnas_utils_OBJS}
|
||||||
|
${libnas_ue_emm_OBJS}
|
||||||
|
${libnas_ue_emm_sap_OBJS}
|
||||||
|
${libnas_ue_esm_OBJS}
|
||||||
|
${libnas_ue_esm_sap_OBJS}
|
||||||
|
${libnrnas_emm_msg_OBJS}
|
||||||
|
${libnrnas_ies_OBJS}
|
||||||
|
)
|
||||||
|
add_dependencies(LIB_NAS_SIMUE rrc_flag)
|
||||||
|
set(NAS_SIM_LIB LIB_NAS_SIMUE)
|
||||||
|
|
||||||
|
include_directories(${NAS_SRC}NR_UE)
|
||||||
|
include_directories(${NAS_SRC}UE)
|
||||||
|
include_directories(${NAS_SRC}UE/API/USER)
|
||||||
|
include_directories(${NAS_SRC}UE/API/USIM)
|
||||||
|
include_directories(${NAS_SRC}UE/EMM)
|
||||||
|
include_directories(${NAS_SRC}UE/EMM/SAP)
|
||||||
|
include_directories(${NAS_SRC}UE/ESM)
|
||||||
|
include_directories(${NAS_SRC}UE/ESM/SAP)
|
||||||
|
endif()
|
||||||
|
|
||||||
# nbiot
|
# nbiot
|
||||||
add_definitions("-DNUMBER_OF_UE_MAX_NB_IoT=16")
|
add_definitions("-DNUMBER_OF_UE_MAX_NB_IoT=16")
|
||||||
set (NBIOT_SOURCES
|
set (NBIOT_SOURCES
|
||||||
@@ -2339,6 +2653,14 @@ set (SHLIB_LOADER_SOURCES
|
|||||||
${OPENAIR_DIR}/common/utils/load_module_shlib.c
|
${OPENAIR_DIR}/common/utils/load_module_shlib.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_library(LIB_5GNAS_GNB
|
||||||
|
${NAS_SRC}/COMMON/nr_common.c
|
||||||
|
${NAS_SRC}/gNB/network_process_nas.c
|
||||||
|
${NAS_SRC}/NR_UE/ue_process_nas.c
|
||||||
|
${OPENAIR3_DIR}//UICC/usim_interface.c
|
||||||
|
)
|
||||||
|
target_link_libraries(LIB_5GNAS_GNB SECU_CN ${CRYPTO_LIBRARIES})
|
||||||
|
|
||||||
# Make lfds as a own source code (even if it is a outside library)
|
# Make lfds as a own source code (even if it is a outside library)
|
||||||
# For better intergration with compilation flags & structure of cmake
|
# For better intergration with compilation flags & structure of cmake
|
||||||
###################################################################
|
###################################################################
|
||||||
@@ -2415,114 +2737,6 @@ include_directories("${NFAPI_DIR}/nfapi/inc")
|
|||||||
include_directories("${NFAPI_DIR}/sim_common/inc")
|
include_directories("${NFAPI_DIR}/sim_common/inc")
|
||||||
include_directories("${NFAPI_DIR}/pnf_sim/inc")
|
include_directories("${NFAPI_DIR}/pnf_sim/inc")
|
||||||
|
|
||||||
|
|
||||||
# System packages that are required
|
|
||||||
# We use either the cmake buildin, in ubuntu are in: /usr/share/cmake*/Modules/
|
|
||||||
# or cmake provide a generic interface to pkg-config that widely used
|
|
||||||
###################################
|
|
||||||
include(FindPkgConfig)
|
|
||||||
|
|
||||||
pkg_search_module(LIBXML2 libxml-2.0 REQUIRED)
|
|
||||||
include_directories(${LIBXML2_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
pkg_search_module(LIBXSLT libxslt REQUIRED)
|
|
||||||
include_directories(${LIBXSLT_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
pkg_search_module(OPENSSL openssl REQUIRED)
|
|
||||||
include_directories(${OPENSSL_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
pkg_search_module(CONFIG libconfig REQUIRED)
|
|
||||||
include_directories(${CONFIG_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
pkg_search_module(CRYPTO libcrypto REQUIRED)
|
|
||||||
include_directories(${CRYPTO_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
#use native cmake method as this package is not in pkg-config
|
|
||||||
if (${RF_BOARD} STREQUAL "OAI_USRP")
|
|
||||||
find_package(Boost REQUIRED)
|
|
||||||
include_directories(${LIBBOOST_INCLUDE_DIR})
|
|
||||||
|
|
||||||
elseif (${RF_BOARD} STREQUAL "OAI_IRIS")
|
|
||||||
include_directories("${OPENAIR_TARGETS}/ARCH/IRIS/USERSPACE/LIB/")
|
|
||||||
include_directories("/usr/local/include/")
|
|
||||||
set(HW_SOURCE ${HW_SOURCE}
|
|
||||||
${OPENAIR_TARGETS}/ARCH/IRIS/USERSPACE/LIB/iris_lib.cpp)
|
|
||||||
LINK_DIRECTORIES("/usr/local/lib")
|
|
||||||
set(option_HW_lib "-lSoapySDR -rdynamic -ldl")
|
|
||||||
|
|
||||||
endif (${RF_BOARD} STREQUAL "OAI_USRP")
|
|
||||||
|
|
||||||
pkg_search_module(OPENPGM openpgm-5.1 openpgm-5.2)
|
|
||||||
if(NOT ${OPENPGM_FOUND})
|
|
||||||
message("PACKAGE openpgm-5.1 is required by binaries such as oaisim: will fail later if this target is built")
|
|
||||||
else()
|
|
||||||
include_directories(${OPENPGM_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
pkg_search_module(NETTLE nettle)
|
|
||||||
if(NOT ${NETTLE_FOUND})
|
|
||||||
message( FATAL_ERROR "PACKAGE nettle not found: some targets will fail. Run build_oai -I again!")
|
|
||||||
else()
|
|
||||||
include_directories(${NETTLE_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
message ("NETTLE VERSION_INSTALLED = ${NETTLE_VERSION}")
|
|
||||||
|
|
||||||
string(REGEX REPLACE "([0-9]+).*" "\\1" NETTLE_VERSION_MAJOR ${NETTLE_VERSION})
|
|
||||||
string(REGEX REPLACE "[0-9]+\\.([0-9]+).*" "\\1" NETTLE_VERSION_MINOR ${NETTLE_VERSION})
|
|
||||||
message ("NETTLE_VERSION_MAJOR = ${NETTLE_VERSION_MAJOR}")
|
|
||||||
message ("NETTLE_VERSION_MINOR = ${NETTLE_VERSION_MINOR}")
|
|
||||||
|
|
||||||
if ("${NETTLE_VERSION_MAJOR}" STREQUAL "" OR "${NETTLE_VERSION_MINOR}" STREQUAL "")
|
|
||||||
message( FATAL_ERROR "The nettle version not detected properly. Try to run build_oai -I again" )
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_definitions("-DNETTLE_VERSION_MAJOR=${NETTLE_VERSION_MAJOR}")
|
|
||||||
add_definitions("-DNETTLE_VERSION_MINOR=${NETTLE_VERSION_MINOR}")
|
|
||||||
|
|
||||||
pkg_search_module(XPM xpm)
|
|
||||||
if(NOT ${XPM_FOUND})
|
|
||||||
message("PACKAGE xpm not found: some targets will fail")
|
|
||||||
else()
|
|
||||||
include_directories(${XPM_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Atlas is required by some packages, but not found in pkg-config
|
|
||||||
# So, here are some hacks here. Hope this gets fixed in future!
|
|
||||||
if(EXISTS "/usr/include/atlas/cblas.h" OR EXISTS "/usr/include/cblas.h")
|
|
||||||
include_directories("/usr/include/atlas")
|
|
||||||
LINK_DIRECTORIES("/usr/lib/lapack")
|
|
||||||
LINK_DIRECTORIES("/usr/lib64")
|
|
||||||
LINK_DIRECTORIES("/usr/lib64/atlas") #Added because atlas libraries in CentOS 7 are here!
|
|
||||||
|
|
||||||
if(EXISTS "/usr/lib64/libblas.so" OR EXISTS "/usr/lib/libblas.so") #Case for CentOS7
|
|
||||||
list(APPEND ATLAS_LIBRARIES blas)
|
|
||||||
|
|
||||||
else() # Case for Ubuntu
|
|
||||||
list(APPEND ATLAS_LIBRARIES cblas)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(EXISTS "/usr/lib/atlas/libtatlas.so" OR EXISTS "/usr/lib64/atlas/libtatlas.so") #Case for CentOS7
|
|
||||||
list(APPEND ATLAS_LIBRARIES tatlas)
|
|
||||||
else()
|
|
||||||
list(APPEND ATLAS_LIBRARIES atlas) #Case for Ubuntu
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND ATLAS_LIBRARIES lapack)
|
|
||||||
|
|
||||||
# for ubuntu 17.10, directories are different
|
|
||||||
elseif(EXISTS "/usr/include/x86_64-linux-gnu/cblas.h")
|
|
||||||
|
|
||||||
include_directories("/usr/include/x86_64-linux-gnu")
|
|
||||||
LINK_DIRECTORIES("/usr/lib/x86_64-linux-gnu")
|
|
||||||
list(APPEND ATLAS_LIBRARIES cblas)
|
|
||||||
list(APPEND ATLAS_LIBRARIES atlas)
|
|
||||||
list(APPEND ATLAS_LIBRARIES lapack)
|
|
||||||
|
|
||||||
else()
|
|
||||||
message("No Blas/Atlas libs found, some targets will fail")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND ATLAS_LIBRARIES lapack lapacke)
|
list(APPEND ATLAS_LIBRARIES lapack lapacke)
|
||||||
|
|
||||||
include_directories ("/usr/include/X11")
|
include_directories ("/usr/include/X11")
|
||||||
@@ -2629,6 +2843,12 @@ add_executable(measurement_display
|
|||||||
${OPENAIR_DIR}/common/utils/threadPool/measurement_display.c)
|
${OPENAIR_DIR}/common/utils/threadPool/measurement_display.c)
|
||||||
target_link_libraries (measurement_display minimal_lib)
|
target_link_libraries (measurement_display minimal_lib)
|
||||||
|
|
||||||
|
add_executable(test5Gnas
|
||||||
|
${OPENAIR_DIR}/openair3/TEST/test5Gnas.c
|
||||||
|
)
|
||||||
|
target_link_libraries (test5Gnas LIB_5GNAS_GNB CONFIG_LIB minimal_lib )
|
||||||
|
|
||||||
|
|
||||||
# lte-softmodem is both eNB and UE implementation
|
# lte-softmodem is both eNB and UE implementation
|
||||||
###################################################
|
###################################################
|
||||||
|
|
||||||
@@ -2670,7 +2890,7 @@ target_link_libraries (lte-softmodem
|
|||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
|
|
||||||
target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES})
|
target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES})
|
||||||
target_link_libraries (lte-softmodem pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
|
target_link_libraries (lte-softmodem pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
|
||||||
target_link_libraries (lte-softmodem ${LIB_LMS_LIBRARIES})
|
target_link_libraries (lte-softmodem ${LIB_LMS_LIBRARIES})
|
||||||
target_link_libraries (lte-softmodem ${T_LIB})
|
target_link_libraries (lte-softmodem ${T_LIB})
|
||||||
|
|
||||||
@@ -2709,7 +2929,7 @@ target_link_libraries (ocp-enb
|
|||||||
PHY_COMMON PHY PHY_RU LFDS L2 L2_LTE NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB LFDS7 SIMU_COMMON
|
PHY_COMMON PHY PHY_RU LFDS L2 L2_LTE NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB LFDS7 SIMU_COMMON
|
||||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB} ${PROTO_AGENT_LIB}
|
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB} ${PROTO_AGENT_LIB}
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
target_link_libraries (ocp-enb ${LIBXML2_LIBRARIES} pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${LIB_LMS_LIBRARIES} ${T_LIB})
|
target_link_libraries (ocp-enb ${LIBXML2_LIBRARIES} pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${LIB_LMS_LIBRARIES} ${T_LIB})
|
||||||
|
|
||||||
add_executable(cu_test
|
add_executable(cu_test
|
||||||
${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/cu_test.c
|
${OPENAIR2_DIR}/LAYER2/PROTO_AGENT/cu_test.c
|
||||||
@@ -2781,7 +3001,7 @@ target_link_libraries (lte-uesoftmodem
|
|||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
|
|
||||||
target_link_libraries (lte-uesoftmodem ${LIBXML2_LIBRARIES})
|
target_link_libraries (lte-uesoftmodem ${LIBXML2_LIBRARIES})
|
||||||
target_link_libraries (lte-uesoftmodem pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
target_link_libraries (lte-uesoftmodem pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||||
target_link_libraries (lte-uesoftmodem ${LIB_LMS_LIBRARIES})
|
target_link_libraries (lte-uesoftmodem ${LIB_LMS_LIBRARIES})
|
||||||
target_link_libraries (lte-uesoftmodem ${T_LIB})
|
target_link_libraries (lte-uesoftmodem ${T_LIB})
|
||||||
|
|
||||||
@@ -2819,16 +3039,57 @@ target_link_libraries (nr-softmodem
|
|||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU LFDS NR_GTPV1U SECU_CN SECU_OSA
|
UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU LFDS NR_GTPV1U SECU_CN SECU_OSA
|
||||||
${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} RRC_LIB NR_RRC_LIB
|
${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} RRC_LIB NR_RRC_LIB
|
||||||
S1AP_LIB S1AP_ENB L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NGAP_LIB NGAP_GNB S1AP_LIB S1AP_ENB L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB ${PROTO_AGENT_LIB} ${FSPT_MSG_LIB}
|
X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB ${PROTO_AGENT_LIB} ${FSPT_MSG_LIB}
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
|
|
||||||
target_link_libraries (nr-softmodem ${LIBXML2_LIBRARIES})
|
target_link_libraries (nr-softmodem ${LIBXML2_LIBRARIES})
|
||||||
target_link_libraries (nr-softmodem pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
target_link_libraries (nr-softmodem pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||||
target_link_libraries (nr-softmodem ${LIB_LMS_LIBRARIES})
|
target_link_libraries (nr-softmodem ${LIB_LMS_LIBRARIES})
|
||||||
target_link_libraries (nr-softmodem ${T_LIB})
|
target_link_libraries (nr-softmodem ${T_LIB})
|
||||||
|
|
||||||
add_dependencies( nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
|
add_dependencies( nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
|
||||||
|
|
||||||
|
add_executable(ocp-gnb
|
||||||
|
${rrc_h}
|
||||||
|
${nr_rrc_h}
|
||||||
|
${s1ap_h}
|
||||||
|
# ${OPENAIR_BIN_DIR}/messages_xml.h
|
||||||
|
${OPENAIR_DIR}/executables/ocp-gnb.c
|
||||||
|
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
||||||
|
${OPENAIR_DIR}/executables/softmodem-common.c
|
||||||
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/COMMON/record_player.c
|
||||||
|
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||||
|
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
||||||
|
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||||
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${GTPU_need_ITTI}
|
||||||
|
${XFORMS_SOURCE_NR}
|
||||||
|
${T_SOURCE}
|
||||||
|
${CONFIG_SOURCES}
|
||||||
|
${SHLIB_LOADER_SOURCES}
|
||||||
|
${XFORMSINTERFACE_SOURCE}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries (ocp-gnb
|
||||||
|
-Wl,--start-group
|
||||||
|
UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU LFDS NR_GTPV1U SECU_CN SECU_OSA
|
||||||
|
${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} RRC_LIB NR_RRC_LIB
|
||||||
|
NGAP_LIB NGAP_GNB S1AP_LIB S1AP_ENB L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
|
X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB SIMU_COMMON
|
||||||
|
-Wl,--end-group z dl)
|
||||||
|
|
||||||
|
target_link_libraries (ocp-gnb ${LIBXML2_LIBRARIES} )
|
||||||
|
target_link_libraries (ocp-gnb pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||||
|
target_link_libraries (ocp-gnb ${LIB_LMS_LIBRARIES})
|
||||||
|
target_link_libraries (ocp-gnb ${T_LIB})
|
||||||
|
add_dependencies(ocp-gnb ldpc_orig ldpc_optim ldpc_optim8seg ldpc params_libconfig rfsimulator oai_usrpdevif rfsimulator nrscope)
|
||||||
|
|
||||||
|
|
||||||
# nr-uesoftmodem is UE implementation
|
# nr-uesoftmodem is UE implementation
|
||||||
#######################################
|
#######################################
|
||||||
|
|
||||||
@@ -2860,14 +3121,14 @@ add_executable(nr-uesoftmodem
|
|||||||
|
|
||||||
target_link_libraries (nr-uesoftmodem
|
target_link_libraries (nr-uesoftmodem
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB NR_RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB
|
RRC_LIB NR_RRC_LIB NGAP_LIB NGAP_GNB SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB
|
||||||
PHY_COMMON PHY_NR_COMMON PHY_UE PHY_NR_UE PHY_RU LFDS NR_L2_UE L2_UE_LTE_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB
|
PHY_COMMON PHY_NR_COMMON PHY_UE PHY_NR_UE PHY_RU LFDS NR_L2_UE L2_UE_LTE_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB
|
||||||
NFAPI_USER_LIB S1AP_LIB S1AP_ENB
|
NFAPI_USER_LIB S1AP_LIB S1AP_ENB
|
||||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
|
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES} LIB_5GNAS_GNB
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
|
|
||||||
target_link_libraries (nr-uesoftmodem ${LIBXML2_LIBRARIES})
|
target_link_libraries (nr-uesoftmodem ${LIBXML2_LIBRARIES})
|
||||||
target_link_libraries (nr-uesoftmodem pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
target_link_libraries (nr-uesoftmodem pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||||
target_link_libraries (nr-uesoftmodem ${LIB_LMS_LIBRARIES})
|
target_link_libraries (nr-uesoftmodem ${LIB_LMS_LIBRARIES})
|
||||||
target_link_libraries (nr-uesoftmodem ${T_LIB})
|
target_link_libraries (nr-uesoftmodem ${T_LIB})
|
||||||
|
|
||||||
@@ -2981,6 +3242,7 @@ add_executable(nr_dlschsim
|
|||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
${OPENAIR_DIR}/common/utils/utils.c
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
|
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
||||||
${UTIL_SRC}
|
${UTIL_SRC}
|
||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
@@ -2995,6 +3257,7 @@ add_executable(nr_pbchsim
|
|||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
${OPENAIR_DIR}/common/utils/utils.c
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
|
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
||||||
${UTIL_SRC}
|
${UTIL_SRC}
|
||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
@@ -3011,6 +3274,7 @@ add_executable(nr_pucchsim
|
|||||||
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
${OPENAIR_DIR}/common/utils/utils.c
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
|
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
||||||
${UTIL_SRC}
|
${UTIL_SRC}
|
||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
@@ -3029,12 +3293,13 @@ add_executable(nr_dlsim
|
|||||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||||
${NFAPI_USER_DIR}/nfapi.c
|
${NFAPI_USER_DIR}/nfapi.c
|
||||||
|
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
||||||
${UTIL_SRC}
|
${UTIL_SRC}
|
||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
)
|
)
|
||||||
target_link_libraries(nr_dlsim
|
target_link_libraries(nr_dlsim
|
||||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_NR HASHTABLE -Wl,--end-group
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_LTE_NR L2_NR HASHTABLE X2AP_ENB X2AP_LIB SECU_CN NGAP_GNB -Wl,--end-group
|
||||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
||||||
)
|
)
|
||||||
target_compile_definitions(nr_dlsim PUBLIC -DPHYSICAL_SIMULATOR)
|
target_compile_definitions(nr_dlsim PUBLIC -DPHYSICAL_SIMULATOR)
|
||||||
@@ -3048,11 +3313,13 @@ add_executable(nr_prachsim
|
|||||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||||
${NFAPI_USER_DIR}/nfapi.c
|
${NFAPI_USER_DIR}/nfapi.c
|
||||||
|
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
||||||
${UTIL_SRC}
|
${UTIL_SRC}
|
||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${SHLIB_LOADER_SOURCES})
|
${SHLIB_LOADER_SOURCES})
|
||||||
target_link_libraries(nr_prachsim
|
target_link_libraries(nr_prachsim
|
||||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_RU PHY_NR_UE MAC_NR_COMMON SCHED_NR_LIB MAC_UE_NR SCHED_NR_UE_LIB RRC_LIB NR_RRC_LIB L2_NR CONFIG_LIB HASHTABLE -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl)
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_RU PHY_NR_UE MAC_NR_COMMON SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_LTE_NR L2_NR HASHTABLE X2AP_ENB X2AP_LIB SECU_CN NGAP_GNB -Wl,--end-group
|
||||||
|
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl)
|
||||||
|
|
||||||
add_executable(nr_ulschsim
|
add_executable(nr_ulschsim
|
||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulschsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulschsim.c
|
||||||
@@ -3084,7 +3351,7 @@ add_executable(nr_ulsim
|
|||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
)
|
)
|
||||||
target_link_libraries(nr_ulsim
|
target_link_libraries(nr_ulsim
|
||||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR PHY_NR_COMMON PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_NR HASHTABLE -Wl,--end-group
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_LTE_NR L2_NR HASHTABLE X2AP_ENB X2AP_LIB SECU_CN NGAP_GNB -Wl,--end-group
|
||||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl
|
||||||
)
|
)
|
||||||
target_compile_definitions(nr_ulsim PUBLIC -DPHYSICAL_SIMULATOR)
|
target_compile_definitions(nr_ulsim PUBLIC -DPHYSICAL_SIMULATOR)
|
||||||
@@ -3119,7 +3386,7 @@ add_executable(test_epc_generate_scenario
|
|||||||
${OPENAIR3_DIR}/S1AP/s1ap_eNB_defs.h
|
${OPENAIR3_DIR}/S1AP/s1ap_eNB_defs.h
|
||||||
)
|
)
|
||||||
target_link_libraries (test_epc_generate_scenario
|
target_link_libraries (test_epc_generate_scenario
|
||||||
-Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB F1AP_LIB F1AP GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT MME_APP UDP SCHED_LIB PHY LFDS ${ITTI_LIB} ${MSC_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIB}
|
-Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB X2AP_ENB M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB F1AP_LIB F1AP GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT MME_APP UDP SCHED_LIB PHY LFDS ${ITTI_LIB} ${MSC_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${CONFIG_LIB}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(test_epc_play_scenario
|
add_executable(test_epc_play_scenario
|
||||||
@@ -3138,7 +3405,7 @@ add_executable(test_epc_play_scenario
|
|||||||
)
|
)
|
||||||
target_include_directories(test_epc_play_scenario PUBLIC /usr/local/share/asn1c)
|
target_include_directories(test_epc_play_scenario PUBLIC /usr/local/share/asn1c)
|
||||||
target_link_libraries (test_epc_play_scenario
|
target_link_libraries (test_epc_play_scenario
|
||||||
-Wl,--start-group RRC_LIB S1AP_LIB X2AP_LIB X2AP_ENB M3AP_LIB M3AP_ENB F1AP_LIB F1AP GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT MME_APP UDP SCHED_LIB PHY_NR_COMMON PHY_COMMON PHY PHY_UE LFDS ${ITTI_LIB} ${MSC_LIB} -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIB}
|
-Wl,--start-group RRC_LIB S1AP_LIB X2AP_LIB X2AP_ENB M3AP_LIB M3AP_ENB F1AP_LIB F1AP GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT MME_APP UDP SCHED_LIB PHY_NR_COMMON PHY_COMMON PHY PHY_UE LFDS ${ITTI_LIB} ${MSC_LIB} -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${CONFIG_LIB}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -3158,7 +3425,7 @@ foreach(myExe s1ap
|
|||||||
${OPENAIR3_DIR}/TEST/test_${myExe}.c
|
${OPENAIR3_DIR}/TEST/test_${myExe}.c
|
||||||
)
|
)
|
||||||
target_link_libraries (test_${myExe}
|
target_link_libraries (test_${myExe}
|
||||||
-Wl,--start-group SECU_CN UTIL LFDS -Wl,--end-group m rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIB}
|
-Wl,--start-group SECU_CN UTIL LFDS -Wl,--end-group m rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${CONFIG_LIB}
|
||||||
)
|
)
|
||||||
endforeach(myExe)
|
endforeach(myExe)
|
||||||
|
|
||||||
@@ -3171,7 +3438,7 @@ if (${T_TRACER})
|
|||||||
foreach(i
|
foreach(i
|
||||||
#all "add_executable" definitions (except tests, rb_tool, updatefw)
|
#all "add_executable" definitions (except tests, rb_tool, updatefw)
|
||||||
lte-softmodem lte-uesoftmodem nr-softmodem
|
lte-softmodem lte-uesoftmodem nr-softmodem
|
||||||
nr-uesoftmodem dlsim dlsim_tm4 dlsim_tm7
|
nr-uesoftmodem dlsim dlsim_tm4 dlsim_tm7 nr-ittisim
|
||||||
ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim
|
ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim
|
||||||
syncsim nr_ulsim nr_dlsim nr_dlschsim nr_pbchsim nr_pucchsim
|
syncsim nr_ulsim nr_dlsim nr_dlschsim nr_pbchsim nr_pucchsim
|
||||||
nr_ulschsim ldpctest polartest smallblocktest cu_test du_test
|
nr_ulschsim ldpctest polartest smallblocktest cu_test du_test
|
||||||
@@ -3183,7 +3450,7 @@ if (${T_TRACER})
|
|||||||
SECU_OSA SECU_CN SCHED_LIB SCHED_NR_LIB SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB default_sched remote_sched RAL
|
SECU_OSA SECU_CN SCHED_LIB SCHED_NR_LIB SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB default_sched remote_sched RAL
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_VNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_VNF_LIB NFAPI_USER_LIB
|
||||||
PHY_COMMON PHY PHY_UE PHY_NR PHY_NR_COMMON PHY_NR_UE PHY_RU PHY_MEX
|
PHY_COMMON PHY PHY_UE PHY_NR PHY_NR_COMMON PHY_NR_UE PHY_RU PHY_MEX
|
||||||
L2 L2_LTE L2_NR L2_LTE_NR L2_UE NR_L2_UE MAC_NR_COMMON MAC_NR MAC_UE_NR
|
L2 L2_LTE L2_NR L2_LTE_NR L2_UE NR_L2_UE L2_UE_LTE_NR MAC_NR_COMMON MAC_NR MAC_UE_NR NGAP_GNB
|
||||||
CN_UTILS GTPV1U NR_GTPV1U SCTP_CLIENT MME_APP UDP LIB_NAS_UE NB_IoT LFDS LFDS7 SIMU_COMMON SIMU SIMU_ETH OPENAIR0_LIB
|
CN_UTILS GTPV1U NR_GTPV1U SCTP_CLIENT MME_APP UDP LIB_NAS_UE NB_IoT LFDS LFDS7 SIMU_COMMON SIMU SIMU_ETH OPENAIR0_LIB
|
||||||
ldpc_orig ldpc_optim ldpc_optim8seg ldpc PROTO_AGENT dfts)
|
ldpc_orig ldpc_optim ldpc_optim8seg ldpc PROTO_AGENT dfts)
|
||||||
if (TARGET ${i})
|
if (TARGET ${i})
|
||||||
@@ -3258,6 +3525,53 @@ add_executable(rb_tool
|
|||||||
)
|
)
|
||||||
target_include_directories(rb_tool PRIVATE ${OPENAIR2_DIR}/NETWORK_DRIVER/MESH/)
|
target_include_directories(rb_tool PRIVATE ${OPENAIR2_DIR}/NETWORK_DRIVER/MESH/)
|
||||||
|
|
||||||
|
# nr-ittisim
|
||||||
|
###################################################
|
||||||
|
|
||||||
|
add_executable(nr-ittisim
|
||||||
|
${rrc_h}
|
||||||
|
${nr_rrc_h}
|
||||||
|
${OPENAIR2_DIR}/GNB_APP/gnb_app.c
|
||||||
|
${OPENAIR2_DIR}/GNB_APP/gnb_config.c
|
||||||
|
${OPENAIR_DIR}/executables/nr-gnb.c
|
||||||
|
${OPENAIR_DIR}/executables/nr-ru.c
|
||||||
|
${OPENAIR2_DIR}/SIMULATION/NR_RRC/itti_sim.c
|
||||||
|
${OPENAIR_DIR}/executables/softmodem-common.c
|
||||||
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||||
|
${OPENAIR_TARGETS}/ARCH/COMMON/record_player.c
|
||||||
|
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||||
|
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
||||||
|
${OPENAIR3_DIR}/GTPV1-U/gtpv1u_gNB.c
|
||||||
|
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||||
|
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
|
||||||
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||||
|
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
||||||
|
${GTPU_need_ITTI}
|
||||||
|
${XFORMSINTERFACE_SOURCE}
|
||||||
|
${T_SOURCE}
|
||||||
|
${CONFIG_SOURCES}
|
||||||
|
${SHLIB_LOADER_SOURCES}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries (nr-ittisim
|
||||||
|
-Wl,--start-group
|
||||||
|
UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU LFDS NR_GTPV1U SECU_CN SECU_OSA
|
||||||
|
${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 ${MSC_LIB} ${RAL_LIB} ${NAS_SIM_LIB} RRC_LIB NR_RRC_LIB
|
||||||
|
NGAP_LIB NGAP_GNB S1AP_LIB S1AP_ENB L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
|
X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB ${PROTO_AGENT_LIB} ${FSPT_MSG_LIB}
|
||||||
|
PHY_NR_UE SCHED_NR_UE_LIB NR_L2_UE
|
||||||
|
-Wl,--end-group z dl)
|
||||||
|
|
||||||
|
target_link_libraries (nr-ittisim ${LIBXML2_LIBRARIES})
|
||||||
|
target_link_libraries (nr-ittisim pthread m ${CONFIG_LIB} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||||
|
target_link_libraries (nr-ittisim ${LIB_LMS_LIBRARIES})
|
||||||
|
target_link_libraries (nr-ittisim ${T_LIB})
|
||||||
|
|
||||||
|
add_dependencies( nr-ittisim ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
|
||||||
|
|
||||||
# ???
|
# ???
|
||||||
####################
|
####################
|
||||||
list(APPEND oai_nw_drv_src device.c common.c ioctl.c classifier.c tool.c)
|
list(APPEND oai_nw_drv_src device.c common.c ioctl.c classifier.c tool.c)
|
||||||
|
|||||||
@@ -1095,7 +1095,12 @@
|
|||||||
(Test10: 106 PRBs 50 PDSCH-PRBs MCS Index 16),
|
(Test10: 106 PRBs 50 PDSCH-PRBs MCS Index 16),
|
||||||
(Test11: HARQ test 25% TP (4 rounds),
|
(Test11: HARQ test 25% TP (4 rounds),
|
||||||
(Test12: HARQ test 33% TP (3 rounds),
|
(Test12: HARQ test 33% TP (3 rounds),
|
||||||
(Test13: HARQ test 50% TP (2 rounds)</desc>
|
(Test13: HARQ test 50% TP (2 rounds),
|
||||||
|
(Test14: 3 PTRS, 8 Interpolated Symbols),
|
||||||
|
(Test15: 6 PTRS, 5 Interpolated Symbols),
|
||||||
|
(Test16: 11 PTRS, 0 Interpolated Symbols),
|
||||||
|
(Test17: 2 DMRS Symbols),
|
||||||
|
(Test18: 3 DMRS Symbols)</desc>
|
||||||
<pre_compile_prog></pre_compile_prog>
|
<pre_compile_prog></pre_compile_prog>
|
||||||
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
||||||
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
||||||
@@ -1114,8 +1119,13 @@
|
|||||||
-n100 -e16 -s10
|
-n100 -e16 -s10
|
||||||
-n100 -s1 -t25
|
-n100 -s1 -t25
|
||||||
-n100 -s1 -t33
|
-n100 -s1 -t33
|
||||||
-n100 -s1 -t50</main_exec_args>
|
-n100 -s1 -t50
|
||||||
<tags>nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11 nr_dlsim.test12 nr_dlsim.test13</tags>
|
-n100 -s5 -T 2 2 2
|
||||||
|
-n100 -s5 -T 2 1 2
|
||||||
|
-n100 -s5 -T 2 0 4
|
||||||
|
-n100 -s2 -U 2 0 1
|
||||||
|
-n100 -s2 -U 2 0 2</main_exec_args>
|
||||||
|
<tags>nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11 nr_dlsim.test12 nr_dlsim.test13 nr_dlsim.test14 nr_dlsim.test15 nr_dlsim.test16 nr_dlsim.test17 nr_dlsim.test18</tags>
|
||||||
<search_expr_true>PDSCH test OK</search_expr_true>
|
<search_expr_true>PDSCH test OK</search_expr_true>
|
||||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||||
<nruns>3</nruns>
|
<nruns>3</nruns>
|
||||||
@@ -1279,7 +1289,10 @@
|
|||||||
(Test5: MCS 9 273 PRBs),
|
(Test5: MCS 9 273 PRBs),
|
||||||
(Test6: DMRS Type A, 3 DMRS, 4 PTRS, 5 Interpolated Symbols),
|
(Test6: DMRS Type A, 3 DMRS, 4 PTRS, 5 Interpolated Symbols),
|
||||||
(Test7: DMRS Type B, 3 DMRS, 2 PTRS, 7 Interpolated Symbols),
|
(Test7: DMRS Type B, 3 DMRS, 2 PTRS, 7 Interpolated Symbols),
|
||||||
(Test8: DMRS Type B, 3 DMRS, 2 PTRS, 3 Interpolated Symbols)</desc>
|
(Test8: DMRS Type B, 3 DMRS, 2 PTRS, 3 Interpolated Symbols),
|
||||||
|
(Test9: SC-FDMA, 50 PRBs),
|
||||||
|
(Test10: SC-FDMA, 75 PRBs),
|
||||||
|
(Test11: SC-FDMA, 3 DMRS)</desc>
|
||||||
<pre_compile_prog></pre_compile_prog>
|
<pre_compile_prog></pre_compile_prog>
|
||||||
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
||||||
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
||||||
@@ -1293,8 +1306,11 @@
|
|||||||
-n100 -m9 -R273 -r273 -s5
|
-n100 -m9 -R273 -r273 -s5
|
||||||
-n100 -s5 -T 2 1 2 -U 2 0 2
|
-n100 -s5 -T 2 1 2 -U 2 0 2
|
||||||
-n100 -s5 -T 2 2 2 -U 2 1 2
|
-n100 -s5 -T 2 2 2 -U 2 1 2
|
||||||
-n100 -s5 -a4 -b8 -T 2 1 2 -U 2 1 3</main_exec_args>
|
-n100 -s5 -a4 -b8 -T 2 1 2 -U 2 1 3
|
||||||
<tags>nr_ulsim.test1 nr_ulsim.test2 nr_ulsim.test3 nr_ulsim.test4 nr_ulsim.test5 nr_ulsim.test6 nr_ulsim.test7 nr_ulsim.test8</tags>
|
-n100 -s20 -Z
|
||||||
|
-n100 -s20 -Z -r75
|
||||||
|
-n100 -s20 -Z -U 2 0 2</main_exec_args>
|
||||||
|
<tags>nr_ulsim.test1 nr_ulsim.test2 nr_ulsim.test3 nr_ulsim.test4 nr_ulsim.test5 nr_ulsim.test6 nr_ulsim.test7 nr_ulsim.test8 nr_ulsim.test9 nr_ulsim.test10 nr_ulsim.test11</tags>
|
||||||
<search_expr_true>PUSCH test OK</search_expr_true>
|
<search_expr_true>PUSCH test OK</search_expr_true>
|
||||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||||
<nruns>3</nruns>
|
<nruns>3</nruns>
|
||||||
@@ -1302,10 +1318,12 @@
|
|||||||
|
|
||||||
<testCase id="015112">
|
<testCase id="015112">
|
||||||
<class>execution</class>
|
<class>execution</class>
|
||||||
<desc>nr_prachsim Test cases. (Test1: 106 PRBs - Prach format A2),
|
<desc>nr_prachsim Test cases. (Test1: 30kHz SCS, 106 PRBs, Prach format A2),
|
||||||
(Test2: 217 PRBs - Prach format A2),
|
(Test2: 30kHz SCS, 217 PRBs, Prach format A2),
|
||||||
(Test3: 273 PRBs - Prach format A2),
|
(Test3: 30kHz SCS, 273 PRBs, Prach format A2),
|
||||||
(Test4: 106 PRBs - Prach format 0)</desc>
|
(Test4: 30kHz SCS, 106 PRBs, Prach format 0),
|
||||||
|
(Test5: 120kHz SCS, 32 PRBs, Prach format A2),
|
||||||
|
(Test6: 120kHz SCS, 66 PRBs, Prach format A2)</desc>
|
||||||
<pre_compile_prog></pre_compile_prog>
|
<pre_compile_prog></pre_compile_prog>
|
||||||
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
||||||
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
||||||
@@ -1315,8 +1333,10 @@
|
|||||||
<main_exec_args>-a -s -30 -n 100 -p 63 -R 106
|
<main_exec_args>-a -s -30 -n 100 -p 63 -R 106
|
||||||
-a -s -30 -n 100 -p 63 -R 217
|
-a -s -30 -n 100 -p 63 -R 217
|
||||||
-a -s -30 -n 100 -p 63 -R 273
|
-a -s -30 -n 100 -p 63 -R 273
|
||||||
-a -s -30 -n 100 -p 63 -R 106 -c 4</main_exec_args>
|
-a -s -30 -n 100 -p 63 -R 106 -c 4
|
||||||
<tags>nr_prachsim.test1 nr_prachsim.test2 nr_prachsim.test3 nr_prachsim.test4</tags>
|
-a -s -30 -n 100 -p 32 -R 32 -m 3 -c52
|
||||||
|
-a -s -30 -n 100 -p 32 -R 66 -m 3 -c52</main_exec_args>
|
||||||
|
<tags>nr_prachsim.test1 nr_prachsim.test2 nr_prachsim.test3 nr_prachsim.test4 nr_prachsim.test5 nr_prachsim.test6</tags>
|
||||||
<search_expr_true>PRACH test OK</search_expr_true>
|
<search_expr_true>PRACH test OK</search_expr_true>
|
||||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||||
<nruns>3</nruns>
|
<nruns>3</nruns>
|
||||||
|
|||||||
+41
-23
@@ -42,7 +42,6 @@ MSC_GEN=0
|
|||||||
XFORMS="True"
|
XFORMS="True"
|
||||||
SKIP_SHARED_LIB_FLAG="False"
|
SKIP_SHARED_LIB_FLAG="False"
|
||||||
UE_EXPANSION="False"
|
UE_EXPANSION="False"
|
||||||
UESIM_EXPANSION="False"
|
|
||||||
PRINT_STATS="False"
|
PRINT_STATS="False"
|
||||||
VCD_TIMING="False"
|
VCD_TIMING="False"
|
||||||
DEADLINE_SCHEDULER_FLAG_USER=""
|
DEADLINE_SCHEDULER_FLAG_USER=""
|
||||||
@@ -67,6 +66,7 @@ UE_TIMING_TRACE="False"
|
|||||||
USRP_REC_PLAY="False"
|
USRP_REC_PLAY="False"
|
||||||
BUILD_ECLIPSE=0
|
BUILD_ECLIPSE=0
|
||||||
NR="False"
|
NR="False"
|
||||||
|
ITTI_SIM="False"
|
||||||
OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope msc"
|
OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope msc"
|
||||||
trap handle_ctrl_c INT
|
trap handle_ctrl_c INT
|
||||||
|
|
||||||
@@ -160,6 +160,8 @@ Options
|
|||||||
Build for I/Q record-playback modes
|
Build for I/Q record-playback modes
|
||||||
-k | --skip-shared-libraries
|
-k | --skip-shared-libraries
|
||||||
Skip build for shared libraries to reduce compilation time when building frequently for debugging purposes
|
Skip build for shared libraries to reduce compilation time when building frequently for debugging purposes
|
||||||
|
--ittiSIM
|
||||||
|
Makes the itti simulator
|
||||||
-h | --help
|
-h | --help
|
||||||
Print this help
|
Print this help
|
||||||
|
|
||||||
@@ -264,10 +266,6 @@ function main() {
|
|||||||
UE_EXPANSION="True"
|
UE_EXPANSION="True"
|
||||||
echo_info "Will compile with UE_EXPANSION"
|
echo_info "Will compile with UE_EXPANSION"
|
||||||
shift;;
|
shift;;
|
||||||
--musim)
|
|
||||||
UESIM_EXPANSION="True"
|
|
||||||
echo_info "Will compile with UESIM_EXPANSION"
|
|
||||||
shift;;
|
|
||||||
--UE-conf-nvram)
|
--UE-conf-nvram)
|
||||||
conf_nvram_path=$(readlink -f $2)
|
conf_nvram_path=$(readlink -f $2)
|
||||||
shift 2;;
|
shift 2;;
|
||||||
@@ -418,6 +416,11 @@ function main() {
|
|||||||
CMAKE_CMD="$CMAKE_CMD -GNinja"
|
CMAKE_CMD="$CMAKE_CMD -GNinja"
|
||||||
MAKE_CMD=ninja
|
MAKE_CMD=ninja
|
||||||
shift;;
|
shift;;
|
||||||
|
--ittiSIM)
|
||||||
|
ittiSIM=1
|
||||||
|
ITTI_SIM="True"
|
||||||
|
echo_info "Will compile itti simulator"
|
||||||
|
shift;;
|
||||||
-h | --help)
|
-h | --help)
|
||||||
print_help
|
print_help
|
||||||
exit 1;;
|
exit 1;;
|
||||||
@@ -488,11 +491,6 @@ function main() {
|
|||||||
echo_info "Flags for Deadline scheduler: $DEADLINE_SCHEDULER_FLAG_USER"
|
echo_info "Flags for Deadline scheduler: $DEADLINE_SCHEDULER_FLAG_USER"
|
||||||
echo_info "Flags for CPU Affinity: $CPU_AFFINITY_FLAG_USER"
|
echo_info "Flags for CPU Affinity: $CPU_AFFINITY_FLAG_USER"
|
||||||
|
|
||||||
if [ -n "$UHD_IMAGES_DIR" ] && [ -z "$INSTALL_EXTERNAL" ]; then
|
|
||||||
echo_error "UHD images download settings will not be applied without -I present"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
#######################################################
|
#######################################################
|
||||||
# Setting and printing OAI envs, we should check here #
|
# Setting and printing OAI envs, we should check here #
|
||||||
#######################################################
|
#######################################################
|
||||||
@@ -549,9 +547,10 @@ function main() {
|
|||||||
# flash_firmware_iris
|
# flash_firmware_iris
|
||||||
#fi
|
#fi
|
||||||
fi
|
fi
|
||||||
echo_info "installing protobuf/protobuf-c for flexran agent support"
|
echo_info "Installing protobuf/protobuf-c for flexran agent support"
|
||||||
install_protobuf_from_source
|
install_protobuf_from_source
|
||||||
install_protobuf_c_from_source
|
install_protobuf_c_from_source
|
||||||
|
echo_success "protobuf/protobuf-c installation successful"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$INSTALL_OPTIONAL" = "1" ] ; then
|
if [ "$INSTALL_OPTIONAL" = "1" ] ; then
|
||||||
@@ -580,7 +579,7 @@ function main() {
|
|||||||
config_libconfig_shlib=params_libconfig
|
config_libconfig_shlib=params_libconfig
|
||||||
|
|
||||||
# first generate the CMakefile in the right directory
|
# first generate the CMakefile in the right directory
|
||||||
if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HW" = "EXMIMO" ] ; then
|
if [ "$eNB" = "1" -o "$eNBocp" = "1" -o "$UE" = "1" -o "$gNB" = "1" -o "$nrUE" = "1" -o "$HW" = "EXMIMO" -o "$ittiSIM" = "1" ] ; then
|
||||||
|
|
||||||
# softmodem compilation
|
# softmodem compilation
|
||||||
|
|
||||||
@@ -592,7 +591,6 @@ function main() {
|
|||||||
echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
|
echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
|
||||||
# echo "set ( PHY_TX_THREAD $UE_EXPANSION )" >> $cmake_file
|
# echo "set ( PHY_TX_THREAD $UE_EXPANSION )" >> $cmake_file
|
||||||
echo "set ( PRE_SCD_THREAD $UE_EXPANSION )" >> $cmake_file
|
echo "set ( PRE_SCD_THREAD $UE_EXPANSION )" >> $cmake_file
|
||||||
echo "set ( UESIM_EXPANSION $UESIM_EXPANSION )" >> $cmake_file
|
|
||||||
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
|
echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file
|
||||||
echo "set ( RF_BOARD \"${HW}\")" >> $cmake_file
|
echo "set ( RF_BOARD \"${HW}\")" >> $cmake_file
|
||||||
echo "set ( TRANSP_PRO \"${TP}\")" >> $cmake_file
|
echo "set ( TRANSP_PRO \"${TP}\")" >> $cmake_file
|
||||||
@@ -605,6 +603,7 @@ function main() {
|
|||||||
echo "set ( UE_TIMING_TRACE $UE_TIMING_TRACE )" >> $cmake_file
|
echo "set ( UE_TIMING_TRACE $UE_TIMING_TRACE )" >> $cmake_file
|
||||||
echo "set ( USRP_REC_PLAY $USRP_REC_PLAY )" >> $cmake_file
|
echo "set ( USRP_REC_PLAY $USRP_REC_PLAY )" >> $cmake_file
|
||||||
echo "set ( SKIP_SHARED_LIB_FLAG $SKIP_SHARED_LIB_FLAG )" >> $cmake_file
|
echo "set ( SKIP_SHARED_LIB_FLAG $SKIP_SHARED_LIB_FLAG )" >> $cmake_file
|
||||||
|
echo "set ( ITTI_SIM $ITTI_SIM )" >> $cmake_file
|
||||||
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
|
echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file
|
||||||
cd $DIR/$build_dir/build
|
cd $DIR/$build_dir/build
|
||||||
eval $CMAKE_CMD
|
eval $CMAKE_CMD
|
||||||
@@ -626,6 +625,10 @@ function main() {
|
|||||||
execlist="$execlist nr-uesoftmodem"
|
execlist="$execlist nr-uesoftmodem"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$ittiSIM" = "1" ] ; then
|
||||||
|
execlist="$execlist nr-ittisim"
|
||||||
|
fi
|
||||||
|
|
||||||
for f in $execlist ; do
|
for f in $execlist ; do
|
||||||
echo_info "Compiling $f..."
|
echo_info "Compiling $f..."
|
||||||
compilations \
|
compilations \
|
||||||
@@ -647,14 +650,22 @@ function main() {
|
|||||||
$build_dir coding \
|
$build_dir coding \
|
||||||
libcoding.so $dbin/libcoding.so
|
libcoding.so $dbin/libcoding.so
|
||||||
|
|
||||||
compilations \
|
|
||||||
$build_dir nasmesh \
|
|
||||||
CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
|
|
||||||
|
|
||||||
compilations \
|
#check if we run inside a container or not
|
||||||
$build_dir rb_tool \
|
#IS_CONTAINER variable is defined in build_helper file
|
||||||
rb_tool $dbin/rb_tool
|
#compile nasmesh and rb_tool only if NOT running in a container
|
||||||
cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin
|
if [ $IS_CONTAINER -eq 0 ]
|
||||||
|
then
|
||||||
|
compilations \
|
||||||
|
$build_dir nasmesh \
|
||||||
|
CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
|
||||||
|
|
||||||
|
compilations \
|
||||||
|
$build_dir rb_tool \
|
||||||
|
rb_tool $dbin/rb_tool
|
||||||
|
|
||||||
|
cp $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 $dbin
|
||||||
|
fi #IS_CONTAINER
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
@@ -662,9 +673,16 @@ function main() {
|
|||||||
if [ "$UE" = 1 ] ; then
|
if [ "$UE" = 1 ] ; then
|
||||||
|
|
||||||
echo_info "Compiling UE specific part"
|
echo_info "Compiling UE specific part"
|
||||||
compilations \
|
|
||||||
$build_dir ue_ip \
|
if [ $IS_CONTAINER -eq 0 ]
|
||||||
CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
|
then
|
||||||
|
echo_info "Building ue_ip module"
|
||||||
|
compilations \
|
||||||
|
$build_dir ue_ip \
|
||||||
|
CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
|
||||||
|
else
|
||||||
|
echo_info "Bypassing ue_ip build"
|
||||||
|
fi #IS_CONTAINER
|
||||||
|
|
||||||
# mkdir -p $DIR/at_commands/build
|
# mkdir -p $DIR/at_commands/build
|
||||||
# cd $DIR/at_commands/build
|
# cd $DIR/at_commands/build
|
||||||
|
|||||||
+505
@@ -0,0 +1,505 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#/*
|
||||||
|
# * 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
|
||||||
|
# */
|
||||||
|
|
||||||
|
# brief
|
||||||
|
# authors Laurent Thomas
|
||||||
|
#
|
||||||
|
#######################################
|
||||||
|
if [ ! -f /etc/os-release ]; then
|
||||||
|
echo "No /etc/os-release file found. You're likely on an unsupported distro."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
OS_DISTRO=$(grep "^ID=" /etc/os-release | sed "s/ID=//" | sed "s/\"//g")
|
||||||
|
OS_RELEASE=$(grep "^VERSION_ID=" /etc/os-release | sed "s/VERSION_ID=//" | sed "s/\"//g")
|
||||||
|
case "$OS_DISTRO" in
|
||||||
|
ubuntu) OS_BASEDISTRO="debian"; INSTALLER="apt"; CMAKE="cmake" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
SUDO='sudo -E'
|
||||||
|
|
||||||
|
###############################
|
||||||
|
## echo and family
|
||||||
|
###############################
|
||||||
|
black='\E[30m'
|
||||||
|
red='\E[31m'
|
||||||
|
green='\E[32m'
|
||||||
|
yellow='\E[33m'
|
||||||
|
blue='\E[1;34m'
|
||||||
|
magenta='\E[35m'
|
||||||
|
cyan='\E[36m'
|
||||||
|
white='\E[37m'
|
||||||
|
reset_color='\E[00m'
|
||||||
|
COLORIZE=1
|
||||||
|
|
||||||
|
cecho() {
|
||||||
|
# Color-echo
|
||||||
|
# arg1 = message
|
||||||
|
# arg2 = color
|
||||||
|
local default_msg="No Message."
|
||||||
|
message=${1:-$default_msg}
|
||||||
|
color=${2:-$green}
|
||||||
|
[ "$COLORIZE" = "1" ] && message="$color$message$reset_color"
|
||||||
|
echo -e "$message"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
echo_error() { cecho "$* $red" ;}
|
||||||
|
echo_fatal() { cecho "$* $red"; exit 1 ;}
|
||||||
|
echo_warning() { cecho "$* $yellow" ;}
|
||||||
|
echo_success() { cecho "$* $green" ;}
|
||||||
|
echo_info() { cecho "$* $blue" ;}
|
||||||
|
|
||||||
|
########################
|
||||||
|
# distribution helpers #
|
||||||
|
########################
|
||||||
|
|
||||||
|
# This function return a string to identify the distribution we are running
|
||||||
|
# Examples:
|
||||||
|
# ubuntu16.04
|
||||||
|
# debian8.5
|
||||||
|
get_distribution_release() {
|
||||||
|
echo "$OS_DISTRO$OS_RELEASE"
|
||||||
|
}
|
||||||
|
|
||||||
|
check_supported_distribution() {
|
||||||
|
case $(get_distribution_release) in
|
||||||
|
"ubuntu20.04") return 0 ;;
|
||||||
|
esac
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
##################
|
||||||
|
# Error handlers #
|
||||||
|
##################
|
||||||
|
|
||||||
|
handler_EXIT() {
|
||||||
|
local exit_code=$?
|
||||||
|
[ "$exit_code" -eq 0 ] || echo_error "build have failed"
|
||||||
|
exit $exit_code
|
||||||
|
}
|
||||||
|
|
||||||
|
trap handler_EXIT EXIT
|
||||||
|
|
||||||
|
###########################
|
||||||
|
# Cleaners
|
||||||
|
###########################
|
||||||
|
|
||||||
|
clean_kernel() {
|
||||||
|
$SUDO modprobe ip_tables
|
||||||
|
$SUDO modprobe x_tables
|
||||||
|
$SUDO iptables -P INPUT ACCEPT
|
||||||
|
$SUDO iptables -F INPUT
|
||||||
|
$SUDO iptables -P OUTPUT ACCEPT
|
||||||
|
$SUDO iptables -F OUTPUT
|
||||||
|
$SUDO iptables -P FORWARD ACCEPT
|
||||||
|
$SUDO iptables -F FORWARD
|
||||||
|
$SUDO iptables -t nat -F
|
||||||
|
$SUDO iptables -t mangle -F
|
||||||
|
$SUDO iptables -t filter -F
|
||||||
|
$SUDO iptables -t raw -F
|
||||||
|
echo_info "Flushed iptables"
|
||||||
|
$SUDO rmmod nasmesh > /dev/null 2>&1
|
||||||
|
$SUDO rmmod oai_nw_drv > /dev/null 2>&1
|
||||||
|
$SUDO rmmod openair_rf > /dev/null 2>&1
|
||||||
|
$SUDO rmmod ue_ip > /dev/null 2>&1
|
||||||
|
echo_info "removed drivers from kernel"
|
||||||
|
}
|
||||||
|
|
||||||
|
clean_all_files() {
|
||||||
|
set_openair_env
|
||||||
|
rm -rf "$OPENAIR_DIR"/targets/bin/*
|
||||||
|
dir="$OPENAIR_DIR/cmake_targets"
|
||||||
|
rm -rf "$dir"/log/*
|
||||||
|
rm -rf "$dir"/ran_build/build
|
||||||
|
rm -rf "$dir"/ran_build_noLOG/build
|
||||||
|
rm -rf "$dir"/lte-simulators/build
|
||||||
|
rm -rf "$dir"/phy_simulators/build
|
||||||
|
rm -rf "$dir"/nas_sim_tools/build
|
||||||
|
rm -rf "$dir"/oaisim_build_oai/build
|
||||||
|
rm -rf "$dir"/oaisim_build_oai/CMakeLists.txt
|
||||||
|
rm -rf "$dir"/autotests/bin
|
||||||
|
rm -rf "$dir"/autotests/log
|
||||||
|
rm -rf "$dir"/autotests/*/build
|
||||||
|
}
|
||||||
|
|
||||||
|
############################################
|
||||||
|
# External packages installers
|
||||||
|
############################################
|
||||||
|
|
||||||
|
install_protobuf_from_source(){
|
||||||
|
protobuf_install_log=$OPENAIR_DIR/cmake_targets/log/protobuf_install_log.txt
|
||||||
|
echo_info "\nInstalling Google Protobuf from sources. The log file for Protobuf installation is here: $protobuf_install_log "
|
||||||
|
(
|
||||||
|
cd /tmp || exit
|
||||||
|
echo "Downloading protobuf"
|
||||||
|
#rm -rf /tmp/protobuf-2.6.1.tar.gz* /tmp/protobuf-2.6.1
|
||||||
|
#wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz
|
||||||
|
#tar -xzvf protobuf-2.6.1.tar.gz --owner $USER --group $USER --no-same-owner
|
||||||
|
#cd protobuf-2.6.1/
|
||||||
|
rm -rf /tmp/protobuf-cpp-3.3.0.tar.gz* /tmp/protobuf-3.3.0
|
||||||
|
wget --tries=3 --retry-connrefused https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz
|
||||||
|
tar -xzvf protobuf-cpp-3.3.0.tar.gz --owner "$USER" --group "$(groups | cut -d" " -f1)" --no-same-owner
|
||||||
|
cd protobuf-3.3.0/ || exit
|
||||||
|
./configure
|
||||||
|
echo "Compiling protobuf"
|
||||||
|
make -j"$(nproc)"
|
||||||
|
$SUDO make install
|
||||||
|
$SUDO ldconfig
|
||||||
|
) >& "$protobuf_install_log"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_protobuf_c_from_source(){
|
||||||
|
protobuf_c_install_log=$OPENAIR_DIR/cmake_targets/log/protobuf_c_install_log.txt
|
||||||
|
echo_info "\nInstalling Google Protobuf_C from sources. The log file for Protobuf_C installation is here: $protobuf_c_install_log "
|
||||||
|
(
|
||||||
|
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
|
||||||
|
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
|
||||||
|
fi
|
||||||
|
cd /tmp || exit
|
||||||
|
echo "Downloading protobuf-c"
|
||||||
|
rm -rf /tmp/protobuf-c
|
||||||
|
git clone https://github.com/protobuf-c/protobuf-c.git
|
||||||
|
cd protobuf-c || exit
|
||||||
|
git checkout 2a46af42784abf86804d536f6e0122d47cfeea45
|
||||||
|
./autogen.sh
|
||||||
|
./configure
|
||||||
|
echo "Compiling protobuf-c"
|
||||||
|
make -j"$(nproc)"
|
||||||
|
$SUDO make install
|
||||||
|
$SUDO ldconfig
|
||||||
|
) >& "$protobuf_c_install_log"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_usrp_uhd_driver_from_source(){
|
||||||
|
uhd_install_log=$OPENAIR_DIR/cmake_targets/log/uhd_install_log.txt
|
||||||
|
echo_info "\nInstalling UHD driver from sources. The log file for UHD driver installation is here: $uhd_install_log "
|
||||||
|
(
|
||||||
|
cd /tmp || exit
|
||||||
|
echo "Downloading UHD driver"
|
||||||
|
rm -rf /tmp/uhd
|
||||||
|
git clone https://github.com/EttusResearch/uhd.git
|
||||||
|
cd uhd || exit
|
||||||
|
git checkout tags/v3.13.0.2
|
||||||
|
mkdir -p host/build
|
||||||
|
cd host/build || exit
|
||||||
|
$CMAKE ../
|
||||||
|
echo "Compiling UHD"
|
||||||
|
make -j"$(nproc)"
|
||||||
|
make test
|
||||||
|
$SUDO make install
|
||||||
|
$SUDO ldconfig
|
||||||
|
) >& "$uhd_install_log"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_bladerf_driver_from_source(){
|
||||||
|
bladerf_install_log=$OPENAIR_DIR/cmake_targets/log/bladerf_install_log.txt
|
||||||
|
echo_info "\nInstalling BladeRF driver from sources. The log file for BladeRF driver installation is here: $bladerf_install_log "
|
||||||
|
(
|
||||||
|
cd /tmp || exit
|
||||||
|
echo "Downloading BladeRF driver"
|
||||||
|
rm -rf /tmp/bladeRF
|
||||||
|
git clone https://github.com/Nuand/bladeRF.git
|
||||||
|
cd bladeRF || exit
|
||||||
|
git checkout tags/2016.06
|
||||||
|
mkdir -p build
|
||||||
|
cd build || exit
|
||||||
|
$CMAKE ../
|
||||||
|
echo "Compiling BladeRF driver"
|
||||||
|
make -j"$(nproc)"
|
||||||
|
$SUDO make install
|
||||||
|
$SUDO ldconfig
|
||||||
|
echo "Downloading FPGA and firmware images"
|
||||||
|
cd /tmp/bladeRF || exit
|
||||||
|
wget --tries=3 --retry-connrefused https://www.nuand.com/fx3/bladeRF_fw_latest.img
|
||||||
|
wget --tries=3 --retry-connrefused https://www.nuand.com/fpga/hostedx40-latest.rbf
|
||||||
|
sudo mkdir -p /usr/share/Nuand/bladeRF
|
||||||
|
sudo mv bladeRF_fw_latest.img /usr/share/Nuand/bladeRF/bladeRF_fw.img
|
||||||
|
sudo mv hostedx40-latest.rbf /usr/share/Nuand/bladeRF/hostedx40.rbf
|
||||||
|
) >& "$bladerf_install_log"
|
||||||
|
}
|
||||||
|
|
||||||
|
check_install_bladerf_driver(){
|
||||||
|
if [[ "$OS_DISTRO" == "ubuntu" ]]; then
|
||||||
|
$SUDO apt-get install -y bladerf libbladerf-dev
|
||||||
|
$SUDO apt-get install -y bladerf-firmware-fx3
|
||||||
|
$SUDO apt-get install -y bladerf-fpga-hostedx40
|
||||||
|
elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
|
||||||
|
install_bladerf_driver_from_source
|
||||||
|
else
|
||||||
|
echo_error "BladeRF Installer for OAI does not support automatic build. Install BladeRF compiling sources manually from BladeRF website"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
flash_firmware_bladerf() {
|
||||||
|
$SUDO bladeRF-cli --flash-firmware /usr/share/Nuand/bladeRF/bladeRF_fw.img
|
||||||
|
}
|
||||||
|
|
||||||
|
install_soapy_from_source(){
|
||||||
|
soapy_install_log=$OPENAIR_DIR/cmake_targets/log/soapy_install_log.txt
|
||||||
|
echo_info "\nInstalling Soapy EcoSystem from source. The log file for Soapy installation is here: $soapy_install_log "
|
||||||
|
(
|
||||||
|
cd /tmp || exit
|
||||||
|
echo "Downloading SoapySDR"
|
||||||
|
rm -rf /tmp/soapysdr
|
||||||
|
git clone -b soapy-sdr-0.7.0 --single-branch https://github.com/pothosware/SoapySDR.git
|
||||||
|
cd SoapySDR || exit
|
||||||
|
#git checkout tags/release_003_010_001_001
|
||||||
|
mkdir -p build
|
||||||
|
cd build || exit
|
||||||
|
$CMAKE ../
|
||||||
|
echo "Compiling SoapySDR"
|
||||||
|
make -j"$(nproc)"
|
||||||
|
$SUDO make install
|
||||||
|
$SUDO ldconfig
|
||||||
|
cd /tmp || exit
|
||||||
|
echo "Downloading SoapyRemote"
|
||||||
|
rm -rf /tmp/soapyremote
|
||||||
|
git clone -b soapy-remote-0.5.0 --single-branch https://github.com/pothosware/SoapyRemote.git
|
||||||
|
cd SoapyRemote || exit
|
||||||
|
#git checkout tags/release_003_010_001_001
|
||||||
|
mkdir -p build
|
||||||
|
cd build || exit
|
||||||
|
cmake ../
|
||||||
|
echo "Compiling SoapyRemote"
|
||||||
|
make -j"$(nproc)"
|
||||||
|
$SUDO make install
|
||||||
|
$SUDO ldconfig
|
||||||
|
) >& "$soapy_install_log"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_soapy_iris_from_source(){
|
||||||
|
iris_install_log=$OPENAIR_DIR/cmake_targets/log/iris_install_log.txt
|
||||||
|
echo_info "\nInstalling Iris driver from source. The log file for Iris driver installation is here: $iris_install_log "
|
||||||
|
(
|
||||||
|
cd /tmp || exit
|
||||||
|
echo "Downloading SoapyIris"
|
||||||
|
rm -rf /tmp/sklk-soapyiris
|
||||||
|
git clone -b soapy-iris-2018.08.0.1 --single-branch https://github.com/skylarkwireless/sklk-soapyiris.git
|
||||||
|
cd sklk-soapyiris || exit
|
||||||
|
mkdir -p build
|
||||||
|
cd build ||exit
|
||||||
|
cmake ../
|
||||||
|
echo "Compiling SoapyIris"
|
||||||
|
make -j"$(nproc)"
|
||||||
|
$SUDO make install
|
||||||
|
$SUDO ldconfig
|
||||||
|
) >& "$iris_install_log"
|
||||||
|
}
|
||||||
|
|
||||||
|
check_install_soapy () {
|
||||||
|
#if [[ "$OS_DISTRO" == "ubuntu" ]]; then
|
||||||
|
#first we remove old installation
|
||||||
|
$SUDO apt-get remove -y soapysdr soapysdr-server libsoapysdr-dev python-soapysdr python3-soapysdr soapysdr-module-remote || true
|
||||||
|
#$SUDO add-apt-repository -y ppa:myriadrf/drivers
|
||||||
|
#$SUDO apt-get update
|
||||||
|
#$SUDO apt-get install -y soapysdr soapysdr-server libsoapysdr-dev python-soapysdr python3-soapysdr soapysdr-module-remote
|
||||||
|
|
||||||
|
#elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
|
||||||
|
# $SUDO $INSTALLER -y install software-properties-common python3-software-properties python-software-properties subversion git python3 python-numpy python3-numpy cmake swig python-dev
|
||||||
|
install_soapy_from_source
|
||||||
|
#fi
|
||||||
|
install_soapy_iris_from_source
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
check_install_ubuntu_packages() {
|
||||||
|
$SUDO $INSTALLER update -y
|
||||||
|
if [[ "$OS_DISTRO" == "ubuntu" ]]; then
|
||||||
|
local LAPACK_LIBNAME="liblapack.so"
|
||||||
|
local LAPACK_TARGET="/usr/lib/atlas-base/atlas/liblapack.so"
|
||||||
|
$SUDO apt install -y software-properties-common
|
||||||
|
case "$(get_distribution_release)" in
|
||||||
|
"ubuntu20.04")
|
||||||
|
specific_packages="libtasn1-6-dev libgnutls28-dev iproute2 libconfig-dev"
|
||||||
|
LAPACK_LIBNAME="liblapack.so-x86_64-linux-gnu"
|
||||||
|
LAPACK_TARGET="/usr/lib/x86_64-linux-gnu/atlas/liblapack.so"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
$SUDO $INSTALLER install -y \
|
||||||
|
$specific_packages \
|
||||||
|
check \
|
||||||
|
dialog \
|
||||||
|
dkms \
|
||||||
|
gawk \
|
||||||
|
libboost-all-dev \
|
||||||
|
libpthread-stubs0-dev \
|
||||||
|
openvpn \
|
||||||
|
pkg-config \
|
||||||
|
python3-dev \
|
||||||
|
python-pexpect \
|
||||||
|
sshfs \
|
||||||
|
swig \
|
||||||
|
tshark \
|
||||||
|
uml-utilities \
|
||||||
|
unzip \
|
||||||
|
valgrind \
|
||||||
|
vlan \
|
||||||
|
exuberant-ctags \
|
||||||
|
ntpdate \
|
||||||
|
iperf3 \
|
||||||
|
android-tools-adb \
|
||||||
|
wvdial \
|
||||||
|
python-numpy \
|
||||||
|
sshpass \
|
||||||
|
nscd \
|
||||||
|
bc \
|
||||||
|
ntp \
|
||||||
|
python3-scipy \
|
||||||
|
python3-matplotlib \
|
||||||
|
bison \
|
||||||
|
build-essential \
|
||||||
|
cmake \
|
||||||
|
cmake-curses-gui \
|
||||||
|
ninja-build \
|
||||||
|
doxygen \
|
||||||
|
doxygen-gui \
|
||||||
|
texlive-latex-base \
|
||||||
|
ethtool \
|
||||||
|
flex \
|
||||||
|
gdb \
|
||||||
|
git \
|
||||||
|
graphviz \
|
||||||
|
gtkwave \
|
||||||
|
guile-2.0-dev \
|
||||||
|
iperf \
|
||||||
|
iptables \
|
||||||
|
libxtables-dev \
|
||||||
|
libatlas-base-dev \
|
||||||
|
libblas-dev \
|
||||||
|
liblapack-dev\
|
||||||
|
liblapacke-dev\
|
||||||
|
libffi-dev \
|
||||||
|
libforms-bin \
|
||||||
|
libforms-dev \
|
||||||
|
libgcrypt20-dev \
|
||||||
|
libgmp-dev \
|
||||||
|
libgtk-3-dev \
|
||||||
|
libidn2-0-dev \
|
||||||
|
libidn11-dev \
|
||||||
|
libmysqlclient-dev \
|
||||||
|
libpython2.7-dev \
|
||||||
|
libsctp1 \
|
||||||
|
libsctp-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libtool \
|
||||||
|
libusb-1.0-0-dev \
|
||||||
|
libxml2 \
|
||||||
|
libxml2-dev \
|
||||||
|
libxslt1-dev \
|
||||||
|
mscgen \
|
||||||
|
octave-signal \
|
||||||
|
openssh-client \
|
||||||
|
openssh-server \
|
||||||
|
openssl \
|
||||||
|
python3 \
|
||||||
|
subversion \
|
||||||
|
xmlstarlet \
|
||||||
|
python3-pip \
|
||||||
|
libyaml-dev \
|
||||||
|
wget \
|
||||||
|
libxpm-dev \
|
||||||
|
libboost-all-dev \
|
||||||
|
nettle-dev \
|
||||||
|
nettle-bin
|
||||||
|
fi
|
||||||
|
|
||||||
|
$SUDO update-alternatives --set "$LAPACK_LIBNAME" "$LAPACK_TARGET"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
install_asn1c_from_source(){
|
||||||
|
asn1_install_log=$OPENAIR_DIR/cmake_targets/log/asn1c_install_log.txt
|
||||||
|
echo_info "\nInstalling ASN1. The log file for ASN1 installation is here: $asn1_install_log "
|
||||||
|
(
|
||||||
|
$SUDO rm -rf /tmp/asn1c
|
||||||
|
# GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c
|
||||||
|
git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c
|
||||||
|
cd /tmp/asn1c || exit
|
||||||
|
# better to use a given commit than a branch in case the branch
|
||||||
|
# is updated and requires modifications in the source of OAI
|
||||||
|
#git checkout velichkov_s1ap_plus_option_group
|
||||||
|
git checkout f12568d617dbf48497588f8e227d70388fa217c9
|
||||||
|
autoreconf -iv
|
||||||
|
./configure
|
||||||
|
make -j"$(nproc)"
|
||||||
|
$SUDO make install
|
||||||
|
cd - || exit
|
||||||
|
$SUDO ldconfig
|
||||||
|
) > "$asn1_install_log" 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# 2. compile
|
||||||
|
################################################
|
||||||
|
|
||||||
|
install_nas_tools() {
|
||||||
|
echo_success "generate .ue_emm.nvram .ue.nvram"
|
||||||
|
./nvram --gen -c "$1" -o "$2"
|
||||||
|
./usim --gen -c "$1" -o "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
################################
|
||||||
|
# set_openair_env
|
||||||
|
###############################
|
||||||
|
set_openair_env(){
|
||||||
|
fullpath=$(readlink -f "${BASH_SOURCE[0]}")
|
||||||
|
[ -f "/.$fullpath" ] || fullpath=$(readlink -f "$PWD/$fullpath")
|
||||||
|
openair_path=${fullpath%/cmake_targets/*}
|
||||||
|
openair_path=${openair_path%/targets/*}
|
||||||
|
openair_path=${openair_path%/openair[123]/*}
|
||||||
|
export OPENAIR_DIR=$openair_path
|
||||||
|
export OPENAIR1_DIR=$openair_path/openair1
|
||||||
|
export OPENAIR2_DIR=$openair_path/openair2
|
||||||
|
export OPENAIR3_DIR=$openair_path/openair3
|
||||||
|
export OPENAIR_TARGETS=$openair_path/targets
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! check_supported_distribution; then
|
||||||
|
echo_error "Your distribution $(get_distribution_release) is not supported by oai !"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo_info "Installing packages"
|
||||||
|
check_install_ubuntu_packages
|
||||||
|
|
||||||
|
echo_info "installing ASN.1 compiler"
|
||||||
|
install_asn1c_from_source
|
||||||
|
|
||||||
|
echo_info "installing protobuf/protobuf-c for flexran agent support"
|
||||||
|
install_protobuf_from_source
|
||||||
|
install_protobuf_c_from_source
|
||||||
|
|
||||||
|
if [ "$1" == "USRP" ] ; then
|
||||||
|
echo_info "installing packages for USRP support"
|
||||||
|
install_usrp_uhd_driver
|
||||||
|
fi
|
||||||
|
if [ "$1" == "BLADERF" ] ; then
|
||||||
|
echo_info "installing packages for BLADERF support"
|
||||||
|
check_install_bladerf_driver
|
||||||
|
flash_firmware_bladerf
|
||||||
|
fi
|
||||||
|
if [ "$1" == "IRIS" ] ; then
|
||||||
|
echo_info "installing packages for IRIS support"
|
||||||
|
check_install_soapy
|
||||||
|
# flash_firmware_iris
|
||||||
|
fi
|
||||||
@@ -4,7 +4,6 @@ set ( CMAKE_BUILD_TYPE )
|
|||||||
set ( CFLAGS_PROCESSOR_USER "" )
|
set ( CFLAGS_PROCESSOR_USER "" )
|
||||||
set ( UE_EXPANSION False )
|
set ( UE_EXPANSION False )
|
||||||
set ( PRE_SCD_THREAD False )
|
set ( PRE_SCD_THREAD False )
|
||||||
set ( UESIM_EXPANSION False )
|
|
||||||
set ( ENABLE_VCD_FIFO False )
|
set ( ENABLE_VCD_FIFO False )
|
||||||
set ( RF_BOARD "None")
|
set ( RF_BOARD "None")
|
||||||
set ( TRANSP_PRO "None")
|
set ( TRANSP_PRO "None")
|
||||||
@@ -17,4 +16,5 @@ set ( UE_DEBUG_TRACE False )
|
|||||||
set ( UE_TIMING_TRACE False )
|
set ( UE_TIMING_TRACE False )
|
||||||
set ( USRP_REC_PLAY False )
|
set ( USRP_REC_PLAY False )
|
||||||
set ( SKIP_SHARED_LIB_FLAG False )
|
set ( SKIP_SHARED_LIB_FLAG False )
|
||||||
|
set ( PHYSIM True)
|
||||||
include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)
|
include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)
|
||||||
|
|||||||
@@ -40,7 +40,15 @@ esac
|
|||||||
KERNEL_VERSION=$(uname -r | cut -d '.' -f1)
|
KERNEL_VERSION=$(uname -r | cut -d '.' -f1)
|
||||||
KERNEL_MAJOR=$(uname -r | cut -d '.' -f2)
|
KERNEL_MAJOR=$(uname -r | cut -d '.' -f2)
|
||||||
|
|
||||||
SUDO='sudo -E'
|
#check if we run inside a container
|
||||||
|
IS_CONTAINER=`egrep -c "docker|podman|kubepods" /proc/self/cgroup || true`
|
||||||
|
#sudo is not needed when we are root
|
||||||
|
if [ "$UID" = 0 ]
|
||||||
|
then
|
||||||
|
SUDO=''
|
||||||
|
else
|
||||||
|
SUDO='sudo -S -E'
|
||||||
|
fi
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
## echo and family
|
## echo and family
|
||||||
@@ -104,6 +112,10 @@ check_supported_distribution() {
|
|||||||
"rhel7") return 0 ;;
|
"rhel7") return 0 ;;
|
||||||
"rhel7.6") return 0 ;;
|
"rhel7.6") return 0 ;;
|
||||||
"rhel7.7") return 0 ;;
|
"rhel7.7") return 0 ;;
|
||||||
|
"rhel7.8") return 0 ;;
|
||||||
|
"rhel8.2") return 0 ;;
|
||||||
|
"rhel8.3") return 0 ;;
|
||||||
|
"rhel8.4") return 0 ;;
|
||||||
"centos7") return 0 ;;
|
"centos7") return 0 ;;
|
||||||
esac
|
esac
|
||||||
return 1
|
return 1
|
||||||
@@ -241,10 +253,21 @@ install_protobuf_from_source(){
|
|||||||
#wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz
|
#wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz
|
||||||
#tar -xzvf protobuf-2.6.1.tar.gz --owner $USER --group $USER --no-same-owner
|
#tar -xzvf protobuf-2.6.1.tar.gz --owner $USER --group $USER --no-same-owner
|
||||||
#cd protobuf-2.6.1/
|
#cd protobuf-2.6.1/
|
||||||
rm -rf /tmp/protobuf-cpp-3.3.0.tar.gz* /tmp/protobuf-3.3.0
|
|
||||||
wget --tries=3 --retry-connrefused https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz
|
if [ $IS_CONTAINER -eq 0 ]
|
||||||
tar -xzvf protobuf-cpp-3.3.0.tar.gz --owner $USER --group $(groups | cut -d" " -f1) --no-same-owner
|
then
|
||||||
cd protobuf-3.3.0/
|
rm -rf /tmp/protobuf-cpp-3.3.0.tar.gz* /tmp/protobuf-3.3.0
|
||||||
|
wget --tries=3 --retry-connrefused https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz
|
||||||
|
tar -xzvf protobuf-cpp-3.3.0.tar.gz --owner $(id -u) --group $(id -g) --no-same-owner
|
||||||
|
cd protobuf-3.3.0/
|
||||||
|
else
|
||||||
|
export LD_LIBRARY_PATH=/usr/local/lib #protoc needs to know where toclook for shared libs
|
||||||
|
rm -rf /tmp/protobuf
|
||||||
|
git clone --depth=1 --branch=v3.3.0 https://github.com/protocolbuffers/protobuf.git /tmp/protobuf
|
||||||
|
cd /tmp/protobuf
|
||||||
|
git submodule update --init --recursive
|
||||||
|
./autogen.sh
|
||||||
|
fi
|
||||||
./configure
|
./configure
|
||||||
echo "Compiling protobuf"
|
echo "Compiling protobuf"
|
||||||
make -j`nproc`
|
make -j`nproc`
|
||||||
@@ -279,12 +302,12 @@ install_usrp_uhd_driver_from_source(){
|
|||||||
uhd_install_log=$OPENAIR_DIR/cmake_targets/log/uhd_install_log.txt
|
uhd_install_log=$OPENAIR_DIR/cmake_targets/log/uhd_install_log.txt
|
||||||
echo_info "\nInstalling UHD driver from sources. The log file for UHD driver installation is here: $uhd_install_log "
|
echo_info "\nInstalling UHD driver from sources. The log file for UHD driver installation is here: $uhd_install_log "
|
||||||
(
|
(
|
||||||
cd /tmp
|
pushd /tmp
|
||||||
echo "Downloading UHD driver"
|
echo "Downloading UHD driver"
|
||||||
rm -rf /tmp/uhd
|
rm -rf /tmp/uhd
|
||||||
git clone https://github.com/EttusResearch/uhd.git
|
git clone https://github.com/EttusResearch/uhd.git
|
||||||
cd uhd
|
cd uhd
|
||||||
git checkout tags/v3.13.0.2
|
git checkout tags/v4.0.0.0
|
||||||
mkdir -p host/build
|
mkdir -p host/build
|
||||||
cd host/build
|
cd host/build
|
||||||
$CMAKE ../
|
$CMAKE ../
|
||||||
@@ -292,7 +315,9 @@ install_usrp_uhd_driver_from_source(){
|
|||||||
make -j`nproc`
|
make -j`nproc`
|
||||||
make test
|
make test
|
||||||
$SUDO make install
|
$SUDO make install
|
||||||
$SUDO ldconfig
|
$SUDO ldconfig -v
|
||||||
|
popd
|
||||||
|
rm -rf /tmp/uhd
|
||||||
) >& $uhd_install_log
|
) >& $uhd_install_log
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,11 +349,20 @@ check_install_usrp_uhd_driver(){
|
|||||||
$SUDO apt-get -y install python python-tk libboost-all-dev libusb-1.0-0-dev
|
$SUDO apt-get -y install python python-tk libboost-all-dev libusb-1.0-0-dev
|
||||||
$SUDO apt-get -y install libuhd-dev libuhd003 uhd-host
|
$SUDO apt-get -y install libuhd-dev libuhd003 uhd-host
|
||||||
elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
|
elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then
|
||||||
$SUDO $INSTALLER -y install python boost libusb-devel libusbx-devel boost-devel python-mako python-docutils cmake
|
if [ $IS_CONTAINER -eq 0 ]
|
||||||
$SUDO -H pip install requests
|
then
|
||||||
|
$SUDO $INSTALLER -y install python boost libusb-devel libusbx-devel boost-devel python-mako python-docutils cmake
|
||||||
|
$SUDO -H pip install requests
|
||||||
|
else
|
||||||
|
$SUDO $INSTALLER -y install boost boost-devel cmake3
|
||||||
|
$SUDO pip3 install mako requests
|
||||||
|
fi
|
||||||
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
|
if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
|
||||||
# until EPEL repo hasn't bumped UHD driver to >=3.10 in EPEL, build driver from source
|
if [ $IS_CONTAINER -eq 0 ]
|
||||||
$SUDO $INSTALLER -y remove uhd uhd-devel uhd-firmware
|
then
|
||||||
|
# until EPEL repo hasn't bumped UHD driver to >=3.10 in EPEL, build driver from source
|
||||||
|
$SUDO $INSTALLER -y remove uhd uhd-devel uhd-firmware
|
||||||
|
fi
|
||||||
install_usrp_uhd_driver_from_source
|
install_usrp_uhd_driver_from_source
|
||||||
else
|
else
|
||||||
$SUDO $INSTALLER -y install uhd uhd-devel uhd-firmware
|
$SUDO $INSTALLER -y install uhd uhd-devel uhd-firmware
|
||||||
@@ -750,6 +784,8 @@ check_install_oai_software() {
|
|||||||
libxml2 \
|
libxml2 \
|
||||||
libxml2-devel \
|
libxml2-devel \
|
||||||
libxslt-devel \
|
libxslt-devel \
|
||||||
|
ninja-build \
|
||||||
|
make \
|
||||||
openssh-clients \
|
openssh-clients \
|
||||||
openssh-server \
|
openssh-server \
|
||||||
openssl \
|
openssl \
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ if [ "$done_flag" -ot $ASN1_SOURCE_DIR ] ; then
|
|||||||
sed -i 's/18446744073709551615))/18446744073709551615U))/g' "$GENERATED_FULL_DIR"/${ASN1C_PREFIX}E-RABUsageReportItem.c
|
sed -i 's/18446744073709551615))/18446744073709551615U))/g' "$GENERATED_FULL_DIR"/${ASN1C_PREFIX}E-RABUsageReportItem.c
|
||||||
sed -i 's/18446744073709551615 }/18446744073709551615U }/g' "$GENERATED_FULL_DIR"/${ASN1C_PREFIX}E-RABUsageReportItem.c
|
sed -i 's/18446744073709551615 }/18446744073709551615U }/g' "$GENERATED_FULL_DIR"/${ASN1C_PREFIX}E-RABUsageReportItem.c
|
||||||
fi
|
fi
|
||||||
|
if [ "$ASN1C_PREFIX" = "NGAP_" ] ; then
|
||||||
|
sed -i 's/18446744073709551615))/18446744073709551615U))/g' "$GENERATED_FULL_DIR"/${ASN1C_PREFIX}VolumeTimedReport-Item.c
|
||||||
|
sed -i 's/18446744073709551615 }/18446744073709551615U }/g' "$GENERATED_FULL_DIR"/${ASN1C_PREFIX}VolumeTimedReport-Item.c
|
||||||
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
touch $done_flag
|
touch $done_flag
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
#include "NwGtpv1uMsg.h"
|
#include "NwGtpv1uMsg.h"
|
||||||
#include "NwGtpv1uPrivate.h"
|
#include "NwGtpv1uPrivate.h"
|
||||||
#include "gtpv1u_eNB_defs.h"
|
#include "gtpv1u_eNB_defs.h"
|
||||||
|
#include "gtpv1u_gNB_defs.h"
|
||||||
|
|
||||||
#include "PHY/defs_L1_NB_IoT.h"
|
#include "PHY/defs_L1_NB_IoT.h"
|
||||||
#include "RRC/LTE/defs_NB_IoT.h"
|
#include "RRC/LTE/defs_NB_IoT.h"
|
||||||
@@ -109,6 +110,8 @@ typedef struct {
|
|||||||
struct gNB_MAC_INST_s **nrmac;
|
struct gNB_MAC_INST_s **nrmac;
|
||||||
/// GTPu descriptor
|
/// GTPu descriptor
|
||||||
gtpv1u_data_t *gtpv1u_data_g;
|
gtpv1u_data_t *gtpv1u_data_g;
|
||||||
|
/// NR GTPu descriptor
|
||||||
|
nr_gtpv1u_data_t *nr_gtpv1u_data_g;
|
||||||
/// RU descriptors. These describe what each radio unit is supposed to do and contain the necessary functions for fronthaul interfaces
|
/// RU descriptors. These describe what each radio unit is supposed to do and contain the necessary functions for fronthaul interfaces
|
||||||
struct RU_t_s **ru;
|
struct RU_t_s **ru;
|
||||||
/// Mask to indicate fronthaul setup status of RU (hard-limit to 64 RUs)
|
/// Mask to indicate fronthaul setup status of RU (hard-limit to 64 RUs)
|
||||||
|
|||||||
@@ -445,6 +445,7 @@ int logInit (void)
|
|||||||
register_log_component("NR_RRC","log",NR_RRC);
|
register_log_component("NR_RRC","log",NR_RRC);
|
||||||
register_log_component("NR_MAC","log",NR_MAC);
|
register_log_component("NR_MAC","log",NR_MAC);
|
||||||
register_log_component("NR_PHY","log",NR_PHY);
|
register_log_component("NR_PHY","log",NR_PHY);
|
||||||
|
register_log_component("NGAP","",NGAP);
|
||||||
|
|
||||||
for (int i=0 ; log_level_names[i].name != NULL ; i++)
|
for (int i=0 ; log_level_names[i].name != NULL ; i++)
|
||||||
g_log->level2string[i] = toupper(log_level_names[i].name[0]); // uppercased first letter of level name
|
g_log->level2string[i] = toupper(log_level_names[i].name[0]); // uppercased first letter of level name
|
||||||
|
|||||||
+15
-9
@@ -148,6 +148,7 @@ extern "C" {
|
|||||||
#define DEBUG_SECURITY (1<<11)
|
#define DEBUG_SECURITY (1<<11)
|
||||||
#define DEBUG_NAS (1<<12)
|
#define DEBUG_NAS (1<<12)
|
||||||
#define DEBUG_RLC (1<<13)
|
#define DEBUG_RLC (1<<13)
|
||||||
|
#define DEBUG_DLSCH_DECOD (1<<14)
|
||||||
#define UE_TIMING (1<<20)
|
#define UE_TIMING (1<<20)
|
||||||
|
|
||||||
|
|
||||||
@@ -166,6 +167,7 @@ extern "C" {
|
|||||||
{"SECURITY", DEBUG_SECURITY},\
|
{"SECURITY", DEBUG_SECURITY},\
|
||||||
{"NAS", DEBUG_NAS},\
|
{"NAS", DEBUG_NAS},\
|
||||||
{"RLC", DEBUG_RLC},\
|
{"RLC", DEBUG_RLC},\
|
||||||
|
{"DLSCH_DECOD", DEBUG_DLSCH_DECOD},\
|
||||||
{"UE_TIMING", UE_TIMING},\
|
{"UE_TIMING", UE_TIMING},\
|
||||||
{NULL,-1}\
|
{NULL,-1}\
|
||||||
}
|
}
|
||||||
@@ -226,6 +228,7 @@ typedef enum {
|
|||||||
X2AP,
|
X2AP,
|
||||||
M2AP,
|
M2AP,
|
||||||
M3AP,
|
M3AP,
|
||||||
|
NGAP,
|
||||||
GNB_APP,
|
GNB_APP,
|
||||||
NR_RRC,
|
NR_RRC,
|
||||||
NR_MAC,
|
NR_MAC,
|
||||||
@@ -397,18 +400,21 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
/* define variable only used in LOG macro's */
|
/* define variable only used in LOG macro's */
|
||||||
# define LOG_VAR(A,B) A B
|
# define LOG_VAR(A,B) A B
|
||||||
# else /* T_TRACER: remove all debugging and tracing messages, except errors */
|
# else /* T_TRACER: remove all debugging and tracing messages, except errors */
|
||||||
# define LOG_I(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ; } while(0)/* */
|
|
||||||
# define LOG_W(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ; } while(0)/* */
|
|
||||||
# define LOG_E(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ; } while(0)/* */
|
|
||||||
# define LOG_D(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ; } while(0)/* */
|
|
||||||
# define LOG_T(c, x...) /* */
|
|
||||||
|
|
||||||
# define LOG_DUMPMSG(c, b, s, x...) /* */
|
# define LOG_E(c, x...) do { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} while (0)
|
||||||
|
# define LOG_W(c, x...) do { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} while (0)
|
||||||
|
# define LOG_I(c, x...) do { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} while (0)
|
||||||
|
# define LOG_D(c, x...) do { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} while (0)
|
||||||
|
# define LOG_T(c, x...) do { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} while (0)
|
||||||
|
# define VLOG(c,l, f, args) do { if( g_log->log_component[c].level >= l ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args) ; } while (0)
|
||||||
|
|
||||||
# define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
|
# define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
|
||||||
# define LOG_DEBUGFLAG(D) ( 0 )
|
# define LOG_DEBUGFLAG(D) (g_log->dump_mask & D)
|
||||||
# define LOG_DUMPFLAG(D) ( 0 )
|
# define LOG_DUMPFLAG(D) (g_log->debug_mask & D)
|
||||||
|
# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */
|
||||||
|
|
||||||
# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)
|
# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)
|
||||||
# define LOG_VAR(A,B)
|
# define LOG_VAR(A,B) A B
|
||||||
# endif /* T_TRACER */
|
# endif /* T_TRACER */
|
||||||
/* avoid warnings for variables only used in LOG macro's but set outside debug section */
|
/* avoid warnings for variables only used in LOG macro's but set outside debug section */
|
||||||
#define GCC_NOTUSED __attribute__((unused))
|
#define GCC_NOTUSED __attribute__((unused))
|
||||||
|
|||||||
@@ -814,6 +814,7 @@ static inline unsigned long long int vcd_get_time(void)
|
|||||||
return (long long unsigned int)((time.tv_nsec - g_time_start.tv_nsec)) +
|
return (long long unsigned int)((time.tv_nsec - g_time_start.tv_nsec)) +
|
||||||
((long long unsigned int)time.tv_sec - (long long unsigned int)g_time_start.tv_sec) * 1000000000UL;
|
((long long unsigned int)time.tv_sec - (long long unsigned int)g_time_start.tv_sec) * 1000000000UL;
|
||||||
#endif
|
#endif
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vcd_signal_dumper_create_header(void)
|
void vcd_signal_dumper_create_header(void)
|
||||||
|
|||||||
@@ -601,11 +601,19 @@ extern int ouput_vcd;
|
|||||||
|
|
||||||
#else /* T_TRACER */
|
#else /* T_TRACER */
|
||||||
|
|
||||||
|
#if ENABLE_VCD
|
||||||
#define VCD_SIGNAL_DUMPER_INIT(aRgUmEnT) vcd_signal_dumper_init(aRgUmEnT)
|
#define VCD_SIGNAL_DUMPER_INIT(aRgUmEnT) vcd_signal_dumper_init(aRgUmEnT)
|
||||||
#define VCD_SIGNAL_DUMPER_CLOSE() vcd_signal_dumper_close()
|
#define VCD_SIGNAL_DUMPER_CLOSE() vcd_signal_dumper_close()
|
||||||
#define VCD_SIGNAL_DUMPER_CREATE_HEADER() vcd_signal_dumper_create_header()
|
#define VCD_SIGNAL_DUMPER_CREATE_HEADER() vcd_signal_dumper_create_header()
|
||||||
#define VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(vAr1,vAr2) vcd_signal_dumper_dump_variable_by_name(vAr1,vAr2)
|
#define VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(vAr1,vAr2) vcd_signal_dumper_dump_variable_by_name(vAr1,vAr2)
|
||||||
#define VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(vAr1,vAr2) vcd_signal_dumper_dump_function_by_name(vAr1,vAr2)
|
#define VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(vAr1,vAr2) vcd_signal_dumper_dump_function_by_name(vAr1,vAr2)
|
||||||
|
#else
|
||||||
|
#define VCD_SIGNAL_DUMPER_INIT(aRgUmEnT)
|
||||||
|
#define VCD_SIGNAL_DUMPER_CLOSE()
|
||||||
|
#define VCD_SIGNAL_DUMPER_CREATE_HEADER()
|
||||||
|
#define VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(vAr1,vAr2)
|
||||||
|
#define VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(vAr1,vAr2)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif /* T_TRACER */
|
#endif /* T_TRACER */
|
||||||
|
|||||||
@@ -85,6 +85,10 @@ ID = ENB_PHY_MIB
|
|||||||
DESC = MIB data
|
DESC = MIB data
|
||||||
GROUP = ALL:PHY:ENB:WIRESHARK
|
GROUP = ALL:PHY:ENB:WIRESHARK
|
||||||
FORMAT = int,eNB_ID : int,frame : int,subframe : buffer,data
|
FORMAT = int,eNB_ID : int,frame : int,subframe : buffer,data
|
||||||
|
ID = GNB_PHY_MIB
|
||||||
|
DESC = NR MIB data
|
||||||
|
GROUP = ALL:PHY:GNB:WIRESHARK
|
||||||
|
FORMAT = int,gNB_ID : int,frame : int,slot : buffer,data
|
||||||
|
|
||||||
#MAC logs
|
#MAC logs
|
||||||
ID = ENB_MAC_UE_DL_SDU
|
ID = ENB_MAC_UE_DL_SDU
|
||||||
@@ -125,12 +129,24 @@ ID = ENB_MAC_UE_DL_PDU_WITH_DATA
|
|||||||
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : buffer,data
|
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : buffer,data
|
||||||
ID = ENB_MAC_SCHEDULING_REQUEST
|
ID = ENB_MAC_SCHEDULING_REQUEST
|
||||||
DESC = MAC scheduling request detected for an UE
|
DESC = MAC scheduling request detected for an UE
|
||||||
GROUP = ALL:MAC:ENB
|
GROUP = ALL:MAC:ENB:WIRESHARK
|
||||||
FORMAT = int,eNB_ID : int,CC_id : int,frame : int,subframe : int,rnti
|
FORMAT = int,eNB_ID : int,CC_id : int,frame : int,subframe : int,rnti
|
||||||
ID = ENB_MAC_UE_DL_RAR_PDU_WITH_DATA
|
ID = ENB_MAC_UE_DL_RAR_PDU_WITH_DATA
|
||||||
DESC = MAC downlink PDU for an UE
|
DESC = MAC downlink PDU for an UE
|
||||||
GROUP = ALL:MAC:ENB:WIRESHARK
|
GROUP = ALL:MAC:ENB:WIRESHARK
|
||||||
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : buffer,data
|
FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : buffer,data
|
||||||
|
ID = GNB_MAC_DL_PDU_WITH_DATA
|
||||||
|
DESC = NR MAC downlink PDU for an UE
|
||||||
|
GROUP = ALL:MAC:GNB:WIRESHARK
|
||||||
|
FORMAT = int,gNB_ID : int,CC_id : int,rnti : int,frame : int,slot : int,harq_pid : buffer,data
|
||||||
|
ID = GNB_MAC_UL_PDU_WITH_DATA
|
||||||
|
DESC = NR MAC uplink PDU for an UE
|
||||||
|
GROUP = ALL:MAC:GNB:WIRESHARK
|
||||||
|
FORMAT = int,gNB_ID : int,CC_id : int,rnti : int,frame : int,slot : int,harq_pid : buffer,data
|
||||||
|
ID = GNB_MAC_DL_RAR_PDU_WITH_DATA
|
||||||
|
DESC = NR MAC downlink PDU for RAR
|
||||||
|
GROUP = ALL:MAC:GNB:WIRESHARK
|
||||||
|
FORMAT = int,gNB_ID : int,CC_id : int,rnti : int,frame : int,slot : int,harq_pid : buffer,data
|
||||||
|
|
||||||
#RLC logs
|
#RLC logs
|
||||||
ID = ENB_RLC_DL
|
ID = ENB_RLC_DL
|
||||||
@@ -384,6 +400,27 @@ ID = LEGACY_S1AP_TRACE
|
|||||||
GROUP = ALL:LEGACY_S1AP:LEGACY_GROUP_TRACE:LEGACY
|
GROUP = ALL:LEGACY_S1AP:LEGACY_GROUP_TRACE:LEGACY
|
||||||
FORMAT = string,log
|
FORMAT = string,log
|
||||||
|
|
||||||
|
ID = LEGACY_NGAP_INFO
|
||||||
|
DESC = NGAP legacy logs - info level
|
||||||
|
GROUP = ALL:LEGACY_NGAP:LEGACY_GROUP_INFO:LEGACY
|
||||||
|
FORMAT = string,log
|
||||||
|
ID = LEGACY_NGAP_ERROR
|
||||||
|
DESC = NGAP legacy logs - error level
|
||||||
|
GROUP = ALL:LEGACY_NGAP:LEGACY_GROUP_ERROR:LEGACY
|
||||||
|
FORMAT = string,log
|
||||||
|
ID = LEGACY_NGAP_WARNING
|
||||||
|
DESC = NGAP legacy logs - warning level
|
||||||
|
GROUP = ALL:LEGACY_NGAP:LEGACY_GROUP_WARNING:LEGACY
|
||||||
|
FORMAT = string,log
|
||||||
|
ID = LEGACY_NGAP_DEBUG
|
||||||
|
DESC = NGAP legacy logs - debug level
|
||||||
|
GROUP = ALL:LEGACY_NGAP:LEGACY_GROUP_DEBUG:LEGACY
|
||||||
|
FORMAT = string,log
|
||||||
|
ID = LEGACY_NGAP_TRACE
|
||||||
|
DESC = NGAP legacy logs - trace level
|
||||||
|
GROUP = ALL:LEGACY_NGAP:LEGACY_GROUP_TRACE:LEGACY
|
||||||
|
FORMAT = string,log
|
||||||
|
|
||||||
ID = LEGACY_X2AP_INFO
|
ID = LEGACY_X2AP_INFO
|
||||||
DESC = X2AP legacy logs - info level
|
DESC = X2AP legacy logs - info level
|
||||||
GROUP = ALL:LEGACY_X2AP:LEGACY_GROUP_INFO:LEGACY
|
GROUP = ALL:LEGACY_X2AP:LEGACY_GROUP_INFO:LEGACY
|
||||||
|
|||||||
@@ -18,11 +18,14 @@
|
|||||||
#define DEFAULT_LIVE_PORT 2021
|
#define DEFAULT_LIVE_PORT 2021
|
||||||
|
|
||||||
#define NO_PREAMBLE -1
|
#define NO_PREAMBLE -1
|
||||||
|
#define NO_SR_RNTI -1
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int socket;
|
int socket;
|
||||||
struct sockaddr_in to;
|
struct sockaddr_in to;
|
||||||
OBUF buf;
|
OBUF buf;
|
||||||
|
|
||||||
|
/* LTE traces */
|
||||||
/* ul */
|
/* ul */
|
||||||
int ul_rnti;
|
int ul_rnti;
|
||||||
int ul_frame;
|
int ul_frame;
|
||||||
@@ -46,6 +49,32 @@ typedef struct {
|
|||||||
int rar_frame;
|
int rar_frame;
|
||||||
int rar_subframe;
|
int rar_subframe;
|
||||||
int rar_data;
|
int rar_data;
|
||||||
|
/* SR */
|
||||||
|
int sr_rnti;
|
||||||
|
int sr_frame;
|
||||||
|
int sr_subframe;
|
||||||
|
|
||||||
|
/* NR traces */
|
||||||
|
/* NR ul */
|
||||||
|
int nr_ul_rnti;
|
||||||
|
int nr_ul_frame;
|
||||||
|
int nr_ul_slot;
|
||||||
|
int nr_ul_data;
|
||||||
|
/* NR dl */
|
||||||
|
int nr_dl_rnti;
|
||||||
|
int nr_dl_frame;
|
||||||
|
int nr_dl_slot;
|
||||||
|
int nr_dl_data;
|
||||||
|
/* NR mib */
|
||||||
|
int nr_mib_frame;
|
||||||
|
int nr_mib_slot;
|
||||||
|
int nr_mib_data;
|
||||||
|
/* NR RAR */
|
||||||
|
int nr_rar_rnti;
|
||||||
|
int nr_rar_frame;
|
||||||
|
int nr_rar_slot;
|
||||||
|
int nr_rar_data;
|
||||||
|
|
||||||
/* config */
|
/* config */
|
||||||
int no_mib;
|
int no_mib;
|
||||||
int no_sib;
|
int no_sib;
|
||||||
@@ -56,10 +85,25 @@ typedef struct {
|
|||||||
/* runtime vars */
|
/* runtime vars */
|
||||||
int cur_mib;
|
int cur_mib;
|
||||||
int cur_sib;
|
int cur_sib;
|
||||||
|
|
||||||
|
/* hack to report UE id:
|
||||||
|
* each time we see a rnti, we allocate the next ue_id
|
||||||
|
* (two separate versions for lte and nr)
|
||||||
|
*/
|
||||||
|
int lte_rnti_to_ueid[65536];
|
||||||
|
int lte_next_ue_id;
|
||||||
|
int nr_rnti_to_ueid[65536];
|
||||||
|
int nr_next_ue_id;
|
||||||
} ev_data;
|
} ev_data;
|
||||||
|
|
||||||
void trace(ev_data *d, int direction, int rnti_type, int rnti,
|
/****************************************************************************/
|
||||||
int frame, int subframe, void *buf, int bufsize, int preamble) {
|
/* LTE */
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
void trace_lte(ev_data *d, int direction, int rnti_type, int rnti,
|
||||||
|
int frame, int subframe, void *buf, int bufsize, int preamble,
|
||||||
|
int sr_rnti)
|
||||||
|
{
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
int fsf;
|
int fsf;
|
||||||
int i;
|
int i;
|
||||||
@@ -73,6 +117,18 @@ void trace(ev_data *d, int direction, int rnti_type, int rnti,
|
|||||||
PUTC(&d->buf, MAC_LTE_RNTI_TAG);
|
PUTC(&d->buf, MAC_LTE_RNTI_TAG);
|
||||||
PUTC(&d->buf, (rnti>>8) & 255);
|
PUTC(&d->buf, (rnti>>8) & 255);
|
||||||
PUTC(&d->buf, rnti & 255);
|
PUTC(&d->buf, rnti & 255);
|
||||||
|
|
||||||
|
/* put UE id */
|
||||||
|
if (rnti < 0 || rnti > 65535) { printf("bad rnti!\n"); exit(1); }
|
||||||
|
/* if no UE id allocated for this rnti then allocate the next one */
|
||||||
|
if (d->lte_rnti_to_ueid[rnti] == -1) {
|
||||||
|
d->lte_rnti_to_ueid[rnti] = d->lte_next_ue_id;
|
||||||
|
d->lte_next_ue_id++;
|
||||||
|
}
|
||||||
|
|
||||||
|
PUTC(&d->buf, MAC_LTE_UEID_TAG);
|
||||||
|
PUTC(&d->buf, (d->lte_rnti_to_ueid[rnti]>>8) & 255);
|
||||||
|
PUTC(&d->buf, d->lte_rnti_to_ueid[rnti] & 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* for newer version of wireshark? */
|
/* for newer version of wireshark? */
|
||||||
@@ -89,6 +145,25 @@ void trace(ev_data *d, int direction, int rnti_type, int rnti,
|
|||||||
PUTC(&d->buf, 0); /* rach attempt - always 0 for us (not sure of this) */
|
PUTC(&d->buf, 0); /* rach attempt - always 0 for us (not sure of this) */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sr_rnti != NO_SR_RNTI) {
|
||||||
|
PUTC(&d->buf, MAC_LTE_SR_TAG);
|
||||||
|
PUTC(&d->buf, 0); /* number of items byte 1 */
|
||||||
|
PUTC(&d->buf, 1); /* number of items byte 2 */
|
||||||
|
|
||||||
|
/* put UE id */
|
||||||
|
if (sr_rnti < 0 || sr_rnti > 65535) { printf("bad sr rnti!\n"); exit(1); }
|
||||||
|
/* if no UE id allocated for this rnti then allocate the next one */
|
||||||
|
if (d->lte_rnti_to_ueid[sr_rnti] == -1) {
|
||||||
|
d->lte_rnti_to_ueid[sr_rnti] = d->lte_next_ue_id;
|
||||||
|
d->lte_next_ue_id++;
|
||||||
|
}
|
||||||
|
PUTC(&d->buf, (d->lte_rnti_to_ueid[sr_rnti]>>8) & 255);
|
||||||
|
PUTC(&d->buf, d->lte_rnti_to_ueid[sr_rnti] & 255);
|
||||||
|
|
||||||
|
PUTC(&d->buf, (sr_rnti>>8) & 255);
|
||||||
|
PUTC(&d->buf, sr_rnti & 255);
|
||||||
|
}
|
||||||
|
|
||||||
PUTC(&d->buf, MAC_LTE_PAYLOAD_TAG);
|
PUTC(&d->buf, MAC_LTE_PAYLOAD_TAG);
|
||||||
|
|
||||||
for (i = 0; i < bufsize; i++)
|
for (i = 0; i < bufsize; i++)
|
||||||
@@ -100,15 +175,17 @@ void trace(ev_data *d, int direction, int rnti_type, int rnti,
|
|||||||
if (ret != d->buf.osize) abort();
|
if (ret != d->buf.osize) abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ul(void *_d, event e) {
|
void ul(void *_d, event e)
|
||||||
|
{
|
||||||
ev_data *d = _d;
|
ev_data *d = _d;
|
||||||
trace(d, DIRECTION_UPLINK, C_RNTI, e.e[d->ul_rnti].i,
|
trace_lte(d, DIRECTION_UPLINK, C_RNTI, e.e[d->ul_rnti].i,
|
||||||
e.e[d->ul_frame].i, e.e[d->ul_subframe].i,
|
e.e[d->ul_frame].i, e.e[d->ul_subframe].i,
|
||||||
e.e[d->ul_data].b, e.e[d->ul_data].bsize,
|
e.e[d->ul_data].b, e.e[d->ul_data].bsize,
|
||||||
NO_PREAMBLE);
|
NO_PREAMBLE, NO_SR_RNTI);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dl(void *_d, event e) {
|
void dl(void *_d, event e)
|
||||||
|
{
|
||||||
ev_data *d = _d;
|
ev_data *d = _d;
|
||||||
|
|
||||||
if (e.e[d->dl_rnti].i == 0xffff) {
|
if (e.e[d->dl_rnti].i == 0xffff) {
|
||||||
@@ -119,14 +196,15 @@ void dl(void *_d, event e) {
|
|||||||
d->cur_sib++;
|
d->cur_sib++;
|
||||||
}
|
}
|
||||||
|
|
||||||
trace(d, DIRECTION_DOWNLINK,
|
trace_lte(d, DIRECTION_DOWNLINK,
|
||||||
e.e[d->dl_rnti].i != 0xffff ? C_RNTI : SI_RNTI, e.e[d->dl_rnti].i,
|
e.e[d->dl_rnti].i != 0xffff ? C_RNTI : SI_RNTI, e.e[d->dl_rnti].i,
|
||||||
e.e[d->dl_frame].i, e.e[d->dl_subframe].i,
|
e.e[d->dl_frame].i, e.e[d->dl_subframe].i,
|
||||||
e.e[d->dl_data].b, e.e[d->dl_data].bsize,
|
e.e[d->dl_data].b, e.e[d->dl_data].bsize,
|
||||||
NO_PREAMBLE);
|
NO_PREAMBLE, NO_SR_RNTI);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mib(void *_d, event e) {
|
void mib(void *_d, event e)
|
||||||
|
{
|
||||||
ev_data *d = _d;
|
ev_data *d = _d;
|
||||||
|
|
||||||
if (d->no_mib) return;
|
if (d->no_mib) return;
|
||||||
@@ -134,30 +212,163 @@ void mib(void *_d, event e) {
|
|||||||
if (d->max_mib && d->cur_mib == d->max_mib) return;
|
if (d->max_mib && d->cur_mib == d->max_mib) return;
|
||||||
|
|
||||||
d->cur_mib++;
|
d->cur_mib++;
|
||||||
trace(d, DIRECTION_DOWNLINK, NO_RNTI, 0,
|
trace_lte(d, DIRECTION_DOWNLINK, NO_RNTI, 0,
|
||||||
e.e[d->mib_frame].i, e.e[d->mib_subframe].i,
|
e.e[d->mib_frame].i, e.e[d->mib_subframe].i,
|
||||||
e.e[d->mib_data].b, e.e[d->mib_data].bsize,
|
e.e[d->mib_data].b, e.e[d->mib_data].bsize,
|
||||||
NO_PREAMBLE);
|
NO_PREAMBLE, NO_SR_RNTI);
|
||||||
}
|
}
|
||||||
|
|
||||||
void preamble(void *_d, event e) {
|
void preamble(void *_d, event e)
|
||||||
|
{
|
||||||
ev_data *d = _d;
|
ev_data *d = _d;
|
||||||
trace(d, DIRECTION_UPLINK, NO_RNTI, 0,
|
trace_lte(d, DIRECTION_UPLINK, NO_RNTI, 0,
|
||||||
e.e[d->preamble_frame].i, e.e[d->preamble_subframe].i,
|
e.e[d->preamble_frame].i, e.e[d->preamble_subframe].i,
|
||||||
NULL, 0,
|
NULL, 0,
|
||||||
e.e[d->preamble_preamble].i);
|
e.e[d->preamble_preamble].i, NO_SR_RNTI);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rar(void *_d, event e) {
|
void rar(void *_d, event e)
|
||||||
|
{
|
||||||
ev_data *d = _d;
|
ev_data *d = _d;
|
||||||
trace(d, DIRECTION_DOWNLINK, RA_RNTI, e.e[d->rar_rnti].i,
|
trace_lte(d, DIRECTION_DOWNLINK, RA_RNTI, e.e[d->rar_rnti].i,
|
||||||
e.e[d->rar_frame].i, e.e[d->rar_subframe].i,
|
e.e[d->rar_frame].i, e.e[d->rar_subframe].i,
|
||||||
e.e[d->rar_data].b, e.e[d->rar_data].bsize,
|
e.e[d->rar_data].b, e.e[d->rar_data].bsize,
|
||||||
NO_PREAMBLE);
|
NO_PREAMBLE, NO_SR_RNTI);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sr(void *_d, event e)
|
||||||
|
{
|
||||||
|
ev_data *d = _d;
|
||||||
|
trace_lte(d, DIRECTION_UPLINK, NO_RNTI, 0,
|
||||||
|
e.e[d->sr_frame].i, e.e[d->sr_subframe].i,
|
||||||
|
NULL, 0,
|
||||||
|
NO_PREAMBLE, e.e[d->sr_rnti].i);
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
/* NR */
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#define MAC_NR_START_STRING "mac-nr"
|
||||||
|
|
||||||
|
#define MAC_NR_PAYLOAD_TAG 0x01
|
||||||
|
#define MAC_NR_RNTI_TAG 0x02
|
||||||
|
#define MAC_NR_UEID_TAG 0x03
|
||||||
|
#define MAC_NR_FRAME_SLOT_TAG 0x07
|
||||||
|
|
||||||
|
#define NR_FDD_RADIO 1
|
||||||
|
#define NR_TDD_RADIO 2
|
||||||
|
|
||||||
|
#define NR_DIRECTION_UPLINK 0
|
||||||
|
#define NR_DIRECTION_DOWNLINK 1
|
||||||
|
|
||||||
|
#define NR_NO_RNTI 0
|
||||||
|
#define NR_RA_RNTI 2
|
||||||
|
#define NR_C_RNTI 3
|
||||||
|
|
||||||
|
void trace_nr(ev_data *d, int direction, int rnti_type, int rnti,
|
||||||
|
int frame, int slot, void *buf, int bufsize, int preamble)
|
||||||
|
{
|
||||||
|
ssize_t ret;
|
||||||
|
int i;
|
||||||
|
d->buf.osize = 0;
|
||||||
|
PUTS(&d->buf, MAC_NR_START_STRING);
|
||||||
|
PUTC(&d->buf, NR_TDD_RADIO);
|
||||||
|
PUTC(&d->buf, direction);
|
||||||
|
PUTC(&d->buf, rnti_type);
|
||||||
|
|
||||||
|
if (rnti_type == NR_C_RNTI || rnti_type == NR_RA_RNTI) {
|
||||||
|
PUTC(&d->buf, MAC_NR_RNTI_TAG);
|
||||||
|
PUTC(&d->buf, (rnti>>8) & 255);
|
||||||
|
PUTC(&d->buf, rnti & 255);
|
||||||
|
|
||||||
|
/* put UE id */
|
||||||
|
if (rnti < 0 || rnti > 65535) { printf("bad rnti!\n"); exit(1); }
|
||||||
|
/* if no UE id allocated for this rnti then allocate the next one */
|
||||||
|
if (d->nr_rnti_to_ueid[rnti] == -1) {
|
||||||
|
d->nr_rnti_to_ueid[rnti] = d->nr_next_ue_id;
|
||||||
|
d->nr_next_ue_id++;
|
||||||
|
}
|
||||||
|
|
||||||
|
PUTC(&d->buf, MAC_NR_UEID_TAG);
|
||||||
|
PUTC(&d->buf, (d->nr_rnti_to_ueid[rnti]>>8) & 255);
|
||||||
|
PUTC(&d->buf, d->nr_rnti_to_ueid[rnti] & 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* for old versions of wireshark; not sure if correct */
|
||||||
|
int fsf = (frame << 4) + slot;
|
||||||
|
PUTC(&d->buf, 4 /* MAC_NR_FRAME_SUBFRAME_TAG */);
|
||||||
|
PUTC(&d->buf, (fsf>>8) & 255);
|
||||||
|
PUTC(&d->buf, fsf & 255);
|
||||||
|
#else
|
||||||
|
PUTC(&d->buf, MAC_NR_FRAME_SLOT_TAG);
|
||||||
|
PUTC(&d->buf, (frame>>8) & 255);
|
||||||
|
PUTC(&d->buf, frame & 255);
|
||||||
|
PUTC(&d->buf, (slot>>8) & 255);
|
||||||
|
PUTC(&d->buf, slot & 255);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PUTC(&d->buf, MAC_NR_PAYLOAD_TAG);
|
||||||
|
|
||||||
|
for (i = 0; i < bufsize; i++)
|
||||||
|
PUTC(&d->buf, ((char *)buf)[i]);
|
||||||
|
|
||||||
|
ret = sendto(d->socket, d->buf.obuf, d->buf.osize, 0,
|
||||||
|
(struct sockaddr *)&d->to, sizeof(struct sockaddr_in));
|
||||||
|
|
||||||
|
if (ret != d->buf.osize) abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
void nr_ul(void *_d, event e)
|
||||||
|
{
|
||||||
|
ev_data *d = _d;
|
||||||
|
|
||||||
|
trace_nr(d, NR_DIRECTION_UPLINK, NR_C_RNTI, e.e[d->nr_ul_rnti].i,
|
||||||
|
e.e[d->nr_ul_frame].i, e.e[d->nr_ul_slot].i,
|
||||||
|
e.e[d->nr_ul_data].b, e.e[d->nr_ul_data].bsize, NO_PREAMBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void nr_dl(void *_d, event e)
|
||||||
|
{
|
||||||
|
ev_data *d = _d;
|
||||||
|
|
||||||
|
trace_nr(d, NR_DIRECTION_DOWNLINK, NR_C_RNTI, e.e[d->nr_dl_rnti].i,
|
||||||
|
e.e[d->nr_dl_frame].i, e.e[d->nr_dl_slot].i,
|
||||||
|
e.e[d->nr_dl_data].b, e.e[d->nr_dl_data].bsize, NO_PREAMBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void nr_mib(void *_d, event e)
|
||||||
|
{
|
||||||
|
ev_data *d = _d;
|
||||||
|
|
||||||
|
if (d->no_mib) return;
|
||||||
|
|
||||||
|
if (d->max_mib && d->cur_mib == d->max_mib) return;
|
||||||
|
|
||||||
|
d->cur_mib++;
|
||||||
|
|
||||||
|
trace_nr(d, NR_DIRECTION_DOWNLINK, NR_NO_RNTI, 0,
|
||||||
|
e.e[d->nr_mib_frame].i, e.e[d->nr_mib_slot].i,
|
||||||
|
e.e[d->nr_mib_data].b, e.e[d->nr_mib_data].bsize, NO_PREAMBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void nr_rar(void *_d, event e)
|
||||||
|
{
|
||||||
|
ev_data *d = _d;
|
||||||
|
|
||||||
|
trace_nr(d, NR_DIRECTION_DOWNLINK, NR_RA_RNTI, e.e[d->nr_rar_rnti].i,
|
||||||
|
e.e[d->nr_rar_frame].i, e.e[d->nr_rar_slot].i,
|
||||||
|
e.e[d->nr_rar_data].b, e.e[d->nr_rar_data].bsize, NO_PREAMBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
void setup_data(ev_data *d, void *database, int ul_id, int dl_id, int mib_id,
|
void setup_data(ev_data *d, void *database, int ul_id, int dl_id, int mib_id,
|
||||||
int preamble_id, int rar_id) {
|
int preamble_id, int rar_id, int sr_id,
|
||||||
|
int nr_ul_id, int nr_dl_id, int nr_mib_id, int nr_rar_id)
|
||||||
|
{
|
||||||
database_event_format f;
|
database_event_format f;
|
||||||
int i;
|
int i;
|
||||||
d->ul_rnti = -1;
|
d->ul_rnti = -1;
|
||||||
@@ -174,10 +385,30 @@ void setup_data(ev_data *d, void *database, int ul_id, int dl_id, int mib_id,
|
|||||||
d->preamble_frame = -1;
|
d->preamble_frame = -1;
|
||||||
d->preamble_subframe = -1;
|
d->preamble_subframe = -1;
|
||||||
d->preamble_preamble = -1;
|
d->preamble_preamble = -1;
|
||||||
d->rar_rnti = -1;
|
d->rar_rnti = -1;
|
||||||
d->rar_frame = -1;
|
d->rar_frame = -1;
|
||||||
d->rar_subframe = -1;
|
d->rar_subframe = -1;
|
||||||
d->rar_data = -1;
|
d->rar_data = -1;
|
||||||
|
d->sr_rnti = -1;
|
||||||
|
d->sr_frame = -1;
|
||||||
|
d->sr_subframe = -1;
|
||||||
|
|
||||||
|
d->nr_ul_rnti = -1;
|
||||||
|
d->nr_ul_frame = -1;
|
||||||
|
d->nr_ul_slot = -1;
|
||||||
|
d->nr_ul_data = -1;
|
||||||
|
d->nr_dl_rnti = -1;
|
||||||
|
d->nr_dl_frame = -1;
|
||||||
|
d->nr_dl_slot = -1;
|
||||||
|
d->nr_dl_data = -1;
|
||||||
|
d->nr_mib_frame = -1;
|
||||||
|
d->nr_mib_slot = -1;
|
||||||
|
d->nr_mib_data = -1;
|
||||||
|
d->nr_rar_rnti = -1;
|
||||||
|
d->nr_rar_frame = -1;
|
||||||
|
d->nr_rar_slot = -1;
|
||||||
|
d->nr_rar_data = -1;
|
||||||
|
|
||||||
#define G(var_name, var_type, var) \
|
#define G(var_name, var_type, var) \
|
||||||
if (!strcmp(f.name[i], var_name)) { \
|
if (!strcmp(f.name[i], var_name)) { \
|
||||||
if (strcmp(f.type[i], var_type)) goto error; \
|
if (strcmp(f.type[i], var_type)) goto error; \
|
||||||
@@ -247,6 +478,72 @@ void setup_data(ev_data *d, void *database, int ul_id, int dl_id, int mib_id,
|
|||||||
if (d->rar_rnti == -1 || d->rar_frame == -1 || d->rar_subframe == -1 ||
|
if (d->rar_rnti == -1 || d->rar_frame == -1 || d->rar_subframe == -1 ||
|
||||||
d->rar_data == -1) goto error;
|
d->rar_data == -1) goto error;
|
||||||
|
|
||||||
|
/* sr: rnti, frame, subframe */
|
||||||
|
f = get_format(database, sr_id);
|
||||||
|
|
||||||
|
for (i = 0; i < f.count; i++) {
|
||||||
|
G("rnti", "int", d->sr_rnti);
|
||||||
|
G("frame", "int", d->sr_frame);
|
||||||
|
G("subframe", "int", d->sr_subframe);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d->sr_rnti == -1 || d->sr_frame == -1 || d->sr_subframe == -1)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
/* NR ul: rnti, frame, slot, data */
|
||||||
|
f = get_format(database, nr_ul_id);
|
||||||
|
|
||||||
|
for (i = 0; i < f.count; i++) {
|
||||||
|
G("rnti", "int", d->nr_ul_rnti);
|
||||||
|
G("frame", "int", d->nr_ul_frame);
|
||||||
|
G("slot", "int", d->nr_ul_slot);
|
||||||
|
G("data", "buffer", d->nr_ul_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d->nr_ul_rnti == -1 || d->nr_ul_frame == -1 || d->nr_ul_slot == -1 ||
|
||||||
|
d->nr_ul_data == -1)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
/* NR dl: rnti, frame, slot, data */
|
||||||
|
f = get_format(database, nr_dl_id);
|
||||||
|
|
||||||
|
for (i = 0; i < f.count; i++) {
|
||||||
|
G("rnti", "int", d->nr_dl_rnti);
|
||||||
|
G("frame", "int", d->nr_dl_frame);
|
||||||
|
G("slot", "int", d->nr_dl_slot);
|
||||||
|
G("data", "buffer", d->nr_dl_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d->nr_dl_rnti == -1 || d->nr_dl_frame == -1 || d->nr_dl_slot == -1 ||
|
||||||
|
d->nr_dl_data == -1)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
/* NR MIB: frame, slot, data */
|
||||||
|
f = get_format(database, nr_mib_id);
|
||||||
|
|
||||||
|
for (i = 0; i < f.count; i++) {
|
||||||
|
G("frame", "int", d->nr_mib_frame);
|
||||||
|
G("slot", "int", d->nr_mib_slot);
|
||||||
|
G("data", "buffer", d->nr_mib_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d->nr_mib_frame == -1 || d->nr_mib_slot== -1 || d->nr_mib_data == -1)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
/* NR RAR: rnti, frame, slot, data */
|
||||||
|
f = get_format(database, nr_rar_id);
|
||||||
|
|
||||||
|
for (i = 0; i < f.count; i++) {
|
||||||
|
G("rnti", "int", d->nr_rar_rnti);
|
||||||
|
G("frame", "int", d->nr_rar_frame);
|
||||||
|
G("slot", "int", d->nr_rar_slot);
|
||||||
|
G("data", "buffer", d->nr_rar_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d->nr_rar_rnti == -1 || d->nr_rar_frame == -1 || d->nr_rar_slot == -1 ||
|
||||||
|
d->nr_rar_data == -1)
|
||||||
|
goto error;
|
||||||
|
|
||||||
#undef G
|
#undef G
|
||||||
return;
|
return;
|
||||||
error:
|
error:
|
||||||
@@ -254,7 +551,8 @@ error:
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
void *receiver(void *_d) {
|
void *receiver(void *_d)
|
||||||
|
{
|
||||||
ev_data *d = _d;
|
ev_data *d = _d;
|
||||||
int s;
|
int s;
|
||||||
char buf[100000];
|
char buf[100000];
|
||||||
@@ -279,7 +577,8 @@ void *receiver(void *_d) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void usage(void) {
|
void usage(void)
|
||||||
|
{
|
||||||
printf(
|
printf(
|
||||||
"options:\n"
|
"options:\n"
|
||||||
" -d <database file> this option is mandatory\n"
|
" -d <database file> this option is mandatory\n"
|
||||||
@@ -304,14 +603,17 @@ void usage(void) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int n, char **v) {
|
int main(int n, char **v)
|
||||||
|
{
|
||||||
char *database_filename = NULL;
|
char *database_filename = NULL;
|
||||||
char *input_filename = NULL;
|
char *input_filename = NULL;
|
||||||
void *database;
|
void *database;
|
||||||
event_handler *h;
|
event_handler *h;
|
||||||
int in;
|
int in;
|
||||||
int i;
|
int i;
|
||||||
int ul_id, dl_id, mib_id = -1, preamble_id, rar_id;
|
int ul_id, dl_id, mib_id, preamble_id, rar_id;
|
||||||
|
int nr_ul_id, nr_dl_id, nr_mib_id, nr_rar_id;
|
||||||
|
int sr_id;
|
||||||
ev_data d;
|
ev_data d;
|
||||||
char *ip = DEFAULT_IP;
|
char *ip = DEFAULT_IP;
|
||||||
int port = DEFAULT_PORT;
|
int port = DEFAULT_PORT;
|
||||||
@@ -320,6 +622,11 @@ int main(int n, char **v) {
|
|||||||
int live = 0;
|
int live = 0;
|
||||||
memset(&d, 0, sizeof(ev_data));
|
memset(&d, 0, sizeof(ev_data));
|
||||||
|
|
||||||
|
for (i = 0; i < 65536; i++) {
|
||||||
|
d.lte_rnti_to_ueid[i] = -1;
|
||||||
|
d.nr_rnti_to_ueid[i] = -1;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 1; i < n; i++) {
|
for (i = 1; i < n; i++) {
|
||||||
if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
|
if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
|
||||||
if (!strcmp(v[i], "-d")) { if(i>n-2)usage(); database_filename = v[++i]; continue; }
|
if (!strcmp(v[i], "-d")) { if(i>n-2)usage(); database_filename = v[++i]; continue; }
|
||||||
@@ -381,6 +688,12 @@ int main(int n, char **v) {
|
|||||||
on_off(database, "ENB_PHY_MIB", is_on, 1);
|
on_off(database, "ENB_PHY_MIB", is_on, 1);
|
||||||
on_off(database, "ENB_PHY_INITIATE_RA_PROCEDURE", is_on, 1);
|
on_off(database, "ENB_PHY_INITIATE_RA_PROCEDURE", is_on, 1);
|
||||||
on_off(database, "ENB_MAC_UE_DL_RAR_PDU_WITH_DATA", is_on, 1);
|
on_off(database, "ENB_MAC_UE_DL_RAR_PDU_WITH_DATA", is_on, 1);
|
||||||
|
on_off(database, "ENB_MAC_SCHEDULING_REQUEST", is_on, 1);
|
||||||
|
|
||||||
|
on_off(database, "GNB_MAC_UL_PDU_WITH_DATA", is_on, 1);
|
||||||
|
on_off(database, "GNB_MAC_DL_PDU_WITH_DATA", is_on, 1);
|
||||||
|
on_off(database, "GNB_PHY_MIB", is_on, 1);
|
||||||
|
on_off(database, "GNB_MAC_DL_RAR_PDU_WITH_DATA", is_on, 1);
|
||||||
|
|
||||||
/* activate selected traces */
|
/* activate selected traces */
|
||||||
if (socket_send(in, &mt, 1) == -1 ||
|
if (socket_send(in, &mt, 1) == -1 ||
|
||||||
@@ -398,12 +711,28 @@ int main(int n, char **v) {
|
|||||||
mib_id = event_id_from_name(database, "ENB_PHY_MIB");
|
mib_id = event_id_from_name(database, "ENB_PHY_MIB");
|
||||||
preamble_id = event_id_from_name(database, "ENB_PHY_INITIATE_RA_PROCEDURE");
|
preamble_id = event_id_from_name(database, "ENB_PHY_INITIATE_RA_PROCEDURE");
|
||||||
rar_id = event_id_from_name(database, "ENB_MAC_UE_DL_RAR_PDU_WITH_DATA");
|
rar_id = event_id_from_name(database, "ENB_MAC_UE_DL_RAR_PDU_WITH_DATA");
|
||||||
setup_data(&d, database, ul_id, dl_id, mib_id, preamble_id, rar_id);
|
sr_id = event_id_from_name(database, "ENB_MAC_SCHEDULING_REQUEST");
|
||||||
|
|
||||||
|
nr_ul_id = event_id_from_name(database, "GNB_MAC_UL_PDU_WITH_DATA");
|
||||||
|
nr_dl_id = event_id_from_name(database, "GNB_MAC_DL_PDU_WITH_DATA");
|
||||||
|
nr_mib_id = event_id_from_name(database, "GNB_PHY_MIB");
|
||||||
|
nr_rar_id = event_id_from_name(database, "GNB_MAC_DL_RAR_PDU_WITH_DATA");
|
||||||
|
|
||||||
|
setup_data(&d, database, ul_id, dl_id, mib_id, preamble_id, rar_id, sr_id,
|
||||||
|
nr_ul_id, nr_dl_id, nr_mib_id, nr_rar_id);
|
||||||
|
|
||||||
register_handler_function(h, ul_id, ul, &d);
|
register_handler_function(h, ul_id, ul, &d);
|
||||||
register_handler_function(h, dl_id, dl, &d);
|
register_handler_function(h, dl_id, dl, &d);
|
||||||
register_handler_function(h, mib_id, mib, &d);
|
register_handler_function(h, mib_id, mib, &d);
|
||||||
register_handler_function(h, preamble_id, preamble, &d);
|
register_handler_function(h, preamble_id, preamble, &d);
|
||||||
register_handler_function(h, rar_id, rar, &d);
|
register_handler_function(h, rar_id, rar, &d);
|
||||||
|
register_handler_function(h, sr_id, sr, &d);
|
||||||
|
|
||||||
|
register_handler_function(h, nr_ul_id, nr_ul, &d);
|
||||||
|
register_handler_function(h, nr_dl_id, nr_dl, &d);
|
||||||
|
register_handler_function(h, nr_mib_id, nr_mib, &d);
|
||||||
|
register_handler_function(h, nr_rar_id, nr_rar, &d);
|
||||||
|
|
||||||
d.socket = socket(AF_INET, SOCK_DGRAM, 0);
|
d.socket = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
|
||||||
if (d.socket == -1) {
|
if (d.socket == -1) {
|
||||||
@@ -424,8 +753,10 @@ int main(int n, char **v) {
|
|||||||
|
|
||||||
if (e.type == -1) break;
|
if (e.type == -1) break;
|
||||||
|
|
||||||
if (!(e.type == ul_id || e.type == dl_id || e.type == mib_id ||
|
if (!(e.type == ul_id || e.type == dl_id || e.type == mib_id ||
|
||||||
e.type == preamble_id || e.type == rar_id)) continue;
|
e.type == preamble_id || e.type == rar_id || e.type == sr_id ||
|
||||||
|
e.type == nr_ul_id || e.type == nr_dl_id ||
|
||||||
|
e.type == nr_mib_id || e.type == nr_rar_id)) continue;
|
||||||
|
|
||||||
handle_event(h, e);
|
handle_event(h, e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,26 +11,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (C) 2009 Martin Mathieson. All rights reserved.
|
* Copyright (C) 2009 Martin Mathieson. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __COMMON_UTILS_T_TRACER_PACKET_MAC_LTE__H__
|
#ifndef __COMMON_UTILS_T_TRACER_PACKET_MAC_LTE__H__
|
||||||
@@ -67,9 +48,9 @@
|
|||||||
/* and implemented by this dissector, using the definitions */
|
/* and implemented by this dissector, using the definitions */
|
||||||
/* below. A link to an example program showing you how to encode */
|
/* below. A link to an example program showing you how to encode */
|
||||||
/* these headers and send LTE MAC PDUs on a UDP socket is */
|
/* these headers and send LTE MAC PDUs on a UDP socket is */
|
||||||
/* provided at https://wiki.wireshark.org/MAC-LTE */
|
/* provided at https://wiki.wireshark.org/MAC-LTE */
|
||||||
/* */
|
/* */
|
||||||
/* A heuristic dissecter (enabled by a preference) will */
|
/* A heuristic dissector (enabled by a preference) will */
|
||||||
/* recognise a signature at the beginning of these frames. */
|
/* recognise a signature at the beginning of these frames. */
|
||||||
/*****************************************************************/
|
/*****************************************************************/
|
||||||
|
|
||||||
@@ -126,18 +107,25 @@
|
|||||||
MCS index (1 byte), redundancy version (1 byte), resource block length (1 byte),
|
MCS index (1 byte), redundancy version (1 byte), resource block length (1 byte),
|
||||||
HARQ id (1 byte), NDI (1 byte), TB (1 byte), DL reTx (1 byte) */
|
HARQ id (1 byte), NDI (1 byte), TB (1 byte), DL reTx (1 byte) */
|
||||||
|
|
||||||
#define MAC_LTE_SIMULT_PUCCH_PUSCH_PCELL 0x0C
|
#define MAC_LTE_SIMULT_PUCCH_PUSCH_PCELL_TAG 0x0C
|
||||||
/* 0 byte */
|
/* 0 byte */
|
||||||
|
|
||||||
#define MAC_LTE_SIMULT_PUCCH_PUSCH_PSCELL 0x0D
|
#define MAC_LTE_SIMULT_PUCCH_PUSCH_PSCELL_TAG 0x0D
|
||||||
/* 0 byte */
|
/* 0 byte */
|
||||||
|
|
||||||
#define MAC_LTE_CE_MODE 0x0E
|
#define MAC_LTE_CE_MODE_TAG 0x0E
|
||||||
/* 1 byte containing mac_lte_ce_mode enum value */
|
/* 1 byte containing mac_lte_ce_mode enum value */
|
||||||
|
|
||||||
#define MAC_LTE_NB_MODE 0x0F
|
#define MAC_LTE_NB_MODE_TAG 0x0F
|
||||||
/* 1 byte containing mac_lte_nb_mode enum value */
|
/* 1 byte containing mac_lte_nb_mode enum value */
|
||||||
|
|
||||||
|
#define MAC_LTE_N_UL_RB_TAG 0x10
|
||||||
|
/* 1 byte containing the number of UL resource blocks: 6, 15, 25, 50, 75 or 100 */
|
||||||
|
|
||||||
|
#define MAC_LTE_SR_TAG 0x11
|
||||||
|
/* 2 bytes for the number of items, followed by that number of ueid, rnti (2 bytes each) */
|
||||||
|
|
||||||
|
|
||||||
/* MAC PDU. Following this tag comes the actual MAC PDU (there is no length, the PDU
|
/* MAC PDU. Following this tag comes the actual MAC PDU (there is no length, the PDU
|
||||||
continues until the end of the frame) */
|
continues until the end of the frame) */
|
||||||
#define MAC_LTE_PAYLOAD_TAG 0x01
|
#define MAC_LTE_PAYLOAD_TAG 0x01
|
||||||
|
|||||||
@@ -101,11 +101,11 @@ static inline uint64_t BIT_STRING_to_uint64(BIT_STRING_t *asn) {
|
|||||||
|
|
||||||
shift = ((asn->size - 1) * 8) - asn->bits_unused;
|
shift = ((asn->size - 1) * 8) - asn->bits_unused;
|
||||||
for (index = 0; index < (asn->size - 1); index++) {
|
for (index = 0; index < (asn->size - 1); index++) {
|
||||||
result |= asn->buf[index] << shift;
|
result |= ((uint64_t)asn->buf[index]) << shift;
|
||||||
shift -= 8;
|
shift -= 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
result |= asn->buf[index] >> asn->bits_unused;
|
result |= ((uint64_t)asn->buf[index]) >> asn->bits_unused;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,370 +0,0 @@
|
|||||||
Installation Instructions
|
|
||||||
*************************
|
|
||||||
|
|
||||||
Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
|
|
||||||
Inc.
|
|
||||||
|
|
||||||
Copying and distribution of this file, with or without modification,
|
|
||||||
are permitted in any medium without royalty provided the copyright
|
|
||||||
notice and this notice are preserved. This file is offered as-is,
|
|
||||||
without warranty of any kind.
|
|
||||||
|
|
||||||
Basic Installation
|
|
||||||
==================
|
|
||||||
|
|
||||||
Briefly, the shell command `./configure && make && make install'
|
|
||||||
should configure, build, and install this package. The following
|
|
||||||
more-detailed instructions are generic; see the `README' file for
|
|
||||||
instructions specific to this package. Some packages provide this
|
|
||||||
`INSTALL' file but do not implement all of the features documented
|
|
||||||
below. The lack of an optional feature in a given package is not
|
|
||||||
necessarily a bug. More recommendations for GNU packages can be found
|
|
||||||
in *note Makefile Conventions: (standards)Makefile Conventions.
|
|
||||||
|
|
||||||
The `configure' shell script attempts to guess correct values for
|
|
||||||
various system-dependent variables used during compilation. It uses
|
|
||||||
those values to create a `Makefile' in each directory of the package.
|
|
||||||
It may also create one or more `.h' files containing system-dependent
|
|
||||||
definitions. Finally, it creates a shell script `config.status' that
|
|
||||||
you can run in the future to recreate the current configuration, and a
|
|
||||||
file `config.log' containing compiler output (useful mainly for
|
|
||||||
debugging `configure').
|
|
||||||
|
|
||||||
It can also use an optional file (typically called `config.cache'
|
|
||||||
and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
|
||||||
the results of its tests to speed up reconfiguring. Caching is
|
|
||||||
disabled by default to prevent problems with accidental use of stale
|
|
||||||
cache files.
|
|
||||||
|
|
||||||
If you need to do unusual things to compile the package, please try
|
|
||||||
to figure out how `configure' could check whether to do them, and mail
|
|
||||||
diffs or instructions to the address given in the `README' so they can
|
|
||||||
be considered for the next release. If you are using the cache, and at
|
|
||||||
some point `config.cache' contains results you don't want to keep, you
|
|
||||||
may remove or edit it.
|
|
||||||
|
|
||||||
The file `configure.ac' (or `configure.in') is used to create
|
|
||||||
`configure' by a program called `autoconf'. You need `configure.ac' if
|
|
||||||
you want to change it or regenerate `configure' using a newer version
|
|
||||||
of `autoconf'.
|
|
||||||
|
|
||||||
The simplest way to compile this package is:
|
|
||||||
|
|
||||||
1. `cd' to the directory containing the package's source code and type
|
|
||||||
`./configure' to configure the package for your system.
|
|
||||||
|
|
||||||
Running `configure' might take a while. While running, it prints
|
|
||||||
some messages telling which features it is checking for.
|
|
||||||
|
|
||||||
2. Type `make' to compile the package.
|
|
||||||
|
|
||||||
3. Optionally, type `make check' to run any self-tests that come with
|
|
||||||
the package, generally using the just-built uninstalled binaries.
|
|
||||||
|
|
||||||
4. Type `make install' to install the programs and any data files and
|
|
||||||
documentation. When installing into a prefix owned by root, it is
|
|
||||||
recommended that the package be configured and built as a regular
|
|
||||||
user, and only the `make install' phase executed with root
|
|
||||||
privileges.
|
|
||||||
|
|
||||||
5. Optionally, type `make installcheck' to repeat any self-tests, but
|
|
||||||
this time using the binaries in their final installed location.
|
|
||||||
This target does not install anything. Running this target as a
|
|
||||||
regular user, particularly if the prior `make install' required
|
|
||||||
root privileges, verifies that the installation completed
|
|
||||||
correctly.
|
|
||||||
|
|
||||||
6. You can remove the program binaries and object files from the
|
|
||||||
source code directory by typing `make clean'. To also remove the
|
|
||||||
files that `configure' created (so you can compile the package for
|
|
||||||
a different kind of computer), type `make distclean'. There is
|
|
||||||
also a `make maintainer-clean' target, but that is intended mainly
|
|
||||||
for the package's developers. If you use it, you may have to get
|
|
||||||
all sorts of other programs in order to regenerate files that came
|
|
||||||
with the distribution.
|
|
||||||
|
|
||||||
7. Often, you can also type `make uninstall' to remove the installed
|
|
||||||
files again. In practice, not all packages have tested that
|
|
||||||
uninstallation works correctly, even though it is required by the
|
|
||||||
GNU Coding Standards.
|
|
||||||
|
|
||||||
8. Some packages, particularly those that use Automake, provide `make
|
|
||||||
distcheck', which can by used by developers to test that all other
|
|
||||||
targets like `make install' and `make uninstall' work correctly.
|
|
||||||
This target is generally not run by end users.
|
|
||||||
|
|
||||||
Compilers and Options
|
|
||||||
=====================
|
|
||||||
|
|
||||||
Some systems require unusual options for compilation or linking that
|
|
||||||
the `configure' script does not know about. Run `./configure --help'
|
|
||||||
for details on some of the pertinent environment variables.
|
|
||||||
|
|
||||||
You can give `configure' initial values for configuration parameters
|
|
||||||
by setting variables in the command line or in the environment. Here
|
|
||||||
is an example:
|
|
||||||
|
|
||||||
./configure CC=c99 CFLAGS=-g LIBS=-lposix
|
|
||||||
|
|
||||||
*Note Defining Variables::, for more details.
|
|
||||||
|
|
||||||
Compiling For Multiple Architectures
|
|
||||||
====================================
|
|
||||||
|
|
||||||
You can compile the package for more than one kind of computer at the
|
|
||||||
same time, by placing the object files for each architecture in their
|
|
||||||
own directory. To do this, you can use GNU `make'. `cd' to the
|
|
||||||
directory where you want the object files and executables to go and run
|
|
||||||
the `configure' script. `configure' automatically checks for the
|
|
||||||
source code in the directory that `configure' is in and in `..'. This
|
|
||||||
is known as a "VPATH" build.
|
|
||||||
|
|
||||||
With a non-GNU `make', it is safer to compile the package for one
|
|
||||||
architecture at a time in the source code directory. After you have
|
|
||||||
installed the package for one architecture, use `make distclean' before
|
|
||||||
reconfiguring for another architecture.
|
|
||||||
|
|
||||||
On MacOS X 10.5 and later systems, you can create libraries and
|
|
||||||
executables that work on multiple system types--known as "fat" or
|
|
||||||
"universal" binaries--by specifying multiple `-arch' options to the
|
|
||||||
compiler but only a single `-arch' option to the preprocessor. Like
|
|
||||||
this:
|
|
||||||
|
|
||||||
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
|
||||||
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
|
||||||
CPP="gcc -E" CXXCPP="g++ -E"
|
|
||||||
|
|
||||||
This is not guaranteed to produce working output in all cases, you
|
|
||||||
may have to build one architecture at a time and combine the results
|
|
||||||
using the `lipo' tool if you have problems.
|
|
||||||
|
|
||||||
Installation Names
|
|
||||||
==================
|
|
||||||
|
|
||||||
By default, `make install' installs the package's commands under
|
|
||||||
`/usr/local/bin', include files under `/usr/local/include', etc. You
|
|
||||||
can specify an installation prefix other than `/usr/local' by giving
|
|
||||||
`configure' the option `--prefix=PREFIX', where PREFIX must be an
|
|
||||||
absolute file name.
|
|
||||||
|
|
||||||
You can specify separate installation prefixes for
|
|
||||||
architecture-specific files and architecture-independent files. If you
|
|
||||||
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
|
|
||||||
PREFIX as the prefix for installing programs and libraries.
|
|
||||||
Documentation and other data files still use the regular prefix.
|
|
||||||
|
|
||||||
In addition, if you use an unusual directory layout you can give
|
|
||||||
options like `--bindir=DIR' to specify different values for particular
|
|
||||||
kinds of files. Run `configure --help' for a list of the directories
|
|
||||||
you can set and what kinds of files go in them. In general, the
|
|
||||||
default for these options is expressed in terms of `${prefix}', so that
|
|
||||||
specifying just `--prefix' will affect all of the other directory
|
|
||||||
specifications that were not explicitly provided.
|
|
||||||
|
|
||||||
The most portable way to affect installation locations is to pass the
|
|
||||||
correct locations to `configure'; however, many packages provide one or
|
|
||||||
both of the following shortcuts of passing variable assignments to the
|
|
||||||
`make install' command line to change installation locations without
|
|
||||||
having to reconfigure or recompile.
|
|
||||||
|
|
||||||
The first method involves providing an override variable for each
|
|
||||||
affected directory. For example, `make install
|
|
||||||
prefix=/alternate/directory' will choose an alternate location for all
|
|
||||||
directory configuration variables that were expressed in terms of
|
|
||||||
`${prefix}'. Any directories that were specified during `configure',
|
|
||||||
but not in terms of `${prefix}', must each be overridden at install
|
|
||||||
time for the entire installation to be relocated. The approach of
|
|
||||||
makefile variable overrides for each directory variable is required by
|
|
||||||
the GNU Coding Standards, and ideally causes no recompilation.
|
|
||||||
However, some platforms have known limitations with the semantics of
|
|
||||||
shared libraries that end up requiring recompilation when using this
|
|
||||||
method, particularly noticeable in packages that use GNU Libtool.
|
|
||||||
|
|
||||||
The second method involves providing the `DESTDIR' variable. For
|
|
||||||
example, `make install DESTDIR=/alternate/directory' will prepend
|
|
||||||
`/alternate/directory' before all installation names. The approach of
|
|
||||||
`DESTDIR' overrides is not required by the GNU Coding Standards, and
|
|
||||||
does not work on platforms that have drive letters. On the other hand,
|
|
||||||
it does better at avoiding recompilation issues, and works well even
|
|
||||||
when some directory options were not specified in terms of `${prefix}'
|
|
||||||
at `configure' time.
|
|
||||||
|
|
||||||
Optional Features
|
|
||||||
=================
|
|
||||||
|
|
||||||
If the package supports it, you can cause programs to be installed
|
|
||||||
with an extra prefix or suffix on their names by giving `configure' the
|
|
||||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
|
||||||
|
|
||||||
Some packages pay attention to `--enable-FEATURE' options to
|
|
||||||
`configure', where FEATURE indicates an optional part of the package.
|
|
||||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
|
||||||
is something like `gnu-as' or `x' (for the X Window System). The
|
|
||||||
`README' should mention any `--enable-' and `--with-' options that the
|
|
||||||
package recognizes.
|
|
||||||
|
|
||||||
For packages that use the X Window System, `configure' can usually
|
|
||||||
find the X include and library files automatically, but if it doesn't,
|
|
||||||
you can use the `configure' options `--x-includes=DIR' and
|
|
||||||
`--x-libraries=DIR' to specify their locations.
|
|
||||||
|
|
||||||
Some packages offer the ability to configure how verbose the
|
|
||||||
execution of `make' will be. For these packages, running `./configure
|
|
||||||
--enable-silent-rules' sets the default to minimal output, which can be
|
|
||||||
overridden with `make V=1'; while running `./configure
|
|
||||||
--disable-silent-rules' sets the default to verbose, which can be
|
|
||||||
overridden with `make V=0'.
|
|
||||||
|
|
||||||
Particular systems
|
|
||||||
==================
|
|
||||||
|
|
||||||
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
|
|
||||||
CC is not installed, it is recommended to use the following options in
|
|
||||||
order to use an ANSI C compiler:
|
|
||||||
|
|
||||||
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
|
|
||||||
|
|
||||||
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
|
|
||||||
|
|
||||||
HP-UX `make' updates targets which have the same time stamps as
|
|
||||||
their prerequisites, which makes it generally unusable when shipped
|
|
||||||
generated files such as `configure' are involved. Use GNU `make'
|
|
||||||
instead.
|
|
||||||
|
|
||||||
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
|
|
||||||
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
|
|
||||||
a workaround. If GNU CC is not installed, it is therefore recommended
|
|
||||||
to try
|
|
||||||
|
|
||||||
./configure CC="cc"
|
|
||||||
|
|
||||||
and if that doesn't work, try
|
|
||||||
|
|
||||||
./configure CC="cc -nodtk"
|
|
||||||
|
|
||||||
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
|
|
||||||
directory contains several dysfunctional programs; working variants of
|
|
||||||
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
|
|
||||||
in your `PATH', put it _after_ `/usr/bin'.
|
|
||||||
|
|
||||||
On Haiku, software installed for all users goes in `/boot/common',
|
|
||||||
not `/usr/local'. It is recommended to use the following options:
|
|
||||||
|
|
||||||
./configure --prefix=/boot/common
|
|
||||||
|
|
||||||
Specifying the System Type
|
|
||||||
==========================
|
|
||||||
|
|
||||||
There may be some features `configure' cannot figure out
|
|
||||||
automatically, but needs to determine by the type of machine the package
|
|
||||||
will run on. Usually, assuming the package is built to be run on the
|
|
||||||
_same_ architectures, `configure' can figure that out, but if it prints
|
|
||||||
a message saying it cannot guess the machine type, give it the
|
|
||||||
`--build=TYPE' option. TYPE can either be a short name for the system
|
|
||||||
type, such as `sun4', or a canonical name which has the form:
|
|
||||||
|
|
||||||
CPU-COMPANY-SYSTEM
|
|
||||||
|
|
||||||
where SYSTEM can have one of these forms:
|
|
||||||
|
|
||||||
OS
|
|
||||||
KERNEL-OS
|
|
||||||
|
|
||||||
See the file `config.sub' for the possible values of each field. If
|
|
||||||
`config.sub' isn't included in this package, then this package doesn't
|
|
||||||
need to know the machine type.
|
|
||||||
|
|
||||||
If you are _building_ compiler tools for cross-compiling, you should
|
|
||||||
use the option `--target=TYPE' to select the type of system they will
|
|
||||||
produce code for.
|
|
||||||
|
|
||||||
If you want to _use_ a cross compiler, that generates code for a
|
|
||||||
platform different from the build platform, you should specify the
|
|
||||||
"host" platform (i.e., that on which the generated programs will
|
|
||||||
eventually be run) with `--host=TYPE'.
|
|
||||||
|
|
||||||
Sharing Defaults
|
|
||||||
================
|
|
||||||
|
|
||||||
If you want to set default values for `configure' scripts to share,
|
|
||||||
you can create a site shell script called `config.site' that gives
|
|
||||||
default values for variables like `CC', `cache_file', and `prefix'.
|
|
||||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
|
||||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
|
||||||
`CONFIG_SITE' environment variable to the location of the site script.
|
|
||||||
A warning: not all `configure' scripts look for a site script.
|
|
||||||
|
|
||||||
Defining Variables
|
|
||||||
==================
|
|
||||||
|
|
||||||
Variables not defined in a site shell script can be set in the
|
|
||||||
environment passed to `configure'. However, some packages may run
|
|
||||||
configure again during the build, and the customized values of these
|
|
||||||
variables may be lost. In order to avoid this problem, you should set
|
|
||||||
them in the `configure' command line, using `VAR=value'. For example:
|
|
||||||
|
|
||||||
./configure CC=/usr/local2/bin/gcc
|
|
||||||
|
|
||||||
causes the specified `gcc' to be used as the C compiler (unless it is
|
|
||||||
overridden in the site shell script).
|
|
||||||
|
|
||||||
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
|
|
||||||
an Autoconf limitation. Until the limitation is lifted, you can use
|
|
||||||
this workaround:
|
|
||||||
|
|
||||||
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
|
|
||||||
|
|
||||||
`configure' Invocation
|
|
||||||
======================
|
|
||||||
|
|
||||||
`configure' recognizes the following options to control how it
|
|
||||||
operates.
|
|
||||||
|
|
||||||
`--help'
|
|
||||||
`-h'
|
|
||||||
Print a summary of all of the options to `configure', and exit.
|
|
||||||
|
|
||||||
`--help=short'
|
|
||||||
`--help=recursive'
|
|
||||||
Print a summary of the options unique to this package's
|
|
||||||
`configure', and exit. The `short' variant lists options used
|
|
||||||
only in the top level, while the `recursive' variant lists options
|
|
||||||
also present in any nested packages.
|
|
||||||
|
|
||||||
`--version'
|
|
||||||
`-V'
|
|
||||||
Print the version of Autoconf used to generate the `configure'
|
|
||||||
script, and exit.
|
|
||||||
|
|
||||||
`--cache-file=FILE'
|
|
||||||
Enable the cache: use and save the results of the tests in FILE,
|
|
||||||
traditionally `config.cache'. FILE defaults to `/dev/null' to
|
|
||||||
disable caching.
|
|
||||||
|
|
||||||
`--config-cache'
|
|
||||||
`-C'
|
|
||||||
Alias for `--cache-file=config.cache'.
|
|
||||||
|
|
||||||
`--quiet'
|
|
||||||
`--silent'
|
|
||||||
`-q'
|
|
||||||
Do not print messages saying which checks are being made. To
|
|
||||||
suppress all normal output, redirect it to `/dev/null' (any error
|
|
||||||
messages will still be shown).
|
|
||||||
|
|
||||||
`--srcdir=DIR'
|
|
||||||
Look for the package's source code in directory DIR. Usually
|
|
||||||
`configure' can determine that directory automatically.
|
|
||||||
|
|
||||||
`--prefix=DIR'
|
|
||||||
Use DIR as the installation prefix. *note Installation Names::
|
|
||||||
for more details, including other options available for fine-tuning
|
|
||||||
the installation locations.
|
|
||||||
|
|
||||||
`--no-create'
|
|
||||||
`-n'
|
|
||||||
Run the configure checks, but stop before creating any output
|
|
||||||
files.
|
|
||||||
|
|
||||||
`configure' also accepts some other, not widely useful, options. Run
|
|
||||||
`configure --help' for more details.
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user