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
This commit is contained in:
Robert Schmidt
2023-10-23 17:32:07 +00:00
99 changed files with 370 additions and 10885 deletions
+4 -1
View File
@@ -9,8 +9,11 @@ cmake_targets/nas_sim_tools/build/
log/
lte_build_oai/
# vscode
# IDE files
.vscode
.cproject
.project
.settings
# Tags for vim/global
GPATH
-31
View File
@@ -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
}
]
}
]
}
+125 -63
View File
@@ -33,6 +33,7 @@ def gitCommitAuthorEmailAddr
// list of failing stages
def failingStages = ""
def lockForMessage = 'Parent-Lock'
pipeline {
agent {
@@ -120,46 +121,49 @@ pipeline {
}
}
// Build Stages are Mandatory
// Later we will add a Ubuntu20 build
stage ("Image Building Processes") {
when { expression {doBuild} }
parallel {
stage ("Ubuntu18-Image-Builder") {
stage ("Ubuntu-Image-Builder") {
steps {
script {
triggerSlaveJob ('RAN-Ubuntu18-Image-Builder', 'Ubuntu18-Image-Builder')
triggerSlaveJob ('RAN-Ubuntu18-Image-Builder', 'Ubuntu-Image-Builder')
}
}
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += ubuntuBuildStatus
}
}
}
}
stage ("RHEL8-Cluster-Image-Builder") {
stage ("RHEL-Cluster-Image-Builder") {
steps {
script {
triggerSlaveJob ('RAN-RHEL8-Cluster-Image-Builder', 'RHEL8-Cluster-Image-Builder')
triggerSlaveJob ('RAN-RHEL8-Cluster-Image-Builder', 'RHEL-Cluster-Image-Builder')
}
}
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += rhelBuildStatus
}
}
}
@@ -173,13 +177,37 @@ pipeline {
post {
always {
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 {
script {
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 {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += physimStatus
}
}
}
@@ -220,13 +250,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += rfSim4GStatus
}
}
}
@@ -241,13 +273,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += rfSim5GStatus
}
}
}
@@ -262,13 +296,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += l2Sim4GStatus
}
}
}
@@ -283,13 +319,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += l2Sim5GStatus
}
}
}
@@ -304,13 +342,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += lteTDDB200Status
}
}
}
@@ -326,13 +366,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += lteFDDB200OAIUEStatus
}
}
}
@@ -347,13 +389,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += lteFDDB200Status
}
}
}
@@ -368,13 +412,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += nsaTDDB200Status
}
}
}
@@ -389,13 +435,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += saTDDB200Status
}
}
}
@@ -410,13 +458,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += phytestLDPCoffloadStatus
}
}
}
@@ -431,13 +481,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += lteTDD2x2N3xxStatus
}
}
}
@@ -452,13 +504,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += saAW2SStatus
}
}
}
@@ -473,13 +527,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += f1InteropStatus
}
}
}
@@ -494,13 +550,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += cn5gCOTSUESanityCheck
}
}
}
@@ -515,13 +573,15 @@ pipeline {
post {
always {
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 {
script {
currentBuild.result = 'FAILURE'
failingStages += testBullet
failingStages += saOAIUEStatus
}
}
}
@@ -668,28 +728,30 @@ def triggerSlaveJobNoGitLab (jobName) {
}
def finalizeSlaveJob(jobName) {
// In case of any non-success, we are retrieving the HTML report of the last completed
// slave job. The only drop-back is that we may retrieve the HTML report of a previous build
if (jobName == 'OAI-CN5G-COTS-UE-Test') {
fileName = "test_results_oai_cn5g_cots_ue.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
lock (lockForMessage) {
// In case of any non-success, we are retrieving the HTML report of the last completed
// slave job. The only drop-back is that we may retrieve the HTML report of a previous build
if (jobName == 'OAI-CN5G-COTS-UE-Test') {
fileName = "test_results_oai_cn5g_cots_ue.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 = "\n * [${jobName}](${artifactUrl})"
return artifactUrl
}
artifactUrl = "\n * [${jobName}](${artifactUrl})"
return artifactUrl
}
// Abstraction function to send social media messages:
+21 -12
View File
@@ -54,16 +54,17 @@ fi
###############################
## echo and family
###############################
black='\E[30m'
red='\E[31m'
green='\E[32m'
yellow='\E[33m'
blue='\E[1;34m'
magenta='\E[35m'
cyan='\E[36m'
white='\E[37m'
reset_color='\E[00m'
COLORIZE=1
# only emit color if connected to a terminal, and if it supports colors
if [ -t 1 ]; then
num_colors=$(tput colors)
if [ -n "$num_colors" ] && [ "$num_colors" -ge 8 ]; then
red='\E[31m'
green='\E[32m'
yellow='\E[33m'
blue='\E[1;34m'
reset_color='\E[00m'
fi
fi
cecho() {
# Color-echo
@@ -72,8 +73,7 @@ cecho() {
local default_msg="No Message."
message=${1:-$default_msg}
color=${2:-$green}
[ "$COLORIZE" = "1" ] && message="$color$message$reset_color"
echo -e "$message"
echo -e "$color$message$reset_color"
return
}
@@ -685,6 +685,15 @@ install_simde_from_source(){
$SUDO rm -rf /tmp/simde
git clone https://github.com/simd-everywhere/simde-no-tests.git /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
$SUDO \cp -rv ../simde /usr/include
}
@@ -29,6 +29,8 @@
FROM ubuntu:focal AS ran-base
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Paris
# Specifying a working version of SIMDE for ARM:
ENV SIMDE_VERSION=389f360a66d4a3bec62b7d71ad8be877487809ba
#install developers pkg/repo
RUN apt-get update && \
+6 -1
View File
@@ -43,5 +43,10 @@ RUN /bin/sh oaienv && \
cd ../build-cross/ && \
cmake ../../.. -GNinja -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build && \
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 ======"
@@ -1466,12 +1466,14 @@ typedef enum {
//table 3-58
#define NFAPI_NR_MAX_TX_REQUEST_TLV 2
typedef struct
{
uint16_t PDU_length;
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.
// (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;
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;
@@ -13,7 +13,7 @@
*/
#include <stdint.h>
#include <immintrin.h>
#include "PHY/sse_intrin.h"
#include "nrLDPCdecoder_defs.h"
#include "nrLDPC_types.h"
#include "nrLDPC_init.h"
-10
View File
@@ -108,16 +108,6 @@ void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, const uint8_t gNB
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) {
return 0;
}
@@ -32,6 +32,8 @@ void nr_mac_rrc_sync_ind(const module_id_t module_id,
const frame_t frame,
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 rrc_data_ind(const protocol_ctxt_t *const ctxt_pP,
-10
View File
@@ -108,16 +108,6 @@ void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, const uint8_t gNB
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) {
return 0;
}
-10
View File
@@ -104,16 +104,6 @@ void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, const uint8_t gNB
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) {
return 0;
}
+2 -1
View File
@@ -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(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 */
MESSAGE_DEF(RRC_MAC_DRX_CONFIG_REQ, MESSAGE_PRIORITY_MED, rrc_mac_drx_config_req_t, rrc_mac_drx_config_req)
+5 -6
View File
@@ -55,6 +55,7 @@
#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_MSG3_IND(mSGpTR) (mSGpTR)->ittiMsg.nr_rrc_mac_msg3_ind
#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;
} NRRrcMacRaInd;
typedef struct NRRrcMacMsg3Ind_s {
uint16_t rnti;
} NRRrcMacMsg3Ind;
typedef struct RrcMacInSyncInd_s {
uint32_t frame;
uint8_t sub_frame;
@@ -154,15 +159,9 @@ typedef struct RrcMacCcchDataInd_s {
} RrcMacCcchDataInd;
typedef struct NRRrcMacCcchDataInd_s {
uint32_t frame;
uint8_t slot;
uint16_t rnti;
uint32_t 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;
typedef struct RrcMacMcchDataReq_s {
-220
View File
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.
Binary file not shown.

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
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 625 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.
Binary file not shown.
-15
View File
@@ -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
]
-231
View File
@@ -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
-144
View File
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

-103
View File
@@ -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
...
*/
-113
View File
@@ -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;
}
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 compute_PDU_length(uint32_t num_TLV, uint16_t total_length);
#endif
-1
View File
@@ -469,7 +469,6 @@ typedef struct {
/* PDUs */
/// Outgoing CCCH pdu for PHY
CCCH_PDU CCCH_pdu;
ULSCH_PDU ulsch_pdu;
/* Random Access */
/// CRNTI
+2
View File
@@ -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_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);
+24 -2
View File
@@ -40,10 +40,29 @@
#include "openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h"
#include "nr_rlc/nr_rlc_oai_api.h"
#include "RRC/NR/MESSAGES/asn1_msg.h"
#include "RRC/NR_UE/rrc_proto.h"
#include <pthread.h>
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) {
//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) {
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){
// get default noS1 configuration
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 {
LOG_I(MAC,"Running without CellGroupConfig\n");
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__);
}
}
+53 -48
View File
@@ -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_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__);
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
int8_t size_sdu = 0;
int size_sdu = 0;
uint8_t mac_ce[16] = {0};
uint8_t *pdu = get_softmodem_params()->sa ? mac->CCCH_pdu.payload : mac_ce;
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.
// 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) {
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) {
if (get_softmodem_params()->nsa) {
uint8_t mac_sdus[34*1056];
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);
}
} else {
} else if (!get_softmodem_params()->sa) {
size_sdu = nr_write_ce_ulsch_pdu(pdu, mac, 0, &(mac->crnti), NULL, NULL, NULL);
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)) {
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
if (TBS_max - ra->Msg3_size > 0) {
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)->LCID = UL_SCH_LCID_PADDING;
pdu += sizeof(NR_MAC_SUBHEADER_FIXED);
@@ -745,25 +758,17 @@ uint8_t nr_ue_get_rach(module_id_t mod_id,
}
// 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++) {
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 {
return 0;
}
} 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){
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);
}
+17 -6
View File
@@ -3598,7 +3598,7 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info,
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);
for (int i = 0; i < mac_subheader_len; 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++) {
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;
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_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__,
frame,
slot,
@@ -4122,8 +4133,7 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, int pdu_id)
ta_command,
rar_grant.mcs,
rar_grant.freq_hopping,
tpc_command,
ra->t_crnti);
tpc_command);
#endif
// 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);
if (ret != -1){
if (ret != -1) {
fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, slot_tx, tda_info.k2);
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) {
ra->t_crnti = rar->TCRNTI_2 + (rar->TCRNTI_1 << 8);
rnti = ra->t_crnti;
send_msg3_rrc_request(mod_id, rnti);
}
pthread_mutex_lock(&ul_config->mutex_ul_config);
+5 -5
View File
@@ -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],
ulcfg_pdu->pusch_config_pdu.pusch_data.new_data_indicator,
TBS_bytes,ra->ra_state);
if (ra->ra_state == WAIT_RAR && !ra->cfra){
memcpy(ulsch_input_buffer, mac->ulsch_pdu.payload, TBS_bytes);
LOG_D(NR_MAC,"[RAPROC] Msg3 to be transmitted:\n");
if (ra->ra_state == WAIT_RAR && !ra->cfra) {
nr_get_msg3_payload(mod_id);
memcpy(ulsch_input_buffer, mac->CCCH_pdu.payload, TBS_bytes);
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->first_ul_tx[ulcfg_pdu->pusch_config_pdu.pusch_data.harq_process_id] = 0;
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_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->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->Number_of_PDUs++;
TX_req->Slot = slotP;
@@ -1845,10 +1845,10 @@ static void nr_generate_Msg4(module_id_t module_idP,
// DL TX request
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);
tx_req->PDU_length = harq->tb_size;
tx_req->PDU_index = pduindex;
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->Number_of_PDUs++;
TX_req->Slot = slotP;
@@ -601,10 +601,10 @@ void schedule_nr_sib1(module_id_t module_idP,
// Data to be transmitted
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->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->SFN = frameP;
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;
nfapi_nr_pdu_t *tx_req = &TX_req->pdu_list[ntx_req];
tx_req->PDU_length = TBS;
tx_req->PDU_index = pduindex;
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);
TX_req->Number_of_PDUs++;
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)
{
NR_UE_info_t *UE = (NR_UE_info_t *)rawUE;
gNB_MAC_INST *mac = RC.nrmac[0];
NR_UE_info_t *UE = (NR_UE_info_t *)data;
NR_SCHED_ENSURE_LOCKED(&mac->sched_lock);
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);
/* 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 */
DevAssert(cellGroupConfig->rlc_BearerToAddModList->list.count == 1);
@@ -35,7 +35,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <immintrin.h>
#include "PHY/sse_intrin.h"
//#define SRS_DEBUG
+1 -1
View File
@@ -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 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);
+11 -16
View File
@@ -151,8 +151,8 @@ void mac_rlc_data_ind(const module_id_t module_idP,
rb->set_time(rb, nr_rlc_current_time);
rb->recv_pdu(rb, buffer_pP, tb_sizeP);
} else {
LOG_E(RLC, "%s:%d:%s: fatal: no RB found (channel ID %d)\n",
__FILE__, __LINE__, __FUNCTION__, channel_idP);
LOG_E(RLC, "Fatal: no RB found (channel ID %d RNTI %d)\n",
channel_idP, rntiP);
// 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 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,
"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);
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);
}
@@ -963,31 +963,27 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
}
struct srb0_data {
struct gNB_MAC_INST_s *mac;
int rnti;
void *rawUE;
void (*send_initial_ul_rrc_message)(struct gNB_MAC_INST_s *mac,
int rnti,
void *data;
void (*send_initial_ul_rrc_message)(int rnti,
const uint8_t *sdu,
sdu_size_t sdu_len,
void *rawUE);
void *data);
};
void deliver_sdu_srb0(void *deliver_sdu_data, struct nr_rlc_entity_t *entity,
char *buf, int size)
{
struct srb0_data *s0 = (struct srb0_data *)deliver_sdu_data;
s0->send_initial_ul_rrc_message(s0->mac, s0->rnti, (unsigned char *)buf,
size, s0->rawUE);
s0->send_initial_ul_rrc_message(s0->rnti, (unsigned char *)buf, size, s0->data);
}
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)(
struct gNB_MAC_INST_s *mac,
int rnti,
const uint8_t *sdu,
sdu_size_t sdu_len,
void *rawUE))
void *data))
{
nr_rlc_entity_t *nr_rlc_tm;
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));
AssertFatal(srb0_data != NULL, "out of memory\n");
srb0_data->mac = mac;
srb0_data->rnti = rnti;
srb0_data->rawUE = rawUE;
srb0_data->data = data;
srb0_data->send_initial_ul_rrc_message = send_initial_ul_rrc_message;
nr_rlc_manager_lock(nr_rlc_ue_manager);
+2 -4
View File
@@ -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);
struct gNB_MAC_INST_s;
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)(
struct gNB_MAC_INST_s *mac,
int rnti,
const uint8_t *sdu,
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);
+2 -1
View File
@@ -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;
uint8_t buf[5],buf2=0;
NR_UL_CCCH_Message_t ul_ccch_msg;
+1 -1
View File
@@ -117,7 +117,7 @@ uint8_t do_RRCSetupComplete(uint8_t Mod_id,
const int dedicatedInfoNASLength,
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);
-6
View File
@@ -61,13 +61,7 @@ typedef struct RB_INFO_NR_s {
//MAC_MEAS_REQ_ENTRY *Meas_entry; //may not needed for NB-IoT
} 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 {
NR_SRB_INFO Srb_info;
uint8_t Active;
uint8_t status;
} NR_SRB_INFO_TABLE_ENTRY;
+5 -52
View File
@@ -91,29 +91,7 @@ int8_t nr_mac_rrc_data_ind_ue(const module_id_t module_id,
break;
case CCCH:
if (pdu_len>0) {
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);
}
AssertFatal(false, "use RLC instead\n");
break;
default:
@@ -123,36 +101,11 @@ int8_t nr_mac_rrc_data_ind_ue(const module_id_t module_id,
return(0);
}
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)
void nr_mac_rrc_msg3_ind(const module_id_t mod_id, int rnti)
{
switch(Srb_id) {
case CCCH:
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;
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;
itti_send_msg_to_task(TASK_RRC_NRUE, GNB_MODULE_ID_TO_INSTANCE(mod_id), message_p);
}
void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success)
+46 -67
View File
@@ -616,12 +616,12 @@ int nr_decode_SI(const module_id_t module_id, const uint8_t gNB_index, NR_System
return 0;
}
int8_t nr_rrc_ue_generate_ra_msg(module_id_t module_id, uint8_t gNB_index) {
switch(NR_UE_rrc_inst[module_id].ra_trigger){
void nr_rrc_ue_generate_ra_msg(module_id_t module_id, int rnti)
{
switch(NR_UE_rrc_inst[module_id].ra_trigger) {
case INITIAL_ACCESS_FROM_RRC_IDLE:
// After SIB1 is received, prepare RRCConnectionRequest
nr_rrc_ue_generate_RRCSetupRequest(module_id,gNB_index);
nr_rrc_ue_generate_RRCSetupRequest(module_id, rnti);
break;
case RRC_CONNECTION_REESTABLISHMENT:
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");
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,
@@ -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
rrc->servingCellConfigCommonSIB = 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;
case NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformation:
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);
}
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_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,
"[NR UE%d] Decoding DL-CCCH message (%d bytes), State %d\n",
ctxt_pP->module_id,
Srb_info->srb_buffers.Rx_buffer.payload_size,
len,
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) ) {
xer_fprint(stdout, &asn_DEF_NR_DL_CCCH_Message, (void *)dl_ccch_msg);
// }
dec_rval = uper_decode(NULL, &asn_DEF_NR_DL_CCCH_Message, (void **)&dl_ccch_msg, buf, len, 0, 0);
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,
"[UE %d] Frame %d : Failed to decode DL-CCCH-Message (%zu bytes)\n",
ctxt_pP->module_id,
@@ -1292,41 +1304,6 @@ void nr_rrc_ue_process_securityModeCommand(const protocol_ctxt_t *const ctxt_pP,
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
nr_rrc_ue_process_measConfig(
@@ -1799,8 +1776,17 @@ void *rrc_nrue_task(void *args_p)
nr_rrc_SI_timers(SInfo);
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:
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,
ITTI_MSG_NAME (msg_p),
NR_RRC_MAC_RA_IND (msg_p).frame,
@@ -1828,18 +1814,11 @@ void *rrc_nrue_task(void *args_p)
break;
case NR_RRC_MAC_CCCH_DATA_IND:
LOG_D(NR_RRC, "[UE %d] RNTI %x Received %s: frameP %d, gNB %d\n",
ue_mod_id,
NR_RRC_MAC_CCCH_DATA_IND (msg_p).rnti,
ITTI_MSG_NAME (msg_p),
NR_RRC_MAC_CCCH_DATA_IND (msg_p).frame,
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);
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, instance, GNB_FLAG_NO, NR_RRC_MAC_CCCH_DATA_IND (msg_p).rnti, 0, 0);
nr_rrc_ue_decode_ccch(&ctxt,
NR_RRC_MAC_CCCH_DATA_IND (msg_p).sdu,
NR_RRC_MAC_CCCH_DATA_IND (msg_p).sdu_size,
/* gNB_index = */ 0);
break;
/* PDCP messages */
-1
View File
@@ -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 {
NR_RB_status_t status;
NR_SRB_INFO srb_buffers;
} NR_UE_RRC_SRB_INFO_t;
typedef struct NR_UE_RRC_INST_s {
+3 -18
View File
@@ -107,20 +107,7 @@ void nr_mac_rrc_sync_ind(const module_id_t module_id,
const frame_t frame,
const bool in_sync);
void nr_mac_rrc_ra_ind(const module_id_t mod_id, int frame, bool success);
/**\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);
void nr_mac_rrc_msg3_ind(const module_id_t mod_id, int rnti);
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);
/**\brief RRC UE generate RRCSetupRequest message.
\param module_id module id
\param gNB_index gNB index */
void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, const uint8_t gNB_index);
/**\brief RRC UE generate RRCSetupRequest message. */
void nr_rrc_ue_generate_RRCSetupRequest(module_id_t module_id, int rnti);
void process_lte_nsa_msg(nsa_msg_t *msg, int msg_len);
+1 -1
View File
@@ -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";
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);
return -1;
}
-729
View File
@@ -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