merge with latest develop
This commit is contained in:
+170
-29
@@ -30,6 +30,8 @@ def sendSocialMediaMessage(pipeChannel, pipeColor, pipeMessage) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def doRedHatBuild = false
|
||||||
|
|
||||||
pipeline {
|
pipeline {
|
||||||
agent {
|
agent {
|
||||||
label 'bellatrix'
|
label 'bellatrix'
|
||||||
@@ -38,10 +40,35 @@ pipeline {
|
|||||||
disableConcurrentBuilds()
|
disableConcurrentBuilds()
|
||||||
timestamps()
|
timestamps()
|
||||||
gitLabConnection('OAI GitLab')
|
gitLabConnection('OAI GitLab')
|
||||||
gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim"])
|
gitlabBuilds(builds: ["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-FDD-Band7", "Test-TDD-Band40"])
|
||||||
|
ansiColor('xterm')
|
||||||
}
|
}
|
||||||
|
|
||||||
stages {
|
stages {
|
||||||
|
stage ("Verify Parameters") {
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
|
||||||
|
def allParametersPresent = true
|
||||||
|
|
||||||
|
if (params.RedHatRemoteServer == null) {
|
||||||
|
allParametersPresent = false
|
||||||
|
}
|
||||||
|
if (params.RedHatRemoteCredentials == null) {
|
||||||
|
allParametersPresent = false
|
||||||
|
}
|
||||||
|
if (params.RedHatWorkingPath == null) {
|
||||||
|
allParametersPresent = false
|
||||||
|
}
|
||||||
|
if (allParametersPresent) {
|
||||||
|
echo "Performing Red Hat Build"
|
||||||
|
doRedHatBuild = true
|
||||||
|
} else {
|
||||||
|
doRedHatBuild = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
stage ("Verify Guidelines") {
|
stage ("Verify Guidelines") {
|
||||||
steps {
|
steps {
|
||||||
echo "Git URL is ${GIT_URL}"
|
echo "Git URL is ${GIT_URL}"
|
||||||
@@ -126,14 +153,14 @@ pipeline {
|
|||||||
stage ("Analysis with cppcheck") {
|
stage ("Analysis with cppcheck") {
|
||||||
steps {
|
steps {
|
||||||
gitlabCommitStatus(name: "Analysis with cppcheck") {
|
gitlabCommitStatus(name: "Analysis with cppcheck") {
|
||||||
sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant cppcheck --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
|
sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant cppcheck --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Build eNb-USRP") {
|
stage ("Build eNb-USRP") {
|
||||||
steps {
|
steps {
|
||||||
gitlabCommitStatus(name: "Build eNb-USRP") {
|
gitlabCommitStatus(name: "Build eNb-USRP") {
|
||||||
sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
|
sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -165,22 +192,52 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stage ("Build eNb-USRP on Red Hat") {
|
||||||
|
when {
|
||||||
|
expression {doRedHatBuild}
|
||||||
|
}
|
||||||
|
steps {
|
||||||
|
gitlabCommitStatus(name: "Build eNb-USRP-CentOS") {
|
||||||
|
script {
|
||||||
|
try {
|
||||||
|
withCredentials([
|
||||||
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.RedHatRemoteCredentials}", usernameVariable: 'RH_Username', passwordVariable: 'RH_Password']
|
||||||
|
]) {
|
||||||
|
sh "./ci-scripts/buildOnRH.sh --workspace $WORKSPACE --job-name ${JOB_NAME} --build-id ${BUILD_ID} --remote-host ${params.RedHatRemoteServer} --remote-path ${params.RedHatWorkingPath} --remote-user-name ${RH_Username} --remote-password ${RH_Password}"
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
echo "Red Hat build failed not an error now"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
dir ('archives') {
|
dir ('archives') {
|
||||||
sh "zip -r -qq vm_build_logs.zip basic_sim enb_usrp phy_sim cppcheck enb_eth ue_eth"
|
sh "zip -r -qq vm_build_logs.zip basic_sim enb_usrp phy_sim cppcheck enb_eth ue_eth red_hat"
|
||||||
}
|
}
|
||||||
if(fileExists('archives/vm_build_logs.zip')) {
|
if(fileExists('archives/vm_build_logs.zip')) {
|
||||||
archiveArtifacts artifacts: 'archives/vm_build_logs.zip'
|
archiveArtifacts artifacts: 'archives/vm_build_logs.zip'
|
||||||
}
|
}
|
||||||
if ("MERGE".equals(env.gitlabActionType)) {
|
if ("MERGE".equals(env.gitlabActionType)) {
|
||||||
sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger merge-request --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}"
|
sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger merge-request --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}"
|
||||||
|
sh "./ci-scripts/checkAddedWarnings.sh --src-branch ${env.gitlabSourceBranch} --target-branch ${env.gitlabTargetBranch}"
|
||||||
|
def res=readFile('./oai_warning_files.txt').trim();
|
||||||
|
if ("0".equals(res)) {
|
||||||
|
echo "No issues w/ warnings/errors in this merge request"
|
||||||
|
} else {
|
||||||
|
def fileList=readFile('./oai_warning_files_list.txt').trim();
|
||||||
|
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): Some modified files in Merge Request MAY have INTRODUCED WARNINGS (" + fileList + ")"
|
||||||
|
addGitLabMRComment comment: message
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}"
|
sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}"
|
||||||
}
|
}
|
||||||
if(fileExists('build_results.html')) {
|
if(fileExists('build_results.html')) {
|
||||||
|
sh "sed -i -e 's#Build-ID: ${BUILD_ID}#Build-ID: <a href=\"{BUILD_URL}\">${BUILD_ID}</a>#' build_results.html"
|
||||||
archiveArtifacts artifacts: 'build_results.html'
|
archiveArtifacts artifacts: 'build_results.html'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -193,36 +250,113 @@ pipeline {
|
|||||||
stage ("Test physical simulators") {
|
stage ("Test physical simulators") {
|
||||||
steps {
|
steps {
|
||||||
gitlabCommitStatus(name: "Test phy-sim") {
|
gitlabCommitStatus(name: "Test phy-sim") {
|
||||||
sh "./ci-scripts/runTestOnVM.sh --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
|
sh "./ci-scripts/runTestOnVM.sh --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test basic simulator") {
|
stage ("Test basic simulator") {
|
||||||
steps {
|
steps {
|
||||||
//gitlabCommitStatus(name: "Test basic-sim") {
|
gitlabCommitStatus(name: "Test basic-sim") {
|
||||||
sh "./ci-scripts/runTestOnVM.sh --workspace $WORKSPACE --variant basic-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
|
sh "./ci-scripts/runTestOnVM.sh --workspace $WORKSPACE --variant basic-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Test FDD - Band 7 - B210") {
|
stage ("Test on CI bench #1") {
|
||||||
steps {
|
stages {
|
||||||
script {
|
stage ("Test FDD - Band 7 - B210") {
|
||||||
if ("MERGE".equals(env.gitlabActionType)) {
|
steps {
|
||||||
build job: 'eNB-CI-FDD-Band7-B210',
|
script {
|
||||||
parameters: [
|
try {
|
||||||
string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
|
if ("MERGE".equals(env.gitlabActionType)) {
|
||||||
string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)),
|
gitlabCommitStatus(name: "Test-FDD-Band7") {
|
||||||
string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
|
build job: 'eNB-CI-FDD-Band7-B210',
|
||||||
booleanParam(name: 'eNB_mergeRequest', value: true)
|
parameters: [
|
||||||
]
|
string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
|
||||||
} else {
|
string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)),
|
||||||
build job: 'eNB-CI-FDD-Band7-B210',
|
string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
|
||||||
parameters: [
|
booleanParam(name: 'eNB_mergeRequest', value: true)
|
||||||
string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
|
]
|
||||||
string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)),
|
}
|
||||||
string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)),
|
} else {
|
||||||
booleanParam(name: 'eNB_mergeRequest', value: false)
|
gitlabCommitStatus(name: "Test-FDD-Band7") {
|
||||||
]
|
build job: 'eNB-CI-FDD-Band7-B210',
|
||||||
|
parameters: [
|
||||||
|
string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
|
||||||
|
string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)),
|
||||||
|
string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)),
|
||||||
|
booleanParam(name: 'eNB_mergeRequest', value: false)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
currentBuild.result = 'FAILURE'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
// In case of any non-success, we are retrieving the HTML report of the last completed
|
||||||
|
// slave job.
|
||||||
|
// The only drop-back is that we may retrieve the HTML report of a previous build
|
||||||
|
always {
|
||||||
|
script {
|
||||||
|
if (!fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
|
||||||
|
copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210',
|
||||||
|
filter: 'test_results*.html',
|
||||||
|
selector: lastCompleted())
|
||||||
|
if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
|
||||||
|
archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage ("Test TDD - Band 40 - B210") {
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
try {
|
||||||
|
if ("MERGE".equals(env.gitlabActionType)) {
|
||||||
|
gitlabCommitStatus(name: "Test-TDD-Band40") {
|
||||||
|
build job: 'eNB-CI-TDD-Band40-B210',
|
||||||
|
parameters: [
|
||||||
|
string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
|
||||||
|
string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)),
|
||||||
|
string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
|
||||||
|
booleanParam(name: 'eNB_mergeRequest', value: true)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
gitlabCommitStatus(name: "Test-TDD-Band40") {
|
||||||
|
build job: 'eNB-CI-TDD-Band40-B210',
|
||||||
|
parameters: [
|
||||||
|
string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
|
||||||
|
string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)),
|
||||||
|
string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)),
|
||||||
|
booleanParam(name: 'eNB_mergeRequest', value: false)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
currentBuild.result = 'FAILURE'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
// In case of any non-success, we are retrieving the HTML report of the last completed
|
||||||
|
// slave job.
|
||||||
|
// The only drop-back is that we may retrieve the HTML report of a previous build
|
||||||
|
always {
|
||||||
|
script {
|
||||||
|
if (!fileExists('test_results-eNB-CI-TDD-Band40-B210.html')) {
|
||||||
|
copyArtifacts(projectName: 'eNB-CI-TDD-Band40-B210',
|
||||||
|
filter: 'test_results*.html',
|
||||||
|
selector: lastCompleted())
|
||||||
|
if (fileExists('test_results-eNB-CI-TDD-Band40-B210.html')) {
|
||||||
|
archiveArtifacts artifacts: 'test_results-eNB-CI-TDD-Band40-B210.html'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -232,12 +366,19 @@ pipeline {
|
|||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
dir ('archives') {
|
dir ('archives') {
|
||||||
sh "if [ -d */test ]; then zip -r -qq vm_tests_logs.zip */test ; fi"
|
sh "if [ -d basic_sim/test ] || [ -d phy_sim/test ]; then zip -r -qq vm_tests_logs.zip */test ; fi"
|
||||||
}
|
}
|
||||||
if(fileExists('archives/vm_tests_logs.zip')) {
|
if(fileExists('archives/vm_tests_logs.zip')) {
|
||||||
archiveArtifacts artifacts: 'archives/vm_tests_logs.zip'
|
archiveArtifacts artifacts: 'archives/vm_tests_logs.zip'
|
||||||
archiveArtifacts artifacts: 'archives/*/test/results_autotests*.xml'
|
if ("MERGE".equals(env.gitlabActionType)) {
|
||||||
archiveArtifacts artifacts: 'archives/*/test/*.xsl'
|
sh "./ci-scripts/reportTestLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger merge-request --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}"
|
||||||
|
} else {
|
||||||
|
sh "./ci-scripts/reportTestLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}"
|
||||||
|
}
|
||||||
|
if(fileExists('test_simulator_results.html')) {
|
||||||
|
sh "sed -i -e 's#Build-ID: ${BUILD_ID}#Build-ID: <a href=\"{BUILD_URL}\">${BUILD_ID}</a>#' test_simulator_results.html"
|
||||||
|
archiveArtifacts artifacts: 'test_simulator_results.html'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,9 +44,12 @@ termStatusArray[termSPGW] = false
|
|||||||
termStatusArray[termMME] = false
|
termStatusArray[termMME] = false
|
||||||
termStatusArray[termHSS] = false
|
termStatusArray[termHSS] = false
|
||||||
|
|
||||||
|
// Global Parameters. Normally they should be populated when the master job
|
||||||
|
// triggers the slave job with parameters
|
||||||
def eNB_Repository
|
def eNB_Repository
|
||||||
def eNB_Branch
|
def eNB_Branch
|
||||||
def eNB_CommitID
|
def eNB_CommitID
|
||||||
|
def eNB_AllowMergeRequestProcess = false
|
||||||
|
|
||||||
pipeline {
|
pipeline {
|
||||||
agent {
|
agent {
|
||||||
@@ -118,7 +121,7 @@ pipeline {
|
|||||||
if (params.eNB_Credentials == null) {
|
if (params.eNB_Credentials == null) {
|
||||||
allParametersPresent = false
|
allParametersPresent = false
|
||||||
}
|
}
|
||||||
// the following 3 parameters should be pushed by the master trigger
|
// the following 4 parameters should be pushed by the master trigger
|
||||||
// if not present, take the job GIT variables (used for developing)
|
// if not present, take the job GIT variables (used for developing)
|
||||||
if (params.eNB_Repository == null) {
|
if (params.eNB_Repository == null) {
|
||||||
eNB_Repository = env.GIT_URL
|
eNB_Repository = env.GIT_URL
|
||||||
@@ -138,6 +141,9 @@ pipeline {
|
|||||||
eNB_CommitID = params.eNB_CommitID
|
eNB_CommitID = params.eNB_CommitID
|
||||||
}
|
}
|
||||||
echo "eNB_CommitID : ${eNB_CommitID}"
|
echo "eNB_CommitID : ${eNB_CommitID}"
|
||||||
|
if (params.eNB_mergeRequest != null) {
|
||||||
|
eNB_AllowMergeRequestProcess = params.eNB_mergeRequest
|
||||||
|
}
|
||||||
|
|
||||||
if (params.EPC_IPAddress == null) {
|
if (params.EPC_IPAddress == null) {
|
||||||
allParametersPresent = false
|
allParametersPresent = false
|
||||||
@@ -179,7 +185,7 @@ pipeline {
|
|||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password']
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password']
|
||||||
]) {
|
]) {
|
||||||
sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBRepository=${eNB_Repository} --eNBBranch=${eNB_Branch} --eNBCommitID=${eNB_CommitID} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${testXMLFile}"
|
sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBRepository=${eNB_Repository} --eNBBranch=${eNB_Branch} --eNBCommitID=${eNB_CommitID} --eNB_AllowMerge=${eNB_AllowMergeRequestProcess} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${testXMLFile}"
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
@@ -312,6 +318,11 @@ pipeline {
|
|||||||
if(fileExists("enb.log.${env.BUILD_ID}.zip")) {
|
if(fileExists("enb.log.${env.BUILD_ID}.zip")) {
|
||||||
archiveArtifacts "enb.log.${env.BUILD_ID}.zip"
|
archiveArtifacts "enb.log.${env.BUILD_ID}.zip"
|
||||||
}
|
}
|
||||||
|
if(fileExists("ci-scripts/test_results.html")) {
|
||||||
|
sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html"
|
||||||
|
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's#TEMPLATE_BUILD_ID#<a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' test_results-${JOB_NAME}.html"
|
||||||
|
archiveArtifacts "test_results-${JOB_NAME}.html"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -387,6 +398,24 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stage('Log Collection (Iperf)') {
|
||||||
|
steps {
|
||||||
|
withCredentials([
|
||||||
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
||||||
|
]) {
|
||||||
|
echo '\u2705 \u001B[32mLog Collection (Iperf)\u001B[0m'
|
||||||
|
sh "python3 ci-scripts/main.py --mode=LogCollectIperf --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
||||||
|
|
||||||
|
echo '\u2705 \u001B[32mLog Transfer (Iperf)\u001B[0m'
|
||||||
|
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/iperf.log.zip ./iperf.log.${env.BUILD_ID}.zip || true"
|
||||||
|
}
|
||||||
|
script {
|
||||||
|
if(fileExists("iperf.log.${env.BUILD_ID}.zip")) {
|
||||||
|
archiveArtifacts "iperf.log.${env.BUILD_ID}.zip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Executable
+209
@@ -0,0 +1,209 @@
|
|||||||
|
#!/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 RedHat Build Check script"
|
||||||
|
echo " Original Author: Raphael Defosseux"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Usage:"
|
||||||
|
echo "------"
|
||||||
|
echo " buildOnRH.sh [OPTIONS]"
|
||||||
|
echo ""
|
||||||
|
echo "Options:"
|
||||||
|
echo "--------"
|
||||||
|
echo " --job-name #### OR -jn ####"
|
||||||
|
echo " Specify the name of the Jenkins job."
|
||||||
|
echo ""
|
||||||
|
echo " --build-id #### OR -id ####"
|
||||||
|
echo " Specify the build ID of the Jenkins job."
|
||||||
|
echo ""
|
||||||
|
echo " --workspace #### OR -ws ####"
|
||||||
|
echo " Specify the workspace."
|
||||||
|
echo ""
|
||||||
|
echo " --remote-host #### OR -rh ####"
|
||||||
|
echo " Specify the RedHat remote server."
|
||||||
|
echo ""
|
||||||
|
echo " --remote-user-name #### OR -ru ####"
|
||||||
|
echo " Specify the RedHat remote server username."
|
||||||
|
echo ""
|
||||||
|
echo " --remote-password #### OR -rp ####"
|
||||||
|
echo " Specify the RedHat remote server password."
|
||||||
|
echo ""
|
||||||
|
echo " --remote-path #### OR -ra ####"
|
||||||
|
echo " Specify the RedHat remote server path to work on."
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -lt 1 ] || [ $# -gt 14 ]
|
||||||
|
then
|
||||||
|
echo "Syntax Error: not the correct number of arguments"
|
||||||
|
echo ""
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
RH_HOST=XX
|
||||||
|
RH_USER=XX
|
||||||
|
RH_PASSWD=XX
|
||||||
|
RH_PATH=XX
|
||||||
|
JOB_NAME=XX
|
||||||
|
BUILD_ID=XX
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]
|
||||||
|
do
|
||||||
|
key="$1"
|
||||||
|
|
||||||
|
case $key in
|
||||||
|
-h|--help)
|
||||||
|
shift
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-jn|--job-name)
|
||||||
|
JOB_NAME="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-id|--build-id)
|
||||||
|
BUILD_ID="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-ws|--workspace)
|
||||||
|
JENKINS_WKSP="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-rh|--remote-host)
|
||||||
|
RH_HOST="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-ru|--remote-user-name)
|
||||||
|
RH_USER="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-rp|--remote-password)
|
||||||
|
RH_PASSWD="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-ra|--remote-path)
|
||||||
|
RH_PATH="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Syntax Error: unknown option: $key"
|
||||||
|
echo ""
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ! -f $JENKINS_WKSP/localZip.zip ]
|
||||||
|
then
|
||||||
|
echo "Missing localZip.zip file!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$JOB_NAME" == "XX" ] || [ "$BUILD_ID" == "XX" ] || [ "$RH_HOST" == "XX" ] || [ "$RH_USER" == "XX" ] || [ "$RH_PASSWD" == "XX" ] || [ "$RH_PATH" == "XX" ]
|
||||||
|
then
|
||||||
|
echo "Missing options"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Copying GIT repo into RedHat Server"
|
||||||
|
echo "############################################################"
|
||||||
|
echo "rm -Rf ${RH_PATH}" >> rh-cmd.txt
|
||||||
|
echo "mkdir -p ${RH_PATH}" >> rh-cmd.txt
|
||||||
|
|
||||||
|
sshpass -p ${RH_PASSWD} ssh -o 'StrictHostKeyChecking no' ${RH_USER}@${RH_HOST} < rh-cmd.txt
|
||||||
|
rm -f rh-cmd.txt
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Running install and build script on RedHat Server"
|
||||||
|
echo "############################################################"
|
||||||
|
sshpass -p ${RH_PASSWD} scp -o 'StrictHostKeyChecking no' $JENKINS_WKSP/localZip.zip ${RH_USER}@${RH_HOST}:${RH_PATH}
|
||||||
|
|
||||||
|
echo "cd ${RH_PATH}" > rh-cmd.txt
|
||||||
|
echo "unzip -qq localZip.zip" >> rh-cmd.txt
|
||||||
|
echo "source oaienv" >> rh-cmd.txt
|
||||||
|
echo "cd cmake_targets" >> rh-cmd.txt
|
||||||
|
echo "mkdir -p log" >> rh-cmd.txt
|
||||||
|
echo "./build_oai -I -w USRP --eNB > log/install-build.txt 2>&1" >> rh-cmd.txt
|
||||||
|
sshpass -p ${RH_PASSWD} ssh -o 'StrictHostKeyChecking no' ${RH_USER}@${RH_HOST} < rh-cmd.txt
|
||||||
|
|
||||||
|
rm -f rh-cmd.txt
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Creating a tmp folder to store results and artifacts"
|
||||||
|
echo "############################################################"
|
||||||
|
if [ ! -d $JENKINS_WKSP/archives ]
|
||||||
|
then
|
||||||
|
mkdir -p $JENKINS_WKSP/archives
|
||||||
|
fi
|
||||||
|
|
||||||
|
ARCHIVES_LOC=$JENKINS_WKSP/archives/red_hat
|
||||||
|
if [ ! -d $ARCHIVES_LOC ]
|
||||||
|
then
|
||||||
|
mkdir -p $ARCHIVES_LOC
|
||||||
|
fi
|
||||||
|
|
||||||
|
sshpass -p ${RH_PASSWD} scp -o 'StrictHostKeyChecking no' ${RH_USER}@${RH_HOST}:${RH_PATH}/cmake_targets/log/*.txt $ARCHIVES_LOC
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Checking build status"
|
||||||
|
echo "############################################################"
|
||||||
|
|
||||||
|
LOG_PATTERN=.Rel14.txt
|
||||||
|
NB_PATTERN_FILES=4
|
||||||
|
|
||||||
|
LOG_FILES=`ls $ARCHIVES_LOC/*.txt`
|
||||||
|
STATUS=0
|
||||||
|
NB_FOUND_FILES=0
|
||||||
|
|
||||||
|
for FULLFILE in $LOG_FILES
|
||||||
|
do
|
||||||
|
if [[ $FULLFILE == *"$LOG_PATTERN"* ]]
|
||||||
|
then
|
||||||
|
filename=$(basename -- "$FULLFILE")
|
||||||
|
PASS_PATTERN=`echo $filename | sed -e "s#$LOG_PATTERN##"`
|
||||||
|
LOCAL_STAT=`egrep -c "Built target $PASS_PATTERN" $FULLFILE`
|
||||||
|
if [ $LOCAL_STAT -eq 0 ]; then STATUS=-1; fi
|
||||||
|
NB_FOUND_FILES=$((NB_FOUND_FILES + 1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $NB_PATTERN_FILES -ne $NB_FOUND_FILES ]; then STATUS=-1; fi
|
||||||
|
|
||||||
|
if [ $STATUS -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "STATUS seems OK"
|
||||||
|
else
|
||||||
|
echo "STATUS failed?"
|
||||||
|
fi
|
||||||
|
exit $STATUS
|
||||||
@@ -86,6 +86,7 @@ JOB_NAME=XX
|
|||||||
BUILD_ID=XX
|
BUILD_ID=XX
|
||||||
VM_NAME=ci-enb-usrp
|
VM_NAME=ci-enb-usrp
|
||||||
VM_MEMORY=2048
|
VM_MEMORY=2048
|
||||||
|
VM_CPU=4
|
||||||
ARCHIVES_LOC=enb_usrp
|
ARCHIVES_LOC=enb_usrp
|
||||||
LOG_PATTERN=.Rel14.txt
|
LOG_PATTERN=.Rel14.txt
|
||||||
NB_PATTERN_FILES=4
|
NB_PATTERN_FILES=4
|
||||||
@@ -135,6 +136,8 @@ case $key in
|
|||||||
LOG_PATTERN=basic_simulator
|
LOG_PATTERN=basic_simulator
|
||||||
NB_PATTERN_FILES=2
|
NB_PATTERN_FILES=2
|
||||||
BUILD_OPTIONS="--basic-simulator"
|
BUILD_OPTIONS="--basic-simulator"
|
||||||
|
VM_MEMORY=8192
|
||||||
|
VM_CPU=4
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-v3)
|
-v3)
|
||||||
@@ -186,6 +189,8 @@ case $key in
|
|||||||
LOG_PATTERN=basic_simulator
|
LOG_PATTERN=basic_simulator
|
||||||
NB_PATTERN_FILES=2
|
NB_PATTERN_FILES=2
|
||||||
BUILD_OPTIONS="--basic-simulator"
|
BUILD_OPTIONS="--basic-simulator"
|
||||||
|
VM_MEMORY=8192
|
||||||
|
VM_CPU=4
|
||||||
;;
|
;;
|
||||||
phy-sim)
|
phy-sim)
|
||||||
VM_NAME=ci-phy-sim
|
VM_NAME=ci-phy-sim
|
||||||
@@ -270,7 +275,7 @@ then
|
|||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
echo "Creating VM ($VM_NAME) on Ubuntu Cloud Image base"
|
echo "Creating VM ($VM_NAME) on Ubuntu Cloud Image base"
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu 4 --unsafe-caching --template ci-scripts/template-host.xml
|
uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu $VM_CPU --unsafe-caching --template ci-scripts/template-host.xml
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Waiting for VM to be started"
|
echo "Waiting for VM to be started"
|
||||||
@@ -289,6 +294,7 @@ echo "############################################################"
|
|||||||
echo "Running install and build script on VM ($VM_NAME)"
|
echo "Running install and build script on VM ($VM_NAME)"
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
echo "sudo cp 01proxy /etc/apt/apt.conf.d/" > $VM_CMDS
|
echo "sudo cp 01proxy /etc/apt/apt.conf.d/" > $VM_CMDS
|
||||||
|
echo "touch /home/ubuntu/.hushlogin" >> $VM_CMDS
|
||||||
if [[ "$VM_NAME" == *"-cppcheck"* ]]
|
if [[ "$VM_NAME" == *"-cppcheck"* ]]
|
||||||
then
|
then
|
||||||
echo "echo \"sudo apt-get --yes --quiet install zip cppcheck \"" >> $VM_CMDS
|
echo "echo \"sudo apt-get --yes --quiet install zip cppcheck \"" >> $VM_CMDS
|
||||||
|
|||||||
Executable
+144
@@ -0,0 +1,144 @@
|
|||||||
|
#!/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 Warning Check script"
|
||||||
|
echo " Original Author: Raphael Defosseux"
|
||||||
|
echo ""
|
||||||
|
echo "Usage:"
|
||||||
|
echo "------"
|
||||||
|
echo " checkAddedWarnings.sh [OPTIONS]"
|
||||||
|
echo ""
|
||||||
|
echo "Options:"
|
||||||
|
echo "--------"
|
||||||
|
echo " --src-branch #### OR -sb ####"
|
||||||
|
echo " Specify the source branch of the merge request."
|
||||||
|
echo ""
|
||||||
|
echo " --target-branch #### OR -tb ####"
|
||||||
|
echo " Specify the target branch of the merge request (usually develop)."
|
||||||
|
echo ""
|
||||||
|
echo " --help OR -h"
|
||||||
|
echo " Print this help message."
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -ne 4 ] && [ $# -ne 1 ]
|
||||||
|
then
|
||||||
|
echo "Syntax Error: not the correct number of arguments"
|
||||||
|
echo ""
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
checker=0
|
||||||
|
while [[ $# -gt 0 ]]
|
||||||
|
do
|
||||||
|
key="$1"
|
||||||
|
|
||||||
|
case $key in
|
||||||
|
-h|--help)
|
||||||
|
shift
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-sb|--src-branch)
|
||||||
|
SOURCE_BRANCH="$2"
|
||||||
|
let "checker|=0x1"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-tb|--target-branch)
|
||||||
|
TARGET_BRANCH="$2"
|
||||||
|
let "checker|=0x2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Syntax Error: unknown option: $key"
|
||||||
|
echo ""
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
if [ $checker -ne 3 ]
|
||||||
|
then
|
||||||
|
echo "Source Branch is : $SOURCE_BRANCH"
|
||||||
|
echo "Target Branch is : $TARGET_BRANCH"
|
||||||
|
echo ""
|
||||||
|
echo "Syntax Error: missing option"
|
||||||
|
echo ""
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Merge request scenario
|
||||||
|
|
||||||
|
MERGE_COMMMIT=`git log -n1 | grep commit | sed -e "s@commit @@"`
|
||||||
|
TARGET_INIT_COMMIT=`cat .git/refs/remotes/origin/$TARGET_BRANCH`
|
||||||
|
|
||||||
|
echo " ---- Checking the modified files by the merge request ----"
|
||||||
|
echo ""
|
||||||
|
echo "Source Branch is : $SOURCE_BRANCH"
|
||||||
|
echo "Target Branch is : $TARGET_BRANCH"
|
||||||
|
echo "Merged Commit is : $MERGE_COMMMIT"
|
||||||
|
echo "Target Init is : $TARGET_INIT_COMMIT"
|
||||||
|
|
||||||
|
# Retrieve the list of modified files since the latest develop commit
|
||||||
|
MODIFIED_FILES=`git log $TARGET_INIT_COMMIT..$MERGE_COMMMIT --oneline --name-status | egrep "^M|^A" | sed -e "s@^M\t*@@" -e "s@^A\t*@@" | sort | uniq`
|
||||||
|
NB_WARNINGS_FILES=0
|
||||||
|
|
||||||
|
# Retrieve list of warnings
|
||||||
|
LIST_WARNING_FILES=`egrep "error:|warning:" archives/*/*.Rel14.txt archives/*/basic_simulator_*txt | egrep -v "jobserver unavailable|Clock skew detected.|flexran.proto" | sed -e "s#^.*/home/ubuntu/tmp/##" -e "s#^.*/tmp/CI-eNB/##" -e "s#common/utils/.*/itti#common/utils/itti#" | awk -F ":" '{print $1}' | sort | uniq`
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "List of files that have been modified by the Merge Request AND"
|
||||||
|
echo " that have compilation warnings/errors"
|
||||||
|
echo "--------------------------------------------------------------------"
|
||||||
|
declare -a ARRAYNAME
|
||||||
|
|
||||||
|
for FULLFILE in $MODIFIED_FILES
|
||||||
|
do
|
||||||
|
filename=$(basename -- "$FULLFILE")
|
||||||
|
EXT="${filename##*.}"
|
||||||
|
if [ $EXT = "c" ] || [ $EXT = "h" ] || [ $EXT = "cpp" ] || [ $EXT = "hpp" ]
|
||||||
|
then
|
||||||
|
for WARNING_FILE in $LIST_WARNING_FILES
|
||||||
|
do
|
||||||
|
if [ $FULLFILE = $WARNING_FILE ]
|
||||||
|
then
|
||||||
|
echo $WARNING_FILE
|
||||||
|
ARRAYNAME[$NB_WARNINGS_FILES]=$WARNING_FILE
|
||||||
|
NB_WARNINGS_FILES=$((NB_WARNINGS_FILES + 1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "NB Files impacted by warnings/errors in Merge Request: $NB_WARNINGS_FILES"
|
||||||
|
echo $NB_WARNINGS_FILES > oai_warning_files.txt
|
||||||
|
echo ${ARRAYNAME[*]} > oai_warning_files_list.txt
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -0,0 +1,220 @@
|
|||||||
|
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
eNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
eNB_ID = 0xe00;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_ENB";
|
||||||
|
|
||||||
|
eNB_name = "eNB_Eurecom_LTEBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = "1";
|
||||||
|
|
||||||
|
mobile_country_code = "208";
|
||||||
|
mobile_network_code = "92";
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
node_function = "eNodeB_3GPP";
|
||||||
|
node_timing = "synch_to_ext_device";
|
||||||
|
node_synch_ref = 0;
|
||||||
|
frame_type = "TDD";
|
||||||
|
tdd_config = 1;
|
||||||
|
tdd_config_s = 0;
|
||||||
|
prefix_type = "NORMAL";
|
||||||
|
eutra_band = 40;
|
||||||
|
downlink_frequency = 2350000000L;
|
||||||
|
uplink_frequency_offset = 0;
|
||||||
|
Nid_cell = 0;
|
||||||
|
N_RB_DL = 100;
|
||||||
|
Nid_cell_mbsfn = 0;
|
||||||
|
nb_antenna_ports = 1;
|
||||||
|
nb_antennas_tx = 1;
|
||||||
|
nb_antennas_rx = 1;
|
||||||
|
tx_gain = 90;
|
||||||
|
rx_gain = 125;
|
||||||
|
prach_root = 0;
|
||||||
|
prach_config_index = 0;
|
||||||
|
prach_high_speed = "DISABLE";
|
||||||
|
prach_zero_correlation = 1;
|
||||||
|
prach_freq_offset = 2;
|
||||||
|
pucch_delta_shift = 1;
|
||||||
|
pucch_nRB_CQI = 1;
|
||||||
|
pucch_nCS_AN = 0;
|
||||||
|
pucch_n1_AN = 0;
|
||||||
|
pdsch_referenceSignalPower =-29;
|
||||||
|
pdsch_p_b = 0;
|
||||||
|
pusch_n_SB = 1;
|
||||||
|
pusch_enable64QAM = "DISABLE";
|
||||||
|
pusch_hoppingMode = "interSubFrame";
|
||||||
|
pusch_hoppingOffset = 0;
|
||||||
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
|
pusch_groupAssignment = 0;
|
||||||
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
|
pusch_nDMRS1 = 1;
|
||||||
|
phich_duration = "NORMAL";
|
||||||
|
phich_resource = "ONESIXTH";
|
||||||
|
srs_enable = "DISABLE";
|
||||||
|
/* srs_BandwidthConfig =;
|
||||||
|
srs_SubframeConfig =;
|
||||||
|
srs_ackNackST =;
|
||||||
|
srs_MaxUpPts =;*/
|
||||||
|
|
||||||
|
pusch_p0_Nominal = -96;
|
||||||
|
pusch_alpha = "AL1";
|
||||||
|
pucch_p0_Nominal = -106;
|
||||||
|
msg3_delta_Preamble = 6;
|
||||||
|
pucch_deltaF_Format1 = "deltaF2";
|
||||||
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
|
rach_numberOfRA_Preambles = 64;
|
||||||
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
|
/*
|
||||||
|
rach_sizeOfRA_PreamblesGroupA = ;
|
||||||
|
rach_messageSizeGroupA = ;
|
||||||
|
rach_messagePowerOffsetGroupB = ;
|
||||||
|
*/
|
||||||
|
rach_powerRampingStep = 4;
|
||||||
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
|
rach_preambleTransMax = 10;
|
||||||
|
rach_raResponseWindowSize = 10;
|
||||||
|
rach_macContentionResolutionTimer = 48;
|
||||||
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
|
|
||||||
|
pcch_default_PagingCycle = 128;
|
||||||
|
pcch_nB = "oneT";
|
||||||
|
bcch_modificationPeriodCoeff = 2;
|
||||||
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
|
ue_TimersAndConstants_n310 = 20;
|
||||||
|
ue_TimersAndConstants_n311 = 1;
|
||||||
|
|
||||||
|
ue_TransmissionMode = 1;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
srb1_parameters :
|
||||||
|
{
|
||||||
|
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||||
|
timer_poll_retransmit = 80;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||||
|
timer_reordering = 35;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||||
|
timer_status_prohibit = 0;
|
||||||
|
|
||||||
|
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||||
|
poll_pdu = 4;
|
||||||
|
|
||||||
|
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||||
|
poll_byte = 99999;
|
||||||
|
|
||||||
|
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||||
|
max_retx_threshold = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "10.0.0.2";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "10.0.0.1/24";
|
||||||
|
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1U = "10.0.0.1/24";
|
||||||
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="debug";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
scheduler_mode = "fairRR";
|
||||||
|
puSch10xSnr = 200;
|
||||||
|
puCch10xSnr = 200;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [38];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 115;
|
||||||
|
eNB_instances = [0];
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_CONTROLLER :
|
||||||
|
{
|
||||||
|
FLEXRAN_ENABLED = "no";
|
||||||
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
|
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
||||||
|
FLEXRAN_PORT = 2210;
|
||||||
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
};
|
||||||
@@ -0,0 +1,220 @@
|
|||||||
|
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
eNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
eNB_ID = 0xe00;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_ENB";
|
||||||
|
|
||||||
|
eNB_name = "eNB_Eurecom_LTEBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = "1";
|
||||||
|
|
||||||
|
mobile_country_code = "208";
|
||||||
|
mobile_network_code = "92";
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
node_function = "eNodeB_3GPP";
|
||||||
|
node_timing = "synch_to_ext_device";
|
||||||
|
node_synch_ref = 0;
|
||||||
|
frame_type = "TDD";
|
||||||
|
tdd_config = 1;
|
||||||
|
tdd_config_s = 0;
|
||||||
|
prefix_type = "NORMAL";
|
||||||
|
eutra_band = 40;
|
||||||
|
downlink_frequency = 2350000000L;
|
||||||
|
uplink_frequency_offset = 0;
|
||||||
|
Nid_cell = 0;
|
||||||
|
N_RB_DL = 25;
|
||||||
|
Nid_cell_mbsfn = 0;
|
||||||
|
nb_antenna_ports = 1;
|
||||||
|
nb_antennas_tx = 1;
|
||||||
|
nb_antennas_rx = 1;
|
||||||
|
tx_gain = 90;
|
||||||
|
rx_gain = 125;
|
||||||
|
prach_root = 0;
|
||||||
|
prach_config_index = 0;
|
||||||
|
prach_high_speed = "DISABLE";
|
||||||
|
prach_zero_correlation = 1;
|
||||||
|
prach_freq_offset = 2;
|
||||||
|
pucch_delta_shift = 1;
|
||||||
|
pucch_nRB_CQI = 1;
|
||||||
|
pucch_nCS_AN = 0;
|
||||||
|
pucch_n1_AN = 0;
|
||||||
|
pdsch_referenceSignalPower =-27;
|
||||||
|
pdsch_p_b = 0;
|
||||||
|
pusch_n_SB = 1;
|
||||||
|
pusch_enable64QAM = "DISABLE";
|
||||||
|
pusch_hoppingMode = "interSubFrame";
|
||||||
|
pusch_hoppingOffset = 0;
|
||||||
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
|
pusch_groupAssignment = 0;
|
||||||
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
|
pusch_nDMRS1 = 1;
|
||||||
|
phich_duration = "NORMAL";
|
||||||
|
phich_resource = "ONESIXTH";
|
||||||
|
srs_enable = "DISABLE";
|
||||||
|
/* srs_BandwidthConfig =;
|
||||||
|
srs_SubframeConfig =;
|
||||||
|
srs_ackNackST =;
|
||||||
|
srs_MaxUpPts =;*/
|
||||||
|
|
||||||
|
pusch_p0_Nominal = -96;
|
||||||
|
pusch_alpha = "AL1";
|
||||||
|
pucch_p0_Nominal = -106;
|
||||||
|
msg3_delta_Preamble = 6;
|
||||||
|
pucch_deltaF_Format1 = "deltaF2";
|
||||||
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
|
rach_numberOfRA_Preambles = 64;
|
||||||
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
|
/*
|
||||||
|
rach_sizeOfRA_PreamblesGroupA = ;
|
||||||
|
rach_messageSizeGroupA = ;
|
||||||
|
rach_messagePowerOffsetGroupB = ;
|
||||||
|
*/
|
||||||
|
rach_powerRampingStep = 4;
|
||||||
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
|
rach_preambleTransMax = 10;
|
||||||
|
rach_raResponseWindowSize = 10;
|
||||||
|
rach_macContentionResolutionTimer = 48;
|
||||||
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
|
|
||||||
|
pcch_default_PagingCycle = 128;
|
||||||
|
pcch_nB = "oneT";
|
||||||
|
bcch_modificationPeriodCoeff = 2;
|
||||||
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
|
ue_TimersAndConstants_n310 = 20;
|
||||||
|
ue_TimersAndConstants_n311 = 1;
|
||||||
|
|
||||||
|
ue_TransmissionMode = 1;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
srb1_parameters :
|
||||||
|
{
|
||||||
|
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||||
|
timer_poll_retransmit = 80;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||||
|
timer_reordering = 35;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||||
|
timer_status_prohibit = 0;
|
||||||
|
|
||||||
|
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||||
|
poll_pdu = 4;
|
||||||
|
|
||||||
|
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||||
|
poll_byte = 99999;
|
||||||
|
|
||||||
|
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||||
|
max_retx_threshold = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "10.0.0.2";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "10.0.0.1/24";
|
||||||
|
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1U = "10.0.0.1/24";
|
||||||
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="debug";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
scheduler_mode = "fairRR";
|
||||||
|
puSch10xSnr = 200;
|
||||||
|
puCch10xSnr = 200;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [38];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 115;
|
||||||
|
eNB_instances = [0];
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_CONTROLLER :
|
||||||
|
{
|
||||||
|
FLEXRAN_ENABLED = "no";
|
||||||
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
|
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
||||||
|
FLEXRAN_PORT = 2210;
|
||||||
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
};
|
||||||
@@ -0,0 +1,220 @@
|
|||||||
|
Active_eNBs = ( "eNB_Eurecom_LTEBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
eNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
eNB_ID = 0xe00;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_ENB";
|
||||||
|
|
||||||
|
eNB_name = "eNB_Eurecom_LTEBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = "1";
|
||||||
|
|
||||||
|
mobile_country_code = "208";
|
||||||
|
mobile_network_code = "92";
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
node_function = "eNodeB_3GPP";
|
||||||
|
node_timing = "synch_to_ext_device";
|
||||||
|
node_synch_ref = 0;
|
||||||
|
frame_type = "TDD";
|
||||||
|
tdd_config = 1;
|
||||||
|
tdd_config_s = 0;
|
||||||
|
prefix_type = "NORMAL";
|
||||||
|
eutra_band = 40;
|
||||||
|
downlink_frequency = 2350000000L;
|
||||||
|
uplink_frequency_offset = 0;
|
||||||
|
Nid_cell = 0;
|
||||||
|
N_RB_DL = 50;
|
||||||
|
Nid_cell_mbsfn = 0;
|
||||||
|
nb_antenna_ports = 1;
|
||||||
|
nb_antennas_tx = 1;
|
||||||
|
nb_antennas_rx = 1;
|
||||||
|
tx_gain = 90;
|
||||||
|
rx_gain = 125;
|
||||||
|
prach_root = 0;
|
||||||
|
prach_config_index = 0;
|
||||||
|
prach_high_speed = "DISABLE";
|
||||||
|
prach_zero_correlation = 1;
|
||||||
|
prach_freq_offset = 2;
|
||||||
|
pucch_delta_shift = 1;
|
||||||
|
pucch_nRB_CQI = 1;
|
||||||
|
pucch_nCS_AN = 0;
|
||||||
|
pucch_n1_AN = 0;
|
||||||
|
pdsch_referenceSignalPower =-27;
|
||||||
|
pdsch_p_b = 0;
|
||||||
|
pusch_n_SB = 1;
|
||||||
|
pusch_enable64QAM = "DISABLE";
|
||||||
|
pusch_hoppingMode = "interSubFrame";
|
||||||
|
pusch_hoppingOffset = 0;
|
||||||
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
|
pusch_groupAssignment = 0;
|
||||||
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
|
pusch_nDMRS1 = 1;
|
||||||
|
phich_duration = "NORMAL";
|
||||||
|
phich_resource = "ONESIXTH";
|
||||||
|
srs_enable = "DISABLE";
|
||||||
|
/* srs_BandwidthConfig =;
|
||||||
|
srs_SubframeConfig =;
|
||||||
|
srs_ackNackST =;
|
||||||
|
srs_MaxUpPts =;*/
|
||||||
|
|
||||||
|
pusch_p0_Nominal = -96;
|
||||||
|
pusch_alpha = "AL1";
|
||||||
|
pucch_p0_Nominal = -106;
|
||||||
|
msg3_delta_Preamble = 6;
|
||||||
|
pucch_deltaF_Format1 = "deltaF2";
|
||||||
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
|
rach_numberOfRA_Preambles = 64;
|
||||||
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
|
/*
|
||||||
|
rach_sizeOfRA_PreamblesGroupA = ;
|
||||||
|
rach_messageSizeGroupA = ;
|
||||||
|
rach_messagePowerOffsetGroupB = ;
|
||||||
|
*/
|
||||||
|
rach_powerRampingStep = 4;
|
||||||
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
|
rach_preambleTransMax = 10;
|
||||||
|
rach_raResponseWindowSize = 10;
|
||||||
|
rach_macContentionResolutionTimer = 48;
|
||||||
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
|
|
||||||
|
pcch_default_PagingCycle = 128;
|
||||||
|
pcch_nB = "oneT";
|
||||||
|
bcch_modificationPeriodCoeff = 2;
|
||||||
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
|
ue_TimersAndConstants_n310 = 20;
|
||||||
|
ue_TimersAndConstants_n311 = 1;
|
||||||
|
|
||||||
|
ue_TransmissionMode = 1;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
srb1_parameters :
|
||||||
|
{
|
||||||
|
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||||
|
timer_poll_retransmit = 80;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||||
|
timer_reordering = 35;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||||
|
timer_status_prohibit = 0;
|
||||||
|
|
||||||
|
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||||
|
poll_pdu = 4;
|
||||||
|
|
||||||
|
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||||
|
poll_byte = 99999;
|
||||||
|
|
||||||
|
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||||
|
max_retx_threshold = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "10.0.0.2";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "10.0.0.1/24";
|
||||||
|
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1U = "10.0.0.1/24";
|
||||||
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="debug";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
scheduler_mode = "fairRR";
|
||||||
|
puSch10xSnr = 200;
|
||||||
|
puCch10xSnr = 200;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [38];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 115;
|
||||||
|
eNB_instances = [0];
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_CONTROLLER :
|
||||||
|
{
|
||||||
|
FLEXRAN_ENABLED = "no";
|
||||||
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
|
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
||||||
|
FLEXRAN_PORT = 2210;
|
||||||
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
};
|
||||||
@@ -33,7 +33,7 @@ eNBs =
|
|||||||
tdd_config_s = 0;
|
tdd_config_s = 0;
|
||||||
prefix_type = "NORMAL";
|
prefix_type = "NORMAL";
|
||||||
eutra_band = 7;
|
eutra_band = 7;
|
||||||
downlink_frequency = 2685000000L;
|
downlink_frequency = 2680000000L;
|
||||||
uplink_frequency_offset = -120000000;
|
uplink_frequency_offset = -120000000;
|
||||||
Nid_cell = 0;
|
Nid_cell = 0;
|
||||||
N_RB_DL = 100;
|
N_RB_DL = 100;
|
||||||
@@ -183,12 +183,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -220,7 +222,7 @@ RUs = (
|
|||||||
att_rx = 0;
|
att_rx = 0;
|
||||||
bands = [7];
|
bands = [7];
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 125;
|
max_rxgain = 115;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ eNBs =
|
|||||||
tdd_config_s = 0;
|
tdd_config_s = 0;
|
||||||
prefix_type = "NORMAL";
|
prefix_type = "NORMAL";
|
||||||
eutra_band = 7;
|
eutra_band = 7;
|
||||||
downlink_frequency = 2685000000L;
|
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;
|
||||||
@@ -183,12 +183,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -220,7 +222,7 @@ RUs = (
|
|||||||
att_rx = 0;
|
att_rx = 0;
|
||||||
bands = [7];
|
bands = [7];
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 125;
|
max_rxgain = 115;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ eNBs =
|
|||||||
tdd_config_s = 0;
|
tdd_config_s = 0;
|
||||||
prefix_type = "NORMAL";
|
prefix_type = "NORMAL";
|
||||||
eutra_band = 7;
|
eutra_band = 7;
|
||||||
downlink_frequency = 2685000000L;
|
downlink_frequency = 2680000000L;
|
||||||
uplink_frequency_offset = -120000000;
|
uplink_frequency_offset = -120000000;
|
||||||
Nid_cell = 0;
|
Nid_cell = 0;
|
||||||
N_RB_DL = 50;
|
N_RB_DL = 50;
|
||||||
@@ -183,12 +183,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -220,7 +222,7 @@ RUs = (
|
|||||||
att_rx = 0;
|
att_rx = 0;
|
||||||
bands = [7];
|
bands = [7];
|
||||||
max_pdschReferenceSignalPower = -27;
|
max_pdschReferenceSignalPower = -27;
|
||||||
max_rxgain = 125;
|
max_rxgain = 115;
|
||||||
eNB_instances = [0];
|
eNB_instances = [0];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,259 @@
|
|||||||
|
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
eNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
eNB_ID = 0xe00;
|
||||||
|
|
||||||
|
cell_type = "CELL_MACRO_ENB";
|
||||||
|
|
||||||
|
eNB_name = "eNB-Eurecom-LTEBox";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = "1";
|
||||||
|
|
||||||
|
mobile_country_code = "208";
|
||||||
|
|
||||||
|
mobile_network_code = "93";
|
||||||
|
|
||||||
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
node_function = "3GPP_eNODEB";
|
||||||
|
node_timing = "synch_to_ext_device";
|
||||||
|
node_synch_ref = 0;
|
||||||
|
frame_type = "FDD";
|
||||||
|
tdd_config = 3;
|
||||||
|
tdd_config_s = 0;
|
||||||
|
prefix_type = "NORMAL";
|
||||||
|
eutra_band = 7;
|
||||||
|
downlink_frequency = 2680000000L;
|
||||||
|
uplink_frequency_offset = -120000000;
|
||||||
|
Nid_cell = 0;
|
||||||
|
N_RB_DL = 25;
|
||||||
|
Nid_cell_mbsfn = 0;
|
||||||
|
nb_antenna_ports = 1;
|
||||||
|
nb_antennas_tx = 1;
|
||||||
|
nb_antennas_rx = 1;
|
||||||
|
tx_gain = 90;
|
||||||
|
rx_gain = 125;
|
||||||
|
pbch_repetition = "FALSE";
|
||||||
|
prach_root = 0;
|
||||||
|
prach_config_index = 0;
|
||||||
|
prach_high_speed = "DISABLE";
|
||||||
|
prach_zero_correlation = 1;
|
||||||
|
prach_freq_offset = 2;
|
||||||
|
pucch_delta_shift = 1;
|
||||||
|
pucch_nRB_CQI = 0;
|
||||||
|
pucch_nCS_AN = 0;
|
||||||
|
pucch_n1_AN = 0;
|
||||||
|
pdsch_referenceSignalPower = -27;
|
||||||
|
pdsch_p_b = 0;
|
||||||
|
pusch_n_SB = 1;
|
||||||
|
pusch_enable64QAM = "DISABLE";
|
||||||
|
pusch_hoppingMode = "interSubFrame";
|
||||||
|
pusch_hoppingOffset = 0;
|
||||||
|
pusch_groupHoppingEnabled = "ENABLE";
|
||||||
|
pusch_groupAssignment = 0;
|
||||||
|
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||||
|
pusch_nDMRS1 = 1;
|
||||||
|
phich_duration = "NORMAL";
|
||||||
|
phich_resource = "ONESIXTH";
|
||||||
|
srs_enable = "DISABLE";
|
||||||
|
/* srs_BandwidthConfig =;
|
||||||
|
srs_SubframeConfig =;
|
||||||
|
srs_ackNackST =;
|
||||||
|
srs_MaxUpPts =;*/
|
||||||
|
|
||||||
|
pusch_p0_Nominal = -96;
|
||||||
|
pusch_alpha = "AL1";
|
||||||
|
pucch_p0_Nominal = -104;
|
||||||
|
msg3_delta_Preamble = 6;
|
||||||
|
pucch_deltaF_Format1 = "deltaF2";
|
||||||
|
pucch_deltaF_Format1b = "deltaF3";
|
||||||
|
pucch_deltaF_Format2 = "deltaF0";
|
||||||
|
pucch_deltaF_Format2a = "deltaF0";
|
||||||
|
pucch_deltaF_Format2b = "deltaF0";
|
||||||
|
|
||||||
|
rach_numberOfRA_Preambles = 64;
|
||||||
|
rach_preamblesGroupAConfig = "DISABLE";
|
||||||
|
/*
|
||||||
|
rach_sizeOfRA_PreamblesGroupA = ;
|
||||||
|
rach_messageSizeGroupA = ;
|
||||||
|
rach_messagePowerOffsetGroupB = ;
|
||||||
|
*/
|
||||||
|
rach_powerRampingStep = 4;
|
||||||
|
rach_preambleInitialReceivedTargetPower = -108;
|
||||||
|
rach_preambleTransMax = 10;
|
||||||
|
rach_raResponseWindowSize = 10;
|
||||||
|
rach_macContentionResolutionTimer = 48;
|
||||||
|
rach_maxHARQ_Msg3Tx = 4;
|
||||||
|
|
||||||
|
pcch_default_PagingCycle = 128;
|
||||||
|
pcch_nB = "oneT";
|
||||||
|
bcch_modificationPeriodCoeff = 2;
|
||||||
|
ue_TimersAndConstants_t300 = 1000;
|
||||||
|
ue_TimersAndConstants_t301 = 1000;
|
||||||
|
ue_TimersAndConstants_t310 = 1000;
|
||||||
|
ue_TimersAndConstants_t311 = 10000;
|
||||||
|
ue_TimersAndConstants_n310 = 20;
|
||||||
|
ue_TimersAndConstants_n311 = 1;
|
||||||
|
ue_TransmissionMode = 1;
|
||||||
|
|
||||||
|
//Parameters for SIB18
|
||||||
|
rxPool_sc_CP_Len = "normal";
|
||||||
|
rxPool_sc_Period = "sf40";
|
||||||
|
rxPool_data_CP_Len = "normal";
|
||||||
|
rxPool_ResourceConfig_prb_Num = 20;
|
||||||
|
rxPool_ResourceConfig_prb_Start = 5;
|
||||||
|
rxPool_ResourceConfig_prb_End = 44;
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
rxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
/* rxPool_dataHoppingConfig_hoppingParameter = 0;
|
||||||
|
rxPool_dataHoppingConfig_numSubbands = "ns1";
|
||||||
|
rxPool_dataHoppingConfig_rbOffset = 0;
|
||||||
|
rxPool_commTxResourceUC-ReqAllowed = "TRUE";
|
||||||
|
*/
|
||||||
|
// Parameters for SIB19
|
||||||
|
discRxPool_cp_Len = "normal"
|
||||||
|
discRxPool_discPeriod = "rf32"
|
||||||
|
discRxPool_numRetx = 1;
|
||||||
|
discRxPool_numRepetition = 2;
|
||||||
|
discRxPool_ResourceConfig_prb_Num = 5;
|
||||||
|
discRxPool_ResourceConfig_prb_Start = 3;
|
||||||
|
discRxPool_ResourceConfig_prb_End = 21;
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_present = "prSmall";
|
||||||
|
discRxPool_ResourceConfig_offsetIndicator_choice = 0;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_present = "prBs40";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff";
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
|
||||||
|
discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
srb1_parameters :
|
||||||
|
{
|
||||||
|
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||||
|
timer_poll_retransmit = 80;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||||
|
timer_reordering = 35;
|
||||||
|
|
||||||
|
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||||
|
timer_status_prohibit = 0;
|
||||||
|
|
||||||
|
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||||
|
poll_pdu = 4;
|
||||||
|
|
||||||
|
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||||
|
poll_byte = 99999;
|
||||||
|
|
||||||
|
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||||
|
max_retx_threshold = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////// MME parameters:
|
||||||
|
mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
|
ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
phy_test_mode = 0;
|
||||||
|
puSch10xSnr = 200;
|
||||||
|
puCch10xSnr = 200;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 1
|
||||||
|
nb_rx = 1
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [7];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 125;
|
||||||
|
eNB_instances = [0];
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_CONTROLLER :
|
||||||
|
{
|
||||||
|
FLEXRAN_ENABLED = "no";
|
||||||
|
FLEXRAN_INTERFACE_NAME = "lo";
|
||||||
|
FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
|
||||||
|
FLEXRAN_PORT = 2210;
|
||||||
|
FLEXRAN_CACHE = "/mnt/oai_agent_cache";
|
||||||
|
FLEXRAN_AWAIT_RECONF = "no";
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
@@ -80,6 +80,7 @@ JOB_NAME=XX
|
|||||||
BUILD_ID=XX
|
BUILD_ID=XX
|
||||||
VM_NAME=ci-enb-usrp
|
VM_NAME=ci-enb-usrp
|
||||||
VM_MEMORY=2048
|
VM_MEMORY=2048
|
||||||
|
VM_CPU=4
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]
|
while [[ $# -gt 0 ]]
|
||||||
do
|
do
|
||||||
@@ -107,6 +108,7 @@ case $key in
|
|||||||
;;
|
;;
|
||||||
-v2)
|
-v2)
|
||||||
VM_NAME=ci-basic-sim
|
VM_NAME=ci-basic-sim
|
||||||
|
VM_MEMORY=8192
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-v3)
|
-v3)
|
||||||
@@ -116,6 +118,7 @@ case $key in
|
|||||||
-v4)
|
-v4)
|
||||||
VM_NAME=ci-cppcheck
|
VM_NAME=ci-cppcheck
|
||||||
VM_MEMORY=4096
|
VM_MEMORY=4096
|
||||||
|
VM_CPU=4
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-v7)
|
-v7)
|
||||||
@@ -134,6 +137,7 @@ case $key in
|
|||||||
;;
|
;;
|
||||||
basic-sim)
|
basic-sim)
|
||||||
VM_NAME=ci-basic-sim
|
VM_NAME=ci-basic-sim
|
||||||
|
VM_MEMORY=8192
|
||||||
;;
|
;;
|
||||||
phy-sim)
|
phy-sim)
|
||||||
VM_NAME=ci-phy-sim
|
VM_NAME=ci-phy-sim
|
||||||
@@ -141,6 +145,7 @@ case $key in
|
|||||||
cppcheck)
|
cppcheck)
|
||||||
VM_NAME=ci-cppcheck
|
VM_NAME=ci-cppcheck
|
||||||
VM_MEMORY=4096
|
VM_MEMORY=4096
|
||||||
|
VM_CPU=4
|
||||||
;;
|
;;
|
||||||
enb-ethernet)
|
enb-ethernet)
|
||||||
VM_NAME=ci-enb-ethernet
|
VM_NAME=ci-enb-ethernet
|
||||||
@@ -178,11 +183,12 @@ VM_CMDS=${VM_NAME}_cmds.txt
|
|||||||
|
|
||||||
echo "VM_NAME = $VM_NAME"
|
echo "VM_NAME = $VM_NAME"
|
||||||
echo "VM_MEMORY = $VM_MEMORY MBytes"
|
echo "VM_MEMORY = $VM_MEMORY MBytes"
|
||||||
|
echo "VM_CPU = $VM_CPU"
|
||||||
|
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
echo "Creating VM ($VM_NAME) on Ubuntu Cloud Image base"
|
echo "Creating VM ($VM_NAME) on Ubuntu Cloud Image base"
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu 4 --unsafe-caching --template ci-scripts/template-host.xml
|
uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu $VM_CPU --unsafe-caching --template ci-scripts/template-host.xml
|
||||||
echo "Waiting for VM to be started"
|
echo "Waiting for VM to be started"
|
||||||
uvt-kvm wait $VM_NAME --insecure
|
uvt-kvm wait $VM_NAME --insecure
|
||||||
|
|
||||||
|
|||||||
+819
-127
File diff suppressed because it is too large
Load Diff
@@ -105,7 +105,7 @@ function details_table {
|
|||||||
do
|
do
|
||||||
if [[ $MESSAGE == *"/home/ubuntu/tmp"* ]]
|
if [[ $MESSAGE == *"/home/ubuntu/tmp"* ]]
|
||||||
then
|
then
|
||||||
FILENAME=`echo $MESSAGE | sed -e "s#^/home/ubuntu/tmp/##" | awk -F ":" '{print $1}'`
|
FILENAME=`echo $MESSAGE | sed -e "s#^/home/ubuntu/tmp/##" -e "s#^.*/tmp/CI-eNB/##" | awk -F ":" '{print $1}'`
|
||||||
LINENB=`echo $MESSAGE | awk -F ":" '{print $2}'`
|
LINENB=`echo $MESSAGE | awk -F ":" '{print $2}'`
|
||||||
if [ "$COMPLETE_MESSAGE" != "start" ]
|
if [ "$COMPLETE_MESSAGE" != "start" ]
|
||||||
then
|
then
|
||||||
@@ -498,6 +498,8 @@ then
|
|||||||
echo " </table>" >> ./build_results.html
|
echo " </table>" >> ./build_results.html
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo " <h2>Ubuntu 16.04 LTS -- Summary</h2>" >> ./build_results.html
|
||||||
|
|
||||||
sca_summary_table_header "OAI Static Code Analysis with CPPCHECK"
|
sca_summary_table_header "OAI Static Code Analysis with CPPCHECK"
|
||||||
sca_summary_table_row ./archives/cppcheck/cppcheck.xml "Uninitialized variable" uninitvar
|
sca_summary_table_row ./archives/cppcheck/cppcheck.xml "Uninitialized variable" uninitvar
|
||||||
sca_summary_table_row ./archives/cppcheck/cppcheck.xml "Uninitialized struct member" uninitStructMember
|
sca_summary_table_row ./archives/cppcheck/cppcheck.xml "Uninitialized struct member" uninitStructMember
|
||||||
@@ -547,6 +549,15 @@ summary_table_row "RB Tools - Release 14" ./archives/ue_eth/rb_tool.Rel14.txt "B
|
|||||||
summary_table_row "NAS Mesh - Release 14" ./archives/ue_eth/nasmesh.Rel14.txt "Built target nasmesh" ./ue_eth_row6.html
|
summary_table_row "NAS Mesh - Release 14" ./archives/ue_eth/nasmesh.Rel14.txt "Built target nasmesh" ./ue_eth_row6.html
|
||||||
summary_table_footer
|
summary_table_footer
|
||||||
|
|
||||||
|
echo " <h2>Red Hat (CentOS Linux release 7.4.1708) -- Summary</h2>" >> ./build_results.html
|
||||||
|
|
||||||
|
summary_table_header "Red Hat -- OAI Build eNB -- USRP option"
|
||||||
|
summary_table_row "LTE SoftModem - Release 14" ./archives/red_hat/lte-softmodem.Rel14.txt "Built target lte-softmodem" ./enb_usrp_rh_row1.html
|
||||||
|
summary_table_row "Coding - Release 14" ./archives/red_hat/coding.Rel14.txt "Built target coding" ./enb_usrp_rh_row2.html
|
||||||
|
summary_table_row "OAI USRP device if - Release 14" ./archives/red_hat/oai_usrpdevif.Rel14.txt "Built target oai_usrpdevif" ./enb_usrp_rh_row3.html
|
||||||
|
summary_table_row "Parameters Lib Config - Release 14" ./archives/red_hat/params_libconfig.Rel14.txt "Built target params_libconfig" ./enb_usrp_rh_row4.html
|
||||||
|
summary_table_footer
|
||||||
|
|
||||||
echo " <h3>Details</h3>" >> ./build_results.html
|
echo " <h3>Details</h3>" >> ./build_results.html
|
||||||
|
|
||||||
for DETAILS_TABLE in `ls ./enb_usrp_row*.html`
|
for DETAILS_TABLE in `ls ./enb_usrp_row*.html`
|
||||||
@@ -569,7 +580,11 @@ for DETAILS_TABLE in `ls ./ue_eth_row*.html`
|
|||||||
do
|
do
|
||||||
cat $DETAILS_TABLE >> ./build_results.html
|
cat $DETAILS_TABLE >> ./build_results.html
|
||||||
done
|
done
|
||||||
rm -f ./enb_usrp_row*.html ./basic_sim_row*.html ./phy_sim_row*.html ./enb_eth_row*.html ./ue_eth_row*.html
|
for DETAILS_TABLE in `ls ./enb_usrp_rh_row*.html`
|
||||||
|
do
|
||||||
|
cat $DETAILS_TABLE >> ./build_results.html
|
||||||
|
done
|
||||||
|
rm -f ./enb_usrp_row*.html ./basic_sim_row*.html ./phy_sim_row*.html ./enb_eth_row*.html ./ue_eth_row*.html ./enb_usrp_rh_row*.html
|
||||||
|
|
||||||
echo "</body>" >> ./build_results.html
|
echo "</body>" >> ./build_results.html
|
||||||
echo "</html>" >> ./build_results.html
|
echo "</html>" >> ./build_results.html
|
||||||
|
|||||||
Executable
+510
@@ -0,0 +1,510 @@
|
|||||||
|
#!/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 Test Report script"
|
||||||
|
echo " Original Author: Raphael Defosseux"
|
||||||
|
echo ""
|
||||||
|
echo "Usage:"
|
||||||
|
echo "------"
|
||||||
|
echo ""
|
||||||
|
echo " reportTestLocally.sh [OPTIONS]"
|
||||||
|
echo ""
|
||||||
|
echo "Options:"
|
||||||
|
echo "--------"
|
||||||
|
echo ""
|
||||||
|
echo " --help OR -h"
|
||||||
|
echo " Print this help message."
|
||||||
|
echo ""
|
||||||
|
echo "Job Options:"
|
||||||
|
echo "------------"
|
||||||
|
echo ""
|
||||||
|
echo " --git-url #### OR -gu ####"
|
||||||
|
echo " Specify the URL of the GIT Repository."
|
||||||
|
echo ""
|
||||||
|
echo " --job-name #### OR -jn ####"
|
||||||
|
echo " Specify the name of the Jenkins job."
|
||||||
|
echo ""
|
||||||
|
echo " --build-id #### OR -id ####"
|
||||||
|
echo " Specify the build ID of the Jenkins job."
|
||||||
|
echo ""
|
||||||
|
echo " --trigger merge-request OR -mr"
|
||||||
|
echo " --trigger push OR -pu"
|
||||||
|
echo " Specify trigger action of the Jenkins job. Either a merge-request event or a push event."
|
||||||
|
echo ""
|
||||||
|
echo "Merge-Request Options:"
|
||||||
|
echo "----------------------"
|
||||||
|
echo ""
|
||||||
|
echo " --src-branch #### OR -sb ####"
|
||||||
|
echo " Specify the source branch of the merge request."
|
||||||
|
echo ""
|
||||||
|
echo " --src-commit #### OR -sc ####"
|
||||||
|
echo " Specify the source commit ID (SHA-1) of the merge request."
|
||||||
|
echo ""
|
||||||
|
echo " --target-branch #### OR -tb ####"
|
||||||
|
echo " Specify the target branch of the merge request (usually develop)."
|
||||||
|
echo ""
|
||||||
|
echo " --target-commit #### OR -tc ####"
|
||||||
|
echo " Specify the target commit ID (SHA-1) of the merge request."
|
||||||
|
echo ""
|
||||||
|
echo "Push Options:"
|
||||||
|
echo "----------------------"
|
||||||
|
echo ""
|
||||||
|
echo " --branch #### OR -br ####"
|
||||||
|
echo " Specify the branch of the push event."
|
||||||
|
echo ""
|
||||||
|
echo " --commit #### OR -co ####"
|
||||||
|
echo " Specify the commit ID (SHA-1) of the push event."
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
function trigger_usage {
|
||||||
|
echo "OAI Test Report script"
|
||||||
|
echo " Original Author: Raphael Defosseux"
|
||||||
|
echo ""
|
||||||
|
echo " --trigger merge-request OR -mr"
|
||||||
|
echo " --trigger push OR -pu"
|
||||||
|
echo " Specify trigger action of the Jenkins job. Either a merge-request event or a push event."
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
jb_checker=0
|
||||||
|
mr_checker=0
|
||||||
|
pu_checker=0
|
||||||
|
MR_TRIG=0
|
||||||
|
PU_TRIG=0
|
||||||
|
while [[ $# -gt 0 ]]
|
||||||
|
do
|
||||||
|
key="$1"
|
||||||
|
|
||||||
|
case $key in
|
||||||
|
-h|--help)
|
||||||
|
shift
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-gu|--git-url)
|
||||||
|
GIT_URL="$2"
|
||||||
|
let "jb_checker|=0x1"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-jn|--job-name)
|
||||||
|
JOB_NAME="$2"
|
||||||
|
let "jb_checker|=0x2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-id|--build-id)
|
||||||
|
BUILD_ID="$2"
|
||||||
|
let "jb_checker|=0x4"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--trigger)
|
||||||
|
TRIG="$2"
|
||||||
|
case $TRIG in
|
||||||
|
merge-request)
|
||||||
|
MR_TRIG=1
|
||||||
|
;;
|
||||||
|
push)
|
||||||
|
PU_TRIG=1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo ""
|
||||||
|
echo "Syntax Error: Invalid Trigger option -> $TRIG"
|
||||||
|
echo ""
|
||||||
|
trigger_usage
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
let "jb_checker|=0x8"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-mr)
|
||||||
|
MR_TRIG=1
|
||||||
|
let "jb_checker|=0x8"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-pu)
|
||||||
|
PU_TRIG=1
|
||||||
|
let "jb_checker|=0x8"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-sb|--src-branch)
|
||||||
|
SOURCE_BRANCH="$2"
|
||||||
|
let "mr_checker|=0x1"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-sc|--src-commit)
|
||||||
|
SOURCE_COMMIT_ID="$2"
|
||||||
|
let "mr_checker|=0x2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-tb|--target-branch)
|
||||||
|
TARGET_BRANCH="$2"
|
||||||
|
let "mr_checker|=0x4"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-tc|--target-commit)
|
||||||
|
TARGET_COMMIT_ID="$2"
|
||||||
|
let "mr_checker|=0x8"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-br|--branch)
|
||||||
|
SOURCE_BRANCH="$2"
|
||||||
|
let "pu_checker|=0x1"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-co|--commit)
|
||||||
|
SOURCE_COMMIT_ID="$2"
|
||||||
|
let "pu_checker|=0x2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Syntax Error: unknown option: $key"
|
||||||
|
echo ""
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $jb_checker -ne 15 ]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
echo "Syntax Error: missing job information."
|
||||||
|
# TODO : list missing info
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $PU_TRIG -eq 1 ] && [ $MR_TRIG -eq 1 ]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
echo "Syntax Error: trigger action incoherent."
|
||||||
|
echo ""
|
||||||
|
trigger_usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $PU_TRIG -eq 1 ]
|
||||||
|
then
|
||||||
|
if [ $pu_checker -ne 3 ]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
echo "Syntax Error: missing push information."
|
||||||
|
# TODO : list missing info
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $MR_TRIG -eq 1 ]
|
||||||
|
then
|
||||||
|
if [ $mr_checker -ne 15 ]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
echo "Syntax Error: missing merge-request information."
|
||||||
|
# TODO : list missing info
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "<!DOCTYPE html>" > ./test_simulator_results.html
|
||||||
|
echo "<html class=\"no-js\" lang=\"en-US\">" >> ./test_simulator_results.html
|
||||||
|
echo "<head>" >> ./test_simulator_results.html
|
||||||
|
echo " <title>Simulator Results for $JOB_NAME job build #$BUILD_ID</title>" >> ./test_simulator_results.html
|
||||||
|
echo " <base href = \"http://www.openairinterface.org/\" />" >> ./test_simulator_results.html
|
||||||
|
echo "</head>" >> ./test_simulator_results.html
|
||||||
|
echo "<body>" >> ./test_simulator_results.html
|
||||||
|
echo " <table style=\"border-collapse: collapse; border: none;\">" >> ./test_simulator_results.html
|
||||||
|
echo " <tr style=\"border-collapse: collapse; border: none;\">" >> ./test_simulator_results.html
|
||||||
|
echo " <td style=\"border-collapse: collapse; border: none;\">" >> ./test_simulator_results.html
|
||||||
|
echo " <a href=\"http://www.openairinterface.org/\">" >> ./test_simulator_results.html
|
||||||
|
echo " <img src=\"/wp-content/uploads/2016/03/cropped-oai_final_logo2.png\" alt=\"\" border=\"none\" height=50 width=150>" >> ./test_simulator_results.html
|
||||||
|
echo " </img>" >> ./test_simulator_results.html
|
||||||
|
echo " </a>" >> ./test_simulator_results.html
|
||||||
|
echo " </td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td style=\"border-collapse: collapse; border: none; vertical-align: center;\">" >> ./test_simulator_results.html
|
||||||
|
echo " <b><font size = \"6\">Job Summary -- Job: $JOB_NAME -- Build-ID: $BUILD_ID</font></b>" >> ./test_simulator_results.html
|
||||||
|
echo " </td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
echo " </table>" >> ./test_simulator_results.html
|
||||||
|
echo " <br>" >> ./test_simulator_results.html
|
||||||
|
echo " <table border = \"1\">" >> ./test_simulator_results.html
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <td bgcolor = \"lightcyan\" >GIT Repository</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td><a href=\"$GIT_URL\">$GIT_URL</a></td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <td bgcolor = \"lightcyan\" >Job Trigger</td>" >> ./test_simulator_results.html
|
||||||
|
if [ $PU_TRIG -eq 1 ]; then echo " <td>Push Event</td>" >> ./test_simulator_results.html; fi
|
||||||
|
if [ $MR_TRIG -eq 1 ]; then echo " <td>Merge-Request</td>" >> ./test_simulator_results.html; fi
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
if [ $PU_TRIG -eq 1 ]
|
||||||
|
then
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <td bgcolor = \"lightcyan\" >Branch</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>$SOURCE_BRANCH</td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <td bgcolor = \"lightcyan\" >Commit ID</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>$SOURCE_COMMIT_ID</td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
if [ $MR_TRIG -eq 1 ]
|
||||||
|
then
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <td bgcolor = \"lightcyan\" >Source Branch</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>$SOURCE_BRANCH</td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <td bgcolor = \"lightcyan\" >Source Commit ID</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>$SOURCE_COMMIT_ID</td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <td bgcolor = \"lightcyan\" >Target Branch</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>$TARGET_BRANCH</td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
echo " <td bgcolor = \"lightcyan\" >Target Commit ID</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>$TARGET_COMMIT_ID</td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
echo " </table>" >> ./test_simulator_results.html
|
||||||
|
echo " <h2>Test Summary</h2>" >> ./test_simulator_results.html
|
||||||
|
|
||||||
|
ARCHIVES_LOC=archives/basic_sim/test
|
||||||
|
if [ -d $ARCHIVES_LOC ]
|
||||||
|
then
|
||||||
|
echo " <h3>Basic Simulator Check</h3>" >> ./test_simulator_results.html
|
||||||
|
|
||||||
|
echo " <table border = \"1\">" >> ./test_simulator_results.html
|
||||||
|
echo " <tr bgcolor = \"#33CCFF\" >" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Log File Name</th>" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Command</th>" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Status</th>" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Statistics</th>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
|
||||||
|
PING_TESTS=`ls $ARCHIVES_LOC/*ping*txt`
|
||||||
|
for PING_CASE in $PING_TESTS
|
||||||
|
do
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
NAME=`echo $PING_CASE | sed -e "s#$ARCHIVES_LOC/##"`
|
||||||
|
echo " <td>$NAME</td>" >> ./test_simulator_results.html
|
||||||
|
CMD=`egrep "COMMAND IS" $PING_CASE | sed -e "s#COMMAND IS: ##"`
|
||||||
|
echo " <td>$CMD</td>" >> ./test_simulator_results.html
|
||||||
|
FILE_COMPLETE=`egrep -c "ping statistics" $PING_CASE`
|
||||||
|
if [ $FILE_COMPLETE -eq 0 ]
|
||||||
|
then
|
||||||
|
echo " <td bgcolor = \"red\" >KO</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>N/A</td>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
NB_TR_PACKETS=`egrep "packets transmitted" $PING_CASE | sed -e "s# packets transmitted.*##"`
|
||||||
|
NB_RC_PACKETS=`egrep "packets transmitted" $PING_CASE | sed -e "s#^.*packets transmitted, ##" -e "s# received,.*##"`
|
||||||
|
if [ $NB_TR_PACKETS -eq $NB_RC_PACKETS ]
|
||||||
|
then
|
||||||
|
echo " <td bgcolor = \"green\" >OK</td>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo " <td bgcolor = \"red\" >KO</td>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
echo " <td>" >> ./test_simulator_results.html
|
||||||
|
echo " <pre>" >> ./test_simulator_results.html
|
||||||
|
STATS=`egrep "packets transmitted" $PING_CASE | sed -e "s#^.*received, ##" -e "s#, time.*##" -e "s# packet loss##"`
|
||||||
|
echo "Packet Loss : $STATS" >> ./test_simulator_results.html
|
||||||
|
RTTMIN=`egrep "rtt min" $PING_CASE | awk '{split($4,a,"/"); print a[1] " " $5}'`
|
||||||
|
echo "RTT Minimal : $RTTMIN" >> ./test_simulator_results.html
|
||||||
|
RTTAVG=`egrep "rtt min" $PING_CASE | awk '{split($4,a,"/"); print a[2] " " $5}'`
|
||||||
|
echo "RTT Average : $RTTAVG" >> ./test_simulator_results.html
|
||||||
|
RTTMAX=`egrep "rtt min" $PING_CASE | awk '{split($4,a,"/"); print a[3] " " $5}'`
|
||||||
|
echo "RTT Maximal : $RTTMAX" >> ./test_simulator_results.html
|
||||||
|
echo " </pre>" >> ./test_simulator_results.html
|
||||||
|
echo " </td>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
done
|
||||||
|
|
||||||
|
IPERF_TESTS=`ls $ARCHIVES_LOC/*iperf*client*txt`
|
||||||
|
for IPERF_CASE in $IPERF_TESTS
|
||||||
|
do
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
NAME=`echo $IPERF_CASE | sed -e "s#$ARCHIVES_LOC/##"`
|
||||||
|
echo " <td>$NAME</td>" >> ./test_simulator_results.html
|
||||||
|
CMD=`egrep "COMMAND IS" $IPERF_CASE | sed -e "s#COMMAND IS: ##"`
|
||||||
|
echo " <td>$CMD</td>" >> ./test_simulator_results.html
|
||||||
|
REQ_BITRATE=`echo $CMD | sed -e "s#^.*-b ##" -e "s#-i 1.*##"`
|
||||||
|
if [[ $REQ_BITRATE =~ .*K.* ]]
|
||||||
|
then
|
||||||
|
REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#K##"`
|
||||||
|
FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000.0" | bc -l`
|
||||||
|
fi
|
||||||
|
if [[ $REQ_BITRATE =~ .*M.* ]]
|
||||||
|
then
|
||||||
|
REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#M##"`
|
||||||
|
FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000000.0" | bc -l`
|
||||||
|
fi
|
||||||
|
if [[ $REQ_BITRATE =~ .*G.* ]]
|
||||||
|
then
|
||||||
|
REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#G##"`
|
||||||
|
FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000000000.0" | bc -l`
|
||||||
|
fi
|
||||||
|
FILE_COMPLETE=`egrep -c "Server Report" $IPERF_CASE`
|
||||||
|
if [ $FILE_COMPLETE -eq 0 ]
|
||||||
|
then
|
||||||
|
echo " <td bgcolor = \"red\" >KO</td>" >> ./test_simulator_results.html
|
||||||
|
SERVER_FILE=`echo $IPERF_CASE | sed -e "s#client#server#"`
|
||||||
|
FLOAT_EFF_BITRATE=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*Bytes *##" -e "s#sec *.*#sec#" | awk 'BEGIN{s=0;n=0}{n++;if ($2 ~/Mbits/){a = $1 * 1000000};if ($2 ~/Kbits/){a = $1 * 1000};s=s+a}END{br=s/n; printf "%.0f", br}'`
|
||||||
|
EFFECTIVE_BITRATE=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*Bytes *##" -e "s#sec *.*#sec#" | awk 'BEGIN{s=0;n=0}{n++;if ($2 ~/Mbits/){a = $1 * 1000000};if ($2 ~/Kbits/){a = $1 * 1000};s=s+a}END{br=s/n; if(br>1000000){printf "%.2f MBits/sec", br/1000000}}'`
|
||||||
|
PERF=`echo "100 * $FLOAT_EFF_BITRATE / $FLOAT_REQ_BITRATE" | bc -l | awk '{printf "%.2f", $0}'`
|
||||||
|
JITTER=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*/sec *##" -e "s# *ms.*##" | awk 'BEGIN{s=0;n=0}{n++;s+=$1}END{jitter=s/n; printf "%.3f ms", jitter}'`
|
||||||
|
PACKETLOSS_NOSIGN=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*(##" -e "s#%.*##" | awk 'BEGIN{s=0;n=0}{n++;s+=$1}END{per=s/n; printf "%.1f", per}'`
|
||||||
|
PACKETLOSS=`echo "${PACKETLOSS_NOSIGN}%"`
|
||||||
|
else
|
||||||
|
EFFECTIVE_BITRATE=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"`
|
||||||
|
if [[ $EFFECTIVE_BITRATE =~ .*Kbits/sec.* ]]
|
||||||
|
then
|
||||||
|
EFFECTIVE_BITRATE=`echo $EFFECTIVE_BITRATE | sed -e "s# *Kbits/sec.*##"`
|
||||||
|
FLOAT_EFF_BITRATE=`echo "$EFFECTIVE_BITRATE * 1000" | bc -l`
|
||||||
|
fi
|
||||||
|
if [[ $EFFECTIVE_BITRATE =~ .*Mbits/sec.* ]]
|
||||||
|
then
|
||||||
|
EFFECTIVE_BITRATE=`echo $EFFECTIVE_BITRATE | sed -e "s# *Mbits/sec.*##"`
|
||||||
|
FLOAT_EFF_BITRATE=`echo "$EFFECTIVE_BITRATE * 1000000" | bc -l`
|
||||||
|
fi
|
||||||
|
if [[ $EFFECTIVE_BITRATE =~ .*Gbits/sec.* ]]
|
||||||
|
then
|
||||||
|
EFFECTIVE_BITRATE=`echo $EFFECTIVE_BITRATE | sed -e "s# *Gbits/sec.*##"`
|
||||||
|
FLOAT_EFF_BITRATE=`echo "$EFFECTIVE_BITRATE * 1000000000" | bc -l`
|
||||||
|
fi
|
||||||
|
PERF=`echo "100 * $FLOAT_EFF_BITRATE / $FLOAT_REQ_BITRATE" | bc -l | awk '{printf "%.2f", $0}'`
|
||||||
|
PERF_INT=`echo "100 * $FLOAT_EFF_BITRATE / $FLOAT_REQ_BITRATE" | bc -l | awk '{printf "%.0f", $0}'`
|
||||||
|
if [[ $PERF_INT -lt 90 ]]
|
||||||
|
then
|
||||||
|
echo " <td bgcolor = \"red\" >KO</td>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo " <td bgcolor = \"green\" >OK</td>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
EFFECTIVE_BITRATE=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"`
|
||||||
|
JITTER=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*Mbits/sec *##" -e "s#ms.*#ms#"`
|
||||||
|
PACKETLOSS=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*(##" -e "s#).*##"`
|
||||||
|
fi
|
||||||
|
echo " <td>" >> ./test_simulator_results.html
|
||||||
|
echo " <pre>" >> ./test_simulator_results.html
|
||||||
|
echo "Bitrate : $EFFECTIVE_BITRATE" >> ./test_simulator_results.html
|
||||||
|
echo "Bitrate Perf : $PERF %" >> ./test_simulator_results.html
|
||||||
|
echo "Jitter : $JITTER" >> ./test_simulator_results.html
|
||||||
|
echo "Packet Loss : $PACKETLOSS" >> ./test_simulator_results.html
|
||||||
|
echo " </pre>" >> ./test_simulator_results.html
|
||||||
|
echo " </td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
done
|
||||||
|
|
||||||
|
echo " </table>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
|
||||||
|
ARCHIVES_LOC=archives/phy_sim/test
|
||||||
|
if [ -d $ARCHIVES_LOC ]
|
||||||
|
then
|
||||||
|
echo " <h3>Physical Simulators Check</h3>" >> ./test_simulator_results.html
|
||||||
|
|
||||||
|
echo " <table border = \"1\">" >> ./test_simulator_results.html
|
||||||
|
echo " <tr bgcolor = \"#33CCFF\" >" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Log File Name</th>" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Nb Tests</th>" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Nb Errors</th>" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Nb Failures</th>" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Nb Failures</th>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
|
||||||
|
XML_TESTS=`ls $ARCHIVES_LOC/*xml`
|
||||||
|
for XML_FILE in $XML_TESTS
|
||||||
|
do
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
NAME=`echo $XML_FILE | sed -e "s#$ARCHIVES_LOC/##"`
|
||||||
|
NB_TESTS=`egrep "testsuite errors" $XML_FILE | sed -e "s#^.*tests='##" -e "s#' *time=.*##"`
|
||||||
|
NB_ERRORS=`egrep "testsuite errors" $XML_FILE | sed -e "s#^.*errors='##" -e "s#' *failures=.*##"`
|
||||||
|
NB_FAILURES=`egrep "testsuite errors" $XML_FILE | sed -e "s#^.*failures='##" -e "s#' *hostname=.*##"`
|
||||||
|
NB_SKIPPED=`egrep "testsuite errors" $XML_FILE | sed -e "s#^.*skipped='##" -e "s#' *tests=.*##"`
|
||||||
|
if [ $NB_ERRORS -eq 0 ] && [ $NB_FAILURES -eq 0 ]
|
||||||
|
then
|
||||||
|
echo " <td bgcolor = \"green\" >$NAME</td>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo " <td bgcolor = \"red\" >$NAME</td>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
echo " <td>$NB_TESTS</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>$NB_ERRORS</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>$NB_FAILURES</td>" >> ./test_simulator_results.html
|
||||||
|
echo " <td>$NB_SKIPPED</td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
done
|
||||||
|
|
||||||
|
echo " </table>" >> ./test_simulator_results.html
|
||||||
|
|
||||||
|
echo " <h4>Details</h4>" >> ./test_simulator_results.html
|
||||||
|
for XML_FILE in $XML_TESTS
|
||||||
|
do
|
||||||
|
echo " <table border = \"1\">" >> ./test_simulator_results.html
|
||||||
|
echo " <tr bgcolor = \"#33CCFF\" >" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Test Name</th>" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Description</th>" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Result</th>" >> ./test_simulator_results.html
|
||||||
|
echo " <th>Time</th>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
TESTCASES_LIST=`sed -e "s# #@#g" $XML_FILE | grep testcase`
|
||||||
|
for TESTCASE in $TESTCASES_LIST
|
||||||
|
do
|
||||||
|
echo " <tr>" >> ./test_simulator_results.html
|
||||||
|
NAME=`echo $TESTCASE | sed -e "s#^.*name='##" -e "s#'@description=.*##" | sed -e "s#@# #g"`
|
||||||
|
echo " <td>$NAME</td>" >> ./test_simulator_results.html
|
||||||
|
DESC=`echo $TESTCASE | sed -e "s#^.*description='##" -e "s#'@Run_result=.*##" | sed -e "s#@# #g"`
|
||||||
|
echo " <td>$DESC</td>" >> ./test_simulator_results.html
|
||||||
|
RESULT=`echo $TESTCASE | sed -e "s#^.*RESULT='##" -e "s#'.*##" | sed -e "s#@# #g"`
|
||||||
|
if [[ $RESULT =~ .*PASS.* ]]
|
||||||
|
then
|
||||||
|
echo " <td bgcolor = \"green\" >$RESULT</td>" >> ./test_simulator_results.html
|
||||||
|
else
|
||||||
|
echo " <td bgcolor = \"red\" >$RESULT</td>" >> ./test_simulator_results.html
|
||||||
|
fi
|
||||||
|
TIME=`echo $TESTCASE | sed -e "s#^.*time='##" -e "s#'@RESULT=.*##" | sed -e "s#@# #g"`
|
||||||
|
echo " <td>$TIME</td>" >> ./test_simulator_results.html
|
||||||
|
echo " </tr>" >> ./test_simulator_results.html
|
||||||
|
done
|
||||||
|
echo " </table>" >> ./test_simulator_results.html
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "</body>" >> ./test_simulator_results.html
|
||||||
|
echo "</html>" >> ./test_simulator_results.html
|
||||||
|
|
||||||
|
exit 0
|
||||||
+536
-6
@@ -70,6 +70,196 @@ function variant_usage {
|
|||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function start_basic_sim_enb {
|
||||||
|
local LOC_VM_IP_ADDR=$2
|
||||||
|
local LOC_EPC_IP_ADDR=$3
|
||||||
|
local LOC_LOG_FILE=$4
|
||||||
|
local LOC_NB_RBS=$5
|
||||||
|
echo "cd /home/ubuntu/tmp" > $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 "echo \"export ENODEB=1\"" >> $1
|
||||||
|
echo "export ENODEB=1" >> $1
|
||||||
|
echo "echo \"source oaienv\"" >> $1
|
||||||
|
echo "source oaienv" >> $1
|
||||||
|
echo "cd ci-scripts/conf_files/" >> $1
|
||||||
|
echo "cp lte-basic-sim.conf ci-lte-basic-sim.conf" >> $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_VM_IP_ADDR#' ci-lte-basic-sim.conf" >> $1
|
||||||
|
echo "echo \"grep N_RB_DL ci-lte-basic-sim.conf\"" >> $1
|
||||||
|
echo "grep N_RB_DL ci-lte-basic-sim.conf | sed -e 's#N_RB_DL.*=#N_RB_DL =#'" >> $1
|
||||||
|
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/\"" >> $1
|
||||||
|
echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/" >> $1
|
||||||
|
echo "echo \"./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-lte-basic-sim.conf\" > ./my-lte-softmodem-run.sh " >> $1
|
||||||
|
echo "chmod 775 ./my-lte-softmodem-run.sh" >> $1
|
||||||
|
echo "cat ./my-lte-softmodem-run.sh" >> $1
|
||||||
|
echo "sudo -E daemon --inherit --unsafe --name=enb_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/enb -o /home/ubuntu/tmp/cmake_targets/log/$LOC_LOG_FILE ./my-lte-softmodem-run.sh" >> $1
|
||||||
|
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$LOC_VM_IP_ADDR < $1
|
||||||
|
sleep 60
|
||||||
|
rm $1
|
||||||
|
}
|
||||||
|
|
||||||
|
function start_basic_sim_ue {
|
||||||
|
local LOC_UE_LOG_FILE=$3
|
||||||
|
local LOC_NB_RBS=$4
|
||||||
|
echo "echo \"cd /home/ubuntu/tmp/cmake_targets/basic_simulator/ue\"" > $1
|
||||||
|
echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/ue" > $1
|
||||||
|
echo "echo \"./lte-uesoftmodem -C 2680000000 -r $LOC_NB_RBS --ue-rxgain 140\" > ./my-lte-uesoftmodem-run.sh" >> $1
|
||||||
|
echo "chmod 775 ./my-lte-uesoftmodem-run.sh" >> $1
|
||||||
|
echo "cat ./my-lte-uesoftmodem-run.sh" >> $1
|
||||||
|
echo "sudo -E daemon --inherit --unsafe --name=ue_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/ue -o /home/ubuntu/tmp/cmake_targets/log/$LOC_UE_LOG_FILE ./my-lte-uesoftmodem-run.sh" >> $1
|
||||||
|
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||||
|
rm $1
|
||||||
|
|
||||||
|
local i="0"
|
||||||
|
echo "ifconfig oip1 | egrep -c \"inet addr\"" > $1
|
||||||
|
while [ $i -lt 40 ]
|
||||||
|
do
|
||||||
|
sleep 5
|
||||||
|
CONNECTED=`ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1`
|
||||||
|
if [ $CONNECTED -eq 1 ]
|
||||||
|
then
|
||||||
|
i="100"
|
||||||
|
else
|
||||||
|
i=$[$i+1]
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
rm $1
|
||||||
|
if [ $i -lt 50 ]
|
||||||
|
then
|
||||||
|
UE_SYNC=0
|
||||||
|
else
|
||||||
|
UE_SYNC=1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_ue_ip_addr {
|
||||||
|
echo "ifconfig oip1 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $1
|
||||||
|
UE_IP_ADDR=`ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1`
|
||||||
|
echo "UE IP Address for EPC is : $UE_IP_ADDR"
|
||||||
|
rm $1
|
||||||
|
}
|
||||||
|
|
||||||
|
function ping_ue_ip_addr {
|
||||||
|
echo "echo \"ping -c 20 $3\"" > $1
|
||||||
|
echo "echo \"COMMAND IS: ping -c 20 $3\" > $4" > $1
|
||||||
|
echo "ping -c 20 $UE_IP_ADDR | tee -a $4" >> $1
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||||
|
rm -f $1
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_ping_result {
|
||||||
|
local LOC_PING_FILE=$1
|
||||||
|
local LOC_NB_PINGS=$2
|
||||||
|
if [ -f $LOC_PING_FILE ]
|
||||||
|
then
|
||||||
|
local FILE_COMPLETE=`egrep -c "ping statistics" $LOC_PING_FILE`
|
||||||
|
if [ $FILE_COMPLETE -eq 0 ]
|
||||||
|
then
|
||||||
|
PING_STATUS=-1
|
||||||
|
else
|
||||||
|
local ALL_PACKET_RECEIVED=`egrep -c "$LOC_NB_PINGS received" $LOC_PING_FILE`
|
||||||
|
if [ $ALL_PACKET_RECEIVED -eq 1 ]
|
||||||
|
then
|
||||||
|
echo "got all ping packets"
|
||||||
|
else
|
||||||
|
PING_STATUS=-1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
PING_STATUS=-1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function iperf_dl {
|
||||||
|
local REQ_BANDWIDTH=$5
|
||||||
|
local BASE_LOG_FILE=$6
|
||||||
|
echo "echo \"iperf -u -s -i 1\"" > $1
|
||||||
|
echo "echo \"COMMAND IS: iperf -u -s -i 1\" > tmp/cmake_targets/log/${BASE_LOG_FILE}_server.txt" > $1
|
||||||
|
echo "nohup iperf -u -s -i 1 >> tmp/cmake_targets/log/${BASE_LOG_FILE}_server.txt &" >> $1
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||||
|
rm $1
|
||||||
|
|
||||||
|
echo "echo \"iperf -c $UE_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1\"" > $3
|
||||||
|
echo "echo \"COMMAND IS: iperf -c $UE_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1\" > ${BASE_LOG_FILE}_client.txt" > $3
|
||||||
|
echo "iperf -c $UE_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1 | tee -a ${BASE_LOG_FILE}_client.txt" >> $3
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$4 < $3
|
||||||
|
rm -f $3
|
||||||
|
|
||||||
|
echo "killall --signal SIGKILL iperf" >> $1
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||||
|
rm $1
|
||||||
|
}
|
||||||
|
|
||||||
|
function iperf_ul {
|
||||||
|
local REQ_BANDWIDTH=$5
|
||||||
|
local BASE_LOG_FILE=$6
|
||||||
|
echo "echo \"iperf -u -s -i 1\"" > $3
|
||||||
|
echo "echo \"COMMAND IS: iperf -u -s -i 1\" > ${BASE_LOG_FILE}_server.txt" > $3
|
||||||
|
echo "nohup iperf -u -s -i 1 >> ${BASE_LOG_FILE}_server.txt &" >> $3
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$4 < $3
|
||||||
|
rm $3
|
||||||
|
|
||||||
|
echo "echo \"iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1\"" > $1
|
||||||
|
echo "echo \"COMMAND IS: iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1\" > /home/ubuntu/tmp/cmake_targets/log/${BASE_LOG_FILE}_client.txt" > $1
|
||||||
|
echo "iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1 | tee -a /home/ubuntu/tmp/cmake_targets/log/${BASE_LOG_FILE}_client.txt" >> $1
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||||
|
rm -f $1
|
||||||
|
|
||||||
|
echo "killall --signal SIGKILL iperf" >> $3
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$4 < $3
|
||||||
|
rm $3
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_iperf {
|
||||||
|
local LOC_BASE_LOG=$1
|
||||||
|
local LOC_REQ_BW=$2
|
||||||
|
local LOC_REQ_BW_MINUS_ONE=`echo "$LOC_REQ_BW - 1" | bc -l`
|
||||||
|
if [ -f ${LOC_BASE_LOG}_client.txt ]
|
||||||
|
then
|
||||||
|
local FILE_COMPLETE=`egrep -c "Server Report" ${LOC_BASE_LOG}_client.txt`
|
||||||
|
if [ $FILE_COMPLETE -eq 0 ]
|
||||||
|
then
|
||||||
|
IPERF_STATUS=-1
|
||||||
|
else
|
||||||
|
local EFFECTIVE_BANDWIDTH=`tail -n3 ${LOC_BASE_LOG}_client.txt | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"`
|
||||||
|
if [[ $EFFECTIVE_BANDWIDTH =~ .*${LOC_REQ_BW}.*Mbits.* ]] || [[ $EFFECTIVE_BANDWIDTH =~ .*${LOC_REQ_BW_MINUS_ONE}.*Mbits.* ]]
|
||||||
|
then
|
||||||
|
echo "got requested DL bandwidth: $EFFECTIVE_BANDWIDTH"
|
||||||
|
else
|
||||||
|
IPERF_STATUS=-1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
IPERF_STATUS=-1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function terminate_enb_ue_basic_sim {
|
||||||
|
echo "echo \"sudo daemon --name=enb_daemon --stop\"" > $1
|
||||||
|
echo "sudo daemon --name=enb_daemon --stop" >> $1
|
||||||
|
echo "echo \"sudo daemon --name=ue_daemon --stop\"" >> $1
|
||||||
|
echo "sudo daemon --name=ue_daemon --stop" >> $1
|
||||||
|
echo "echo \"sudo killall --signal SIGKILL lte-softmodem\"" >> $1
|
||||||
|
echo "sudo killall --signal SIGKILL lte-softmodem" >> $1
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||||
|
rm -f $1
|
||||||
|
}
|
||||||
|
|
||||||
|
function terminate_ltebox_epc {
|
||||||
|
echo "echo \"cd /opt/ltebox/tools\"" > $1
|
||||||
|
echo "cd /opt/ltebox/tools" >> $1
|
||||||
|
echo "echo \"sudo ./stop_ltebox\"" >> $1
|
||||||
|
echo "sudo ./stop_ltebox" >> $1
|
||||||
|
echo "echo \"sudo daemon --name=simulated_hss --stop\"" >> $1
|
||||||
|
echo "sudo daemon --name=simulated_hss --stop" >> $1
|
||||||
|
echo "echo \"sudo killall --signal SIGKILL hss_sim\"" >> $1
|
||||||
|
echo "sudo killall --signal SIGKILL hss_sim" >> $1
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
|
||||||
|
rm $1
|
||||||
|
}
|
||||||
|
|
||||||
if [ $# -lt 1 ] || [ $# -gt 9 ]
|
if [ $# -lt 1 ] || [ $# -gt 9 ]
|
||||||
then
|
then
|
||||||
echo "Syntax Error: not the correct number of arguments"
|
echo "Syntax Error: not the correct number of arguments"
|
||||||
@@ -122,6 +312,8 @@ case $key in
|
|||||||
;;
|
;;
|
||||||
-v2)
|
-v2)
|
||||||
VM_NAME=ci-basic-sim
|
VM_NAME=ci-basic-sim
|
||||||
|
RUN_OPTIONS="complex"
|
||||||
|
ARCHIVES_LOC=basic_sim/test
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-v3)
|
-v3)
|
||||||
@@ -150,6 +342,8 @@ case $key in
|
|||||||
;;
|
;;
|
||||||
basic-sim)
|
basic-sim)
|
||||||
VM_NAME=ci-basic-sim
|
VM_NAME=ci-basic-sim
|
||||||
|
RUN_OPTIONS="complex"
|
||||||
|
ARCHIVES_LOC=basic_sim/test
|
||||||
;;
|
;;
|
||||||
phy-sim)
|
phy-sim)
|
||||||
VM_NAME=ci-phy-sim
|
VM_NAME=ci-phy-sim
|
||||||
@@ -210,8 +404,11 @@ echo "$VM_NAME has for IP addr = $VM_IP_ADDR"
|
|||||||
if [ "$RUN_OPTIONS" == "none" ]
|
if [ "$RUN_OPTIONS" == "none" ]
|
||||||
then
|
then
|
||||||
echo "No run on VM testing for this variant currently"
|
echo "No run on VM testing for this variant currently"
|
||||||
else
|
exit $STATUS
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $RUN_OPTIONS =~ .*run_exec_autotests.* ]]
|
||||||
|
then
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
echo "Running test script on VM ($VM_NAME)"
|
echo "Running test script on VM ($VM_NAME)"
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
@@ -271,7 +468,7 @@ else
|
|||||||
rm -f $VM_CMDS
|
rm -f $VM_CMDS
|
||||||
|
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
echo "Checking build status"
|
echo "Checking run status"
|
||||||
echo "############################################################"
|
echo "############################################################"
|
||||||
|
|
||||||
LOG_FILES=`ls $ARCHIVES_LOC/results_autotests*.xml`
|
LOG_FILES=`ls $ARCHIVES_LOC/results_autotests*.xml`
|
||||||
@@ -306,13 +503,346 @@ else
|
|||||||
if [ $NB_RUNS -eq 0 ]; then STATUS=-1; fi
|
if [ $NB_RUNS -eq 0 ]; then STATUS=-1; fi
|
||||||
if [ $NB_FAILURES -ne 0 ]; then STATUS=-1; fi
|
if [ $NB_FAILURES -ne 0 ]; then STATUS=-1; fi
|
||||||
|
|
||||||
if [ $STATUS -eq 0 ]
|
fi
|
||||||
|
|
||||||
|
if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-basic-sim.* ]]
|
||||||
|
then
|
||||||
|
PING_STATUS=0
|
||||||
|
IPERF_STATUS=0
|
||||||
|
if [ -d $ARCHIVES_LOC ]
|
||||||
then
|
then
|
||||||
echo "STATUS seems OK"
|
rm -Rf $ARCHIVES_LOC
|
||||||
else
|
|
||||||
echo "STATUS failed?"
|
|
||||||
fi
|
fi
|
||||||
|
mkdir --parents $ARCHIVES_LOC
|
||||||
|
|
||||||
|
EPC_VM_NAME=`echo $VM_NAME | sed -e "s#basic-sim#epc#"`
|
||||||
|
LTEBOX=0
|
||||||
|
if [ -d /opt/ltebox-archives/ ]
|
||||||
|
then
|
||||||
|
# Checking if all ltebox archives are available to run ltebx epc on a brand new VM
|
||||||
|
if [ -f /opt/ltebox-archives/ltebox_2.2.70_16_04_amd64.deb ] && [ -f /opt/ltebox-archives/etc-conf.zip ] && [ -f /opt/ltebox-archives/hss-sim.zip ]
|
||||||
|
then
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Test EPC on VM ($EPC_VM_NAME) will be using ltebox"
|
||||||
|
echo "############################################################"
|
||||||
|
LTEBOX=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# Here we could have other types of EPC detection
|
||||||
|
|
||||||
|
# Do we need to start the EPC VM
|
||||||
|
EPC_VM_CMDS=`echo $VM_CMDS | sed -e "s#cmds#epc-cmds#"`
|
||||||
|
echo "EPC_VM_CMD_FILE = $EPC_VM_CMDS"
|
||||||
|
IS_EPC_VM_ALIVE=`uvt-kvm list | grep -c $EPC_VM_NAME`
|
||||||
|
if [ $IS_EPC_VM_ALIVE -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Creating test EPC VM ($EPC_VM_NAME) on Ubuntu Cloud Image base"
|
||||||
|
echo "############################################################"
|
||||||
|
uvt-kvm create $EPC_VM_NAME release=xenial --unsafe-caching
|
||||||
|
fi
|
||||||
|
|
||||||
|
uvt-kvm wait $EPC_VM_NAME --insecure
|
||||||
|
EPC_VM_IP_ADDR=`uvt-kvm ip $EPC_VM_NAME`
|
||||||
|
echo "$EPC_VM_NAME has for IP addr = $EPC_VM_IP_ADDR"
|
||||||
|
scp -o StrictHostKeyChecking=no /etc/apt/apt.conf.d/01proxy ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu
|
||||||
|
|
||||||
|
# ltebox specific actions (install and start)
|
||||||
|
LTE_BOX_TO_INSTALL=1
|
||||||
|
if [ $LTEBOX -eq 1 ]
|
||||||
|
then
|
||||||
|
echo "ls -ls /opt/ltebox/tools/start_ltebox" > $EPC_VM_CMDS
|
||||||
|
RESPONSE=`ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS`
|
||||||
|
NB_EXES=`echo $RESPONSE | grep -c ltebox`
|
||||||
|
if [ $NB_EXES -eq 1 ]; then LTE_BOX_TO_INSTALL=0; fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $LTEBOX -eq 1 ] && [ $LTE_BOX_TO_INSTALL -eq 1 ]
|
||||||
|
then
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Copying ltebox archives into EPC VM ($EPC_VM_NAME)"
|
||||||
|
echo "############################################################"
|
||||||
|
scp -o StrictHostKeyChecking=no /opt/ltebox-archives/ltebox_2.2.70_16_04_amd64.deb ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu
|
||||||
|
scp -o StrictHostKeyChecking=no /opt/ltebox-archives/etc-conf.zip ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu
|
||||||
|
scp -o StrictHostKeyChecking=no /opt/ltebox-archives/hss-sim.zip ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Install EPC on EPC VM ($EPC_VM_NAME)"
|
||||||
|
echo "############################################################"
|
||||||
|
echo "sudo cp 01proxy /etc/apt/apt.conf.d/" > $EPC_VM_CMDS
|
||||||
|
echo "touch /home/ubuntu/.hushlogin" >> $EPC_VM_CMDS
|
||||||
|
echo "echo \"sudo apt-get --yes --quiet install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev daemon iperf\"" >> $EPC_VM_CMDS
|
||||||
|
echo "sudo apt-get update > zip-install.txt 2>&1" >> $EPC_VM_CMDS
|
||||||
|
echo "sudo apt-get --yes install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev daemon iperf >> zip-install.txt 2>&1" >> $EPC_VM_CMDS
|
||||||
|
|
||||||
|
# Installing HSS
|
||||||
|
echo "echo \"cd /opt\"" >> $EPC_VM_CMDS
|
||||||
|
echo "cd /opt" >> $EPC_VM_CMDS
|
||||||
|
echo "echo \"sudo unzip -qq /home/ubuntu/hss-sim.zip\"" >> $EPC_VM_CMDS
|
||||||
|
echo "sudo unzip -qq /home/ubuntu/hss-sim.zip" >> $EPC_VM_CMDS
|
||||||
|
echo "echo \"cd /opt/hss_sim0609\"" >> $EPC_VM_CMDS
|
||||||
|
echo "cd /opt/hss_sim0609" >> $EPC_VM_CMDS
|
||||||
|
|
||||||
|
# Installing ltebox
|
||||||
|
echo "echo \"cd /home/ubuntu\"" >> $EPC_VM_CMDS
|
||||||
|
echo "cd /home/ubuntu" >> $EPC_VM_CMDS
|
||||||
|
echo "echo \"sudo dpkg -i ltebox_2.2.70_16_04_amd64.deb \"" >> $EPC_VM_CMDS
|
||||||
|
echo "sudo dpkg -i ltebox_2.2.70_16_04_amd64.deb >> zip-install.txt 2>&1" >> $EPC_VM_CMDS
|
||||||
|
|
||||||
|
echo "echo \"cd /opt/ltebox/etc/\"" >> $EPC_VM_CMDS
|
||||||
|
echo "cd /opt/ltebox/etc/" >> $EPC_VM_CMDS
|
||||||
|
echo "echo \"sudo unzip -qq -o /home/ubuntu/etc-conf.zip\"" >> $EPC_VM_CMDS
|
||||||
|
echo "sudo unzip -qq -o /home/ubuntu/etc-conf.zip" >> $EPC_VM_CMDS
|
||||||
|
echo "sudo sed -i -e 's#EPC_VM_IP_ADDRESS#$EPC_VM_IP_ADDR#' gw.conf" >> $EPC_VM_CMDS
|
||||||
|
echo "sudo sed -i -e 's#EPC_VM_IP_ADDRESS#$EPC_VM_IP_ADDR#' mme.conf" >> $EPC_VM_CMDS
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Starting EPC
|
||||||
|
if [ $LTEBOX -eq 1 ]
|
||||||
|
then
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Start EPC on EPC VM ($EPC_VM_NAME)"
|
||||||
|
echo "############################################################"
|
||||||
|
echo "echo \"cd /opt/hss_sim0609\"" >> $EPC_VM_CMDS
|
||||||
|
echo "cd /opt/hss_sim0609" >> $EPC_VM_CMDS
|
||||||
|
echo "echo \"sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real\"" >> $EPC_VM_CMDS
|
||||||
|
echo "sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real" >> $EPC_VM_CMDS
|
||||||
|
|
||||||
|
echo "echo \"cd /opt/ltebox/tools/\"" >> $EPC_VM_CMDS
|
||||||
|
echo "cd /opt/ltebox/tools/" >> $EPC_VM_CMDS
|
||||||
|
echo "echo \"sudo ./start_ltebox\"" >> $EPC_VM_CMDS
|
||||||
|
echo "nohup sudo ./start_ltebox > /home/ubuntu/ltebox.txt" >> $EPC_VM_CMDS
|
||||||
|
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS
|
||||||
|
rm -f $EPC_VM_CMDS
|
||||||
|
|
||||||
|
# We may have some adaptation to do
|
||||||
|
if [ -f /opt/ltebox-archives/adapt_ue_sim.txt ]
|
||||||
|
then
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Doing some adaptation on UE side"
|
||||||
|
echo "############################################################"
|
||||||
|
ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < /opt/ltebox-archives/adapt_ue_sim.txt
|
||||||
|
fi
|
||||||
|
|
||||||
|
i="0"
|
||||||
|
echo "ifconfig tun5 | egrep -c \"inet addr\"" > $EPC_VM_CMDS
|
||||||
|
while [ $i -lt 10 ]
|
||||||
|
do
|
||||||
|
sleep 2
|
||||||
|
CONNECTED=`ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS`
|
||||||
|
if [ $CONNECTED -eq 1 ]
|
||||||
|
then
|
||||||
|
i="100"
|
||||||
|
else
|
||||||
|
i=$[$i+1]
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
rm $EPC_VM_CMDS
|
||||||
|
if [ $i -lt 50 ]
|
||||||
|
then
|
||||||
|
echo "Problem w/ starting ltebox EPC"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# HERE ADD ANY INSTALL ACTIONS FOR ANOTHER EPC
|
||||||
|
|
||||||
|
# Retrieve EPC real IP address
|
||||||
|
if [ $LTEBOX -eq 1 ]
|
||||||
|
then
|
||||||
|
# in our configuration file, we are using pool 5
|
||||||
|
echo "ifconfig tun5 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $EPC_VM_CMDS
|
||||||
|
REAL_EPC_IP_ADDR=`ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS`
|
||||||
|
echo "EPC IP Address is : $REAL_EPC_IP_ADDR"
|
||||||
|
rm $EPC_VM_CMDS
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Starting the eNB at 5MHz"
|
||||||
|
echo "############################################################"
|
||||||
|
CURRENT_ENB_LOG_FILE=enb_05MHz.log
|
||||||
|
start_basic_sim_enb $VM_CMDS $VM_IP_ADDR $EPC_VM_IP_ADDR $CURRENT_ENB_LOG_FILE 25
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Starting the UE at 5MHz"
|
||||||
|
echo "############################################################"
|
||||||
|
CURRENT_UE_LOG_FILE=ue_05MHz.log
|
||||||
|
start_basic_sim_ue $VM_CMDS $VM_IP_ADDR $CURRENT_UE_LOG_FILE 25
|
||||||
|
if [ $UE_SYNC -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "Problem w/ eNB and UE not syncing"
|
||||||
|
terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
get_ue_ip_addr $VM_CMDS $VM_IP_ADDR
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Pinging the UE"
|
||||||
|
echo "############################################################"
|
||||||
|
ping_ue_ip_addr $EPC_VM_CMDS $EPC_VM_IP_ADDR $UE_IP_ADDR 05MHz_ping_ue.txt
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/05MHz_ping_ue.txt $ARCHIVES_LOC
|
||||||
|
check_ping_result $ARCHIVES_LOC/05MHz_ping_ue.txt 20
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Iperf DL"
|
||||||
|
echo "############################################################"
|
||||||
|
CURR_IPERF_LOG_BASE=05MHz_iperf_dl
|
||||||
|
iperf_dl $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 15 $CURR_IPERF_LOG_BASE
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC
|
||||||
|
check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 15
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Iperf UL"
|
||||||
|
echo "############################################################"
|
||||||
|
CURR_IPERF_LOG_BASE=05MHz_iperf_ul
|
||||||
|
iperf_ul $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 2 $CURR_IPERF_LOG_BASE
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC
|
||||||
|
check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 2
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Terminate enb/ue simulators"
|
||||||
|
echo "############################################################"
|
||||||
|
terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Starting the eNB at 10MHz"
|
||||||
|
echo "############################################################"
|
||||||
|
CURRENT_ENB_LOG_FILE=enb_10MHz.log
|
||||||
|
start_basic_sim_enb $VM_CMDS $VM_IP_ADDR $EPC_VM_IP_ADDR $CURRENT_ENB_LOG_FILE 50
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Starting the UE at 10MHz"
|
||||||
|
echo "############################################################"
|
||||||
|
CURRENT_UE_LOG_FILE=ue_10MHz.log
|
||||||
|
start_basic_sim_ue $VM_CMDS $VM_IP_ADDR $CURRENT_UE_LOG_FILE 50
|
||||||
|
if [ $UE_SYNC -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "Problem w/ eNB and UE not syncing"
|
||||||
|
terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
get_ue_ip_addr $VM_CMDS $VM_IP_ADDR
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Pinging the UE"
|
||||||
|
echo "############################################################"
|
||||||
|
ping_ue_ip_addr $EPC_VM_CMDS $EPC_VM_IP_ADDR $UE_IP_ADDR 10MHz_ping_ue.txt
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/10MHz_ping_ue.txt $ARCHIVES_LOC
|
||||||
|
check_ping_result $ARCHIVES_LOC/10MHz_ping_ue.txt 20
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Iperf DL"
|
||||||
|
echo "############################################################"
|
||||||
|
CURR_IPERF_LOG_BASE=10MHz_iperf_dl
|
||||||
|
iperf_dl $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 15 $CURR_IPERF_LOG_BASE
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC
|
||||||
|
check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 15
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Iperf UL"
|
||||||
|
echo "############################################################"
|
||||||
|
CURR_IPERF_LOG_BASE=10MHz_iperf_ul
|
||||||
|
iperf_ul $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 2 $CURR_IPERF_LOG_BASE
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC
|
||||||
|
check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 2
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Terminate enb/ue simulators"
|
||||||
|
echo "############################################################"
|
||||||
|
terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Starting the eNB at 20MHz"
|
||||||
|
echo "############################################################"
|
||||||
|
CURRENT_ENB_LOG_FILE=enb_20MHz.log
|
||||||
|
start_basic_sim_enb $VM_CMDS $VM_IP_ADDR $EPC_VM_IP_ADDR $CURRENT_ENB_LOG_FILE 100
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Starting the UE at 20MHz"
|
||||||
|
echo "############################################################"
|
||||||
|
CURRENT_UE_LOG_FILE=ue_20MHz.log
|
||||||
|
start_basic_sim_ue $VM_CMDS $VM_IP_ADDR $CURRENT_UE_LOG_FILE 100
|
||||||
|
if [ $UE_SYNC -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "Problem w/ eNB and UE not syncing"
|
||||||
|
terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
get_ue_ip_addr $VM_CMDS $VM_IP_ADDR
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Pinging the UE"
|
||||||
|
echo "############################################################"
|
||||||
|
ping_ue_ip_addr $EPC_VM_CMDS $EPC_VM_IP_ADDR $UE_IP_ADDR 20MHz_ping_ue.txt
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/20MHz_ping_ue.txt $ARCHIVES_LOC
|
||||||
|
check_ping_result $ARCHIVES_LOC/20MHz_ping_ue.txt 20
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Iperf DL"
|
||||||
|
echo "############################################################"
|
||||||
|
CURR_IPERF_LOG_BASE=20MHz_iperf_dl
|
||||||
|
iperf_dl $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 15 $CURR_IPERF_LOG_BASE
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC
|
||||||
|
check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 15
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Iperf UL"
|
||||||
|
echo "############################################################"
|
||||||
|
CURR_IPERF_LOG_BASE=20MHz_iperf_ul
|
||||||
|
iperf_ul $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 1 $CURR_IPERF_LOG_BASE
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC
|
||||||
|
check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 1
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Terminate enb/ue simulators"
|
||||||
|
echo "############################################################"
|
||||||
|
terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
|
||||||
|
scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Terminate EPC"
|
||||||
|
echo "############################################################"
|
||||||
|
|
||||||
|
if [ $LTEBOX -eq 1 ]
|
||||||
|
then
|
||||||
|
terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "############################################################"
|
||||||
|
echo "Checking run status"
|
||||||
|
echo "############################################################"
|
||||||
|
|
||||||
|
if [ $PING_STATUS -ne 0 ]; then STATUS=-1; fi
|
||||||
|
if [ $IPERF_STATUS -ne 0 ]; then STATUS=-1; fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ $STATUS -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "STATUS seems OK"
|
||||||
|
else
|
||||||
|
echo "STATUS failed?"
|
||||||
|
fi
|
||||||
|
|
||||||
exit $STATUS
|
exit $STATUS
|
||||||
|
|||||||
@@ -21,25 +21,31 @@
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
<testCaseList>
|
<testCaseList>
|
||||||
<TestCaseRequestedList>010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040401 040201 030201 040101 030111 040301 040511 040611 040612 040613 040401 040201 030201</TestCaseRequestedList>
|
<TestCaseRequestedList>010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040604 040605 040641 040642 040401 040201 030201 030111 040301 040511 040611 040612 040613 040614 040615 040651 040652 040401 040201 030201 030121 040301 040521 040621 040622 040623 040624 040625 040662 040661 040401 040201 030201 </TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="010101">
|
<testCase id="010101">
|
||||||
<class>Build_eNB</class>
|
<class>Build_eNB</class>
|
||||||
<desc>Build eNB (USRP)</desc>
|
<desc>Build eNB (USRP)</desc>
|
||||||
<Build_eNB_args>-w USRP -x -c --eNB</Build_eNB_args>
|
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030101">
|
<testCase id="030101">
|
||||||
<class>Initialize_eNB</class>
|
<class>Initialize_eNB</class>
|
||||||
<desc>Initialize eNB (FDD/Band7/5MHz)</desc>
|
<desc>Initialize eNB (FDD/Band7/5MHz)</desc>
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf</Initialize_eNB_args>
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf --codingw --fepw</Initialize_eNB_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030111">
|
<testCase id="030111">
|
||||||
<class>Initialize_eNB</class>
|
<class>Initialize_eNB</class>
|
||||||
<desc>Initialize eNB (FDD/Band7/10MHz)</desc>
|
<desc>Initialize eNB (FDD/Band7/10MHz)</desc>
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf</Initialize_eNB_args>
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf --codingw --fepw</Initialize_eNB_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030121">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize eNB (FDD/Band7/20MHz)</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf --codingw --fepw</Initialize_eNB_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030201">
|
<testCase id="030201">
|
||||||
@@ -81,6 +87,13 @@
|
|||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040521">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>ping (20MHz - 20 sec)</desc>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040601">
|
<testCase id="040601">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (5MHz - DL/6Mbps/UDP)(60 sec)</desc>
|
<desc>iperf (5MHz - DL/6Mbps/UDP)(60 sec)</desc>
|
||||||
@@ -102,27 +115,141 @@
|
|||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040604">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 15M -t 60 -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)(60 sec)(unbalanced profile)</desc>
|
||||||
|
<iperf_args>-u -b 15M -t 60 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040641">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(60 sec)</desc>
|
||||||
|
<iperf_args>-u -b 9M -t 60 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040642">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 9M -t 60 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040611">
|
<testCase id="040611">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/6Mbps/UDP)(60 sec)</desc>
|
<desc>iperf (10MHz - DL/10Mbps/UDP)(60 sec)</desc>
|
||||||
<iperf_args>-u -b 6M -t 60 -i 1</iperf_args>
|
<iperf_args>-u -b 10M -t 60 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040612">
|
<testCase id="040612">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/13Mbps/UDP)(60 sec)</desc>
|
<desc>iperf (10MHz - DL/20Mbps/UDP)(60 sec)</desc>
|
||||||
<iperf_args>-u -b 13M -t 60 -i 1</iperf_args>
|
<iperf_args>-u -b 20M -t 60 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040613">
|
<testCase id="040613">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (10MHz - DL/15Mbps/UDP)(60 sec)</desc>
|
<desc>iperf (10MHz - DL/30Mbps/UDP)(60 sec)</desc>
|
||||||
<iperf_args>-u -b 15M -t 60 -i 1</iperf_args>
|
<iperf_args>-u -b 30M -t 60 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040614">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (10MHz - DL/30Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 30M -t 60 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040615">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (10MHz - DL/30Mbps/UDP)(60 sec)(unbalanced profile)</desc>
|
||||||
|
<iperf_args>-u -b 30M -t 60 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040651">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (10MHz - UL/20Mbps/UDP)(60 sec)</desc>
|
||||||
|
<iperf_args>-u -b 20M -t 60 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040652">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (10MHz - UL/20Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 20M -t 60 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040621">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (20MHz - DL/20Mbps/UDP)(60 sec)</desc>
|
||||||
|
<iperf_args>-u -b 20M -t 60 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040622">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (20MHz - DL/40Mbps/UDP)(60 sec)</desc>
|
||||||
|
<iperf_args>-u -b 40M -t 60 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040623">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (20MHz - DL/70Mbps/UDP)(60 sec)</desc>
|
||||||
|
<iperf_args>-u -b 70M -t 60 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040624">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (20MHz - DL/70Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 70M -t 60 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040625">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (20MHz - DL/70Mbps/UDP)(60 sec)(unbalanced profile)</desc>
|
||||||
|
<iperf_args>-u -b 70M -t 60 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040661">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (20MHz - UL/20Mbps/UDP)(60 sec)</desc>
|
||||||
|
<iperf_args>-u -b 20M -t 60 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040662">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (20MHz - UL/20Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-u -b 20M -t 60 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
<testCase id="050101">
|
<testCase id="050101">
|
||||||
<class>Initialize_HSS</class>
|
<class>Initialize_HSS</class>
|
||||||
<desc>Initialize HSS</desc>
|
<desc>Initialize HSS</desc>
|
||||||
|
|||||||
@@ -0,0 +1,179 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
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>
|
||||||
|
<TestCaseRequestedList>010101 050101 060101 070101 040101 030104 040301 040501 040602 040601 040603 040401 040201 030201 030105 040301 040502 040702 040701 040401 040201 030201 050201 060201 070201</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="010101">
|
||||||
|
<class>Build_eNB</class>
|
||||||
|
<desc>Build eNB (USRP)</desc>
|
||||||
|
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030104">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize eNB (FDD/Band40/10MHz)</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf --codingw --fepw</Initialize_eNB_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="030105">
|
||||||
|
<class>Initialize_eNB</class>
|
||||||
|
<desc>Initialize eNB (TDD/Band40/5MHz/info)</desc>
|
||||||
|
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf --codingw --fepw</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>25</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040502">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>ping (10MHz - 20 sec)</desc>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
|
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040601">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
|
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040602">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
|
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040603">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
|
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040701">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
|
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040702">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
|
<iperf_args>-u -b 13.5M -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/1Mbps/UDP)(30 sec)(single-ue)</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="040642">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/1Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
|
<iperf_args>-u -b 1M -t 30 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>balanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="040643">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (5MHz - UL/8Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
|
<iperf_args>-u -b 8M -t 30 -i 1 -R</iperf_args>
|
||||||
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="050101">
|
||||||
|
<class>Initialize_HSS</class>
|
||||||
|
<desc>Initialize HSS</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="060101">
|
||||||
|
<class>Initialize_MME</class>
|
||||||
|
<desc>Initialize MME</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070101">
|
||||||
|
<class>Initialize_SPGW</class>
|
||||||
|
<desc>Initialize SPGW</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="050201">
|
||||||
|
<class>Terminate_HSS</class>
|
||||||
|
<desc>Terminate HSS</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="060201">
|
||||||
|
<class>Terminate_MME</class>
|
||||||
|
<desc>Terminate MME</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="070201">
|
||||||
|
<class>Terminate_SPGW</class>
|
||||||
|
<desc>Terminate SPGW</desc>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -29,13 +29,13 @@
|
|||||||
<testCase id="010101">
|
<testCase id="010101">
|
||||||
<class>Build_eNB</class>
|
<class>Build_eNB</class>
|
||||||
<desc>Build eNB (USRP)</desc>
|
<desc>Build eNB (USRP)</desc>
|
||||||
<Build_eNB_args>-w USRP -x -c --eNB</Build_eNB_args>
|
<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="010102">
|
<testCase id="010102">
|
||||||
<class>Build_eNB</class>
|
<class>Build_eNB</class>
|
||||||
<desc>Build eNB (USRP)</desc>
|
<desc>Build eNB (USRP)</desc>
|
||||||
<Build_eNB_args>-w BLADERF -x -c --eNB</Build_eNB_args>
|
<Build_eNB_args>-w BLADERF -c --eNB</Build_eNB_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="030101">
|
<testCase id="030101">
|
||||||
|
|||||||
@@ -472,6 +472,16 @@ add_library(X2AP_LIB
|
|||||||
include_directories ("${X2AP_C_DIR}")
|
include_directories ("${X2AP_C_DIR}")
|
||||||
include_directories ("${X2AP_DIR}")
|
include_directories ("${X2AP_DIR}")
|
||||||
|
|
||||||
|
#add_library(X2AP_ENB
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB.c
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB_decoder.c
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB_encoder.c
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB_handler.c
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB_itti_messaging.c
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB_management_procedures.c
|
||||||
|
# ${X2AP_DIR}/x2ap_eNB_generate_messages.c
|
||||||
|
# )
|
||||||
|
|
||||||
# Hardware dependant options
|
# Hardware dependant options
|
||||||
###################################
|
###################################
|
||||||
add_list1_option(NB_ANTENNAS_RX "2" "Number of antennas in reception" "1" "2" "4")
|
add_list1_option(NB_ANTENNAS_RX "2" "Number of antennas in reception" "1" "2" "4")
|
||||||
@@ -883,12 +893,9 @@ add_library(HASHTABLE
|
|||||||
)
|
)
|
||||||
include_directories(${OPENAIR_DIR}/common/utils/hashtable)
|
include_directories(${OPENAIR_DIR}/common/utils/hashtable)
|
||||||
|
|
||||||
if (MESSAGE_CHART_GENERATOR)
|
add_library(msc MODULE ${OPENAIR_DIR}/common/utils/msc/msc.c )
|
||||||
add_library(MSC
|
target_link_libraries (msc LFDS)
|
||||||
${OPENAIR_DIR}/common/utils/msc/msc.c
|
|
||||||
)
|
|
||||||
set(MSC_LIB MSC)
|
|
||||||
endif()
|
|
||||||
include_directories(${OPENAIR_DIR}/common/utils/msc)
|
include_directories(${OPENAIR_DIR}/common/utils/msc)
|
||||||
|
|
||||||
set(UTIL_SRC
|
set(UTIL_SRC
|
||||||
@@ -1216,6 +1223,11 @@ set(PHY_MEX_UE
|
|||||||
${OPENAIR1_DIR}/PHY/TOOLS/signal_energy.c
|
${OPENAIR1_DIR}/PHY/TOOLS/signal_energy.c
|
||||||
${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_ue_measurements.c
|
${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_ue_measurements.c
|
||||||
${OPENAIR_DIR}/common/utils/LOG/log.c
|
${OPENAIR_DIR}/common/utils/LOG/log.c
|
||||||
|
${OPENAIR_DIR}/common/utils/T/T.c
|
||||||
|
${OPENAIR_DIR}/common/utils/T/local_tracer.c
|
||||||
|
${OPENAIR_DIR}/common/config/config_cmdline.c
|
||||||
|
${OPENAIR_DIR}/common/config/config_userapi.c
|
||||||
|
${OPENAIR_DIR}/common/config/config_load_configmodule.c
|
||||||
)
|
)
|
||||||
add_library(PHY_MEX ${PHY_MEX_UE})
|
add_library(PHY_MEX ${PHY_MEX_UE})
|
||||||
|
|
||||||
@@ -1378,7 +1390,6 @@ include_directories(${NFAPI_USER_DIR})
|
|||||||
add_library(CN_UTILS
|
add_library(CN_UTILS
|
||||||
${OPENAIR3_DIR}/UTILS/conversions.c
|
${OPENAIR3_DIR}/UTILS/conversions.c
|
||||||
${OPENAIR3_DIR}/UTILS/enum_string.c
|
${OPENAIR3_DIR}/UTILS/enum_string.c
|
||||||
${OPENAIR3_DIR}/UTILS/log.c
|
|
||||||
${OPENAIR3_DIR}/UTILS/mcc_mnc_itu.c
|
${OPENAIR3_DIR}/UTILS/mcc_mnc_itu.c
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1553,7 +1564,6 @@ set(libnas_ies_OBJS
|
|||||||
set (libnas_utils_OBJS
|
set (libnas_utils_OBJS
|
||||||
${NAS_SRC}COMMON/UTIL/device.c
|
${NAS_SRC}COMMON/UTIL/device.c
|
||||||
${NAS_SRC}COMMON/UTIL/memory.c
|
${NAS_SRC}COMMON/UTIL/memory.c
|
||||||
${NAS_SRC}COMMON/UTIL/nas_log.c
|
|
||||||
${NAS_SRC}COMMON/UTIL/nas_timer.c
|
${NAS_SRC}COMMON/UTIL/nas_timer.c
|
||||||
${NAS_SRC}COMMON/UTIL/socket.c
|
${NAS_SRC}COMMON/UTIL/socket.c
|
||||||
${NAS_SRC}COMMON/UTIL/stty.c
|
${NAS_SRC}COMMON/UTIL/stty.c
|
||||||
@@ -1876,9 +1886,13 @@ endif (${T_TRACER})
|
|||||||
#This rule and the following deal with it.
|
#This rule and the following deal with it.
|
||||||
add_custom_command (
|
add_custom_command (
|
||||||
OUTPUT ${OPENAIR_DIR}/common/utils/T/T_IDs.h
|
OUTPUT ${OPENAIR_DIR}/common/utils/T/T_IDs.h
|
||||||
COMMAND make
|
COMMAND $(MAKE) clean
|
||||||
|
COMMAND $(MAKE)
|
||||||
|
COMMAND $(MAKE) check_vcd
|
||||||
WORKING_DIRECTORY ${OPENAIR_DIR}/common/utils/T
|
WORKING_DIRECTORY ${OPENAIR_DIR}/common/utils/T
|
||||||
DEPENDS ${OPENAIR_DIR}/common/utils/T/T_messages.txt
|
DEPENDS ${OPENAIR_DIR}/common/utils/T/T_messages.txt
|
||||||
|
${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.c
|
||||||
|
${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.h
|
||||||
)
|
)
|
||||||
|
|
||||||
#This rule is specifically needed to generate T files
|
#This rule is specifically needed to generate T files
|
||||||
@@ -1929,7 +1943,7 @@ add_executable(lte-softmodem
|
|||||||
|
|
||||||
target_link_libraries (lte-softmodem
|
target_link_libraries (lte-softmodem
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2
|
RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2
|
||||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
@@ -1966,7 +1980,7 @@ add_executable(lte-softmodem-nos1
|
|||||||
)
|
)
|
||||||
target_link_libraries (lte-softmodem-nos1
|
target_link_libraries (lte-softmodem-nos1
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB}
|
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2 ${RAL_LIB} ${ITTI_LIB}
|
||||||
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
-Wl,--end-group z dl )
|
-Wl,--end-group z dl )
|
||||||
@@ -2005,7 +2019,7 @@ add_executable(lte-uesoftmodem
|
|||||||
|
|
||||||
target_link_libraries (lte-uesoftmodem
|
target_link_libraries (lte-uesoftmodem
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU
|
RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU
|
||||||
${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}
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
-Wl,--end-group z dl)
|
-Wl,--end-group z dl)
|
||||||
@@ -2044,7 +2058,7 @@ add_executable(lte-uesoftmodem-nos1
|
|||||||
|
|
||||||
target_link_libraries (lte-uesoftmodem-nos1
|
target_link_libraries (lte-uesoftmodem-nos1
|
||||||
-Wl,--start-group
|
-Wl,--start-group
|
||||||
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB}
|
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU ${RAL_LIB} ${ITTI_LIB}
|
||||||
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
|
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
|
||||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||||
-Wl,--end-group z dl )
|
-Wl,--end-group z dl )
|
||||||
@@ -2122,7 +2136,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 GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT 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_LIBRARIES}
|
-Wl,--start-group RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U LIB_NAS_UE SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS ${ITTI_LIB} L2 -Wl,--end-group pthread m rt crypt sctp ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES} ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${CONFIG_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(test_epc_play_scenario
|
add_executable(test_epc_play_scenario
|
||||||
@@ -2183,7 +2197,8 @@ if (${T_TRACER})
|
|||||||
oai_eth_transpro
|
oai_eth_transpro
|
||||||
FLPT_MSG ASYNC_IF FLEXRAN_AGENT HASHTABLE MSC UTIL OMG_SUMO SECU_OSA
|
FLPT_MSG ASYNC_IF FLEXRAN_AGENT HASHTABLE MSC UTIL OMG_SUMO SECU_OSA
|
||||||
SECU_CN SCHED_LIB PHY L2 default_sched remote_sched RAL CN_UTILS
|
SECU_CN SCHED_LIB PHY L2 default_sched remote_sched RAL CN_UTILS
|
||||||
GTPV1U SCTP_CLIENT UDP LIB_NAS_UE LFDS LFDS7 SIMU OPENAIR0_LIB)
|
GTPV1U SCTP_CLIENT UDP LIB_NAS_UE LFDS LFDS7 SIMU OPENAIR0_LIB PHY_MEX
|
||||||
|
coding)
|
||||||
if (TARGET ${i})
|
if (TARGET ${i})
|
||||||
add_dependencies(${i} generate_T)
|
add_dependencies(${i} generate_T)
|
||||||
endif()
|
endif()
|
||||||
@@ -2226,7 +2241,7 @@ function(make_driver name dir)
|
|||||||
endforeach()
|
endforeach()
|
||||||
CONFIGURE_FILE(${OPENAIR_CMAKE}/tools/Kbuild.cmake ${OPENAIR_BIN_DIR}/${name}/Kbuild)
|
CONFIGURE_FILE(${OPENAIR_CMAKE}/tools/Kbuild.cmake ${OPENAIR_BIN_DIR}/${name}/Kbuild)
|
||||||
add_custom_command(OUTPUT ${name}.ko
|
add_custom_command(OUTPUT ${name}.ko
|
||||||
COMMAND make -C ${module_build_path} M=${OPENAIR_BIN_DIR}/${name}
|
COMMAND $(MAKE) -C ${module_build_path} M=${OPENAIR_BIN_DIR}/${name}
|
||||||
WORKING_DIRECTORY ${OPENAIR_BIN_DIR}/${name}
|
WORKING_DIRECTORY ${OPENAIR_BIN_DIR}/${name}
|
||||||
COMMENT "building ${module}.ko"
|
COMMENT "building ${module}.ko"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.82/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.82/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.82/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
log_config :
|
log_config :
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.18/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
rrh_gw_config = (
|
rrh_gw_config = (
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.18/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
rrh_gw_config = (
|
rrh_gw_config = (
|
||||||
|
|||||||
@@ -146,12 +146,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.18/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
rrh_gw_config = (
|
rrh_gw_config = (
|
||||||
|
|||||||
@@ -148,12 +148,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.215/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
rrh_gw_config = (
|
rrh_gw_config = (
|
||||||
|
|||||||
@@ -148,12 +148,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.215/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
rrh_gw_config = (
|
rrh_gw_config = (
|
||||||
|
|||||||
@@ -148,12 +148,14 @@ eNBs =
|
|||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
|
||||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
|
||||||
|
ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.215/24";
|
||||||
|
ENB_PORT_FOR_X2C = 36422; # Spec 36422
|
||||||
};
|
};
|
||||||
|
|
||||||
rrh_gw_config = (
|
rrh_gw_config = (
|
||||||
|
|||||||
+18
-1
@@ -40,7 +40,7 @@ set_openair_env
|
|||||||
gen_nvram_path=$OPENAIR_DIR/targets/bin
|
gen_nvram_path=$OPENAIR_DIR/targets/bin
|
||||||
conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf
|
conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf
|
||||||
|
|
||||||
MSC_GEN="False"
|
MSC_GEN=0
|
||||||
XFORMS="True"
|
XFORMS="True"
|
||||||
UE_EXPANSION="False"
|
UE_EXPANSION="False"
|
||||||
PRINT_STATS="False"
|
PRINT_STATS="False"
|
||||||
@@ -155,6 +155,10 @@ Options
|
|||||||
Disable all LOG_* macros
|
Disable all LOG_* macros
|
||||||
--build-eclipse
|
--build-eclipse
|
||||||
Build eclipse project files. Paths are auto corrected by fixprj.sh
|
Build eclipse project files. Paths are auto corrected by fixprj.sh
|
||||||
|
--build-telnet
|
||||||
|
Build telnet server, specify --telnetsrv on command line to start it (eNB only)
|
||||||
|
--build-msc
|
||||||
|
Build MSC tracing utility, specify --msc on command line to start it (eNB and UE)
|
||||||
--usrp-recplay
|
--usrp-recplay
|
||||||
Build for I/Q record-playback modes
|
Build for I/Q record-playback modes
|
||||||
--ue-nas-use-tun
|
--ue-nas-use-tun
|
||||||
@@ -345,6 +349,10 @@ function main() {
|
|||||||
--build-telnetsrv)
|
--build-telnetsrv)
|
||||||
BUILD_TELNETSRV=1
|
BUILD_TELNETSRV=1
|
||||||
echo_info "Build embedded telnet server"
|
echo_info "Build embedded telnet server"
|
||||||
|
shift ;;
|
||||||
|
--build-msc)
|
||||||
|
MSC_GEN=1
|
||||||
|
echo_info "Build MSC tracing utility"
|
||||||
shift ;;
|
shift ;;
|
||||||
--usrp-recplay)
|
--usrp-recplay)
|
||||||
USRP_REC_PLAY="True"
|
USRP_REC_PLAY="True"
|
||||||
@@ -690,6 +698,15 @@ function main() {
|
|||||||
$build_dir telnetsrv \
|
$build_dir telnetsrv \
|
||||||
libtelnetsrv.so $dbin/libtelnetsrv.so
|
libtelnetsrv.so $dbin/libtelnetsrv.so
|
||||||
|
|
||||||
|
fi
|
||||||
|
# Telnet server compilation
|
||||||
|
#####################
|
||||||
|
if [ "$MSC_GEN" = "1" ] ; then
|
||||||
|
build_dir=$lte_build_dir
|
||||||
|
compilations \
|
||||||
|
$build_dir msc \
|
||||||
|
libmsc.so $dbin/libmsc.so
|
||||||
|
|
||||||
fi
|
fi
|
||||||
# build RF device and transport protocol libraries
|
# build RF device and transport protocol libraries
|
||||||
#####################################
|
#####################################
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ set(CONF2UEDATA_LIB_SRC
|
|||||||
${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/usim_api.c
|
${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/usim_api.c
|
||||||
${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/aka_functions.c
|
${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/aka_functions.c
|
||||||
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/memory.c
|
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/memory.c
|
||||||
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/nas_log.c
|
|
||||||
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/OctetString.c
|
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/OctetString.c
|
||||||
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/TLVEncoder.c
|
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/TLVEncoder.c
|
||||||
${OPENAIR_DIR}/common/utils/utils.c
|
${OPENAIR_DIR}/common/utils/utils.c
|
||||||
|
|||||||
@@ -597,7 +597,7 @@ check_install_oai_software() {
|
|||||||
echo "EPEL repos not present. Installing them."
|
echo "EPEL repos not present. Installing them."
|
||||||
$SUDO $INSTALLER install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
|
$SUDO $INSTALLER install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
|
||||||
fi
|
fi
|
||||||
$SUDO $INSTALLER install -y python-epdb
|
$SUDO $INSTALLER install -y python-epdb vim-common
|
||||||
else
|
else
|
||||||
$SUDO $INSTALLER install -y mscgen pydb
|
$SUDO $INSTALLER install -y mscgen pydb
|
||||||
fi
|
fi
|
||||||
@@ -683,7 +683,7 @@ install_asn1c_from_source(){
|
|||||||
# better to use a given commit than a branch in case the branch
|
# better to use a given commit than a branch in case the branch
|
||||||
# is updated and requires modifications in the source of OAI
|
# is updated and requires modifications in the source of OAI
|
||||||
#git checkout velichkov_s1ap_plus_option_group
|
#git checkout velichkov_s1ap_plus_option_group
|
||||||
git checkout ec830d70bbb014b769810355a2f321a91ccd8a58
|
git checkout 73d6b23dcec9ab36605b4af884143824392134c1
|
||||||
autoreconf -iv
|
autoreconf -iv
|
||||||
./configure
|
./configure
|
||||||
make -j`nproc`
|
make -j`nproc`
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
#include "config_userapi.h"
|
#include "config_userapi.h"
|
||||||
|
|
||||||
|
|
||||||
void parse_stringlist(paramdef_t *cfgoptions, char *val)
|
int parse_stringlist(paramdef_t *cfgoptions, char *val)
|
||||||
{
|
{
|
||||||
char *atoken;
|
char *atoken;
|
||||||
char *tokctx;
|
char *tokctx;
|
||||||
@@ -64,7 +64,7 @@ int numelt=0;
|
|||||||
printf_params("[LIBCONFIG] %s[%i]: %s\n", cfgoptions->optname,i,cfgoptions->strlistptr[i]);
|
printf_params("[LIBCONFIG] %s[%i]: %s\n", cfgoptions->optname,i,cfgoptions->strlistptr[i]);
|
||||||
atoken=strtok_r(NULL, ",",&tokctx);
|
atoken=strtok_r(NULL, ",",&tokctx);
|
||||||
}
|
}
|
||||||
cfgoptions->numelt=numelt;
|
return (cfgoptions->numelt > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int processoption(paramdef_t *cfgoptions, char *value)
|
int processoption(paramdef_t *cfgoptions, char *value)
|
||||||
@@ -96,7 +96,7 @@ char defbool[2]="1";
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_STRINGLIST:
|
case TYPE_STRINGLIST:
|
||||||
parse_stringlist(cfgoptions,tmpval);
|
optisset=parse_stringlist(cfgoptions,tmpval);
|
||||||
break;
|
break;
|
||||||
case TYPE_UINT32:
|
case TYPE_UINT32:
|
||||||
case TYPE_INT32:
|
case TYPE_INT32:
|
||||||
|
|||||||
+138
-101
@@ -54,7 +54,6 @@
|
|||||||
|
|
||||||
mapping log_level_names[] = {
|
mapping log_level_names[] = {
|
||||||
{"error", OAILOG_ERR},
|
{"error", OAILOG_ERR},
|
||||||
{"file", OAILOG_FILE},
|
|
||||||
{"warn", OAILOG_WARNING},
|
{"warn", OAILOG_WARNING},
|
||||||
{"info", OAILOG_INFO},
|
{"info", OAILOG_INFO},
|
||||||
{"debug", OAILOG_DEBUG},
|
{"debug", OAILOG_DEBUG},
|
||||||
@@ -70,18 +69,10 @@ mapping log_options[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
mapping log_maskmap[] = {
|
mapping log_maskmap[] = LOG_MASKMAP_INIT;
|
||||||
{"prach", DEBUG_PRACH},
|
|
||||||
{"RU", DEBUG_RU},
|
|
||||||
{"LTEESTIM", DEBUG_LTEESTIM},
|
|
||||||
{"ctrlsocket", DEBUG_CTRLSOCKET},
|
|
||||||
{"UE_PHYPROC", DEBUG_UE_PHYPROC},
|
|
||||||
{"UE_TIMING", UE_TIMING},
|
|
||||||
{NULL,-1}
|
|
||||||
};
|
|
||||||
|
|
||||||
char *log_level_highlight_start[] = {LOG_RED, LOG_GREEN, LOG_ORANGE, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */
|
char *log_level_highlight_start[] = {LOG_RED, LOG_ORANGE, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */
|
||||||
char *log_level_highlight_end[] = {LOG_RESET,LOG_RESET,LOG_RESET,LOG_RESET, LOG_RESET,LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */
|
char *log_level_highlight_end[] = {LOG_RESET,LOG_RESET,LOG_RESET, LOG_RESET,LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */
|
||||||
|
|
||||||
|
|
||||||
int write_file_matlab(const char *fname,const char *vname,void *data,int length,int dec,char format)
|
int write_file_matlab(const char *fname,const char *vname,void *data,int length,int dec,char format)
|
||||||
@@ -243,14 +234,14 @@ int write_file_matlab(const char *fname,const char *vname,void *data,int length,
|
|||||||
/* get log parameters from configuration file */
|
/* get log parameters from configuration file */
|
||||||
void log_getconfig(log_t *g_log) {
|
void log_getconfig(log_t *g_log) {
|
||||||
char *gloglevel = NULL;
|
char *gloglevel = NULL;
|
||||||
int level;
|
int consolelog ;
|
||||||
|
|
||||||
|
|
||||||
paramdef_t logparams_defaults[] = LOG_GLOBALPARAMS_DESC;
|
paramdef_t logparams_defaults[] = LOG_GLOBALPARAMS_DESC;
|
||||||
paramdef_t logparams_level[MAX_LOG_PREDEF_COMPONENTS];
|
paramdef_t logparams_level[MAX_LOG_PREDEF_COMPONENTS];
|
||||||
paramdef_t logparams_logfile[MAX_LOG_PREDEF_COMPONENTS];
|
paramdef_t logparams_logfile[MAX_LOG_PREDEF_COMPONENTS];
|
||||||
paramdef_t logparams_debug[sizeof(log_maskmap)/sizeof(mapping)];
|
paramdef_t logparams_debug[sizeof(log_maskmap)/sizeof(mapping)];
|
||||||
paramdef_t logparams_matlab[sizeof(log_maskmap)/sizeof(mapping)];
|
paramdef_t logparams_dump[sizeof(log_maskmap)/sizeof(mapping)];
|
||||||
|
|
||||||
int ret = config_get( logparams_defaults,sizeof(logparams_defaults)/sizeof(paramdef_t),CONFIG_STRING_LOG_PREFIX);
|
int ret = config_get( logparams_defaults,sizeof(logparams_defaults)/sizeof(paramdef_t),CONFIG_STRING_LOG_PREFIX);
|
||||||
if (ret <0) {
|
if (ret <0) {
|
||||||
@@ -258,6 +249,7 @@ void log_getconfig(log_t *g_log) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* set LOG display options (enable/disable color, thread name, level ) */
|
||||||
for(int i=0; i<logparams_defaults[LOG_OPTIONS_IDX].numelt ; i++) {
|
for(int i=0; i<logparams_defaults[LOG_OPTIONS_IDX].numelt ; i++) {
|
||||||
for(int j=0; log_options[j].name != NULL ; j++) {
|
for(int j=0; log_options[j].name != NULL ; j++) {
|
||||||
if (strcmp(logparams_defaults[LOG_OPTIONS_IDX].strlistptr[i],log_options[j].name) == 0) {
|
if (strcmp(logparams_defaults[LOG_OPTIONS_IDX].strlistptr[i],log_options[j].name) == 0) {
|
||||||
@@ -303,38 +295,40 @@ void log_getconfig(log_t *g_log) {
|
|||||||
config_get( logparams_logfile, MAX_LOG_PREDEF_COMPONENTS,CONFIG_STRING_LOG_PREFIX);
|
config_get( logparams_logfile, MAX_LOG_PREDEF_COMPONENTS,CONFIG_STRING_LOG_PREFIX);
|
||||||
/* now set the log levels and infile option, according to what we read */
|
/* now set the log levels and infile option, according to what we read */
|
||||||
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) {
|
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) {
|
||||||
level = map_str_to_int(log_level_names, *(logparams_level[i].strptr));
|
g_log->log_component[i].level = map_str_to_int(log_level_names, *(logparams_level[i].strptr));
|
||||||
set_log(i, level,1);
|
set_log(i, g_log->log_component[i].level);
|
||||||
if (*(logparams_logfile[i].uptr) == 1)
|
if (*(logparams_logfile[i].uptr) == 1)
|
||||||
set_component_filelog(i);
|
set_component_filelog(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* build then read the debug and matlab parameter array */
|
/* build then read the debug and dump parameter array */
|
||||||
for (int i=0;log_maskmap[i].name != NULL ; i++) {
|
for (int i=0;log_maskmap[i].name != NULL ; i++) {
|
||||||
sprintf(logparams_debug[i].optname, LOG_CONFIG_DEBUG_FORMAT, log_maskmap[i].name);
|
sprintf(logparams_debug[i].optname, LOG_CONFIG_DEBUG_FORMAT, log_maskmap[i].name);
|
||||||
sprintf(logparams_matlab[i].optname, LOG_CONFIG_MATLAB_FORMAT, log_maskmap[i].name);
|
sprintf(logparams_dump[i].optname, LOG_CONFIG_DUMP_FORMAT, log_maskmap[i].name);
|
||||||
logparams_debug[i].defuintval = 0;
|
logparams_debug[i].defuintval = 0;
|
||||||
logparams_debug[i].type = TYPE_UINT;
|
logparams_debug[i].type = TYPE_UINT;
|
||||||
logparams_debug[i].paramflags = PARAMFLAG_BOOL;
|
logparams_debug[i].paramflags = PARAMFLAG_BOOL;
|
||||||
logparams_debug[i].uptr = NULL;
|
logparams_debug[i].uptr = NULL;
|
||||||
logparams_debug[i].chkPptr = NULL;
|
logparams_debug[i].chkPptr = NULL;
|
||||||
logparams_debug[i].numelt = 0;
|
logparams_debug[i].numelt = 0;
|
||||||
logparams_matlab[i].defuintval = 0;
|
logparams_dump[i].defuintval = 0;
|
||||||
logparams_matlab[i].type = TYPE_UINT;
|
logparams_dump[i].type = TYPE_UINT;
|
||||||
logparams_matlab[i].paramflags = PARAMFLAG_BOOL;
|
logparams_dump[i].paramflags = PARAMFLAG_BOOL;
|
||||||
logparams_matlab[i].uptr = NULL;
|
logparams_dump[i].uptr = NULL;
|
||||||
logparams_matlab[i].chkPptr = NULL;
|
logparams_dump[i].chkPptr = NULL;
|
||||||
logparams_matlab[i].numelt = 0;
|
logparams_dump[i].numelt = 0;
|
||||||
}
|
}
|
||||||
config_get( logparams_debug,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
|
config_get( logparams_debug,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
|
||||||
config_get( logparams_matlab,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
|
config_get( logparams_dump,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
|
||||||
/* set the debug mask according to the debug parameters values */
|
/* set the debug mask according to the debug parameters values */
|
||||||
for (int i=0; log_maskmap[i].name != NULL ; i++) {
|
for (int i=0; log_maskmap[i].name != NULL ; i++) {
|
||||||
if (*(logparams_debug[i].uptr) )
|
if (*(logparams_debug[i].uptr) )
|
||||||
g_log->debug_mask = g_log->debug_mask | log_maskmap[i].value;
|
g_log->debug_mask = g_log->debug_mask | log_maskmap[i].value;
|
||||||
if (*(logparams_matlab[i].uptr) )
|
if (*(logparams_dump[i].uptr) )
|
||||||
g_log->matlab_mask = g_log->matlab_mask | log_maskmap[i].value;
|
g_log->dump_mask = g_log->dump_mask | log_maskmap[i].value;
|
||||||
}
|
}
|
||||||
|
/* log globally enabled/disabled */
|
||||||
|
set_glog_onlinelog(consolelog);
|
||||||
}
|
}
|
||||||
|
|
||||||
int register_log_component(char *name, char *fext, int compidx)
|
int register_log_component(char *name, char *fext, int compidx)
|
||||||
@@ -354,11 +348,9 @@ int computed_compidx=compidx;
|
|||||||
}
|
}
|
||||||
if (computed_compidx >= 0 && computed_compidx <MAX_LOG_COMPONENTS) {
|
if (computed_compidx >= 0 && computed_compidx <MAX_LOG_COMPONENTS) {
|
||||||
g_log->log_component[computed_compidx].name = strdup(name);
|
g_log->log_component[computed_compidx].name = strdup(name);
|
||||||
g_log->log_component[computed_compidx].level = LOG_ERR;
|
g_log->log_component[computed_compidx].stream = stdout;
|
||||||
g_log->log_component[computed_compidx].interval = 1;
|
|
||||||
g_log->log_component[computed_compidx].stream = NULL;
|
|
||||||
g_log->log_component[computed_compidx].filelog = 0;
|
g_log->log_component[computed_compidx].filelog = 0;
|
||||||
g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/<name>.%s rounded to ^2 */
|
g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/<name>.%s */
|
||||||
sprintf(g_log->log_component[computed_compidx].filelog_name,"/tmp/%s.%s",name,fext);
|
sprintf(g_log->log_component[computed_compidx].filelog_name,"/tmp/%s.%s",name,fext);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,"{LOG} %s %d Couldn't register componemt %s\n",__FILE__,__LINE__,name);
|
fprintf(stderr,"{LOG} %s %d Couldn't register componemt %s\n",__FILE__,__LINE__,name);
|
||||||
@@ -421,23 +413,16 @@ int logInit (void)
|
|||||||
|
|
||||||
|
|
||||||
register_log_component("SCTP","",SCTP);
|
register_log_component("SCTP","",SCTP);
|
||||||
register_log_component("RRH","",RRH);
|
register_log_component("X2AP","",X2AP);
|
||||||
|
register_log_component("LOADER","log",LOADER);
|
||||||
|
register_log_component("ASN","log",ASN);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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[OAILOG_ERR] = "E"; // ERROR
|
|
||||||
g_log->level2string[OAILOG_WARNING] = "W"; // WARNING
|
|
||||||
g_log->level2string[OAILOG_INFO] = "I"; //INFO
|
|
||||||
g_log->level2string[OAILOG_DEBUG] = "D"; // DEBUG
|
|
||||||
g_log->level2string[OAILOG_FILE] = "F"; // file
|
|
||||||
g_log->level2string[OAILOG_TRACE] = "T"; // TRACE
|
|
||||||
|
|
||||||
|
|
||||||
g_log->onlinelog = 1; //online log file
|
|
||||||
g_log->filelog = 0;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -446,19 +431,6 @@ int logInit (void)
|
|||||||
log_getconfig(g_log);
|
log_getconfig(g_log);
|
||||||
|
|
||||||
|
|
||||||
// could put a loop here to check for all comps
|
|
||||||
for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
|
||||||
if (g_log->log_component[i].filelog == 1 ) {
|
|
||||||
g_log->log_component[i].stream = fopen(g_log->log_component[i].filelog_name,"w");
|
|
||||||
g_log->log_component[i].fwrite = vfprintf;
|
|
||||||
} else if (g_log->log_component[i].filelog == 1 ) {
|
|
||||||
g_log->log_component[i].stream = fopen(g_log->filelog_name,"w");
|
|
||||||
g_log->log_component[i].fwrite = vfprintf;
|
|
||||||
} else if (g_log->onlinelog == 1 ) {
|
|
||||||
g_log->log_component[i].stream = stdout;
|
|
||||||
g_log->log_component[i].fwrite = vfprintf;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// set all unused component items to 0, they are for non predefined components
|
// set all unused component items to 0, they are for non predefined components
|
||||||
for (i=MAX_LOG_PREDEF_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
for (i=MAX_LOG_PREDEF_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
||||||
@@ -470,8 +442,6 @@ int logInit (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
char *log_getthreadname(char *threadname, int bufsize) {
|
char *log_getthreadname(char *threadname, int bufsize) {
|
||||||
|
|
||||||
int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ;
|
int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ;
|
||||||
@@ -483,11 +453,20 @@ int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int inline log_header(char *log_buffer, int buffsize, int comp, int level,const char *format) {
|
||||||
|
char threadname[PR_SET_NAME];
|
||||||
|
return snprintf(log_buffer, buffsize , "%s%s[%s]%c %s %s%s",
|
||||||
|
log_level_highlight_end[level],
|
||||||
|
( (g_log->flag & FLAG_NOCOLOR)?"":log_level_highlight_start[level]),
|
||||||
|
g_log->log_component[comp].name,
|
||||||
|
( (g_log->flag & FLAG_LEVEL)?g_log->level2string[level]:' '),
|
||||||
|
( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""),
|
||||||
|
format,
|
||||||
|
log_level_highlight_end[level]);
|
||||||
|
}
|
||||||
|
|
||||||
void logRecord_mt(const char *file, const char *func, int line, int comp, int level, const char* format, ... )
|
void logRecord_mt(const char *file, const char *func, int line, int comp, int level, const char* format, ... )
|
||||||
{
|
{
|
||||||
|
|
||||||
char threadname[PR_SET_NAME];
|
|
||||||
char log_buffer[MAX_LOG_TOTAL];
|
char log_buffer[MAX_LOG_TOTAL];
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
@@ -496,38 +475,63 @@ void logRecord_mt(const char *file, const char *func, int line, int comp, int le
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
log_header(log_buffer,MAX_LOG_TOTAL ,comp, level,format);
|
||||||
|
g_log->log_component[comp].vprint(g_log->log_component[comp].stream,log_buffer, args);
|
||||||
snprintf(log_buffer, MAX_LOG_TOTAL , "%s%s[%s]%s %s %s",
|
|
||||||
log_level_highlight_end[level],
|
|
||||||
( (g_log->flag & FLAG_NOCOLOR)?"":log_level_highlight_start[level]),
|
|
||||||
g_log->log_component[comp].name,
|
|
||||||
( (g_log->flag & FLAG_LEVEL)?g_log->level2string[level]:""),
|
|
||||||
( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""),
|
|
||||||
format);
|
|
||||||
|
|
||||||
g_log->log_component[comp].fwrite(g_log->log_component[comp].stream,log_buffer, args);
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void log_dump(int component, void *buffer, int buffsize,int datatype, const char* format, ... ) {
|
||||||
|
va_list args;
|
||||||
|
char *wbuf;
|
||||||
|
|
||||||
|
|
||||||
int set_log(int component, int level, int interval)
|
switch(datatype) {
|
||||||
|
case LOG_DUMP_DOUBLE:
|
||||||
|
wbuf=malloc((buffsize * 10) + 64 + MAX_LOG_TOTAL);
|
||||||
|
break;
|
||||||
|
case LOG_DUMP_CHAR:
|
||||||
|
default:
|
||||||
|
wbuf=malloc((buffsize * 3 ) + 64 + MAX_LOG_TOTAL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (wbuf != NULL) {
|
||||||
|
va_start(args, format);
|
||||||
|
int pos=log_header(wbuf,MAX_LOG_TOTAL ,component, OAILOG_INFO,"");
|
||||||
|
int pos2=vsprintf(wbuf+pos,format, args);
|
||||||
|
pos=pos+pos2;
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
for (int i=0; i<buffsize; i++) {
|
||||||
|
switch(datatype) {
|
||||||
|
case LOG_DUMP_DOUBLE:
|
||||||
|
pos = pos + sprintf(wbuf+pos,"%04.4lf ", (double)((double *)buffer)[i]);
|
||||||
|
break;
|
||||||
|
case LOG_DUMP_CHAR:
|
||||||
|
default:
|
||||||
|
pos = pos + sprintf(wbuf+pos,"%02x ", (unsigned char)((unsigned char *)buffer)[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sprintf(wbuf+pos,"\n");
|
||||||
|
g_log->log_component[component].print(g_log->log_component[component].stream,wbuf);
|
||||||
|
free(wbuf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int set_log(int component, int level)
|
||||||
{
|
{
|
||||||
/* Checking parameters */
|
/* Checking parameters */
|
||||||
DevCheck((component >= MIN_LOG_COMPONENTS) && (component < MAX_LOG_COMPONENTS),
|
DevCheck((component >= MIN_LOG_COMPONENTS) && (component < MAX_LOG_COMPONENTS),
|
||||||
component, MIN_LOG_COMPONENTS, MAX_LOG_COMPONENTS);
|
component, MIN_LOG_COMPONENTS, MAX_LOG_COMPONENTS);
|
||||||
DevCheck((level < NUM_LOG_LEVEL) && (level >= OAILOG_ERR), level, NUM_LOG_LEVEL,
|
DevCheck((level < NUM_LOG_LEVEL) && (level >= OAILOG_DISABLE), level, NUM_LOG_LEVEL,
|
||||||
OAILOG_ERR);
|
OAILOG_ERR);
|
||||||
DevCheck((interval >= 0) && (interval <= 0xFF), interval, 0, 0xFF);
|
|
||||||
|
|
||||||
|
if ( g_log->log_component[component].level != OAILOG_DISABLE )
|
||||||
|
g_log->log_component[component].savedlevel = g_log->log_component[component].level;
|
||||||
g_log->log_component[component].level = level;
|
g_log->log_component[component].level = level;
|
||||||
|
|
||||||
|
|
||||||
g_log->log_component[component].interval = interval;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -536,32 +540,67 @@ int set_log(int component, int level, int interval)
|
|||||||
void set_glog(int level)
|
void set_glog(int level)
|
||||||
{
|
{
|
||||||
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
|
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
|
||||||
g_log->log_component[c].level = level;
|
set_log(c, level);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_glog_onlinelog(int enable)
|
void set_glog_onlinelog(int enable)
|
||||||
{
|
{
|
||||||
g_log->onlinelog = enable;
|
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
|
||||||
|
if ( enable ) {
|
||||||
|
g_log->log_component[c].level = g_log->log_component[c].savedlevel;
|
||||||
|
g_log->log_component[c].vprint = vfprintf;
|
||||||
|
g_log->log_component[c].print = fprintf;
|
||||||
|
g_log->log_component[c].stream = stdout;
|
||||||
|
} else {
|
||||||
|
g_log->log_component[c].level = OAILOG_DISABLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void set_glog_filelog(int enable)
|
void set_glog_filelog(int enable)
|
||||||
{
|
{
|
||||||
g_log->filelog = enable;
|
static FILE *fptr;
|
||||||
|
|
||||||
|
if ( enable ) {
|
||||||
|
fptr = fopen(g_log->filelog_name,"w");
|
||||||
|
|
||||||
|
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
|
||||||
|
close_component_filelog(c);
|
||||||
|
g_log->log_component[c].stream = fptr;
|
||||||
|
g_log->log_component[c].filelog = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
|
||||||
|
g_log->log_component[c].filelog = 0;
|
||||||
|
if (fptr != NULL) {
|
||||||
|
fclose(fptr);
|
||||||
|
}
|
||||||
|
g_log->log_component[c].stream = stdout;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_component_filelog(int comp)
|
void set_component_filelog(int comp)
|
||||||
{
|
{
|
||||||
if (g_log->log_component[comp].filelog == 0) {
|
if (g_log->log_component[comp].stream == NULL || g_log->log_component[comp].stream == stdout) {
|
||||||
g_log->log_component[comp].filelog = 1;
|
|
||||||
|
|
||||||
if (g_log->log_component[comp].stream == NULL) {
|
|
||||||
g_log->log_component[comp].stream = fopen(g_log->log_component[comp].filelog_name,"w");
|
g_log->log_component[comp].stream = fopen(g_log->log_component[comp].filelog_name,"w");
|
||||||
}
|
}
|
||||||
}
|
g_log->log_component[comp].vprint = vfprintf;
|
||||||
|
g_log->log_component[comp].print = fprintf;
|
||||||
|
g_log->log_component[comp].filelog = 1;
|
||||||
|
}
|
||||||
|
void close_component_filelog(int comp)
|
||||||
|
{
|
||||||
|
g_log->log_component[comp].filelog = 0;
|
||||||
|
if (g_log->log_component[comp].stream != NULL && g_log->log_component[comp].stream != stdout ) {
|
||||||
|
fclose(g_log->log_component[comp].stream);
|
||||||
|
g_log->log_component[comp].stream = stdout;
|
||||||
|
}
|
||||||
|
g_log->log_component[comp].vprint = vfprintf;
|
||||||
|
g_log->log_component[comp].print = fprintf;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* for the two functions below, the passed array must have a final entry
|
* for the two functions below, the passed array must have a final entry
|
||||||
@@ -616,15 +655,13 @@ int is_newline( char *str, int size)
|
|||||||
void logClean (void)
|
void logClean (void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
LOG_I(PHY,"\n");
|
LOG_UI(PHY,"\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
||||||
if (g_log->log_component[i].stream != NULL) {
|
close_component_filelog(i);
|
||||||
fclose(g_log->log_component[i].stream);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -650,8 +687,8 @@ int test_log(void)
|
|||||||
LOG_D(MAC, "1 debug MAC \n");
|
LOG_D(MAC, "1 debug MAC \n");
|
||||||
LOG_W(MAC, "1 warning MAC \n");
|
LOG_W(MAC, "1 warning MAC \n");
|
||||||
|
|
||||||
set_log(EMU, OAILOG_INFO, FLAG_ONLINE);
|
set_log(EMU, OAILOG_INFO);
|
||||||
set_log(MAC, OAILOG_WARNING, 0);
|
set_log(MAC, OAILOG_WARNING);
|
||||||
|
|
||||||
LOG_I(EMU, "2 Starting OAI logs version %s Build date: %s on %s\n",
|
LOG_I(EMU, "2 Starting OAI logs version %s Build date: %s on %s\n",
|
||||||
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
||||||
@@ -661,7 +698,7 @@ int test_log(void)
|
|||||||
LOG_I(MAC, "2 info MAC \n");
|
LOG_I(MAC, "2 info MAC \n");
|
||||||
|
|
||||||
|
|
||||||
set_log(MAC, OAILOG_NOTICE, 1);
|
set_log(MAC, OAILOG_NOTICE);
|
||||||
|
|
||||||
LOG_ENTER(MAC);
|
LOG_ENTER(MAC);
|
||||||
LOG_I(EMU, "3 Starting OAI logs version %s Build date: %s on %s\n",
|
LOG_I(EMU, "3 Starting OAI logs version %s Build date: %s on %s\n",
|
||||||
@@ -670,8 +707,8 @@ int test_log(void)
|
|||||||
LOG_W(MAC, "3 warning MAC \n");
|
LOG_W(MAC, "3 warning MAC \n");
|
||||||
LOG_I(MAC, "3 info MAC \n");
|
LOG_I(MAC, "3 info MAC \n");
|
||||||
|
|
||||||
set_log(MAC, LOG_DEBUG,1);
|
set_log(MAC, LOG_DEBUG);
|
||||||
set_log(EMU, LOG_DEBUG,1);
|
set_log(EMU, LOG_DEBUG);
|
||||||
|
|
||||||
LOG_ENTER(MAC);
|
LOG_ENTER(MAC);
|
||||||
LOG_I(EMU, "4 Starting OAI logs version %s Build date: %s on %s\n",
|
LOG_I(EMU, "4 Starting OAI logs version %s Build date: %s on %s\n",
|
||||||
@@ -681,8 +718,8 @@ int test_log(void)
|
|||||||
LOG_I(MAC, "4 info MAC \n");
|
LOG_I(MAC, "4 info MAC \n");
|
||||||
|
|
||||||
|
|
||||||
set_log(MAC, LOG_DEBUG,0);
|
set_log(MAC, LOG_DEBUG);
|
||||||
set_log(EMU, LOG_DEBUG,0);
|
set_log(EMU, LOG_DEBUG);
|
||||||
|
|
||||||
LOG_I(LOG, "5 Starting OAI logs version %s Build date: %s on %s\n",
|
LOG_I(LOG, "5 Starting OAI logs version %s Build date: %s on %s\n",
|
||||||
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
||||||
@@ -691,8 +728,8 @@ int test_log(void)
|
|||||||
LOG_I(MAC, "5 info MAC \n");
|
LOG_I(MAC, "5 info MAC \n");
|
||||||
|
|
||||||
|
|
||||||
set_log(MAC, LOG_TRACE,0X07F);
|
set_log(MAC, LOG_TRACE);
|
||||||
set_log(EMU, LOG_TRACE,0X07F);
|
set_log(EMU, LOG_TRACE);
|
||||||
|
|
||||||
LOG_ENTER(MAC);
|
LOG_ENTER(MAC);
|
||||||
LOG_I(LOG, "6 Starting OAI logs version %s Build date: %s on %s\n",
|
LOG_I(LOG, "6 Starting OAI logs version %s Build date: %s on %s\n",
|
||||||
|
|||||||
+89
-53
@@ -81,15 +81,14 @@ extern "C" {
|
|||||||
* @ingroup _macro
|
* @ingroup _macro
|
||||||
* @brief LOG defines 9 levels of messages for users. Importance of these levels decrease gradually from 0 to 8
|
* @brief LOG defines 9 levels of messages for users. Importance of these levels decrease gradually from 0 to 8
|
||||||
* @{*/
|
* @{*/
|
||||||
|
# define OAILOG_DISABLE -1 /*!< \brief disable all LOG messages, cannot be used in LOG macros, use only in LOG module */
|
||||||
|
# define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" fuctinalities */
|
||||||
|
# define OAILOG_WARNING 1 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */
|
||||||
|
# define OAILOG_INFO 2 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
|
||||||
|
# define OAILOG_DEBUG 3 /*!< \brief first level debug-level messages, for developers , may impact real-time behavior */
|
||||||
|
# define OAILOG_TRACE 4 /*!< \brief second level debug-level messages, for developers ,likely impact real-time behavior*/
|
||||||
|
|
||||||
# define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" fuctinalities */
|
#define NUM_LOG_LEVEL 5 /*!< \brief the number of message levels users have with LOG (OAILOG_DISABLE is not available to user as a level, so it is not included)*/
|
||||||
# define OAILOG_FILE 1 /*!< \brief important informational messages, but everything OK */
|
|
||||||
# define OAILOG_WARNING 2 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */
|
|
||||||
# define OAILOG_INFO 3 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
|
|
||||||
# define OAILOG_DEBUG 4 /*!< \brief first level debug-level messages, for developers , may impact real-time behavior */
|
|
||||||
# define OAILOG_TRACE 5 /*!< \brief second level debug-level messages, for developers ,likely impact real-time behavior*/
|
|
||||||
|
|
||||||
#define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG */
|
|
||||||
/* @}*/
|
/* @}*/
|
||||||
|
|
||||||
|
|
||||||
@@ -128,21 +127,53 @@ extern "C" {
|
|||||||
|
|
||||||
/** @defgroup macros to identify a debug entity
|
/** @defgroup macros to identify a debug entity
|
||||||
* @ingroup each macro is a bit mask where the unique bit set identifies an entity to be debugged
|
* @ingroup each macro is a bit mask where the unique bit set identifies an entity to be debugged
|
||||||
* it allows to dynamically activate or not blocks of code
|
* it allows to dynamically activate or not blocks of code. The LOG_MASKMAP_INIT macro
|
||||||
|
* is used to map a character string name to each debug bit, it allows to set or clear
|
||||||
|
* the corresponding bit via the defined name, from the configuration or from the telnet
|
||||||
|
* server.
|
||||||
* @brief
|
* @brief
|
||||||
* @{*/
|
* @{*/
|
||||||
#define DEBUG_PRACH (1<<0)
|
#define DEBUG_PRACH (1<<0)
|
||||||
#define DEBUG_RU (1<<1)
|
#define DEBUG_RU (1<<1)
|
||||||
#define DEBUG_UE_PHYPROC (1<<2)
|
#define DEBUG_UE_PHYPROC (1<<2)
|
||||||
#define DEBUG_LTEESTIM (1<<3)
|
#define DEBUG_LTEESTIM (1<<3)
|
||||||
|
#define DEBUG_DLCELLSPEC (1<<4)
|
||||||
|
#define DEBUG_ULSCH (1<<5)
|
||||||
|
#define DEBUG_RRC (1<<6)
|
||||||
|
#define DEBUG_PDCP (1<<7)
|
||||||
|
#define DEBUG_DFT (1<<8)
|
||||||
|
#define DEBUG_ASN1 (1<<9)
|
||||||
#define DEBUG_CTRLSOCKET (1<<10)
|
#define DEBUG_CTRLSOCKET (1<<10)
|
||||||
|
#define DEBUG_SECURITY (1<<11)
|
||||||
|
#define DEBUG_NAS (1<<12)
|
||||||
#define UE_TIMING (1<<20)
|
#define UE_TIMING (1<<20)
|
||||||
|
|
||||||
#define SET_LOG_DEBUG(O) g_log->debug_mask = (g_log->debug_mask | O)
|
|
||||||
#define CLEAR_LOG_DEBUG(O) g_log->debug_mask = (g_log->debug_mask & (~O))
|
|
||||||
|
|
||||||
#define SET_LOG_MATLAB(O) g_log->matlab_mask = (g_log->matlab_mask | O)
|
#define LOG_MASKMAP_INIT {\
|
||||||
#define CLEAR_LOG_MATLAB(O) g_log->matlab_mask = (g_log->matlab_mask & (~O))
|
{"PRACH", DEBUG_PRACH},\
|
||||||
|
{"RU", DEBUG_RU},\
|
||||||
|
{"UE_PHYPROC", DEBUG_UE_PHYPROC},\
|
||||||
|
{"LTEESTIM", DEBUG_LTEESTIM},\
|
||||||
|
{"DLCELLSPEC", DEBUG_DLCELLSPEC},\
|
||||||
|
{"ULSCH", DEBUG_ULSCH},\
|
||||||
|
{"RRC", DEBUG_RRC},\
|
||||||
|
{"PDCP", DEBUG_PDCP},\
|
||||||
|
{"DFT", DEBUG_DFT},\
|
||||||
|
{"ASN1", DEBUG_ASN1},\
|
||||||
|
{"CTRLSOCKET", DEBUG_CTRLSOCKET},\
|
||||||
|
{"SECURITY", DEBUG_SECURITY},\
|
||||||
|
{"NAS", DEBUG_NAS},\
|
||||||
|
{"UE_TIMING", UE_TIMING},\
|
||||||
|
{NULL,-1}\
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define SET_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask | B)
|
||||||
|
#define CLEAR_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask & (~B))
|
||||||
|
|
||||||
|
#define SET_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask | B)
|
||||||
|
#define CLEAR_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask & (~B))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -183,9 +214,9 @@ typedef enum {
|
|||||||
TMR,
|
TMR,
|
||||||
USIM,
|
USIM,
|
||||||
LOCALIZE,
|
LOCALIZE,
|
||||||
RRH,
|
|
||||||
X2AP,
|
X2AP,
|
||||||
LOADER,
|
LOADER,
|
||||||
|
ASN,
|
||||||
MAX_LOG_PREDEF_COMPONENTS,
|
MAX_LOG_PREDEF_COMPONENTS,
|
||||||
}
|
}
|
||||||
comp_name_t;
|
comp_name_t;
|
||||||
@@ -199,17 +230,18 @@ typedef struct {
|
|||||||
int value; /*!< \brief integer value of mapping */
|
int value; /*!< \brief integer value of mapping */
|
||||||
} mapping;
|
} mapping;
|
||||||
|
|
||||||
typedef int(*log_write_func_t)(FILE *stream, const char *format, va_list ap );
|
typedef int(*log_vprint_func_t)(FILE *stream, const char *format, va_list ap );
|
||||||
|
typedef int(*log_print_func_t)(FILE *stream, const char *format, ... );
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
int level;
|
int level;
|
||||||
int flag;
|
int savedlevel;
|
||||||
int interval;
|
int flag;
|
||||||
int filelog;
|
int filelog;
|
||||||
char *filelog_name;
|
char *filelog_name;
|
||||||
FILE *stream;
|
FILE *stream;
|
||||||
log_write_func_t fwrite;
|
log_vprint_func_t vprint;
|
||||||
|
log_print_func_t print;
|
||||||
/* SR: make the log buffer component relative */
|
/* SR: make the log buffer component relative */
|
||||||
char log_buffer[MAX_LOG_TOTAL];
|
char log_buffer[MAX_LOG_TOTAL];
|
||||||
} log_component_t;
|
} log_component_t;
|
||||||
@@ -217,13 +249,11 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
log_component_t log_component[MAX_LOG_COMPONENTS];
|
log_component_t log_component[MAX_LOG_COMPONENTS];
|
||||||
char* level2string[NUM_LOG_LEVEL];
|
char level2string[NUM_LOG_LEVEL];
|
||||||
int onlinelog;
|
|
||||||
int flag;
|
int flag;
|
||||||
int filelog;
|
|
||||||
char* filelog_name;
|
char* filelog_name;
|
||||||
uint64_t debug_mask;
|
uint64_t debug_mask;
|
||||||
uint64_t matlab_mask;
|
uint64_t dump_mask;
|
||||||
} log_t;
|
} log_t;
|
||||||
|
|
||||||
|
|
||||||
@@ -254,14 +284,15 @@ extern log_t *g_log;
|
|||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
int logInit (void);
|
int logInit (void);
|
||||||
void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
|
void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
|
||||||
|
void log_dump(int component, void *buffer, int buffsize,int datatype, const char* format, ... );
|
||||||
int set_log(int component, int level, int interval);
|
int set_log(int component, int level);
|
||||||
void set_glog(int level);
|
void set_glog(int level);
|
||||||
|
|
||||||
void set_glog_onlinelog(int enable);
|
void set_glog_onlinelog(int enable);
|
||||||
void set_glog_filelog(int enable);
|
void set_glog_filelog(int enable);
|
||||||
void set_component_filelog(int comp);
|
void set_component_filelog(int comp);
|
||||||
|
void close_component_filelog(int comp);
|
||||||
|
void set_component_consolelog(int comp);
|
||||||
int map_str_to_int(mapping *map, const char *str);
|
int map_str_to_int(mapping *map, const char *str);
|
||||||
char *map_int_to_str(mapping *map, int val);
|
char *map_int_to_str(mapping *map, int val);
|
||||||
void logClean (void);
|
void logClean (void);
|
||||||
@@ -293,7 +324,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
#define LOG_CONFIG_LEVEL_FORMAT "%s_log_level"
|
#define LOG_CONFIG_LEVEL_FORMAT "%s_log_level"
|
||||||
#define LOG_CONFIG_LOGFILE_FORMAT "%s_log_infile"
|
#define LOG_CONFIG_LOGFILE_FORMAT "%s_log_infile"
|
||||||
#define LOG_CONFIG_DEBUG_FORMAT "%s_debug"
|
#define LOG_CONFIG_DEBUG_FORMAT "%s_debug"
|
||||||
#define LOG_CONFIG_MATLAB_FORMAT "%s_matlab"
|
#define LOG_CONFIG_DUMP_FORMAT "%s_dump"
|
||||||
|
|
||||||
#define LOG_CONFIG_HELP_OPTIONS " list of comma separated options to enable log module behavior. Available options: \n"\
|
#define LOG_CONFIG_HELP_OPTIONS " list of comma separated options to enable log module behavior. Available options: \n"\
|
||||||
" nocolor: disable color usage in log messages\n"\
|
" nocolor: disable color usage in log messages\n"\
|
||||||
@@ -309,7 +340,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
#define LOG_GLOBALPARAMS_DESC { \
|
#define LOG_GLOBALPARAMS_DESC { \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, "Default log level for all componemts\n", 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, 0}, \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, "Default log level for all componemts\n", 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, 0}, \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(g_log->onlinelog), defintval:1, TYPE_INT, 0}, \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(consolelog), defintval:1, TYPE_INT, 0}, \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST,0} \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST,0} \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -319,23 +350,25 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
* @ingroup _macro
|
* @ingroup _macro
|
||||||
* @brief Macro used to call logIt function with different message levels
|
* @brief Macro used to call logIt function with different message levels
|
||||||
* @{*/
|
* @{*/
|
||||||
|
#define LOG_DUMP_CHAR 0
|
||||||
// debugging macros(g_log->log_component[component].interval?logRecord_mt(__FILE__, __FUNCTION__, __LINE__, component, level, format, ##args):(void)0)
|
#define LOG_DUMP_DOUBLE 1
|
||||||
|
// debugging macros
|
||||||
|
#define LOG_F LOG_I /* because LOG_F was originaly to dump a message or buffer but is also used as a regular level...., to dump use LOG_DUMPMSG */
|
||||||
# if T_TRACER
|
# if T_TRACER
|
||||||
/* per component, level dependant macros */
|
/* per component, level dependant macros */
|
||||||
# define LOG_I(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0)
|
|
||||||
# define LOG_W(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0)
|
|
||||||
# define LOG_E(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} else { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ;}} while (0)
|
# define LOG_E(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} else { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ;}} while (0)
|
||||||
|
# define LOG_W(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0)
|
||||||
|
# define LOG_I(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0)
|
||||||
# define LOG_D(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} else { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ;}} while (0)
|
# define LOG_D(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} else { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ;}} while (0)
|
||||||
# define LOG_T(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} else { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ;}} while (0)
|
# define LOG_T(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} else { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ;}} while (0)
|
||||||
# define LOG_F(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_FILE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_FILE, x) ;}} while (0) /* */
|
/* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */
|
||||||
|
# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */
|
||||||
# define nfapi_log(FILE, FNC, LN, COMP, LVL, F...) do { if (T_stdout) { logRecord_mt(__FILE__, __FUNCTION__, __LINE__,COMP, LVL, F) ;}} while (0) /* */
|
# define nfapi_log(FILE, FNC, LN, COMP, LVL, F...) do { if (T_stdout) { logRecord_mt(__FILE__, __FUNCTION__, __LINE__,COMP, LVL, F) ;}} while (0) /* */
|
||||||
/* bitmask dependant macros, to isolate debugging code */
|
/* bitmask dependant macros, to isolate debugging code */
|
||||||
# define LOG_DEBUG_BEGIN(D) if (g_log->debug_mask & D) {
|
# define LOG_DEBUGFLAG(D) (g_log->debug_mask & D)
|
||||||
# define LOG_DEBUG_END }
|
|
||||||
/* bitmask dependant macros, to generate matlab files */
|
/* bitmask dependant macros, to generate debug file such as matlab file or message dump */
|
||||||
# define LOG_M_BEGIN(D) if (g_log->matlab_mask & D) {
|
# define LOG_DUMPFLAG(D) (g_log->dump_mask & D)
|
||||||
# define LOG_M_END }
|
|
||||||
# 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 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
|
||||||
@@ -345,22 +378,22 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
# define LOG_E(c, x...) /* */
|
# define LOG_E(c, x...) /* */
|
||||||
# define LOG_D(c, x...) /* */
|
# define LOG_D(c, x...) /* */
|
||||||
# define LOG_T(c, x...) /* */
|
# define LOG_T(c, x...) /* */
|
||||||
# define LOG_F(c, x...) /* */
|
|
||||||
|
# define LOG_DUMPMSG(c, b, s, x...) /* */
|
||||||
# define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
|
# define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
|
||||||
# define LOG_DEBUG_BEGIN(D) if (0) {
|
# define LOG_DEBUGFLAG(D) ( 0 )
|
||||||
# define LOG_DEBUG_END }
|
# define LOG_DUMPFLAG(D) ( 0 )
|
||||||
# define LOG_M_BEGIN(D) if (0) {
|
|
||||||
# define LOG_M_END }
|
|
||||||
# define LOG_M(file, vector, data, len, dec, format)
|
# define LOG_M(file, vector, data, len, dec, format)
|
||||||
# define LOG_VAR(A,B)
|
# define LOG_VAR(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 LOG_USEDINLOG_VAR(A,B) __attribute__((unused)) A B
|
#define GCC_NOTUSED __attribute__((unused))
|
||||||
|
#define LOG_USEDINLOG_VAR(A,B) GCC_NOTUSED A B
|
||||||
|
|
||||||
/* unfiltered macros, usefull for simulators or messages at init time, before log is configured */
|
/* unfiltered macros, usefull for simulators or messages at init time, before log is configured */
|
||||||
#define LOG_UM(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)
|
#define LOG_UM(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)
|
||||||
|
|
||||||
#define LOG_UI(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ; } while(0)
|
#define LOG_UI(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ; } while(0)
|
||||||
|
#define LOG_UDUMPMSG(c, b, s, f, x...) do { log_dump(c, b, s, f, x) ;} while (0) /* */
|
||||||
/* @}*/
|
/* @}*/
|
||||||
|
|
||||||
|
|
||||||
@@ -368,9 +401,12 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
|||||||
* @ingroup _macro
|
* @ingroup _macro
|
||||||
* @brief Macro of some useful functions defined by LOG
|
* @brief Macro of some useful functions defined by LOG
|
||||||
* @{*/
|
* @{*/
|
||||||
#define LOG_ENTER(c) do {LOG_T(c, "Entering\n");}while(0) /*!< \brief Macro to log a message with severity DEBUG when entering a function */
|
#define LOG_ENTER(c) do {LOG_T(c, "Entering %s\n",__FUNCTION__);}while(0) /*!< \brief Macro to log a message with severity DEBUG when entering a function */
|
||||||
#define LOG_EXIT(c) do {LOG_T(c,"Exiting\n"); return;}while(0) /*!< \brief Macro to log a message with severity TRACE when exiting a function */
|
#define LOG_END(c) do {LOG_T(c, "End of %s\n",__FUNCTION__);}while(0) /*!< \brief Macro to log a message with severity DEBUG when entering a function */
|
||||||
#define LOG_RETURN(c,x) do {uint32_t __rv;__rv=(unsigned int)(x);LOG_T(c,"Returning %08x\n", __rv);return((typeof(x))__rv);}while(0) /*!< \brief Macro to log a function exit, including integer value, then to return a value to the calling function */
|
#define LOG_EXIT(c) do { LOG_END(c); return;}while(0) /*!< \brief Macro to log a message with severity TRACE when exiting a function */
|
||||||
|
#define LOG_RETURN(c,r) do {LOG_T(c,"Leaving %s (rc = %08lx)\n", __FUNCTION__ , (unsigned long)(r) );return(r);}while(0) /*!< \brief Macro to log a function exit, including integer value, then to return a value to the calling function */
|
||||||
|
|
||||||
|
|
||||||
/* @}*/
|
/* @}*/
|
||||||
|
|
||||||
static __inline__ uint64_t rdtsc(void) {
|
static __inline__ uint64_t rdtsc(void) {
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
/* WARNING: if you edit the enums below, update also string definitions in vcd_signal_dumper.c */
|
/* WARNING: if you edit the enums below, update also string definitions in vcd_signal_dumper.c */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_ENB = 0,
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_ENB=0,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_ENB,
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX1_ENB,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_ENB,
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_ENB,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_ENB,
|
VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX1_ENB,
|
||||||
@@ -91,12 +91,12 @@ typedef enum {
|
|||||||
VCD_SIGNAL_DUMPER_VARIABLES_TX_SEQ_NUM,
|
VCD_SIGNAL_DUMPER_VARIABLES_TX_SEQ_NUM,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_CNT,
|
VCD_SIGNAL_DUMPER_VARIABLES_CNT,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_DUMMY_DUMP,
|
VCD_SIGNAL_DUMPER_VARIABLES_DUMMY_DUMP,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLE_ITTI_SEND_MSG,
|
VCD_SIGNAL_DUMPER_VARIABLES_ITTI_SEND_MSG,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLE_ITTI_POLL_MSG,
|
VCD_SIGNAL_DUMPER_VARIABLES_ITTI_POLL_MSG,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLE_ITTI_RECV_MSG,
|
VCD_SIGNAL_DUMPER_VARIABLES_ITTI_RECV_MSG,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLE_ITTI_ALLOC_MSG,
|
VCD_SIGNAL_DUMPER_VARIABLES_ITTI_ALLOC_MSG,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLE_MP_ALLOC,
|
VCD_SIGNAL_DUMPER_VARIABLES_MP_ALLOC,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLE_MP_FREE,
|
VCD_SIGNAL_DUMPER_VARIABLES_MP_FREE,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX,
|
VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX,
|
VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX,
|
||||||
VCD_SIGNAL_DUMPER_VARIABLES_DCI_INFO,
|
VCD_SIGNAL_DUMPER_VARIABLES_DCI_INFO,
|
||||||
|
|||||||
@@ -15,4 +15,5 @@ tracer/to_vcd
|
|||||||
tracer/extract_input_subframe
|
tracer/extract_input_subframe
|
||||||
tracer/extract_output_subframe
|
tracer/extract_output_subframe
|
||||||
tracer/extract
|
tracer/extract
|
||||||
|
tracer/multi
|
||||||
tracee/tracee
|
tracee/tracee
|
||||||
|
|||||||
+12
-3
@@ -13,11 +13,20 @@ $(GENIDS): $(GENIDS_OBJS)
|
|||||||
$(CC) $(CFLAGS) -c -o $@ $<
|
$(CC) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
T_messages.txt.h: T_messages.txt
|
T_messages.txt.h: T_messages.txt
|
||||||
xxd -i T_messages.txt > T_messages.txt.h
|
xxd -i T_messages.txt T_messages.txt.h
|
||||||
|
|
||||||
T_IDs.h: $(GENIDS) T_messages.txt
|
T_IDs.h: $(GENIDS) T_messages.txt
|
||||||
./$(GENIDS) T_messages.txt T_IDs.h
|
./$(GENIDS) T_messages.txt T_IDs.h
|
||||||
|
|
||||||
|
check_vcd:
|
||||||
|
gcc -Wall -I. -I.. -I../itti -Itracer -o _check_vcd check_vcd.c tracer/database.c tracer/utils.c -lm -pthread
|
||||||
|
./_check_vcd || (rm -f ./_check_vcd ./T_IDs.h ./T_messages.txt.h && false)
|
||||||
|
rm -f ./_check_vcd
|
||||||
|
|
||||||
|
.PHONY: check_vcd
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.o $(GENIDS) core T_IDs.h T_messages.txt.h
|
rm -f *.o $(GENIDS) core T_IDs.h T_messages.txt.h _check_vcd
|
||||||
cd tracer && make clean
|
|
||||||
|
cleanall: clean
|
||||||
|
cd tracer && $(MAKE) clean
|
||||||
|
|||||||
+37
-26
@@ -31,6 +31,12 @@ volatile int _T_freelist_head;
|
|||||||
volatile int *T_freelist_head = &_T_freelist_head;
|
volatile int *T_freelist_head = &_T_freelist_head;
|
||||||
T_cache_t *T_cache;
|
T_cache_t *T_cache;
|
||||||
|
|
||||||
|
#if BASIC_SIMULATOR
|
||||||
|
/* global variables used by T_GET_SLOT, see in T.h */
|
||||||
|
volatile uint64_t T_next_id;
|
||||||
|
volatile uint64_t T_active_id;
|
||||||
|
#endif
|
||||||
|
|
||||||
static void get_message(int s)
|
static void get_message(int s)
|
||||||
{
|
{
|
||||||
char t;
|
char t;
|
||||||
@@ -91,7 +97,7 @@ static void new_thread(void *(*f)(void *), void *data)
|
|||||||
|
|
||||||
/* defined in local_tracer.c */
|
/* defined in local_tracer.c */
|
||||||
void T_local_tracer_main(int remote_port, int wait_for_tracer,
|
void T_local_tracer_main(int remote_port, int wait_for_tracer,
|
||||||
int local_socket, char *shm_file);
|
int local_socket, void *shm_array);
|
||||||
|
|
||||||
/* We monitor the tracee and the local tracer processes.
|
/* We monitor the tracee and the local tracer processes.
|
||||||
* When one dies we forcefully kill the other.
|
* When one dies we forcefully kill the other.
|
||||||
@@ -114,22 +120,31 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork)
|
|||||||
{
|
{
|
||||||
int socket_pair[2];
|
int socket_pair[2];
|
||||||
int s;
|
int s;
|
||||||
int T_shm_fd;
|
|
||||||
int child1, child2;
|
int child1, child2;
|
||||||
char shm_file[128];
|
int i;
|
||||||
|
|
||||||
sprintf(shm_file, "/%s%d", T_SHM_FILENAME, getpid());
|
|
||||||
|
|
||||||
if (socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair))
|
if (socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair))
|
||||||
{ perror("socketpair"); abort(); }
|
{ perror("socketpair"); abort(); }
|
||||||
|
|
||||||
|
/* setup shared memory */
|
||||||
|
T_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t),
|
||||||
|
PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
|
||||||
|
if (T_cache == MAP_FAILED)
|
||||||
|
{ perror("mmap"); abort(); }
|
||||||
|
|
||||||
|
/* let's garbage the memory to catch some potential problems
|
||||||
|
* (think multiprocessor sync issues, barriers, etc.)
|
||||||
|
*/
|
||||||
|
memset(T_cache, 0x55, T_CACHE_SIZE * sizeof(T_cache_t));
|
||||||
|
for (i = 0; i < T_CACHE_SIZE; i++) T_cache[i].busy = 0;
|
||||||
|
|
||||||
/* child1 runs the local tracer and child2 (or main) runs the tracee */
|
/* child1 runs the local tracer and child2 (or main) runs the tracee */
|
||||||
|
|
||||||
child1 = fork(); if (child1 == -1) abort();
|
child1 = fork(); if (child1 == -1) abort();
|
||||||
if (child1 == 0) {
|
if (child1 == 0) {
|
||||||
close(socket_pair[1]);
|
close(socket_pair[1]);
|
||||||
T_local_tracer_main(remote_port, wait_for_tracer, socket_pair[0],
|
T_local_tracer_main(remote_port, wait_for_tracer, socket_pair[0],
|
||||||
shm_file);
|
T_cache);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
close(socket_pair[0]);
|
close(socket_pair[0]);
|
||||||
@@ -138,6 +153,7 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork)
|
|||||||
child2 = fork(); if (child2 == -1) abort();
|
child2 = fork(); if (child2 == -1) abort();
|
||||||
if (child2 != 0) {
|
if (child2 != 0) {
|
||||||
close(socket_pair[1]);
|
close(socket_pair[1]);
|
||||||
|
munmap(T_cache, T_CACHE_SIZE * sizeof(T_cache_t));
|
||||||
monitor_and_kill(child1, child2);
|
monitor_and_kill(child1, child2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -148,34 +164,29 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork)
|
|||||||
|
|
||||||
T_socket = s;
|
T_socket = s;
|
||||||
|
|
||||||
/* setup shared memory */
|
|
||||||
T_shm_fd = shm_open(shm_file, O_RDWR /*| O_SYNC*/, 0666);
|
|
||||||
shm_unlink(shm_file);
|
|
||||||
if (T_shm_fd == -1) { perror(shm_file); abort(); }
|
|
||||||
T_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t),
|
|
||||||
PROT_READ | PROT_WRITE, MAP_SHARED, T_shm_fd, 0);
|
|
||||||
if (T_cache == MAP_FAILED)
|
|
||||||
{ perror(shm_file); abort(); }
|
|
||||||
close(T_shm_fd);
|
|
||||||
|
|
||||||
new_thread(T_receive_thread, NULL);
|
new_thread(T_receive_thread, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void T_Config_Init(void)
|
void T_Config_Init(void)
|
||||||
{
|
{
|
||||||
int T_port; /* by default we wait for the tracer */
|
int T_port; /* by default we wait for the tracer */
|
||||||
int T_nowait; /* default port to listen to to wait for the tracer */
|
int T_nowait; /* default port to listen to to wait for the tracer */
|
||||||
int T_dont_fork; /* default is to fork, see 'T_init' to understand */
|
int T_dont_fork; /* default is to fork, see 'T_init' to understand */
|
||||||
|
|
||||||
paramdef_t ttraceparams[] = CMDLINE_TTRACEPARAMS_DESC ;
|
paramdef_t ttraceparams[] = CMDLINE_TTRACEPARAMS_DESC;
|
||||||
|
|
||||||
/* for a cleaner config file, TTracer params should be defined in a specific section... */
|
/* for a cleaner config file, TTracer params should be defined in a
|
||||||
config_get( ttraceparams,sizeof(ttraceparams)/sizeof(paramdef_t),TTRACER_CONFIG_PREFIX);
|
* specific section...
|
||||||
|
*/
|
||||||
|
config_get(ttraceparams,
|
||||||
|
sizeof(ttraceparams) / sizeof(paramdef_t),
|
||||||
|
TTRACER_CONFIG_PREFIX);
|
||||||
|
|
||||||
/* compatibility: look for TTracer command line options in root section */
|
/* compatibility: look for TTracer command line options in root section */
|
||||||
config_process_cmdline( ttraceparams,sizeof(ttraceparams)/sizeof(paramdef_t),NULL);
|
config_process_cmdline(ttraceparams,
|
||||||
|
sizeof(ttraceparams) / sizeof(paramdef_t),
|
||||||
|
NULL);
|
||||||
|
|
||||||
if (T_stdout == 0) {
|
if (T_stdout == 0)
|
||||||
T_init(T_port, 1-T_nowait, T_dont_fork);
|
T_init(T_port, 1-T_nowait, T_dont_fork);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+36
-11
@@ -112,13 +112,37 @@ extern volatile int *T_freelist_head;
|
|||||||
extern T_cache_t *T_cache;
|
extern T_cache_t *T_cache;
|
||||||
extern int *T_active;
|
extern int *T_active;
|
||||||
/* When running the basic simulator, we may fill the T cache too fast.
|
/* When running the basic simulator, we may fill the T cache too fast.
|
||||||
* Let's not crash if it's full, just wait.
|
* Let's serialize write accesses to the T cache. For that, we use a
|
||||||
|
* 'ticket' mechanism. To acquire a T slot the caller needs to own the
|
||||||
|
* current active ticket. We also wait for the slot to be free if
|
||||||
|
* it is already in use.
|
||||||
*/
|
*/
|
||||||
#if BASIC_SIMULATOR
|
#if BASIC_SIMULATOR
|
||||||
# define T_BASIC_SIMULATOR_WAIT \
|
# define T_GET_SLOT \
|
||||||
while (T_cache[T_LOCAL_slot].busy) usleep(100)
|
do { \
|
||||||
|
extern volatile uint64_t T_next_id; \
|
||||||
|
extern volatile uint64_t T_active_id; \
|
||||||
|
uint64_t id; \
|
||||||
|
/* get a ticket */ \
|
||||||
|
id = __sync_fetch_and_add(&T_next_id, 1); \
|
||||||
|
/* wait for our turn */ \
|
||||||
|
while (id != __sync_fetch_and_add(&T_active_id, 0)) /* busy wait */; \
|
||||||
|
/* this is our turn, try to acquire the slot until it's free */ \
|
||||||
|
do { \
|
||||||
|
T_LOCAL_busy = __sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x01); \
|
||||||
|
if (T_LOCAL_busy & 0x01) usleep(100); \
|
||||||
|
} while (T_LOCAL_busy & 0x01); \
|
||||||
|
/* check that there are still some tickets */ \
|
||||||
|
if (__sync_fetch_and_add(&T_active_id, 0) == 0xffffffffffffffff) { \
|
||||||
|
printf("T: reached the end of times, bye...\n"); \
|
||||||
|
abort(); \
|
||||||
|
} \
|
||||||
|
/* free our ticket, which signals the next waiter that it's its turn */ \
|
||||||
|
(void)__sync_fetch_and_add(&T_active_id, 1); \
|
||||||
|
} while (0)
|
||||||
#else
|
#else
|
||||||
# define T_BASIC_SIMULATOR_WAIT /* */
|
# define T_GET_SLOT \
|
||||||
|
T_LOCAL_busy = __sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x01);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* used at header of Tn, allocates buffer */
|
/* used at header of Tn, allocates buffer */
|
||||||
@@ -126,11 +150,12 @@ extern int *T_active;
|
|||||||
char *T_LOCAL_buf; \
|
char *T_LOCAL_buf; \
|
||||||
int T_LOCAL_size = 0; \
|
int T_LOCAL_size = 0; \
|
||||||
int T_LOCAL_slot; \
|
int T_LOCAL_slot; \
|
||||||
|
int T_LOCAL_busy; \
|
||||||
T_LOCAL_slot = __sync_fetch_and_add(T_freelist_head, 1) \
|
T_LOCAL_slot = __sync_fetch_and_add(T_freelist_head, 1) \
|
||||||
& (T_CACHE_SIZE - 1); \
|
& (T_CACHE_SIZE - 1); \
|
||||||
(void)__sync_fetch_and_and(T_freelist_head, T_CACHE_SIZE - 1); \
|
(void)__sync_fetch_and_and(T_freelist_head, T_CACHE_SIZE - 1); \
|
||||||
T_BASIC_SIMULATOR_WAIT; \
|
T_GET_SLOT; \
|
||||||
if (T_cache[T_LOCAL_slot].busy) { \
|
if (T_LOCAL_busy & 0x01) { \
|
||||||
printf("%s:%d:%s: T cache is full - consider increasing its size\n", \
|
printf("%s:%d:%s: T cache is full - consider increasing its size\n", \
|
||||||
__FILE__, __LINE__, __FUNCTION__); \
|
__FILE__, __LINE__, __FUNCTION__); \
|
||||||
abort(); \
|
abort(); \
|
||||||
@@ -142,7 +167,7 @@ extern int *T_active;
|
|||||||
#define T_COMMIT() \
|
#define T_COMMIT() \
|
||||||
T_cache[T_LOCAL_slot].length = T_LOCAL_size; \
|
T_cache[T_LOCAL_slot].length = T_LOCAL_size; \
|
||||||
__sync_synchronize(); \
|
__sync_synchronize(); \
|
||||||
T_cache[T_LOCAL_slot].busy = 1; \
|
(void)__sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x02);
|
||||||
|
|
||||||
#define T_CHECK_SIZE(len, argnum) \
|
#define T_CHECK_SIZE(len, argnum) \
|
||||||
if (T_LOCAL_size + (len) > T_BUFFER_MAX) { \
|
if (T_LOCAL_size + (len) > T_BUFFER_MAX) { \
|
||||||
@@ -578,10 +603,10 @@ extern int *T_active;
|
|||||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||||
/*------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
#define CMDLINE_TTRACEPARAMS_DESC { \
|
#define CMDLINE_TTRACEPARAMS_DESC { \
|
||||||
{"T_port", CONFIG_HLP_TPORT, 0, iptr:&T_port, defintval:2021, TYPE_INT, 0}, \
|
{"T_port", CONFIG_HLP_TPORT, 0, iptr:&T_port, defintval:2021, TYPE_INT, 0}, \
|
||||||
{"T_nowait", CONFIG_HLP_NOTWAIT, PARAMFLAG_BOOL, iptr:&T_nowait, defintval:0, TYPE_INT, 0}, \
|
{"T_nowait", CONFIG_HLP_NOTWAIT, PARAMFLAG_BOOL, iptr:&T_nowait, defintval:0, TYPE_INT, 0}, \
|
||||||
{"T_dont_fork", CONFIG_HLP_TNOFORK, PARAMFLAG_BOOL, iptr:&T_dont_fork, defintval:0, TYPE_INT, 0}, \
|
{"T_dont_fork", CONFIG_HLP_TNOFORK, PARAMFLAG_BOOL, iptr:&T_dont_fork, defintval:0, TYPE_INT, 0}, \
|
||||||
{"T_stdout", CONFIG_HLP_STDOUT, PARAMFLAG_BOOL, iptr:&T_stdout, defintval:1, TYPE_INT, 0}, \
|
{"T_stdout", CONFIG_HLP_STDOUT, PARAMFLAG_BOOL, iptr:&T_stdout, defintval:1, TYPE_INT, 0}, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -31,13 +31,15 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
/* 'busy' is a bit field
|
||||||
|
* bit 0: 1 means that slot is acquired by writer
|
||||||
|
* bit 1: 1 means that slot is ready for consumption
|
||||||
|
*/
|
||||||
volatile int busy;
|
volatile int busy;
|
||||||
char buffer[T_BUFFER_MAX];
|
char buffer[T_BUFFER_MAX];
|
||||||
int length;
|
int length;
|
||||||
} T_cache_t;
|
} T_cache_t;
|
||||||
|
|
||||||
#define T_SHM_FILENAME "/T_shm_segment"
|
|
||||||
|
|
||||||
/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
|
/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
|
||||||
#define VCD_NUM_FUNCTIONS 190
|
#define VCD_NUM_FUNCTIONS 190
|
||||||
|
|
||||||
|
|||||||
+345
-24
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,249 @@
|
|||||||
|
/*
|
||||||
|
* To disable the checks done by this program, see below at the beginning
|
||||||
|
* of the function 'main'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include "database.h"
|
||||||
|
|
||||||
|
#define T_TRACER 1
|
||||||
|
#include "T.h"
|
||||||
|
|
||||||
|
/* VCD specific defines and includes
|
||||||
|
* If the codebase changes, it may need to be updated
|
||||||
|
*/
|
||||||
|
#define ENB_MODE
|
||||||
|
#define ENABLE_USE_CPU_EXECUTION_TIME
|
||||||
|
#include "../LOG/vcd_signal_dumper.c"
|
||||||
|
|
||||||
|
void err(char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
|
||||||
|
void err(char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, fmt);
|
||||||
|
|
||||||
|
printf("\x1b[31m");
|
||||||
|
printf("error: ");
|
||||||
|
vprintf(fmt, ap);
|
||||||
|
printf("\n"
|
||||||
|
"\x1b[33m\n"
|
||||||
|
"You probably added a VCD trace (variable or function) but you did not\n"
|
||||||
|
"update T_messages.txt and/or T_defs.h in common/utils/T/\n"
|
||||||
|
"\n"
|
||||||
|
"Be sure to add the new trace to T_messages.txt, at the right place in the\n"
|
||||||
|
"file. Do not forget to define VCD_NAME with an identical value as found\n"
|
||||||
|
"in the array eurecomVariablesNames or eurecomFunctionsNames.\n"
|
||||||
|
"\n"
|
||||||
|
"Be sure to update VCD_NUM_FUNCTIONS, VCD_NUM_VARIABLES, VCD_FIRST_FUNCTION\n"
|
||||||
|
"and VCD_FIRST_VARIABLE in T_defs.h\n"
|
||||||
|
"\n"
|
||||||
|
"The same procedure has to be followed when you delete a VCD trace.\n"
|
||||||
|
"Delete it in T_messages.txt as well and update T_defs.h\n"
|
||||||
|
"\n"
|
||||||
|
"You can disable those VCD checks at development time.\n"
|
||||||
|
"To disable the VCD checks see the file common/utils/T/check_vcd.c\n"
|
||||||
|
"Do not push any modification that disables the VCD checks to the\n"
|
||||||
|
"main repository.\n");
|
||||||
|
|
||||||
|
printf("\x1b[m\n");
|
||||||
|
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
/* to disable the checks done by this program, uncomment the following
|
||||||
|
* line, ie. remove the leading '//'
|
||||||
|
*/
|
||||||
|
//return 0;
|
||||||
|
|
||||||
|
void *database = parse_database("T_messages.txt");
|
||||||
|
int number_of_events;
|
||||||
|
int first_var = -1;
|
||||||
|
int last_var;
|
||||||
|
int first_fun = -1;
|
||||||
|
int last_fun;
|
||||||
|
char *prefix;
|
||||||
|
int prefix_len;
|
||||||
|
char *name;
|
||||||
|
char *vcd_name;
|
||||||
|
int i;
|
||||||
|
FILE *in;
|
||||||
|
char *l = NULL;
|
||||||
|
size_t lsize;
|
||||||
|
|
||||||
|
if (database == NULL) err("something wrong with T_messages.txt");
|
||||||
|
|
||||||
|
/* check the value of VCD_NUM_FUNCTIONS */
|
||||||
|
if (VCD_NUM_FUNCTIONS != sizeof(eurecomFunctionsNames) / sizeof(char *))
|
||||||
|
err("VCD_NUM_FUNCTIONS (%d) must be equal to %zd",
|
||||||
|
VCD_NUM_FUNCTIONS,
|
||||||
|
sizeof(eurecomFunctionsNames) / sizeof(char *));
|
||||||
|
|
||||||
|
/* check the value of VCD_NUM_VARIABLES */
|
||||||
|
if (VCD_NUM_VARIABLES != sizeof(eurecomVariablesNames) / sizeof(char *))
|
||||||
|
err("VCD_NUM_VARIABLES (%d) must be equal to %zd",
|
||||||
|
VCD_NUM_VARIABLES,
|
||||||
|
sizeof(eurecomVariablesNames) / sizeof(char *));
|
||||||
|
|
||||||
|
number_of_events = number_of_ids(database);
|
||||||
|
if (number_of_events == 0) err("no event defined in T_messages.txt");
|
||||||
|
|
||||||
|
/* T_messages.txt ends with VCD VARIABLES followed by VCD FUNCTIONS
|
||||||
|
* followed by nothing.
|
||||||
|
* Let's check.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* check VCD VARIABLES traces in T_messages.txt */
|
||||||
|
prefix = "VCD_VARIABLE_";
|
||||||
|
prefix_len = strlen(prefix);
|
||||||
|
|
||||||
|
for (i = 0; i < number_of_events; i++) {
|
||||||
|
name = event_name_from_id(database, i);
|
||||||
|
if (strncmp(name, prefix, prefix_len)) continue;
|
||||||
|
first_var = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (first_var == -1)
|
||||||
|
err("no VCD_VARIABLE_ found in T_messages.txt");
|
||||||
|
for (; i < number_of_events; i++) {
|
||||||
|
name = event_name_from_id(database, i);
|
||||||
|
if (strncmp(name, prefix, prefix_len)) break;
|
||||||
|
}
|
||||||
|
last_var = i-1;
|
||||||
|
|
||||||
|
/* check VCD FUNCTIONS traces in T_messages.txt */
|
||||||
|
if (i == number_of_events)
|
||||||
|
err("no VCD_FUNCTION_ found in T_messages.txt");
|
||||||
|
|
||||||
|
prefix = "VCD_FUNCTION_";
|
||||||
|
prefix_len = strlen(prefix);
|
||||||
|
|
||||||
|
first_fun = i;
|
||||||
|
|
||||||
|
name = event_name_from_id(database, i);
|
||||||
|
if (strncmp(name, prefix, prefix_len))
|
||||||
|
err("last VCD_VARIABLE_ not followed by a VCD_FUNCTION_ in T_messages.txt");
|
||||||
|
|
||||||
|
for (; i < number_of_events; i++) {
|
||||||
|
name = event_name_from_id(database, i);
|
||||||
|
if (strncmp(name, prefix, prefix_len)) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i != number_of_events)
|
||||||
|
err("T_messages.txt does not end with a VCD_FUNCTION_ trace");
|
||||||
|
|
||||||
|
last_fun = i-1;
|
||||||
|
|
||||||
|
if (first_var != (unsigned)VCD_FIRST_VARIABLE)
|
||||||
|
err("VCD_FIRST_VARIABLE is not correct in T_defs.h");
|
||||||
|
if (first_fun != (unsigned)VCD_FIRST_FUNCTION)
|
||||||
|
err("VCD_FIRST_FUNCTION is not correct in T_defs.h");
|
||||||
|
if (last_var-first_var+1 != VCD_NUM_VARIABLES)
|
||||||
|
err("VCD_NUM_VARIABLES is not correct in T_defs.h");
|
||||||
|
if (last_fun-first_fun+1 != VCD_NUM_FUNCTIONS)
|
||||||
|
err("VCD_NUM_FUNCTIONS is not correct in T_defs.h");
|
||||||
|
|
||||||
|
/* check that VCD_NAME is identical to
|
||||||
|
* eurecomVariablesNames[x]/eurecomFunctionsNames[x]
|
||||||
|
*/
|
||||||
|
prefix = "VCD_VARIABLE_";
|
||||||
|
prefix_len = strlen(prefix);
|
||||||
|
|
||||||
|
for (i = 0; i < number_of_events; i++) {
|
||||||
|
name = event_name_from_id(database, i);
|
||||||
|
if (strncmp(name, prefix, prefix_len)) continue;
|
||||||
|
vcd_name = event_vcd_name_from_id(database, i);
|
||||||
|
if (vcd_name == NULL)
|
||||||
|
err("%s has no VCD_NAME in T_messages.txt", name);
|
||||||
|
if (strcmp(vcd_name, eurecomVariablesNames[i - first_var]))
|
||||||
|
err("%s has a wrong VCD_NAME in T_messages.txt", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
prefix = "VCD_FUNCTION_";
|
||||||
|
prefix_len = strlen(prefix);
|
||||||
|
|
||||||
|
for (i = 0; i < number_of_events; i++) {
|
||||||
|
name = event_name_from_id(database, i);
|
||||||
|
if (strncmp(name, prefix, prefix_len)) continue;
|
||||||
|
vcd_name = event_vcd_name_from_id(database, i);
|
||||||
|
if (vcd_name == NULL)
|
||||||
|
err("%s has no VCD_NAME in T_messages.txt", name);
|
||||||
|
if (strcmp(vcd_name, eurecomFunctionsNames[i - first_fun]))
|
||||||
|
err("%s has a wrong VCD_NAME in T_messages.txt", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* check IDs - these checks are difficult because we parse
|
||||||
|
* common/utils/LOG/vcd_signal_dumper.h which is expected to
|
||||||
|
* be formatted as is:
|
||||||
|
* - define vcd_signal_dump_variables then vcd_signal_dump_functions
|
||||||
|
* - one VCD_XXXX per line starting with two spaces
|
||||||
|
* followed by ',' or '=' with no space in between
|
||||||
|
* - no #ifdef / #if is taken into account
|
||||||
|
* - we require VCD_SIGNAL_DUMPER_VARIABLES_END and
|
||||||
|
* VCD_SIGNAL_DUMPER_FUNCTIONS_END at the end of each array,
|
||||||
|
* each on a line of its own with two spaces before and nothing after.
|
||||||
|
*
|
||||||
|
* If these checks fail, consider formatting
|
||||||
|
* common/utils/LOG/vcd_signal_dumper.h as expected here, if
|
||||||
|
* it makes sense of course. Otherwise, change the code below.
|
||||||
|
*
|
||||||
|
* In common/utils/LOG/vcd_signal_dumper.h a valid name is
|
||||||
|
* either VCD_SIGNAL_DUMPER_VARIABLES_ABC or
|
||||||
|
* VCD_SIGNAL_DUMPER_FUNCTIONS_XYZ
|
||||||
|
* and in T_messages.txt the corresponding name has to be
|
||||||
|
* VCD_VARIABLE_ABC or VCD_FUNCTION_XYZ
|
||||||
|
*/
|
||||||
|
i = first_var;
|
||||||
|
in = fopen("../LOG/vcd_signal_dumper.h", "r");
|
||||||
|
if (in == NULL) err("could not open ../LOG/vcd_signal_dumper.h");
|
||||||
|
while (1) {
|
||||||
|
char *x = " VCD_SIGNAL_DUMPER_VARIABLES_";
|
||||||
|
ssize_t r;
|
||||||
|
free(l);
|
||||||
|
l = NULL;
|
||||||
|
lsize = 0;
|
||||||
|
r = getline(&l, &lsize, in);
|
||||||
|
if (r == -1) break;
|
||||||
|
if (!strcmp(l, " VCD_SIGNAL_DUMPER_VARIABLES_END\n")) break;
|
||||||
|
/* remove ',' or '=' if found */
|
||||||
|
{ char *s=l; while (*s) { if (*s==','||*s=='=') { *s=0; break; } s++; } }
|
||||||
|
if (strncmp(l, x, strlen(x))) continue;
|
||||||
|
if (!(i >= first_var && i <= last_var))
|
||||||
|
err("T_messages.txt is not correct with respect to VCD VARIABLES");
|
||||||
|
name = event_name_from_id(database, i);
|
||||||
|
if (strcmp(l+strlen(x), name+strlen("VCD_VARIABLE_")))
|
||||||
|
err("%s is not correct in T_messages.txt", name);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (i != last_var + 1) err("VCD VARIABLES wrong in T_messages.txt");
|
||||||
|
while (1) {
|
||||||
|
char *x = " VCD_SIGNAL_DUMPER_FUNCTIONS_";
|
||||||
|
ssize_t r;
|
||||||
|
free(l);
|
||||||
|
l = NULL;
|
||||||
|
lsize = 0;
|
||||||
|
r = getline(&l, &lsize, in);
|
||||||
|
if (r == -1) break;
|
||||||
|
if (!strcmp(l, " VCD_SIGNAL_DUMPER_FUNCTIONS_END\n")) break;
|
||||||
|
/* remove ',' or '=' if found */
|
||||||
|
{ char *s=l; while (*s) { if (*s==','||*s=='=') { *s=0; break; } s++; } }
|
||||||
|
if (strncmp(l, x, strlen(x))) continue;
|
||||||
|
if (!(i >= first_fun && i <= last_fun))
|
||||||
|
err("T_messages.txt is not correct with respect to VCD FUNCTIONS");
|
||||||
|
name = event_name_from_id(database, i);
|
||||||
|
if (strcmp(l+strlen(x), name+strlen("VCD_FUNCTION_")))
|
||||||
|
err("%s is not correct in T_messages.txt", name);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
fclose(in);
|
||||||
|
if (i != last_fun + 1) err("VCD FUNCTIONS wrong in T_messages.txt");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
+11
-10
@@ -14,21 +14,21 @@ int cmp(const void *p1, const void *p2)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* return 1 if s was not already known, 0 if it was */
|
/* return 1 if s was not already known, 0 if it was */
|
||||||
int new_unique_id(char *s)
|
int new_unique_id(char *s, char *input_file)
|
||||||
{
|
{
|
||||||
if (unique_ids_size)
|
if (unique_ids_size)
|
||||||
if (bsearch(&s, unique_ids, unique_ids_size, sizeof(char *), cmp) != NULL) {
|
if (bsearch(&s, unique_ids, unique_ids_size, sizeof(char *), cmp) != NULL) {
|
||||||
printf("FATAL: ID %s is not unique\n", s);
|
printf("error: ID %s is not unique in %s\n", s, input_file);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (unique_ids_size == unique_ids_maxsize) {
|
if (unique_ids_size == unique_ids_maxsize) {
|
||||||
unique_ids_maxsize += 256;
|
unique_ids_maxsize += 256;
|
||||||
unique_ids = realloc(unique_ids, unique_ids_maxsize * sizeof(char *));
|
unique_ids = realloc(unique_ids, unique_ids_maxsize * sizeof(char *));
|
||||||
if (unique_ids == NULL) { printf("out of memory\n"); abort(); }
|
if (unique_ids == NULL) { printf("erorr: out of memory\n"); abort(); }
|
||||||
}
|
}
|
||||||
unique_ids[unique_ids_size] = strdup(s);
|
unique_ids[unique_ids_size] = strdup(s);
|
||||||
if (unique_ids[unique_ids_size] == NULL)
|
if (unique_ids[unique_ids_size] == NULL)
|
||||||
{ printf("out of memory\n"); abort(); }
|
{ printf("erorr: out of memory\n"); abort(); }
|
||||||
unique_ids_size++;
|
unique_ids_size++;
|
||||||
qsort(unique_ids, unique_ids_size, sizeof(char *), cmp);
|
qsort(unique_ids, unique_ids_size, sizeof(char *), cmp);
|
||||||
return 1;
|
return 1;
|
||||||
@@ -43,7 +43,8 @@ void putname(int c)
|
|||||||
if (bufname_size == bufname_maxsize) {
|
if (bufname_size == bufname_maxsize) {
|
||||||
bufname_maxsize += 256;
|
bufname_maxsize += 256;
|
||||||
bufname = realloc(bufname, bufname_maxsize);
|
bufname = realloc(bufname, bufname_maxsize);
|
||||||
if (bufname == NULL) { printf("memory allocation error\n"); exit(1); }
|
if (bufname == NULL)
|
||||||
|
{ printf("erorr: memory allocation error\n"); exit(1); }
|
||||||
}
|
}
|
||||||
bufname[bufname_size] = c;
|
bufname[bufname_size] = c;
|
||||||
bufname_size++;
|
bufname_size++;
|
||||||
@@ -58,7 +59,8 @@ void putvalue(int c)
|
|||||||
if (bufvalue_size == bufvalue_maxsize) {
|
if (bufvalue_size == bufvalue_maxsize) {
|
||||||
bufvalue_maxsize += 256;
|
bufvalue_maxsize += 256;
|
||||||
bufvalue = realloc(bufvalue, bufvalue_maxsize);
|
bufvalue = realloc(bufvalue, bufvalue_maxsize);
|
||||||
if (bufvalue == NULL) { printf("memory allocation error\n"); exit(1); }
|
if (bufvalue == NULL)
|
||||||
|
{ printf("error: memory allocation error\n"); exit(1); }
|
||||||
}
|
}
|
||||||
bufvalue[bufvalue_size] = c;
|
bufvalue[bufvalue_size] = c;
|
||||||
bufvalue_size++;
|
bufvalue_size++;
|
||||||
@@ -119,7 +121,7 @@ int main(int n, char **v)
|
|||||||
char *in_name;
|
char *in_name;
|
||||||
char *out_name;
|
char *out_name;
|
||||||
|
|
||||||
if (n != 3) { printf("gimme <source> <dest>\n"); exit(1); }
|
if (n != 3) { printf("error: gimme <source> <dest>\n"); exit(1); }
|
||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
|
|
||||||
@@ -134,14 +136,13 @@ int main(int n, char **v)
|
|||||||
while (1) {
|
while (1) {
|
||||||
get_line(in, &name, &value);
|
get_line(in, &name, &value);
|
||||||
if (name == NULL) break;
|
if (name == NULL) break;
|
||||||
printf("name '%s' value '%s'\n", name, value);
|
|
||||||
if (isspace(value[strlen(value)-1])) {
|
if (isspace(value[strlen(value)-1])) {
|
||||||
printf("bad value '%s' (no space at the end please!)\n", value);
|
printf("error: bad value '%s' (no space at the end please!)\n", value);
|
||||||
unlink(out_name);
|
unlink(out_name);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
if (!strcmp(name, "ID")) {
|
if (!strcmp(name, "ID")) {
|
||||||
if (!new_unique_id(value)) { unlink(out_name); exit(1); }
|
if (!new_unique_id(value, in_name)) { unlink(out_name); exit(1); }
|
||||||
fprintf(out, "#define T_%s T_ID(%d)\n", value, n);
|
fprintf(out, "#define T_%s T_ID(%d)\n", value, n);
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -337,54 +337,34 @@ static void forward(void *_forwarder, char *buf, int size)
|
|||||||
|
|
||||||
static void wait_message(void)
|
static void wait_message(void)
|
||||||
{
|
{
|
||||||
while (T_local_cache[T_busylist_head].busy == 0) usleep(1000);
|
while ((T_local_cache[T_busylist_head].busy & 0x02) == 0) usleep(1000);
|
||||||
}
|
|
||||||
|
|
||||||
static void init_shm(char *shm_file)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int s = shm_open(shm_file, O_RDWR | O_CREAT /*| O_SYNC*/, 0666);
|
|
||||||
if (s == -1) { perror(shm_file); abort(); }
|
|
||||||
if (ftruncate(s, T_CACHE_SIZE * sizeof(T_cache_t)))
|
|
||||||
{ perror(shm_file); abort(); }
|
|
||||||
T_local_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t),
|
|
||||||
PROT_READ | PROT_WRITE, MAP_SHARED, s, 0);
|
|
||||||
if (T_local_cache == MAP_FAILED)
|
|
||||||
{ perror(shm_file); abort(); }
|
|
||||||
close(s);
|
|
||||||
|
|
||||||
/* let's garbage the memory to catch some potential problems
|
|
||||||
* (think multiprocessor sync issues, barriers, etc.)
|
|
||||||
*/
|
|
||||||
memset(T_local_cache, 0x55, T_CACHE_SIZE * sizeof(T_cache_t));
|
|
||||||
for (i = 0; i < T_CACHE_SIZE; i++) T_local_cache[i].busy = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void T_local_tracer_main(int remote_port, int wait_for_tracer,
|
void T_local_tracer_main(int remote_port, int wait_for_tracer,
|
||||||
int local_socket, char *shm_file)
|
int local_socket, void *shm_array)
|
||||||
{
|
{
|
||||||
int s;
|
int s;
|
||||||
int port = remote_port;
|
int port = remote_port;
|
||||||
int dont_wait = wait_for_tracer ? 0 : 1;
|
int dont_wait = wait_for_tracer ? 0 : 1;
|
||||||
void *f;
|
void *f;
|
||||||
printf("local tracer starting\n");
|
|
||||||
/* write on a socket fails if the other end is closed and we get SIGPIPE */
|
/* write on a socket fails if the other end is closed and we get SIGPIPE */
|
||||||
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR){
|
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
|
||||||
printf("local tracer received SIGPIPE\n");
|
printf("local tracer received SIGPIPE\n");
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
T_local_cache = shm_array;
|
||||||
|
|
||||||
init_shm(shm_file);
|
|
||||||
s = local_socket;
|
s = local_socket;
|
||||||
printf("local tracer starting step 2\n");
|
|
||||||
if (dont_wait) {
|
if (dont_wait) {
|
||||||
char t = 2;
|
char t = 2;
|
||||||
printf("local tracer in no wait mode \n");
|
|
||||||
if (write(s, &t, 1) != 1) abort();
|
if (write(s, &t, 1) != 1) abort();
|
||||||
}
|
}
|
||||||
printf("local tracer starting step 3\n");
|
|
||||||
f = forwarder(port, s);
|
f = forwarder(port, s);
|
||||||
printf("local tracer main loop.... \n");
|
|
||||||
/* read messages */
|
/* read messages */
|
||||||
while (1) {
|
while (1) {
|
||||||
wait_message();
|
wait_message();
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ LIBS=-lm
|
|||||||
XLIBS=-lX11 -lpng -lXft
|
XLIBS=-lX11 -lpng -lXft
|
||||||
|
|
||||||
all: record replay extract_config textlog enb ue vcd macpdu2wireshark \
|
all: record replay extract_config textlog enb ue vcd macpdu2wireshark \
|
||||||
extract_input_subframe extract_output_subframe to_vcd extract
|
extract_input_subframe extract_output_subframe to_vcd extract multi
|
||||||
|
|
||||||
record: utils.o record.o database.o config.o
|
record: utils.o record.o database.o config.o
|
||||||
$(CC) $(CFLAGS) -o record $^ $(LIBS)
|
$(CC) $(CFLAGS) -o record $^ $(LIBS)
|
||||||
@@ -57,19 +57,22 @@ macpdu2wireshark: macpdu2wireshark.o database.o utils.o handler.o event.o \
|
|||||||
config.o
|
config.o
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
|
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
|
||||||
|
|
||||||
|
multi: multi.o utils.o database.o config.o
|
||||||
|
$(CC) $(CFLAGS) -o multi $^ $(LIBS)
|
||||||
|
|
||||||
.PHONY: all gui/gui.a view/view.a logger/logger.a filter/filter.a
|
.PHONY: all gui/gui.a view/view.a logger/logger.a filter/filter.a
|
||||||
|
|
||||||
gui/gui.a:
|
gui/gui.a:
|
||||||
cd gui && make
|
cd gui && $(MAKE)
|
||||||
|
|
||||||
view/view.a:
|
view/view.a:
|
||||||
cd view && make
|
cd view && $(MAKE)
|
||||||
|
|
||||||
logger/logger.a:
|
logger/logger.a:
|
||||||
cd logger && make
|
cd logger && $(MAKE)
|
||||||
|
|
||||||
filter/filter.a:
|
filter/filter.a:
|
||||||
cd filter && make
|
cd filter && $(MAKE)
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
$(CC) $(CFLAGS) -c -o $@ $<
|
$(CC) $(CFLAGS) -c -o $@ $<
|
||||||
@@ -77,9 +80,9 @@ filter/filter.a:
|
|||||||
clean:
|
clean:
|
||||||
rm -f *.o core tracer_remote textlog enb ue vcd record replay
|
rm -f *.o core tracer_remote textlog enb ue vcd record replay
|
||||||
rm -f extract_config macpdu2wireshark extract_input_subframe
|
rm -f extract_config macpdu2wireshark extract_input_subframe
|
||||||
rm -f extract_output_subframe to_vcd extract
|
rm -f extract_output_subframe to_vcd extract multi
|
||||||
cd gui && make clean
|
cd gui && $(MAKE) clean
|
||||||
cd view && make clean
|
cd view && $(MAKE) clean
|
||||||
cd logger && make clean
|
cd logger && $(MAKE) clean
|
||||||
cd filter && make clean
|
cd filter && $(MAKE) clean
|
||||||
cd hacks && make clean
|
cd hacks && $(MAKE) clean
|
||||||
|
|||||||
@@ -60,3 +60,9 @@ void verify_config(void)
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_local_config(char **txt, int *len)
|
||||||
|
{
|
||||||
|
*txt = local;
|
||||||
|
*len = local_size;
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,5 +5,6 @@ void clear_remote_config(void);
|
|||||||
void append_received_config_chunk(char *buf, int length);
|
void append_received_config_chunk(char *buf, int length);
|
||||||
void load_config_file(char *filename);
|
void load_config_file(char *filename);
|
||||||
void verify_config(void);
|
void verify_config(void);
|
||||||
|
void get_local_config(char **txt, int *len);
|
||||||
|
|
||||||
#endif /* _CONFIG_H_ */
|
#endif /* _CONFIG_H_ */
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ typedef struct {
|
|||||||
char **arg_type;
|
char **arg_type;
|
||||||
char **arg_name;
|
char **arg_name;
|
||||||
int asize;
|
int asize;
|
||||||
|
char *vcd_name;
|
||||||
int id;
|
int id;
|
||||||
} id;
|
} id;
|
||||||
|
|
||||||
@@ -138,6 +139,7 @@ id *add_id(database *r, char *idname, int i)
|
|||||||
r->i[r->isize].arg_type = NULL;
|
r->i[r->isize].arg_type = NULL;
|
||||||
r->i[r->isize].arg_name = NULL;
|
r->i[r->isize].arg_name = NULL;
|
||||||
r->i[r->isize].asize = 0;
|
r->i[r->isize].asize = 0;
|
||||||
|
r->i[r->isize].vcd_name = NULL;
|
||||||
r->i[r->isize].id = i;
|
r->i[r->isize].id = i;
|
||||||
r->isize++;
|
r->isize++;
|
||||||
qsort(r->i, r->isize, sizeof(id), id_cmp);
|
qsort(r->i, r->isize, sizeof(id), id_cmp);
|
||||||
@@ -224,6 +226,12 @@ void add_desc(id *i, char *desc)
|
|||||||
i->desc = strdup(desc); if (i->desc == NULL) abort();
|
i->desc = strdup(desc); if (i->desc == NULL) abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void add_vcd_name(id *i, char *vcd_name)
|
||||||
|
{
|
||||||
|
if (i == NULL) {printf("ERROR: VCD_NAME line before ID line\n");exit(1);}
|
||||||
|
i->vcd_name = strdup(vcd_name); if (i->vcd_name == NULL) abort();
|
||||||
|
}
|
||||||
|
|
||||||
char *format_get_next_token(char **cur)
|
char *format_get_next_token(char **cur)
|
||||||
{
|
{
|
||||||
char *start;
|
char *start;
|
||||||
@@ -320,6 +328,7 @@ void *parse_database(char *filename)
|
|||||||
if (!strcmp(name, "GROUP")) add_groups(r, last_id, value);
|
if (!strcmp(name, "GROUP")) add_groups(r, last_id, value);
|
||||||
if (!strcmp(name, "DESC")) add_desc(last_id, value);
|
if (!strcmp(name, "DESC")) add_desc(last_id, value);
|
||||||
if (!strcmp(name, "FORMAT")) add_format(last_id, value);
|
if (!strcmp(name, "FORMAT")) add_format(last_id, value);
|
||||||
|
if (!strcmp(name, "VCD_NAME")) add_vcd_name(last_id, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(in);
|
fclose(in);
|
||||||
@@ -424,6 +433,12 @@ char *event_name_from_id(void *_database, int id)
|
|||||||
return d->i[d->id_to_pos[id]].name;
|
return d->i[d->id_to_pos[id]].name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *event_vcd_name_from_id(void *_database, int id)
|
||||||
|
{
|
||||||
|
database *d = _database;
|
||||||
|
return d->i[d->id_to_pos[id]].vcd_name;
|
||||||
|
}
|
||||||
|
|
||||||
int event_id_from_name(void *_database, char *name)
|
int event_id_from_name(void *_database, char *name)
|
||||||
{
|
{
|
||||||
database *d = _database;
|
database *d = _database;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ void list_ids(void *database);
|
|||||||
void list_groups(void *database);
|
void list_groups(void *database);
|
||||||
void on_off(void *d, char *item, int *a, int onoff);
|
void on_off(void *d, char *item, int *a, int onoff);
|
||||||
char *event_name_from_id(void *database, int id);
|
char *event_name_from_id(void *database, int id);
|
||||||
|
char *event_vcd_name_from_id(void *_database, int id);
|
||||||
int event_id_from_name(void *database, char *name);
|
int event_id_from_name(void *database, char *name);
|
||||||
int number_of_ids(void *database);
|
int number_of_ids(void *database);
|
||||||
int database_get_ids(void *database, char ***ids);
|
int database_get_ids(void *database, char ***ids);
|
||||||
|
|||||||
@@ -878,6 +878,7 @@ int main(int n, char **v)
|
|||||||
|
|
||||||
restart:
|
restart:
|
||||||
clear_remote_config();
|
clear_remote_config();
|
||||||
|
if (enb_data.socket != -1) close(enb_data.socket);
|
||||||
enb_data.socket = connect_to(ip, port);
|
enb_data.socket = connect_to(ip, port);
|
||||||
|
|
||||||
/* send the first message - activate selected traces */
|
/* send the first message - activate selected traces */
|
||||||
|
|||||||
@@ -150,7 +150,17 @@ x_image *x_create_image(x_connection *_x, unsigned char *data,
|
|||||||
vs = XGetVisualInfo(x->d, VisualDepthMask | VisualClassMask |
|
vs = XGetVisualInfo(x->d, VisualDepthMask | VisualClassMask |
|
||||||
VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask |
|
VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask |
|
||||||
VisualBitsPerRGBMask, &template, &nvs);
|
VisualBitsPerRGBMask, &template, &nvs);
|
||||||
if (vs == NULL || nvs == 0) ERR("no good visual found\n");
|
|
||||||
|
if (vs == NULL) {
|
||||||
|
/* try again with 32 bpp */
|
||||||
|
template.depth = 32;
|
||||||
|
vs = XGetVisualInfo(x->d, VisualDepthMask | VisualClassMask |
|
||||||
|
VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask |
|
||||||
|
VisualBitsPerRGBMask, &template, &nvs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vs == NULL) ERR("no good visual found\n");
|
||||||
|
|
||||||
v = vs[0].visual;
|
v = vs[0].visual;
|
||||||
XFree(vs);
|
XFree(vs);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,385 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <poll.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include "database.h"
|
||||||
|
#include "utils.h"
|
||||||
|
#include "../T.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#define DEFAULT_LOCAL_PORT 2022
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int id; /* increases at each new tracer's connection */
|
||||||
|
int s; /* socket */
|
||||||
|
int *is_on; /* local vision of is_on for this tracer */
|
||||||
|
int poll_id; /* -1: invalid, otherwise index in fds array */
|
||||||
|
} ti_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
ti_t *ti; /* data for tracers */
|
||||||
|
int ti_size;
|
||||||
|
int ti_maxsize;
|
||||||
|
} multi_t;
|
||||||
|
|
||||||
|
void set_is_on(int *is_on, int pos, int val)
|
||||||
|
{
|
||||||
|
if (val) is_on[pos]++; else is_on[pos]--;
|
||||||
|
/* TODO: remove check? */
|
||||||
|
if (is_on[pos] < 0) { printf("%s:%d:nonono\n",__FILE__,__LINE__); abort(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
int send_messages_txt(int s, char *T_messages_txt, int T_messages_txt_len)
|
||||||
|
{
|
||||||
|
char buf[T_BUFFER_MAX];
|
||||||
|
char *T_LOCAL_buf = buf;
|
||||||
|
int32_t T_LOCAL_size;
|
||||||
|
unsigned char *src;
|
||||||
|
int src_len;
|
||||||
|
|
||||||
|
/* trace T_message.txt
|
||||||
|
* Send several messages -1 with content followed by message -2.
|
||||||
|
*/
|
||||||
|
src = (unsigned char *)T_messages_txt;
|
||||||
|
src_len = T_messages_txt_len;
|
||||||
|
while (src_len) {
|
||||||
|
int send_size = src_len;
|
||||||
|
if (send_size > T_PAYLOAD_MAXSIZE - sizeof(int))
|
||||||
|
send_size = T_PAYLOAD_MAXSIZE - sizeof(int);
|
||||||
|
/* TODO: be careful, we use internal T stuff, to rewrite? */
|
||||||
|
T_LOCAL_size = 0;
|
||||||
|
T_HEADER(T_ID(-1));
|
||||||
|
T_PUT_buffer(1, ((T_buffer){addr:(src), length:(send_size)}));
|
||||||
|
if (socket_send(s, &T_LOCAL_size, 4) == -1) return -1;
|
||||||
|
if (socket_send(s, buf, T_LOCAL_size) == -1) return -1;
|
||||||
|
src += send_size;
|
||||||
|
src_len -= send_size;
|
||||||
|
}
|
||||||
|
T_LOCAL_size = 0;
|
||||||
|
T_HEADER(T_ID(-2));
|
||||||
|
if (socket_send(s, &T_LOCAL_size, 4) == -1) return -1;
|
||||||
|
return socket_send(s, buf, T_LOCAL_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void new_tracer(multi_t *m, int s, int is_on_size, char *t, int t_size, int id)
|
||||||
|
{
|
||||||
|
if (send_messages_txt(s, t, t_size) == -1) {
|
||||||
|
printf("error sending T_messages.txt to new tracer %d => remove tracer\n",
|
||||||
|
id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (m->ti_size == m->ti_maxsize) {
|
||||||
|
m->ti_maxsize += 64;
|
||||||
|
m->ti = realloc(m->ti, m->ti_maxsize * sizeof(ti_t));
|
||||||
|
if (m->ti == NULL) abort();
|
||||||
|
}
|
||||||
|
m->ti[m->ti_size].id = id;
|
||||||
|
m->ti[m->ti_size].s = s;
|
||||||
|
m->ti[m->ti_size].is_on = calloc(is_on_size, sizeof(int));
|
||||||
|
if (m->ti[m->ti_size].is_on == NULL) abort();
|
||||||
|
m->ti[m->ti_size].poll_id = -1;
|
||||||
|
m->ti_size++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void remove_tracer(multi_t *m, int t)
|
||||||
|
{
|
||||||
|
free(m->ti[t].is_on);
|
||||||
|
shutdown(m->ti[t].s, SHUT_RDWR);
|
||||||
|
close(m->ti[t].s);
|
||||||
|
m->ti_size--;
|
||||||
|
memmove(&m->ti[t], &m->ti[t+1], (m->ti_size - t) * sizeof(ti_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
int send_is_on(int socket, int number_of_events, int *is_on)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char mt = 1;
|
||||||
|
if (socket_send(socket, &mt, 1) == -1 ||
|
||||||
|
socket_send(socket, &number_of_events, sizeof(int)) == -1) return -1;
|
||||||
|
for (i = 0; i < number_of_events; i++) {
|
||||||
|
int v = is_on[i] ? 1 : 0;
|
||||||
|
if (socket_send(socket, &v, sizeof(int)) == -1) return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int read_tracee(int s, OBUF *ebuf, int *_type, int32_t *_length)
|
||||||
|
{
|
||||||
|
int type;
|
||||||
|
int32_t length;
|
||||||
|
char *v;
|
||||||
|
int vpos = 0;
|
||||||
|
|
||||||
|
if (fullread(s, &length, 4) == -1) return -1;
|
||||||
|
if (ebuf->omaxsize < length) {
|
||||||
|
ebuf->omaxsize = (length + 65535) & ~65535;
|
||||||
|
ebuf->obuf = realloc(ebuf->obuf, ebuf->omaxsize);
|
||||||
|
if (ebuf->obuf == NULL) { printf("out of memory\n"); exit(1); }
|
||||||
|
}
|
||||||
|
v = ebuf->obuf;
|
||||||
|
memcpy(v+vpos, &length, 4);
|
||||||
|
vpos += 4;
|
||||||
|
#ifdef T_SEND_TIME
|
||||||
|
if (fullread(s,v+vpos,sizeof(struct timespec))==-1) return -1;
|
||||||
|
vpos += sizeof(struct timespec);
|
||||||
|
length -= sizeof(struct timespec);
|
||||||
|
#endif
|
||||||
|
if (fullread(s, &type, sizeof(int)) == -1) return -1;
|
||||||
|
memcpy(v+vpos, &type, sizeof(int));
|
||||||
|
vpos += sizeof(int);
|
||||||
|
length -= sizeof(int);
|
||||||
|
if (fullread(s, v+vpos, length) == -1) return -1;
|
||||||
|
vpos += length;
|
||||||
|
|
||||||
|
ebuf->osize = vpos;
|
||||||
|
|
||||||
|
*_type = type;
|
||||||
|
*_length = length;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void forward_event(multi_t *m, int number_of_events, OBUF *ebuf, int type)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (type < 0 || type >= number_of_events)
|
||||||
|
{ printf("error: bad type of event to forward %d\n", type); abort(); }
|
||||||
|
|
||||||
|
for (i = 0; i < m->ti_size; i++) {
|
||||||
|
if (!m->ti[i].is_on[type]) continue;
|
||||||
|
if (socket_send(m->ti[i].s, ebuf->obuf, ebuf->osize) == -1)
|
||||||
|
printf("warning: error forwarding event to tracer %d\n", m->ti[i].id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int connect_to_tracee(char *ip, int port, int number_of_events, int *is_on)
|
||||||
|
{
|
||||||
|
int s;
|
||||||
|
|
||||||
|
printf("connecting to %s:%d\n", ip, port);
|
||||||
|
|
||||||
|
s = try_connect_to(ip, port);
|
||||||
|
if (s == -1) return -1;
|
||||||
|
|
||||||
|
if (send_is_on(s, number_of_events, is_on) == -1) {
|
||||||
|
shutdown(s, SHUT_RDWR);
|
||||||
|
close(s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
void usage(void)
|
||||||
|
{
|
||||||
|
printf(
|
||||||
|
"options:\n"
|
||||||
|
" -d <database file> this option is mandatory\n"
|
||||||
|
" -ip <host> connect to given IP address (default %s)\n"
|
||||||
|
" -p <port> connect to given port (default %d)\n"
|
||||||
|
" -lp <port> listen on local port (default %d)\n",
|
||||||
|
DEFAULT_REMOTE_IP,
|
||||||
|
DEFAULT_REMOTE_PORT,
|
||||||
|
DEFAULT_LOCAL_PORT
|
||||||
|
);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int n, char **v)
|
||||||
|
{
|
||||||
|
char *database_filename = NULL;
|
||||||
|
void *database;
|
||||||
|
char *ip = DEFAULT_REMOTE_IP;
|
||||||
|
int port = DEFAULT_REMOTE_PORT;
|
||||||
|
int local_port = DEFAULT_LOCAL_PORT;
|
||||||
|
int *is_on;
|
||||||
|
int number_of_events;
|
||||||
|
int i, j;
|
||||||
|
char *T_messages_txt;
|
||||||
|
int T_messages_txt_len;
|
||||||
|
int l; /* listen socket for tracers' connections */
|
||||||
|
int s = -1; /* socket connected to tracee. -1 if not connected */
|
||||||
|
multi_t m;
|
||||||
|
int is_on_changed;
|
||||||
|
int current_nfd;
|
||||||
|
struct pollfd *fds = NULL;
|
||||||
|
int next_id = 0;
|
||||||
|
|
||||||
|
memset(&m, 0, sizeof(m));
|
||||||
|
|
||||||
|
/* write on a socket fails if the other end is closed and we get SIGPIPE */
|
||||||
|
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort();
|
||||||
|
|
||||||
|
for (i = 1; i < n; i++) {
|
||||||
|
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], "-ip")) { if (i > n-2) usage(); ip = v[++i]; continue; }
|
||||||
|
if (!strcmp(v[i], "-p"))
|
||||||
|
{ if (i > n-2) usage(); port = atoi(v[++i]); continue; }
|
||||||
|
if (!strcmp(v[i], "-lp"))
|
||||||
|
{ if (i > n-2) usage(); local_port = atoi(v[++i]); continue; }
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (database_filename == NULL) {
|
||||||
|
printf("ERROR: provide a database file (-d)\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
database = parse_database(database_filename);
|
||||||
|
|
||||||
|
load_config_file(database_filename);
|
||||||
|
get_local_config(&T_messages_txt, &T_messages_txt_len);
|
||||||
|
|
||||||
|
number_of_events = number_of_ids(database);
|
||||||
|
is_on = calloc(number_of_events, sizeof(int));
|
||||||
|
if (is_on == NULL) abort();
|
||||||
|
|
||||||
|
/* create listener socket */
|
||||||
|
l = create_listen_socket("0.0.0.0", local_port);
|
||||||
|
|
||||||
|
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
|
||||||
|
|
||||||
|
current_nfd = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
int nfd;
|
||||||
|
int timeout;
|
||||||
|
|
||||||
|
if (s == -1) s = connect_to_tracee(ip, port, number_of_events, is_on);
|
||||||
|
|
||||||
|
/* poll on s (if there), l, and all tracers' sockets */
|
||||||
|
nfd = 1 + (s != -1) + m.ti_size;
|
||||||
|
if (nfd != current_nfd) {
|
||||||
|
current_nfd = nfd;
|
||||||
|
free(fds);
|
||||||
|
fds = calloc(nfd, sizeof(struct pollfd));
|
||||||
|
if (fds == NULL) { perror("calloc"); exit(1); }
|
||||||
|
}
|
||||||
|
i = 0;
|
||||||
|
fds[i].fd = l;
|
||||||
|
fds[i].events = POLLIN;
|
||||||
|
i++;
|
||||||
|
if (s != -1) {
|
||||||
|
fds[i].fd = s;
|
||||||
|
fds[i].events = POLLIN;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
for (j = 0; j < m.ti_size; j++) {
|
||||||
|
m.ti[j].poll_id = i;
|
||||||
|
fds[i].fd = m.ti[j].s;
|
||||||
|
fds[i].events = POLLIN;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (s == -1) timeout = 1000; else timeout = -1;
|
||||||
|
if (poll(fds, nfd, timeout) == -1) { perror("poll"); exit(1); }
|
||||||
|
|
||||||
|
if (fds[0].revents & ~POLLIN) {
|
||||||
|
printf("TODO: error on listen socket?\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* new tracer connecting? */
|
||||||
|
if (fds[0].revents & POLLIN) {
|
||||||
|
int t;
|
||||||
|
printf("tracer %d connecting\n", next_id);
|
||||||
|
t = socket_accept(l);
|
||||||
|
if (t == -1) perror("accept");
|
||||||
|
else new_tracer(&m, t, number_of_events,
|
||||||
|
T_messages_txt, T_messages_txt_len, next_id);
|
||||||
|
next_id++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s != -1 && fds[1].revents & ~POLLIN) {
|
||||||
|
printf("TODO: error on tracee socket?\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* data from tracee */
|
||||||
|
if (s != -1 && fds[1].revents & POLLIN) {
|
||||||
|
int type;
|
||||||
|
int32_t length;
|
||||||
|
if (read_tracee(s, &ebuf, &type, &length) == -1) {
|
||||||
|
clear_remote_config();
|
||||||
|
shutdown(s, SHUT_RDWR);
|
||||||
|
close(s);
|
||||||
|
s = -1;
|
||||||
|
} else {
|
||||||
|
if (type == -1)
|
||||||
|
append_received_config_chunk(ebuf.obuf+ebuf.osize-length, length);
|
||||||
|
else if (type == -2) verify_config();
|
||||||
|
else forward_event(&m, number_of_events, &ebuf, type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* status of each tracer */
|
||||||
|
is_on_changed = 0;
|
||||||
|
for (j = 0; j < m.ti_size; j++) {
|
||||||
|
int l;
|
||||||
|
int s;
|
||||||
|
int *t_is_on;
|
||||||
|
if (m.ti[j].poll_id == -1) continue;
|
||||||
|
i = m.ti[j].poll_id;
|
||||||
|
s = m.ti[j].s;
|
||||||
|
t_is_on = m.ti[j].is_on;
|
||||||
|
if (fds[i].revents & (POLLHUP | POLLERR)) goto tracer_error;
|
||||||
|
/* error? */
|
||||||
|
if (fds[i].revents & ~POLLIN) {
|
||||||
|
printf("TODO: error with tracer?\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
/* data in */
|
||||||
|
if (fds[i].revents & POLLIN) {
|
||||||
|
char t;
|
||||||
|
int len;
|
||||||
|
int v;
|
||||||
|
if (fullread(s, &t, 1) != 1) goto tracer_error;
|
||||||
|
switch (t) {
|
||||||
|
case 0:
|
||||||
|
is_on_changed = 1;
|
||||||
|
if (fullread(s, &len, sizeof(int)) == -1) goto tracer_error;
|
||||||
|
for (l = 0; l < len; l++) {
|
||||||
|
if (fullread(s, &v, sizeof(int)) == -1) goto tracer_error;
|
||||||
|
if (v < 0 || v >= number_of_events) goto tracer_error;
|
||||||
|
t_is_on[v] = 1 - t_is_on[v];
|
||||||
|
set_is_on(is_on, v, t_is_on[v]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
is_on_changed = 1;
|
||||||
|
if (fullread(s, &len, sizeof(int)) == -1) goto tracer_error;
|
||||||
|
if (len < 0 || len > number_of_events) goto tracer_error;
|
||||||
|
for (l = 0; l < len; l++) {
|
||||||
|
if (fullread(s, &v, sizeof(int)) == -1) goto tracer_error;
|
||||||
|
if (v < 0 || v > 1) goto tracer_error;
|
||||||
|
if (t_is_on[l] != v) set_is_on(is_on, l, v);
|
||||||
|
t_is_on[l] = v;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2: break;
|
||||||
|
default: printf("error: unhandled message type %d\n", t); //abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
tracer_error:
|
||||||
|
printf("remove tracer %d\n", m.ti[j].id);
|
||||||
|
for (l = 0; l < number_of_events; l++)
|
||||||
|
if (m.ti[j].is_on[l]) { is_on_changed = 1; set_is_on(is_on, l, 0); }
|
||||||
|
remove_tracer(&m, j);
|
||||||
|
j--;
|
||||||
|
}
|
||||||
|
if (is_on_changed && s != -1)
|
||||||
|
if (send_is_on(s, number_of_events, is_on) == -1) {
|
||||||
|
clear_remote_config();
|
||||||
|
shutdown(s, SHUT_RDWR);
|
||||||
|
close(s);
|
||||||
|
s = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -12,7 +12,14 @@
|
|||||||
#include "logger/logger.h"
|
#include "logger/logger.h"
|
||||||
#include "view/view.h"
|
#include "view/view.h"
|
||||||
|
|
||||||
|
enum var_type {
|
||||||
|
DEFAULT,
|
||||||
|
VCD_FUNCTION,
|
||||||
|
VCD_VARIABLE
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
enum var_type type;
|
||||||
char *event;
|
char *event;
|
||||||
char *arg;
|
char *arg;
|
||||||
char *vcd_name;
|
char *vcd_name;
|
||||||
@@ -44,16 +51,39 @@ void vcd_write_header(vcd_vars *v, int n)
|
|||||||
"$version\n"
|
"$version\n"
|
||||||
" to_vcd\n"
|
" to_vcd\n"
|
||||||
"$end\n"
|
"$end\n"
|
||||||
"$timescale 1ns $end\n"
|
"$timescale 1ns $end\n") <= 0) abort();
|
||||||
|
|
||||||
|
if (fprintf(out,
|
||||||
"$scope module logic $end\n") <= 0) abort();
|
"$scope module logic $end\n") <= 0) abort();
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
if (v[i].type == DEFAULT)
|
||||||
|
if (fprintf(out, "$var wire %d %s %s $end\n",
|
||||||
|
v[i].boolean ? 1 : 64,
|
||||||
|
v[i].vcd_name, v[i].vcd_name) <= 0) abort();
|
||||||
|
if (fprintf(out,
|
||||||
|
"$upscope $end\n") <= 0) abort();
|
||||||
|
|
||||||
|
if (fprintf(out,
|
||||||
|
"$scope module functions $end\n") <= 0) abort();
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
if (v[i].type == VCD_FUNCTION)
|
||||||
|
if (fprintf(out, "$var wire %d %s %s $end\n",
|
||||||
|
v[i].boolean ? 1 : 64,
|
||||||
|
v[i].vcd_name, v[i].vcd_name) <= 0) abort();
|
||||||
|
if (fprintf(out,
|
||||||
|
"$upscope $end\n") <= 0) abort();
|
||||||
|
|
||||||
|
if (fprintf(out,
|
||||||
|
"$scope module variables $end\n") <= 0) abort();
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
if (fprintf(out, "$var wire %d %s %s $end\n",
|
if (v[i].type == VCD_VARIABLE)
|
||||||
v[i].boolean ? 1 : 64,
|
if (fprintf(out, "$var wire %d %s %s $end\n",
|
||||||
v[i].vcd_name, v[i].vcd_name) <= 0) abort();
|
v[i].boolean ? 1 : 64,
|
||||||
|
v[i].vcd_name, v[i].vcd_name) <= 0) abort();
|
||||||
|
if (fprintf(out,
|
||||||
|
"$upscope $end\n") <= 0) abort();
|
||||||
|
|
||||||
if (fprintf(out,
|
if (fprintf(out,
|
||||||
"$upscope $end\n"
|
|
||||||
"$enddefinitions $end\n"
|
"$enddefinitions $end\n"
|
||||||
"$dumpvars\n") <= 0) abort();
|
"$dumpvars\n") <= 0) abort();
|
||||||
|
|
||||||
@@ -174,7 +204,8 @@ void usage(void)
|
|||||||
" -ip <host> connect to given IP address (default %s)\n"
|
" -ip <host> connect to given IP address (default %s)\n"
|
||||||
" -p <port> connect to given port (default %d)\n"
|
" -p <port> connect to given port (default %d)\n"
|
||||||
" -b <event> <arg> <vcd name> trace as binary (0 off, anything else on)\n"
|
" -b <event> <arg> <vcd name> trace as binary (0 off, anything else on)\n"
|
||||||
" -l <event> <arg> <vcd name> trace as uint64_t\n",
|
" -l <event> <arg> <vcd name> trace as uint64_t\n"
|
||||||
|
" -vcd trace all VCD variables and functions\n",
|
||||||
DEFAULT_REMOTE_IP,
|
DEFAULT_REMOTE_IP,
|
||||||
DEFAULT_REMOTE_PORT
|
DEFAULT_REMOTE_PORT
|
||||||
);
|
);
|
||||||
@@ -192,6 +223,21 @@ void force_stop(int x)
|
|||||||
run = 0;
|
run = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vcd_vars *add_var(vcd_vars *vars, int nvars,
|
||||||
|
char *event, char *arg, char *vcd_name, int is_boolean, enum var_type t)
|
||||||
|
{
|
||||||
|
if (nvars % 64 == 0) {
|
||||||
|
vars = realloc(vars, (nvars+64) * sizeof(vcd_vars));
|
||||||
|
if (vars == NULL) abort();
|
||||||
|
}
|
||||||
|
vars[nvars].type = t;
|
||||||
|
vars[nvars].event = event;
|
||||||
|
vars[nvars].arg = arg;
|
||||||
|
vars[nvars].vcd_name = vcd_name;
|
||||||
|
vars[nvars].boolean = is_boolean;
|
||||||
|
return vars;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int n, char **v)
|
int main(int n, char **v)
|
||||||
{
|
{
|
||||||
char *output_filename = NULL;
|
char *output_filename = NULL;
|
||||||
@@ -202,11 +248,12 @@ int main(int n, char **v)
|
|||||||
int *is_on;
|
int *is_on;
|
||||||
int number_of_events;
|
int number_of_events;
|
||||||
int i;
|
int i;
|
||||||
vcd_vars vars[n];
|
vcd_vars *vars = NULL;
|
||||||
int nvars = 0;
|
int nvars = 0;
|
||||||
view *vcd_view;
|
view *vcd_view;
|
||||||
event_handler *h;
|
event_handler *h;
|
||||||
logger *textlog;
|
logger *textlog;
|
||||||
|
int all_vcd = 0;
|
||||||
|
|
||||||
/* write on a socket fails if the other end is closed and we get SIGPIPE */
|
/* write on a socket fails if the other end is closed and we get SIGPIPE */
|
||||||
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort();
|
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort();
|
||||||
@@ -221,19 +268,22 @@ int main(int n, char **v)
|
|||||||
if (!strcmp(v[i], "-p"))
|
if (!strcmp(v[i], "-p"))
|
||||||
{ if (i > n-2) usage(); port = atoi(v[++i]); continue; }
|
{ if (i > n-2) usage(); port = atoi(v[++i]); continue; }
|
||||||
if (!strcmp(v[i], "-b")) { if(i>n-4)usage();
|
if (!strcmp(v[i], "-b")) { if(i>n-4)usage();
|
||||||
vars[nvars].event = v[++i];
|
char *event = v[++i];
|
||||||
vars[nvars].arg = v[++i];
|
char *arg = v[++i];
|
||||||
vars[nvars].vcd_name = v[++i];
|
char *vcd_name = v[++i];
|
||||||
vars[nvars++].boolean = 1;
|
vars = add_var(vars, nvars, event, arg, vcd_name, 1, DEFAULT);
|
||||||
|
nvars++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!strcmp(v[i], "-l")) { if(i>n-4)usage();
|
if (!strcmp(v[i], "-l")) { if(i>n-4)usage();
|
||||||
vars[nvars].event = v[++i];
|
char *event = v[++i];
|
||||||
vars[nvars].arg = v[++i];
|
char *arg = v[++i];
|
||||||
vars[nvars].vcd_name = v[++i];
|
char *vcd_name = v[++i];
|
||||||
vars[nvars++].boolean = 0;
|
vars = add_var(vars, nvars, event, arg, vcd_name, 0, DEFAULT);
|
||||||
|
nvars++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (!strcmp(v[i], "-vcd")) { all_vcd = 1; continue; }
|
||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,11 +310,42 @@ int main(int n, char **v)
|
|||||||
/* create the view */
|
/* create the view */
|
||||||
vcd_view = new_view_vcd();
|
vcd_view = new_view_vcd();
|
||||||
|
|
||||||
|
if (all_vcd) {
|
||||||
|
/* activate all VCD traces */
|
||||||
|
for (i = 0; i < number_of_events; i++) {
|
||||||
|
int is_boolean;
|
||||||
|
enum var_type type;
|
||||||
|
int prefix_length;
|
||||||
|
char *name = event_name_from_id(database, i);
|
||||||
|
char *vcd_name;
|
||||||
|
char *var_prefix = "VCD_VARIABLE_";
|
||||||
|
char *fun_prefix = "VCD_FUNCTION_";
|
||||||
|
if (!strncmp(name, var_prefix, strlen(var_prefix))) {
|
||||||
|
prefix_length = strlen(var_prefix);
|
||||||
|
is_boolean = 0;
|
||||||
|
type = VCD_VARIABLE;
|
||||||
|
} else if (!strncmp(name, fun_prefix, strlen(fun_prefix))) {
|
||||||
|
prefix_length = strlen(fun_prefix);
|
||||||
|
is_boolean = 1;
|
||||||
|
type = VCD_FUNCTION;
|
||||||
|
} else
|
||||||
|
continue;
|
||||||
|
vcd_name = event_vcd_name_from_id(database, i);
|
||||||
|
if (vcd_name == NULL) {
|
||||||
|
vcd_name = name+prefix_length;
|
||||||
|
printf("WARNING: ID %s does not define VCD_NAME in the file %s, using %s\n",
|
||||||
|
name, database_filename, vcd_name);
|
||||||
|
}
|
||||||
|
vars = add_var(vars, nvars,
|
||||||
|
name, "value", vcd_name, is_boolean, type);
|
||||||
|
nvars++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* setup traces */
|
/* setup traces */
|
||||||
for (i = 0; i < nvars; i++) {
|
for (i = 0; i < nvars; i++) {
|
||||||
char format[256];
|
char format[256];
|
||||||
if (strlen(vars[i].arg) > 256-3) abort();
|
if (strlen(vars[i].arg) + strlen(vars[i].vcd_name) > 256-16) abort();
|
||||||
if (strlen(vars[i].vcd_name) > 256-1) abort();
|
|
||||||
sprintf(format, "%c [%s] %s",
|
sprintf(format, "%c [%s] %s",
|
||||||
vars[i].boolean ? 'b' : 'l',
|
vars[i].boolean ? 'b' : 'l',
|
||||||
vars[i].arg,
|
vars[i].arg,
|
||||||
|
|||||||
@@ -857,6 +857,7 @@ int main(int n, char **v)
|
|||||||
|
|
||||||
restart:
|
restart:
|
||||||
clear_remote_config();
|
clear_remote_config();
|
||||||
|
if (ue_data.socket != -1) close(ue_data.socket);
|
||||||
ue_data.socket = connect_to(ip, port);
|
ue_data.socket = connect_to(ip, port);
|
||||||
|
|
||||||
/* send the first message - activate selected traces */
|
/* send the first message - activate selected traces */
|
||||||
|
|||||||
@@ -79,6 +79,36 @@ list *list_append(list *l, void *data)
|
|||||||
/* socket */
|
/* socket */
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
int create_listen_socket(char *addr, int port)
|
||||||
|
{
|
||||||
|
struct sockaddr_in a;
|
||||||
|
int s;
|
||||||
|
int v;
|
||||||
|
|
||||||
|
s = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
if (s == -1) { perror("socket"); exit(1); }
|
||||||
|
v = 1;
|
||||||
|
if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &v, sizeof(int)))
|
||||||
|
{ perror("setsockopt"); exit(1); }
|
||||||
|
|
||||||
|
a.sin_family = AF_INET;
|
||||||
|
a.sin_port = htons(port);
|
||||||
|
a.sin_addr.s_addr = inet_addr(addr);
|
||||||
|
|
||||||
|
if (bind(s, (struct sockaddr *)&a, sizeof(a))) { perror("bind"); exit(1); }
|
||||||
|
if (listen(s, 5)) { perror("listen"); exit(1); }
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
int socket_accept(int s)
|
||||||
|
{
|
||||||
|
struct sockaddr_in a;
|
||||||
|
socklen_t alen;
|
||||||
|
alen = sizeof(a);
|
||||||
|
return accept(s, (struct sockaddr *)&a, &alen);
|
||||||
|
}
|
||||||
|
|
||||||
int socket_send(int socket, void *buffer, int size)
|
int socket_send(int socket, void *buffer, int size)
|
||||||
{
|
{
|
||||||
char *x = buffer;
|
char *x = buffer;
|
||||||
@@ -94,26 +124,13 @@ int socket_send(int socket, void *buffer, int size)
|
|||||||
|
|
||||||
int get_connection(char *addr, int port)
|
int get_connection(char *addr, int port)
|
||||||
{
|
{
|
||||||
struct sockaddr_in a;
|
|
||||||
socklen_t alen;
|
|
||||||
int s, t;
|
int s, t;
|
||||||
|
|
||||||
printf("waiting for connection on %s:%d\n", addr, port);
|
printf("waiting for connection on %s:%d\n", addr, port);
|
||||||
|
|
||||||
s = socket(AF_INET, SOCK_STREAM, 0);
|
s = create_listen_socket(addr, port);
|
||||||
if (s == -1) { perror("socket"); exit(1); }
|
|
||||||
t = 1;
|
|
||||||
if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &t, sizeof(int)))
|
|
||||||
{ perror("setsockopt"); exit(1); }
|
|
||||||
|
|
||||||
a.sin_family = AF_INET;
|
t = socket_accept(s);
|
||||||
a.sin_port = htons(port);
|
|
||||||
a.sin_addr.s_addr = inet_addr(addr);
|
|
||||||
|
|
||||||
if (bind(s, (struct sockaddr *)&a, sizeof(a))) { perror("bind"); exit(1); }
|
|
||||||
if (listen(s, 5)) { perror("bind"); exit(1); }
|
|
||||||
alen = sizeof(a);
|
|
||||||
t = accept(s, (struct sockaddr *)&a, &alen);
|
|
||||||
if (t == -1) { perror("accept"); exit(1); }
|
if (t == -1) { perror("accept"); exit(1); }
|
||||||
close(s);
|
close(s);
|
||||||
|
|
||||||
@@ -137,14 +154,11 @@ int fullread(int fd, void *_buf, int count)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int connect_to(char *addr, int port)
|
int try_connect_to(char *addr, int port)
|
||||||
{
|
{
|
||||||
int s;
|
int s;
|
||||||
struct sockaddr_in a;
|
struct sockaddr_in a;
|
||||||
|
|
||||||
printf("connecting to %s:%d\n", addr, port);
|
|
||||||
|
|
||||||
again:
|
|
||||||
s = socket(AF_INET, SOCK_STREAM, 0);
|
s = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
if (s == -1) { perror("socket"); exit(1); }
|
if (s == -1) { perror("socket"); exit(1); }
|
||||||
|
|
||||||
@@ -155,6 +169,21 @@ again:
|
|||||||
if (connect(s, (struct sockaddr *)&a, sizeof(a)) == -1) {
|
if (connect(s, (struct sockaddr *)&a, sizeof(a)) == -1) {
|
||||||
perror("connect");
|
perror("connect");
|
||||||
close(s);
|
close(s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
int connect_to(char *addr, int port)
|
||||||
|
{
|
||||||
|
int s;
|
||||||
|
|
||||||
|
printf("connecting to %s:%d\n", addr, port);
|
||||||
|
|
||||||
|
again:
|
||||||
|
s = try_connect_to(addr, port);
|
||||||
|
if (s == -1) {
|
||||||
printf("trying again in 1s\n");
|
printf("trying again in 1s\n");
|
||||||
sleep(1);
|
sleep(1);
|
||||||
goto again;
|
goto again;
|
||||||
|
|||||||
@@ -24,11 +24,14 @@ list *list_append(list *l, void *data);
|
|||||||
#define DEFAULT_REMOTE_IP "127.0.0.1"
|
#define DEFAULT_REMOTE_IP "127.0.0.1"
|
||||||
#define DEFAULT_REMOTE_PORT 2021
|
#define DEFAULT_REMOTE_PORT 2021
|
||||||
|
|
||||||
|
int create_listen_socket(char *addr, int port);
|
||||||
|
int socket_accept(int s);
|
||||||
/* socket_send: return 0 if okay, -1 on error */
|
/* socket_send: return 0 if okay, -1 on error */
|
||||||
int socket_send(int socket, void *buffer, int size);
|
int socket_send(int socket, void *buffer, int size);
|
||||||
int get_connection(char *addr, int port);
|
int get_connection(char *addr, int port);
|
||||||
/* fullread: return length read if okay (that is: 'count'), -1 on error */
|
/* fullread: return length read if okay (that is: 'count'), -1 on error */
|
||||||
int fullread(int fd, void *_buf, int count);
|
int fullread(int fd, void *_buf, int count);
|
||||||
|
int try_connect_to(char *addr, int port);
|
||||||
int connect_to(char *addr, int port);
|
int connect_to(char *addr, int port);
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|||||||
@@ -70,8 +70,8 @@ char *tmpstr;
|
|||||||
char *shlibpath =NULL;
|
char *shlibpath =NULL;
|
||||||
char *shlibversion=NULL;
|
char *shlibversion=NULL;
|
||||||
char *cfgprefix;
|
char *cfgprefix;
|
||||||
paramdef_t LoaderParams[] ={{"shlibpath", NULL, 0, strptr:&shlibpath, defstrval:NULL, TYPE_STRING, 0},
|
paramdef_t LoaderParams[] ={{"shlibpath", NULL, 0, strptr:&shlibpath, defstrval:NULL, TYPE_STRING, 0, NULL},
|
||||||
{"shlibversion", NULL, 0, strptr:&shlibversion, defstrval:"", TYPE_STRING, 0}};
|
{"shlibversion", NULL, 0, strptr:&shlibversion, defstrval:"", TYPE_STRING, 0, NULL}};
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -118,7 +118,7 @@ int ret;
|
|||||||
return tmpstr;
|
return tmpstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf)
|
int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf, void *autoinit_arg)
|
||||||
{
|
{
|
||||||
void *lib_handle;
|
void *lib_handle;
|
||||||
initfunc_t fpi;
|
initfunc_t fpi;
|
||||||
@@ -155,7 +155,7 @@ int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf)
|
|||||||
fpi = dlsym(lib_handle,afname);
|
fpi = dlsym(lib_handle,afname);
|
||||||
|
|
||||||
if (fpi != NULL ) {
|
if (fpi != NULL ) {
|
||||||
fpi();
|
fpi(autoinit_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (farray != NULL) {
|
if (farray != NULL) {
|
||||||
|
|||||||
@@ -59,7 +59,8 @@ typedef struct {
|
|||||||
|
|
||||||
/* function type of functions which may be implemented by a module */
|
/* function type of functions which may be implemented by a module */
|
||||||
/* 1: init function, called when loading, if found in the shared lib */
|
/* 1: init function, called when loading, if found in the shared lib */
|
||||||
typedef int(*initfunc_t)(void);
|
typedef int(*initfunc_t)(void *);
|
||||||
|
|
||||||
/* 2: version checking function, called when loading, if it returns -1, trigger main exec abort */
|
/* 2: version checking function, called when loading, if it returns -1, trigger main exec abort */
|
||||||
typedef int(*checkverfunc_t)(char * mainexec_version, char ** shlib_version);
|
typedef int(*checkverfunc_t)(char * mainexec_version, char ** shlib_version);
|
||||||
/* 3: get function array function, called when loading when a module doesn't provide */
|
/* 3: get function array function, called when loading when a module doesn't provide */
|
||||||
@@ -72,18 +73,18 @@ typedef int(*getfarrayfunc_t)(loader_shlibfunc_t **funcarray);
|
|||||||
#define DEFAULT_MAXSHLIBS 10
|
#define DEFAULT_MAXSHLIBS 10
|
||||||
loader_data_t loader_data;
|
loader_data_t loader_data;
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
/* LOADER parameters */
|
/* LOADER parameters */
|
||||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
/* optname helpstr paramflags XXXptr defXXXval type numelt check func*/
|
||||||
/*------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
#define LOADER_PARAMS_DESC { \
|
#define LOADER_PARAMS_DESC { \
|
||||||
{"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0}, \
|
{"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0, NULL},\
|
||||||
{"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs), defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0}, \
|
{"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs), defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0, NULL}\
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------------------------------------*/
|
||||||
#else /* LOAD_MODULE_SHLIB_MAIN */
|
#else /* LOAD_MODULE_SHLIB_MAIN */
|
||||||
extern int load_module_shlib(char *modname, loader_shlibfunc_t *farray, int numf);
|
extern int load_module_shlib(char *modname, loader_shlibfunc_t *farray, int numf, void *initfunc_arg);
|
||||||
extern void * get_shlibmodule_fptr(char *modname, char *fname);
|
extern void * get_shlibmodule_fptr(char *modname, char *fname);
|
||||||
extern loader_data_t loader_data;
|
extern loader_data_t loader_data;
|
||||||
#endif /* LOAD_MODULE_SHLIB_MAIN */
|
#endif /* LOAD_MODULE_SHLIB_MAIN */
|
||||||
|
|||||||
+23
-6
@@ -32,10 +32,14 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
#define MSC_LIBRARY
|
||||||
|
#include "msc.h"
|
||||||
|
|
||||||
#include "liblfds611.h"
|
#include "liblfds611.h"
|
||||||
#include "intertask_interface.h"
|
#include "intertask_interface.h"
|
||||||
|
|
||||||
#include "msc.h"
|
|
||||||
|
|
||||||
#include "assertions.h"
|
#include "assertions.h"
|
||||||
|
|
||||||
//-------------------------------
|
//-------------------------------
|
||||||
@@ -66,8 +70,8 @@ void *msc_task(void *args_p)
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
{
|
{
|
||||||
MessageDef *received_message_p = NULL;
|
MessageDef *received_message_p = NULL;
|
||||||
const char *msg_name = NULL;
|
// const char *msg_name = NULL;
|
||||||
instance_t instance = 0;
|
// instance_t instance = 0;
|
||||||
long timer_id;
|
long timer_id;
|
||||||
|
|
||||||
itti_mark_task_ready(TASK_MSC);
|
itti_mark_task_ready(TASK_MSC);
|
||||||
@@ -87,9 +91,9 @@ void *msc_task(void *args_p)
|
|||||||
itti_receive_msg(TASK_MSC, &received_message_p);
|
itti_receive_msg(TASK_MSC, &received_message_p);
|
||||||
|
|
||||||
if (received_message_p != NULL) {
|
if (received_message_p != NULL) {
|
||||||
msg_name = ITTI_MSG_NAME (received_message_p);
|
// msg_name = ITTI_MSG_NAME (received_message_p);
|
||||||
instance = ITTI_MSG_INSTANCE (received_message_p);
|
// instance = ITTI_MSG_INSTANCE (received_message_p);
|
||||||
|
|
||||||
switch (ITTI_MSG_ID(received_message_p)) {
|
switch (ITTI_MSG_ID(received_message_p)) {
|
||||||
|
|
||||||
case TIMER_HAS_EXPIRED: {
|
case TIMER_HAS_EXPIRED: {
|
||||||
@@ -570,4 +574,17 @@ error_event:
|
|||||||
free(new_item_p);
|
free(new_item_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// function called when oai loader loads the msc shared lib
|
||||||
|
int msc_autoinit(msc_interface_t *msc_interface)
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
|
||||||
|
msc_interface->msc_init = msc_init;
|
||||||
|
msc_interface->msc_start_use = msc_start_use;
|
||||||
|
msc_interface->msc_end = msc_end;
|
||||||
|
msc_interface->msc_log_event = msc_log_event;
|
||||||
|
msc_interface->msc_log_message = msc_log_message;
|
||||||
|
msc_interface->msc_loaded = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
+29
-18
@@ -73,7 +73,23 @@ typedef enum {
|
|||||||
#define MSC_AS_TIME_ARGS(CTXT_Pp) \
|
#define MSC_AS_TIME_ARGS(CTXT_Pp) \
|
||||||
(CTXT_Pp)->frame, \
|
(CTXT_Pp)->frame, \
|
||||||
(CTXT_Pp)->subframe
|
(CTXT_Pp)->subframe
|
||||||
#if defined(MESSAGE_CHART_GENERATOR)
|
|
||||||
|
typedef int(*msc_init_t)(const msc_env_t, const int );
|
||||||
|
typedef void(*msc_start_use_t)(void );
|
||||||
|
typedef void(*msc_end_t)(void);
|
||||||
|
typedef void(*msc_log_event_t)(const msc_proto_t,char *, ...);
|
||||||
|
typedef void(*msc_log_message_t)(const char * const, const msc_proto_t, const msc_proto_t,
|
||||||
|
const uint8_t* const, const unsigned int, char * , ...);
|
||||||
|
typedef struct msc_interface {
|
||||||
|
int msc_loaded;
|
||||||
|
msc_init_t msc_init;
|
||||||
|
msc_start_use_t msc_start_use;
|
||||||
|
msc_end_t msc_end;
|
||||||
|
msc_log_event_t msc_log_event;
|
||||||
|
msc_log_message_t msc_log_message;
|
||||||
|
} msc_interface_t;
|
||||||
|
|
||||||
|
#ifdef MSC_LIBRARY
|
||||||
int msc_init(const msc_env_t envP, const int max_threadsP);
|
int msc_init(const msc_env_t envP, const int max_threadsP);
|
||||||
void msc_start_use(void);
|
void msc_start_use(void);
|
||||||
void msc_flush_messages(void);
|
void msc_flush_messages(void);
|
||||||
@@ -88,22 +104,17 @@ void msc_log_message(
|
|||||||
const unsigned int num_bytes,
|
const unsigned int num_bytes,
|
||||||
char *format, ...);
|
char *format, ...);
|
||||||
|
|
||||||
#define MSC_INIT(arg1,arg2) msc_init(arg1,arg2)
|
|
||||||
#define MSC_START_USE msc_start_use
|
|
||||||
#define MSC_END msc_end
|
|
||||||
#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...) msc_log_event(mScPaRaMs, fORMAT, ##aRGS)
|
|
||||||
#define MSC_LOG_RX_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("<-",rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, ##aRGS)
|
|
||||||
#define MSC_LOG_RX_DISCARDED_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("x-",rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, ##aRGS)
|
|
||||||
#define MSC_LOG_TX_MESSAGE(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("->",sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, ##aRGS)
|
|
||||||
#define MSC_LOG_TX_MESSAGE_FAILED(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("-x",sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, ##aRGS)
|
|
||||||
#else
|
#else
|
||||||
#define MSC_INIT(arg1,arg2)
|
|
||||||
#define MSC_START_USE(mScPaRaMs)
|
msc_interface_t msc_interface;
|
||||||
#define MSC_END(mScPaRaMs)
|
#define MSC_INIT(arg1,arg2) if(msc_interface.msc_loaded) msc_interface.msc_init(arg1,arg2)
|
||||||
#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...)
|
#define MSC_START_USE if(msc_interface.msc_loaded) msc_interface.msc_start_use
|
||||||
#define MSC_LOG_RX_MESSAGE(mScPaRaMs, fORMAT, aRGS...)
|
#define MSC_END if(msc_interface.msc_loaded) msc_interface.msc_end
|
||||||
#define MSC_LOG_RX_DISCARDED_MESSAGE(mScPaRaMs, fORMAT, aRGS...)
|
#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_event(mScPaRaMs, fORMAT, ##aRGS)
|
||||||
#define MSC_LOG_TX_MESSAGE(mScPaRaMs, fORMAT, aRGS...)
|
#define MSC_LOG_RX_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("<-",rECEIVER, sENDER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
|
||||||
#define MSC_LOG_TX_MESSAGE_FAILED(mScPaRaMs, fORMAT, aRGS...)
|
#define MSC_LOG_RX_DISCARDED_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("x-",rECEIVER, sENDER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
|
||||||
#endif
|
#define MSC_LOG_TX_MESSAGE(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("->",sENDER, rECEIVER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
|
||||||
|
#define MSC_LOG_TX_MESSAGE_FAILED(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("-x",sENDER, rECEIVER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Author: Laurent THOMAS, Open Cells
|
Author: Laurent THOMAS, Open Cells
|
||||||
copyleft: OpenAirInterface Software Alliance
|
copyleft: OpenAirInterface Software Alliance and it's licence
|
||||||
*/
|
*/
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Author: Laurent THOMAS, Open Cells
|
Author: Laurent THOMAS, Open Cells
|
||||||
Copyleft: OpenAirInterface software alliance
|
Copyleft: OpenAirInterface software alliance and it's licence
|
||||||
*/
|
*/
|
||||||
#ifndef INTERTASK_INTERFACE_H_
|
#ifndef INTERTASK_INTERFACE_H_
|
||||||
#define INTERTASK_INTERFACE_H_
|
#define INTERTASK_INTERFACE_H_
|
||||||
|
|||||||
@@ -199,28 +199,29 @@ int proccmd_show(char *buf, int debug, telnet_printfunc_t prnt)
|
|||||||
print_threads(buf,debug,prnt);
|
print_threads(buf,debug,prnt);
|
||||||
}
|
}
|
||||||
if (strcasestr(buf,"loglvl") != NULL) {
|
if (strcasestr(buf,"loglvl") != NULL) {
|
||||||
prnt(" component level enabled\n");
|
prnt("\n component level enabled output\n");
|
||||||
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
|
||||||
if (g_log->log_component[i].name != NULL) {
|
if (g_log->log_component[i].name != NULL) {
|
||||||
prnt("%02i %17.17s:%10.10s %s\n",i ,g_log->log_component[i].name,
|
prnt("%02i %17.17s:%10.10s %s %s\n",i ,g_log->log_component[i].name,
|
||||||
map_int_to_str(log_level_names,g_log->log_component[i].level),
|
map_int_to_str(log_level_names,(g_log->log_component[i].level>=0)?g_log->log_component[i].level:g_log->log_component[i].savedlevel),
|
||||||
((g_log->log_component[i].interval>0)?"Y":"N") );
|
((g_log->log_component[i].level>=0)?"Y":"N"),
|
||||||
|
((g_log->log_component[i].filelog>0)?g_log->log_component[i].filelog_name:"stdout"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcasestr(buf,"logopt") != NULL) {
|
if (strcasestr(buf,"logopt") != NULL) {
|
||||||
prnt(" option enabled\n");
|
prnt("\n option enabled\n");
|
||||||
for (int i=0; log_options[i].name != NULL; i++) {
|
for (int i=0; log_options[i].name != NULL; i++) {
|
||||||
prnt("%02i %17.17s %10.10s \n",i ,log_options[i].name,
|
prnt("%02i %17.17s %10.10s \n",i ,log_options[i].name,
|
||||||
((g_log->flag & log_options[i].value)?"Y":"N") );
|
((g_log->flag & log_options[i].value)?"Y":"N") );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcasestr(buf,"dbgopt") != NULL) {
|
if (strcasestr(buf,"dbgopt") != NULL) {
|
||||||
prnt(" option debug matlab\n");
|
prnt("\n module debug dumpfile\n");
|
||||||
for (int i=0; log_maskmap[i].name != NULL ; i++) {
|
for (int i=0; log_maskmap[i].name != NULL ; i++) {
|
||||||
prnt("%02i %17.17s %5.5s %5.5s\n",i ,log_maskmap[i].name,
|
prnt("%02i %17.17s %5.5s %5.5s\n",i ,log_maskmap[i].name,
|
||||||
((g_log->debug_mask & log_maskmap[i].value)?"Y":"N"),
|
((g_log->debug_mask & log_maskmap[i].value)?"Y":"N"),
|
||||||
((g_log->matlab_mask & log_maskmap[i].value)?"Y":"N") );
|
((g_log->dump_mask & log_maskmap[i].value)?"Y":"N") );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (strcasestr(buf,"config") != NULL) {
|
if (strcasestr(buf,"config") != NULL) {
|
||||||
@@ -335,15 +336,15 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
|
|||||||
prnt("Available log levels: \n ");
|
prnt("Available log levels: \n ");
|
||||||
for (int i=0; log_level_names[i].name != NULL; i++)
|
for (int i=0; log_level_names[i].name != NULL; i++)
|
||||||
prnt("%s ",log_level_names[i].name);
|
prnt("%s ",log_level_names[i].name);
|
||||||
prnt("\n");
|
prnt("\n\n");
|
||||||
prnt("Available display options: \n ");
|
prnt("Available display options: \n ");
|
||||||
for (int i=0; log_options[i].name != NULL; i++)
|
for (int i=0; log_options[i].name != NULL; i++)
|
||||||
prnt("%s ",log_options[i].name);
|
prnt("%s ",log_options[i].name);
|
||||||
prnt("\n");
|
prnt("\n\n");
|
||||||
prnt("Available debug or matlab options: \n ");
|
prnt("Available debug and dump options: \n ");
|
||||||
for (int i=0; log_maskmap[i].name != NULL; i++)
|
for (int i=0; log_maskmap[i].name != NULL; i++)
|
||||||
prnt("%s ",log_maskmap[i].name);
|
prnt("%s ",log_maskmap[i].name);
|
||||||
prnt("\n");
|
prnt("\n\n");
|
||||||
proccmd_show("loglvl",debug,prnt);
|
proccmd_show("loglvl",debug,prnt);
|
||||||
proccmd_show("logopt",debug,prnt);
|
proccmd_show("logopt",debug,prnt);
|
||||||
proccmd_show("dbgopt",debug,prnt);
|
proccmd_show("dbgopt",debug,prnt);
|
||||||
@@ -375,7 +376,7 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
|
|||||||
else if (l == 2 && strcmp(logparam,"debug") == 0){
|
else if (l == 2 && strcmp(logparam,"debug") == 0){
|
||||||
optbit=map_str_to_int(log_maskmap,opt);
|
optbit=map_str_to_int(log_maskmap,opt);
|
||||||
if (optbit < 0) {
|
if (optbit < 0) {
|
||||||
prnt("debug flag %s unknown\n",opt);
|
prnt("module %s unknown\n",opt);
|
||||||
} else {
|
} else {
|
||||||
if (idx1 > 0)
|
if (idx1 > 0)
|
||||||
SET_LOG_DEBUG(optbit);
|
SET_LOG_DEBUG(optbit);
|
||||||
@@ -384,42 +385,51 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
|
|||||||
proccmd_show("dbgopt",debug,prnt);
|
proccmd_show("dbgopt",debug,prnt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (l == 2 && strcmp(logparam,"matlab") == 0){
|
else if (l == 2 && strcmp(logparam,"dump") == 0){
|
||||||
optbit=map_str_to_int(log_maskmap,opt);
|
optbit=map_str_to_int(log_maskmap,opt);
|
||||||
if (optbit < 0) {
|
if (optbit < 0) {
|
||||||
prnt("matlab flag %s unknown\n",opt);
|
prnt("module %s unknown\n",opt);
|
||||||
} else {
|
} else {
|
||||||
if (idx1 > 0)
|
if (idx1 > 0)
|
||||||
SET_LOG_MATLAB(optbit);
|
SET_LOG_DUMP(optbit);
|
||||||
else
|
else
|
||||||
CLEAR_LOG_MATLAB(optbit);
|
CLEAR_LOG_DUMP(optbit);
|
||||||
proccmd_show("dbgopt",debug,prnt);
|
proccmd_show("dbgopt",debug,prnt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (logparam != NULL) free(logparam);
|
if (logparam != NULL) free(logparam);
|
||||||
if (opt != NULL) free(opt);
|
if (opt != NULL) free(opt);
|
||||||
} else if ( s == 3 && logsubcmd != NULL) {
|
} else if ( s == 3 && logsubcmd != NULL) {
|
||||||
int level, interval;
|
int level, enable,filelog;
|
||||||
char *tmpstr=NULL;
|
char *tmpstr=NULL;
|
||||||
char *logparam=NULL;
|
char *logparam=NULL;
|
||||||
int l;
|
int l;
|
||||||
|
|
||||||
level = interval = -1;
|
level = OAILOG_DISABLE - 1;
|
||||||
|
filelog = -1;
|
||||||
|
enable=-1;
|
||||||
l=sscanf(logsubcmd,"%m[^'_']_%m[^'_']",&logparam,&tmpstr);
|
l=sscanf(logsubcmd,"%m[^'_']_%m[^'_']",&logparam,&tmpstr);
|
||||||
if (debug > 0)
|
if (debug > 0)
|
||||||
prnt("l=%i, %s %s\n",l,((logparam==NULL)?"\"\"":logparam), ((tmpstr==NULL)?"\"\"":tmpstr));
|
prnt("l=%i, %s %s\n",l,((logparam==NULL)?"\"\"":logparam), ((tmpstr==NULL)?"\"\"":tmpstr));
|
||||||
if (l ==2 ) {
|
if (l ==2 ) {
|
||||||
if (strcmp(logparam,"level") == 0) {
|
if (strcmp(logparam,"level") == 0) {
|
||||||
level=map_str_to_int(log_level_names,tmpstr);
|
level=map_str_to_int(log_level_names,tmpstr);
|
||||||
if (level < 0) prnt("level %s unknown\n",tmpstr);
|
if (level < 0) {
|
||||||
|
prnt("level %s unknown\n",tmpstr);
|
||||||
|
level=OAILOG_DISABLE - 1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
prnt("%s%s unknown log sub command \n",logparam, tmpstr);
|
prnt("%s%s unknown log sub command \n",logparam, tmpstr);
|
||||||
}
|
}
|
||||||
} else if (l ==1 ) {
|
} else if (l ==1 ) {
|
||||||
if (strcmp(logparam,"enable") == 0) {
|
if (strcmp(logparam,"enable") == 0) {
|
||||||
interval = 1;
|
enable=1;
|
||||||
} else if (strcmp(logparam,"disable") == 0) {
|
} else if (strcmp(logparam,"disable") == 0) {
|
||||||
interval = 0;
|
level=OAILOG_DISABLE;
|
||||||
|
} else if (strcmp(logparam,"file") == 0) {
|
||||||
|
filelog = 1 ;
|
||||||
|
} else if (strcmp(logparam,"nofile") == 0) {
|
||||||
|
filelog = 0 ;
|
||||||
} else {
|
} else {
|
||||||
prnt("%s%s unknown log sub command \n",logparam, tmpstr);
|
prnt("%s%s unknown log sub command \n",logparam, tmpstr);
|
||||||
}
|
}
|
||||||
@@ -429,20 +439,18 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
|
|||||||
if (logparam != NULL) free(logparam);
|
if (logparam != NULL) free(logparam);
|
||||||
if (tmpstr != NULL) free(tmpstr);
|
if (tmpstr != NULL) free(tmpstr);
|
||||||
for (int i=idx1; i<=idx2 ; i++) {
|
for (int i=idx1; i<=idx2 ; i++) {
|
||||||
if (level < 0) {
|
if (level >= OAILOG_DISABLE)
|
||||||
level=g_log->log_component[i].level;
|
set_log(i, level);
|
||||||
}
|
else if ( enable == 1)
|
||||||
if (interval < 0) {
|
set_log(i,g_log->log_component[i].savedlevel);
|
||||||
interval=g_log->log_component[i].interval;
|
else if ( filelog == 1 ) {
|
||||||
}
|
set_component_filelog(i);
|
||||||
set_log(i, level, interval);
|
} else if ( filelog == 0 ) {
|
||||||
prnt("log level comp %i %s set to %s (%s)\n",
|
close_component_filelog(i);
|
||||||
i,((g_log->log_component[i].name==NULL)?"":g_log->log_component[i].name),
|
}
|
||||||
map_int_to_str(log_level_names,g_log->log_component[i].level),
|
|
||||||
((g_log->log_component[i].interval>0)?"enabled":"disabled"));
|
}
|
||||||
|
proccmd_show("loglvl",debug,prnt);
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
prnt("%s: wrong log command...\n",buf);
|
prnt("%s: wrong log command...\n",buf);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,13 +48,15 @@ telnetshell_vardef_t proc_vardef[] = {
|
|||||||
show: display current log configuration \n\
|
show: display current log configuration \n\
|
||||||
online, noonline: enable or disable console logs \n\
|
online, noonline: enable or disable console logs \n\
|
||||||
enable, disable id1-id2: enable or disable logs for components index id1 to id2 \n\
|
enable, disable id1-id2: enable or disable logs for components index id1 to id2 \n\
|
||||||
|
file, nofile id1-id2: enable or disable redirecting logs to file for components index id1 to id2 \n\
|
||||||
|
logfile name depends on component name and is printed in the show command \n\
|
||||||
level_<level> id1-id2: set log level to <level> for components index id1 to id2 \n\
|
level_<level> id1-id2: set log level to <level> for components index id1 to id2 \n\
|
||||||
use the show command to get the authorized values for <level> and the list of component \
|
use the show command to get the authorized values for \n\
|
||||||
indexes that can be used for id1 and id2 \n\
|
<level> and the list of component indexes that can be used for id1 and id2 \n\
|
||||||
print_<opt> <0|1> disable or enable the \"opt\" log option, use the show command to get \
|
print_<opt> <0|1> disable or enable the \"opt\" log option, use the show command to get \
|
||||||
the available options\n\
|
the available options\n\
|
||||||
matlab_<opt> debug_<func> disable or enable the debug code or matlab file generation \
|
dump_<mod> debug_<mod > disable or enable the debug file generation or debug code\
|
||||||
for \"func\" function. use the show command to get the available options\n"
|
for \"mod\" module. use the show command to get the available modules\n"
|
||||||
|
|
||||||
#define PROCCMD_THREAD_HELP_STRING " thread sub commands: \n\
|
#define PROCCMD_THREAD_HELP_STRING " thread sub commands: \n\
|
||||||
<thread id> aff <core> : set affinity of thread <thread id> to core <core> \n\
|
<thread id> aff <core> : set affinity of thread <thread id> to core <core> \n\
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ int load_codinglib(void) {
|
|||||||
shlib_fdesc[ENCODE_SSE_FPTRIDX].fname= "threegpplte_turbo_encoder_sse";
|
shlib_fdesc[ENCODE_SSE_FPTRIDX].fname= "threegpplte_turbo_encoder_sse";
|
||||||
shlib_fdesc[ENCODE_C_FPTRIDX].fname= "threegpplte_turbo_encoder";
|
shlib_fdesc[ENCODE_C_FPTRIDX].fname= "threegpplte_turbo_encoder";
|
||||||
shlib_fdesc[ENCODE_INIT_SSE_FPTRIDX].fname= "init_encoder_sse";
|
shlib_fdesc[ENCODE_INIT_SSE_FPTRIDX].fname= "init_encoder_sse";
|
||||||
ret=load_module_shlib("coding",shlib_fdesc,DECODE_NUM_FPTR);
|
ret=load_module_shlib("coding",shlib_fdesc,DECODE_NUM_FPTR,NULL);
|
||||||
if (ret < 0) exit_fun("Error loading coding library");
|
if (ret < 0) exit_fun("Error loading coding library");
|
||||||
|
|
||||||
/* execute encoder/decoder init functions */
|
/* execute encoder/decoder init functions */
|
||||||
|
|||||||
@@ -67,15 +67,12 @@ void generate_qpsk_table(void)
|
|||||||
void init_lte_top(LTE_DL_FRAME_PARMS *frame_parms)
|
void init_lte_top(LTE_DL_FRAME_PARMS *frame_parms)
|
||||||
{
|
{
|
||||||
|
|
||||||
ccodedot11_init();
|
|
||||||
ccodedot11_init_inv();
|
|
||||||
|
|
||||||
ccodelte_init();
|
ccodelte_init();
|
||||||
ccodelte_init_inv();
|
ccodelte_init_inv();
|
||||||
|
|
||||||
|
init_dfts();
|
||||||
|
|
||||||
|
|
||||||
phy_generate_viterbi_tables();
|
|
||||||
phy_generate_viterbi_tables_lte();
|
phy_generate_viterbi_tables_lte();
|
||||||
|
|
||||||
load_codinglib();
|
load_codinglib();
|
||||||
@@ -86,6 +83,7 @@ void init_lte_top(LTE_DL_FRAME_PARMS *frame_parms)
|
|||||||
|
|
||||||
generate_64qam_table();
|
generate_64qam_table();
|
||||||
generate_16qam_table();
|
generate_16qam_table();
|
||||||
|
generate_qpsk_table();
|
||||||
generate_RIV_tables();
|
generate_RIV_tables();
|
||||||
|
|
||||||
init_unscrambling_lut();
|
init_unscrambling_lut();
|
||||||
|
|||||||
@@ -450,11 +450,11 @@ void phy_config_sib2_eNB(uint8_t Mod_id,
|
|||||||
} else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
|
} else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
|
||||||
fp->MBSFN_config[i].fourFrames_flag = 1;
|
fp->MBSFN_config[i].fourFrames_flag = 1;
|
||||||
fp->MBSFN_config[i].mbsfn_SubframeConfig =
|
fp->MBSFN_config[i].mbsfn_SubframeConfig =
|
||||||
mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]|
|
mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]|
|
||||||
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
|
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
|
||||||
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]<<16);
|
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]<<16);
|
||||||
|
|
||||||
LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %d\n", i,
|
LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %x\n", i,
|
||||||
fp->MBSFN_config[i].mbsfn_SubframeConfig);
|
fp->MBSFN_config[i].mbsfn_SubframeConfig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -165,11 +165,11 @@ void phy_config_sib2_ue(module_id_t Mod_id,int CC_id,
|
|||||||
} else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
|
} else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
|
||||||
fp->MBSFN_config[i].fourFrames_flag = 1;
|
fp->MBSFN_config[i].fourFrames_flag = 1;
|
||||||
fp->MBSFN_config[i].mbsfn_SubframeConfig =
|
fp->MBSFN_config[i].mbsfn_SubframeConfig =
|
||||||
mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]|
|
mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]|
|
||||||
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
|
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
|
||||||
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]<<16);
|
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]<<16);
|
||||||
|
|
||||||
LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %d\n", i,
|
LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %x\n", i,
|
||||||
fp->MBSFN_config[i].mbsfn_SubframeConfig);
|
fp->MBSFN_config[i].mbsfn_SubframeConfig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "phy_init.h"
|
#include "phy_init.h"
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
|
|
||||||
uint16_t dl_S_table_normal[10]={3,9,10,11,12,3,9,10,11,6};
|
uint16_t dl_S_table_normal[10]={3,9,10,11,12,3,9,10,11,6};
|
||||||
uint16_t dl_S_table_extended[10]={3,8,9,10,3,8,9,5,0,0};
|
uint16_t dl_S_table_extended[10]={3,8,9,10,3,8,9,5,0,0};
|
||||||
|
|||||||
@@ -373,6 +373,8 @@ void phy_config_request(PHY_Config_t *phy_config);
|
|||||||
int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf);
|
int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf);
|
||||||
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms);
|
void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms);
|
||||||
|
|
||||||
|
void init_dfts(void);
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -61,8 +61,8 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
temp = 0;
|
temp = 0;
|
||||||
|
|
||||||
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
||||||
Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<2)];
|
Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<1)];
|
||||||
Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<2)];
|
Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<1)];
|
||||||
temp += (Re*Re/2) + (Im*Im/2);
|
temp += (Re*Re/2) + (Im*Im/2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
// do not filter to have proactive timing adjustment
|
// do not filter to have proactive timing adjustment
|
||||||
max_pos_fil = max_pos;
|
max_pos_fil = max_pos;
|
||||||
|
|
||||||
if(subframe == 6)
|
if(subframe == 5)
|
||||||
{
|
{
|
||||||
diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3);
|
diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3);
|
||||||
|
|
||||||
|
|||||||
@@ -62,8 +62,8 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
temp = 0;
|
temp = 0;
|
||||||
|
|
||||||
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
|
||||||
Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<2)];
|
Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<1)];
|
||||||
Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<2)];
|
Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<1)];
|
||||||
temp += (Re*Re/2) + (Im*Im/2);
|
temp += (Re*Re/2) + (Im*Im/2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,7 +82,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
// do not filter to have proactive timing adjustment
|
// do not filter to have proactive timing adjustment
|
||||||
max_pos_fil = max_pos;
|
max_pos_fil = max_pos;
|
||||||
|
|
||||||
if(subframe == 6)
|
if(subframe == 5)
|
||||||
{
|
{
|
||||||
diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3);
|
diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3);
|
||||||
|
|
||||||
|
|||||||
@@ -274,11 +274,11 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
LOG_M_BEGIN(DEBUG_LTEESTIM);
|
if ( LOG_DUMPFLAG(DEBUG_LTEESTIM)){
|
||||||
LOG_M("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1);
|
LOG_M("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1);
|
||||||
LOG_M("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1);
|
LOG_M("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1);
|
||||||
LOG_M("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1);
|
LOG_M("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1);
|
||||||
LOG_M_END
|
}
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -460,18 +460,18 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
|
|||||||
LOG_I(PHY,"[UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d (%d dB)\n",sync_source,peak_pos,peak_val,dB_fixed(peak_val)/2);
|
LOG_I(PHY,"[UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d (%d dB)\n",sync_source,peak_pos,peak_val,dB_fixed(peak_val)/2);
|
||||||
|
|
||||||
|
|
||||||
LOG_M_BEGIN(DEBUG_LTEESTIM)
|
if ( LOG_DUMPFLAG(DEBUG_LTEESTIM)){
|
||||||
static int debug_cnt;
|
static int debug_cnt;
|
||||||
if (debug_cnt == 0) {
|
if (debug_cnt == 0) {
|
||||||
LOG_M("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2);
|
LOG_M("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2);
|
||||||
LOG_M("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2);
|
LOG_M("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2);
|
||||||
LOG_M("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2);
|
LOG_M("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2);
|
||||||
LOG_M("rxdata0.m","rxd0",rxdata[0],length<<1,1,1);
|
LOG_M("rxdata0.m","rxd0",rxdata[0],length<<1,1,1);
|
||||||
// exit(-1);
|
// exit(-1);
|
||||||
} else {
|
} else {
|
||||||
debug_cnt++;
|
debug_cnt++;
|
||||||
}
|
}
|
||||||
LOG_M_END
|
}
|
||||||
|
|
||||||
|
|
||||||
return(peak_pos);
|
return(peak_pos);
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ void lte_sync_timefreq(PHY_VARS_UE *ue,int band,unsigned int DL_freq)
|
|||||||
|
|
||||||
//compute frequency-domain representation of 6144-sample chunk
|
//compute frequency-domain representation of 6144-sample chunk
|
||||||
dft6144((int16_t *)rxp,
|
dft6144((int16_t *)rxp,
|
||||||
sp);
|
sp,1);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#include "PHY/defs_UE.h"
|
#include "PHY/defs_UE.h"
|
||||||
#include "PHY/phy_extern_ue.h"
|
#include "PHY/phy_extern_ue.h"
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
#include "PHY/sse_intrin.h"
|
#include "PHY/sse_intrin.h"
|
||||||
|
|
||||||
//#define k1 1000
|
//#define k1 1000
|
||||||
|
|||||||
@@ -25,9 +25,9 @@
|
|||||||
#include "PHY/defs_eNB.h"
|
#include "PHY/defs_eNB.h"
|
||||||
#include "PHY/defs_UE.h"
|
#include "PHY/defs_UE.h"
|
||||||
#include "PHY/impl_defs_top.h"
|
#include "PHY/impl_defs_top.h"
|
||||||
|
#include "common/utils/LOG/log.h"
|
||||||
//extern unsigned int lte_gold_table[3][20][2][14];
|
//extern unsigned int lte_gold_table[3][20][2][14];
|
||||||
//#define DEBUG_DL_CELL_SPEC
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
|
|||||||
else if ((p==1) && (l>0))
|
else if ((p==1) && (l>0))
|
||||||
nu = 0;
|
nu = 0;
|
||||||
else {
|
else {
|
||||||
printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
|
LOG_E(PHY,"lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,19 +85,19 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
|
|||||||
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
||||||
output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
||||||
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
|
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
|
||||||
#ifdef DEBUG_DL_CELL_SPEC
|
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
|
||||||
printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
|
LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
|
||||||
Ns,l,m,mprime_dword,mprime_qpsk_symb);
|
Ns,l,m,mprime_dword,mprime_qpsk_symb);
|
||||||
printf("index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
|
LOG_I(PHY,"index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
mprime++;
|
mprime++;
|
||||||
#ifdef DEBUG_DL_CELL_SPEC
|
|
||||||
|
|
||||||
|
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
|
||||||
if (m<4)
|
if (m<4)
|
||||||
printf("Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
|
LOG_I(PHY,"Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
|
||||||
|
|
||||||
#endif
|
}
|
||||||
k+=6;//b
|
k+=6;//b
|
||||||
|
|
||||||
if (k >= eNB->frame_parms.ofdm_symbol_size) {
|
if (k >= eNB->frame_parms.ofdm_symbol_size) {
|
||||||
@@ -105,7 +105,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
|
|||||||
k-=eNB->frame_parms.ofdm_symbol_size;
|
k-=eNB->frame_parms.ofdm_symbol_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
// printf("** k %d\n",k);
|
// LOG_I(PHY,"** k %d\n",k);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
@@ -143,7 +143,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *eNB,
|
|||||||
else if ((p==1) && (l>0))
|
else if ((p==1) && (l>0))
|
||||||
nu = 0;
|
nu = 0;
|
||||||
else {
|
else {
|
||||||
printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
|
LOG_E(PHY,"lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,27 +168,24 @@ int lte_dl_cell_spec(PHY_VARS_eNB *eNB,
|
|||||||
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
||||||
output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
||||||
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
|
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
|
||||||
#ifdef DEBUG_DL_CELL_SPEC
|
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
|
||||||
printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
|
LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
|
||||||
Ns,l,m,mprime_dword,mprime_qpsk_symb);
|
Ns,l,m,mprime_dword,mprime_qpsk_symb);
|
||||||
printf("index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
|
LOG_I(PHY,"index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
mprime++;
|
mprime++;
|
||||||
#ifdef DEBUG_DL_CELL_SPEC
|
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
|
||||||
|
if (m<4)
|
||||||
|
LOG_I(PHY,"Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
|
||||||
|
}
|
||||||
|
|
||||||
if (m<4)
|
|
||||||
printf("Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
k+=6;
|
k+=6;
|
||||||
|
|
||||||
if (k >= eNB->frame_parms.ofdm_symbol_size) {
|
if (k >= eNB->frame_parms.ofdm_symbol_size) {
|
||||||
k++; // skip DC carrier
|
k++; // skip DC carrier
|
||||||
k-=eNB->frame_parms.ofdm_symbol_size;
|
k-=eNB->frame_parms.ofdm_symbol_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
// printf("** k %d\n",k);
|
// LOG_I(PHY,"** k %d\n",k);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
@@ -231,21 +228,21 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *ue,
|
|||||||
|
|
||||||
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
||||||
output[k] = qpsk[(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
output[k] = qpsk[(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
||||||
#ifdef DEBUG_DL_CELL_SPEC
|
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
|
||||||
printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
|
LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
|
||||||
Ns,l,m,mprime_dword,mprime_qpsk_symb);
|
Ns,l,m,mprime_dword,mprime_qpsk_symb);
|
||||||
printf("index = %d (k %d)\n",(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
|
LOG_I(PHY,"index = %d (k %d)\n",(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
mprime++;
|
mprime++;
|
||||||
#ifdef DEBUG_DL_CELL_SPEC
|
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
|
||||||
|
|
||||||
if (m<4)
|
if (m<4)
|
||||||
printf("Ns %d l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
|
LOG_I(PHY,"Ns %d l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
|
||||||
|
|
||||||
#endif
|
}
|
||||||
k++;
|
k++;
|
||||||
// printf("** k %d\n",k);
|
// LOG_I(PHY,"** k %d\n",k);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
#include "lte_refsig.h"
|
#include "lte_refsig.h"
|
||||||
#include "PHY/defs_eNB.h"
|
#include "PHY/defs_eNB.h"
|
||||||
#include "PHY/defs_UE.h"
|
#include "PHY/defs_UE.h"
|
||||||
#include "log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
#include "PHY/impl_defs_top.h"
|
#include "PHY/impl_defs_top.h"
|
||||||
|
|
||||||
//extern unsigned int lte_gold_table[3][20][2][14];
|
//extern unsigned int lte_gold_table[3][20][2][14];
|
||||||
|
|||||||
@@ -54,9 +54,9 @@ void lte_gold_mbsfn(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_mbsfn_tabl
|
|||||||
for (l=0; l<3; l++) {
|
for (l=0; l<3; l++) {
|
||||||
|
|
||||||
if (l==0)
|
if (l==0)
|
||||||
x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + 2 + (7*(1+(sfn>>1)))))<<9); //cinit
|
x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + 2 + (7*(1+(sfn<<1)))))<<9); //cinit
|
||||||
else
|
else
|
||||||
x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + ((l-1)<<2) + (7*(2+(sfn>>1)))))<<9); //cinit
|
x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + ((l-1)<<2) + (7*(2+(sfn<<1)))))<<9); //cinit
|
||||||
|
|
||||||
//x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit
|
//x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit
|
||||||
//n = 0
|
//n = 0
|
||||||
|
|||||||
@@ -346,6 +346,13 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
|
|||||||
y[0] = &yseq0[0];
|
y[0] = &yseq0[0];
|
||||||
y[1] = &yseq1[0];
|
y[1] = &yseq1[0];
|
||||||
|
|
||||||
|
#if BASIC_SIMULATOR
|
||||||
|
/* this should be the normal case
|
||||||
|
* but it has to be validated for all the various cases
|
||||||
|
* so let's just do it for the basic simulator
|
||||||
|
*/
|
||||||
|
memset(e, 2, DCI_BITS_MAX);
|
||||||
|
#else
|
||||||
#if 1
|
#if 1
|
||||||
// reset all bits to <NIL>, here we set <NIL> elements as 2
|
// reset all bits to <NIL>, here we set <NIL> elements as 2
|
||||||
// memset(e, 2, DCI_BITS_MAX);
|
// memset(e, 2, DCI_BITS_MAX);
|
||||||
@@ -358,6 +365,7 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
|
|||||||
* (not sure about this, to be checked somehow)
|
* (not sure about this, to be checked somehow)
|
||||||
*/
|
*/
|
||||||
//memset(e, 0, DCI_BITS_MAX);
|
//memset(e, 0, DCI_BITS_MAX);
|
||||||
|
#endif /* BASIC_SIMULATOR */
|
||||||
|
|
||||||
e_ptr = e;
|
e_ptr = e;
|
||||||
|
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ void fill_pdcch_order(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_a
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_I(PHY,"%d.%d: DCI 1A: rnti %x, PDCCH order to do PRACH\n",
|
LOG_T(PHY,"%d.%d: DCI 1A: rnti %x, PDCCH order to do PRACH\n",
|
||||||
proc->frame_tx, proc->subframe_tx, rel8->rnti);
|
proc->frame_tx, proc->subframe_tx, rel8->rnti);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1791,7 +1791,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc,
|
|||||||
|
|
||||||
#ifdef T_TRACER
|
#ifdef T_TRACER
|
||||||
T(T_ENB_PHY_ULSCH_UE_DCI, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe),
|
T(T_ENB_PHY_ULSCH_UE_DCI, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe),
|
||||||
T_INT(pdu->dci_pdu_rel8.rnti), T_INT(((frame*10+subframe+4) % 8) /* TODO: correct harq pid */),
|
T_INT(pdu->dci_pdu_rel8.rnti), T_INT(pdu->dci_pdu_rel8.harq_pid),
|
||||||
T_INT(mcs), T_INT(-1 /* TODO: remove round? */),
|
T_INT(mcs), T_INT(-1 /* TODO: remove round? */),
|
||||||
T_INT(pdu->dci_pdu_rel8.resource_block_start),
|
T_INT(pdu->dci_pdu_rel8.resource_block_start),
|
||||||
T_INT(pdu->dci_pdu_rel8.number_of_resource_block),
|
T_INT(pdu->dci_pdu_rel8.number_of_resource_block),
|
||||||
|
|||||||
@@ -511,16 +511,15 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
|
|||||||
proc->tep[i].total_worker = worker_num;
|
proc->tep[i].total_worker = worker_num;
|
||||||
proc->tep[i].current_worker = i;
|
proc->tep[i].current_worker = i;
|
||||||
if (pthread_cond_signal(&proc->tep[i].cond_te) != 0) {
|
if (pthread_cond_signal(&proc->tep[i].cond_te) != 0) {
|
||||||
printf("[eNB] ERROR pthread_cond_signal for te thread exit\n");
|
printf("[eNB] ERROR pthread_cond_signal for te thread exit\n");
|
||||||
exit_fun( "ERROR pthread_cond_signal" );
|
exit_fun( "ERROR pthread_cond_signal" );
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fill in the "e"-sequence from 36-212, V8.6 2009-03, p. 16-17 (for each "e") and concatenate the
|
// Fill in the "e"-sequence from 36-212, V8.6 2009-03, p. 16-17 (for each "e") and concatenate the
|
||||||
// outputs for each code segment, see Section 5.1.5 p.20
|
// outputs for each code segment, see Section 5.1.5 p.20
|
||||||
|
|
||||||
for (r=0,r_offset=0; r<dlsch->harq_processes[harq_pid]->C; r++) {
|
for (r=0,r_offset=0; r<dlsch->harq_processes[harq_pid]->C; r++) {
|
||||||
|
|
||||||
// get information for E for the segments that are handled by the worker thread
|
// get information for E for the segments that are handled by the worker thread
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
#include "PHY/LTE_TRANSPORT/transport_proto.h"
|
#include "PHY/LTE_TRANSPORT/transport_proto.h"
|
||||||
#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
|
#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
|
||||||
//#define DEBUG_DLSCH_MODULATION
|
//#define DEBUG_DLSCH_MODULATION
|
||||||
#define NEW_ALLOC_RE
|
//#define NEW_ALLOC_RE
|
||||||
|
|
||||||
//#define is_not_pilot(pilots,re,nushift,use2ndpilots) ((pilots==0) || ((re!=nushift) && (re!=nushift+6)&&((re!=nushift+3)||(use2ndpilots==1))&&((re!=nushift+9)||(use2ndpilots==1)))?1:0)
|
//#define is_not_pilot(pilots,re,nushift,use2ndpilots) ((pilots==0) || ((re!=nushift) && (re!=nushift+6)&&((re!=nushift+3)||(use2ndpilots==1))&&((re!=nushift+9)||(use2ndpilots==1)))?1:0)
|
||||||
|
|
||||||
@@ -165,10 +165,19 @@ int allocate_REs_in_RB_no_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint32_t tti_offset;
|
uint32_t tti_offset;
|
||||||
uint8_t re;
|
uint8_t re;
|
||||||
uint8_t *x0p;
|
uint8_t *x0p;
|
||||||
|
uint8_t first_re,last_re;
|
||||||
|
|
||||||
|
last_re=12;
|
||||||
|
first_re=0;
|
||||||
|
if (skip_half==1)
|
||||||
|
last_re=6;
|
||||||
|
else if (skip_half==2)
|
||||||
|
first_re=6;
|
||||||
|
re=first_re;
|
||||||
|
|
||||||
if (skip_dc == 0) {
|
if (skip_dc == 0) {
|
||||||
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset,re=0;
|
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
|
||||||
re<12;
|
re<last_re;
|
||||||
re++,x0p+=2,tti_offset++) {
|
re++,x0p+=2,tti_offset++) {
|
||||||
|
|
||||||
qpsk_table_offset_re=x0p[0];
|
qpsk_table_offset_re=x0p[0];
|
||||||
@@ -199,8 +208,16 @@ int allocate_REs_in_RB_no_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*re_allocated = *re_allocated + 12;
|
if(skip_half!=0)
|
||||||
*jj=*jj + 24;
|
{
|
||||||
|
*re_allocated = *re_allocated + 6;
|
||||||
|
*jj=*jj + 12;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*re_allocated = *re_allocated + 12;
|
||||||
|
*jj=*jj + 24;
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -238,12 +255,20 @@ int allocate_REs_in_RB_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint32_t tti_offset;
|
uint32_t tti_offset;
|
||||||
uint8_t re;
|
uint8_t re;
|
||||||
uint8_t *x0p;
|
uint8_t *x0p;
|
||||||
|
uint8_t first_re,last_re;
|
||||||
|
|
||||||
|
last_re=12;
|
||||||
|
first_re=0;
|
||||||
|
if (skip_half==1)
|
||||||
|
last_re=6;
|
||||||
|
else if (skip_half==2)
|
||||||
|
first_re=6;
|
||||||
|
re=first_re+P1_SHIFT[0];
|
||||||
|
|
||||||
if (skip_dc == 0) {
|
if (skip_dc == 0) {
|
||||||
// printf("pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
|
// printf("pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
|
||||||
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+P1_SHIFT[0],re=P1_SHIFT[0];
|
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
|
||||||
re<12;
|
re<last_re;
|
||||||
x0p+=2) {
|
x0p+=2) {
|
||||||
|
|
||||||
qpsk_table_offset_re=x0p[0];
|
qpsk_table_offset_re=x0p[0];
|
||||||
@@ -260,8 +285,8 @@ int allocate_REs_in_RB_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
re<6;
|
re<6;
|
||||||
x0p+=2) {
|
x0p+=2) {
|
||||||
|
|
||||||
qpsk_table_offset_re+=x0p[0];
|
qpsk_table_offset_re=x0p[0];
|
||||||
qpsk_table_offset_im+=x0p[1];
|
qpsk_table_offset_im=x0p[1];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qpsk_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qpsk_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im];
|
||||||
tti_offset+=P1_SHIFT[re+1];
|
tti_offset+=P1_SHIFT[re+1];
|
||||||
@@ -272,16 +297,24 @@ int allocate_REs_in_RB_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
re<12;
|
re<12;
|
||||||
x0p+=2) {
|
x0p+=2) {
|
||||||
|
|
||||||
qpsk_table_offset_re+=x0p[0];
|
qpsk_table_offset_re=x0p[0];
|
||||||
qpsk_table_offset_im+=x0p[1];
|
qpsk_table_offset_im=x0p[1];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qpsk_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qpsk_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qpsk_table_offset_im];
|
||||||
tti_offset+=P1_SHIFT[re+1];
|
tti_offset+=P1_SHIFT[re+1];
|
||||||
re+=P1_SHIFT[re+1];
|
re+=P1_SHIFT[re+1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*re_allocated = *re_allocated + 10;
|
if(skip_half!=0)
|
||||||
*jj=*jj + 20;
|
{
|
||||||
|
*re_allocated = *re_allocated + 5;
|
||||||
|
*jj=*jj + 10;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*re_allocated = *re_allocated + 10;
|
||||||
|
*jj=*jj + 20;
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -317,10 +350,19 @@ int allocate_REs_in_RB_no_pilots_16QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint32_t tti_offset;
|
uint32_t tti_offset;
|
||||||
uint8_t re;
|
uint8_t re;
|
||||||
uint8_t *x0p;
|
uint8_t *x0p;
|
||||||
|
uint8_t first_re,last_re;
|
||||||
|
|
||||||
|
last_re=12;
|
||||||
|
first_re=0;
|
||||||
|
if (skip_half==1)
|
||||||
|
last_re=6;
|
||||||
|
else if (skip_half==2)
|
||||||
|
first_re=6;
|
||||||
|
re=first_re;
|
||||||
|
|
||||||
if (skip_dc == 0) {
|
if (skip_dc == 0) {
|
||||||
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset,re=0;
|
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
|
||||||
re<12;
|
re<last_re;
|
||||||
re++,x0p+=4,tti_offset++) {
|
re++,x0p+=4,tti_offset++) {
|
||||||
|
|
||||||
qam16_table_offset_re=TWO[x0p[0]];
|
qam16_table_offset_re=TWO[x0p[0]];
|
||||||
@@ -357,8 +399,16 @@ int allocate_REs_in_RB_no_pilots_16QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qam16_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qam16_table_offset_im];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*re_allocated = *re_allocated + 12;
|
if(skip_half!=0)
|
||||||
*jj=*jj + 48;
|
{
|
||||||
|
*re_allocated = *re_allocated + 6;
|
||||||
|
*jj=*jj + 24;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*re_allocated = *re_allocated + 12;
|
||||||
|
*jj=*jj + 48;
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -396,12 +446,21 @@ int allocate_REs_in_RB_pilots_16QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint32_t tti_offset;
|
uint32_t tti_offset;
|
||||||
uint8_t re;
|
uint8_t re;
|
||||||
uint8_t *x0p;
|
uint8_t *x0p;
|
||||||
|
uint8_t first_re,last_re;
|
||||||
|
|
||||||
|
last_re=12;
|
||||||
|
first_re=0;
|
||||||
|
if (skip_half==1)
|
||||||
|
last_re=6;
|
||||||
|
else if (skip_half==2)
|
||||||
|
first_re=6;
|
||||||
|
re=first_re+P1_SHIFT[0];
|
||||||
|
|
||||||
|
|
||||||
if (skip_dc == 0) {
|
if (skip_dc == 0) {
|
||||||
// LOG_I(PHY,"pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
|
// LOG_I(PHY,"pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
|
||||||
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+P1_SHIFT[0],re=P1_SHIFT[0];
|
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
|
||||||
re<12;
|
re<last_re;
|
||||||
x0p+=4) {
|
x0p+=4) {
|
||||||
|
|
||||||
qam16_table_offset_re=TWO[x0p[0]];
|
qam16_table_offset_re=TWO[x0p[0]];
|
||||||
@@ -444,8 +503,16 @@ int allocate_REs_in_RB_pilots_16QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
re+=P1_SHIFT[re+1];
|
re+=P1_SHIFT[re+1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*re_allocated = *re_allocated + 10;
|
if(skip_half!=0)
|
||||||
*jj=*jj + 40;
|
{
|
||||||
|
*re_allocated = *re_allocated + 5;
|
||||||
|
*jj=*jj + 20;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*re_allocated = *re_allocated + 10;
|
||||||
|
*jj=*jj + 40;
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -482,10 +549,16 @@ int allocate_REs_in_RB_no_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint32_t tti_offset;
|
uint32_t tti_offset;
|
||||||
uint8_t re;
|
uint8_t re;
|
||||||
uint8_t *x0p;
|
uint8_t *x0p;
|
||||||
|
uint8_t first_re;
|
||||||
|
|
||||||
|
first_re=0;
|
||||||
|
if (skip_half==2)
|
||||||
|
first_re=6;
|
||||||
|
re=first_re;
|
||||||
|
|
||||||
if (skip_dc == 0) {
|
if (skip_dc == 0) {
|
||||||
|
|
||||||
x0p=&x0[*jj],tti_offset=symbol_offset+re_offset;
|
x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
|
||||||
|
|
||||||
/* for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset,re=0;
|
/* for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset,re=0;
|
||||||
re<12;
|
re<12;
|
||||||
@@ -521,36 +594,38 @@ int allocate_REs_in_RB_no_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
((int16_t *)&txdataF[0][tti_offset])[10]=qam_table_s0[qam64_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[10]=qam_table_s0[qam64_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[11]=qam_table_s0[qam64_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[11]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
|
||||||
qam64_table_offset_re=(x0p[36]<<2)|(x0p[38]<<1)|x0p[40];
|
if(skip_half==0)
|
||||||
qam64_table_offset_im=(x0p[37]<<2)|(x0p[39]<<1)|x0p[41];
|
{
|
||||||
((int16_t *)&txdataF[0][tti_offset])[12]=qam_table_s0[qam64_table_offset_re];
|
qam64_table_offset_re=(x0p[36]<<2)|(x0p[38]<<1)|x0p[40];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[13]=qam_table_s0[qam64_table_offset_im];
|
qam64_table_offset_im=(x0p[37]<<2)|(x0p[39]<<1)|x0p[41];
|
||||||
|
((int16_t *)&txdataF[0][tti_offset])[12]=qam_table_s0[qam64_table_offset_re];
|
||||||
|
((int16_t *)&txdataF[0][tti_offset])[13]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
|
||||||
qam64_table_offset_re=(x0p[42]<<2)|(x0p[44]<<1)|x0p[46];
|
qam64_table_offset_re=(x0p[42]<<2)|(x0p[44]<<1)|x0p[46];
|
||||||
qam64_table_offset_im=(x0p[43]<<2)|(x0p[45]<<1)|x0p[47];
|
qam64_table_offset_im=(x0p[43]<<2)|(x0p[45]<<1)|x0p[47];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[14]=qam_table_s0[qam64_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[14]=qam_table_s0[qam64_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[15]=qam_table_s0[qam64_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[15]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
|
||||||
qam64_table_offset_re=(x0p[48]<<2)|(x0p[50]<<1)|x0p[52];
|
qam64_table_offset_re=(x0p[48]<<2)|(x0p[50]<<1)|x0p[52];
|
||||||
qam64_table_offset_im=(x0p[49]<<2)|(x0p[51]<<1)|x0p[53];
|
qam64_table_offset_im=(x0p[49]<<2)|(x0p[51]<<1)|x0p[53];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[16]=qam_table_s0[qam64_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[16]=qam_table_s0[qam64_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[17]=qam_table_s0[qam64_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[17]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
|
||||||
qam64_table_offset_re=(x0p[54]<<2)|(x0p[56]<<1)|x0p[58];
|
qam64_table_offset_re=(x0p[54]<<2)|(x0p[56]<<1)|x0p[58];
|
||||||
qam64_table_offset_im=(x0p[55]<<2)|(x0p[57]<<1)|x0p[59];
|
qam64_table_offset_im=(x0p[55]<<2)|(x0p[57]<<1)|x0p[59];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[18]=qam_table_s0[qam64_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[18]=qam_table_s0[qam64_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[19]=qam_table_s0[qam64_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[19]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
|
||||||
qam64_table_offset_re=(x0p[60]<<2)|(x0p[62]<<1)|x0p[64];
|
qam64_table_offset_re=(x0p[60]<<2)|(x0p[62]<<1)|x0p[64];
|
||||||
qam64_table_offset_im=(x0p[61]<<2)|(x0p[63]<<1)|x0p[65];
|
qam64_table_offset_im=(x0p[61]<<2)|(x0p[63]<<1)|x0p[65];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[20]=qam_table_s0[qam64_table_offset_re];
|
((int16_t *)&txdataF[0][tti_offset])[20]=qam_table_s0[qam64_table_offset_re];
|
||||||
((int16_t *)&txdataF[0][tti_offset])[21]=qam_table_s0[qam64_table_offset_im];
|
((int16_t *)&txdataF[0][tti_offset])[21]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
|
||||||
qam64_table_offset_re=(x0p[66]<<2)|(x0p[68]<<1)|x0p[70];
|
|
||||||
qam64_table_offset_im=(x0p[67]<<2)|(x0p[69]<<1)|x0p[71];
|
|
||||||
((int16_t *)&txdataF[0][tti_offset])[22]=qam_table_s0[qam64_table_offset_re];
|
|
||||||
((int16_t *)&txdataF[0][tti_offset])[23]=qam_table_s0[qam64_table_offset_im];
|
|
||||||
|
|
||||||
|
qam64_table_offset_re=(x0p[66]<<2)|(x0p[68]<<1)|x0p[70];
|
||||||
|
qam64_table_offset_im=(x0p[67]<<2)|(x0p[69]<<1)|x0p[71];
|
||||||
|
((int16_t *)&txdataF[0][tti_offset])[22]=qam_table_s0[qam64_table_offset_re];
|
||||||
|
((int16_t *)&txdataF[0][tti_offset])[23]=qam_table_s0[qam64_table_offset_im];
|
||||||
|
}
|
||||||
|
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
@@ -584,8 +659,16 @@ int allocate_REs_in_RB_no_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*re_allocated = *re_allocated + 12;
|
if(skip_half!=0)
|
||||||
*jj=*jj + 72;
|
{
|
||||||
|
*re_allocated = *re_allocated + 6;
|
||||||
|
*jj=*jj + 36;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*re_allocated = *re_allocated + 12;
|
||||||
|
*jj=*jj + 72;
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -623,12 +706,21 @@ int allocate_REs_in_RB_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint32_t tti_offset;
|
uint32_t tti_offset;
|
||||||
uint8_t re;
|
uint8_t re;
|
||||||
uint8_t *x0p;
|
uint8_t *x0p;
|
||||||
|
uint8_t first_re,last_re;
|
||||||
|
|
||||||
|
last_re=12;
|
||||||
|
first_re=0;
|
||||||
|
if (skip_half==1)
|
||||||
|
last_re=6;
|
||||||
|
else if (skip_half==2)
|
||||||
|
first_re=6;
|
||||||
|
re=first_re+P1_SHIFT[0];
|
||||||
|
|
||||||
|
|
||||||
if (skip_dc == 0) {
|
if (skip_dc == 0) {
|
||||||
// LOG_I(PHY,"pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
|
// LOG_I(PHY,"pilots: P1_SHIFT[0] %d\n",P1_SHIFT[0]);
|
||||||
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+P1_SHIFT[0],re=P1_SHIFT[0];
|
for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
|
||||||
re<12;
|
re<last_re;
|
||||||
x0p+=6) {
|
x0p+=6) {
|
||||||
|
|
||||||
qam64_table_offset_re=FOUR[x0p[0]];
|
qam64_table_offset_re=FOUR[x0p[0]];
|
||||||
@@ -677,8 +769,16 @@ int allocate_REs_in_RB_pilots_64QAM_siso(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
re+=P1_SHIFT[re+1];
|
re+=P1_SHIFT[re+1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*re_allocated = *re_allocated + 10;
|
if(skip_half!=0)
|
||||||
*jj=*jj + 60;
|
{
|
||||||
|
*re_allocated = *re_allocated + 5;
|
||||||
|
*jj=*jj + 30;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*re_allocated = *re_allocated + 10;
|
||||||
|
*jj=*jj + 60;
|
||||||
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@@ -706,6 +806,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
int *P2_SHIFT)
|
int *P2_SHIFT)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
uint8_t *x0 = NULL;
|
uint8_t *x0 = NULL;
|
||||||
MIMO_mode_t mimo_mode = -1;
|
MIMO_mode_t mimo_mode = -1;
|
||||||
|
|
||||||
@@ -2099,10 +2200,33 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
uint8_t mod_order0 = 0;
|
uint8_t mod_order0 = 0;
|
||||||
uint8_t mod_order1 = 0;
|
uint8_t mod_order1 = 0;
|
||||||
int16_t amp_rho_a, amp_rho_b;
|
int16_t amp_rho_a, amp_rho_b;
|
||||||
int16_t qam16_table_a0[4],qam64_table_a0[8],qam16_table_b0[4],qam64_table_b0[8];//qpsk_table_a0[2],qpsk_table_b0[2]
|
int16_t qam16_table_a0[4],qam64_table_a0[8],qam16_table_b0[4],qam64_table_b0[8],qpsk_table_a0[2],qpsk_table_b0[2];
|
||||||
int16_t qam16_table_a1[4],qam64_table_a1[8],qam16_table_b1[4],qam64_table_b1[8];//qpsk_table_a1[2],qpsk_table_b1[2]
|
int16_t qam16_table_a1[4],qam64_table_a1[8],qam16_table_b1[4],qam64_table_b1[8],qpsk_table_a1[2],qpsk_table_b1[2];
|
||||||
|
|
||||||
int16_t *qam_table_s0=NULL,*qam_table_s1=NULL;
|
int16_t *qam_table_s0=NULL,*qam_table_s1=NULL;
|
||||||
|
int (*allocate_REs)(PHY_VARS_eNB*,
|
||||||
|
int **,
|
||||||
|
uint32_t*,
|
||||||
|
uint32_t*,
|
||||||
|
uint16_t,
|
||||||
|
uint32_t,
|
||||||
|
LTE_DL_eNB_HARQ_t *,
|
||||||
|
LTE_DL_eNB_HARQ_t *,
|
||||||
|
uint8_t,
|
||||||
|
int16_t,
|
||||||
|
uint8_t,
|
||||||
|
int16_t *,
|
||||||
|
int16_t *,
|
||||||
|
uint32_t *,
|
||||||
|
uint8_t,
|
||||||
|
uint8_t,
|
||||||
|
uint8_t,
|
||||||
|
uint8_t,
|
||||||
|
uint8_t,
|
||||||
|
int *,
|
||||||
|
int *);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int P1_SHIFT[13],P2_SHIFT[13];
|
int P1_SHIFT[13],P2_SHIFT[13];
|
||||||
int offset,nushiftmod3;
|
int offset,nushiftmod3;
|
||||||
@@ -2201,7 +2325,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
amp_rho_b = (int16_t)(((int32_t)amp*dlsch1->sqrt_rho_b)>>13);
|
amp_rho_b = (int16_t)(((int32_t)amp*dlsch1->sqrt_rho_b)>>13);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if(mod_order0 == 2)
|
if(mod_order0 == 2)
|
||||||
{
|
{
|
||||||
for(i=0;i<2;i++)
|
for(i=0;i<2;i++)
|
||||||
{
|
{
|
||||||
@@ -2209,7 +2333,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
qpsk_table_b0[i] = (int16_t)(((int32_t)qpsk_table[i]*amp_rho_b)>>15);
|
qpsk_table_b0[i] = (int16_t)(((int32_t)qpsk_table[i]*amp_rho_b)>>15);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else*/ if (mod_order0 == 4)
|
else if (mod_order0 == 4)
|
||||||
for (i=0;i<4; i++) {
|
for (i=0;i<4; i++) {
|
||||||
qam16_table_a0[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_a)>>15);
|
qam16_table_a0[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_a)>>15);
|
||||||
qam16_table_b0[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_b)>>15);
|
qam16_table_b0[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_b)>>15);
|
||||||
@@ -2220,14 +2344,14 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
qam64_table_b0[i] = (int16_t)(((int32_t)qam64_table[i]*amp_rho_b)>>15);
|
qam64_table_b0[i] = (int16_t)(((int32_t)qam64_table[i]*amp_rho_b)>>15);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (mod_order1 == 2)
|
if (mod_order1 == 2)
|
||||||
{
|
{
|
||||||
for (i=0; i<2; i++) {
|
for (i=0; i<2; i++) {
|
||||||
qpsk_table_a1[i] = (int16_t)(((int32_t)qpsk_table[i]*amp_rho_a)>>15);
|
qpsk_table_a1[i] = (int16_t)(((int32_t)qpsk_table[i]*amp_rho_a)>>15);
|
||||||
qpsk_table_b1[i] = (int16_t)(((int32_t)qpsk_table[i]*amp_rho_b)>>15);
|
qpsk_table_b1[i] = (int16_t)(((int32_t)qpsk_table[i]*amp_rho_b)>>15);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else*/ if (mod_order1 == 4)
|
else if (mod_order1 == 4)
|
||||||
for (i=0; i<4; i++) {
|
for (i=0; i<4; i++) {
|
||||||
qam16_table_a1[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_a)>>15);
|
qam16_table_a1[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_a)>>15);
|
||||||
qam16_table_b1[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_b)>>15);
|
qam16_table_b1[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_b)>>15);
|
||||||
@@ -2348,24 +2472,36 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
|
|
||||||
re_offset = frame_parms->first_carrier_offset;
|
re_offset = frame_parms->first_carrier_offset;
|
||||||
symbol_offset = (uint32_t)frame_parms->ofdm_symbol_size*(l+(subframe_offset*nsymb));
|
symbol_offset = (uint32_t)frame_parms->ofdm_symbol_size*(l+(subframe_offset*nsymb));
|
||||||
|
allocate_REs = allocate_REs_in_RB;
|
||||||
|
|
||||||
switch (mod_order0) {
|
switch (mod_order0) {
|
||||||
case 2:
|
case 2:
|
||||||
qam_table_s0 = NULL;
|
qam_table_s0 = NULL;
|
||||||
/*if (pilots) {
|
if (pilots) {
|
||||||
qam_table_s0 = qpsk_table_b0;
|
qam_table_s0 = qpsk_table_b0;
|
||||||
|
allocate_REs = (dlsch0->harq_processes[harq_pid]->mimo_mode == SISO) ?
|
||||||
|
allocate_REs_in_RB_pilots_QPSK_siso :
|
||||||
|
allocate_REs_in_RB;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
qam_table_s0 = qpsk_table_a0;
|
qam_table_s0 = qpsk_table_a0;
|
||||||
|
allocate_REs = (dlsch0->harq_processes[harq_pid]->mimo_mode == SISO) ?
|
||||||
}*/
|
allocate_REs_in_RB_no_pilots_QPSK_siso :
|
||||||
|
allocate_REs_in_RB;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if (pilots) {
|
if (pilots) {
|
||||||
qam_table_s0 = qam16_table_b0;
|
qam_table_s0 = qam16_table_b0;
|
||||||
|
allocate_REs = (dlsch0->harq_processes[harq_pid]->mimo_mode == SISO) ?
|
||||||
|
allocate_REs_in_RB_pilots_16QAM_siso :
|
||||||
|
allocate_REs_in_RB;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
qam_table_s0 = qam16_table_a0;
|
qam_table_s0 = qam16_table_a0;
|
||||||
|
allocate_REs = (dlsch0->harq_processes[harq_pid]->mimo_mode == SISO) ?
|
||||||
|
allocate_REs_in_RB_no_pilots_16QAM_siso :
|
||||||
|
allocate_REs_in_RB;
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -2373,23 +2509,42 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
case 6:
|
case 6:
|
||||||
if (pilots) {
|
if (pilots) {
|
||||||
qam_table_s0 = qam64_table_b0;
|
qam_table_s0 = qam64_table_b0;
|
||||||
|
allocate_REs = (dlsch0->harq_processes[harq_pid]->mimo_mode == SISO) ?
|
||||||
|
allocate_REs_in_RB_pilots_64QAM_siso :
|
||||||
|
allocate_REs_in_RB;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
qam_table_s0 = qam64_table_a0;
|
qam_table_s0 = qam64_table_a0;
|
||||||
|
allocate_REs = (dlsch0->harq_processes[harq_pid]->mimo_mode == SISO) ?
|
||||||
|
allocate_REs_in_RB_no_pilots_64QAM_siso :
|
||||||
|
allocate_REs_in_RB;
|
||||||
}
|
}
|
||||||
|
/* TODO: this is a quick hack to be removed. There is a problem
|
||||||
|
* with above code that needs to be analyzed and fixed. In the
|
||||||
|
* meantime, let's use the generic function.
|
||||||
|
*/
|
||||||
|
//allocate_REs = allocate_REs_in_RB;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* TODO: hack, to be removed. The power is too different from
|
||||||
|
* previous version. Some more work/validation is needed before
|
||||||
|
* we switch to the new version.
|
||||||
|
*/
|
||||||
|
//if (frame_parms->N_RB_DL==25)
|
||||||
|
//allocate_REs = allocate_REs_in_RB;
|
||||||
|
|
||||||
switch (mod_order1) {
|
switch (mod_order1) {
|
||||||
case 2:
|
case 2:
|
||||||
qam_table_s1 = NULL;
|
qam_table_s1 = NULL;
|
||||||
/*if (pilots) {
|
allocate_REs = allocate_REs_in_RB;
|
||||||
|
if (pilots) {
|
||||||
qam_table_s1 = qpsk_table_b1;
|
qam_table_s1 = qpsk_table_b1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
qam_table_s1 = qpsk_table_a1;
|
qam_table_s1 = qpsk_table_a1;
|
||||||
}*/
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if (pilots) {
|
if (pilots) {
|
||||||
@@ -2432,8 +2587,6 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
skip_half = check_skiphalf(rb,subframe_offset,frame_parms,l,nsymb);
|
skip_half = check_skiphalf(rb,subframe_offset,frame_parms,l,nsymb);
|
||||||
skip_dc = check_skip_dc(rb,frame_parms);
|
skip_dc = check_skip_dc(rb,frame_parms);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (dlsch0) {
|
if (dlsch0) {
|
||||||
if (dlsch0_harq->Nlayers>1) {
|
if (dlsch0_harq->Nlayers>1) {
|
||||||
LOG_E(PHY,"Nlayers %d: re_offset %d, symbol %d offset %d\n",dlsch0_harq->Nlayers,re_offset,l,symbol_offset);
|
LOG_E(PHY,"Nlayers %d: re_offset %d, symbol %d offset %d\n",dlsch0_harq->Nlayers,re_offset,l,symbol_offset);
|
||||||
@@ -2465,7 +2618,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
|
|||||||
rb);
|
rb);
|
||||||
|
|
||||||
|
|
||||||
allocate_REs_in_RB(phy_vars_eNB,
|
allocate_REs(phy_vars_eNB,
|
||||||
txdataF,
|
txdataF,
|
||||||
&jj,
|
&jj,
|
||||||
&jj2,
|
&jj2,
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par
|
|||||||
|
|
||||||
uint32_t period;
|
uint32_t period;
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
uint8_t j;
|
||||||
|
|
||||||
// LOG_D(PHY,"is_pmch_subframe: frame %d, subframe %d, num_MBSFN_config %d\n",
|
// LOG_D(PHY,"is_pmch_subframe: frame %d, subframe %d, num_MBSFN_config %d\n",
|
||||||
// frame,subframe,frame_parms->num_MBSFN_config);
|
// frame,subframe,frame_parms->num_MBSFN_config);
|
||||||
@@ -34,8 +35,8 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par
|
|||||||
for (i=0; i<frame_parms->num_MBSFN_config; i++) { // we have at least one MBSFN configuration
|
for (i=0; i<frame_parms->num_MBSFN_config; i++) { // we have at least one MBSFN configuration
|
||||||
period = 1<<frame_parms->MBSFN_config[i].radioframeAllocationPeriod;
|
period = 1<<frame_parms->MBSFN_config[i].radioframeAllocationPeriod;
|
||||||
|
|
||||||
if ((frame % period) == frame_parms->MBSFN_config[i].radioframeAllocationOffset) {
|
if (frame_parms->MBSFN_config[i].fourFrames_flag == 0) {
|
||||||
if (frame_parms->MBSFN_config[i].fourFrames_flag == 0) {
|
if ((frame % period) == frame_parms->MBSFN_config[i].radioframeAllocationOffset) {
|
||||||
if (frame_parms->frame_type == FDD) {
|
if (frame_parms->frame_type == FDD) {
|
||||||
switch (subframe) {
|
switch (subframe) {
|
||||||
|
|
||||||
@@ -108,9 +109,96 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} else { // handle 4 frames case
|
} else { // handle 4 frames case
|
||||||
|
|
||||||
|
for(j=0;j<4;j++) {
|
||||||
|
if ((frame % period) == (frame_parms->MBSFN_config[i].radioframeAllocationOffset + j)) {
|
||||||
|
if (frame_parms->frame_type == FDD) {
|
||||||
|
switch (subframe) {
|
||||||
|
case 1:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x800000>>(j*6))) > 0) {
|
||||||
|
//LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x800000>>(j*6));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x400000>>(j*6))) > 0) {
|
||||||
|
//LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x400000>>(j*6));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x200000>>(j*6))) > 0) {
|
||||||
|
//LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x200000>>(j*6));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x100000>>(j*6))) > 0) {
|
||||||
|
//LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x100000>>(j*6));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x80000>>(j*6))) > 0) {
|
||||||
|
//LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x80000>>(j*6));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x40000>>(j*6))) > 0) {
|
||||||
|
//LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x40000>>(j*6));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (subframe) {
|
||||||
|
case 3:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF3) > 0)
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF4) > 0)
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF7) > 0)
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF8) > 0)
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 9:
|
||||||
|
if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF9) > 0)
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+117
-117
@@ -153,25 +153,24 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
|||||||
subframe = eNB->proc.subframe_prach_br;
|
subframe = eNB->proc.subframe_prach_br;
|
||||||
prachF = eNB->prach_vars_br.prachF;
|
prachF = eNB->prach_vars_br.prachF;
|
||||||
rxsigF = eNB->prach_vars_br.rxsigF[ce_level];
|
rxsigF = eNB->prach_vars_br.rxsigF[ce_level];
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d, rootSequenceIndex %d, repetition number %d,numRepetitionsPrePreambleAttempt %d\n",
|
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d, rootSequenceIndex %d, repetition number %d,numRepetitionsPrePreambleAttempt %d\n",
|
||||||
br_flag,ce_level,ru->proc.frame_prach,subframe,
|
br_flag,ce_level,ru->proc.frame_prach,subframe,
|
||||||
fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],
|
||||||
prach_ConfigIndex,rootSequenceIndex,
|
prach_ConfigIndex,rootSequenceIndex,
|
||||||
eNB->prach_vars_br.repetition_number[ce_level],
|
eNB->prach_vars_br.repetition_number[ce_level],
|
||||||
fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]);
|
fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
prach_ifftp = eNB->prach_vars.prach_ifft[0];
|
prach_ifftp = eNB->prach_vars.prach_ifft[0];
|
||||||
subframe = eNB->proc.subframe_prach;
|
subframe = eNB->proc.subframe_prach;
|
||||||
prachF = eNB->prach_vars.prachF;
|
prachF = eNB->prach_vars.prachF;
|
||||||
rxsigF = eNB->prach_vars.rxsigF[0];
|
rxsigF = eNB->prach_vars.rxsigF[0];
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n", subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex);
|
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n", subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -179,20 +178,19 @@ LOG_DEBUG_END
|
|||||||
if (br_flag == 1) {
|
if (br_flag == 1) {
|
||||||
subframe = ru->proc.subframe_prach_br;
|
subframe = ru->proc.subframe_prach_br;
|
||||||
rxsigF = ru->prach_rxsigF_br[ce_level];
|
rxsigF = ru->prach_rxsigF_br[ce_level];
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
|
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
|
||||||
br_flag,ce_level,ru->proc.frame_prach,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex);
|
br_flag,ce_level,ru->proc.frame_prach,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
subframe = ru->proc.subframe_prach;
|
subframe = ru->proc.subframe_prach;
|
||||||
rxsigF = ru->prach_rxsigF;
|
rxsigF = ru->prach_rxsigF;
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
|
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
|
||||||
subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex);
|
subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -204,27 +202,25 @@ LOG_DEBUG_END
|
|||||||
// DJP - indexing below in subframe zero takes us off the beginning of the array???
|
// DJP - indexing below in subframe zero takes us off the beginning of the array???
|
||||||
prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset];
|
prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset];
|
||||||
|
|
||||||
LOG_M_BEGIN(PRACH)
|
if (LOG_DUMPFLAG(PRACH)){
|
||||||
int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti);
|
int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti);
|
||||||
int8_t dbEn0 = dB_fixed(en0);
|
int8_t dbEn0 = dB_fixed(en0);
|
||||||
int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB;
|
int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB;
|
||||||
char buffer[80];
|
char buffer[80];
|
||||||
if (dbEn0>32 && prach[0]!= NULL)
|
if (dbEn0>32 && prach[0]!= NULL) {
|
||||||
{
|
static int counter=0;
|
||||||
static int counter=0;
|
sprintf(buffer, "%s%d", "/tmp/prach_rx",counter);
|
||||||
sprintf(buffer, "%s%d", "/tmp/prach_rx",counter);
|
LOG_M(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13);
|
||||||
LOG_M(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13);
|
}
|
||||||
|
if (dB_fixed(en0)>32) {
|
||||||
|
sprintf(buffer, "rach_dBm:%d",rach_dBm);
|
||||||
|
if (prach[0]!= NULL) LOG_M("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1);
|
||||||
|
LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d %s rxdata:%p index:%d\n",
|
||||||
|
ru->idx,br_flag,ce_level,ru->proc.frame_prach,subframe,fp->samples_per_tti,
|
||||||
|
prach[aa],dbEn0,ru->N_TA_offset,buffer,ru->common.rxdata[aa],
|
||||||
|
(subframe*fp->samples_per_tti)-ru->N_TA_offset);
|
||||||
}
|
}
|
||||||
if (dB_fixed(en0)>32)
|
}
|
||||||
{
|
|
||||||
sprintf(buffer, "rach_dBm:%d",rach_dBm);
|
|
||||||
if (prach[0]!= NULL) LOG_M("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1);
|
|
||||||
LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d %s rxdata:%p index:%d\n",
|
|
||||||
ru->idx,br_flag,ce_level,ru->proc.frame_prach,subframe,fp->samples_per_tti,
|
|
||||||
prach[aa],dbEn0,ru->N_TA_offset,buffer,ru->common.rxdata[aa],
|
|
||||||
(subframe*fp->samples_per_tti)-ru->N_TA_offset);
|
|
||||||
}
|
|
||||||
LOG_M_END
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,9 +302,9 @@ LOG_M_END
|
|||||||
if (((eNB!=NULL) && (ru->function != NGFI_RAU_IF4p5))||
|
if (((eNB!=NULL) && (ru->function != NGFI_RAU_IF4p5))||
|
||||||
((eNB==NULL) && (ru->function == NGFI_RRU_IF4p5))) { // compute the DFTs of the PRACH temporal resources
|
((eNB==NULL) && (ru->function == NGFI_RRU_IF4p5))) { // compute the DFTs of the PRACH temporal resources
|
||||||
// Do forward transform
|
// Do forward transform
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)) {
|
||||||
LOG_D(PHY,"rx_prach: Doing FFT for N_RB_UL %d nb_rx:%d Ncp:%d\n",fp->N_RB_UL, nb_rx, Ncp);
|
LOG_D(PHY,"rx_prach: Doing FFT for N_RB_UL %d nb_rx:%d Ncp:%d\n",fp->N_RB_UL, nb_rx, Ncp);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
for (aa=0; aa<nb_rx; aa++) {
|
for (aa=0; aa<nb_rx; aa++) {
|
||||||
AssertFatal(prach[aa]!=NULL,"prach[%d] is null\n",aa);
|
AssertFatal(prach[aa]!=NULL,"prach[%d] is null\n",aa);
|
||||||
prach2 = prach[aa] + (Ncp<<1);
|
prach2 = prach[aa] + (Ncp<<1);
|
||||||
@@ -331,10 +327,10 @@ LOG_DEBUG_END
|
|||||||
if (prach_fmt == 4) {
|
if (prach_fmt == 4) {
|
||||||
dft256(prach2,rxsigF[aa],1);
|
dft256(prach2,rxsigF[aa],1);
|
||||||
} else {
|
} else {
|
||||||
dft3072(prach2,rxsigF[aa]);
|
dft3072(prach2,rxsigF[aa],1);
|
||||||
|
|
||||||
if (prach_fmt>1)
|
if (prach_fmt>1)
|
||||||
dft3072(prach2+6144,rxsigF[aa]+6144);
|
dft3072(prach2+6144,rxsigF[aa]+6144,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -345,10 +341,10 @@ LOG_DEBUG_END
|
|||||||
dft1024(prach2,rxsigF[aa],1);
|
dft1024(prach2,rxsigF[aa],1);
|
||||||
fft_size = 1024;
|
fft_size = 1024;
|
||||||
} else {
|
} else {
|
||||||
dft6144(prach2,rxsigF[aa]);
|
dft6144(prach2,rxsigF[aa],1);
|
||||||
|
|
||||||
if (prach_fmt>1)
|
if (prach_fmt>1)
|
||||||
dft6144(prach2+12288,rxsigF[aa]+12288);
|
dft6144(prach2+12288,rxsigF[aa]+12288,1);
|
||||||
|
|
||||||
fft_size = 6144;
|
fft_size = 6144;
|
||||||
}
|
}
|
||||||
@@ -359,22 +355,22 @@ LOG_DEBUG_END
|
|||||||
if (prach_fmt == 4) {
|
if (prach_fmt == 4) {
|
||||||
dft2048(prach2,rxsigF[aa],1);
|
dft2048(prach2,rxsigF[aa],1);
|
||||||
} else {
|
} else {
|
||||||
dft12288(prach2,rxsigF[aa]);
|
dft12288(prach2,rxsigF[aa],1);
|
||||||
|
|
||||||
if (prach_fmt>1)
|
if (prach_fmt>1)
|
||||||
dft12288(prach2+24576,rxsigF[aa]+24576);
|
dft12288(prach2+24576,rxsigF[aa]+24576,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 75:
|
case 75:
|
||||||
if (prach_fmt == 4) {
|
if (prach_fmt == 4) {
|
||||||
dft3072(prach2,rxsigF[aa]);
|
dft3072(prach2,rxsigF[aa],1);
|
||||||
} else {
|
} else {
|
||||||
dft18432(prach2,rxsigF[aa]);
|
dft18432(prach2,rxsigF[aa],1);
|
||||||
|
|
||||||
if (prach_fmt>1)
|
if (prach_fmt>1)
|
||||||
dft18432(prach2+36864,rxsigF[aa]+36864);
|
dft18432(prach2+36864,rxsigF[aa]+36864,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -384,19 +380,19 @@ LOG_DEBUG_END
|
|||||||
if (prach_fmt == 4) {
|
if (prach_fmt == 4) {
|
||||||
dft4096(prach2,rxsigF[aa],1);
|
dft4096(prach2,rxsigF[aa],1);
|
||||||
} else {
|
} else {
|
||||||
dft24576(prach2,rxsigF[aa]);
|
dft24576(prach2,rxsigF[aa],1);
|
||||||
|
|
||||||
if (prach_fmt>1)
|
if (prach_fmt>1)
|
||||||
dft24576(prach2+49152,rxsigF[aa]+49152);
|
dft24576(prach2+49152,rxsigF[aa]+49152,1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (prach_fmt == 4) {
|
if (prach_fmt == 4) {
|
||||||
dft3072(prach2,rxsigF[aa]);
|
dft3072(prach2,rxsigF[aa],1);
|
||||||
} else {
|
} else {
|
||||||
dft18432(prach2,rxsigF[aa]);
|
dft18432(prach2,rxsigF[aa],1);
|
||||||
|
|
||||||
if (prach_fmt>1)
|
if (prach_fmt>1)
|
||||||
dft18432(prach2+36864,rxsigF[aa]+36864);
|
dft18432(prach2+36864,rxsigF[aa]+36864,1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -439,10 +435,10 @@ LOG_DEBUG_END
|
|||||||
return;
|
return;
|
||||||
} else if (eNB!=NULL) {
|
} else if (eNB!=NULL) {
|
||||||
|
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if ( LOG_DEBUGFLAG(PRACH)) {
|
||||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||||
if ((en > 60)&&(br_flag==1)) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,n_ra_prb,k,eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
|
if ((en > 60)&&(br_flag==1)) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,n_ra_prb,k,eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// in case of RAU and prach received rx_thread wakes up prach
|
// in case of RAU and prach received rx_thread wakes up prach
|
||||||
@@ -477,10 +473,10 @@ LOG_DEBUG_END
|
|||||||
*max_preamble_energy=0;
|
*max_preamble_energy=0;
|
||||||
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
|
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
|
||||||
|
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||||
if (en>60) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",ru->proc.frame_prach,subframe,preamble_index,br_flag);
|
if (en>60) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",ru->proc.frame_prach,subframe,preamble_index,br_flag);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
if (restricted_set == 0) {
|
if (restricted_set == 0) {
|
||||||
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
|
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
|
||||||
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
|
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
|
||||||
@@ -563,11 +559,11 @@ LOG_DEBUG_END
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
|
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)) {
|
||||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||||
if (en>60) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n",
|
if (en>60) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n",
|
||||||
ru->proc.frame_prach,subframe,preamble_index,preamble_offset,preamble_shift,br_flag,en);
|
ru->proc.frame_prach,subframe,preamble_index,preamble_offset,preamble_shift,br_flag,en);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
log2_ifft_size = 10;
|
log2_ifft_size = 10;
|
||||||
fft_size = 6144;
|
fft_size = 6144;
|
||||||
|
|
||||||
@@ -589,13 +585,13 @@ LOG_DEBUG_END
|
|||||||
}
|
}
|
||||||
|
|
||||||
memset(prachF, 0, sizeof(int16_t)*2*1024 );
|
memset(prachF, 0, sizeof(int16_t)*2*1024 );
|
||||||
LOG_M_BEGIN(PRACH)
|
if (LOG_DUMPFLAG(PRACH)) {
|
||||||
if (prach[0]!= NULL) LOG_M("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1);
|
if (prach[0]!= NULL) LOG_M("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1);
|
||||||
LOG_M("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1);
|
LOG_M("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1);
|
||||||
LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1);
|
LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1);
|
||||||
LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1);
|
LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1);
|
||||||
LOG_M_END
|
}
|
||||||
|
|
||||||
for (aa=0;aa<nb_rx; aa++) {
|
for (aa=0;aa<nb_rx; aa++) {
|
||||||
// Do componentwise product with Xu* on each antenna
|
// Do componentwise product with Xu* on each antenna
|
||||||
|
|
||||||
@@ -623,10 +619,10 @@ LOG_M_END
|
|||||||
prach_ifft[i] += (prach_ifft_tmp[i<<1]*prach_ifft_tmp[(i<<1)] + prach_ifft_tmp[1+(i<<1)]*prach_ifft_tmp[1+(i<<1)])>>10;
|
prach_ifft[i] += (prach_ifft_tmp[i<<1]*prach_ifft_tmp[(i<<1)] + prach_ifft_tmp[1+(i<<1)]*prach_ifft_tmp[1+(i<<1)])>>10;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_M_BEGIN(PRACH)
|
if (LOG_DUMPFLAG(PRACH)) {
|
||||||
if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
|
if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
|
||||||
if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
|
if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
|
||||||
LOG_M_END
|
}
|
||||||
}// antennas_rx
|
}// antennas_rx
|
||||||
} // new dft
|
} // new dft
|
||||||
|
|
||||||
@@ -637,10 +633,10 @@ LOG_M_END
|
|||||||
eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]))
|
eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||||
if (en>60) LOG_I(PHY,"frame %d, subframe %d: Checking for peak in time-domain (br_flag %d, en %d)\n",ru->proc.frame_prach,subframe,br_flag,en);
|
if (en>60) LOG_I(PHY,"frame %d, subframe %d: Checking for peak in time-domain (br_flag %d, en %d)\n",ru->proc.frame_prach,subframe,br_flag,en);
|
||||||
LOG_DEBUG_END
|
}
|
||||||
preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC));
|
preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC));
|
||||||
|
|
||||||
|
|
||||||
@@ -652,44 +648,48 @@ LOG_DEBUG_END
|
|||||||
*max_preamble_energy = levdB;
|
*max_preamble_energy = levdB;
|
||||||
*max_preamble_delay = ((i*fft_size)>>log2_ifft_size)*update_TA/update_TA2;
|
*max_preamble_delay = ((i*fft_size)>>log2_ifft_size)*update_TA/update_TA2;
|
||||||
*max_preamble = preamble_index;
|
*max_preamble = preamble_index;
|
||||||
LOG_DEBUG_BEGIN(PRACH)
|
if (LOG_DEBUGFLAG(PRACH)){
|
||||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||||
if ((en>60) && (br_flag==1)) LOG_D(PHY,"frame %d, subframe %d : max_preamble_energy %d, max_preamble_delay %d, max_preamble %d (br_flag %d,ce_level %d, levdB %d, lev %d)\n",ru->proc.frame_prach,subframe,*max_preamble_energy,*max_preamble_delay,*max_preamble,br_flag,ce_level,levdB,lev);
|
if ((en>60) && (br_flag==1))
|
||||||
LOG_DEBUG_END
|
LOG_D(PHY,"frame %d, subframe %d : max_preamble_energy %d, max_preamble_delay %d, max_preamble %d (br_flag %d,ce_level %d, levdB %d, lev %d)\n",
|
||||||
|
ru->proc.frame_prach,subframe,
|
||||||
|
*max_preamble_energy,*max_preamble_delay,
|
||||||
|
*max_preamble,br_flag,ce_level,levdB,lev);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}// preamble_index
|
}// preamble_index
|
||||||
|
|
||||||
LOG_M_BEGIN(PRACH)
|
if (LOG_DUMPFLAG(PRACH)) {
|
||||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||||
if (en>60) {
|
if (en>60) {
|
||||||
k = (12*n_ra_prb) - 6*fp->N_RB_UL;
|
k = (12*n_ra_prb) - 6*fp->N_RB_UL;
|
||||||
|
|
||||||
if (k<0) k+=fp->ofdm_symbol_size;
|
if (k<0) k+=fp->ofdm_symbol_size;
|
||||||
|
|
||||||
k*=12;
|
k*=12;
|
||||||
k+=13;
|
k+=13;
|
||||||
k*=2;
|
k*=2;
|
||||||
|
|
||||||
if (br_flag == 0) {
|
if (br_flag == 0) {
|
||||||
LOG_M("rxsigF.m","prach_rxF",&rxsigF[0][0],12288,1,1);
|
LOG_M("rxsigF.m","prach_rxF",&rxsigF[0][0],12288,1,1);
|
||||||
LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
|
LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
|
||||||
LOG_M("Xu.m","xu",Xu,N_ZC,1,1);
|
LOG_M("Xu.m","xu",Xu,N_ZC,1,1);
|
||||||
LOG_M("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1);
|
LOG_M("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LOG_E(PHY,"Dumping prach (br_flag %d), k = %d (n_ra_prb %d)\n",br_flag,k,n_ra_prb);
|
LOG_E(PHY,"Dumping prach (br_flag %d), k = %d (n_ra_prb %d)\n",br_flag,k,n_ra_prb);
|
||||||
LOG_M("rxsigF_br.m","prach_rxF_br",&rxsigF[0][0],12288,1,1);
|
LOG_M("rxsigF_br.m","prach_rxF_br",&rxsigF[0][0],12288,1,1);
|
||||||
LOG_M("prach_rxF_comp0_br.m","prach_rxF_comp0_br",prachF,1024,1,1);
|
LOG_M("prach_rxF_comp0_br.m","prach_rxF_comp0_br",prachF,1024,1,1);
|
||||||
LOG_M("Xu_br.m","xu_br",Xu,N_ZC,1,1);
|
LOG_M("Xu_br.m","xu_br",Xu,N_ZC,1,1);
|
||||||
LOG_M("prach_ifft0_br.m","prach_t0_br",prach_ifft,1024,1,1);
|
LOG_M("prach_ifft0_br.m","prach_t0_br",prach_ifft,1024,1,1);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
LOG_M_END
|
} /* LOG_DUMPFLAG(PRACH) */
|
||||||
if (eNB) stop_meas(&eNB->rx_prach);
|
if (eNB) stop_meas(&eNB->rx_prach);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,6 @@
|
|||||||
#include "PHY/defs_eNB.h"
|
#include "PHY/defs_eNB.h"
|
||||||
#include "PHY/phy_extern.h"
|
#include "PHY/phy_extern.h"
|
||||||
#include "transport_eNB.h"
|
#include "transport_eNB.h"
|
||||||
//#define DEBUG_ULSCH
|
|
||||||
#include "PHY/sse_intrin.h"
|
#include "PHY/sse_intrin.h"
|
||||||
#include "transport_common_proto.h"
|
#include "transport_common_proto.h"
|
||||||
#include "PHY/LTE_ESTIMATION/lte_estimation.h"
|
#include "PHY/LTE_ESTIMATION/lte_estimation.h"
|
||||||
@@ -67,7 +66,7 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// printf("Doing lte_idft for Msc_PUSCH %d\n",Msc_PUSCH);
|
LOG_T(PHY,"Doing lte_idft for Msc_PUSCH %d\n",Msc_PUSCH);
|
||||||
|
|
||||||
if (frame_parms->Ncp == 0) { // Normal prefix
|
if (frame_parms->Ncp == 0) { // Normal prefix
|
||||||
z0 = z;
|
z0 = z;
|
||||||
@@ -388,13 +387,13 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH)
|
|||||||
|
|
||||||
for (i=0,ip=0; i<Msc_PUSCH; i++,ip+=4) {
|
for (i=0,ip=0; i<Msc_PUSCH; i++,ip+=4) {
|
||||||
z0[i] = ((uint32_t*)idft_out0)[ip];
|
z0[i] = ((uint32_t*)idft_out0)[ip];
|
||||||
/*
|
if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
|
||||||
printf("out0 (%d,%d),(%d,%d),(%d,%d),(%d,%d)\n",
|
LOG_I(PHY,"out0 (%d,%d),(%d,%d),(%d,%d),(%d,%d)\n",
|
||||||
((int16_t*)&idft_out0[ip])[0],((int16_t*)&idft_out0[ip])[1],
|
((int16_t*)&idft_out0[ip])[0],((int16_t*)&idft_out0[ip])[1],
|
||||||
((int16_t*)&idft_out0[ip+1])[0],((int16_t*)&idft_out0[ip+1])[1],
|
((int16_t*)&idft_out0[ip+1])[0],((int16_t*)&idft_out0[ip+1])[1],
|
||||||
((int16_t*)&idft_out0[ip+2])[0],((int16_t*)&idft_out0[ip+2])[1],
|
((int16_t*)&idft_out0[ip+2])[0],((int16_t*)&idft_out0[ip+2])[1],
|
||||||
((int16_t*)&idft_out0[ip+3])[0],((int16_t*)&idft_out0[ip+3])[1]);
|
((int16_t*)&idft_out0[ip+3])[0],((int16_t*)&idft_out0[ip+3])[1]);
|
||||||
*/
|
}
|
||||||
z1[i] = ((uint32_t*)idft_out0)[ip+1];
|
z1[i] = ((uint32_t*)idft_out0)[ip+1];
|
||||||
z2[i] = ((uint32_t*)idft_out0)[ip+2];
|
z2[i] = ((uint32_t*)idft_out0)[ip+2];
|
||||||
z3[i] = ((uint32_t*)idft_out0)[ip+3];
|
z3[i] = ((uint32_t*)idft_out0)[ip+3];
|
||||||
@@ -479,10 +478,7 @@ int32_t ulsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// printf("qpsk llr for symbol %d (pos %d), llr offset %d\n",symbol,(symbol*frame_parms->N_RB_DL*12),llr128U-(__m128i*)ulsch_llr);
|
|
||||||
|
|
||||||
for (i=0; i<(nb_rb*3); i++) {
|
for (i=0; i<(nb_rb*3); i++) {
|
||||||
//printf("%d,%d,%d,%d,%d,%d,%d,%d\n",((int16_t *)rxF)[0],((int16_t *)rxF)[1],((int16_t *)rxF)[2],((int16_t *)rxF)[3],((int16_t *)rxF)[4],((int16_t *)rxF)[5],((int16_t *)rxF)[6],((int16_t *)rxF)[7]);
|
|
||||||
*(*llrp128) = *rxF;
|
*(*llrp128) = *rxF;
|
||||||
rxF++;
|
rxF++;
|
||||||
(*llrp128)++;
|
(*llrp128)++;
|
||||||
@@ -593,7 +589,9 @@ void ulsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
ch_mag =(int16x8_t*)&ul_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
|
ch_mag =(int16x8_t*)&ul_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||||
ch_magb =(int16x8_t*)&ul_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)];
|
ch_magb =(int16x8_t*)&ul_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||||
#endif
|
#endif
|
||||||
// printf("symbol %d: mag %d, magb %d\n",symbol,_mm_extract_epi16(ch_mag[0],0),_mm_extract_epi16(ch_magb[0],0));
|
if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
|
||||||
|
LOG_UI(PHY,"symbol %d: mag %d, magb %d\n",symbol,_mm_extract_epi16(ch_mag[0],0),_mm_extract_epi16(ch_magb[0],0));
|
||||||
|
}
|
||||||
for (i=0; i<(nb_rb*3); i++) {
|
for (i=0; i<(nb_rb*3); i++) {
|
||||||
|
|
||||||
|
|
||||||
@@ -736,9 +734,9 @@ void ulsch_extract_rbs_single(int32_t **rxdataF,
|
|||||||
nb_rb1 = cmin(cmax((int)(frame_parms->N_RB_UL) - (int)(2*first_rb),(int)0),(int)(2*nb_rb)); // 2 times no. RBs before the DC
|
nb_rb1 = cmin(cmax((int)(frame_parms->N_RB_UL) - (int)(2*first_rb),(int)0),(int)(2*nb_rb)); // 2 times no. RBs before the DC
|
||||||
nb_rb2 = 2*nb_rb - nb_rb1; // 2 times no. RBs after the DC
|
nb_rb2 = 2*nb_rb - nb_rb1; // 2 times no. RBs after the DC
|
||||||
|
|
||||||
#ifdef DEBUG_ULSCH
|
if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
|
||||||
printf("ulsch_extract_rbs_single: 2*nb_rb1 = %d, 2*nb_rb2 = %d\n",nb_rb1,nb_rb2);
|
LOG_UI(PHY,"ulsch_extract_rbs_single: 2*nb_rb1 = %d, 2*nb_rb2 = %d\n",nb_rb1,nb_rb2);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
rxF_ext = &rxdataF_ext[aarx][(symbol*frame_parms->N_RB_UL*12)];
|
rxF_ext = &rxdataF_ext[aarx][(symbol*frame_parms->N_RB_UL*12)];
|
||||||
|
|
||||||
@@ -838,7 +836,7 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
for (rb=0; rb<nb_rb; rb++) {
|
for (rb=0; rb<nb_rb; rb++) {
|
||||||
// printf("comp: symbol %d rb %d\n",symbol,rb);
|
LOG_D(PHY,"comp: symbol %d rb %d\n",symbol,rb);
|
||||||
|
|
||||||
// just compute channel magnitude without scaling, this is done after equalization for SC-FDMA
|
// just compute channel magnitude without scaling, this is done after equalization for SC-FDMA
|
||||||
|
|
||||||
@@ -861,7 +859,7 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
|
|||||||
mmtmpU1 = _mm_packs_epi32(mmtmpU0,mmtmpU0);
|
mmtmpU1 = _mm_packs_epi32(mmtmpU0,mmtmpU0);
|
||||||
ul_ch_mag128[2] = _mm_unpacklo_epi16(mmtmpU1,mmtmpU1);
|
ul_ch_mag128[2] = _mm_unpacklo_epi16(mmtmpU1,mmtmpU1);
|
||||||
|
|
||||||
// printf("comp: symbol %d rb %d => %d,%d,%d (output_shift %d)\n",symbol,rb,*((int16_t*)&ul_ch_mag128[0]),*((int16_t*)&ul_ch_mag128[1]),*((int16_t*)&ul_ch_mag128[2]),output_shift);
|
LOG_D(PHY,"comp: symbol %d rb %d => %d,%d,%d (output_shift %d)\n",symbol,rb,*((int16_t*)&ul_ch_mag128[0]),*((int16_t*)&ul_ch_mag128[1]),*((int16_t*)&ul_ch_mag128[2]),output_shift);
|
||||||
|
|
||||||
|
|
||||||
#elif defined(__arm__)
|
#elif defined(__arm__)
|
||||||
@@ -1125,10 +1123,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
|
|
||||||
harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
|
harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
|
||||||
Qm = ulsch[UE_id]->harq_processes[harq_pid]->Qm;
|
Qm = ulsch[UE_id]->harq_processes[harq_pid]->Qm;
|
||||||
#ifdef DEBUG_ULSCH
|
if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
|
||||||
printf("rx_ulsch: harq_pid %d, nb_rb %d first_rb %d\n",harq_pid,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,ulsch[UE_id]->harq_processes[harq_pid]->first_rb);
|
LOG_I(PHY,"rx_ulsch: harq_pid %d, nb_rb %d first_rb %d\n",harq_pid,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,ulsch[UE_id]->harq_processes[harq_pid]->first_rb);
|
||||||
|
}
|
||||||
#endif //DEBUG_ULSCH
|
|
||||||
|
|
||||||
if (ulsch[UE_id]->harq_processes[harq_pid]->nb_rb == 0) {
|
if (ulsch[UE_id]->harq_processes[harq_pid]->nb_rb == 0) {
|
||||||
LOG_E(PHY,"PUSCH (%d/%x) nb_rb=0!\n", harq_pid,ulsch[UE_id]->rnti);
|
LOG_E(PHY,"PUSCH (%d/%x) nb_rb=0!\n", harq_pid,ulsch[UE_id]->rnti);
|
||||||
@@ -1137,13 +1134,13 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
|
|
||||||
for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
|
for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
|
||||||
|
|
||||||
#ifdef DEBUG_ULSCH
|
if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
|
||||||
printf("rx_ulsch : symbol %d (first_rb %d,nb_rb %d), rxdataF %p, rxdataF_ext %p\n",l,
|
LOG_I(PHY,"rx_ulsch : symbol %d (first_rb %d,nb_rb %d), rxdataF %p, rxdataF_ext %p\n",l,
|
||||||
ulsch[UE_id]->harq_processes[harq_pid]->first_rb,
|
ulsch[UE_id]->harq_processes[harq_pid]->first_rb,
|
||||||
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
|
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
|
||||||
common_vars->rxdataF,
|
common_vars->rxdataF,
|
||||||
pusch_vars->rxdataF_ext);
|
pusch_vars->rxdataF_ext);
|
||||||
#endif //DEBUG_ULSCH
|
}
|
||||||
|
|
||||||
ulsch_extract_rbs_single(common_vars->rxdataF,
|
ulsch_extract_rbs_single(common_vars->rxdataF,
|
||||||
pusch_vars->rxdataF_ext,
|
pusch_vars->rxdataF_ext,
|
||||||
@@ -1179,21 +1176,16 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
|
|
||||||
pusch_vars->ulsch_power[i] = signal_energy_nodc(pusch_vars->drs_ch_estimates[i],
|
pusch_vars->ulsch_power[i] = signal_energy_nodc(pusch_vars->drs_ch_estimates[i],
|
||||||
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)/correction_factor;
|
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)/correction_factor;
|
||||||
/* printf("%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d) power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_times10(pusch_vars->ulsch_power[i]));
|
LOG_D(PHY,"%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d) power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_times10(pusch_vars->ulsch_power[i]));
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//LOG_M("rxdataF_ext.m","rxF_ext",pusch_vars->rxdataF_ext[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1);
|
|
||||||
//LOG_M("ulsch_chest.m","drs_est",pusch_vars->drs_ch_estimates[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1);
|
|
||||||
|
|
||||||
|
|
||||||
ulsch_channel_level(pusch_vars->drs_ch_estimates,
|
ulsch_channel_level(pusch_vars->drs_ch_estimates,
|
||||||
frame_parms,
|
frame_parms,
|
||||||
avgU,
|
avgU,
|
||||||
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
|
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
|
||||||
|
|
||||||
// printf("[ULSCH] avg[0] %d\n",avgU[0]);
|
LOG_D(PHY,"[ULSCH] avg[0] %d\n",avgU[0]);
|
||||||
|
|
||||||
|
|
||||||
avgs = 0;
|
avgs = 0;
|
||||||
@@ -1205,9 +1197,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
|
|
||||||
log2_maxh = (log2_approx(avgs)/2)+ log2_approx(frame_parms->nb_antennas_rx-1)+4;
|
log2_maxh = (log2_approx(avgs)/2)+ log2_approx(frame_parms->nb_antennas_rx-1)+4;
|
||||||
|
|
||||||
#ifdef DEBUG_ULSCH
|
|
||||||
printf("[ULSCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgU[0],avgs);
|
LOG_D(PHY,"[ULSCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgU[0],avgs);
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
|
for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
|
||||||
@@ -1229,9 +1221,6 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
|
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
|
||||||
log2_maxh); // log2_maxh+I0_shift
|
log2_maxh); // log2_maxh+I0_shift
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (frame_parms->nb_antennas_rx > 1)
|
if (frame_parms->nb_antennas_rx > 1)
|
||||||
ulsch_detection_mrc(frame_parms,
|
ulsch_detection_mrc(frame_parms,
|
||||||
pusch_vars->rxdataF_comp,
|
pusch_vars->rxdataF_comp,
|
||||||
@@ -1240,9 +1229,7 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
l,
|
l,
|
||||||
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
|
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
|
||||||
|
|
||||||
|
// if ((eNB->measurements.n0_power_dB[0]+3)<pusch_vars->ulsch_power[0])
|
||||||
|
|
||||||
// if ((eNB->measurements.n0_power_dB[0]+3)<pusch_vars->ulsch_power[0]) {
|
|
||||||
if (23<pusch_vars->ulsch_power[0]) {
|
if (23<pusch_vars->ulsch_power[0]) {
|
||||||
freq_equalization(frame_parms,
|
freq_equalization(frame_parms,
|
||||||
pusch_vars->rxdataF_comp,
|
pusch_vars->rxdataF_comp,
|
||||||
@@ -1254,22 +1241,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//#ifdef DEBUG_ULSCH
|
|
||||||
// Inverse-Transform equalized outputs
|
|
||||||
// printf("Doing IDFTs\n");
|
|
||||||
lte_idft(frame_parms,
|
lte_idft(frame_parms,
|
||||||
(uint32_t*)pusch_vars->rxdataF_comp[0],
|
(uint32_t*)pusch_vars->rxdataF_comp[0],
|
||||||
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12);
|
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12);
|
||||||
// printf("Done\n");
|
|
||||||
//#endif //DEBUG_ULSCH
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
llrp = (int16_t*)&pusch_vars->llr[0];
|
llrp = (int16_t*)&pusch_vars->llr[0];
|
||||||
|
|
||||||
@@ -1316,9 +1290,8 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
#ifdef DEBUG_ULSCH
|
LOG_E(PHY,"ulsch_demodulation.c (rx_ulsch): Unknown Qm!!!!\n");
|
||||||
printf("ulsch_demodulation.c (rx_ulsch): Unknown Qm!!!!\n");
|
|
||||||
#endif //DEBUG_ULSCH
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1329,7 +1302,7 @@ void rx_ulsch_emul(PHY_VARS_eNB *eNB,
|
|||||||
eNB_rxtx_proc_t *proc,
|
eNB_rxtx_proc_t *proc,
|
||||||
uint8_t UE_index)
|
uint8_t UE_index)
|
||||||
{
|
{
|
||||||
printf("[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, UE_index %d\n",eNB->Mod_id,proc->subframe_rx,UE_index);
|
LOG_I(PHY,"[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, UE_index %d\n",eNB->Mod_id,proc->subframe_rx,UE_index);
|
||||||
eNB->pusch_vars[UE_index]->ulsch_power[0] = 31622; //=45dB;
|
eNB->pusch_vars[UE_index]->ulsch_power[0] = 31622; //=45dB;
|
||||||
eNB->pusch_vars[UE_index]->ulsch_power[1] = 31622; //=45dB;
|
eNB->pusch_vars[UE_index]->ulsch_power[1] = 31622; //=45dB;
|
||||||
|
|
||||||
@@ -1344,7 +1317,7 @@ void rx_ulsch_emul(PHY_VARS_eNB *eNB,
|
|||||||
|
|
||||||
harq_pid = subframe2harq_pid(&eNB->frame_parms,frame,subframe);
|
harq_pid = subframe2harq_pid(&eNB->frame_parms,frame,subframe);
|
||||||
|
|
||||||
printf("Dumping ULSCH in subframe %d with harq_pid %d, round %d for NB_rb %d, TBS %d, Qm %d, N_symb %d\n",
|
LOG_UI(PHY,"Dumping ULSCH in subframe %d with harq_pid %d, round %d for NB_rb %d, TBS %d, Qm %d, N_symb %d\n",
|
||||||
subframe,harq_pid,round,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
|
subframe,harq_pid,round,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
|
||||||
eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS,eNB->ulsch[UE_id]->harq_processes[harq_pid]->Qm,
|
eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS,eNB->ulsch[UE_id]->harq_processes[harq_pid]->Qm,
|
||||||
eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch);
|
eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch);
|
||||||
|
|||||||
@@ -179,29 +179,29 @@ void extract_dci1C_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_
|
|||||||
|
|
||||||
uint32_t rballoc=0;
|
uint32_t rballoc=0;
|
||||||
uint8_t mcs=0;
|
uint8_t mcs=0;
|
||||||
|
uint8_t Ngap=0;
|
||||||
|
|
||||||
switch (N_RB_DL) {
|
switch (N_RB_DL) {
|
||||||
case 6:
|
case 6:
|
||||||
mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs;
|
mcs = ((DCI1C_1_5MHz_t *)dci_pdu)->mcs;
|
||||||
rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc,6);
|
rballoc = conv_1C_RIV(((DCI1C_1_5MHz_t *)dci_pdu)->rballoc, 6);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 25:
|
case 25:
|
||||||
mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs;
|
mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs;
|
||||||
rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc,6);
|
rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc, 25);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 50:
|
case 50:
|
||||||
mcs = ((DCI1C_10MHz_t *)dci_pdu)->mcs;
|
mcs = ((DCI1C_10MHz_t *)dci_pdu)->mcs;
|
||||||
rballoc = conv_1C_RIV(((DCI1C_10MHz_t *)dci_pdu)->rballoc,6);
|
rballoc = conv_1C_RIV(((DCI1C_10MHz_t *)dci_pdu)->rballoc, 50);
|
||||||
|
Ngap = ((DCI1C_10MHz_t *)dci_pdu)->Ngap;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 100:
|
case 100:
|
||||||
mcs = ((DCI1C_20MHz_t *)dci_pdu)->mcs;
|
mcs = ((DCI1C_20MHz_t *)dci_pdu)->mcs;
|
||||||
rballoc = conv_1C_RIV(((DCI1C_20MHz_t *)dci_pdu)->rballoc,6);
|
rballoc = conv_1C_RIV(((DCI1C_20MHz_t *)dci_pdu)->rballoc, 100);
|
||||||
|
Ngap = ((DCI1C_20MHz_t *)dci_pdu)->Ngap;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -211,6 +211,7 @@ void extract_dci1C_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_
|
|||||||
|
|
||||||
pdci_info_extarcted->mcs1 = mcs;
|
pdci_info_extarcted->mcs1 = mcs;
|
||||||
pdci_info_extarcted->rballoc = rballoc;
|
pdci_info_extarcted->rballoc = rballoc;
|
||||||
|
pdci_info_extarcted->Ngap = Ngap;
|
||||||
}
|
}
|
||||||
|
|
||||||
void extract_dci1_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted)
|
void extract_dci1_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted)
|
||||||
|
|||||||
@@ -40,8 +40,14 @@
|
|||||||
#include<math.h>
|
#include<math.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <linux/version.h>
|
||||||
|
#if RHEL_RELEASE_CODE >= 1796
|
||||||
|
#include <lapacke/lapacke_utils.h>
|
||||||
|
#include <lapacke/lapacke.h>
|
||||||
|
#else
|
||||||
#include <lapacke_utils.h>
|
#include <lapacke_utils.h>
|
||||||
#include <lapacke.h>
|
#include <lapacke.h>
|
||||||
|
#endif
|
||||||
#include <cblas.h>
|
#include <cblas.h>
|
||||||
#include "linear_preprocessing_rec.h"
|
#include "linear_preprocessing_rec.h"
|
||||||
|
|
||||||
@@ -1314,14 +1320,17 @@ void dlsch_channel_compensation(int **rxdataF_ext,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) {
|
||||||
|
/* TODO: hack to be removed. There is crash for 1 antenna case, so
|
||||||
dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12];
|
* for 1 antenna case, I put back the value 2 as it was before
|
||||||
|
* Elena's commit.
|
||||||
|
*/
|
||||||
|
int x = frame_parms->nb_antennas_rx > 1 ? frame_parms->nb_antennas_rx : 2;
|
||||||
|
dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aatx*x + aarx][symbol*frame_parms->N_RB_DL*12];
|
||||||
//print_shorts("dl_ch128[0]=",&dl_ch128[0]);*/
|
//print_shorts("dl_ch128[0]=",&dl_ch128[0]);*/
|
||||||
dl_ch_mag128 = (__m128i *)&dl_ch_mag[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12];
|
dl_ch_mag128 = (__m128i *)&dl_ch_mag[aatx*x + aarx][symbol*frame_parms->N_RB_DL*12];
|
||||||
dl_ch_mag128b = (__m128i *)&dl_ch_magb[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12];
|
dl_ch_mag128b = (__m128i *)&dl_ch_magb[aatx*x + aarx][symbol*frame_parms->N_RB_DL*12];
|
||||||
rxdataF128 = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12];
|
rxdataF128 = (__m128i *)&rxdataF_ext[aarx][symbol*frame_parms->N_RB_DL*12];
|
||||||
rxdataF_comp128 = (__m128i *)&rxdataF_comp[aatx*2 + aarx][symbol*frame_parms->N_RB_DL*12];
|
rxdataF_comp128 = (__m128i *)&rxdataF_comp[aatx*x + aarx][symbol*frame_parms->N_RB_DL*12];
|
||||||
|
|
||||||
|
|
||||||
for (rb=0; rb<nb_rb; rb++) {
|
for (rb=0; rb<nb_rb; rb++) {
|
||||||
if (mod_order>2) {
|
if (mod_order>2) {
|
||||||
@@ -1771,12 +1780,17 @@ void dlsch_channel_compensation_core(int **rxdataF_ext,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (aarx=0; aarx<n_rx; aarx++) {
|
for (aarx=0; aarx<n_rx; aarx++) {
|
||||||
|
/* TODO: hack to be removed. There is crash for 1 antenna case, so
|
||||||
|
* for 1 antenna case, I put back the value 2 as it was before
|
||||||
|
* Elena's commit.
|
||||||
|
*/
|
||||||
|
int x = n_rx > 1 ? n_rx : 2;
|
||||||
|
|
||||||
dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aatx*2 + aarx][start_point];
|
dl_ch128 = (__m128i *)&dl_ch_estimates_ext[aatx*x + aarx][start_point];
|
||||||
dl_ch_mag128 = (__m128i *)&dl_ch_mag[aatx*2 + aarx][start_point];
|
dl_ch_mag128 = (__m128i *)&dl_ch_mag[aatx*x + aarx][start_point];
|
||||||
dl_ch_mag128b = (__m128i *)&dl_ch_magb[aatx*2 + aarx][start_point];
|
dl_ch_mag128b = (__m128i *)&dl_ch_magb[aatx*x + aarx][start_point];
|
||||||
rxdataF128 = (__m128i *)&rxdataF_ext[aarx][start_point];
|
rxdataF128 = (__m128i *)&rxdataF_ext[aarx][start_point];
|
||||||
rxdataF_comp128 = (__m128i *)&rxdataF_comp[aatx*2 + aarx][start_point];
|
rxdataF_comp128 = (__m128i *)&rxdataF_comp[aatx*x + aarx][start_point];
|
||||||
|
|
||||||
length_mod8 = length&7;
|
length_mod8 = length&7;
|
||||||
if (length_mod8 == 0){
|
if (length_mod8 == 0){
|
||||||
@@ -3974,17 +3988,12 @@ void dlsch_channel_level_median(int **dl_ch_estimates_ext,
|
|||||||
((int32_t*)&norm128D)[2] +
|
((int32_t*)&norm128D)[2] +
|
||||||
((int32_t*)&norm128D)[3];
|
((int32_t*)&norm128D)[3];
|
||||||
|
|
||||||
if (ii<1){
|
|
||||||
// print_ints("norm128D",&norm128D[0]);
|
|
||||||
printf("norm_pack[%d] %d\n", aatx*n_rx + aarx, norm_pack);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (norm_pack > max)
|
if (norm_pack > max)
|
||||||
max = norm_pack;
|
max = norm_pack;
|
||||||
if (norm_pack < min)
|
if (norm_pack < min)
|
||||||
min = norm_pack;
|
min = norm_pack;
|
||||||
|
|
||||||
dl_ch128+=1;
|
dl_ch128+=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
median[aatx*n_rx + aarx] = (max+min)>>1;
|
median[aatx*n_rx + aarx] = (max+min)>>1;
|
||||||
|
|||||||
@@ -13,9 +13,14 @@ data storage. */
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <cblas.h>
|
#include <cblas.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <linux/version.h>
|
||||||
|
#if RHEL_RELEASE_CODE >= 1796
|
||||||
|
#include <lapacke/lapacke_utils.h>
|
||||||
|
#include <lapacke/lapacke.h>
|
||||||
|
#else
|
||||||
#include <lapacke_utils.h>
|
#include <lapacke_utils.h>
|
||||||
#include <lapacke.h>
|
#include <lapacke.h>
|
||||||
|
#endif
|
||||||
//#define DEBUG_PREPROC
|
//#define DEBUG_PREPROC
|
||||||
|
|
||||||
|
|
||||||
@@ -366,4 +371,4 @@ float sqrt_float(float x, float sqrt_x)
|
|||||||
{
|
{
|
||||||
sqrt_x = (float)(sqrt((double)(x)));
|
sqrt_x = (float)(sqrt((double)(x)));
|
||||||
return sqrt_x;
|
return sqrt_x;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -376,7 +376,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
|||||||
memmove( prach, prach+1024, Ncp<<2 );
|
memmove( prach, prach+1024, Ncp<<2 );
|
||||||
prach_len = 512+Ncp;
|
prach_len = 512+Ncp;
|
||||||
} else {
|
} else {
|
||||||
idft3072(prachF,prach2);
|
idft3072(prachF,prach2,1);
|
||||||
memmove( prach, prach+6144, Ncp<<2 );
|
memmove( prach, prach+6144, Ncp<<2 );
|
||||||
prach_len = 3072+Ncp;
|
prach_len = 3072+Ncp;
|
||||||
|
|
||||||
@@ -395,7 +395,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
|||||||
memmove( prach, prach+2048, Ncp<<2 );
|
memmove( prach, prach+2048, Ncp<<2 );
|
||||||
prach_len = 1024+Ncp;
|
prach_len = 1024+Ncp;
|
||||||
} else {
|
} else {
|
||||||
idft6144(prachF,prach2);
|
idft6144(prachF,prach2,1);
|
||||||
/*for (i=0;i<6144*2;i++)
|
/*for (i=0;i<6144*2;i++)
|
||||||
prach2[i]<<=1;*/
|
prach2[i]<<=1;*/
|
||||||
memmove( prach, prach+12288, Ncp<<2 );
|
memmove( prach, prach+12288, Ncp<<2 );
|
||||||
@@ -415,7 +415,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
|||||||
memmove( prach, prach+4096, Ncp<<2 );
|
memmove( prach, prach+4096, Ncp<<2 );
|
||||||
prach_len = 2048+Ncp;
|
prach_len = 2048+Ncp;
|
||||||
} else {
|
} else {
|
||||||
idft12288(prachF,prach2);
|
idft12288(prachF,prach2,1);
|
||||||
memmove( prach, prach+24576, Ncp<<2 );
|
memmove( prach, prach+24576, Ncp<<2 );
|
||||||
prach_len = 12288+Ncp;
|
prach_len = 12288+Ncp;
|
||||||
|
|
||||||
@@ -429,12 +429,12 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
|||||||
|
|
||||||
case 75:
|
case 75:
|
||||||
if (prach_fmt == 4) {
|
if (prach_fmt == 4) {
|
||||||
idft3072(prachF,prach2);
|
idft3072(prachF,prach2,1);
|
||||||
//TODO: account for repeated format in dft output
|
//TODO: account for repeated format in dft output
|
||||||
memmove( prach, prach+6144, Ncp<<2 );
|
memmove( prach, prach+6144, Ncp<<2 );
|
||||||
prach_len = 3072+Ncp;
|
prach_len = 3072+Ncp;
|
||||||
} else {
|
} else {
|
||||||
idft18432(prachF,prach2);
|
idft18432(prachF,prach2,1);
|
||||||
memmove( prach, prach+36864, Ncp<<2 );
|
memmove( prach, prach+36864, Ncp<<2 );
|
||||||
prach_len = 18432+Ncp;
|
prach_len = 18432+Ncp;
|
||||||
|
|
||||||
@@ -453,7 +453,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
|||||||
memmove( prach, prach+8192, Ncp<<2 );
|
memmove( prach, prach+8192, Ncp<<2 );
|
||||||
prach_len = 4096+Ncp;
|
prach_len = 4096+Ncp;
|
||||||
} else {
|
} else {
|
||||||
idft24576(prachF,prach2);
|
idft24576(prachF,prach2,1);
|
||||||
memmove( prach, prach+49152, Ncp<<2 );
|
memmove( prach, prach+49152, Ncp<<2 );
|
||||||
prach_len = 24576+Ncp;
|
prach_len = 24576+Ncp;
|
||||||
|
|
||||||
@@ -465,12 +465,12 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (prach_fmt == 4) {
|
if (prach_fmt == 4) {
|
||||||
idft3072(prachF,prach2);
|
idft3072(prachF,prach2,1);
|
||||||
//TODO: account for repeated format in dft output
|
//TODO: account for repeated format in dft output
|
||||||
memmove( prach, prach+6144, Ncp<<2 );
|
memmove( prach, prach+6144, Ncp<<2 );
|
||||||
prach_len = 3072+Ncp;
|
prach_len = 3072+Ncp;
|
||||||
} else {
|
} else {
|
||||||
idft18432(prachF,prach2);
|
idft18432(prachF,prach2,1);
|
||||||
memmove( prach, prach+36864, Ncp<<2 );
|
memmove( prach, prach+36864, Ncp<<2 );
|
||||||
prach_len = 18432+Ncp;
|
prach_len = 18432+Ncp;
|
||||||
printf("Generated prach for 100 PRB, 3/4 sampling\n");
|
printf("Generated prach for 100 PRB, 3/4 sampling\n");
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
lte_dfts_sse4: lte_dfts.c
|
lte_dfts_sse4: lte_dfts.c
|
||||||
gcc -O2 -msse4.1 -g -ggdb -o lte_dfts_sse4 lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS
|
gcc -O2 -std=gnu99 -msse4.1 -g -ggdb -o lte_dfts_sse4 lte_dfts.c time_meas.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR_HOME -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR -I$$OPENAIR2_DIR/COMMON -I$$OPENAIR_HOME/common/utils -DMR_MAIN -DNB_ANTENNAS_RX=1 -lm -lpthread # -DD256STATS #-DD64STATS
|
||||||
|
|
||||||
lte_dfts_avx2: lte_dfts.c
|
lte_dfts_avx2: lte_dfts.c
|
||||||
gcc -O2 -mavx2 -g -ggdb -o lte_dfts_avx2 lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS
|
gcc -O2 -std=gnu99 -mavx2 -g -ggdb -o lte_dfts_avx2 lte_dfts.c time_meas.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR_HOME -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR -I$$OPENAIR2_DIR/COMMON -I$$OPENAIR_HOME/common/utils -DMR_MAIN -DNB_ANTENNAS_RX=1 -lm -lpthread # -DD256STATS #-DD64STATS
|
||||||
|
|
||||||
lte_dfts_avx2.s: lte_dfts.c
|
lte_dfts_avx2.s: lte_dfts.c
|
||||||
gcc -O2 -mavx2 -S lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS
|
gcc -O2 -std=gnu99 -mavx2 -S lte_dfts.c time_meas.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR_HOME -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR -I$$OPENAIR2_DIR/COMMON -I$$OPENAIR_HOME/common/utils -DMR_MAIN -DNB_ANTENNAS_RX=1 -lm -lpthread # -DD256STATS #-DD64STATS
|
||||||
|
|
||||||
lte_dfts_sse4.s: lte_dfts.c
|
lte_dfts_sse4.s: lte_dfts.c
|
||||||
gcc -O2 -msse4.1 -S lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR/COMMON -DMR_MAIN -DNB_ANTENNAS_RX=1 # -DD256STATS #-DD64STATS
|
gcc -O2 -std=gnu99 -msse4.1 -S lte_dfts.c time_meas.c ../../SIMULATION/TOOLS/taus.c -I$$OPENAIR_HOME -I$$OPENAIR1_DIR -I$$OPENAIR_TARGETS -I$$OPENAIR2_DIR -I$$OPENAIR2_DIR/COMMON -I$$OPENAIR_HOME/common/utils -DMR_MAIN -DNB_ANTENNAS_RX=1 -lm # -DD256STATS #-DD64STATS
|
||||||
|
|
||||||
dft_cycles_avx2: lte_dfts_avx2
|
dft_cycles_avx2: lte_dfts_avx2
|
||||||
./lte_dfts_avx2 | egrep cycles
|
./lte_dfts_avx2 | egrep cycles
|
||||||
|
|||||||
+1057
-10675
File diff suppressed because one or more lines are too long
@@ -174,27 +174,27 @@ This function performs optimized fixed-point radix-2 FFT/IFFT.
|
|||||||
|
|
||||||
void idft1536(int16_t *sigF,int16_t *sig,int scale);
|
void idft1536(int16_t *sigF,int16_t *sig,int scale);
|
||||||
|
|
||||||
void idft6144(int16_t *sigF,int16_t *sig);
|
void idft6144(int16_t *sigF,int16_t *sig,int scale);
|
||||||
|
|
||||||
void idft12288(int16_t *sigF,int16_t *sig);
|
void idft12288(int16_t *sigF,int16_t *sig,int scale);
|
||||||
|
|
||||||
void idft18432(int16_t *sigF,int16_t *sig);
|
void idft18432(int16_t *sigF,int16_t *sig,int scale);
|
||||||
|
|
||||||
void idft3072(int16_t *sigF,int16_t *sig);
|
void idft3072(int16_t *sigF,int16_t *sig,int scale);
|
||||||
|
|
||||||
void idft24576(int16_t *sigF,int16_t *sig);
|
void idft24576(int16_t *sigF,int16_t *sig,int scale);
|
||||||
|
|
||||||
void dft1536(int16_t *sigF,int16_t *sig,int scale);
|
void dft1536(int16_t *sigF,int16_t *sig,int scale);
|
||||||
|
|
||||||
void dft6144(int16_t *sigF,int16_t *sig);
|
void dft6144(int16_t *sigF,int16_t *sig,int scale);
|
||||||
|
|
||||||
void dft12288(int16_t *sigF,int16_t *sig);
|
void dft12288(int16_t *sigF,int16_t *sig,int scale);
|
||||||
|
|
||||||
void dft18432(int16_t *sigF,int16_t *sig);
|
void dft18432(int16_t *sigF,int16_t *sig,int scale);
|
||||||
|
|
||||||
void dft3072(int16_t *sigF,int16_t *sig);
|
void dft3072(int16_t *sigF,int16_t *sig,int scale);
|
||||||
|
|
||||||
void dft24576(int16_t *sigF,int16_t *sig);
|
void dft24576(int16_t *sigF,int16_t *sig,int scale);
|
||||||
|
|
||||||
|
|
||||||
/*!\fn int32_t rotate_cpx_vector(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N,uint16_t output_shift)
|
/*!\fn int32_t rotate_cpx_vector(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N,uint16_t output_shift)
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user