Merge branch 'integration_2023_w42' into 'develop'
Integration Branch 2023.w42 See merge request oai/openairinterface5g!2403 * !2368 NR UE SRB0 * !2399 build_oai: Auto-detect if terminal supports colors * !2398 Correctly load channel models * !2365 Change PDU_Length and tlv length calculation to be inline with SCF 222.10.02 * !2402 chore(ci): enabling the ARM cross-compilation pipeline * !2397 fix(ci): improve for parallelism issue in Groovy * !2405 Clean IDE files and remove old documentation
@@ -9,8 +9,11 @@ cmake_targets/nas_sim_tools/build/
|
|||||||
log/
|
log/
|
||||||
lte_build_oai/
|
lte_build_oai/
|
||||||
|
|
||||||
# vscode
|
# IDE files
|
||||||
.vscode
|
.vscode
|
||||||
|
.cproject
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
|
||||||
# Tags for vim/global
|
# Tags for vim/global
|
||||||
GPATH
|
GPATH
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
// Use IntelliSense to learn about possible attributes.
|
|
||||||
// Hover to view descriptions of existing attributes.
|
|
||||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
||||||
"version": "0.2.0",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "(gdb) Launch",
|
|
||||||
"type": "cppdbg",
|
|
||||||
"request": "launch",
|
|
||||||
"program": "${workspaceFolder}/cmake_targets/ran_build/build/lte-softmodem",
|
|
||||||
"args": [
|
|
||||||
"-O", "../ci-scripts/conf_files/rcc.band7.tm1.nfapi.conf",
|
|
||||||
"--noS1"
|
|
||||||
],
|
|
||||||
"stopAtEntry": false,
|
|
||||||
"cwd": "${workspaceFolder}/cmake_targets",
|
|
||||||
"environment": [],
|
|
||||||
"externalConsole": false,
|
|
||||||
"MIMode": "gdb",
|
|
||||||
"miDebuggerPath": "${workspaceFolder}/cmake_targets/sudo-gdb",
|
|
||||||
"setupCommands": [
|
|
||||||
{
|
|
||||||
"description": "Enable pretty-printing for gdb",
|
|
||||||
"text": "-enable-pretty-printing",
|
|
||||||
"ignoreFailures": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -33,6 +33,7 @@ def gitCommitAuthorEmailAddr
|
|||||||
|
|
||||||
// list of failing stages
|
// list of failing stages
|
||||||
def failingStages = ""
|
def failingStages = ""
|
||||||
|
def lockForMessage = 'Parent-Lock'
|
||||||
|
|
||||||
pipeline {
|
pipeline {
|
||||||
agent {
|
agent {
|
||||||
@@ -120,46 +121,49 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Build Stages are Mandatory
|
// Build Stages are Mandatory
|
||||||
// Later we will add a Ubuntu20 build
|
|
||||||
stage ("Image Building Processes") {
|
stage ("Image Building Processes") {
|
||||||
when { expression {doBuild} }
|
when { expression {doBuild} }
|
||||||
parallel {
|
parallel {
|
||||||
stage ("Ubuntu18-Image-Builder") {
|
stage ("Ubuntu-Image-Builder") {
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
triggerSlaveJob ('RAN-Ubuntu18-Image-Builder', 'Ubuntu18-Image-Builder')
|
triggerSlaveJob ('RAN-Ubuntu18-Image-Builder', 'Ubuntu-Image-Builder')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-Ubuntu18-Image-Builder')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
ubuntuBuildStatus = finalizeSlaveJob('RAN-Ubuntu18-Image-Builder')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += ubuntuBuildStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("RHEL8-Cluster-Image-Builder") {
|
stage ("RHEL-Cluster-Image-Builder") {
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
triggerSlaveJob ('RAN-RHEL8-Cluster-Image-Builder', 'RHEL8-Cluster-Image-Builder')
|
triggerSlaveJob ('RAN-RHEL8-Cluster-Image-Builder', 'RHEL-Cluster-Image-Builder')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-RHEL8-Cluster-Image-Builder')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
rhelBuildStatus = finalizeSlaveJob('RAN-RHEL8-Cluster-Image-Builder')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += rhelBuildStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -173,13 +177,37 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-cppcheck')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
cppcheckStatus = finalizeSlaveJob('RAN-cppcheck')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += cppcheckStatus
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage ("ARM-Cross-Compile") {
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
triggerSlaveJob ('RAN-ARM-Cross-Compile-Builder', 'ARM-Cross-Compilation')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
script {
|
||||||
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
armBuildStatus = finalizeSlaveJob('RAN-ARM-Cross-Compile-Builder')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
failure {
|
||||||
|
script {
|
||||||
|
currentBuild.result = 'FAILURE'
|
||||||
|
failingStages += armBuildStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -199,13 +227,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-PhySim-Cluster')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
physimStatus = finalizeSlaveJob('RAN-PhySim-Cluster')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += physimStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -220,13 +250,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-RF-Sim-Test-4G')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
rfSim4GStatus = finalizeSlaveJob('RAN-RF-Sim-Test-4G')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += rfSim4GStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -241,13 +273,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-RF-Sim-Test-5G')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
rfSim5GStatus = finalizeSlaveJob('RAN-RF-Sim-Test-5G')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += rfSim5GStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -262,13 +296,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-L2-Sim-Test-4G')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
l2Sim4GStatus = finalizeSlaveJob('RAN-L2-Sim-Test-4G')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += l2Sim4GStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -283,13 +319,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-L2-Sim-Test-5G')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
l2Sim5GStatus = finalizeSlaveJob('RAN-L2-Sim-Test-5G')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += l2Sim5GStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -304,13 +342,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-LTE-FDD-LTEBOX-Container')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
lteTDDB200Status = finalizeSlaveJob('RAN-LTE-FDD-LTEBOX-Container')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += lteTDDB200Status
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -326,13 +366,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-LTE-FDD-OAIUE-OAICN4G-Container')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
lteFDDB200OAIUEStatus = finalizeSlaveJob('RAN-LTE-FDD-OAIUE-OAICN4G-Container')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += lteFDDB200OAIUEStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -347,13 +389,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-LTE-TDD-LTEBOX-Container')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
lteFDDB200Status = finalizeSlaveJob('RAN-LTE-TDD-LTEBOX-Container')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += lteFDDB200Status
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -368,13 +412,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-NSA-B200-Module-LTEBOX-Container')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
nsaTDDB200Status = finalizeSlaveJob('RAN-NSA-B200-Module-LTEBOX-Container')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += nsaTDDB200Status
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -389,13 +435,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-SA-B200-Module-SABOX-Container')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
saTDDB200Status = finalizeSlaveJob('RAN-SA-B200-Module-SABOX-Container')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += saTDDB200Status
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -410,13 +458,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-gNB-N300-Timing-Phytest-LDPC')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
phytestLDPCoffloadStatus = finalizeSlaveJob('RAN-gNB-N300-Timing-Phytest-LDPC')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += phytestLDPCoffloadStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -431,13 +481,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-LTE-TDD-2x2-Container')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
lteTDD2x2N3xxStatus = finalizeSlaveJob('RAN-LTE-TDD-2x2-Container')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += lteTDD2x2N3xxStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -452,13 +504,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-SA-AW2S-CN5G')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
saAW2SStatus = finalizeSlaveJob('RAN-SA-AW2S-CN5G')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += saAW2SStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -473,13 +527,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-Interop-F1')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
f1InteropStatus = finalizeSlaveJob('RAN-Interop-F1')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += f1InteropStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -494,13 +550,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('OAI-CN5G-COTS-UE-Test')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
cn5gCOTSUESanityCheck = finalizeSlaveJob('OAI-CN5G-COTS-UE-Test')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += cn5gCOTSUESanityCheck
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -515,13 +573,15 @@ pipeline {
|
|||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
script {
|
script {
|
||||||
testBullet = finalizeSlaveJob('RAN-SA-OAIUE-CN5G')
|
// Using a unique variable name for each test stage to avoid overwriting on a global variable
|
||||||
|
// due to parallel-time concurrency
|
||||||
|
saOAIUEStatus = finalizeSlaveJob('RAN-SA-OAIUE-CN5G')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
failingStages += testBullet
|
failingStages += saOAIUEStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -668,28 +728,30 @@ def triggerSlaveJobNoGitLab (jobName) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def finalizeSlaveJob(jobName) {
|
def finalizeSlaveJob(jobName) {
|
||||||
// In case of any non-success, we are retrieving the HTML report of the last completed
|
lock (lockForMessage) {
|
||||||
// slave job. The only drop-back is that we may retrieve the HTML report of a previous build
|
// In case of any non-success, we are retrieving the HTML report of the last completed
|
||||||
if (jobName == 'OAI-CN5G-COTS-UE-Test') {
|
// slave job. The only drop-back is that we may retrieve the HTML report of a previous build
|
||||||
fileName = "test_results_oai_cn5g_cots_ue.html"
|
if (jobName == 'OAI-CN5G-COTS-UE-Test') {
|
||||||
} else {
|
fileName = "test_results_oai_cn5g_cots_ue.html"
|
||||||
fileName = "test_results-${jobName}.html"
|
} else {
|
||||||
}
|
fileName = "test_results-${jobName}.html"
|
||||||
artifactUrl = BUILD_URL
|
|
||||||
if (!fileExists(fileName)) {
|
|
||||||
copyArtifacts(projectName: jobName,
|
|
||||||
filter: 'test_results*.html',
|
|
||||||
selector: lastCompleted())
|
|
||||||
if (fileExists(fileName)) {
|
|
||||||
sh "sed -i -e 's#TEMPLATE_BUILD_TIME#${JOB_TIMESTAMP}#' ${fileName}"
|
|
||||||
archiveArtifacts artifacts: fileName
|
|
||||||
// BUILD_URL is like http://server:port/jenkins/job/foo/15/
|
|
||||||
// no need to add a prefixed '/'
|
|
||||||
artifactUrl += 'artifact/' + fileName
|
|
||||||
}
|
}
|
||||||
|
artifactUrl = BUILD_URL
|
||||||
|
if (!fileExists(fileName)) {
|
||||||
|
copyArtifacts(projectName: jobName,
|
||||||
|
filter: 'test_results*.html',
|
||||||
|
selector: lastCompleted())
|
||||||
|
if (fileExists(fileName)) {
|
||||||
|
sh "sed -i -e 's#TEMPLATE_BUILD_TIME#${JOB_TIMESTAMP}#' ${fileName}"
|
||||||
|
archiveArtifacts artifacts: fileName
|
||||||
|
// BUILD_URL is like http://server:port/jenkins/job/foo/15/
|
||||||
|
// no need to add a prefixed '/'
|
||||||
|
artifactUrl += 'artifact/' + fileName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
artifactUrl = "\n * [${jobName}](${artifactUrl})"
|
||||||
|
return artifactUrl
|
||||||
}
|
}
|
||||||
artifactUrl = "\n * [${jobName}](${artifactUrl})"
|
|
||||||
return artifactUrl
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Abstraction function to send social media messages:
|
// Abstraction function to send social media messages:
|
||||||
|
|||||||
@@ -54,16 +54,17 @@ fi
|
|||||||
###############################
|
###############################
|
||||||
## echo and family
|
## echo and family
|
||||||
###############################
|
###############################
|
||||||
black='\E[30m'
|
# only emit color if connected to a terminal, and if it supports colors
|
||||||
red='\E[31m'
|
if [ -t 1 ]; then
|
||||||
green='\E[32m'
|
num_colors=$(tput colors)
|
||||||
yellow='\E[33m'
|
if [ -n "$num_colors" ] && [ "$num_colors" -ge 8 ]; then
|
||||||
blue='\E[1;34m'
|
red='\E[31m'
|
||||||
magenta='\E[35m'
|
green='\E[32m'
|
||||||
cyan='\E[36m'
|
yellow='\E[33m'
|
||||||
white='\E[37m'
|
blue='\E[1;34m'
|
||||||
reset_color='\E[00m'
|
reset_color='\E[00m'
|
||||||
COLORIZE=1
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
cecho() {
|
cecho() {
|
||||||
# Color-echo
|
# Color-echo
|
||||||
@@ -72,8 +73,7 @@ cecho() {
|
|||||||
local default_msg="No Message."
|
local default_msg="No Message."
|
||||||
message=${1:-$default_msg}
|
message=${1:-$default_msg}
|
||||||
color=${2:-$green}
|
color=${2:-$green}
|
||||||
[ "$COLORIZE" = "1" ] && message="$color$message$reset_color"
|
echo -e "$color$message$reset_color"
|
||||||
echo -e "$message"
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -685,6 +685,15 @@ install_simde_from_source(){
|
|||||||
$SUDO rm -rf /tmp/simde
|
$SUDO rm -rf /tmp/simde
|
||||||
git clone https://github.com/simd-everywhere/simde-no-tests.git /tmp/simde
|
git clone https://github.com/simd-everywhere/simde-no-tests.git /tmp/simde
|
||||||
cd /tmp/simde
|
cd /tmp/simde
|
||||||
|
# we can specify a given version of SIMDE (sha-one or tag)
|
||||||
|
if [[ -v SIMDE_VERSION ]]; then
|
||||||
|
git checkout -f $SIMDE_VERSION
|
||||||
|
else
|
||||||
|
# At time of writing, last working commit for OAI
|
||||||
|
git checkout 389f360a66d4a3bec62b7d71ad8be877487809ba
|
||||||
|
fi
|
||||||
|
# Showing which version is used
|
||||||
|
git log -n1
|
||||||
# brute force copy into /usr/include
|
# brute force copy into /usr/include
|
||||||
$SUDO \cp -rv ../simde /usr/include
|
$SUDO \cp -rv ../simde /usr/include
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,8 @@
|
|||||||
FROM ubuntu:focal AS ran-base
|
FROM ubuntu:focal AS ran-base
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
ENV TZ=Europe/Paris
|
ENV TZ=Europe/Paris
|
||||||
|
# Specifying a working version of SIMDE for ARM:
|
||||||
|
ENV SIMDE_VERSION=389f360a66d4a3bec62b7d71ad8be877487809ba
|
||||||
|
|
||||||
#install developers pkg/repo
|
#install developers pkg/repo
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
|
|||||||
@@ -43,5 +43,10 @@ RUN /bin/sh oaienv && \
|
|||||||
cd ../build-cross/ && \
|
cd ../build-cross/ && \
|
||||||
cmake ../../.. -GNinja -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build && \
|
cmake ../../.. -GNinja -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build && \
|
||||||
echo "====== Start of log for cross-build executables ======" && \
|
echo "====== Start of log for cross-build executables ======" && \
|
||||||
ninja dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem params_libconfig coding rfsimulator > ../../log/all.txt 2>&1 && \
|
# making always passing so we can analyze the all.txt file
|
||||||
|
ninja dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem params_libconfig coding rfsimulator > ../../log/all.txt 2>&1; \
|
||||||
|
# displaying errors and warnings
|
||||||
|
egrep -A3 "warning:|error:" ../../log/all.txt || true && \
|
||||||
|
# will fail only for errors
|
||||||
|
egrep -L "error:" ../../log/all.txt && \
|
||||||
echo "====== End of log for cross-build executables ======"
|
echo "====== End of log for cross-build executables ======"
|
||||||
|
|||||||
@@ -1466,12 +1466,14 @@ typedef enum {
|
|||||||
|
|
||||||
//table 3-58
|
//table 3-58
|
||||||
#define NFAPI_NR_MAX_TX_REQUEST_TLV 2
|
#define NFAPI_NR_MAX_TX_REQUEST_TLV 2
|
||||||
typedef struct
|
typedef struct {
|
||||||
{
|
uint16_t PDU_length; // SCF 222.10.02 The total length (in bytes) of the PDU description and PDU data, without the padding bytes.
|
||||||
uint16_t PDU_length;
|
// (2 bytes PDU_Length + 2 bytes PDU_Index + 4 bytes num_TLV + TLV size ( 2 bytes tag + 2 bytes length +
|
||||||
|
// value size without padding))
|
||||||
|
// TBS + 12
|
||||||
uint16_t PDU_index;
|
uint16_t PDU_index;
|
||||||
uint32_t num_TLV;
|
uint32_t num_TLV;
|
||||||
nfapi_nr_tx_data_request_tlv_t TLVs[NFAPI_NR_MAX_TX_REQUEST_TLV];
|
nfapi_nr_tx_data_request_tlv_t TLVs[NFAPI_NR_MAX_TX_REQUEST_TLV];
|
||||||
|
|
||||||
} nfapi_nr_pdu_t;
|
} nfapi_nr_pdu_t;
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <immintrin.h>
|
#include "PHY/sse_intrin.h"
|
||||||
#include "nrLDPCdecoder_defs.h"
|
#include "nrLDPCdecoder_defs.h"
|
||||||
#include "nrLDPC_types.h"
|
#include "nrLDPC_types.h"
|
||||||
#include "nrLDPC_init.h"
|
#include "nrLDPC_init.h"
|
||||||
|
|||||||
@@ -108,16 +108,6 @@ void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, const uint8_t gNB
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t nr_mac_rrc_data_req_ue(const module_id_t Mod_idP,
|
|
||||||
const int CC_id,
|
|
||||||
const uint8_t gNB_id,
|
|
||||||
const frame_t frameP,
|
|
||||||
const rb_id_t Srb_id,
|
|
||||||
uint8_t *buffer_pP)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index) {
|
int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ void nr_mac_rrc_sync_ind(const module_id_t module_id,
|
|||||||
const frame_t frame,
|
const frame_t frame,
|
||||||
const bool in_sync) {}
|
const bool in_sync) {}
|
||||||
|
|
||||||
|
void nr_mac_rrc_msg3_ind(const module_id_t mod_id, int rnti) {}
|
||||||
|
|
||||||
void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success) {}
|
void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success) {}
|
||||||
|
|
||||||
void rrc_data_ind(const protocol_ctxt_t *const ctxt_pP,
|
void rrc_data_ind(const protocol_ctxt_t *const ctxt_pP,
|
||||||
|
|||||||
@@ -108,16 +108,6 @@ void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, const uint8_t gNB
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t nr_mac_rrc_data_req_ue(const module_id_t Mod_idP,
|
|
||||||
const int CC_id,
|
|
||||||
const uint8_t gNB_id,
|
|
||||||
const frame_t frameP,
|
|
||||||
const rb_id_t Srb_id,
|
|
||||||
uint8_t *buffer_pP)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index) {
|
int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,16 +104,6 @@ void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, const uint8_t gNB
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t nr_mac_rrc_data_req_ue(const module_id_t Mod_idP,
|
|
||||||
const int CC_id,
|
|
||||||
const uint8_t gNB_id,
|
|
||||||
const frame_t frameP,
|
|
||||||
const rb_id_t Srb_id,
|
|
||||||
uint8_t *buffer_pP)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index) {
|
int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ MESSAGE_DEF(RRC_MAC_MCCH_DATA_IND, MESSAGE_PRIORITY_MED_PLUS, RrcMacMcchDat
|
|||||||
|
|
||||||
MESSAGE_DEF(RRC_MAC_PCCH_DATA_REQ, MESSAGE_PRIORITY_MED_PLUS, RrcMacPcchDataReq, rrc_mac_pcch_data_req)
|
MESSAGE_DEF(RRC_MAC_PCCH_DATA_REQ, MESSAGE_PRIORITY_MED_PLUS, RrcMacPcchDataReq, rrc_mac_pcch_data_req)
|
||||||
|
|
||||||
MESSAGE_DEF(NR_RRC_MAC_RA_IND, MESSAGE_PRIORITY_MED_PLUS, NRRrcMacRaInd, nr_rrc_mac_ra_ind)
|
MESSAGE_DEF(NR_RRC_MAC_RA_IND, MESSAGE_PRIORITY_MED_PLUS, NRRrcMacRaInd, nr_rrc_mac_ra_ind)
|
||||||
|
MESSAGE_DEF(NR_RRC_MAC_MSG3_IND, MESSAGE_PRIORITY_MED_PLUS, NRRrcMacMsg3Ind, nr_rrc_mac_msg3_ind)
|
||||||
|
|
||||||
/* RRC configures DRX context (MAC timers) of a UE */
|
/* RRC configures DRX context (MAC timers) of a UE */
|
||||||
MESSAGE_DEF(RRC_MAC_DRX_CONFIG_REQ, MESSAGE_PRIORITY_MED, rrc_mac_drx_config_req_t, rrc_mac_drx_config_req)
|
MESSAGE_DEF(RRC_MAC_DRX_CONFIG_REQ, MESSAGE_PRIORITY_MED, rrc_mac_drx_config_req_t, rrc_mac_drx_config_req)
|
||||||
|
|||||||
@@ -55,6 +55,7 @@
|
|||||||
#define RRC_MAC_PCCH_DATA_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_pcch_data_req
|
#define RRC_MAC_PCCH_DATA_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_pcch_data_req
|
||||||
|
|
||||||
#define NR_RRC_MAC_RA_IND(mSGpTR) (mSGpTR)->ittiMsg.nr_rrc_mac_ra_ind
|
#define NR_RRC_MAC_RA_IND(mSGpTR) (mSGpTR)->ittiMsg.nr_rrc_mac_ra_ind
|
||||||
|
#define NR_RRC_MAC_MSG3_IND(mSGpTR) (mSGpTR)->ittiMsg.nr_rrc_mac_msg3_ind
|
||||||
|
|
||||||
#define RRC_MAC_DRX_CONFIG_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_drx_config_req
|
#define RRC_MAC_DRX_CONFIG_REQ(mSGpTR) (mSGpTR)->ittiMsg.rrc_mac_drx_config_req
|
||||||
|
|
||||||
@@ -73,6 +74,10 @@ typedef struct NRRrcMacRaInd_s {
|
|||||||
bool RA_succeeded;
|
bool RA_succeeded;
|
||||||
} NRRrcMacRaInd;
|
} NRRrcMacRaInd;
|
||||||
|
|
||||||
|
typedef struct NRRrcMacMsg3Ind_s {
|
||||||
|
uint16_t rnti;
|
||||||
|
} NRRrcMacMsg3Ind;
|
||||||
|
|
||||||
typedef struct RrcMacInSyncInd_s {
|
typedef struct RrcMacInSyncInd_s {
|
||||||
uint32_t frame;
|
uint32_t frame;
|
||||||
uint8_t sub_frame;
|
uint8_t sub_frame;
|
||||||
@@ -154,15 +159,9 @@ typedef struct RrcMacCcchDataInd_s {
|
|||||||
} RrcMacCcchDataInd;
|
} RrcMacCcchDataInd;
|
||||||
|
|
||||||
typedef struct NRRrcMacCcchDataInd_s {
|
typedef struct NRRrcMacCcchDataInd_s {
|
||||||
uint32_t frame;
|
|
||||||
uint8_t slot;
|
|
||||||
uint16_t rnti;
|
uint16_t rnti;
|
||||||
uint32_t sdu_size;
|
uint32_t sdu_size;
|
||||||
uint8_t sdu[CCCH_SDU_SIZE];
|
uint8_t sdu[CCCH_SDU_SIZE];
|
||||||
OCTET_STRING_t *du_to_cu_rrc_container;
|
|
||||||
uint8_t gnb_index;
|
|
||||||
int CC_id;
|
|
||||||
uint64_t nr_cellid;
|
|
||||||
} NRRrcMacCcchDataInd;
|
} NRRrcMacCcchDataInd;
|
||||||
|
|
||||||
typedef struct RrcMacMcchDataReq_s {
|
typedef struct RrcMacMcchDataReq_s {
|
||||||
|
|||||||
@@ -1,220 +0,0 @@
|
|||||||
# Doxyfile 1.3.8
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Project related configuration options
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
PROJECT_NAME = OPENAIR2
|
|
||||||
PROJECT_NUMBER =
|
|
||||||
OUTPUT_DIRECTORY =
|
|
||||||
CREATE_SUBDIRS = NO
|
|
||||||
OUTPUT_LANGUAGE = English
|
|
||||||
USE_WINDOWS_ENCODING = YES
|
|
||||||
BRIEF_MEMBER_DESC = YES
|
|
||||||
REPEAT_BRIEF = YES
|
|
||||||
ABBREVIATE_BRIEF =
|
|
||||||
ALWAYS_DETAILED_SEC = NO
|
|
||||||
INLINE_INHERITED_MEMB = NO
|
|
||||||
FULL_PATH_NAMES = NO
|
|
||||||
STRIP_FROM_PATH =
|
|
||||||
STRIP_FROM_INC_PATH =
|
|
||||||
SHORT_NAMES = NO
|
|
||||||
JAVADOC_AUTOBRIEF = YES
|
|
||||||
MULTILINE_CPP_IS_BRIEF = YES
|
|
||||||
DETAILS_AT_TOP = YES
|
|
||||||
INHERIT_DOCS = NO
|
|
||||||
DISTRIBUTE_GROUP_DOC = NO
|
|
||||||
TAB_SIZE = 8
|
|
||||||
ALIASES =
|
|
||||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
|
||||||
OPTIMIZE_OUTPUT_JAVA = NO
|
|
||||||
SUBGROUPING = YES
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Build related configuration options
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
EXTRACT_ALL = YES
|
|
||||||
EXTRACT_PRIVATE = NO
|
|
||||||
EXTRACT_STATIC = NO
|
|
||||||
EXTRACT_LOCAL_CLASSES = YES
|
|
||||||
EXTRACT_LOCAL_METHODS = YES
|
|
||||||
HIDE_UNDOC_MEMBERS = YES
|
|
||||||
HIDE_UNDOC_CLASSES = YES
|
|
||||||
HIDE_FRIEND_COMPOUNDS = NO
|
|
||||||
HIDE_IN_BODY_DOCS = NO
|
|
||||||
INTERNAL_DOCS = NO
|
|
||||||
CASE_SENSE_NAMES = YES
|
|
||||||
HIDE_SCOPE_NAMES = NO
|
|
||||||
SHOW_INCLUDE_FILES = NO
|
|
||||||
INLINE_INFO = YES
|
|
||||||
SORT_MEMBER_DOCS = NO
|
|
||||||
SORT_BRIEF_DOCS = NO
|
|
||||||
SORT_BY_SCOPE_NAME = NO
|
|
||||||
GENERATE_TODOLIST = YES
|
|
||||||
GENERATE_TESTLIST = NO
|
|
||||||
GENERATE_BUGLIST = YES
|
|
||||||
GENERATE_DEPRECATEDLIST= NO
|
|
||||||
ENABLED_SECTIONS =
|
|
||||||
MAX_INITIALIZER_LINES = 30
|
|
||||||
SHOW_USED_FILES = NO
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to warning and progress messages
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
QUIET = NO
|
|
||||||
WARNINGS = YES
|
|
||||||
WARN_IF_UNDOCUMENTED = YES
|
|
||||||
WARN_IF_DOC_ERROR = YES
|
|
||||||
WARN_FORMAT = "$file:$line: $text"
|
|
||||||
WARN_LOGFILE =
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the input files
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
INPUT = $(OPENAIR2_DIR)/LAYER2/MAC/defs.h \
|
|
||||||
$(OPENAIR2_DIR)/COMMON/mac_rrc_primitives.h \
|
|
||||||
$(OPENAIR2_DIR)/COMMON/mac_rlc_primitives.h \
|
|
||||||
$(OPENAIR2_DIR)/LAYER2/MAC/lchan_interface.h \
|
|
||||||
$(OPENAIR2_DIR)/PHY_INTERFACE/defs.h \
|
|
||||||
$(OPENAIR2_DIR)/NAS/DRIVER/MESH/proto_extern.h \
|
|
||||||
|
|
||||||
|
|
||||||
FILE_PATTERNS = *.h
|
|
||||||
RECURSIVE = NO
|
|
||||||
EXCLUDE =
|
|
||||||
EXCLUDE_SYMLINKS = NO
|
|
||||||
EXCLUDE_PATTERNS =
|
|
||||||
EXAMPLE_PATH =
|
|
||||||
EXAMPLE_PATTERNS =
|
|
||||||
EXAMPLE_RECURSIVE = NO
|
|
||||||
IMAGE_PATH = images
|
|
||||||
INPUT_FILTER =
|
|
||||||
FILTER_PATTERNS =
|
|
||||||
FILTER_SOURCE_FILES = NO
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to source browsing
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
SOURCE_BROWSER = NO
|
|
||||||
INLINE_SOURCES = NO
|
|
||||||
STRIP_CODE_COMMENTS = YES
|
|
||||||
REFERENCED_BY_RELATION = NO
|
|
||||||
REFERENCES_RELATION = NO
|
|
||||||
VERBATIM_HEADERS = YES
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the alphabetical class index
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
ALPHABETICAL_INDEX = NO
|
|
||||||
COLS_IN_ALPHA_INDEX = 5
|
|
||||||
IGNORE_PREFIX =
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
COLS_IN_ALPHA_INDEX = 5
|
|
||||||
IGNORE_PREFIX =
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the alphabetical class index
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
ALPHABETICAL_INDEX = NO
|
|
||||||
COLS_IN_ALPHA_INDEX = 5
|
|
||||||
IGNORE_PREFIX =
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the HTML output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_HTML = YES
|
|
||||||
HTML_OUTPUT = html
|
|
||||||
HTML_FILE_EXTENSION = .html
|
|
||||||
HTML_HEADER =
|
|
||||||
HTML_FOOTER =
|
|
||||||
HTML_STYLESHEET =
|
|
||||||
HTML_ALIGN_MEMBERS = YES
|
|
||||||
GENERATE_HTMLHELP = YES
|
|
||||||
CHM_FILE = irs_openair.chm
|
|
||||||
HHC_LOCATION =
|
|
||||||
GENERATE_CHI = NO
|
|
||||||
BINARY_TOC = NO
|
|
||||||
TOC_EXPAND = NO
|
|
||||||
DISABLE_INDEX = NO
|
|
||||||
ENUM_VALUES_PER_LINE = 4
|
|
||||||
GENERATE_TREEVIEW = YES
|
|
||||||
TREEVIEW_WIDTH = 250
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the LaTeX output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_LATEX = NO
|
|
||||||
LATEX_OUTPUT = latex
|
|
||||||
LATEX_CMD_NAME = latex
|
|
||||||
MAKEINDEX_CMD_NAME = makeindex
|
|
||||||
COMPACT_LATEX = NO
|
|
||||||
PAPER_TYPE = a4wide
|
|
||||||
EXTRA_PACKAGES = amsmath amssymb
|
|
||||||
LATEX_HEADER =
|
|
||||||
PDF_HYPERLINKS = YES
|
|
||||||
USE_PDFLATEX = YES
|
|
||||||
LATEX_BATCHMODE = NO
|
|
||||||
LATEX_HIDE_INDICES = NO
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the RTF output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_RTF = NO
|
|
||||||
RTF_OUTPUT = rtf
|
|
||||||
COMPACT_RTF = YES
|
|
||||||
RTF_HYPERLINKS = YES
|
|
||||||
RTF_STYLESHEET_FILE =
|
|
||||||
RTF_EXTENSIONS_FILE =
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the man page output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_MAN = NO
|
|
||||||
MAN_OUTPUT = man
|
|
||||||
MAN_EXTENSION = .3
|
|
||||||
MAN_LINKS = NO
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the XML output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_XML = NO
|
|
||||||
XML_OUTPUT = xml
|
|
||||||
XML_SCHEMA =
|
|
||||||
XML_DTD =
|
|
||||||
XML_PROGRAMLISTING = YES
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options for the AutoGen Definitions output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_AUTOGEN_DEF = NO
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the Perl module output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_PERLMOD = NO
|
|
||||||
PERLMOD_LATEX = NO
|
|
||||||
PERLMOD_PRETTY = YES
|
|
||||||
PERLMOD_MAKEVAR_PREFIX =
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration options related to the preprocessor
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
ENABLE_PREPROCESSING = YES
|
|
||||||
MACRO_EXPANSION = YES
|
|
||||||
EXPAND_ONLY_PREDEF = YES
|
|
||||||
SEARCH_INCLUDES = YES
|
|
||||||
INCLUDE_PATH =
|
|
||||||
INCLUDE_FILE_PATTERNS =
|
|
||||||
PREDEFINED = __attribute__(x)=
|
|
||||||
EXPAND_AS_DEFINED =
|
|
||||||
SKIP_FUNCTION_MACROS = YES
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration::additions related to external references
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
TAGFILES =
|
|
||||||
GENERATE_TAGFILE =
|
|
||||||
ALLEXTERNALS = NO
|
|
||||||
EXTERNAL_GROUPS = YES
|
|
||||||
PERL_PATH = /usr/bin/perl
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration options related to the dot tool
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
CLASS_DIAGRAMS = NO
|
|
||||||
HIDE_UNDOC_RELATIONS = NO
|
|
||||||
HAVE_DOT = NO
|
|
||||||
CLASS_GRAPH = NO
|
|
||||||
COLLABORATION_GRAPH = NO
|
|
||||||
UML_LOOK = NO
|
|
||||||
TEMPLATE_RELATIONS = NO
|
|
||||||
INCLUDE_GRAPH = NO
|
|
||||||
INCLUDED_BY_GRAPH = NO
|
|
||||||
CALL_GRAPH = NO
|
|
||||||
GRAPHICAL_HIERARCHY = NO
|
|
||||||
DOT_IMAGE_FORMAT = jpg
|
|
||||||
DOT_PATH =
|
|
||||||
DOTFILE_DIRS = ../docs/dotfiles
|
|
||||||
|
Before Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 6.9 KiB |
@@ -1,568 +0,0 @@
|
|||||||
%!PS-Adobe-3.0
|
|
||||||
%%Pages: (atend)
|
|
||||||
%%BoundingBox: 32 0 559 609
|
|
||||||
%%HiResBoundingBox: 32.385937 0.800000 558.200000 608.900000
|
|
||||||
%.......................................
|
|
||||||
%%Creator: GPL Ghostscript 850 (pswrite)
|
|
||||||
%%CreationDate: 2006/04/24 11:54:23
|
|
||||||
%%DocumentData: Clean7Bit
|
|
||||||
%%LanguageLevel: 2
|
|
||||||
%%EndComments
|
|
||||||
%%BeginProlog
|
|
||||||
% This copyright applies to everything between here and the %%EndProlog:
|
|
||||||
% Copyright (C) 2005 artofcode LLC, Benicia, CA. All rights reserved.
|
|
||||||
%%BeginResource: procset GS_pswrite_2_0_1001
|
|
||||||
/GS_pswrite_2_0_1001 80 dict dup begin
|
|
||||||
/PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch
|
|
||||||
4 index eq and{ pop pop pop}{ PageSize dup 1
|
|
||||||
5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec}
|
|
||||||
{ pop/setpagedevice where
|
|
||||||
{ pop 1 dict dup /PageSize PageSize put setpagedevice}
|
|
||||||
{ /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat
|
|
||||||
setpage}if}ifelse}ifelse}ifelse} bind def
|
|
||||||
/!{bind def}bind def/#{load def}!/N/counttomark #
|
|
||||||
/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}!
|
|
||||||
/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}!
|
|
||||||
/w/setlinewidth #/J/setlinecap #
|
|
||||||
/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat #
|
|
||||||
/m/moveto #/l/lineto #/c/rcurveto #
|
|
||||||
/p{N 2 idiv{N -2 roll rlineto}repeat}!
|
|
||||||
/P{N 0 gt{N -2 roll moveto p}if}!
|
|
||||||
/h{p closepath}!/H{P closepath}!
|
|
||||||
/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}!
|
|
||||||
/re{4 -2 roll m exch dup lx exch ly neg lx h}!
|
|
||||||
/^{3 index neg 3 index neg}!
|
|
||||||
/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}!
|
|
||||||
/q/gsave #/Q/grestore #/rf{re fill}!
|
|
||||||
/Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}!
|
|
||||||
/|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}!
|
|
||||||
/|{exch string readstring |=}!
|
|
||||||
/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}!
|
|
||||||
/@/currentfile #/${+ @ |}!
|
|
||||||
/B{{2 copy string{readstring pop}aload pop 4 array astore cvx
|
|
||||||
3 1 roll}repeat pop pop true}!
|
|
||||||
/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}!
|
|
||||||
/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
|
|
||||||
/Ic{exch Ix false 3 colorimage}!
|
|
||||||
/F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>>
|
|
||||||
/CCITTFaxDecode filter}!/FX{<</EndOfBlock false F}!
|
|
||||||
/X{/ASCII85Decode filter}!/@X{@ X}!/&2{2 index 2 index}!
|
|
||||||
/@F{@ &2<<F}!/@C{@X &2 FX}!
|
|
||||||
/$X{+ @X |}!/&4{4 index 4 index}!/$F{+ @ &4<<F |}!/$C{+ @X &4 FX |}!
|
|
||||||
/IC{3 1 roll 10 dict begin 1{/ImageType/Interpolate/Decode/DataSource
|
|
||||||
/ImageMatrix/BitsPerComponent/Height/Width}{exch def}forall
|
|
||||||
currentdict end image}!
|
|
||||||
/~{@ read {pop} if}!
|
|
||||||
end readonly def
|
|
||||||
%%EndResource
|
|
||||||
/pagesave null def
|
|
||||||
%%EndProlog
|
|
||||||
%%Page: 1 1
|
|
||||||
%%BeginPageSetup
|
|
||||||
GS_pswrite_2_0_1001 begin
|
|
||||||
595 842 /a4 setpagesize
|
|
||||||
/pagesave save store 197 dict begin
|
|
||||||
0.1 0.1 scale
|
|
||||||
%%EndPageSetup
|
|
||||||
gsave mark
|
|
||||||
Q q
|
|
||||||
321.859 6 5262.14 6082.19 re
|
|
||||||
Y
|
|
||||||
4 w
|
|
||||||
1 j
|
|
||||||
K
|
|
||||||
325.859 3430 2074.14 640 re
|
|
||||||
S
|
|
||||||
1016 3853 60 72 /1D
|
|
||||||
$C
|
|
||||||
+@.;U&Hj't(4j=H<#d$5F:`=&%F@htDNf13V=s.:/$%t$pSIan^K:=op&G'ls53/ZrV^YagL#*:
|
|
||||||
p=6SEe[9=4=CDja)aQOp/24q9)%/jkLfc@$JHTo~>
|
|
||||||
,
|
|
||||||
1080 3855 55 70 /4D
|
|
||||||
$C
|
|
||||||
3!p,tJ+A,D3*9iJ^]4?6s8W-!s8W-!s8W-!rVulqed.>?DtdPFlnl4\KY%f*0O0,-s8W-!s7Me8
|
|
||||||
K)[&0~>
|
|
||||||
,
|
|
||||||
1135 3854 51 46 /1H
|
|
||||||
$C
|
|
||||||
22H?7$l;4H,%Cm>#TJr>+Ibs:hpQ?gl&SpGs*t('rser#qgH39$pGLl)%2i:)<ARYM3%Huo_O(;
|
|
||||||
df-jM@&hp]d]h0(@0I'+K*;~>
|
|
||||||
,
|
|
||||||
1185 3855 55 44 /4H
|
|
||||||
$C
|
|
||||||
3!p,tJ+A,D3(R^?s8W-!s8W-!s8W-!s8W,ts8N&VM"Pt!I9T<U'o,Ud)I,$V>VQRaUSR~>
|
|
||||||
,
|
|
||||||
1241 3855 4H ,
|
|
||||||
1296 3854 44 46 /1L
|
|
||||||
$C
|
|
||||||
+U!pYLdZ\3+G#;6#3e'<\kUW<hO_0B^)H=hs8GAjf9'$\s8/k#n*[?el`Ib,Q*d6lX;FPHKcn<a~>
|
|
||||||
,
|
|
||||||
1340 3855 27 70 /4L
|
|
||||||
$C
|
|
||||||
3">eY,W5W%s8W-!s8W-!s8W-!s8W-!s8W-!XNWdCq&#b~>
|
|
||||||
,
|
|
||||||
1409 3853 1D ,
|
|
||||||
1473 3854 49 46 /1P
|
|
||||||
$C
|
|
||||||
+MpDHKM#[i#VbHbh'VAF8\3_)l[!m7l["'[\,ZL.rq6<jg0_OBg0_:RlIo:e[ZiJ_$GhChLf+dT~>
|
|
||||||
,
|
|
||||||
1526 3854 55 71 /4P
|
|
||||||
$C
|
|
||||||
+N-)V&31.;KL`lB+E%N.gkj-3<1']"\kcDZ?hO*lp&G'ls8VQfJ+*BoqtAUpg[1bs[MQB(iI_GU
|
|
||||||
`%DHN5QCc`s8W,uZ7$b%r.:j~>
|
|
||||||
,
|
|
||||||
1581 3855 27 67 /1T
|
|
||||||
$C
|
|
||||||
3">eY,W5W%s8W-!s8W-!s8VC@%h&;o;?-2Qe#-"Am96m~>
|
|
||||||
,
|
|
||||||
1609 3855 4H ,
|
|
||||||
1664 3834 50 66 /4T
|
|
||||||
$C
|
|
||||||
-,[tnZ4Rf/i=`4O5m%UKDNf13Uu-K"huE^\InJU7/[1Hnb&HjjWX>%!L`"]6::7;*\aaneG/>QA
|
|
||||||
iXg$%3_e/tFhL$*J,fQKhS3oU>tk-;K5Ge\fO5DCnAHXmK*3$iL7e~>
|
|
||||||
,
|
|
||||||
1281 3734 1H ,
|
|
||||||
1330 3735 4H ,
|
|
||||||
1386 3734 4P ,
|
|
||||||
1018 3616 67 68 /1X
|
|
||||||
$C
|
|
||||||
4:7J\5iL">8T=BUG76YSmJHA,s)7o2s8W,Is/s)IqWW+5$\T<%/4.E8%$=!]iIg*E_gT8:pYXkH
|
|
||||||
rVccrs8UOIY.ZJo/sSb&_?tN*0NeV-!!~>
|
|
||||||
,
|
|
||||||
1089 3616 1T ,
|
|
||||||
1117 3615 35 62 /4X
|
|
||||||
$C
|
|
||||||
--$-/'#t:_o\D.%s'8k/s8W,s5QCc`s8W-!k/0-q_2spFmsFs3J,fN;~>
|
|
||||||
,
|
|
||||||
1155 3635 29 6 /2B
|
|
||||||
$C
|
|
||||||
0H"6m~>
|
|
||||||
,
|
|
||||||
1188 3616 35 68 /5B
|
|
||||||
$C
|
|
||||||
3"6or"LW%Fs8W-!s8W-!s8W-!s8W-!s8W-!e#,/7*W~>
|
|
||||||
,
|
|
||||||
1224 3616 4H ,
|
|
||||||
1277 3615 4X ,
|
|
||||||
1316 3615 1L ,
|
|
||||||
1360 3616 38 44 /2F
|
|
||||||
$C
|
|
||||||
3!K>H"LYH5s8W-!s8W,frVfQ:7"%:t\#ni2[tS7ufJ;oM.T<(%~>
|
|
||||||
,
|
|
||||||
1399 3616 4L ,
|
|
||||||
1427 3615 1L ,
|
|
||||||
1471 3615 1H ,
|
|
||||||
1518 3615 53 44 /5F
|
|
||||||
$C
|
|
||||||
.5+KGqlcY\Hi:N_H<9sPYIuIb>M%_sriPMT9)hrbpSEA?H<T496%f_a2?XQg~>
|
|
||||||
,
|
|
||||||
1571 3616 1T ,
|
|
||||||
1598 3616 4H ,
|
|
||||||
1654 3595 4T ,
|
|
||||||
1920 1510 2074.14 640 re
|
|
||||||
S
|
|
||||||
2716 1881 90 68 /2J
|
|
||||||
$C
|
|
||||||
4:2S/e2)7EaoN3/%h't'(gC9m=7uOk#`nq6mJal&s*pmFDtX'YmJS^:rh&NVDtX'Io`&:qJ$82<
|
|
||||||
Ds;c+rI82OInTfkVu$GJrI82Hhq.kblh^Y9qHrsr?e>;7lh^XYrkJ1,?UO7_>juEgfPA0.~>
|
|
||||||
,
|
|
||||||
2808 1880 1P ,
|
|
||||||
2860 1880 4P ,
|
|
||||||
2915 1880 55 45 /5J
|
|
||||||
$C
|
|
||||||
+TsVAN!r6;W[%$&Jdq>kOYJ3JXk(7lfC/b6s8W-!s8W-!s8W-!s8W,&en,oe#mC_:aM^t)~>
|
|
||||||
,
|
|
||||||
2971 1881 4L ,
|
|
||||||
2998 1880 1H ,
|
|
||||||
3048 1880 4X ,
|
|
||||||
3087 1881 1T ,
|
|
||||||
3115 1880 1P ,
|
|
||||||
3164 1881 4H ,
|
|
||||||
2888 1760 1H ,
|
|
||||||
2938 1761 4H ,
|
|
||||||
2993 1760 4P ,
|
|
||||||
2743 1642 70 67 /2N
|
|
||||||
$C
|
|
||||||
,6M0G!t7O(fDkmNs8W-!s8W-!s8W,^]J'<brTa?2s8VE"s1NpN?0d9"Y\A\kO8&~>
|
|
||||||
,
|
|
||||||
2807 1642 2F ,
|
|
||||||
2846 1641 1H ,
|
|
||||||
2896 1642 4H ,
|
|
||||||
2951 1641 38 46 /5N
|
|
||||||
$C
|
|
||||||
3Ko-K5kYdMLTl=3Gc(,iS(6d'X8fA1erkhk=U#BoJIkpU&6,SX"[k(MKe@pb')n6os80"eYO/HH
|
|
||||||
(;gEFpgOo]69G~>
|
|
||||||
,
|
|
||||||
2990 1642 38 70 /2R
|
|
||||||
$C
|
|
||||||
3!K>H"bsGbs8W-!s8W-!s8W,si+7B]QiI*cs6nj0+&:O=hYV.oHOca,K*;~>
|
|
||||||
,
|
|
||||||
3021 1641 1P ,
|
|
||||||
3071 1642 2F ,
|
|
||||||
3110 1642 83 44 /5R
|
|
||||||
$C
|
|
||||||
3!p,tF26]5aoW:9$?2*RBncTes8W-!s8W-!s8W-!s8W-!s8W-!GQ7]Ts58_*&K\+>C[Z2BBfAsE
|
|
||||||
X?Eq`X>H;YE6-fWaZAC:6&8F0&E9jC~>
|
|
||||||
,
|
|
||||||
1915 860 330 320 re
|
|
||||||
S
|
|
||||||
2425 860 330 320 re
|
|
||||||
S
|
|
||||||
2895 860 330 320 re
|
|
||||||
S
|
|
||||||
3685 860 330 320 re
|
|
||||||
S
|
|
||||||
2080 1490 0 -300 S
|
|
||||||
2080 1190 23.33 70 -46.66 0 f*
|
|
||||||
2080 1190 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
3060 1490 0 -300 S
|
|
||||||
3060 1190 23.33 70 -46.66 0 f*
|
|
||||||
3060 1190 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
2080 1490 0 -300 S
|
|
||||||
2080 1190 23.33 70 -46.66 0 f*
|
|
||||||
2080 1190 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
2590 1490 0 -300 S
|
|
||||||
2590 1190 23.33 70 -46.66 0 f*
|
|
||||||
2590 1190 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
3060 1490 0 -300 S
|
|
||||||
3060 1190 23.33 70 -46.66 0 f*
|
|
||||||
3060 1190 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
3850 1490 0 -300 S
|
|
||||||
3850 1190 23.33 70 -46.66 0 f*
|
|
||||||
3850 1190 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
2010 998 1L ,
|
|
||||||
2054 999 53 43 /2V
|
|
||||||
$C
|
|
||||||
0E`!j8,;Z5OSfPAU$D;n[[$.3<mnSIXefkbCV%)X.f,u6T'20i0!4BL:"$UK<qP2uV00AeT[5]L
|
|
||||||
fSD6]p]~>
|
|
||||||
,
|
|
||||||
2107 998 4X ,
|
|
||||||
2520 998 1L ,
|
|
||||||
2564 999 2V ,
|
|
||||||
2617 998 4X ,
|
|
||||||
2990 998 1L ,
|
|
||||||
3034 999 2V ,
|
|
||||||
3087 998 4X ,
|
|
||||||
3780 998 1L ,
|
|
||||||
3824 999 2V ,
|
|
||||||
3877 998 4X ,
|
|
||||||
3505.86 3460 2074.14 640 re
|
|
||||||
S
|
|
||||||
4196 3873 1D ,
|
|
||||||
4260 3875 4D ,
|
|
||||||
4315 3874 1H ,
|
|
||||||
4365 3875 4H ,
|
|
||||||
4421 3875 4H ,
|
|
||||||
4476 3874 1L ,
|
|
||||||
4520 3875 4L ,
|
|
||||||
4589 3873 1D ,
|
|
||||||
4653 3874 1P ,
|
|
||||||
4706 3874 4P ,
|
|
||||||
4761 3875 1T ,
|
|
||||||
4789 3875 4H ,
|
|
||||||
4844 3854 4T ,
|
|
||||||
4461 3754 1H ,
|
|
||||||
4510 3755 4H ,
|
|
||||||
4566 3754 4P ,
|
|
||||||
4198 3636 1X ,
|
|
||||||
4269 3636 1T ,
|
|
||||||
4297 3635 4X ,
|
|
||||||
4335 3655 2B ,
|
|
||||||
4368 3636 5B ,
|
|
||||||
4404 3636 4H ,
|
|
||||||
4457 3635 4X ,
|
|
||||||
4496 3635 1L ,
|
|
||||||
4540 3636 2F ,
|
|
||||||
4579 3636 4L ,
|
|
||||||
4607 3635 1L ,
|
|
||||||
4651 3635 1H ,
|
|
||||||
4698 3635 5F ,
|
|
||||||
4751 3636 1T ,
|
|
||||||
4778 3636 4H ,
|
|
||||||
4834 3615 4T ,
|
|
||||||
1043 6006 2J ,
|
|
||||||
1134 6006 73 71 /5V
|
|
||||||
$C
|
|
||||||
3"<sEbPsC(-3Fff"r4#;GOCglh(S6.?eo";DS#i'A+m52n%El$HL&<<[JfE,qpsBLrN5Cgqq#-J
|
|
||||||
Y.O..GM]V%?eYM2p:L~>
|
|
||||||
,
|
|
||||||
1214 6004 1D ,
|
|
||||||
1311 6006 64 68 /2Z
|
|
||||||
$C
|
|
||||||
3"6tTJ<grMs8W-!s8W-!r^!5?L6dpH&7aY9iP+2f\*pg+IK/d9s8T:qp&:;\QV4/OPqYL!!koF9
|
|
||||||
[5\~>
|
|
||||||
,
|
|
||||||
1379 6006 72 68 /5Z
|
|
||||||
$C
|
|
||||||
3#c!(@drPGjZ$I4+I<Q2*t@r@ID4V9ID>[Jn,:$$hu!H2s8W-!s8QHls'Pf/^\-419DpK0Y.ZHS
|
|
||||||
#VMB..U[ju##$S&d]`~>
|
|
||||||
,
|
|
||||||
1455 6004 73 70 /3D
|
|
||||||
$C
|
|
||||||
,(Ukf_$:7!QuiTQKFhS?DNJb"dVi2fks)aTqR?EQX+10Ls8W-!s8W-!s8W-!s8W-!s8W-!s8W-!
|
|
||||||
:\;L6QpK""6.?TuJ,~>
|
|
||||||
,
|
|
||||||
1563 6004 48 68 /6D
|
|
||||||
$C
|
|
||||||
+U*H@JANVK_?`(d#3e'<]%n_+e\BPHotUP"]g)PnhuE`Vs8W-!s8VuJs8W)k[JfFk[[6Ge>Lg*_
|
|
||||||
V/7_s6O!fE@MBY-~>
|
|
||||||
,
|
|
||||||
4147 6020 2J ,
|
|
||||||
4238 6020 5V ,
|
|
||||||
4318 6018 1D ,
|
|
||||||
4415 6020 2Z ,
|
|
||||||
4483 6020 5Z ,
|
|
||||||
4559 6018 3D ,
|
|
||||||
4673 6020 84 68 /3J
|
|
||||||
$C
|
|
||||||
-D7#krI6pM3+6dShtM9n>Me!2#`me[J(">j9)&>!YC?23s.nKNFnPaideEaTXl&i=s.nKNFnPai
|
|
||||||
deE\nmG>O[s.nKNBn-(?FnbhfmG>O[qo)jiU_#Pb1_jEU=5X~>
|
|
||||||
,
|
|
||||||
4787 6043 64 4 /6L
|
|
||||||
$C
|
|
||||||
2?e3rTE~>
|
|
||||||
,
|
|
||||||
4888 6020 36 66 /3P
|
|
||||||
$C
|
|
||||||
0F`Iu"GRYps8W-!s8W-!s8W-!s8W-!s8W#5GmaIj5^<b`*Zk'+~>
|
|
||||||
,
|
|
||||||
325.859 4393.18 2074.14 640 re
|
|
||||||
S
|
|
||||||
988 4746 1D ,
|
|
||||||
1052 4746 75 70 /6P
|
|
||||||
$C
|
|
||||||
-:5l%4Q&%!7E<hpV":6'[qRJCs)7jb^Baf=rI=kIrI=coHL'#DFLhj3=G"H3Q&!2.iP$.W^O<iR
|
|
||||||
^O?.Ns8W-!?%%4!l_W%g.YJNmW*-o9_.5EX^]~>
|
|
||||||
,
|
|
||||||
1130 4746 1D ,
|
|
||||||
1227 4748 5V ,
|
|
||||||
1299 4747 4X ,
|
|
||||||
1338 4747 4X ,
|
|
||||||
1377 4747 1H ,
|
|
||||||
1427 4747 43 46 /3T
|
|
||||||
$C
|
|
||||||
+U!B,#`IZg+N&kbFIT)uY>*R3?`VbOs&K+!s7cC7%dEWcDuIE=Cc1)':teqg<Z!+e+[L^1~>
|
|
||||||
,
|
|
||||||
1468 4748 4D ,
|
|
||||||
1523 4748 5R ,
|
|
||||||
1606 4747 1L ,
|
|
||||||
1651 4748 4H ,
|
|
||||||
1703 4747 4X ,
|
|
||||||
1017 4603 27 100 /6U
|
|
||||||
$C
|
|
||||||
$DAqKWG8f>=&c6#lFrU]r@_N]?a!i:qQKr!s8W-!^Yf(Kn)*R5g]$*En%8#]pNq)P]6<SZD?~>
|
|
||||||
,
|
|
||||||
1048 4626 48 68 /3Y
|
|
||||||
$C
|
|
||||||
+Mp`i@M!L7P7E-G%M1q;6+RB92cnPXIs(D_p&Fnjp!U:\$ZrM)[M$$6Ya)ShL(^p-L*9`nTdmnh
|
|
||||||
LbB7"D[D1j]I)hidrZ>hp$'/>fDGU4>P_CtV/7^k-"3WX_$(66OFf^~>
|
|
||||||
,
|
|
||||||
1106 4609 14 30 /6Y
|
|
||||||
$X
|
|
||||||
$igb;#64jV!Pe]N!8mib!,qol!&srq!#P\Q!"8i9!"8i9!"9+V&,[OI+8d5Y+8?rQ+8?rI&)[].~>
|
|
||||||
,
|
|
||||||
1133 4628 3P ,
|
|
||||||
1175 4626 48 68 /4C
|
|
||||||
$C
|
|
||||||
+U!B%#WP4Y%Y=oL2bC\A9'Z8a\$!KWs7a+ts8T:rQiI(irH6q(M#(Dgp6TVH[[1EU(CWXhK&^eL
|
|
||||||
IG`hH4f<Dhs0pbNp=cqc@AOF0@)46G$4J<~>
|
|
||||||
,
|
|
||||||
1233 4609 6Y ,
|
|
||||||
1253 4628 47 66 /7C
|
|
||||||
$C
|
|
||||||
4rV1[^$g;/8%5t^mCg6iYkIe,[r6HWgT^)"\%?hNmbbLcIc'k@h@P17s8@@J97m+H?.IP@>=ue*
|
|
||||||
g/,V;<Zsg6"pt~>
|
|
||||||
,
|
|
||||||
1302 4628 49 67 /4G
|
|
||||||
$C
|
|
||||||
+N#kR&9qtts8W,E!iO88N:$YShqr@e^>FEg^Ae"XrV$-cn([Tohf$9Dhg^'grqlEeGJCiin*^~>
|
|
||||||
,
|
|
||||||
1360 4609 6Y ,
|
|
||||||
1380 4626 47 68 /7G
|
|
||||||
$C
|
|
||||||
-,NAa`$""NAfUp]3XNA(\kUV!=,,QR:A=MWrmoZO5@1qtV<LfUWBpq]"6rI7#2t>UG4#0VIRn=m
|
|
||||||
&,e`mrk$_ofIG]]9#F9=8f076L*9)AO8~>
|
|
||||||
,
|
|
||||||
1430 4628 7C ,
|
|
||||||
1488 4603 23 100 /4K
|
|
||||||
$C
|
|
||||||
-GJm%[r6HWg\1Aig\1T\Du5%Ps*juts6m`&s8W)!s8Q+!?Fp-&oXuoXlBQKbd\TT9WD]Rk~>
|
|
||||||
,
|
|
||||||
1552 4627 54 71 /7K
|
|
||||||
$C
|
|
||||||
.0PeVJaeNk4eRFS5mAE&]qjL6^>>@RYIFO]n,In;s8W%IrI'1I?.V_b]"o!>]4`h7$#m_6(CWXh
|
|
||||||
K&cn2s8W-!s/c!??fa>!~>
|
|
||||||
,
|
|
||||||
1607 4628 1T ,
|
|
||||||
1635 4627 4X ,
|
|
||||||
1673 4627 5N ,
|
|
||||||
3505.86 4400 2074.14 640 re
|
|
||||||
S
|
|
||||||
4168 4756 1D ,
|
|
||||||
4232 4756 6P ,
|
|
||||||
4310 4756 1D ,
|
|
||||||
4407 4758 5V ,
|
|
||||||
4479 4757 4X ,
|
|
||||||
4518 4757 4X ,
|
|
||||||
4557 4757 1H ,
|
|
||||||
4607 4757 3T ,
|
|
||||||
4648 4758 4D ,
|
|
||||||
4703 4758 5R ,
|
|
||||||
4786 4757 1L ,
|
|
||||||
4831 4758 4H ,
|
|
||||||
4883 4757 4X ,
|
|
||||||
4197 4613 6U ,
|
|
||||||
4228 4636 3Y ,
|
|
||||||
4286 4619 6Y ,
|
|
||||||
4313 4638 3P ,
|
|
||||||
4355 4636 4C ,
|
|
||||||
4413 4619 6Y ,
|
|
||||||
4433 4638 7C ,
|
|
||||||
4482 4638 4G ,
|
|
||||||
4540 4619 6Y ,
|
|
||||||
4560 4636 7G ,
|
|
||||||
4610 4638 7C ,
|
|
||||||
4668 4613 4K ,
|
|
||||||
4732 4637 7K ,
|
|
||||||
4787 4638 1T ,
|
|
||||||
4815 4637 4X ,
|
|
||||||
4853 4637 5N ,
|
|
||||||
1350 3430 0 -920 970 0 0 -340 S
|
|
||||||
2320 2170 23.33 70 -46.66 0 f*
|
|
||||||
2320 2170 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
4550 3470 0 -980 -1060 0 0 -330 S
|
|
||||||
3490 2160 23.33 70 -46.66 0 f*
|
|
||||||
3490 2160 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
1360 4380 0 -290 S
|
|
||||||
1360 4090 23.33 70 -46.66 0 f*
|
|
||||||
1360 4090 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
4570 4410 0 -290 S
|
|
||||||
4570 4120 23.33 70 -46.66 0 f*
|
|
||||||
4570 4120 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
[ 10 30 ] 0 d
|
|
||||||
20 w
|
|
||||||
2530 4140 710 0 S
|
|
||||||
4 w
|
|
||||||
2640 2470 0 -300 S
|
|
||||||
2640 2170 23.33 70 -46.66 0 f*
|
|
||||||
[ ] 0 d
|
|
||||||
2640 2170 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
[ 10 30 ] 0 d
|
|
||||||
2960 2470 0 -300 S
|
|
||||||
2960 2170 23.33 70 -46.66 0 f*
|
|
||||||
[ ] 0 d
|
|
||||||
2960 2170 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
325.859 5235.6 2074.14 434.008 re
|
|
||||||
S
|
|
||||||
1360 5226.66 0 -196.66 S
|
|
||||||
1360 5030 23.33 70 -46.66 0 f*
|
|
||||||
1360 5030 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
993 5435 2Z ,
|
|
||||||
1061 5435 5Z ,
|
|
||||||
1137 5433 3D ,
|
|
||||||
1253 5433 44 72 /4O
|
|
||||||
$C
|
|
||||||
-Fp3)aT0>t%tmBEHO(0AZjFI.D\/DiVY,7bl+cQYp&F@WdY_A<Tj_>nK*!C(;$<PV,sajs((,k6
|
|
||||||
(l0l>&9AC^Yd?[G;qJ5OFoVDYp&2;s[Hh[HU;u"]Yej1EJkleAiIp].Sc~>
|
|
||||||
,
|
|
||||||
1300 5434 3T ,
|
|
||||||
1344 5435 2F ,
|
|
||||||
1383 5434 1H ,
|
|
||||||
1433 5435 5R ,
|
|
||||||
1513 5434 7K ,
|
|
||||||
1569 5435 4L ,
|
|
||||||
1596 5435 1T ,
|
|
||||||
1624 5435 4H ,
|
|
||||||
1679 5414 4T ,
|
|
||||||
3505.86 5255.6 2074.14 434.02 re
|
|
||||||
S
|
|
||||||
4540 5246.66 0 -196.66 S
|
|
||||||
4540 5050 23.33 70 -46.66 0 f*
|
|
||||||
4540 5050 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
4173 5455 2Z ,
|
|
||||||
4241 5455 5Z ,
|
|
||||||
4317 5453 3D ,
|
|
||||||
4433 5453 4O ,
|
|
||||||
4480 5454 3T ,
|
|
||||||
4524 5455 2F ,
|
|
||||||
4563 5454 1H ,
|
|
||||||
4613 5455 5R ,
|
|
||||||
4693 5454 7K ,
|
|
||||||
4749 5455 4L ,
|
|
||||||
4776 5455 1T ,
|
|
||||||
4804 5455 4H ,
|
|
||||||
4859 5434 4T ,
|
|
||||||
1360 5980 0 -300 S
|
|
||||||
1360 5680 23.33 70 -46.66 0 f*
|
|
||||||
1360 5680 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
4540 5990 0 -300 S
|
|
||||||
4540 5690 23.33 70 -46.66 0 f*
|
|
||||||
4540 5690 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
1922.93 10 2074.14 640 re
|
|
||||||
S
|
|
||||||
2070 856.66 0 -196.66 S
|
|
||||||
2070 660 23.33 70 -46.66 0 f*
|
|
||||||
2070 660 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
2590 856.66 0 -196.66 S
|
|
||||||
2590 660 23.33 70 -46.66 0 f*
|
|
||||||
2590 660 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
3050 856.66 0 -196.66 S
|
|
||||||
3050 660 23.33 70 -46.66 0 f*
|
|
||||||
3050 660 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
3840 856.66 0 -196.66 S
|
|
||||||
3840 660 23.33 70 -46.66 0 f*
|
|
||||||
3840 660 23.33 70 -46.66 0 H
|
|
||||||
S
|
|
||||||
2697 293 4O ,
|
|
||||||
2745 294 1L ,
|
|
||||||
2789 295 2F ,
|
|
||||||
2828 295 1T ,
|
|
||||||
2856 294 1H ,
|
|
||||||
2906 295 4L ,
|
|
||||||
2933 295 1T ,
|
|
||||||
2961 295 42 43 /7O
|
|
||||||
$C
|
|
||||||
3#[8j<ph$]HZ-C.D=.5gpANb5mJ"6$)h-VVhV@b\]>&9nrO:PKn*TMT42JWa~>
|
|
||||||
,
|
|
||||||
3005 294 1H ,
|
|
||||||
3055 294 4X ,
|
|
||||||
3094 295 1T ,
|
|
||||||
3121 294 1P ,
|
|
||||||
3171 295 4H ,
|
|
||||||
20 w
|
|
||||||
4000 325 630 0 S
|
|
||||||
4630 325 -70 23.33 0 -46.66 f*
|
|
||||||
4630 325 -70 23.33 0 -46.66 H
|
|
||||||
S
|
|
||||||
4788 360 2N ,
|
|
||||||
4852 359 1P ,
|
|
||||||
4935 360 5Z ,
|
|
||||||
5011 335 46 100 /4S
|
|
||||||
$C
|
|
||||||
1[4kqmeacTrpT7QhsUMgpAXOTJ%PT-GPf/2rP,uChsUL$h>Zm;IrFcTGPf.apOBgRhfnsGVu~>
|
|
||||||
,
|
|
||||||
5061 360 5V ,
|
|
||||||
cleartomark end end pagesave restore showpage
|
|
||||||
%%PageTrailer
|
|
||||||
%%Trailer
|
|
||||||
%%Pages: 1
|
|
||||||
%%EOF
|
|
||||||
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 3.4 MiB |
|
Before Width: | Height: | Size: 625 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 11 KiB |
@@ -1,15 +0,0 @@
|
|||||||
Entry point openair2/SIMULATION/USER_TOOLS/LAYER2_SIM/mac_sim.c
|
|
||||||
|
|
||||||
1. endless loop calling each frame/TTI
|
|
||||||
|
|
||||||
a) macphy_scheduler (invokes MAC/RRC/PDCP/RLC protocols and generates TX/RX commands for PHY/Emul) :
|
|
||||||
[ see openair2/LAYER2/MAC/layer2_scheduler.c for how these are all scheduled]
|
|
||||||
|
|
||||||
b) emul_rx_tx() (emulates PHY and stimulates PDU transport mechanisms (ethernet or memory transfer)
|
|
||||||
contains abstraction layer, channel simulation, etc.
|
|
||||||
[ openair2/LAYER2/SIMULATION/PHY_EMULATION/CONTROL/phy_emulation.c ]
|
|
||||||
b1) rx local chbch processing (i.e. from CH on the same physical machine)
|
|
||||||
b2) rx local sach ul/dl processing
|
|
||||||
b3) rx ethernet data (both chbch and sach ul/dl)
|
|
||||||
b4) measurement-related stuff
|
|
||||||
]
|
|
||||||
@@ -1,231 +0,0 @@
|
|||||||
# Doxyfile 1.5.3
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Project related configuration options
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
DOXYFILE_ENCODING = UTF-8
|
|
||||||
PROJECT_NAME = OpenAirInterface
|
|
||||||
PROJECT_NUMBER = V1.0
|
|
||||||
OUTPUT_DIRECTORY =
|
|
||||||
CREATE_SUBDIRS = NO
|
|
||||||
OUTPUT_LANGUAGE = English
|
|
||||||
BRIEF_MEMBER_DESC = YES
|
|
||||||
REPEAT_BRIEF = YES
|
|
||||||
ABBREVIATE_BRIEF =
|
|
||||||
ALWAYS_DETAILED_SEC = NO
|
|
||||||
INLINE_INHERITED_MEMB = NO
|
|
||||||
FULL_PATH_NAMES = YES
|
|
||||||
STRIP_FROM_PATH =
|
|
||||||
STRIP_FROM_INC_PATH =
|
|
||||||
SHORT_NAMES = NO
|
|
||||||
JAVADOC_AUTOBRIEF = NO
|
|
||||||
QT_AUTOBRIEF = NO
|
|
||||||
MULTILINE_CPP_IS_BRIEF = NO
|
|
||||||
DETAILS_AT_TOP = NO
|
|
||||||
INHERIT_DOCS = YES
|
|
||||||
SEPARATE_MEMBER_PAGES = NO
|
|
||||||
TAB_SIZE = 8
|
|
||||||
ALIASES =
|
|
||||||
OPTIMIZE_OUTPUT_FOR_C = NO
|
|
||||||
OPTIMIZE_OUTPUT_JAVA = NO
|
|
||||||
BUILTIN_STL_SUPPORT = NO
|
|
||||||
CPP_CLI_SUPPORT = NO
|
|
||||||
DISTRIBUTE_GROUP_DOC = NO
|
|
||||||
SUBGROUPING = YES
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Build related configuration options
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
EXTRACT_ALL = NO
|
|
||||||
EXTRACT_PRIVATE = NO
|
|
||||||
EXTRACT_STATIC = NO
|
|
||||||
EXTRACT_LOCAL_CLASSES = YES
|
|
||||||
EXTRACT_LOCAL_METHODS = NO
|
|
||||||
EXTRACT_ANON_NSPACES = NO
|
|
||||||
HIDE_UNDOC_MEMBERS = NO
|
|
||||||
HIDE_UNDOC_CLASSES = NO
|
|
||||||
HIDE_FRIEND_COMPOUNDS = NO
|
|
||||||
HIDE_IN_BODY_DOCS = NO
|
|
||||||
INTERNAL_DOCS = NO
|
|
||||||
CASE_SENSE_NAMES = YES
|
|
||||||
HIDE_SCOPE_NAMES = NO
|
|
||||||
SHOW_INCLUDE_FILES = YES
|
|
||||||
INLINE_INFO = YES
|
|
||||||
SORT_MEMBER_DOCS = YES
|
|
||||||
SORT_BRIEF_DOCS = NO
|
|
||||||
SORT_BY_SCOPE_NAME = NO
|
|
||||||
GENERATE_TODOLIST = YES
|
|
||||||
GENERATE_TESTLIST = YES
|
|
||||||
GENERATE_BUGLIST = YES
|
|
||||||
GENERATE_DEPRECATEDLIST= YES
|
|
||||||
ENABLED_SECTIONS =
|
|
||||||
MAX_INITIALIZER_LINES = 30
|
|
||||||
SHOW_USED_FILES = YES
|
|
||||||
SHOW_DIRECTORIES = NO
|
|
||||||
FILE_VERSION_FILTER =
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to warning and progress messages
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
QUIET = NO
|
|
||||||
WARNINGS = YES
|
|
||||||
WARN_IF_UNDOCUMENTED = YES
|
|
||||||
WARN_IF_DOC_ERROR = YES
|
|
||||||
WARN_NO_PARAMDOC = NO
|
|
||||||
WARN_FORMAT = "$file:$line: $text"
|
|
||||||
WARN_LOGFILE =
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the input files
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
INPUT = example_doxy.h
|
|
||||||
INPUT_ENCODING = UTF-8
|
|
||||||
FILE_PATTERNS =
|
|
||||||
RECURSIVE = NO
|
|
||||||
EXCLUDE =
|
|
||||||
EXCLUDE_SYMLINKS = NO
|
|
||||||
EXCLUDE_PATTERNS =
|
|
||||||
EXCLUDE_SYMBOLS =
|
|
||||||
EXAMPLE_PATH =
|
|
||||||
EXAMPLE_PATTERNS =
|
|
||||||
EXAMPLE_RECURSIVE = NO
|
|
||||||
IMAGE_PATH = images/
|
|
||||||
INPUT_FILTER =
|
|
||||||
FILTER_PATTERNS =
|
|
||||||
FILTER_SOURCE_FILES = NO
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to source browsing
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
SOURCE_BROWSER = NO
|
|
||||||
INLINE_SOURCES = NO
|
|
||||||
STRIP_CODE_COMMENTS = YES
|
|
||||||
REFERENCED_BY_RELATION = YES
|
|
||||||
REFERENCES_RELATION = YES
|
|
||||||
REFERENCES_LINK_SOURCE = YES
|
|
||||||
USE_HTAGS = NO
|
|
||||||
VERBATIM_HEADERS = YES
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the alphabetical class index
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
ALPHABETICAL_INDEX = NO
|
|
||||||
COLS_IN_ALPHA_INDEX = 5
|
|
||||||
IGNORE_PREFIX =
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the HTML output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_HTML = YES
|
|
||||||
HTML_OUTPUT = html
|
|
||||||
HTML_FILE_EXTENSION = .html
|
|
||||||
HTML_HEADER =
|
|
||||||
HTML_FOOTER =
|
|
||||||
HTML_STYLESHEET =
|
|
||||||
HTML_ALIGN_MEMBERS = YES
|
|
||||||
GENERATE_HTMLHELP = NO
|
|
||||||
HTML_DYNAMIC_SECTIONS = NO
|
|
||||||
CHM_FILE =
|
|
||||||
HHC_LOCATION =
|
|
||||||
GENERATE_CHI = NO
|
|
||||||
BINARY_TOC = NO
|
|
||||||
TOC_EXPAND = NO
|
|
||||||
DISABLE_INDEX = NO
|
|
||||||
ENUM_VALUES_PER_LINE = 4
|
|
||||||
GENERATE_TREEVIEW = YES
|
|
||||||
TREEVIEW_WIDTH = 250
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the LaTeX output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_LATEX = YES
|
|
||||||
LATEX_OUTPUT = latex
|
|
||||||
LATEX_CMD_NAME = latex
|
|
||||||
MAKEINDEX_CMD_NAME = makeindex
|
|
||||||
COMPACT_LATEX = NO
|
|
||||||
PAPER_TYPE = a4wide
|
|
||||||
EXTRA_PACKAGES =
|
|
||||||
LATEX_HEADER =
|
|
||||||
PDF_HYPERLINKS = NO
|
|
||||||
USE_PDFLATEX = NO
|
|
||||||
LATEX_BATCHMODE = NO
|
|
||||||
LATEX_HIDE_INDICES = NO
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the RTF output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_RTF = NO
|
|
||||||
RTF_OUTPUT = rtf
|
|
||||||
COMPACT_RTF = NO
|
|
||||||
RTF_HYPERLINKS = NO
|
|
||||||
RTF_STYLESHEET_FILE =
|
|
||||||
RTF_EXTENSIONS_FILE =
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the man page output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_MAN = NO
|
|
||||||
MAN_OUTPUT = man
|
|
||||||
MAN_EXTENSION = .3
|
|
||||||
MAN_LINKS = NO
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the XML output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_XML = NO
|
|
||||||
XML_OUTPUT = xml
|
|
||||||
XML_SCHEMA =
|
|
||||||
XML_DTD =
|
|
||||||
XML_PROGRAMLISTING = YES
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options for the AutoGen Definitions output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_AUTOGEN_DEF = NO
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the Perl module output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_PERLMOD = NO
|
|
||||||
PERLMOD_LATEX = NO
|
|
||||||
PERLMOD_PRETTY = YES
|
|
||||||
PERLMOD_MAKEVAR_PREFIX =
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration options related to the preprocessor
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
ENABLE_PREPROCESSING = YES
|
|
||||||
MACRO_EXPANSION = NO
|
|
||||||
EXPAND_ONLY_PREDEF = NO
|
|
||||||
SEARCH_INCLUDES = YES
|
|
||||||
INCLUDE_PATH =
|
|
||||||
INCLUDE_FILE_PATTERNS =
|
|
||||||
PREDEFINED =
|
|
||||||
EXPAND_AS_DEFINED =
|
|
||||||
SKIP_FUNCTION_MACROS = YES
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration::additions related to external references
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
TAGFILES =
|
|
||||||
GENERATE_TAGFILE =
|
|
||||||
ALLEXTERNALS = NO
|
|
||||||
EXTERNAL_GROUPS = YES
|
|
||||||
PERL_PATH = /usr/bin/perl
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration options related to the dot tool
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
CLASS_DIAGRAMS = YES
|
|
||||||
MSCGEN_PATH =
|
|
||||||
HIDE_UNDOC_RELATIONS = YES
|
|
||||||
HAVE_DOT = NO
|
|
||||||
CLASS_GRAPH = YES
|
|
||||||
COLLABORATION_GRAPH = YES
|
|
||||||
GROUP_GRAPHS = YES
|
|
||||||
UML_LOOK = NO
|
|
||||||
TEMPLATE_RELATIONS = NO
|
|
||||||
INCLUDE_GRAPH = YES
|
|
||||||
INCLUDED_BY_GRAPH = YES
|
|
||||||
CALL_GRAPH = NO
|
|
||||||
CALLER_GRAPH = NO
|
|
||||||
GRAPHICAL_HIERARCHY = YES
|
|
||||||
DIRECTORY_GRAPH = YES
|
|
||||||
DOT_IMAGE_FORMAT = png
|
|
||||||
DOT_PATH = /usr/bin/dot
|
|
||||||
DOTFILE_DIRS =
|
|
||||||
DOT_GRAPH_MAX_NODES = 50
|
|
||||||
MAX_DOT_GRAPH_DEPTH = 0
|
|
||||||
DOT_TRANSPARENT = NO
|
|
||||||
DOT_MULTI_TARGETS = NO
|
|
||||||
GENERATE_LEGEND = YES
|
|
||||||
DOT_CLEANUP = YES
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration::additions related to the search engine
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
SEARCHENGINE = NO
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \file doxy_template.h
|
|
||||||
* \brief explain how this block is organized, and how it works
|
|
||||||
* \author Navid Nikaein
|
|
||||||
* \date 2006-2010
|
|
||||||
* \version 4.0
|
|
||||||
* \company Eurecom
|
|
||||||
* \email: navid.nikaein@eurecom.fr
|
|
||||||
* \note this a note
|
|
||||||
* \bug this is a bug
|
|
||||||
* \warning this is a warning
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __DOCS_TEMPLATES_CODE_EXAMPLE_DOXY__H__
|
|
||||||
#define __DOCS_TEMPLATES_CODE_EXAMPLE_DOXY__H__
|
|
||||||
|
|
||||||
//-----------------------------------begin group-----------------------------
|
|
||||||
|
|
||||||
|
|
||||||
/** @defgroup _oai System definitions
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
There is different modules:
|
|
||||||
- OAI Address
|
|
||||||
- OAI Components
|
|
||||||
- \ref _frame
|
|
||||||
|
|
||||||
The following diagram is based on graphviz (http://www.graphviz.org/), you need to install the package to view the diagram.
|
|
||||||
|
|
||||||
* \dot
|
|
||||||
* digraph group_frame {
|
|
||||||
* node [shape=rect, fontname=Helvetica, fontsize=8,style=filled,fillcolor=lightgrey];
|
|
||||||
* a [ label = " address"];
|
|
||||||
* b [ label = " component"];
|
|
||||||
* c [ label = " frame",URL="\ref _frame"];
|
|
||||||
* a->b;
|
|
||||||
* a->c;
|
|
||||||
* b->d;
|
|
||||||
* label="Architecture"
|
|
||||||
*
|
|
||||||
* }
|
|
||||||
* \enddot
|
|
||||||
|
|
||||||
\section _doxy Doxygen Help
|
|
||||||
You can use the provided Doxyfile as the configuration file or alternatively run "doxygen -g Doxyfile" to generat the file.
|
|
||||||
You need at least to set the some variables in the Doxyfile including "PROJECT_NAME","PROJECT_NUMBER","INPUT","IMAGE_PATH".
|
|
||||||
Doxygen help and commands can be found at http://www.stack.nl/~dimitri/doxygen/commands.html#cmdprotocol
|
|
||||||
|
|
||||||
\section _arch Architecture
|
|
||||||
|
|
||||||
You need to set the IMAGE_PATH in your Doxyfile
|
|
||||||
|
|
||||||
\image html arch.png "Architecture"
|
|
||||||
\image latex arch.eps "Architecture"
|
|
||||||
|
|
||||||
\subsection _mac MAC
|
|
||||||
thisis the mac
|
|
||||||
\subsection _rlc RLC
|
|
||||||
this is the rlc
|
|
||||||
\subsection _impl Implementation
|
|
||||||
what about the implementation
|
|
||||||
|
|
||||||
|
|
||||||
*@{*/
|
|
||||||
|
|
||||||
/*!\brief OAI protocol verion */
|
|
||||||
#define OAI_PROTOCOL_Version 0x00
|
|
||||||
/*!\brief Length in bytes of the OAI address */
|
|
||||||
#define OAI_ADDR_LEN 6
|
|
||||||
|
|
||||||
/*!\brief OAI snode type */
|
|
||||||
enum NodeType {
|
|
||||||
/*!\brief mesh routers are */
|
|
||||||
meshrouter = 1,
|
|
||||||
/*!\brief relay nodes are */
|
|
||||||
relaynode = 2,
|
|
||||||
/*!\brief clusterheads are */
|
|
||||||
clusterhead = 3
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/*@}*/
|
|
||||||
|
|
||||||
// --------------------------end group ------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
//---------------------------begin group------------------------------
|
|
||||||
/** @defgroup _frame Frame Structure
|
|
||||||
* @ingroup _oai
|
|
||||||
The Frame is composed of ....
|
|
||||||
|
|
||||||
|
|
||||||
*@{*/
|
|
||||||
/*! \brief the frame structure is ... */
|
|
||||||
struct frame {
|
|
||||||
u_short duration; /*!< \brief Duration in us (2 bytes) */
|
|
||||||
u_char da[OAI_ADDR_LEN];/*!< \brief Destination MAC@ (OAI_ADDR_LEN bytes) */
|
|
||||||
u_char sa[OAI_ADDR_LEN];/*!< \brief Source MAC@ (OAI_ADDR_LEN bytes)*/
|
|
||||||
u_char body[0]; /*!< \brief Body of the frame */
|
|
||||||
};
|
|
||||||
/*! \brief Broadcast ID is ... */
|
|
||||||
#define BROADCAST_ID 15
|
|
||||||
|
|
||||||
|
|
||||||
/*@}*/
|
|
||||||
|
|
||||||
//--------------------------end group-----------------------
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------begin func proto-------------------
|
|
||||||
|
|
||||||
/*! \fn int init(int,int)
|
|
||||||
* \brief this function initializes and allocates memories and etc.
|
|
||||||
* \param[in] src the memory area to copy frrm
|
|
||||||
* \param[out] dst the memory area to copy to
|
|
||||||
* \return 0 on success, otherwise -1
|
|
||||||
* \note
|
|
||||||
* @ingroup _oai
|
|
||||||
*/
|
|
||||||
int init(int src, int dst);
|
|
||||||
|
|
||||||
//-----------------------end func proto-------------------
|
|
||||||
#endif
|
|
||||||
@@ -1,785 +0,0 @@
|
|||||||
%!PS-Adobe-2.0 EPSF-2.0
|
|
||||||
%%Title: /homes/nikaeinn/templates/dev/arch.dia
|
|
||||||
%%Creator: Dia v0.95
|
|
||||||
%%CreationDate: Fri Dec 11 12:31:01 2009
|
|
||||||
%%For: nikaeinn
|
|
||||||
%%Orientation: Portrait
|
|
||||||
%%Magnification: 1.0000
|
|
||||||
%%BoundingBox: 0 0 355 138
|
|
||||||
%%BeginSetup
|
|
||||||
%%EndSetup
|
|
||||||
%%EndComments
|
|
||||||
%%BeginProlog
|
|
||||||
[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
|
|
||||||
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
|
|
||||||
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
|
|
||||||
/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
|
|
||||||
/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
|
|
||||||
/two /three /four /five /six /seven /eight /nine /colon /semicolon
|
|
||||||
/less /equal /greater /question /at /A /B /C /D /E
|
|
||||||
/F /G /H /I /J /K /L /M /N /O
|
|
||||||
/P /Q /R /S /T /U /V /W /X /Y
|
|
||||||
/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c
|
|
||||||
/d /e /f /g /h /i /j /k /l /m
|
|
||||||
/n /o /p /q /r /s /t /u /v /w
|
|
||||||
/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef
|
|
||||||
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
|
|
||||||
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
|
|
||||||
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
|
|
||||||
/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright
|
|
||||||
/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior
|
|
||||||
/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf
|
|
||||||
/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
|
|
||||||
/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde
|
|
||||||
/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex
|
|
||||||
/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring
|
|
||||||
/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
|
|
||||||
/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave
|
|
||||||
/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def
|
|
||||||
/cp {closepath} bind def
|
|
||||||
/c {curveto} bind def
|
|
||||||
/f {fill} bind def
|
|
||||||
/a {arc} bind def
|
|
||||||
/ef {eofill} bind def
|
|
||||||
/ex {exch} bind def
|
|
||||||
/gr {grestore} bind def
|
|
||||||
/gs {gsave} bind def
|
|
||||||
/sa {save} bind def
|
|
||||||
/rs {restore} bind def
|
|
||||||
/l {lineto} bind def
|
|
||||||
/m {moveto} bind def
|
|
||||||
/rm {rmoveto} bind def
|
|
||||||
/n {newpath} bind def
|
|
||||||
/s {stroke} bind def
|
|
||||||
/sh {show} bind def
|
|
||||||
/slc {setlinecap} bind def
|
|
||||||
/slj {setlinejoin} bind def
|
|
||||||
/slw {setlinewidth} bind def
|
|
||||||
/srgb {setrgbcolor} bind def
|
|
||||||
/rot {rotate} bind def
|
|
||||||
/sc {scale} bind def
|
|
||||||
/sd {setdash} bind def
|
|
||||||
/ff {findfont} bind def
|
|
||||||
/sf {setfont} bind def
|
|
||||||
/scf {scalefont} bind def
|
|
||||||
/sw {stringwidth pop} bind def
|
|
||||||
/tr {translate} bind def
|
|
||||||
|
|
||||||
/ellipsedict 8 dict def
|
|
||||||
ellipsedict /mtrx matrix put
|
|
||||||
/ellipse
|
|
||||||
{ ellipsedict begin
|
|
||||||
/endangle exch def
|
|
||||||
/startangle exch def
|
|
||||||
/yrad exch def
|
|
||||||
/xrad exch def
|
|
||||||
/y exch def
|
|
||||||
/x exch def /savematrix mtrx currentmatrix def
|
|
||||||
x y tr xrad yrad sc
|
|
||||||
0 0 1 startangle endangle arc
|
|
||||||
savematrix setmatrix
|
|
||||||
end
|
|
||||||
} def
|
|
||||||
|
|
||||||
/mergeprocs {
|
|
||||||
dup length
|
|
||||||
3 -1 roll
|
|
||||||
dup
|
|
||||||
length
|
|
||||||
dup
|
|
||||||
5 1 roll
|
|
||||||
3 -1 roll
|
|
||||||
add
|
|
||||||
array cvx
|
|
||||||
dup
|
|
||||||
3 -1 roll
|
|
||||||
0 exch
|
|
||||||
putinterval
|
|
||||||
dup
|
|
||||||
4 2 roll
|
|
||||||
putinterval
|
|
||||||
} bind def
|
|
||||||
/dpi_x 300 def
|
|
||||||
/dpi_y 300 def
|
|
||||||
/conicto {
|
|
||||||
/to_y exch def
|
|
||||||
/to_x exch def
|
|
||||||
/conic_cntrl_y exch def
|
|
||||||
/conic_cntrl_x exch def
|
|
||||||
currentpoint
|
|
||||||
/p0_y exch def
|
|
||||||
/p0_x exch def
|
|
||||||
/p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def
|
|
||||||
/p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def
|
|
||||||
/p2_x p1_x to_x p0_x sub 1 3 div mul add def
|
|
||||||
/p2_y p1_y to_y p0_y sub 1 3 div mul add def
|
|
||||||
p1_x p1_y p2_x p2_y to_x to_y curveto
|
|
||||||
} bind def
|
|
||||||
/start_ol { gsave 1.1 dpi_x div dup scale} bind def
|
|
||||||
/end_ol { closepath fill grestore } bind def
|
|
||||||
28.346000 -28.346000 scale
|
|
||||||
-4.400000 -8.150000 translate
|
|
||||||
%%EndProlog
|
|
||||||
|
|
||||||
|
|
||||||
1.000000 1.000000 1.000000 srgb
|
|
||||||
n 4.450000 3.350000 m 4.450000 8.100000 l 16.850000 8.100000 l 16.850000 3.350000 l f
|
|
||||||
0.100000 slw
|
|
||||||
[] 0 sd
|
|
||||||
[] 0 sd
|
|
||||||
0 slj
|
|
||||||
0.000000 0.000000 0.000000 srgb
|
|
||||||
n 4.450000 3.350000 m 4.450000 8.100000 l 16.850000 8.100000 l 16.850000 3.350000 l cp s
|
|
||||||
gsave 8.875000 4.300000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
1762 3044 moveto
|
|
||||||
1276 3044 990 2673 conicto
|
|
||||||
704 2303 704 1663 conicto
|
|
||||||
704 1025 990 654 conicto
|
|
||||||
1276 284 1762 284 conicto
|
|
||||||
2248 284 2532 654 conicto
|
|
||||||
2816 1025 2816 1663 conicto
|
|
||||||
2816 2303 2532 2673 conicto
|
|
||||||
2248 3044 1762 3044 conicto
|
|
||||||
1762 3392 moveto
|
|
||||||
2446 3392 2855 2922 conicto
|
|
||||||
3264 2453 3264 1664 conicto
|
|
||||||
3264 876 2855 406 conicto
|
|
||||||
2446 -64 1762 -64 conicto
|
|
||||||
1077 -64 666 405 conicto
|
|
||||||
256 874 256 1664 conicto
|
|
||||||
256 2453 666 2922 conicto
|
|
||||||
1077 3392 1762 3392 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 9.330083 4.300000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
1536 2838 moveto
|
|
||||||
935 1180 lineto
|
|
||||||
2140 1180 lineto
|
|
||||||
1536 2838 lineto
|
|
||||||
1286 3282 moveto
|
|
||||||
1789 3282 lineto
|
|
||||||
3038 0 lineto
|
|
||||||
2577 0 lineto
|
|
||||||
2278 832 lineto
|
|
||||||
801 832 lineto
|
|
||||||
503 0 lineto
|
|
||||||
35 0 lineto
|
|
||||||
1286 3282 lineto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 9.736483 4.300000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
448 3328 moveto
|
|
||||||
874 3328 lineto
|
|
||||||
874 0 lineto
|
|
||||||
448 0 lineto
|
|
||||||
448 3328 lineto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 9.914283 4.300000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
end_ol grestore
|
|
||||||
gsave 10.100550 4.300000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
1536 2838 moveto
|
|
||||||
935 1180 lineto
|
|
||||||
2140 1180 lineto
|
|
||||||
1536 2838 lineto
|
|
||||||
1286 3282 moveto
|
|
||||||
1789 3282 lineto
|
|
||||||
3038 0 lineto
|
|
||||||
2577 0 lineto
|
|
||||||
2278 832 lineto
|
|
||||||
801 832 lineto
|
|
||||||
503 0 lineto
|
|
||||||
35 0 lineto
|
|
||||||
1286 3282 lineto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 10.506950 4.300000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
1842 2133 moveto
|
|
||||||
1776 2174 1696 2193 conicto
|
|
||||||
1616 2212 1519 2212 conicto
|
|
||||||
1177 2212 993 1983 conicto
|
|
||||||
810 1755 810 1328 conicto
|
|
||||||
810 0 lineto
|
|
||||||
384 0 lineto
|
|
||||||
384 2496 lineto
|
|
||||||
810 2496 lineto
|
|
||||||
810 2129 lineto
|
|
||||||
937 2347 1141 2453 conicto
|
|
||||||
1345 2560 1638 2560 conicto
|
|
||||||
1680 2560 1730 2554 conicto
|
|
||||||
1781 2548 1842 2536 conicto
|
|
||||||
1842 2133 lineto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 10.752483 4.300000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2176 2404 moveto
|
|
||||||
2176 2020 lineto
|
|
||||||
2008 2116 1838 2164 conicto
|
|
||||||
1669 2212 1496 2212 conicto
|
|
||||||
1109 2212 895 1958 conicto
|
|
||||||
682 1705 682 1248 conicto
|
|
||||||
682 791 895 537 conicto
|
|
||||||
1109 284 1496 284 conicto
|
|
||||||
1669 284 1838 332 conicto
|
|
||||||
2008 380 2176 476 conicto
|
|
||||||
2176 97 lineto
|
|
||||||
2009 17 1830 -23 conicto
|
|
||||||
1652 -64 1449 -64 conicto
|
|
||||||
902 -64 579 291 conicto
|
|
||||||
256 646 256 1248 conicto
|
|
||||||
256 1859 582 2209 conicto
|
|
||||||
909 2560 1476 2560 conicto
|
|
||||||
1660 2560 1835 2521 conicto
|
|
||||||
2011 2482 2176 2404 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 11.074217 4.300000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2474 1509 moveto
|
|
||||||
2474 0 lineto
|
|
||||||
2048 0 lineto
|
|
||||||
2048 1502 lineto
|
|
||||||
2048 1858 1913 2035 conicto
|
|
||||||
1778 2212 1509 2212 conicto
|
|
||||||
1185 2212 997 1999 conicto
|
|
||||||
810 1786 810 1419 conicto
|
|
||||||
810 0 lineto
|
|
||||||
384 0 lineto
|
|
||||||
384 3456 lineto
|
|
||||||
810 3456 lineto
|
|
||||||
810 2120 lineto
|
|
||||||
954 2343 1152 2451 conicto
|
|
||||||
1350 2560 1609 2560 conicto
|
|
||||||
2037 2560 2255 2293 conicto
|
|
||||||
2474 2027 2474 1509 conicto
|
|
||||||
end_ol grestore
|
|
||||||
1.000000 1.000000 1.000000 srgb
|
|
||||||
n 4.900000 6.250000 m 4.900000 7.500000 l 8.250000 7.500000 l 8.250000 6.250000 l f
|
|
||||||
0.100000 slw
|
|
||||||
[] 0 sd
|
|
||||||
[] 0 sd
|
|
||||||
0 slj
|
|
||||||
0.000000 0.000000 0.000000 srgb
|
|
||||||
n 4.900000 6.250000 m 4.900000 7.500000 l 8.250000 7.500000 l 8.250000 6.250000 l cp s
|
|
||||||
1.000000 1.000000 1.000000 srgb
|
|
||||||
n 8.900000 6.200000 m 8.900000 7.495000 l 12.500000 7.495000 l 12.500000 6.200000 l f
|
|
||||||
0.100000 slw
|
|
||||||
[] 0 sd
|
|
||||||
[] 0 sd
|
|
||||||
0 slj
|
|
||||||
0.000000 0.000000 0.000000 srgb
|
|
||||||
n 8.900000 6.200000 m 8.900000 7.495000 l 12.500000 7.495000 l 12.500000 6.200000 l cp s
|
|
||||||
1.000000 1.000000 1.000000 srgb
|
|
||||||
n 13.090000 6.195000 m 13.090000 7.495000 l 16.400000 7.495000 l 16.400000 6.195000 l f
|
|
||||||
0.100000 slw
|
|
||||||
[] 0 sd
|
|
||||||
[] 0 sd
|
|
||||||
0 slj
|
|
||||||
0.000000 0.000000 0.000000 srgb
|
|
||||||
n 13.090000 6.195000 m 13.090000 7.495000 l 16.400000 7.495000 l 16.400000 6.195000 l cp s
|
|
||||||
gsave 5.400000 7.100000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
1536 2838 moveto
|
|
||||||
935 1180 lineto
|
|
||||||
2140 1180 lineto
|
|
||||||
1536 2838 lineto
|
|
||||||
1286 3282 moveto
|
|
||||||
1789 3282 lineto
|
|
||||||
3038 0 lineto
|
|
||||||
2577 0 lineto
|
|
||||||
2278 832 lineto
|
|
||||||
801 832 lineto
|
|
||||||
503 0 lineto
|
|
||||||
35 0 lineto
|
|
||||||
1286 3282 lineto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 5.795817 7.100000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2048 2116 moveto
|
|
||||||
2048 3456 lineto
|
|
||||||
2474 3456 lineto
|
|
||||||
2474 0 lineto
|
|
||||||
2048 0 lineto
|
|
||||||
2048 380 lineto
|
|
||||||
1922 154 1727 45 conicto
|
|
||||||
1533 -64 1261 -64 conicto
|
|
||||||
816 -64 536 297 conicto
|
|
||||||
256 659 256 1248 conicto
|
|
||||||
256 1837 536 2198 conicto
|
|
||||||
816 2560 1260 2560 conicto
|
|
||||||
1532 2560 1726 2450 conicto
|
|
||||||
1921 2341 2048 2116 conicto
|
|
||||||
682 1248 moveto
|
|
||||||
682 798 864 541 conicto
|
|
||||||
1046 284 1364 284 conicto
|
|
||||||
1683 284 1865 541 conicto
|
|
||||||
2048 798 2048 1248 conicto
|
|
||||||
2048 1699 1865 1955 conicto
|
|
||||||
1683 2212 1364 2212 conicto
|
|
||||||
1046 2212 864 1955 conicto
|
|
||||||
682 1699 682 1248 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 6.176817 7.100000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2048 2116 moveto
|
|
||||||
2048 3456 lineto
|
|
||||||
2474 3456 lineto
|
|
||||||
2474 0 lineto
|
|
||||||
2048 0 lineto
|
|
||||||
2048 380 lineto
|
|
||||||
1922 154 1727 45 conicto
|
|
||||||
1533 -64 1261 -64 conicto
|
|
||||||
816 -64 536 297 conicto
|
|
||||||
256 659 256 1248 conicto
|
|
||||||
256 1837 536 2198 conicto
|
|
||||||
816 2560 1260 2560 conicto
|
|
||||||
1532 2560 1726 2450 conicto
|
|
||||||
1921 2341 2048 2116 conicto
|
|
||||||
682 1248 moveto
|
|
||||||
682 798 864 541 conicto
|
|
||||||
1046 284 1364 284 conicto
|
|
||||||
1683 284 1865 541 conicto
|
|
||||||
2048 798 2048 1248 conicto
|
|
||||||
2048 1699 1865 1955 conicto
|
|
||||||
1683 2212 1364 2212 conicto
|
|
||||||
1046 2212 864 1955 conicto
|
|
||||||
682 1699 682 1248 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 6.557817 7.100000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
1842 2133 moveto
|
|
||||||
1776 2174 1696 2193 conicto
|
|
||||||
1616 2212 1519 2212 conicto
|
|
||||||
1177 2212 993 1983 conicto
|
|
||||||
810 1755 810 1328 conicto
|
|
||||||
810 0 lineto
|
|
||||||
384 0 lineto
|
|
||||||
384 2496 lineto
|
|
||||||
810 2496 lineto
|
|
||||||
810 2129 lineto
|
|
||||||
937 2347 1141 2453 conicto
|
|
||||||
1345 2560 1638 2560 conicto
|
|
||||||
1680 2560 1730 2554 conicto
|
|
||||||
1781 2548 1842 2536 conicto
|
|
||||||
1842 2133 lineto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 6.790121 7.100000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2538 1329 moveto
|
|
||||||
2538 1124 lineto
|
|
||||||
682 1124 lineto
|
|
||||||
682 714 908 499 conicto
|
|
||||||
1134 284 1537 284 conicto
|
|
||||||
1772 284 1991 340 conicto
|
|
||||||
2211 396 2432 509 conicto
|
|
||||||
2432 128 lineto
|
|
||||||
2216 34 1988 -15 conicto
|
|
||||||
1760 -64 1526 -64 conicto
|
|
||||||
940 -64 598 284 conicto
|
|
||||||
256 633 256 1226 conicto
|
|
||||||
256 1839 582 2199 conicto
|
|
||||||
909 2560 1463 2560 conicto
|
|
||||||
1960 2560 2249 2229 conicto
|
|
||||||
2538 1898 2538 1329 conicto
|
|
||||||
2112 1472 moveto
|
|
||||||
2112 1809 1931 2010 conicto
|
|
||||||
1751 2212 1453 2212 conicto
|
|
||||||
1116 2212 914 2018 conicto
|
|
||||||
712 1824 682 1472 conicto
|
|
||||||
2112 1472 lineto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 7.154187 7.100000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2021 2424 moveto
|
|
||||||
2021 2034 lineto
|
|
||||||
1818 2123 1638 2167 conicto
|
|
||||||
1459 2212 1267 2212 conicto
|
|
||||||
975 2212 828 2119 conicto
|
|
||||||
682 2026 682 1838 conicto
|
|
||||||
682 1696 784 1615 conicto
|
|
||||||
887 1535 1196 1461 conicto
|
|
||||||
1327 1430 lineto
|
|
||||||
1748 1337 1930 1166 conicto
|
|
||||||
2112 995 2112 690 conicto
|
|
||||||
2112 342 1839 139 conicto
|
|
||||||
1566 -64 1089 -64 conicto
|
|
||||||
891 -64 675 -25 conicto
|
|
||||||
460 14 222 94 conicto
|
|
||||||
222 519 lineto
|
|
||||||
481 402 692 343 conicto
|
|
||||||
903 284 1110 284 conicto
|
|
||||||
1387 284 1536 383 conicto
|
|
||||||
1686 482 1686 661 conicto
|
|
||||||
1686 829 1580 917 conicto
|
|
||||||
1475 1006 1118 1088 conicto
|
|
||||||
985 1121 lineto
|
|
||||||
620 1201 438 1367 conicto
|
|
||||||
256 1533 256 1823 conicto
|
|
||||||
256 2176 507 2368 conicto
|
|
||||||
758 2560 1219 2560 conicto
|
|
||||||
1448 2560 1649 2526 conicto
|
|
||||||
1851 2492 2021 2424 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 7.458988 7.100000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2021 2424 moveto
|
|
||||||
2021 2034 lineto
|
|
||||||
1818 2123 1638 2167 conicto
|
|
||||||
1459 2212 1267 2212 conicto
|
|
||||||
975 2212 828 2119 conicto
|
|
||||||
682 2026 682 1838 conicto
|
|
||||||
682 1696 784 1615 conicto
|
|
||||||
887 1535 1196 1461 conicto
|
|
||||||
1327 1430 lineto
|
|
||||||
1748 1337 1930 1166 conicto
|
|
||||||
2112 995 2112 690 conicto
|
|
||||||
2112 342 1839 139 conicto
|
|
||||||
1566 -64 1089 -64 conicto
|
|
||||||
891 -64 675 -25 conicto
|
|
||||||
460 14 222 94 conicto
|
|
||||||
222 519 lineto
|
|
||||||
481 402 692 343 conicto
|
|
||||||
903 284 1110 284 conicto
|
|
||||||
1387 284 1536 383 conicto
|
|
||||||
1686 482 1686 661 conicto
|
|
||||||
1686 829 1580 917 conicto
|
|
||||||
1475 1006 1118 1088 conicto
|
|
||||||
985 1121 lineto
|
|
||||||
620 1201 438 1367 conicto
|
|
||||||
256 1533 256 1823 conicto
|
|
||||||
256 2176 507 2368 conicto
|
|
||||||
758 2560 1219 2560 conicto
|
|
||||||
1448 2560 1649 2526 conicto
|
|
||||||
1851 2492 2021 2424 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 9.020000 7.095000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2880 3094 moveto
|
|
||||||
2880 2615 lineto
|
|
||||||
2656 2831 2402 2937 conicto
|
|
||||||
2149 3044 1864 3044 conicto
|
|
||||||
1301 3044 1002 2689 conicto
|
|
||||||
704 2334 704 1663 conicto
|
|
||||||
704 993 1002 638 conicto
|
|
||||||
1301 284 1864 284 conicto
|
|
||||||
2149 284 2402 390 conicto
|
|
||||||
2656 497 2880 713 conicto
|
|
||||||
2880 238 lineto
|
|
||||||
2649 87 2390 11 conicto
|
|
||||||
2132 -64 1845 -64 conicto
|
|
||||||
1106 -64 681 399 conicto
|
|
||||||
256 863 256 1664 conicto
|
|
||||||
256 2466 681 2929 conicto
|
|
||||||
1106 3392 1845 3392 conicto
|
|
||||||
2137 3392 2395 3317 conicto
|
|
||||||
2654 3243 2880 3094 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 9.434867 7.095000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
1377 2212 moveto
|
|
||||||
1055 2212 868 1954 conicto
|
|
||||||
682 1696 682 1248 conicto
|
|
||||||
682 800 867 542 conicto
|
|
||||||
1053 284 1377 284 conicto
|
|
||||||
1697 284 1883 543 conicto
|
|
||||||
2070 802 2070 1248 conicto
|
|
||||||
2070 1692 1883 1952 conicto
|
|
||||||
1697 2212 1377 2212 conicto
|
|
||||||
1376 2560 moveto
|
|
||||||
1899 2560 2197 2212 conicto
|
|
||||||
2496 1864 2496 1248 conicto
|
|
||||||
2496 635 2197 285 conicto
|
|
||||||
1899 -64 1376 -64 conicto
|
|
||||||
851 -64 553 285 conicto
|
|
||||||
256 635 256 1248 conicto
|
|
||||||
256 1864 553 2212 conicto
|
|
||||||
851 2560 1376 2560 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 9.798933 7.095000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2339 2028 moveto
|
|
||||||
2493 2302 2705 2431 conicto
|
|
||||||
2918 2560 3204 2560 conicto
|
|
||||||
3591 2560 3800 2286 conicto
|
|
||||||
4010 2013 4010 1509 conicto
|
|
||||||
4010 0 lineto
|
|
||||||
3584 0 lineto
|
|
||||||
3584 1502 lineto
|
|
||||||
3584 1862 3460 2037 conicto
|
|
||||||
3336 2212 3082 2212 conicto
|
|
||||||
2771 2212 2590 1999 conicto
|
|
||||||
2410 1786 2410 1419 conicto
|
|
||||||
2410 0 lineto
|
|
||||||
1984 0 lineto
|
|
||||||
1984 1502 lineto
|
|
||||||
1984 1865 1860 2038 conicto
|
|
||||||
1736 2212 1477 2212 conicto
|
|
||||||
1171 2212 990 1998 conicto
|
|
||||||
810 1784 810 1419 conicto
|
|
||||||
810 0 lineto
|
|
||||||
384 0 lineto
|
|
||||||
384 2496 lineto
|
|
||||||
810 2496 lineto
|
|
||||||
810 2120 lineto
|
|
||||||
947 2344 1141 2452 conicto
|
|
||||||
1335 2560 1602 2560 conicto
|
|
||||||
1871 2560 2060 2423 conicto
|
|
||||||
2249 2287 2339 2028 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 10.383133 7.095000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
810 380 moveto
|
|
||||||
810 -960 lineto
|
|
||||||
384 -960 lineto
|
|
||||||
384 2496 lineto
|
|
||||||
810 2496 lineto
|
|
||||||
810 2116 lineto
|
|
||||||
937 2339 1131 2449 conicto
|
|
||||||
1325 2560 1595 2560 conicto
|
|
||||||
2042 2560 2322 2198 conicto
|
|
||||||
2602 1837 2602 1248 conicto
|
|
||||||
2602 659 2322 297 conicto
|
|
||||||
2043 -64 1595 -64 conicto
|
|
||||||
1325 -64 1131 45 conicto
|
|
||||||
938 155 810 380 conicto
|
|
||||||
2176 1248 moveto
|
|
||||||
2176 1699 1994 1955 conicto
|
|
||||||
1812 2212 1493 2212 conicto
|
|
||||||
1175 2212 992 1955 conicto
|
|
||||||
810 1699 810 1248 conicto
|
|
||||||
810 798 992 541 conicto
|
|
||||||
1175 284 1493 284 conicto
|
|
||||||
1812 284 1994 541 conicto
|
|
||||||
2176 798 2176 1248 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 10.755667 7.095000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
1377 2212 moveto
|
|
||||||
1055 2212 868 1954 conicto
|
|
||||||
682 1696 682 1248 conicto
|
|
||||||
682 800 867 542 conicto
|
|
||||||
1053 284 1377 284 conicto
|
|
||||||
1697 284 1883 543 conicto
|
|
||||||
2070 802 2070 1248 conicto
|
|
||||||
2070 1692 1883 1952 conicto
|
|
||||||
1697 2212 1377 2212 conicto
|
|
||||||
1376 2560 moveto
|
|
||||||
1899 2560 2197 2212 conicto
|
|
||||||
2496 1864 2496 1248 conicto
|
|
||||||
2496 635 2197 285 conicto
|
|
||||||
1899 -64 1376 -64 conicto
|
|
||||||
851 -64 553 285 conicto
|
|
||||||
256 635 256 1248 conicto
|
|
||||||
256 1864 553 2212 conicto
|
|
||||||
851 2560 1376 2560 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 11.119733 7.095000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2474 1509 moveto
|
|
||||||
2474 0 lineto
|
|
||||||
2048 0 lineto
|
|
||||||
2048 1502 lineto
|
|
||||||
2048 1858 1913 2035 conicto
|
|
||||||
1778 2212 1509 2212 conicto
|
|
||||||
1185 2212 997 1999 conicto
|
|
||||||
810 1786 810 1419 conicto
|
|
||||||
810 0 lineto
|
|
||||||
384 0 lineto
|
|
||||||
384 2496 lineto
|
|
||||||
810 2496 lineto
|
|
||||||
810 2120 lineto
|
|
||||||
954 2340 1152 2450 conicto
|
|
||||||
1350 2560 1609 2560 conicto
|
|
||||||
2037 2560 2255 2293 conicto
|
|
||||||
2474 2027 2474 1509 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 11.500733 7.095000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2538 1329 moveto
|
|
||||||
2538 1124 lineto
|
|
||||||
682 1124 lineto
|
|
||||||
682 714 908 499 conicto
|
|
||||||
1134 284 1537 284 conicto
|
|
||||||
1772 284 1991 340 conicto
|
|
||||||
2211 396 2432 509 conicto
|
|
||||||
2432 128 lineto
|
|
||||||
2216 34 1988 -15 conicto
|
|
||||||
1760 -64 1526 -64 conicto
|
|
||||||
940 -64 598 284 conicto
|
|
||||||
256 633 256 1226 conicto
|
|
||||||
256 1839 582 2199 conicto
|
|
||||||
909 2560 1463 2560 conicto
|
|
||||||
1960 2560 2249 2229 conicto
|
|
||||||
2538 1898 2538 1329 conicto
|
|
||||||
2112 1472 moveto
|
|
||||||
2112 1809 1931 2010 conicto
|
|
||||||
1751 2212 1453 2212 conicto
|
|
||||||
1116 2212 914 2018 conicto
|
|
||||||
712 1824 682 1472 conicto
|
|
||||||
2112 1472 lineto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 11.864800 7.095000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2474 1509 moveto
|
|
||||||
2474 0 lineto
|
|
||||||
2048 0 lineto
|
|
||||||
2048 1502 lineto
|
|
||||||
2048 1858 1913 2035 conicto
|
|
||||||
1778 2212 1509 2212 conicto
|
|
||||||
1185 2212 997 1999 conicto
|
|
||||||
810 1786 810 1419 conicto
|
|
||||||
810 0 lineto
|
|
||||||
384 0 lineto
|
|
||||||
384 2496 lineto
|
|
||||||
810 2496 lineto
|
|
||||||
810 2120 lineto
|
|
||||||
954 2340 1152 2450 conicto
|
|
||||||
1350 2560 1609 2560 conicto
|
|
||||||
2037 2560 2255 2293 conicto
|
|
||||||
2474 2027 2474 1509 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 12.245800 7.095000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
832 3213 moveto
|
|
||||||
832 2524 lineto
|
|
||||||
1664 2524 lineto
|
|
||||||
1664 2176 lineto
|
|
||||||
832 2176 lineto
|
|
||||||
832 826 lineto
|
|
||||||
832 521 914 434 conicto
|
|
||||||
997 348 1249 348 conicto
|
|
||||||
1664 348 lineto
|
|
||||||
1664 0 lineto
|
|
||||||
1242 0 lineto
|
|
||||||
768 0 587 179 conicto
|
|
||||||
406 359 406 826 conicto
|
|
||||||
406 2176 lineto
|
|
||||||
128 2176 lineto
|
|
||||||
128 2524 lineto
|
|
||||||
406 2524 lineto
|
|
||||||
406 3213 lineto
|
|
||||||
832 3213 lineto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 13.945000 6.995000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
448 3328 moveto
|
|
||||||
2313 3328 lineto
|
|
||||||
2313 2980 lineto
|
|
||||||
874 2980 lineto
|
|
||||||
874 1948 lineto
|
|
||||||
2173 1948 lineto
|
|
||||||
2173 1600 lineto
|
|
||||||
874 1600 lineto
|
|
||||||
874 27 lineto
|
|
||||||
448 27 lineto
|
|
||||||
448 3328 lineto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 14.239614 6.995000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
1842 2133 moveto
|
|
||||||
1776 2174 1696 2193 conicto
|
|
||||||
1616 2212 1519 2212 conicto
|
|
||||||
1177 2212 993 1983 conicto
|
|
||||||
810 1755 810 1328 conicto
|
|
||||||
810 0 lineto
|
|
||||||
384 0 lineto
|
|
||||||
384 2496 lineto
|
|
||||||
810 2496 lineto
|
|
||||||
810 2129 lineto
|
|
||||||
937 2347 1141 2453 conicto
|
|
||||||
1345 2560 1638 2560 conicto
|
|
||||||
1680 2560 1730 2554 conicto
|
|
||||||
1781 2548 1842 2536 conicto
|
|
||||||
1842 2133 lineto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 14.485147 6.995000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
1528 1252 moveto
|
|
||||||
1050 1252 866 1139 conicto
|
|
||||||
682 1026 682 754 conicto
|
|
||||||
682 538 820 411 conicto
|
|
||||||
958 284 1196 284 conicto
|
|
||||||
1523 284 1721 523 conicto
|
|
||||||
1920 763 1920 1161 conicto
|
|
||||||
1920 1252 lineto
|
|
||||||
1528 1252 lineto
|
|
||||||
2346 1426 moveto
|
|
||||||
2346 0 lineto
|
|
||||||
1920 0 lineto
|
|
||||||
1920 383 lineto
|
|
||||||
1785 154 1579 45 conicto
|
|
||||||
1374 -64 1076 -64 conicto
|
|
||||||
701 -64 478 154 conicto
|
|
||||||
256 373 256 739 conicto
|
|
||||||
256 1166 543 1383 conicto
|
|
||||||
830 1600 1367 1600 conicto
|
|
||||||
1920 1600 lineto
|
|
||||||
1920 1639 lineto
|
|
||||||
1920 1913 1740 2062 conicto
|
|
||||||
1561 2212 1238 2212 conicto
|
|
||||||
1032 2212 836 2162 conicto
|
|
||||||
641 2113 448 2014 conicto
|
|
||||||
448 2386 lineto
|
|
||||||
670 2473 879 2516 conicto
|
|
||||||
1088 2560 1285 2560 conicto
|
|
||||||
1819 2560 2082 2279 conicto
|
|
||||||
2346 1998 2346 1426 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 14.849214 6.995000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2339 2028 moveto
|
|
||||||
2493 2302 2705 2431 conicto
|
|
||||||
2918 2560 3204 2560 conicto
|
|
||||||
3591 2560 3800 2286 conicto
|
|
||||||
4010 2013 4010 1509 conicto
|
|
||||||
4010 0 lineto
|
|
||||||
3584 0 lineto
|
|
||||||
3584 1502 lineto
|
|
||||||
3584 1862 3460 2037 conicto
|
|
||||||
3336 2212 3082 2212 conicto
|
|
||||||
2771 2212 2590 1999 conicto
|
|
||||||
2410 1786 2410 1419 conicto
|
|
||||||
2410 0 lineto
|
|
||||||
1984 0 lineto
|
|
||||||
1984 1502 lineto
|
|
||||||
1984 1865 1860 2038 conicto
|
|
||||||
1736 2212 1477 2212 conicto
|
|
||||||
1171 2212 990 1998 conicto
|
|
||||||
810 1784 810 1419 conicto
|
|
||||||
810 0 lineto
|
|
||||||
384 0 lineto
|
|
||||||
384 2496 lineto
|
|
||||||
810 2496 lineto
|
|
||||||
810 2120 lineto
|
|
||||||
947 2344 1141 2452 conicto
|
|
||||||
1335 2560 1602 2560 conicto
|
|
||||||
1871 2560 2060 2423 conicto
|
|
||||||
2249 2287 2339 2028 conicto
|
|
||||||
end_ol grestore
|
|
||||||
gsave 15.433414 6.995000 translate 0.035278 -0.035278 scale
|
|
||||||
start_ol
|
|
||||||
2538 1329 moveto
|
|
||||||
2538 1124 lineto
|
|
||||||
682 1124 lineto
|
|
||||||
682 714 908 499 conicto
|
|
||||||
1134 284 1537 284 conicto
|
|
||||||
1772 284 1991 340 conicto
|
|
||||||
2211 396 2432 509 conicto
|
|
||||||
2432 128 lineto
|
|
||||||
2216 34 1988 -15 conicto
|
|
||||||
1760 -64 1526 -64 conicto
|
|
||||||
940 -64 598 284 conicto
|
|
||||||
256 633 256 1226 conicto
|
|
||||||
256 1839 582 2199 conicto
|
|
||||||
909 2560 1463 2560 conicto
|
|
||||||
1960 2560 2249 2229 conicto
|
|
||||||
2538 1898 2538 1329 conicto
|
|
||||||
2112 1472 moveto
|
|
||||||
2112 1809 1931 2010 conicto
|
|
||||||
1751 2212 1453 2212 conicto
|
|
||||||
1116 2212 914 2018 conicto
|
|
||||||
712 1824 682 1472 conicto
|
|
||||||
2112 1472 lineto
|
|
||||||
end_ol grestore
|
|
||||||
showpage
|
|
||||||
|
Before Width: | Height: | Size: 2.8 KiB |
@@ -1,103 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \file Readme.doxy
|
|
||||||
* \brief explain how this block is organized, and how it works
|
|
||||||
* \author Navid Nikaein
|
|
||||||
* \date 2009
|
|
||||||
* \version 0.1
|
|
||||||
* \company Eurecom
|
|
||||||
* \email: navid.nikaein@eurecom.fr
|
|
||||||
* \warning
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*! \mainpage Table of contents
|
|
||||||
|
|
||||||
The content of this readme is the following:
|
|
||||||
|
|
||||||
-# What is this block about in OpenAirInterface
|
|
||||||
-# Folders and files description
|
|
||||||
-# Organization of the folders and their dependancies
|
|
||||||
-# Makefile targets and how to build
|
|
||||||
-# How to use through a tutorial: run a simple experimentation
|
|
||||||
|
|
||||||
|
|
||||||
\section _block What is this block about in OpenAirInterface ?
|
|
||||||
|
|
||||||
|
|
||||||
It essentially means "the hardware part" located at openair0.
|
|
||||||
|
|
||||||
Explain through the figures:
|
|
||||||
\image html image.png "caption" width=3cm
|
|
||||||
\image latex image.pdf "caption"
|
|
||||||
|
|
||||||
More information about ??? can be found on the Twiki:
|
|
||||||
https://twiki.eurecom.fr/twiki/bin/view/OpenAirInterface/WebHome
|
|
||||||
|
|
||||||
|
|
||||||
\section _folders Folders and files description
|
|
||||||
|
|
||||||
The structure is the following:
|
|
||||||
<table>
|
|
||||||
<tr><td>File/Folder</td> <td> Description </td> </tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
- Folder1: Contains this and that
|
|
||||||
- Folder2: Contains this and that
|
|
||||||
- init.bash: A simple script file, that any user SHOULD source from its environment personal set-up script (this is typically ~/.bashrc) by adding the following lines to it:
|
|
||||||
This is my ~/.bashrc file or equivalent export OPENAIRX=path/to/my/openairX/folder source $OPENAIRX/init.bash. The file includes variable definitions & path settings to access softwares, sources & Makefiles, software distribution in openair, and so on.
|
|
||||||
|
|
||||||
|
|
||||||
YOU DEFINETELY NEED TO SOURCE THIS FILE. Description
|
|
||||||
|
|
||||||
\section _organization Organization of the folders and their dependancies
|
|
||||||
|
|
||||||
|
|
||||||
The 3 folders have the following structures
|
|
||||||
|
|
||||||
- Folder1/subfolder1/: contains any ressource related to the design
|
|
||||||
|
|
||||||
- Folder2/subfolder2/: contains
|
|
||||||
|
|
||||||
- Folder2/src/
|
|
||||||
|
|
||||||
- Folder2/lib/
|
|
||||||
|
|
||||||
- Folder2/bin/
|
|
||||||
|
|
||||||
Explain where are the source files.
|
|
||||||
Explain the relationship with other Blocks.
|
|
||||||
|
|
||||||
|
|
||||||
\section _makefile Makefile targets and how to build
|
|
||||||
|
|
||||||
Explain whether you are using symbolic links or not,
|
|
||||||
how to backup/archive
|
|
||||||
how to generate the tags
|
|
||||||
how to print the vars
|
|
||||||
how to create the documentation
|
|
||||||
|
|
||||||
\section _howto How to use through a tutorial: run a simple experimentation
|
|
||||||
...
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*________________________OEPNAIR/OPENAIR0/________________________
|
|
||||||
|
|
||||||
File : Readme.txt
|
|
||||||
Authors : navid nikaein
|
|
||||||
Company : EURECOM
|
|
||||||
Emails : navid.nikaein@eurecom.fr
|
|
||||||
________________________________________________________________*/
|
|
||||||
|
|
||||||
|
|
||||||
-------------------------
|
|
||||||
Table of contents
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
The content of this readme is the following:
|
|
||||||
|
|
||||||
1) What is this block about in OpenAirInterface
|
|
||||||
2) Folders and files description
|
|
||||||
3) Organization of the folders and their dependancies
|
|
||||||
4) Makefile targets and how to build
|
|
||||||
5) How to use through a tutorial: run a simple experimentation
|
|
||||||
|
|
||||||
------------------------------------------------
|
|
||||||
1) What is this block about in OpenAirInterface ?
|
|
||||||
-----------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
It essentially means "the hardware part" located at openair0.
|
|
||||||
|
|
||||||
More information about ??? can be found on the Twiki:
|
|
||||||
https://twiki.eurecom.fr/twiki/bin/view/OpenAirInterface/WebHome
|
|
||||||
|
|
||||||
-----------------------------------------
|
|
||||||
2) Folders and files description
|
|
||||||
-----------------------------------------
|
|
||||||
|
|
||||||
File/Folder Description
|
|
||||||
----------- -----------
|
|
||||||
|
|
||||||
- Folder1/ contains
|
|
||||||
|
|
||||||
- Folder2/ contains
|
|
||||||
|
|
||||||
- init.bash A simple script file, that any user SHOULD source from
|
|
||||||
its environment personal set-up script (this is typically ~/.bashrc)
|
|
||||||
by adding the following lines to it:
|
|
||||||
|
|
||||||
# This is my ~/.bashrc file or equivalent
|
|
||||||
export OPENAIRX=path/to/my/openairX/folder
|
|
||||||
source $OPENAIRX/init.bash
|
|
||||||
|
|
||||||
The file includes variable definitions & path settings to
|
|
||||||
access softwares, sources & Makefiles, software
|
|
||||||
distribution in openair, and so on.
|
|
||||||
|
|
||||||
YOU DEFINETELY NEED TO SOURCE THIS FILE.
|
|
||||||
|
|
||||||
----------------------------------------------------
|
|
||||||
3) Organization of the folders and their dependancies
|
|
||||||
----------------------------------------------------
|
|
||||||
|
|
||||||
The 3 folders have the following structures
|
|
||||||
|
|
||||||
- Folder1/subfolder1/ contains any ressource related to the design
|
|
||||||
|
|
||||||
- Folder2/subfolder2/ contains
|
|
||||||
|
|
||||||
- Folder2/src/
|
|
||||||
|
|
||||||
- Folder2/lib/
|
|
||||||
|
|
||||||
- Folder2/bin/
|
|
||||||
|
|
||||||
Explain where are the source files.
|
|
||||||
Explain the relationship with other Blocks.
|
|
||||||
|
|
||||||
|
|
||||||
-----------------------------------------
|
|
||||||
4) Makefile targets and how to build
|
|
||||||
-----------------------------------------
|
|
||||||
|
|
||||||
Explain whether you are using symbolic links or not,
|
|
||||||
how to backup/archive
|
|
||||||
how to generate the tags
|
|
||||||
how to print the vars
|
|
||||||
how to create the documentation
|
|
||||||
|
|
||||||
----------------------------------------------------------------
|
|
||||||
6) How to use through a tutorial: run a simple experimentation
|
|
||||||
----------------------------------------------------------------
|
|
||||||
|
|
||||||
...
|
|
||||||
|
|
||||||
@@ -5364,3 +5364,11 @@ uint16_t nr_get_csi_bitlen(nr_csi_report_t *csi_report_template, uint8_t csi_rep
|
|||||||
|
|
||||||
return csi_bitlen;
|
return csi_bitlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t compute_PDU_length(uint32_t num_TLV, uint16_t total_length)
|
||||||
|
{
|
||||||
|
uint8_t pdu_length = 8; // 2 bytes PDU_Length + 2 bytes PDU_Index + 4 bytes num_TLV
|
||||||
|
// For each TLV, add 2 bytes tag + 2 bytes length + value size without padding
|
||||||
|
pdu_length += (num_TLV * 4) + total_length;
|
||||||
|
return pdu_length;
|
||||||
|
}
|
||||||
|
|||||||
@@ -307,4 +307,6 @@ void compute_csi_bitlen(NR_CSI_MeasConfig_t *csi_MeasConfig, nr_csi_report_t *cs
|
|||||||
|
|
||||||
uint16_t nr_get_csi_bitlen(nr_csi_report_t *csi_report_template, uint8_t csi_report_id);
|
uint16_t nr_get_csi_bitlen(nr_csi_report_t *csi_report_template, uint8_t csi_report_id);
|
||||||
|
|
||||||
|
uint16_t compute_PDU_length(uint32_t num_TLV, uint16_t total_length);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -469,7 +469,6 @@ typedef struct {
|
|||||||
/* PDUs */
|
/* PDUs */
|
||||||
/// Outgoing CCCH pdu for PHY
|
/// Outgoing CCCH pdu for PHY
|
||||||
CCCH_PDU CCCH_pdu;
|
CCCH_PDU CCCH_pdu;
|
||||||
ULSCH_PDU ulsch_pdu;
|
|
||||||
|
|
||||||
/* Random Access */
|
/* Random Access */
|
||||||
/// CRNTI
|
/// CRNTI
|
||||||
|
|||||||
@@ -376,6 +376,8 @@ void set_ra_rnti(NR_UE_MAC_INST_t *mac, fapi_nr_ul_config_prach_pdu *prach_pdu);
|
|||||||
void nr_Msg1_transmitted(module_id_t mod_id);
|
void nr_Msg1_transmitted(module_id_t mod_id);
|
||||||
|
|
||||||
void nr_Msg3_transmitted(module_id_t mod_id, uint8_t CC_id, frame_t frameP, slot_t slotP, uint8_t gNB_id);
|
void nr_Msg3_transmitted(module_id_t mod_id, uint8_t CC_id, frame_t frameP, slot_t slotP, uint8_t gNB_id);
|
||||||
|
void nr_get_msg3_payload(module_id_t mod_id);
|
||||||
|
void send_msg3_rrc_request(module_id_t mod_id, int rnti);
|
||||||
|
|
||||||
void nr_ue_msg2_scheduler(module_id_t mod_id, uint16_t rach_frame, uint16_t rach_slot, uint16_t *msg2_frame, uint16_t *msg2_slot);
|
void nr_ue_msg2_scheduler(module_id_t mod_id, uint16_t rach_frame, uint16_t rach_slot, uint16_t *msg2_frame, uint16_t *msg2_slot);
|
||||||
|
|
||||||
|
|||||||
@@ -40,10 +40,29 @@
|
|||||||
#include "openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h"
|
#include "openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h"
|
||||||
#include "nr_rlc/nr_rlc_oai_api.h"
|
#include "nr_rlc/nr_rlc_oai_api.h"
|
||||||
#include "RRC/NR/MESSAGES/asn1_msg.h"
|
#include "RRC/NR/MESSAGES/asn1_msg.h"
|
||||||
|
#include "RRC/NR_UE/rrc_proto.h"
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
static NR_UE_MAC_INST_t *nr_ue_mac_inst;
|
static NR_UE_MAC_INST_t *nr_ue_mac_inst;
|
||||||
|
|
||||||
|
static void send_srb0_rrc(int rnti, const uint8_t *sdu, sdu_size_t sdu_len, void *data)
|
||||||
|
{
|
||||||
|
AssertFatal(sdu_len > 0 && sdu_len < CCCH_SDU_SIZE, "invalid CCCH SDU size %d\n", sdu_len);
|
||||||
|
|
||||||
|
MessageDef *message_p = itti_alloc_new_message(TASK_MAC_UE, 0, NR_RRC_MAC_CCCH_DATA_IND);
|
||||||
|
memset(NR_RRC_MAC_CCCH_DATA_IND(message_p).sdu, 0, sdu_len);
|
||||||
|
memcpy(NR_RRC_MAC_CCCH_DATA_IND(message_p).sdu, sdu, sdu_len);
|
||||||
|
NR_RRC_MAC_CCCH_DATA_IND(message_p).sdu_size = sdu_len;
|
||||||
|
NR_RRC_MAC_CCCH_DATA_IND(message_p).rnti = rnti;
|
||||||
|
itti_send_msg_to_task(TASK_RRC_NRUE, 0, message_p);
|
||||||
|
}
|
||||||
|
|
||||||
|
void send_msg3_rrc_request(module_id_t mod_id, int rnti)
|
||||||
|
{
|
||||||
|
nr_rlc_activate_srb0(rnti, NULL, send_srb0_rrc);
|
||||||
|
nr_mac_rrc_msg3_ind(mod_id, rnti);
|
||||||
|
}
|
||||||
|
|
||||||
NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst) {
|
NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst) {
|
||||||
|
|
||||||
//LOG_I(MAC, "[MAIN] MAC_INIT_GLOBAL_PARAM IN...\n");
|
//LOG_I(MAC, "[MAIN] MAC_INIT_GLOBAL_PARAM IN...\n");
|
||||||
@@ -67,7 +86,9 @@ NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst) {
|
|||||||
if (rrc_inst && rrc_inst->scell_group_config) {
|
if (rrc_inst && rrc_inst->scell_group_config) {
|
||||||
|
|
||||||
nr_rrc_mac_config_req_scg(0, 0, rrc_inst->scell_group_config);
|
nr_rrc_mac_config_req_scg(0, 0, rrc_inst->scell_group_config);
|
||||||
AssertFatal(rlc_module_init(0) == 0, "%s: Could not initialize RLC layer\n", __FUNCTION__);
|
int rc = rlc_module_init(0);
|
||||||
|
AssertFatal(rc == 0, "%s: Could not initialize RLC layer\n", __FUNCTION__);
|
||||||
|
nr_rlc_activate_srb0(nr_ue_mac_inst->crnti, NULL, send_srb0_rrc);
|
||||||
if (IS_SOFTMODEM_NOS1){
|
if (IS_SOFTMODEM_NOS1){
|
||||||
// get default noS1 configuration
|
// get default noS1 configuration
|
||||||
NR_RadioBearerConfig_t *rbconfig = NULL;
|
NR_RadioBearerConfig_t *rbconfig = NULL;
|
||||||
@@ -91,7 +112,8 @@ NR_UE_MAC_INST_t * nr_l2_init_ue(NR_UE_RRC_INST_t* rrc_inst) {
|
|||||||
else {
|
else {
|
||||||
LOG_I(MAC,"Running without CellGroupConfig\n");
|
LOG_I(MAC,"Running without CellGroupConfig\n");
|
||||||
if(get_softmodem_params()->sa == 1) {
|
if(get_softmodem_params()->sa == 1) {
|
||||||
AssertFatal(rlc_module_init(0) == 0, "%s: Could not initialize RLC layer\n", __FUNCTION__);
|
int rc = rlc_module_init(0);
|
||||||
|
AssertFatal(rc == 0, "%s: Could not initialize RLC layer\n", __FUNCTION__);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -605,7 +605,52 @@ void nr_Msg3_transmitted(module_id_t mod_id, uint8_t CC_id, frame_t frameP, slot
|
|||||||
|
|
||||||
ra->RA_contention_resolution_timer_active = 1;
|
ra->RA_contention_resolution_timer_active = 1;
|
||||||
ra->ra_state = WAIT_CONTENTION_RESOLUTION;
|
ra->ra_state = WAIT_CONTENTION_RESOLUTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
void nr_get_msg3_payload(module_id_t mod_id)
|
||||||
|
{
|
||||||
|
NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id);
|
||||||
|
RA_config_t *ra = &mac->ra;
|
||||||
|
uint8_t *pdu = mac->CCCH_pdu.payload;
|
||||||
|
const uint8_t sh_size = sizeof(NR_MAC_SUBHEADER_FIXED);
|
||||||
|
NR_MAC_SUBHEADER_FIXED *header = (NR_MAC_SUBHEADER_FIXED *) pdu;
|
||||||
|
pdu += sh_size;
|
||||||
|
int lcid = 0; // SRB0 for messages sent in MSG3
|
||||||
|
tbs_size_t len = mac_rlc_data_req(mod_id,
|
||||||
|
ra->t_crnti,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
ENB_FLAG_NO,
|
||||||
|
MBMS_FLAG_NO,
|
||||||
|
lcid,
|
||||||
|
16, /* size of mac_ce above */
|
||||||
|
(char *)pdu,
|
||||||
|
0,
|
||||||
|
0);
|
||||||
|
AssertFatal(len > 0, "no data for Msg.3\n");
|
||||||
|
// UE Contention Resolution Identity
|
||||||
|
// Store the first 48 bits belonging to the uplink CCCH SDU within Msg3 to determine whether or not the
|
||||||
|
// Random Access Procedure has been successful after reception of Msg4
|
||||||
|
memcpy(ra->cont_res_id, pdu, sizeof(uint8_t) * 6);
|
||||||
|
pdu += len;
|
||||||
|
int Msg3_size = len + sh_size;
|
||||||
|
// Build header
|
||||||
|
header->R = 0;
|
||||||
|
header->LCID = UL_SCH_LCID_CCCH;
|
||||||
|
const uint8_t TBS_max = 8 + sizeof(NR_MAC_SUBHEADER_SHORT) + sizeof(NR_MAC_SUBHEADER_SHORT); // Note: unclear the reason behind the selection of such TBS_max
|
||||||
|
// Padding: fill remainder with 0
|
||||||
|
if (TBS_max - Msg3_size > 0) {
|
||||||
|
AssertFatal(TBS_max > Msg3_size, "Allocated resources are not enough for Msg3!\n");
|
||||||
|
LOG_D(NR_MAC, "Remaining %d bytes, filling with padding\n",TBS_max - Msg3_size);
|
||||||
|
((NR_MAC_SUBHEADER_FIXED *) pdu)->R = 0;
|
||||||
|
((NR_MAC_SUBHEADER_FIXED *) pdu)->LCID = UL_SCH_LCID_PADDING;
|
||||||
|
pdu += sizeof(NR_MAC_SUBHEADER_FIXED);
|
||||||
|
memset(pdu, 0, TBS_max - Msg3_size - sizeof(NR_MAC_SUBHEADER_FIXED));
|
||||||
|
}
|
||||||
|
// Dumping ULSCH payload
|
||||||
|
LOG_D(NR_MAC, "Dumping UL Msg3 MAC PDU with length %d: \n", TBS_max);
|
||||||
|
for(int k = 0; k < TBS_max; k++)
|
||||||
|
LOG_D(NR_MAC,"(%i): %i\n", k, pdu[k]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -660,47 +705,15 @@ uint8_t nr_ue_get_rach(module_id_t mod_id,
|
|||||||
|
|
||||||
LOG_D(NR_MAC, "In %s: RA not active. Checking for data to transmit from upper layers...\n", __FUNCTION__);
|
LOG_D(NR_MAC, "In %s: RA not active. Checking for data to transmit from upper layers...\n", __FUNCTION__);
|
||||||
|
|
||||||
const uint8_t lcid = UL_SCH_LCID_CCCH;
|
|
||||||
const uint8_t sh_size = sizeof(NR_MAC_SUBHEADER_FIXED);
|
|
||||||
const uint8_t TBS_max = 8 + sizeof(NR_MAC_SUBHEADER_SHORT) + sizeof(NR_MAC_SUBHEADER_SHORT); // Note: unclear the reason behind the selection of such TBS_max
|
const uint8_t TBS_max = 8 + sizeof(NR_MAC_SUBHEADER_SHORT) + sizeof(NR_MAC_SUBHEADER_SHORT); // Note: unclear the reason behind the selection of such TBS_max
|
||||||
int8_t size_sdu = 0;
|
int size_sdu = 0;
|
||||||
uint8_t mac_ce[16] = {0};
|
uint8_t mac_ce[16] = {0};
|
||||||
uint8_t *pdu = get_softmodem_params()->sa ? mac->CCCH_pdu.payload : mac_ce;
|
uint8_t *pdu = get_softmodem_params()->sa ? mac->CCCH_pdu.payload : mac_ce;
|
||||||
uint8_t *payload = pdu;
|
uint8_t *payload = pdu;
|
||||||
|
|
||||||
// Concerning the C-RNTI MAC CE, it has to be included if the UL transmission (Msg3) is not being made for the CCCH logical channel.
|
// Concerning the C-RNTI MAC CE, it has to be included if the UL transmission (Msg3) is not being made for the CCCH logical channel.
|
||||||
// Therefore it has been assumed that this event only occurs only when RA is done and it is not SA mode.
|
// Therefore it has been assumed that this event only occurs only when RA is done and it is not SA mode.
|
||||||
if (get_softmodem_params()->sa) {
|
if (get_softmodem_params()->nsa) {
|
||||||
|
|
||||||
NR_MAC_SUBHEADER_FIXED *header = (NR_MAC_SUBHEADER_FIXED *) pdu;
|
|
||||||
pdu += sh_size;
|
|
||||||
|
|
||||||
// initialisation by RRC
|
|
||||||
nr_rrc_ue_generate_RRCSetupRequest(mod_id,gNB_id);
|
|
||||||
|
|
||||||
// CCCH PDU
|
|
||||||
size_sdu = nr_mac_rrc_data_req_ue(mod_id, CC_id, gNB_id, frame, CCCH, pdu);
|
|
||||||
LOG_D(NR_MAC, "In %s: [UE %d][%d.%d]: Requested RRCConnectionRequest, got %d bytes for LCID 0x%02x \n", __FUNCTION__, mod_id, frame, nr_slot_tx, size_sdu, lcid);
|
|
||||||
|
|
||||||
if (size_sdu > 0) {
|
|
||||||
|
|
||||||
// UE Contention Resolution Identity
|
|
||||||
// Store the first 48 bits belonging to the uplink CCCH SDU within Msg3 to determine whether or not the
|
|
||||||
// Random Access Procedure has been successful after reception of Msg4
|
|
||||||
memcpy(ra->cont_res_id, pdu, sizeof(uint8_t) * 6);
|
|
||||||
|
|
||||||
pdu += size_sdu;
|
|
||||||
ra->Msg3_size = size_sdu + sh_size;
|
|
||||||
|
|
||||||
// Build header
|
|
||||||
header->R = 0;
|
|
||||||
header->LCID = lcid;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
pdu -= sh_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (get_softmodem_params()->nsa) {
|
|
||||||
|
|
||||||
uint8_t mac_sdus[34*1056];
|
uint8_t mac_sdus[34*1056];
|
||||||
uint16_t sdu_lengths[NB_RB_MAX] = {0};
|
uint16_t sdu_lengths[NB_RB_MAX] = {0};
|
||||||
@@ -722,7 +735,7 @@ uint8_t nr_ue_get_rach(module_id_t mod_id,
|
|||||||
ra->Msg3_size = size_sdu + sizeof(NR_MAC_SUBHEADER_SHORT) + sizeof(NR_MAC_SUBHEADER_SHORT);
|
ra->Msg3_size = size_sdu + sizeof(NR_MAC_SUBHEADER_SHORT) + sizeof(NR_MAC_SUBHEADER_SHORT);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else if (!get_softmodem_params()->sa) {
|
||||||
|
|
||||||
size_sdu = nr_write_ce_ulsch_pdu(pdu, mac, 0, &(mac->crnti), NULL, NULL, NULL);
|
size_sdu = nr_write_ce_ulsch_pdu(pdu, mac, 0, &(mac->crnti), NULL, NULL, NULL);
|
||||||
pdu += size_sdu;
|
pdu += size_sdu;
|
||||||
@@ -732,12 +745,12 @@ uint8_t nr_ue_get_rach(module_id_t mod_id,
|
|||||||
|
|
||||||
if (size_sdu > 0 && (ra->ra_state == GENERATE_PREAMBLE || get_softmodem_params()->nsa)) {
|
if (size_sdu > 0 && (ra->ra_state == GENERATE_PREAMBLE || get_softmodem_params()->nsa)) {
|
||||||
|
|
||||||
LOG_D(NR_MAC, "In %s: [UE %d][%d.%d]: starting initialisation Random Access Procedure...\n", __FUNCTION__, mod_id, frame, nr_slot_tx);
|
LOG_D(NR_MAC, "[UE %d][%d.%d]: starting initialisation Random Access Procedure...\n", mod_id, frame, nr_slot_tx);
|
||||||
|
|
||||||
// Padding: fill remainder with 0
|
// Padding: fill remainder with 0
|
||||||
if (TBS_max - ra->Msg3_size > 0) {
|
if (TBS_max - ra->Msg3_size > 0) {
|
||||||
AssertFatal(TBS_max > ra->Msg3_size, "In %s: allocated resources are not enough for Msg3!\n", __FUNCTION__);
|
AssertFatal(TBS_max > ra->Msg3_size, "In %s: allocated resources are not enough for Msg3!\n", __FUNCTION__);
|
||||||
LOG_D(NR_MAC, "In %s: remaining %d bytes, filling with padding\n", __FUNCTION__, TBS_max - ra->Msg3_size);
|
LOG_D(NR_MAC, "Remaining %d bytes, filling with padding\n",TBS_max - ra->Msg3_size);
|
||||||
((NR_MAC_SUBHEADER_FIXED *) pdu)->R = 0;
|
((NR_MAC_SUBHEADER_FIXED *) pdu)->R = 0;
|
||||||
((NR_MAC_SUBHEADER_FIXED *) pdu)->LCID = UL_SCH_LCID_PADDING;
|
((NR_MAC_SUBHEADER_FIXED *) pdu)->LCID = UL_SCH_LCID_PADDING;
|
||||||
pdu += sizeof(NR_MAC_SUBHEADER_FIXED);
|
pdu += sizeof(NR_MAC_SUBHEADER_FIXED);
|
||||||
@@ -745,25 +758,17 @@ uint8_t nr_ue_get_rach(module_id_t mod_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Dumping ULSCH payload
|
// Dumping ULSCH payload
|
||||||
LOG_D(NR_MAC, "In %s: dumping UL Msg3 MAC PDU with length %d: \n", __FUNCTION__, TBS_max);
|
LOG_D(NR_MAC, "Dumping UL Msg3 MAC PDU with length %d: \n", TBS_max);
|
||||||
for(int k = 0; k < TBS_max; k++) {
|
for(int k = 0; k < TBS_max; k++) {
|
||||||
LOG_D(NR_MAC,"(%i): %i\n", k, payload[k]);
|
LOG_D(NR_MAC,"(%i): %i\n", k, payload[k]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Msg3 was initialized with TBS_max bytes because the RA_Msg3_size will only be known after
|
|
||||||
// receiving Msg2 (which contains the Msg3 resource reserve).
|
|
||||||
// Msg3 will be transmitted with RA_Msg3_size bytes, removing unnecessary 0s.
|
|
||||||
if (!get_softmodem_params()->nsa) {
|
|
||||||
mac->ulsch_pdu.Pdu_size = TBS_max;
|
|
||||||
memcpy(mac->ulsch_pdu.payload, payload, TBS_max);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else if (ra->RA_window_cnt != -1) { // RACH is active
|
} else if (ra->RA_window_cnt != -1) { // RACH is active
|
||||||
|
|
||||||
LOG_D(MAC, "In %s [%d.%d] RA is active: RA window count %d, RA backoff count %d\n", __FUNCTION__, frame, nr_slot_tx, ra->RA_window_cnt, ra->RA_backoff_cnt);
|
LOG_D(MAC, "[%d.%d] RA is active: RA window count %d, RA backoff count %d\n", frame, nr_slot_tx, ra->RA_window_cnt, ra->RA_backoff_cnt);
|
||||||
|
|
||||||
if (ra->RA_BI_found){
|
if (ra->RA_BI_found){
|
||||||
prach_resources->RA_PREAMBLE_BACKOFF = prach_resources->RA_SCALING_FACTOR_BI * ra->RA_backoff_indicator;
|
prach_resources->RA_PREAMBLE_BACKOFF = prach_resources->RA_SCALING_FACTOR_BI * ra->RA_backoff_indicator;
|
||||||
@@ -806,7 +811,7 @@ uint8_t nr_ue_get_rach(module_id_t mod_id,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ra->RA_contention_resolution_timer_active){
|
if (ra->RA_contention_resolution_timer_active) {
|
||||||
nr_ue_contention_resolution(mod_id, CC_id, frame, nr_slot_tx, prach_resources);
|
nr_ue_contention_resolution(mod_id, CC_id, frame, nr_slot_tx, prach_resources);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3598,7 +3598,7 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( mac_len > 0 ) {
|
if (mac_len > 0) {
|
||||||
LOG_D(NR_MAC,"DL_SCH_LCID_CCCH (e.g. RRCSetup) with payload len %d\n", mac_len);
|
LOG_D(NR_MAC,"DL_SCH_LCID_CCCH (e.g. RRCSetup) with payload len %d\n", mac_len);
|
||||||
for (int i = 0; i < mac_subheader_len; i++) {
|
for (int i = 0; i < mac_subheader_len; i++) {
|
||||||
LOG_D(NR_MAC, "MAC header %d: 0x%x\n", i, pduP[i]);
|
LOG_D(NR_MAC, "MAC header %d: 0x%x\n", i, pduP[i]);
|
||||||
@@ -3606,7 +3606,18 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info,
|
|||||||
for (int i = 0; i < mac_len; i++) {
|
for (int i = 0; i < mac_len; i++) {
|
||||||
LOG_D(NR_MAC, "%d: 0x%x\n", i, pduP[mac_subheader_len + i]);
|
LOG_D(NR_MAC, "%d: 0x%x\n", i, pduP[mac_subheader_len + i]);
|
||||||
}
|
}
|
||||||
nr_mac_rrc_data_ind_ue(module_idP, CC_id, gNB_index, frameP, 0, mac->crnti, CCCH, pduP+mac_subheader_len, mac_len);
|
|
||||||
|
mac_rlc_data_ind(module_idP,
|
||||||
|
mac->crnti,
|
||||||
|
module_idP,
|
||||||
|
frameP,
|
||||||
|
ENB_FLAG_NO,
|
||||||
|
MBMS_FLAG_NO,
|
||||||
|
0,
|
||||||
|
(char *)(pduP + mac_subheader_len),
|
||||||
|
mac_len,
|
||||||
|
1,
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DL_SCH_LCID_TCI_STATE_ACT_UE_SPEC_PDSCH:
|
case DL_SCH_LCID_TCI_STATE_ACT_UE_SPEC_PDSCH:
|
||||||
@@ -4112,7 +4123,7 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, int pdu_id)
|
|||||||
LOG_I(NR_MAC, "rar->TCRNTI_1 = 0x%x\n", rar->TCRNTI_1);
|
LOG_I(NR_MAC, "rar->TCRNTI_1 = 0x%x\n", rar->TCRNTI_1);
|
||||||
LOG_I(NR_MAC, "rar->TCRNTI_2 = 0x%x\n", rar->TCRNTI_2);
|
LOG_I(NR_MAC, "rar->TCRNTI_2 = 0x%x\n", rar->TCRNTI_2);
|
||||||
|
|
||||||
LOG_I(NR_MAC, "In %s:[%d.%d]: [UE %d] Received RAR with t_alloc %d f_alloc %d ta_command %d mcs %d freq_hopping %d tpc_command %d t_crnti %x \n",
|
LOG_I(NR_MAC, "In %s:[%d.%d]: [UE %d] Received RAR with t_alloc %d f_alloc %d ta_command %d mcs %d freq_hopping %d tpc_command %d\n",
|
||||||
__FUNCTION__,
|
__FUNCTION__,
|
||||||
frame,
|
frame,
|
||||||
slot,
|
slot,
|
||||||
@@ -4122,8 +4133,7 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, int pdu_id)
|
|||||||
ta_command,
|
ta_command,
|
||||||
rar_grant.mcs,
|
rar_grant.mcs,
|
||||||
rar_grant.freq_hopping,
|
rar_grant.freq_hopping,
|
||||||
tpc_command,
|
tpc_command);
|
||||||
ra->t_crnti);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Schedule Msg3
|
// Schedule Msg3
|
||||||
@@ -4135,7 +4145,7 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, int pdu_id)
|
|||||||
}
|
}
|
||||||
ret = nr_ue_pusch_scheduler(mac, is_Msg3, frame, slot, &frame_tx, &slot_tx, tda_info.k2);
|
ret = nr_ue_pusch_scheduler(mac, is_Msg3, frame, slot, &frame_tx, &slot_tx, tda_info.k2);
|
||||||
|
|
||||||
if (ret != -1){
|
if (ret != -1) {
|
||||||
|
|
||||||
fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, slot_tx, tda_info.k2);
|
fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, slot_tx, tda_info.k2);
|
||||||
uint16_t rnti = mac->crnti;
|
uint16_t rnti = mac->crnti;
|
||||||
@@ -4151,6 +4161,7 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, int pdu_id)
|
|||||||
if (!ra->cfra) {
|
if (!ra->cfra) {
|
||||||
ra->t_crnti = rar->TCRNTI_2 + (rar->TCRNTI_1 << 8);
|
ra->t_crnti = rar->TCRNTI_2 + (rar->TCRNTI_1 << 8);
|
||||||
rnti = ra->t_crnti;
|
rnti = ra->t_crnti;
|
||||||
|
send_msg3_rrc_request(mod_id, rnti);
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_lock(&ul_config->mutex_ul_config);
|
pthread_mutex_lock(&ul_config->mutex_ul_config);
|
||||||
|
|||||||
@@ -1037,13 +1037,13 @@ void nr_ue_ul_scheduler(nr_uplink_indication_t *ul_info)
|
|||||||
mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id],
|
mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id],
|
||||||
ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator,
|
ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator,
|
||||||
TBS_bytes,ra->ra_state);
|
TBS_bytes,ra->ra_state);
|
||||||
if (ra->ra_state == WAIT_RAR && !ra->cfra){
|
if (ra->ra_state == WAIT_RAR && !ra->cfra) {
|
||||||
memcpy(ulsch_input_buffer, mac->ulsch_pdu.payload, TBS_bytes);
|
nr_get_msg3_payload(mod_id);
|
||||||
LOG_D(NR_MAC,"[RAPROC] Msg3 to be transmitted:\n");
|
memcpy(ulsch_input_buffer, mac->CCCH_pdu.payload, TBS_bytes);
|
||||||
for (int k = 0; k < TBS_bytes; k++) {
|
for (int k = 0; k < TBS_bytes; k++) {
|
||||||
LOG_D(NR_MAC,"(%i): 0x%x\n",k,mac->ulsch_pdu.payload[k]);
|
LOG_D(NR_MAC,"(%i): 0x%x\n", k, ulsch_input_buffer[k]);
|
||||||
}
|
}
|
||||||
LOG_D(NR_MAC,"Flipping NDI for harq_id %d (Msg3)\n",ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator);
|
LOG_D(NR_MAC,"Flipping NDI for harq_id %d (Msg3)\n", ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator);
|
||||||
mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator;
|
mac->UL_ndi[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator;
|
||||||
mac->first_ul_tx[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = 0;
|
mac->first_ul_tx[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = 0;
|
||||||
mac_pdu_exist = 1;
|
mac_pdu_exist = 1;
|
||||||
|
|||||||
@@ -1399,10 +1399,10 @@ static void nr_generate_Msg2(module_id_t module_idP,
|
|||||||
T(T_GNB_MAC_DL_RAR_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(ra->RA_rnti), T_INT(frameP),
|
T(T_GNB_MAC_DL_RAR_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(ra->RA_rnti), T_INT(frameP),
|
||||||
T_INT(slotP), T_INT(0), T_BUFFER(&tx_req->TLVs[0].value.direct[0], tx_req->TLVs[0].length));
|
T_INT(slotP), T_INT(0), T_BUFFER(&tx_req->TLVs[0].value.direct[0], tx_req->TLVs[0].length));
|
||||||
|
|
||||||
tx_req->PDU_length = pdsch_pdu_rel15->TBSize[0];
|
|
||||||
tx_req->PDU_index = pduindex;
|
tx_req->PDU_index = pduindex;
|
||||||
tx_req->num_TLV = 1;
|
tx_req->num_TLV = 1;
|
||||||
tx_req->TLVs[0].length = tx_req->PDU_length + 2;
|
tx_req->TLVs[0].length = pdsch_pdu_rel15->TBSize[0];
|
||||||
|
tx_req->PDU_length = compute_PDU_length(tx_req->num_TLV, pdsch_pdu_rel15->TBSize[0]);
|
||||||
TX_req->SFN = frameP;
|
TX_req->SFN = frameP;
|
||||||
TX_req->Number_of_PDUs++;
|
TX_req->Number_of_PDUs++;
|
||||||
TX_req->Slot = slotP;
|
TX_req->Slot = slotP;
|
||||||
@@ -1845,10 +1845,10 @@ static void nr_generate_Msg4(module_id_t module_idP,
|
|||||||
// DL TX request
|
// DL TX request
|
||||||
nfapi_nr_pdu_t *tx_req = &TX_req->pdu_list[TX_req->Number_of_PDUs];
|
nfapi_nr_pdu_t *tx_req = &TX_req->pdu_list[TX_req->Number_of_PDUs];
|
||||||
memcpy(tx_req->TLVs[0].value.direct, harq->transportBlock, sizeof(uint8_t) * harq->tb_size);
|
memcpy(tx_req->TLVs[0].value.direct, harq->transportBlock, sizeof(uint8_t) * harq->tb_size);
|
||||||
tx_req->PDU_length = harq->tb_size;
|
|
||||||
tx_req->PDU_index = pduindex;
|
tx_req->PDU_index = pduindex;
|
||||||
tx_req->num_TLV = 1;
|
tx_req->num_TLV = 1;
|
||||||
tx_req->TLVs[0].length = harq->tb_size + 2;
|
tx_req->TLVs[0].length = harq->tb_size;
|
||||||
|
tx_req->PDU_length = compute_PDU_length(tx_req->num_TLV, tx_req->TLVs[0].length);
|
||||||
TX_req->SFN = frameP;
|
TX_req->SFN = frameP;
|
||||||
TX_req->Number_of_PDUs++;
|
TX_req->Number_of_PDUs++;
|
||||||
TX_req->Slot = slotP;
|
TX_req->Slot = slotP;
|
||||||
|
|||||||
@@ -601,10 +601,10 @@ void schedule_nr_sib1(module_id_t module_idP,
|
|||||||
// Data to be transmitted
|
// Data to be transmitted
|
||||||
memcpy(tx_req->TLVs[0].value.direct, cc->sib1_bcch_pdu, TBS);
|
memcpy(tx_req->TLVs[0].value.direct, cc->sib1_bcch_pdu, TBS);
|
||||||
|
|
||||||
tx_req->PDU_length = TBS;
|
|
||||||
tx_req->PDU_index = pdu_index;
|
tx_req->PDU_index = pdu_index;
|
||||||
tx_req->num_TLV = 1;
|
tx_req->num_TLV = 1;
|
||||||
tx_req->TLVs[0].length = TBS + 2;
|
tx_req->TLVs[0].length = TBS;
|
||||||
|
tx_req->PDU_length = compute_PDU_length(tx_req->num_TLV, tx_req->TLVs[0].length);
|
||||||
TX_req->Number_of_PDUs++;
|
TX_req->Number_of_PDUs++;
|
||||||
TX_req->SFN = frameP;
|
TX_req->SFN = frameP;
|
||||||
TX_req->Slot = slotP;
|
TX_req->Slot = slotP;
|
||||||
|
|||||||
@@ -1367,10 +1367,10 @@ void nr_schedule_ue_spec(module_id_t module_id,
|
|||||||
|
|
||||||
const int ntx_req = TX_req->Number_of_PDUs;
|
const int ntx_req = TX_req->Number_of_PDUs;
|
||||||
nfapi_nr_pdu_t *tx_req = &TX_req->pdu_list[ntx_req];
|
nfapi_nr_pdu_t *tx_req = &TX_req->pdu_list[ntx_req];
|
||||||
tx_req->PDU_length = TBS;
|
|
||||||
tx_req->PDU_index = pduindex;
|
tx_req->PDU_index = pduindex;
|
||||||
tx_req->num_TLV = 1;
|
tx_req->num_TLV = 1;
|
||||||
tx_req->TLVs[0].length = TBS + 2;
|
tx_req->TLVs[0].length = TBS;
|
||||||
|
tx_req->PDU_length = compute_PDU_length(tx_req->num_TLV, tx_req->TLVs[0].length);
|
||||||
memcpy(tx_req->TLVs[0].value.direct, harq->transportBlock, TBS);
|
memcpy(tx_req->TLVs[0].value.direct, harq->transportBlock, TBS);
|
||||||
TX_req->Number_of_PDUs++;
|
TX_req->Number_of_PDUs++;
|
||||||
TX_req->SFN = frame;
|
TX_req->SFN = frame;
|
||||||
|
|||||||
@@ -2908,10 +2908,10 @@ void UL_tti_req_ahead_initialization(gNB_MAC_INST * gNB, NR_ServingCellConfigCom
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_initial_ul_rrc_message(gNB_MAC_INST *mac, int rnti, const uint8_t *sdu, sdu_size_t sdu_len, void *rawUE)
|
void send_initial_ul_rrc_message(int rnti, const uint8_t *sdu, sdu_size_t sdu_len, void *data)
|
||||||
{
|
{
|
||||||
|
gNB_MAC_INST *mac = RC.nrmac[0];
|
||||||
NR_UE_info_t *UE = (NR_UE_info_t *)rawUE;
|
NR_UE_info_t *UE = (NR_UE_info_t *)data;
|
||||||
NR_SCHED_ENSURE_LOCKED(&mac->sched_lock);
|
NR_SCHED_ENSURE_LOCKED(&mac->sched_lock);
|
||||||
|
|
||||||
uint8_t du2cu[1024];
|
uint8_t du2cu[1024];
|
||||||
@@ -2945,7 +2945,7 @@ void prepare_initial_ul_rrc_message(gNB_MAC_INST *mac, NR_UE_info_t *UE)
|
|||||||
process_CellGroup(cellGroupConfig, UE);
|
process_CellGroup(cellGroupConfig, UE);
|
||||||
|
|
||||||
/* activate SRB0 */
|
/* activate SRB0 */
|
||||||
nr_rlc_activate_srb0(UE->rnti, mac, UE, send_initial_ul_rrc_message);
|
nr_rlc_activate_srb0(UE->rnti, UE, send_initial_ul_rrc_message);
|
||||||
|
|
||||||
/* the cellGroup sent to CU specifies there is SRB1, so create it */
|
/* the cellGroup sent to CU specifies there is SRB1, so create it */
|
||||||
DevAssert(cellGroupConfig->rlc_BearerToAddModList->list.count == 1);
|
DevAssert(cellGroupConfig->rlc_BearerToAddModList->list.count == 1);
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <immintrin.h>
|
#include "PHY/sse_intrin.h"
|
||||||
|
|
||||||
//#define SRS_DEBUG
|
//#define SRS_DEBUG
|
||||||
|
|
||||||
|
|||||||
@@ -435,7 +435,7 @@ size_t dump_mac_stats(gNB_MAC_INST *gNB, char *output, size_t strlen, bool reset
|
|||||||
void process_CellGroup(NR_CellGroupConfig_t *CellGroup, NR_UE_info_t *UE);
|
void process_CellGroup(NR_CellGroupConfig_t *CellGroup, NR_UE_info_t *UE);
|
||||||
|
|
||||||
void prepare_initial_ul_rrc_message(gNB_MAC_INST *mac, NR_UE_info_t *UE);
|
void prepare_initial_ul_rrc_message(gNB_MAC_INST *mac, NR_UE_info_t *UE);
|
||||||
void send_initial_ul_rrc_message(gNB_MAC_INST *mac, int rnti, const uint8_t *sdu, sdu_size_t sdu_len, void *rawUE);
|
void send_initial_ul_rrc_message(int rnti, const uint8_t *sdu, sdu_size_t sdu_len, void *data);
|
||||||
|
|
||||||
void abort_nr_dl_harq(NR_UE_info_t* UE, int8_t harq_pid);
|
void abort_nr_dl_harq(NR_UE_info_t* UE, int8_t harq_pid);
|
||||||
|
|
||||||
|
|||||||
@@ -151,8 +151,8 @@ void mac_rlc_data_ind(const module_id_t module_idP,
|
|||||||
rb->set_time(rb, nr_rlc_current_time);
|
rb->set_time(rb, nr_rlc_current_time);
|
||||||
rb->recv_pdu(rb, buffer_pP, tb_sizeP);
|
rb->recv_pdu(rb, buffer_pP, tb_sizeP);
|
||||||
} else {
|
} else {
|
||||||
LOG_E(RLC, "%s:%d:%s: fatal: no RB found (channel ID %d)\n",
|
LOG_E(RLC, "Fatal: no RB found (channel ID %d RNTI %d)\n",
|
||||||
__FILE__, __LINE__, __FUNCTION__, channel_idP);
|
channel_idP, rntiP);
|
||||||
// exit(1);
|
// exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -729,7 +729,7 @@ void nr_rlc_add_srb(int rnti, int srb_id, const NR_RLC_BearerConfig_t *rlc_Beare
|
|||||||
int t_reassembly;
|
int t_reassembly;
|
||||||
int sn_field_length;
|
int sn_field_length;
|
||||||
|
|
||||||
LOG_D(RLC,"Trying to add SRB %d\n",srb_id);
|
LOG_D(RLC, "Trying to add SRB %d\n", srb_id);
|
||||||
AssertFatal(srb_id > 0 && srb_id < 4,
|
AssertFatal(srb_id > 0 && srb_id < 4,
|
||||||
"Invalid srb id %d\n", srb_id);
|
"Invalid srb id %d\n", srb_id);
|
||||||
|
|
||||||
@@ -792,7 +792,7 @@ void nr_rlc_add_srb(int rnti, int srb_id, const NR_RLC_BearerConfig_t *rlc_Beare
|
|||||||
sn_field_length);
|
sn_field_length);
|
||||||
nr_rlc_ue_add_srb_rlc_entity(ue, srb_id, nr_rlc_am);
|
nr_rlc_ue_add_srb_rlc_entity(ue, srb_id, nr_rlc_am);
|
||||||
|
|
||||||
LOG_I(RLC, "%s:%d:%s: added srb %d to UE with RNTI 0x%x\n", __FILE__, __LINE__, __FUNCTION__, srb_id, rnti);
|
LOG_I(RLC, "Added srb %d to UE with RNTI 0x%x\n", srb_id, rnti);
|
||||||
}
|
}
|
||||||
nr_rlc_manager_unlock(nr_rlc_ue_manager);
|
nr_rlc_manager_unlock(nr_rlc_ue_manager);
|
||||||
}
|
}
|
||||||
@@ -963,31 +963,27 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct srb0_data {
|
struct srb0_data {
|
||||||
struct gNB_MAC_INST_s *mac;
|
|
||||||
int rnti;
|
int rnti;
|
||||||
void *rawUE;
|
void *data;
|
||||||
void (*send_initial_ul_rrc_message)(struct gNB_MAC_INST_s *mac,
|
void (*send_initial_ul_rrc_message)(int rnti,
|
||||||
int rnti,
|
|
||||||
const uint8_t *sdu,
|
const uint8_t *sdu,
|
||||||
sdu_size_t sdu_len,
|
sdu_size_t sdu_len,
|
||||||
void *rawUE);
|
void *data);
|
||||||
};
|
};
|
||||||
|
|
||||||
void deliver_sdu_srb0(void *deliver_sdu_data, struct nr_rlc_entity_t *entity,
|
void deliver_sdu_srb0(void *deliver_sdu_data, struct nr_rlc_entity_t *entity,
|
||||||
char *buf, int size)
|
char *buf, int size)
|
||||||
{
|
{
|
||||||
struct srb0_data *s0 = (struct srb0_data *)deliver_sdu_data;
|
struct srb0_data *s0 = (struct srb0_data *)deliver_sdu_data;
|
||||||
s0->send_initial_ul_rrc_message(s0->mac, s0->rnti, (unsigned char *)buf,
|
s0->send_initial_ul_rrc_message(s0->rnti, (unsigned char *)buf, size, s0->data);
|
||||||
size, s0->rawUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_rlc_activate_srb0(int rnti, struct gNB_MAC_INST_s *mac, void *rawUE,
|
void nr_rlc_activate_srb0(int rnti, void *data,
|
||||||
void (*send_initial_ul_rrc_message)(
|
void (*send_initial_ul_rrc_message)(
|
||||||
struct gNB_MAC_INST_s *mac,
|
|
||||||
int rnti,
|
int rnti,
|
||||||
const uint8_t *sdu,
|
const uint8_t *sdu,
|
||||||
sdu_size_t sdu_len,
|
sdu_size_t sdu_len,
|
||||||
void *rawUE))
|
void *data))
|
||||||
{
|
{
|
||||||
nr_rlc_entity_t *nr_rlc_tm;
|
nr_rlc_entity_t *nr_rlc_tm;
|
||||||
nr_rlc_ue_t *ue;
|
nr_rlc_ue_t *ue;
|
||||||
@@ -996,9 +992,8 @@ void nr_rlc_activate_srb0(int rnti, struct gNB_MAC_INST_s *mac, void *rawUE,
|
|||||||
srb0_data = calloc(1, sizeof(struct srb0_data));
|
srb0_data = calloc(1, sizeof(struct srb0_data));
|
||||||
AssertFatal(srb0_data != NULL, "out of memory\n");
|
AssertFatal(srb0_data != NULL, "out of memory\n");
|
||||||
|
|
||||||
srb0_data->mac = mac;
|
|
||||||
srb0_data->rnti = rnti;
|
srb0_data->rnti = rnti;
|
||||||
srb0_data->rawUE = rawUE;
|
srb0_data->data = data;
|
||||||
srb0_data->send_initial_ul_rrc_message = send_initial_ul_rrc_message;
|
srb0_data->send_initial_ul_rrc_message = send_initial_ul_rrc_message;
|
||||||
|
|
||||||
nr_rlc_manager_lock(nr_rlc_ue_manager);
|
nr_rlc_manager_lock(nr_rlc_ue_manager);
|
||||||
|
|||||||
@@ -66,13 +66,11 @@ void nr_rlc_activate_avg_time_to_tx(
|
|||||||
|
|
||||||
void nr_rlc_srb_recv_sdu(const int rnti, const logical_chan_id_t channel_id, unsigned char *buf, int size);
|
void nr_rlc_srb_recv_sdu(const int rnti, const logical_chan_id_t channel_id, unsigned char *buf, int size);
|
||||||
|
|
||||||
struct gNB_MAC_INST_s;
|
void nr_rlc_activate_srb0(int rnti, void *data,
|
||||||
void nr_rlc_activate_srb0(int rnti, struct gNB_MAC_INST_s *mac, void *rawUE,
|
|
||||||
void (*send_initial_ul_rrc_message)(
|
void (*send_initial_ul_rrc_message)(
|
||||||
struct gNB_MAC_INST_s *mac,
|
|
||||||
int rnti,
|
int rnti,
|
||||||
const uint8_t *sdu,
|
const uint8_t *sdu,
|
||||||
sdu_size_t sdu_len,
|
sdu_size_t sdu_len,
|
||||||
void *rawUE));
|
void *data));
|
||||||
|
|
||||||
bool nr_rlc_get_statistics(int rnti, int srb_flag, int rb_id, nr_rlc_statistics_t *out);
|
bool nr_rlc_get_statistics(int rnti, int srb_flag, int rb_id, nr_rlc_statistics_t *out);
|
||||||
|
|||||||
@@ -772,7 +772,8 @@ int16_t do_RRCReconfiguration(const gNB_RRC_UE_t *UE,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint8_t do_RRCSetupRequest(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size, uint8_t *rv) {
|
int do_RRCSetupRequest(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size, uint8_t *rv)
|
||||||
|
{
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
uint8_t buf[5],buf2=0;
|
uint8_t buf[5],buf2=0;
|
||||||
NR_UL_CCCH_Message_t ul_ccch_msg;
|
NR_UL_CCCH_Message_t ul_ccch_msg;
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ uint8_t do_RRCSetupComplete(uint8_t Mod_id,
|
|||||||
const int dedicatedInfoNASLength,
|
const int dedicatedInfoNASLength,
|
||||||
const char *dedicatedInfoNAS);
|
const char *dedicatedInfoNAS);
|
||||||
|
|
||||||
uint8_t do_RRCSetupRequest(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size, uint8_t *rv);
|
int do_RRCSetupRequest(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size, uint8_t *rv);
|
||||||
|
|
||||||
uint8_t do_NR_RRCReconfigurationComplete_for_nsa(uint8_t *buffer, size_t buffer_size, NR_RRC_TransactionIdentifier_t Transaction_id);
|
uint8_t do_NR_RRCReconfigurationComplete_for_nsa(uint8_t *buffer, size_t buffer_size, NR_RRC_TransactionIdentifier_t Transaction_id);
|
||||||
|
|
||||||
|
|||||||
@@ -61,13 +61,7 @@ typedef struct RB_INFO_NR_s {
|
|||||||
//MAC_MEAS_REQ_ENTRY *Meas_entry; //may not needed for NB-IoT
|
//MAC_MEAS_REQ_ENTRY *Meas_entry; //may not needed for NB-IoT
|
||||||
} NR_RB_INFO;
|
} NR_RB_INFO;
|
||||||
|
|
||||||
typedef struct NR_SRB_INFO_s {
|
|
||||||
NR_RRC_BUFFER Rx_buffer;
|
|
||||||
NR_RRC_BUFFER Tx_buffer;
|
|
||||||
} NR_SRB_INFO;
|
|
||||||
|
|
||||||
typedef struct SRB_INFO_TABLE_ENTRY_NR_s {
|
typedef struct SRB_INFO_TABLE_ENTRY_NR_s {
|
||||||
NR_SRB_INFO Srb_info;
|
|
||||||
uint8_t Active;
|
uint8_t Active;
|
||||||
uint8_t status;
|
uint8_t status;
|
||||||
} NR_SRB_INFO_TABLE_ENTRY;
|
} NR_SRB_INFO_TABLE_ENTRY;
|
||||||
|
|||||||
@@ -91,29 +91,7 @@ int8_t nr_mac_rrc_data_ind_ue(const module_id_t module_id,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case CCCH:
|
case CCCH:
|
||||||
if (pdu_len>0) {
|
AssertFatal(false, "use RLC instead\n");
|
||||||
LOG_T(NR_RRC,"[UE %d] Received SDU for CCCH on SRB %u from gNB %d\n",module_id,channel & RAB_OFFSET,gNB_index);
|
|
||||||
|
|
||||||
MessageDef *message_p;
|
|
||||||
int msg_sdu_size = CCCH_SDU_SIZE;
|
|
||||||
|
|
||||||
if (pdu_len > msg_sdu_size) {
|
|
||||||
LOG_E(NR_RRC, "SDU larger than CCCH SDU buffer size (%d, %d)", sdu_size, msg_sdu_size);
|
|
||||||
sdu_size = msg_sdu_size;
|
|
||||||
} else {
|
|
||||||
sdu_size = pdu_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
message_p = itti_alloc_new_message (TASK_MAC_UE, 0, NR_RRC_MAC_CCCH_DATA_IND);
|
|
||||||
memset (NR_RRC_MAC_CCCH_DATA_IND (message_p).sdu, 0, CCCH_SDU_SIZE);
|
|
||||||
memcpy (NR_RRC_MAC_CCCH_DATA_IND (message_p).sdu, pduP, sdu_size);
|
|
||||||
NR_RRC_MAC_CCCH_DATA_IND (message_p).frame = frame; //frameP
|
|
||||||
NR_RRC_MAC_CCCH_DATA_IND (message_p).slot = slot;
|
|
||||||
NR_RRC_MAC_CCCH_DATA_IND (message_p).sdu_size = sdu_size;
|
|
||||||
NR_RRC_MAC_CCCH_DATA_IND (message_p).gnb_index = gNB_index;
|
|
||||||
NR_RRC_MAC_CCCH_DATA_IND (message_p).rnti = rnti; //rntiP
|
|
||||||
itti_send_msg_to_task (TASK_RRC_NRUE, GNB_MODULE_ID_TO_INSTANCE( module_id ), message_p);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -123,36 +101,11 @@ int8_t nr_mac_rrc_data_ind_ue(const module_id_t module_id,
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t nr_mac_rrc_data_req_ue(const module_id_t Mod_idP,
|
void nr_mac_rrc_msg3_ind(const module_id_t mod_id, int rnti)
|
||||||
const int CC_id,
|
|
||||||
const uint8_t gNB_id,
|
|
||||||
const frame_t frameP,
|
|
||||||
const rb_id_t Srb_id,
|
|
||||||
uint8_t *buffer_pP)
|
|
||||||
{
|
{
|
||||||
switch(Srb_id) {
|
MessageDef *message_p = itti_alloc_new_message(TASK_MAC_UE, 0, NR_RRC_MAC_MSG3_IND);
|
||||||
|
NR_RRC_MAC_MSG3_IND (message_p).rnti = rnti;
|
||||||
case CCCH:
|
itti_send_msg_to_task(TASK_RRC_NRUE, GNB_MODULE_ID_TO_INSTANCE(mod_id), message_p);
|
||||||
LOG_D(NR_RRC,
|
|
||||||
"nr_mac_rrc_data_req_ue: Payload size = %i\n",
|
|
||||||
NR_UE_rrc_inst[Mod_idP].Srb[gNB_id][0].srb_buffers.Tx_buffer.payload_size);
|
|
||||||
NR_UE_RRC_SRB_INFO_t *Srb0 = &NR_UE_rrc_inst[Mod_idP].Srb[gNB_id][0];
|
|
||||||
memcpy(buffer_pP, (uint8_t *)Srb0->srb_buffers.Tx_buffer.Payload, Srb0->srb_buffers.Tx_buffer.payload_size);
|
|
||||||
for (int i = 0; i < Srb0->srb_buffers.Tx_buffer.payload_size; i++) {
|
|
||||||
LOG_D(NR_RRC,"(%i): %i\n", i, buffer_pP[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Srb0->srb_buffers.Tx_buffer.payload_size;
|
|
||||||
|
|
||||||
case DCCH:
|
|
||||||
AssertFatal(1==0, "SRB1 not implemented yet!\n");
|
|
||||||
case DCCH1:
|
|
||||||
AssertFatal(1==0, "SRB2 not implemented yet!\n");
|
|
||||||
default:
|
|
||||||
AssertFatal(1==0, "Invalid SRB id!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success)
|
void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success)
|
||||||
|
|||||||
@@ -616,12 +616,12 @@ int nr_decode_SI(const module_id_t module_id, const uint8_t gNB_index, NR_System
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t nr_rrc_ue_generate_ra_msg(module_id_t module_id, uint8_t gNB_index) {
|
void nr_rrc_ue_generate_ra_msg(module_id_t module_id, int rnti)
|
||||||
|
{
|
||||||
switch(NR_UE_rrc_inst[module_id].ra_trigger){
|
switch(NR_UE_rrc_inst[module_id].ra_trigger) {
|
||||||
case INITIAL_ACCESS_FROM_RRC_IDLE:
|
case INITIAL_ACCESS_FROM_RRC_IDLE:
|
||||||
// After SIB1 is received, prepare RRCConnectionRequest
|
// After SIB1 is received, prepare RRCConnectionRequest
|
||||||
nr_rrc_ue_generate_RRCSetupRequest(module_id,gNB_index);
|
nr_rrc_ue_generate_RRCSetupRequest(module_id, rnti);
|
||||||
break;
|
break;
|
||||||
case RRC_CONNECTION_REESTABLISHMENT:
|
case RRC_CONNECTION_REESTABLISHMENT:
|
||||||
AssertFatal(1==0, "ra_trigger not implemented yet!\n");
|
AssertFatal(1==0, "ra_trigger not implemented yet!\n");
|
||||||
@@ -648,8 +648,27 @@ int8_t nr_rrc_ue_generate_ra_msg(module_id_t module_id, uint8_t gNB_index) {
|
|||||||
AssertFatal(1==0, "Invalid ra_trigger value!\n");
|
AssertFatal(1==0, "Invalid ra_trigger value!\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, int rnti)
|
||||||
|
{
|
||||||
|
uint8_t rv[6];
|
||||||
|
// Get RRCConnectionRequest, fill random for now
|
||||||
|
// Generate random byte stream for contention resolution
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
#ifdef SMBV
|
||||||
|
// if SMBV is configured the contention resolution needs to be fix for the connection procedure to succeed
|
||||||
|
rv[i] = i;
|
||||||
|
#else
|
||||||
|
rv[i] = taus() & 0xff;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t buf[1024];
|
||||||
|
int len = do_RRCSetupRequest(module_id, buf, sizeof(buf), rv);
|
||||||
|
|
||||||
|
/* convention: RNTI for SRB0 is zero, as it changes all the time */
|
||||||
|
nr_rlc_srb_recv_sdu(rnti, 0, buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_rrc_configure_default_SI(NR_UE_RRC_SI_INFO *SI_info,
|
void nr_rrc_configure_default_SI(NR_UE_RRC_SI_INFO *SI_info,
|
||||||
@@ -732,7 +751,6 @@ static int8_t nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message(module_id_t module_id,
|
|||||||
// take ServingCellConfigCommon and configure L1/L2
|
// take ServingCellConfigCommon and configure L1/L2
|
||||||
rrc->servingCellConfigCommonSIB = sib1->servingCellConfigCommon;
|
rrc->servingCellConfigCommonSIB = sib1->servingCellConfigCommon;
|
||||||
nr_rrc_mac_config_req_sib1(module_id, 0, sib1->si_SchedulingInfo, sib1->servingCellConfigCommon);
|
nr_rrc_mac_config_req_sib1(module_id, 0, sib1->si_SchedulingInfo, sib1->servingCellConfigCommon);
|
||||||
nr_rrc_ue_generate_ra_msg(module_id, gNB_index);
|
|
||||||
break;
|
break;
|
||||||
case NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformation:
|
case NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformation:
|
||||||
LOG_I(NR_RRC, "[UE %"PRIu8"] Decoding SI\n", module_id);
|
LOG_I(NR_RRC, "[UE %"PRIu8"] Decoding SI\n", module_id);
|
||||||
@@ -966,7 +984,7 @@ static void rrc_ue_generate_RRCSetupComplete(const protocol_ctxt_t *const ctxt_p
|
|||||||
nr_pdcp_data_req_srb(ctxt_pP->rntiMaybeUEid, srb_id, nr_rrc_mui++, size, buffer, deliver_pdu_srb_rlc, NULL);
|
nr_pdcp_data_req_srb(ctxt_pP->rntiMaybeUEid, srb_id, nr_rrc_mui++, size, buffer, deliver_pdu_srb_rlc, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t nr_rrc_ue_decode_ccch(const protocol_ctxt_t *const ctxt_pP, const NR_UE_RRC_SRB_INFO_t *Srb_info, const uint8_t gNB_index)
|
static int8_t nr_rrc_ue_decode_ccch(const protocol_ctxt_t *const ctxt_pP, const uint8_t *buf, int len, const uint8_t gNB_index)
|
||||||
{
|
{
|
||||||
NR_UE_RRC_INST_t *rrc = &NR_UE_rrc_inst[ctxt_pP->module_id];
|
NR_UE_RRC_INST_t *rrc = &NR_UE_rrc_inst[ctxt_pP->module_id];
|
||||||
NR_DL_CCCH_Message_t *dl_ccch_msg=NULL;
|
NR_DL_CCCH_Message_t *dl_ccch_msg=NULL;
|
||||||
@@ -976,21 +994,15 @@ int8_t nr_rrc_ue_decode_ccch(const protocol_ctxt_t *const ctxt_pP, const NR_UE_R
|
|||||||
LOG_D(RRC,
|
LOG_D(RRC,
|
||||||
"[NR UE%d] Decoding DL-CCCH message (%d bytes), State %d\n",
|
"[NR UE%d] Decoding DL-CCCH message (%d bytes), State %d\n",
|
||||||
ctxt_pP->module_id,
|
ctxt_pP->module_id,
|
||||||
Srb_info->srb_buffers.Rx_buffer.payload_size,
|
len,
|
||||||
rrc->nrRrcState);
|
rrc->nrRrcState);
|
||||||
dec_rval = uper_decode(NULL,
|
|
||||||
&asn_DEF_NR_DL_CCCH_Message,
|
|
||||||
(void **)&dl_ccch_msg,
|
|
||||||
(uint8_t *)Srb_info->srb_buffers.Rx_buffer.Payload,
|
|
||||||
Srb_info->srb_buffers.Rx_buffer.payload_size,
|
|
||||||
0,
|
|
||||||
0);
|
|
||||||
|
|
||||||
// if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
dec_rval = uper_decode(NULL, &asn_DEF_NR_DL_CCCH_Message, (void **)&dl_ccch_msg, buf, len, 0, 0);
|
||||||
xer_fprint(stdout, &asn_DEF_NR_DL_CCCH_Message, (void *)dl_ccch_msg);
|
|
||||||
// }
|
|
||||||
|
|
||||||
if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) {
|
if (LOG_DEBUGFLAG(DEBUG_ASN1))
|
||||||
|
xer_fprint(stdout, &asn_DEF_NR_DL_CCCH_Message, (void *)dl_ccch_msg);
|
||||||
|
|
||||||
|
if (dec_rval.code != RC_OK && dec_rval.consumed == 0) {
|
||||||
LOG_E(RRC,
|
LOG_E(RRC,
|
||||||
"[UE %d] Frame %d : Failed to decode DL-CCCH-Message (%zu bytes)\n",
|
"[UE %d] Frame %d : Failed to decode DL-CCCH-Message (%zu bytes)\n",
|
||||||
ctxt_pP->module_id,
|
ctxt_pP->module_id,
|
||||||
@@ -1292,41 +1304,6 @@ void nr_rrc_ue_process_securityModeCommand(const protocol_ctxt_t *const ctxt_pP,
|
|||||||
securityModeCommand->criticalExtensions.present);
|
securityModeCommand->criticalExtensions.present);
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, const uint8_t gNB_index)
|
|
||||||
{
|
|
||||||
uint8_t rv[6];
|
|
||||||
NR_UE_RRC_SRB_INFO_t *Srb0 = &NR_UE_rrc_inst[module_id].Srb[gNB_index][0];
|
|
||||||
if (Srb0->srb_buffers.Tx_buffer.payload_size == 0) {
|
|
||||||
// Get RRCConnectionRequest, fill random for now
|
|
||||||
// Generate random byte stream for contention resolution
|
|
||||||
for (int i = 0; i < 6; i++) {
|
|
||||||
#ifdef SMBV
|
|
||||||
// if SMBV is configured the contention resolution needs to be fix for the connection procedure to succeed
|
|
||||||
rv[i] = i;
|
|
||||||
#else
|
|
||||||
rv[i] = taus() & 0xff;
|
|
||||||
#endif
|
|
||||||
LOG_T(NR_RRC, "%x.", rv[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_T(NR_RRC, "\n");
|
|
||||||
Srb0->srb_buffers.Tx_buffer.payload_size = do_RRCSetupRequest(module_id,
|
|
||||||
(uint8_t *)Srb0->srb_buffers.Tx_buffer.Payload,
|
|
||||||
sizeof(Srb0->srb_buffers.Tx_buffer.Payload),
|
|
||||||
rv);
|
|
||||||
LOG_I(NR_RRC,
|
|
||||||
"[UE %d] : Logical Channel UL-CCCH (SRB0), Generating RRCSetupRequest (bytes %d, gNB %d)\n",
|
|
||||||
module_id,
|
|
||||||
Srb0->srb_buffers.Tx_buffer.payload_size,
|
|
||||||
gNB_index);
|
|
||||||
|
|
||||||
for (int i = 0; i < Srb0->srb_buffers.Tx_buffer.payload_size; i++)
|
|
||||||
LOG_T(NR_RRC, "%x.", Srb0->srb_buffers.Tx_buffer.Payload[i]);
|
|
||||||
|
|
||||||
LOG_T(NR_RRC, "\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void
|
void
|
||||||
nr_rrc_ue_process_measConfig(
|
nr_rrc_ue_process_measConfig(
|
||||||
@@ -1799,8 +1776,17 @@ void *rrc_nrue_task(void *args_p)
|
|||||||
nr_rrc_SI_timers(SInfo);
|
nr_rrc_SI_timers(SInfo);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NR_RRC_MAC_MSG3_IND:
|
||||||
|
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_NO, NR_RRC_MAC_MSG3_IND (msg_p).rnti, 0, 0);
|
||||||
|
LOG_D(NR_RRC, "[UE %d] Received %s for RNTI %d\n",
|
||||||
|
ue_mod_id,
|
||||||
|
ITTI_MSG_NAME (msg_p),
|
||||||
|
NR_RRC_MAC_MSG3_IND (msg_p).rnti);
|
||||||
|
nr_rrc_ue_generate_ra_msg(ue_mod_id, NR_RRC_MAC_MSG3_IND (msg_p).rnti);
|
||||||
|
break;
|
||||||
|
|
||||||
case NR_RRC_MAC_RA_IND:
|
case NR_RRC_MAC_RA_IND:
|
||||||
LOG_D(NR_RRC, "[UE %d] Received %s: frame %d\n RA %s",
|
LOG_D(NR_RRC, "[UE %d] Received %s: frame %d RA %s\n",
|
||||||
ue_mod_id,
|
ue_mod_id,
|
||||||
ITTI_MSG_NAME (msg_p),
|
ITTI_MSG_NAME (msg_p),
|
||||||
NR_RRC_MAC_RA_IND (msg_p).frame,
|
NR_RRC_MAC_RA_IND (msg_p).frame,
|
||||||
@@ -1828,18 +1814,11 @@ void *rrc_nrue_task(void *args_p)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case NR_RRC_MAC_CCCH_DATA_IND:
|
case NR_RRC_MAC_CCCH_DATA_IND:
|
||||||
LOG_D(NR_RRC, "[UE %d] RNTI %x Received %s: frameP %d, gNB %d\n",
|
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_NO, NR_RRC_MAC_CCCH_DATA_IND (msg_p).rnti, 0, 0);
|
||||||
ue_mod_id,
|
nr_rrc_ue_decode_ccch(&ctxt,
|
||||||
NR_RRC_MAC_CCCH_DATA_IND (msg_p).rnti,
|
NR_RRC_MAC_CCCH_DATA_IND (msg_p).sdu,
|
||||||
ITTI_MSG_NAME (msg_p),
|
NR_RRC_MAC_CCCH_DATA_IND (msg_p).sdu_size,
|
||||||
NR_RRC_MAC_CCCH_DATA_IND (msg_p).frame,
|
/* gNB_index = */ 0);
|
||||||
NR_RRC_MAC_CCCH_DATA_IND (msg_p).gnb_index);
|
|
||||||
NR_UE_RRC_SRB_INFO_t *srb0 = &NR_UE_rrc_inst[ue_mod_id].Srb[NR_RRC_MAC_CCCH_DATA_IND(msg_p).gnb_index][0];
|
|
||||||
memcpy(srb0->srb_buffers.Rx_buffer.Payload, NR_RRC_MAC_CCCH_DATA_IND(msg_p).sdu, NR_RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size);
|
|
||||||
srb0->srb_buffers.Rx_buffer.payload_size = NR_RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size;
|
|
||||||
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_NO, NR_RRC_MAC_CCCH_DATA_IND (msg_p).rnti, NR_RRC_MAC_CCCH_DATA_IND (msg_p).frame, 0);
|
|
||||||
// PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, ue_mod_id, GNB_FLAG_NO, NR_RRC_MAC_CCCH_DATA_IND (msg_p).rnti, NR_RRC_MAC_CCCH_DATA_IND (msg_p).frame, 0, NR_RRC_MAC_CCCH_DATA_IND (msg_p).gnb_index);
|
|
||||||
nr_rrc_ue_decode_ccch(&ctxt, srb0, NR_RRC_MAC_CCCH_DATA_IND(msg_p).gnb_index);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* PDCP messages */
|
/* PDCP messages */
|
||||||
|
|||||||
@@ -182,7 +182,6 @@ typedef enum { RB_NOT_PRESENT, RB_ESTABLISHED, RB_SUSPENDED } NR_RB_status_t;
|
|||||||
|
|
||||||
typedef struct NR_UE_RRC_SRB_INFO_s {
|
typedef struct NR_UE_RRC_SRB_INFO_s {
|
||||||
NR_RB_status_t status;
|
NR_RB_status_t status;
|
||||||
NR_SRB_INFO srb_buffers;
|
|
||||||
} NR_UE_RRC_SRB_INFO_t;
|
} NR_UE_RRC_SRB_INFO_t;
|
||||||
|
|
||||||
typedef struct NR_UE_RRC_INST_s {
|
typedef struct NR_UE_RRC_INST_s {
|
||||||
|
|||||||
@@ -107,20 +107,7 @@ void nr_mac_rrc_sync_ind(const module_id_t module_id,
|
|||||||
const frame_t frame,
|
const frame_t frame,
|
||||||
const bool in_sync);
|
const bool in_sync);
|
||||||
void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success);
|
void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success);
|
||||||
|
void nr_mac_rrc_msg3_ind(const module_id_t mod_id, int rnti);
|
||||||
/**\brief
|
|
||||||
\param module_id module id
|
|
||||||
\param CC_id component carrier id
|
|
||||||
\param gNB_index gNB index
|
|
||||||
\param frame_t frameP
|
|
||||||
\param rb_id_t SRB id
|
|
||||||
\param buffer_pP pointer to buffer*/
|
|
||||||
int8_t nr_mac_rrc_data_req_ue(const module_id_t Mod_idP,
|
|
||||||
const int CC_id,
|
|
||||||
const uint8_t gNB_id,
|
|
||||||
const frame_t frameP,
|
|
||||||
const rb_id_t Srb_id,
|
|
||||||
uint8_t *buffer_pP);
|
|
||||||
|
|
||||||
int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index);
|
int8_t nr_rrc_RA_succeeded(const module_id_t mod_id, const uint8_t gNB_index);
|
||||||
|
|
||||||
@@ -140,10 +127,8 @@ void nsa_sendmsg_to_lte_ue(const void *message, size_t msg_len, Rrc_Msg_Type_t m
|
|||||||
|
|
||||||
void start_oai_nrue_threads(void);
|
void start_oai_nrue_threads(void);
|
||||||
|
|
||||||
/**\brief RRC UE generate RRCSetupRequest message.
|
/**\brief RRC UE generate RRCSetupRequest message. */
|
||||||
\param module_id module id
|
void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, int rnti);
|
||||||
\param gNB_index gNB index */
|
|
||||||
void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, const uint8_t gNB_index);
|
|
||||||
|
|
||||||
void process_lte_nsa_msg(nsa_msg_t *msg, int msg_len);
|
void process_lte_nsa_msg(nsa_msg_t *msg, int msg_len);
|
||||||
|
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ static int allocCirBuf(rfsimulator_state_t *bridge, int sock)
|
|||||||
}
|
}
|
||||||
char *modelname = (bridge->role == SIMU_ROLE_SERVER) ? "rfsimu_channel_ue0" : "rfsimu_channel_enB0";
|
char *modelname = (bridge->role == SIMU_ROLE_SERVER) ? "rfsimu_channel_ue0" : "rfsimu_channel_enB0";
|
||||||
ptr->channel_model = find_channel_desc_fromname(modelname); // path_loss in dB
|
ptr->channel_model = find_channel_desc_fromname(modelname); // path_loss in dB
|
||||||
if (ptr->channel_model != NULL) {
|
if (!ptr->channel_model) {
|
||||||
LOG_E(HW, "Channel model %s not found, check config file\n", modelname);
|
LOG_E(HW, "Channel model %s not found, check config file\n", modelname);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,729 +0,0 @@
|
|||||||
#/*
|
|
||||||
# * 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
|
|
||||||
# */
|
|
||||||
################################################################################
|
|
||||||
# file build_oai.bash
|
|
||||||
# brief apply a traffic generator, send traffic and measure the performance of OAI
|
|
||||||
# OTG is mainly used for OASIM and D-ITG (or iperf) for LTE-SOFTMODEM
|
|
||||||
# author Navid Nikaein
|
|
||||||
# company Eurecom
|
|
||||||
# email: navid.nikaein@eurecom.fr
|
|
||||||
# date 2015
|
|
||||||
|
|
||||||
#!/bin/bash
|
|
||||||
################################
|
|
||||||
# include helper functions
|
|
||||||
################################
|
|
||||||
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
|
|
||||||
. $THIS_SCRIPT_PATH/build_helper.bash
|
|
||||||
|
|
||||||
check_for_root_rights
|
|
||||||
|
|
||||||
|
|
||||||
#######################################
|
|
||||||
# Default PARAMETERS
|
|
||||||
######################################
|
|
||||||
#general
|
|
||||||
|
|
||||||
declare PERF_APP="PING" # ITG, ITG_DECODE, PING, OTG,
|
|
||||||
declare TEST_MODE=0
|
|
||||||
declare KEEP_LOG_FILESNUM_PKTS=0
|
|
||||||
declare OWD="rttm"
|
|
||||||
declare DURATION=60000 # ms
|
|
||||||
declare NUM_PKTS=10000
|
|
||||||
declare KBYTES=1000 # KBYTES
|
|
||||||
declare START=0
|
|
||||||
declare DST="127.0.0.1"
|
|
||||||
declare DPORT="8999"
|
|
||||||
declare TP="UDP"
|
|
||||||
declare IDT_DIST="CONSTANT"
|
|
||||||
declare PS_DIST="CONSTANT"
|
|
||||||
|
|
||||||
#IDT
|
|
||||||
declare RATE=1000 # pkt / s
|
|
||||||
declare MIN_RATE=100
|
|
||||||
declare MAX_RATE=1000
|
|
||||||
|
|
||||||
|
|
||||||
############## script params #####################
|
|
||||||
|
|
||||||
until [ -z "$1" ]
|
|
||||||
do
|
|
||||||
case "$1" in
|
|
||||||
-c | --test)
|
|
||||||
TEST_MODE=1;
|
|
||||||
echo_info "enabling the test mode"
|
|
||||||
shift;
|
|
||||||
;;
|
|
||||||
-l | --perf-app)
|
|
||||||
PERF_APP=$2
|
|
||||||
echo_info "Setting the performance evaluation APP to $PERF_APP"
|
|
||||||
if [ $PERF_APP = "DITG" ]; then
|
|
||||||
echo_info "you need to run "
|
|
||||||
fi
|
|
||||||
shift 2;
|
|
||||||
;;
|
|
||||||
-m | --owd)
|
|
||||||
OWD="owdm"
|
|
||||||
echo_info "setting D-ITG one-way-delay meter"
|
|
||||||
shift;
|
|
||||||
;;
|
|
||||||
-e | --duration)
|
|
||||||
DURATION=$2
|
|
||||||
echo_info "Setting the traffic duration to $DURATION"
|
|
||||||
shift 2;
|
|
||||||
;;
|
|
||||||
-n | --num-pkts)
|
|
||||||
NUM_PKTS=$2
|
|
||||||
echo_info "Setting number of packets to $NUM_PKTS"
|
|
||||||
shift 2;
|
|
||||||
;;
|
|
||||||
-k | --keep-log-file)
|
|
||||||
KEEP_LOG_FILESNUM_PKTS=1
|
|
||||||
echo_info "Keep the log files"
|
|
||||||
shift;
|
|
||||||
;;
|
|
||||||
-i | --idt-dist)
|
|
||||||
IDT_DIST=$2
|
|
||||||
echo_info "setting IDT distribution to $IDT_DIST"
|
|
||||||
shift 2;
|
|
||||||
;;
|
|
||||||
-s | --ps-dist)
|
|
||||||
PS_DIST=$2
|
|
||||||
echo_info "setting PS distribution to $PS_DIST"
|
|
||||||
shift 2;
|
|
||||||
;;
|
|
||||||
-d | --dst)
|
|
||||||
DST=$2
|
|
||||||
echo_info "setting the destination address to $DST"
|
|
||||||
shift 2;
|
|
||||||
;;
|
|
||||||
-p | --dst-port)
|
|
||||||
DPORT=$2
|
|
||||||
echo_info "setting the destination port to $DPORT"
|
|
||||||
shift 2;
|
|
||||||
;;
|
|
||||||
-h | --help)
|
|
||||||
print_help_perf
|
|
||||||
exit -1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Unknown option $1"
|
|
||||||
break ;
|
|
||||||
# unknown option
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
#####################
|
|
||||||
# create a bin dir
|
|
||||||
#####################
|
|
||||||
echo_info "1. Creating the results dir ..."
|
|
||||||
#rm -rf results
|
|
||||||
mkdir -m 777 -p results
|
|
||||||
|
|
||||||
exp_date=`date +%Y_%m_%d`
|
|
||||||
exp_time=`date +%H_%M_%S`
|
|
||||||
oai_exp_date="exp_date_${exp_date}"
|
|
||||||
touch results/${oai_exp_date}
|
|
||||||
|
|
||||||
touch results/perf_log.txt
|
|
||||||
chmod -f 777 results/perf_log.txt
|
|
||||||
|
|
||||||
echo "start experiment at date $exp_date time $exp_time " >> results/${oai_exp_date}
|
|
||||||
|
|
||||||
############################################
|
|
||||||
# setting and printing OAI envs, we should check here
|
|
||||||
############################################
|
|
||||||
|
|
||||||
echo_info "2. Setting the OAI PATHS ..."
|
|
||||||
|
|
||||||
set_openair_env
|
|
||||||
cecho "OPENAIR_HOME = $OPENAIR_HOME" $green
|
|
||||||
cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green
|
|
||||||
cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green
|
|
||||||
cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green
|
|
||||||
cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green
|
|
||||||
cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green
|
|
||||||
|
|
||||||
|
|
||||||
echo "OPENAIR_HOME = $OPENAIR_HOME" >> results/${oai_exp_date}
|
|
||||||
echo "OPENAIR1_DIR = $OPENAIR1_DIR" >> results/${oai_exp_date}
|
|
||||||
echo "OPENAIR2_DIR = $OPENAIR2_DIR" >> results/${oai_exp_date}
|
|
||||||
echo "OPENAIR3_DIR = $OPENAIR3_DIR" >> results/${oai_exp_date}
|
|
||||||
echo "OPENAIR3_DIR = $OPENAIR3_DIR" >> results/${oai_exp_date}
|
|
||||||
echo "OPENAIR_TARGETS = $OPENAIR_TARGETS" >> results/${oai_exp_date}
|
|
||||||
|
|
||||||
################################
|
|
||||||
# run ITGSEND
|
|
||||||
################################
|
|
||||||
|
|
||||||
itg_send(){
|
|
||||||
|
|
||||||
test_install_package d-itg
|
|
||||||
|
|
||||||
LOG_FILE="itg_log_template.txt"
|
|
||||||
touch results/${LOG_FILE}
|
|
||||||
|
|
||||||
if [ $TEST_MODE = 0 ] ; then
|
|
||||||
declare -a PS=(32 64 128 256 512 1024 1408)
|
|
||||||
declare -a IDT=(1 5 10 50 100 1000)
|
|
||||||
else
|
|
||||||
declare -a PS=(32 64)
|
|
||||||
declare -a IDT=(1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
declare PS_LEN=${#PS[@]}
|
|
||||||
declare IDT_LEN=${#IDT[@]}
|
|
||||||
#echo_info "PS_LEN is $PS_LEN, IDT_LEN is $IDT_LEN"
|
|
||||||
|
|
||||||
declare i=0
|
|
||||||
declare j=0
|
|
||||||
declare e=0
|
|
||||||
# send traffic
|
|
||||||
for idt in ${IDT[@]}; do
|
|
||||||
# echo_info "IDT is set to $idt i is $i"
|
|
||||||
if [ $i -lt $IDT_LEN ]; then
|
|
||||||
let i++;
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $IDT_DIST = "CONSTANT" ]; then
|
|
||||||
IDT_OPT="-C $idt "
|
|
||||||
fi
|
|
||||||
if [ $IDT_DIST = "UNIFORM" ]; then
|
|
||||||
IDT_OPT="-U $idt ${IDT[i]} "
|
|
||||||
fi
|
|
||||||
if [ $IDT_DIST = "EXPONENTIAL" ]; then
|
|
||||||
IDT_OPT="-E $idt "
|
|
||||||
fi
|
|
||||||
|
|
||||||
for ps in ${PS[@]}; do
|
|
||||||
# echo_info "PS is $ps j is $j"
|
|
||||||
if [ $j -lt $PS_LEN ]; then
|
|
||||||
let j++;
|
|
||||||
fi
|
|
||||||
if [ $PS_DIST = "CONSTANT" ]; then
|
|
||||||
PS_OPT="-c $ps "
|
|
||||||
fi
|
|
||||||
if [ $PS_DIST = "UNIFORM" ]; then
|
|
||||||
PS_OPT="-u $ps ${PS[j]} "
|
|
||||||
fi
|
|
||||||
if [ $PS_DIST = "EXPONENTIAL" ]; then
|
|
||||||
PS_OPT="-e $ps "
|
|
||||||
fi
|
|
||||||
start=$(date +%s)
|
|
||||||
RECV_FILE="recv_log_${IDT_DIST}_idt${idt}_${PS_DIST}_ps${ps}_${OWD}_${TP}"
|
|
||||||
echo_info "Start test_$i.$j:: ITGSend -a $DST $IDT_OPT $PS_OPT -m $OWD -d $START -T $TP -t $DURATION -x $RECV_FILE -l "
|
|
||||||
echo "Start test_$i.$j:: ITGSend -a $DST $IDT_OPT $PS_OPT -m $OWD -d $START -T $TP -t $DURATION -x $RECV_FILE -l " >> results/${oai_exp_date}
|
|
||||||
#sleep 1
|
|
||||||
ITGSend -a $DST $IDT_OPT $PS_OPT -m $OWD -d $START -T $TP -t $DURATION -x $RECV_FILE -l
|
|
||||||
itg_status=$?
|
|
||||||
end=$(date +%s)
|
|
||||||
diff=$(( $end - $start ))
|
|
||||||
|
|
||||||
if [ $itg_status = 0 ] ; then
|
|
||||||
echo_success "[$end] test_$i.$j passed"
|
|
||||||
echo "[$end] test_$i.$j passed" >> ./results/$LOG_FILE
|
|
||||||
STATUS="PASSED"
|
|
||||||
else
|
|
||||||
let e++;
|
|
||||||
echo_error "[$end] test_$i.$j failed :: D-ITG return exit code $itg_status"
|
|
||||||
echo "[$end]test_$i.$j failed :: ITG return exit code $itg_status" >> ./results/$LOG_FILE
|
|
||||||
STATUS="FAILED"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo_info "End test_$i.$j:: runtime: $diff"
|
|
||||||
echo "End test_$i.$j:: runtime: $diff" >> results/${oai_exp_date}
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
itg_decode(){
|
|
||||||
|
|
||||||
declare i=0
|
|
||||||
declare j=0
|
|
||||||
if [ $TEST_MODE = 0 ] ; then
|
|
||||||
declare -a PS=(32 64 128 256 512 1024 1408)
|
|
||||||
declare -a IDT=(1 5 10 50 100 1000)
|
|
||||||
else
|
|
||||||
declare -a PS=(32 64)
|
|
||||||
declare -a IDT=(1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
for idt in ${IDT[@]}; do
|
|
||||||
|
|
||||||
for ps in ${PS[@]}; do
|
|
||||||
RECV_FILE="recv_log_${IDT_DIST}_idt${idt}_${PS_DIST}_ps${ps}_${OWD}_${TP}"
|
|
||||||
OUTPUT_FILE="results_${IDT_DIST}_idt${idt}_${PS_DIST}_ps${ps}_${OWD}_${TP}.txt"
|
|
||||||
OCTAVE_FILE="results_${IDT_DIST}_idt${idt}_${PS_DIST}_ps${ps}_${OWD}_${TP}.."
|
|
||||||
|
|
||||||
echo_info "decode test_$i.$j: ITGDec $RECV_FILE -v -t -l $OUTPUT_FILE -o $OCTAVE_FILE"
|
|
||||||
ITGDec $RECV_FILE -v -t -l $OUTPUT_FILE
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ping_stats(){
|
|
||||||
|
|
||||||
status="failed"
|
|
||||||
failedhosts=""
|
|
||||||
|
|
||||||
# add ip / hostname separated by white space
|
|
||||||
|
|
||||||
if [ $TEST_MODE = 0 ]; then
|
|
||||||
declare COUNT=100
|
|
||||||
declare -a HOSTS=($DST)
|
|
||||||
declare -a PS=(64 768 2048 4096 8192)
|
|
||||||
declare -a IDT=(1 .8 .4 .2)
|
|
||||||
else
|
|
||||||
declare COUNT=10
|
|
||||||
declare -a HOSTS=(localhost)
|
|
||||||
declare -a PS=(64 2048)
|
|
||||||
declare -a IDT=(.5)
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
declare i=0
|
|
||||||
declare j=0
|
|
||||||
declare k=0
|
|
||||||
|
|
||||||
start_exp=$(date +%s)
|
|
||||||
|
|
||||||
for host in ${HOSTS[@]}; do
|
|
||||||
let i++;
|
|
||||||
let j=0;
|
|
||||||
OUTPUT_FILE="rtt_host${host}.csv"
|
|
||||||
touch results/${OUTPUT_FILE}
|
|
||||||
for idt in ${IDT[@]}; do
|
|
||||||
let j++;
|
|
||||||
let k=0;
|
|
||||||
for ps in ${PS[@]}; do
|
|
||||||
let k++;
|
|
||||||
# | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
|
|
||||||
start=$(date +%s)
|
|
||||||
LOG_FILE="recv_log_host${host}_idt${idt}_ps${ps}.txt"
|
|
||||||
touch results/${LOG_FILE}
|
|
||||||
echo_info "Start test_$i.$j.$k:: ping -c $COUNT -q -U $host -s $ps -i $idt"
|
|
||||||
echo "Start test_$i.$j.$k:: ping -c $COUNT -q -U $host -s $ps -i $idt" >> results/${oai_exp_date}
|
|
||||||
$(ping -c $COUNT -q -U $host -s $ps -i $idt 1>&2 >> ./results/$LOG_FILE )
|
|
||||||
end=$(date +%s)
|
|
||||||
diff=$(( $end - $start ))
|
|
||||||
|
|
||||||
count=$(cat ./results/$LOG_FILE | awk -F, '/received/{print $2*1}')
|
|
||||||
latency=$(cat ./results/$LOG_FILE | tail -1 |cut -f2- -d=)
|
|
||||||
|
|
||||||
MIN=$(cut -f1 -d/ <<< $latency)
|
|
||||||
AVG=$(cut -f2 -d/ <<< $latency)
|
|
||||||
MAX=$(cut -f3 -d/ <<< $latency)
|
|
||||||
MDEV=$(cut -f4 -d/ <<< $latency | cut -f1 -d" ")
|
|
||||||
UNIT=$(cut -f2 -d" " <<< $latency)
|
|
||||||
|
|
||||||
echo_success "Latency:: count $count min $MIN avg $AVG max $MAX mdev $MDEV ($UNIT)"
|
|
||||||
echo "$idt;$ps;$COUNT;$count;$MIN;$AVG;$MAX;$MDEV;" >> ./results/$OUTPUT_FILE
|
|
||||||
if [ $count -eq 0 ]; then
|
|
||||||
failedhosts="$failedhosts $host"
|
|
||||||
status="failed"
|
|
||||||
else
|
|
||||||
status="passed"
|
|
||||||
fi
|
|
||||||
echo_info "End test_$i.$j.$k:: runtime: $diff :: status $status "
|
|
||||||
echo "End test_$i.$j.$k:: runtime: $diff :; status $status" >> results/${oai_exp_date}
|
|
||||||
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
end_exp=$(date +%s)
|
|
||||||
diff_exp=$(( $end_exp - $start_exp ))
|
|
||||||
|
|
||||||
let total_tests=i*j*k;
|
|
||||||
echo_info "total tests: $total_tests for a duration $diff_exp (s)"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
oaisim_otg_stats(){
|
|
||||||
|
|
||||||
# install the required packages
|
|
||||||
|
|
||||||
test_install_package octave >> results/perf_log.txt 2>&1
|
|
||||||
|
|
||||||
# set paths to the required binaries and check if the required binaries are available
|
|
||||||
OAISIM="bin/oaisim"
|
|
||||||
OTGPLOT="$OPENAIR2_DIR/UTIL/OTG/OTGplot"
|
|
||||||
PS2PDF="ps2pdf"
|
|
||||||
|
|
||||||
if [ ! -f $OAISIM ]; then
|
|
||||||
echo_info "3.1 compiling OAISIM ($OPENAIR_TARGETS/build_oai.bash -t OAISIM -b -D -c)"
|
|
||||||
($OPENAIR_TARGETS/build_oai.bash -t OAISIM -b -D -c >> results/perf_log.txt 2>&1 )
|
|
||||||
build_stats=$?
|
|
||||||
if [ $build_stats != 0 ] ; then
|
|
||||||
echo_error "$OAISIM cannot be built, check results/perf_log.txt file"
|
|
||||||
exit $?
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo_info "ensure that OAISIM is not built with the S1 interface"
|
|
||||||
fi
|
|
||||||
|
|
||||||
(install_nasmesh >> results/perf_log.txt 2>&1 )
|
|
||||||
|
|
||||||
if [ ! -f $OTGPLOT ]; then
|
|
||||||
echo_error "$OTGPLOT not found"
|
|
||||||
exit $?
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set the default Parameters
|
|
||||||
ABSTRACTION=1
|
|
||||||
#FRAME_TYPE=0 # FDD=0, TDD =1, 2,3,4,5,6
|
|
||||||
AGGR_RESULT=1
|
|
||||||
STATUS="PASSED"
|
|
||||||
EXTRA_STATS=0
|
|
||||||
declare NUM_UES=7
|
|
||||||
|
|
||||||
if [ $TEST_MODE = 0 ]; then
|
|
||||||
declare -a TEMPLATES=(120 121 122 123 124 125 126 127 128 129 130)
|
|
||||||
declare -a FRAME_TYPE=(0 3)
|
|
||||||
declare -a METRICS=(latency jitter goodput)
|
|
||||||
declare -a RB=(25 50 100)
|
|
||||||
else
|
|
||||||
declare -a TEMPLATES=(125)
|
|
||||||
declare -a FRAME_TYPE=(3)
|
|
||||||
declare -a METRICS=(latency)
|
|
||||||
declare -a RB=(25)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $ABSTRACTION = 1 ]; then
|
|
||||||
OPT="-a "
|
|
||||||
fi
|
|
||||||
|
|
||||||
declare num_cols=0
|
|
||||||
let num_cols=NUM_UES+1
|
|
||||||
if [ $AGGR_RESULT = 1 ]; then
|
|
||||||
COLUMN="[$num_cols:$num_cols]"
|
|
||||||
else
|
|
||||||
COLUMN="[1:$num_cols]"
|
|
||||||
fi
|
|
||||||
|
|
||||||
declare i=0
|
|
||||||
declare j=0
|
|
||||||
declare k=0
|
|
||||||
declare e=0
|
|
||||||
|
|
||||||
start_exp=$(date +%s)
|
|
||||||
|
|
||||||
for template in ${TEMPLATES[@]}; do
|
|
||||||
let i++;
|
|
||||||
let j=0;
|
|
||||||
for frame in ${FRAME_TYPE[@]}; do
|
|
||||||
let j++;
|
|
||||||
let k=0;
|
|
||||||
|
|
||||||
if [ $frame = 0 ]; then
|
|
||||||
OPT="$OPT -F "
|
|
||||||
else
|
|
||||||
OPT="$OPT -C $frame "
|
|
||||||
fi
|
|
||||||
|
|
||||||
for rb in ${RB[@]}; do
|
|
||||||
let k++;
|
|
||||||
start=$(date +%s)
|
|
||||||
LOG_FILE="oaisim_log_template${template}_frame${frame}_rb${rb}.txt"
|
|
||||||
touch results/${LOG_FILE}
|
|
||||||
echo_info "[$start] Start test_$i.$j.$k:: $OAISIM $OPT -R $RB -c $template"
|
|
||||||
echo "Start test_$i.$j.$k:: $OAISIM $OPT -R $RB -c $template" >> results/${oai_exp_date}
|
|
||||||
#sleep 1
|
|
||||||
$OAISIM $OPT -R $RB -c $template 1>&2 >> ./results/$LOG_FILE
|
|
||||||
# store exit status
|
|
||||||
oai_status=$?
|
|
||||||
end=$(date +%s)
|
|
||||||
diff=$(( $end - $start ))
|
|
||||||
|
|
||||||
#check the oaisim exit status
|
|
||||||
if [ $oai_status = 0 ] ; then
|
|
||||||
echo_success "[$end] test_$i.$j.$k passed"
|
|
||||||
echo "[$end] test_$i.$j.$k passed" >> ./results/$LOG_FILE
|
|
||||||
STATUS="PASSED"
|
|
||||||
else
|
|
||||||
let e++;
|
|
||||||
echo_error "[$end] test_$i.$j.$k failed :: OAISIM return exit code $oai_status (remove bin/oaisim)"
|
|
||||||
echo "[$end]test_$i.$j.$k failed :: OAISIM return exit code $oai_status" >> ./results/$LOG_FILE
|
|
||||||
STATUS="FAILED"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# create the curves
|
|
||||||
for metric in ${METRICS[@]}; do
|
|
||||||
if [ $metric = "goodput" ]; then
|
|
||||||
unit="(kB/s)"
|
|
||||||
else
|
|
||||||
unit="(ms)"
|
|
||||||
fi
|
|
||||||
if [ -f /tmp/otg_${metric}.dat ]; then
|
|
||||||
export TITLE="Application $metric $unit"
|
|
||||||
cp /tmp/otg_${metric}.dat ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat
|
|
||||||
echo_info "$OTGPLOT ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat $COLUMN"
|
|
||||||
echo "$OTGPLOT ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat $COLUMN" >> results/${oai_exp_date}
|
|
||||||
$($OTGPLOT ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat $COLUMN 1>&2 >> ./results/$LOG_FILE )
|
|
||||||
$($PS2PDF -dOptimize=true -dEmbedAllFonts=true ./otg-${metric}-template${template}-frame${frame}-rb${rb}.eps )
|
|
||||||
# remove the first line of the file
|
|
||||||
echo "$(tail -n+2 ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat)" > ./results/otg-${metric}-template${template}-frame${frame}-rb${rb}.dat
|
|
||||||
else
|
|
||||||
echo_error "file /tmp/otg_${metric}.dat does not exists"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ $KEEP_LOG_FILESNUM_PKTS = 0 ]; then
|
|
||||||
rm -f ./results/$LOG_FILE
|
|
||||||
fi
|
|
||||||
mv *.eps ./results/
|
|
||||||
mv *.pdf ./results/
|
|
||||||
mv /tmp/otg.log ./results/otg-template${template}-frame${frame}-rb${rb}.log
|
|
||||||
echo_info "End test_$i.$j.$k:: runtime: $diff :: status $STATUS"
|
|
||||||
echo "End test_$i.$j.$k:: runtime: $diff :: status $STATUS" >> results/${oai_exp_date}
|
|
||||||
|
|
||||||
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
end_exp=$(date +%s)
|
|
||||||
diff_exp=$(( $end_exp - $start_exp ))
|
|
||||||
|
|
||||||
let total_tests=i*j*k;
|
|
||||||
echo_info "total tests: $total_tests for a duration $diff_exp (s) error ($e)"
|
|
||||||
echo "total tests: $total_tests for a duration $diff_exp (s) error ($e)" >> results/${oai_exp_date}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
cba_otg_stats(){
|
|
||||||
|
|
||||||
test_install_package octave
|
|
||||||
|
|
||||||
ABSTRACTION=1
|
|
||||||
FRAME_TYPE=0 # FDD=0, TDD =1
|
|
||||||
AGGR_RESULT=1
|
|
||||||
#OAISIM="$OPENAIR_TARGETS/bin/oaisim"
|
|
||||||
OAISIM="bin/oaisim.cba" # to compile: make cleanall; make Rel10=1 CBA=1 in targets/SIMU/USER
|
|
||||||
OTGPLOT="$OPENAIR2_DIR/UTIL/OTG/OTGplot"
|
|
||||||
PS2PDF="ps2pdf"
|
|
||||||
STATUS="PASSED"
|
|
||||||
EXTRA_STATS=0
|
|
||||||
declare NUM_UES=7
|
|
||||||
|
|
||||||
if [ $TEST_MODE = 0 ]; then
|
|
||||||
declare -a TEMPLATES=(120 121 122 123 124 125 126 127 128 129 130)
|
|
||||||
declare -a CBA=(0 1 2 3 4)
|
|
||||||
declare -a BACKOFF=(0 15 30 60 120)
|
|
||||||
declare -a METRICS=(latency jitter goodput)
|
|
||||||
declare -a RB=(25)
|
|
||||||
else
|
|
||||||
declare -a TEMPLATES=(125)
|
|
||||||
declare -a CBA=(1)
|
|
||||||
declare -a BACKOFF=(0 15 30 60 120)
|
|
||||||
declare -a METRICS=(latency)
|
|
||||||
declare -a RB=(25)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f $OAISIM ]; then
|
|
||||||
echo_error "$OAISIM not found"
|
|
||||||
exit $?
|
|
||||||
fi
|
|
||||||
if [ ! -f $OTGPLOT ]; then
|
|
||||||
echo_error "$OTGPLOT not found"
|
|
||||||
exit $?
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $ABSTRACTION = 1 ]; then
|
|
||||||
OPT="-a "
|
|
||||||
fi
|
|
||||||
if [ $FRAME_TYPE = 0 ]; then
|
|
||||||
OPT="$OPT -F "
|
|
||||||
fi
|
|
||||||
|
|
||||||
declare num_cols=0
|
|
||||||
let num_cols=NUM_UES+1
|
|
||||||
if [ $AGGR_RESULT = 1 ]; then
|
|
||||||
COLUMN="[$num_cols:$num_cols]"
|
|
||||||
else
|
|
||||||
COLUMN="[1:$num_cols]"
|
|
||||||
fi
|
|
||||||
|
|
||||||
declare collision=0
|
|
||||||
declare enb_cba_access=0
|
|
||||||
declare ue_cba_access=0
|
|
||||||
declare missed=0
|
|
||||||
declare unused=0
|
|
||||||
|
|
||||||
declare i=0
|
|
||||||
declare j=0
|
|
||||||
declare k=0
|
|
||||||
declare e=0
|
|
||||||
|
|
||||||
start_exp=$(date +%s)
|
|
||||||
|
|
||||||
STATS1="cba_stats1.txt"
|
|
||||||
touch results/${STATS1}
|
|
||||||
|
|
||||||
for template in ${TEMPLATES[@]}; do
|
|
||||||
let i++;
|
|
||||||
let j=0;
|
|
||||||
for group in ${CBA[@]}; do
|
|
||||||
let j++;
|
|
||||||
let k=0;
|
|
||||||
for backoff in ${BACKOFF[@]}; do
|
|
||||||
let k++;
|
|
||||||
start=$(date +%s)
|
|
||||||
LOG_FILE="oaisim_log_template${template}_group${group}_backoff${backoff}.txt"
|
|
||||||
touch results/${LOG_FILE}
|
|
||||||
echo_info "[$start] Start test_$i.$j.$k:: $OAISIM $OPT -w $group -R $RB --cba-backoff $backoff -c $template"
|
|
||||||
echo "Start test_$i.$j.$k:: $OAISIM $OPT -w $group -R $RB --cba-backoff $backoff -c $template" >> results/${oai_exp_date}
|
|
||||||
#sleep 1
|
|
||||||
$OAISIM $OPT -w $group -R $RB --cba-backoff $backoff -c $template 1>&2 >> ./results/$LOG_FILE
|
|
||||||
# store exit status
|
|
||||||
oai_status=$?
|
|
||||||
end=$(date +%s)
|
|
||||||
diff=$(( $end - $start ))
|
|
||||||
|
|
||||||
#check the oaisim exit status
|
|
||||||
if [ $oai_status = 0 ] ; then
|
|
||||||
echo_success "[$end] test_$i.$j.$k passed"
|
|
||||||
echo "[$end] test_$i.$j.$k passed" >> ./results/$LOG_FILE
|
|
||||||
STATUS="PASSED"
|
|
||||||
else
|
|
||||||
let e++;
|
|
||||||
echo_error "[$end] test_$i.$j.$k failed :: OAISIM return exit code $oai_status"
|
|
||||||
echo "[$end]test_$i.$j.$k failed :: OAISIM return exit code $oai_status" >> ./results/$LOG_FILE
|
|
||||||
STATUS="FAILED"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $group -gt 0 ]; then
|
|
||||||
|
|
||||||
let ue_cba_access=$(cat ./results/$LOG_FILE | grep -c "CBA transmission oppurtunity" )
|
|
||||||
let enb_cba_access=$(cat ./results/$LOG_FILE | grep -c "schedule CBA access" )
|
|
||||||
let missed=$(cat ./results/$LOG_FILE | grep -c "wait for backoff to expire" )
|
|
||||||
let unused=enb_cba_access-ue_cba_access;
|
|
||||||
let collision=$(cat ./results/$LOG_FILE | grep -c "first CBA collision detected" )
|
|
||||||
|
|
||||||
#frame, subframe, ue, group
|
|
||||||
#collision_stats=$(cat ./results/$LOG_FILE | grep "collision" | cut -d " " -f3,5,12,15 )
|
|
||||||
if [ $EXTRA_STATS = 1 ]; then
|
|
||||||
STATS2="cba_template_${template}_stats2.txt"
|
|
||||||
touch results/${STATS2}
|
|
||||||
while read -r line
|
|
||||||
do
|
|
||||||
SFN=$(cut -f1 -d " " <<< $line)
|
|
||||||
SSFN=$(cut -f2 -d " " <<< $line)
|
|
||||||
UEID=$(cut -f3 -d " " <<< $line)
|
|
||||||
GPID=$(cut -f4 -d " " <<< $line)
|
|
||||||
#echo_success "$SFN;$SSFN;$UEID;$GPID;"
|
|
||||||
echo "$SFN;$SSFN;$UEID;$GPID;" >> ./results/$STATS2
|
|
||||||
done < <(cat ./results/$LOG_FILE | grep "CBA collision set SR for UE" | cut -d " " -f3,5,13,16 )
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo_success "CBA stats:: template $template;group $group; backoff $backoff; enb cba allocation $enb_cba_access; ue cba access $ue_cba_access; collision $collision; missed $missed; unused $unused;"
|
|
||||||
echo "$template;$group;$backoff;$enb_cba_access;$ue_cba_access;$collision;$missed;$unused;" >> ./results/$STATS1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# create the curves
|
|
||||||
for metric in ${METRICS[@]}; do
|
|
||||||
if [ $metric = "goodput" ]; then
|
|
||||||
unit="(kB/s)"
|
|
||||||
else
|
|
||||||
unit="(ms)"
|
|
||||||
fi
|
|
||||||
if [ -f /tmp/otg_${metric}.dat ]; then
|
|
||||||
export TITLE="Application $metric $unit"
|
|
||||||
cp /tmp/otg_${metric}.dat ./results/otg-${metric}-template${template}-group${group}-backoff${backoff}.dat
|
|
||||||
echo_info "$OTGPLOT ./results/otg-${metric}-template${template}-group${group}-backoff${backoff}.dat $COLUMN"
|
|
||||||
echo "$OTGPLOT ./results/otg-${metric}-template${template}-group${group}-backoff${backoff}.dat $COLUMN" >> results/${oai_exp_date}
|
|
||||||
$($OTGPLOT ./results/otg-${metric}-template${template}-group${group}-backoff${backoff}.dat $COLUMN 1>&2 >> ./results/$LOG_FILE )
|
|
||||||
$($PS2PDF -dOptimize=true -dEmbedAllFonts=true ./otg-${metric}-template${template}-group${group}-backoff${backoff}.eps )
|
|
||||||
# remove the first line of the file
|
|
||||||
echo "$(tail -n+2 ./results/otg-${metric}-template${template}-group${group}-backoff${backoff}.dat)" > ./results/otg-${metric}-template${template}-group${group}-backoff${backoff}.dat
|
|
||||||
else
|
|
||||||
echo_error "file /tmp/otg_${metric}.dat does not exists"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ $KEEP_LOG_FILESNUM_PKTS = 0 ]; then
|
|
||||||
rm -f ./results/$LOG_FILE
|
|
||||||
fi
|
|
||||||
mv *.eps ./results/
|
|
||||||
mv *.pdf ./results/
|
|
||||||
mv /tmp/otg.log ./results/otg-template${template}-group${group}-backoff${backoff}.log
|
|
||||||
echo_info "End test_$i.$j.$k:: runtime: $diff :: status $STATUS"
|
|
||||||
echo "End test_$i.$j.$k:: runtime: $diff :: status $STATUS" >> results/${oai_exp_date}
|
|
||||||
|
|
||||||
# backoff not required when CBA is not used
|
|
||||||
if [ $group -eq 0 ]; then
|
|
||||||
break;
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
end_exp=$(date +%s)
|
|
||||||
diff_exp=$(( $end_exp - $start_exp ))
|
|
||||||
|
|
||||||
let total_tests=i*j*k;
|
|
||||||
echo_info "total tests: $total_tests for a duration $diff_exp (s) error ($e)"
|
|
||||||
echo "total tests: $total_tests for a duration $diff_exp (s) error ($e)" >> results/${oai_exp_date}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
case "$PERF_APP" in
|
|
||||||
'ITGS')
|
|
||||||
echo_info "3. running ITGSend"
|
|
||||||
itg_send
|
|
||||||
;;
|
|
||||||
'ITGD')
|
|
||||||
echo_info "running ITGDECODE (ensure that the results are in the current directory)"
|
|
||||||
itg_decode
|
|
||||||
;;
|
|
||||||
'PING')
|
|
||||||
echo_info "3. running ping"
|
|
||||||
ping_stats
|
|
||||||
;;
|
|
||||||
'OTG-OAISIM')
|
|
||||||
echo_info "3. running OTG on oaisim"
|
|
||||||
oaisim_otg_stats
|
|
||||||
;;
|
|
||||||
'OTG-CBA')
|
|
||||||
echo_info "3. running OTG on oaisim with cba"
|
|
||||||
cba_otg_stats
|
|
||||||
;;
|
|
||||||
|
|
||||||
'IPERF')
|
|
||||||
echo_warning "iperf not supported"
|
|
||||||
;;
|
|
||||||
'NONE')
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo_error "Unknown option $RUN_ITG"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||