diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab
index d4fe0d8555..7019d13124 100644
--- a/ci-scripts/Jenkinsfile-gitlab
+++ b/ci-scripts/Jenkinsfile-gitlab
@@ -31,7 +31,6 @@ def sendSocialMediaMessage(pipeChannel, pipeColor, pipeMessage) {
}
def doRedHatBuild = false
-def FDD_Band7_B210_Status
pipeline {
agent {
@@ -41,7 +40,7 @@ pipeline {
disableConcurrentBuilds()
timestamps()
gitLabConnection('OAI GitLab')
- gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim", "Test-FDD-Band7"])
+ gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim", "Test basic-sim", "Test-FDD-Band7", "Test-TDD-Band40"])
ansiColor('xterm')
}
@@ -62,7 +61,7 @@ pipeline {
allParametersPresent = false
}
if (allParametersPresent) {
- echo "Performing Red Hat Build"
+ echo "Performing Red Hat Build"
doRedHatBuild = true
} else {
doRedHatBuild = false
@@ -154,14 +153,14 @@ pipeline {
stage ("Analysis with cppcheck") {
steps {
gitlabCommitStatus(name: "Analysis with cppcheck") {
- sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant cppcheck --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
+ sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant cppcheck --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
}
}
}
stage ("Build eNb-USRP") {
steps {
gitlabCommitStatus(name: "Build eNb-USRP") {
- sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
+ sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
}
}
}
@@ -238,6 +237,7 @@ pipeline {
sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}"
}
if(fileExists('build_results.html')) {
+ sh "sed -i -e 's#Build-ID: ${BUILD_ID}#Build-ID: ${BUILD_ID}#' build_results.html"
archiveArtifacts artifacts: 'build_results.html'
}
}
@@ -250,64 +250,111 @@ pipeline {
stage ("Test physical simulators") {
steps {
gitlabCommitStatus(name: "Test phy-sim") {
- sh "./ci-scripts/runTestOnVM.sh --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
+ sh "./ci-scripts/runTestOnVM.sh --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
}
}
}
stage ("Test basic simulator") {
steps {
- //gitlabCommitStatus(name: "Test basic-sim") {
+ gitlabCommitStatus(name: "Test basic-sim") {
sh "./ci-scripts/runTestOnVM.sh --workspace $WORKSPACE --variant basic-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
- //}
+ }
}
}
- stage ("Test FDD - Band 7 - B210") {
- steps {
- gitlabCommitStatus(name: "Test-FDD-Band7") {
- script {
- if ("MERGE".equals(env.gitlabActionType)) {
- FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210',
- parameters: [
- string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
- string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)),
- string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
- booleanParam(name: 'eNB_mergeRequest', value: true)
- ]
- } else {
- FDD_Band7_B210_Status = build job: 'eNB-CI-FDD-Band7-B210',
- parameters: [
- string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
- string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)),
- string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)),
- booleanParam(name: 'eNB_mergeRequest', value: false)
- ]
+ stage ("Test on CI bench #1") {
+ stages {
+ stage ("Test FDD - Band 7 - B210") {
+ steps {
+ script {
+ try {
+ if ("MERGE".equals(env.gitlabActionType)) {
+ gitlabCommitStatus(name: "Test-FDD-Band7") {
+ build job: 'eNB-CI-FDD-Band7-B210',
+ parameters: [
+ string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
+ string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)),
+ string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
+ booleanParam(name: 'eNB_mergeRequest', value: true)
+ ]
+ }
+ } else {
+ gitlabCommitStatus(name: "Test-FDD-Band7") {
+ build job: 'eNB-CI-FDD-Band7-B210',
+ parameters: [
+ string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
+ string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)),
+ string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)),
+ booleanParam(name: 'eNB_mergeRequest', value: false)
+ ]
+ }
+ }
+ } catch (Exception e) {
+ currentBuild.result = 'FAILURE'
+ }
+ }
+ }
+ post {
+ // In case of any non-success, we are retrieving the HTML report of the last completed
+ // slave job.
+ // The only drop-back is that we may retrieve the HTML report of a previous build
+ always {
+ script {
+ if (!fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
+ copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210',
+ filter: 'test_results*.html',
+ selector: lastCompleted())
+ if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
+ archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html'
+ }
+ }
+ }
}
}
}
- }
- post {
- // In case of success we really pick the report from the exact slave build number
- success {
- script {
- copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210',
- filter: 'test_results*.html',
- selector: specific("${FDD_Band7_B210_Status.number}"))
- if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
- archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html'
+ stage ("Test TDD - Band 40 - B210") {
+ steps {
+ script {
+ try {
+ if ("MERGE".equals(env.gitlabActionType)) {
+ gitlabCommitStatus(name: "Test-TDD-Band40") {
+ build job: 'eNB-CI-TDD-Band40-B210',
+ parameters: [
+ string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
+ string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)),
+ string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)),
+ booleanParam(name: 'eNB_mergeRequest', value: true)
+ ]
+ }
+ } else {
+ gitlabCommitStatus(name: "Test-TDD-Band40") {
+ build job: 'eNB-CI-TDD-Band40-B210',
+ parameters: [
+ string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)),
+ string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)),
+ string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)),
+ booleanParam(name: 'eNB_mergeRequest', value: false)
+ ]
+ }
+ }
+ } catch (Exception e) {
+ currentBuild.result = 'FAILURE'
+ }
}
}
- }
- // In case of any non-success, we are retrieving the HTML report of the last completed
- // slave job. Note that we could use that syntax also in case of success.
- // The only drop-back is that we may retrieve the HTML report of a previous build
- cleanup {
- script {
- if (!fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
- copyArtifacts(projectName: 'eNB-CI-FDD-Band7-B210',
- filter: 'test_results*.html',
- selector: lastCompleted())
- if (fileExists('test_results-eNB-CI-FDD-Band7-B210.html')) {
- archiveArtifacts artifacts: 'test_results-eNB-CI-FDD-Band7-B210.html'
+ post {
+ // In case of any non-success, we are retrieving the HTML report of the last completed
+ // slave job.
+ // The only drop-back is that we may retrieve the HTML report of a previous build
+ always {
+ script {
+ if (!fileExists('test_results-eNB-CI-TDD-Band40-B210.html')) {
+ copyArtifacts(projectName: 'eNB-CI-TDD-Band40-B210',
+ filter: 'test_results*.html',
+ selector: lastCompleted())
+ if (fileExists('test_results-eNB-CI-TDD-Band40-B210.html')) {
+ archiveArtifacts artifacts: 'test_results-eNB-CI-TDD-Band40-B210.html'
+ }
+ }
}
}
}
@@ -319,12 +366,19 @@ pipeline {
always {
script {
dir ('archives') {
- sh "if [ -d */test ]; then zip -r -qq vm_tests_logs.zip */test ; fi"
+ sh "if [ -d basic_sim/test ] || [ -d phy_sim/test ]; then zip -r -qq vm_tests_logs.zip */test ; fi"
}
if(fileExists('archives/vm_tests_logs.zip')) {
archiveArtifacts artifacts: 'archives/vm_tests_logs.zip'
- archiveArtifacts artifacts: 'archives/*/test/results_autotests*.xml'
- archiveArtifacts artifacts: 'archives/*/test/*.xsl'
+ if ("MERGE".equals(env.gitlabActionType)) {
+ sh "./ci-scripts/reportTestLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger merge-request --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}"
+ } else {
+ sh "./ci-scripts/reportTestLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger push --branch ${GIT_BRANCH} --commit ${GIT_COMMIT}"
+ }
+ if(fileExists('test_simulator_results.html')) {
+ sh "sed -i -e 's#Build-ID: ${BUILD_ID}#Build-ID: ${BUILD_ID}#' test_simulator_results.html"
+ archiveArtifacts artifacts: 'test_simulator_results.html'
+ }
}
}
}
@@ -341,6 +395,15 @@ pipeline {
script {
// Stage destroy may not be run if error in previous stage
sh "./ci-scripts/destroyAllRunningVM.sh --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
+ emailext attachmentsPattern: '*results*.html',
+ body: '''Hi,
+Here are attached HTML report files for $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!
+
+Regards,
+OAI CI Team''',
+ replyTo: 'no-reply@openairinterface.org',
+ subject: '$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!',
+ to: env.gitlabUserEmail
}
}
success {
diff --git a/ci-scripts/buildOnVM.sh b/ci-scripts/buildOnVM.sh
index 76a11c6d38..3eb24932bf 100755
--- a/ci-scripts/buildOnVM.sh
+++ b/ci-scripts/buildOnVM.sh
@@ -86,6 +86,7 @@ JOB_NAME=XX
BUILD_ID=XX
VM_NAME=ci-enb-usrp
VM_MEMORY=2048
+VM_CPU=4
ARCHIVES_LOC=enb_usrp
LOG_PATTERN=.Rel14.txt
NB_PATTERN_FILES=4
@@ -135,6 +136,8 @@ case $key in
LOG_PATTERN=basic_simulator
NB_PATTERN_FILES=2
BUILD_OPTIONS="--basic-simulator"
+ VM_MEMORY=8192
+ VM_CPU=4
shift
;;
-v3)
@@ -186,6 +189,8 @@ case $key in
LOG_PATTERN=basic_simulator
NB_PATTERN_FILES=2
BUILD_OPTIONS="--basic-simulator"
+ VM_MEMORY=8192
+ VM_CPU=4
;;
phy-sim)
VM_NAME=ci-phy-sim
@@ -270,7 +275,7 @@ then
echo "############################################################"
echo "Creating VM ($VM_NAME) on Ubuntu Cloud Image base"
echo "############################################################"
- uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu 4 --unsafe-caching --template ci-scripts/template-host.xml
+ uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu $VM_CPU --unsafe-caching --template ci-scripts/template-host.xml
fi
echo "Waiting for VM to be started"
@@ -289,6 +294,7 @@ echo "############################################################"
echo "Running install and build script on VM ($VM_NAME)"
echo "############################################################"
echo "sudo cp 01proxy /etc/apt/apt.conf.d/" > $VM_CMDS
+echo "touch /home/ubuntu/.hushlogin" >> $VM_CMDS
if [[ "$VM_NAME" == *"-cppcheck"* ]]
then
echo "echo \"sudo apt-get --yes --quiet install zip cppcheck \"" >> $VM_CMDS
diff --git a/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf
new file mode 100644
index 0000000000..14230c125f
--- /dev/null
+++ b/ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf
@@ -0,0 +1,220 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+ ////////// Identification parameters:
+ eNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_ENB";
+
+ eNB_name = "eNB_Eurecom_LTEBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = "1";
+
+ mobile_country_code = "208";
+ mobile_network_code = "92";
+
+ ////////// Physical parameters:
+
+ component_carriers = (
+ {
+ node_function = "eNodeB_3GPP";
+ node_timing = "synch_to_ext_device";
+ node_synch_ref = 0;
+ frame_type = "TDD";
+ tdd_config = 1;
+ tdd_config_s = 0;
+ prefix_type = "NORMAL";
+ eutra_band = 40;
+ downlink_frequency = 2350000000L;
+ uplink_frequency_offset = 0;
+ Nid_cell = 0;
+ N_RB_DL = 100;
+ Nid_cell_mbsfn = 0;
+ nb_antenna_ports = 1;
+ nb_antennas_tx = 1;
+ nb_antennas_rx = 1;
+ tx_gain = 90;
+ rx_gain = 125;
+ prach_root = 0;
+ prach_config_index = 0;
+ prach_high_speed = "DISABLE";
+ prach_zero_correlation = 1;
+ prach_freq_offset = 2;
+ pucch_delta_shift = 1;
+ pucch_nRB_CQI = 1;
+ pucch_nCS_AN = 0;
+ pucch_n1_AN = 0;
+ pdsch_referenceSignalPower =-29;
+ pdsch_p_b = 0;
+ pusch_n_SB = 1;
+ pusch_enable64QAM = "DISABLE";
+ pusch_hoppingMode = "interSubFrame";
+ pusch_hoppingOffset = 0;
+ pusch_groupHoppingEnabled = "ENABLE";
+ pusch_groupAssignment = 0;
+ pusch_sequenceHoppingEnabled = "DISABLE";
+ pusch_nDMRS1 = 1;
+ phich_duration = "NORMAL";
+ phich_resource = "ONESIXTH";
+ srs_enable = "DISABLE";
+ /* srs_BandwidthConfig =;
+ srs_SubframeConfig =;
+ srs_ackNackST =;
+ srs_MaxUpPts =;*/
+
+ pusch_p0_Nominal = -96;
+ pusch_alpha = "AL1";
+ pucch_p0_Nominal = -106;
+ msg3_delta_Preamble = 6;
+ pucch_deltaF_Format1 = "deltaF2";
+ pucch_deltaF_Format1b = "deltaF3";
+ pucch_deltaF_Format2 = "deltaF0";
+ pucch_deltaF_Format2a = "deltaF0";
+ pucch_deltaF_Format2b = "deltaF0";
+
+ rach_numberOfRA_Preambles = 64;
+ rach_preamblesGroupAConfig = "DISABLE";
+ /*
+ rach_sizeOfRA_PreamblesGroupA = ;
+ rach_messageSizeGroupA = ;
+ rach_messagePowerOffsetGroupB = ;
+ */
+ rach_powerRampingStep = 4;
+ rach_preambleInitialReceivedTargetPower = -108;
+ rach_preambleTransMax = 10;
+ rach_raResponseWindowSize = 10;
+ rach_macContentionResolutionTimer = 48;
+ rach_maxHARQ_Msg3Tx = 4;
+
+ pcch_default_PagingCycle = 128;
+ pcch_nB = "oneT";
+ bcch_modificationPeriodCoeff = 2;
+ ue_TimersAndConstants_t300 = 1000;
+ ue_TimersAndConstants_t301 = 1000;
+ ue_TimersAndConstants_t310 = 1000;
+ ue_TimersAndConstants_t311 = 10000;
+ ue_TimersAndConstants_n310 = 20;
+ ue_TimersAndConstants_n311 = 1;
+
+ ue_TransmissionMode = 1;
+ }
+ );
+
+
+ srb1_parameters :
+ {
+ # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+ timer_poll_retransmit = 80;
+
+ # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+ timer_reordering = 35;
+
+ # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+ timer_status_prohibit = 0;
+
+ # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+ poll_pdu = 4;
+
+ # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+ poll_byte = 99999;
+
+ # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+ max_retx_threshold = 4;
+ }
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "10.0.0.2";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+ ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "10.0.0.1/24";
+
+ ENB_INTERFACE_NAME_FOR_S1U = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1U = "10.0.0.1/24";
+ ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
+ };
+
+ log_config :
+ {
+ global_log_level ="debug";
+ global_log_verbosity ="medium";
+ hw_log_level ="info";
+ hw_log_verbosity ="medium";
+ phy_log_level ="info";
+ phy_log_verbosity ="medium";
+ mac_log_level ="info";
+ mac_log_verbosity ="high";
+ rlc_log_level ="info";
+ rlc_log_verbosity ="medium";
+ pdcp_log_level ="info";
+ pdcp_log_verbosity ="medium";
+ rrc_log_level ="info";
+ rrc_log_verbosity ="medium";
+ };
+
+ }
+);
+MACRLCs = (
+ {
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ scheduler_mode = "fairRR";
+ puSch10xSnr = 200;
+ puCch10xSnr = 200;
+ }
+);
+
+L1s = (
+ {
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ }
+);
+
+RUs = (
+ {
+ local_rf = "yes"
+ nb_tx = 1
+ nb_rx = 1
+ att_tx = 0
+ att_rx = 0;
+ bands = [38];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 115;
+ eNB_instances = [0];
+
+ }
+);
+
+NETWORK_CONTROLLER :
+{
+ FLEXRAN_ENABLED = "no";
+ FLEXRAN_INTERFACE_NAME = "lo";
+ FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
+ FLEXRAN_PORT = 2210;
+ FLEXRAN_CACHE = "/mnt/oai_agent_cache";
+ FLEXRAN_AWAIT_RECONF = "no";
+};
diff --git a/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf
new file mode 100644
index 0000000000..8a66e3131f
--- /dev/null
+++ b/ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf
@@ -0,0 +1,220 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+ ////////// Identification parameters:
+ eNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_ENB";
+
+ eNB_name = "eNB_Eurecom_LTEBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = "1";
+
+ mobile_country_code = "208";
+ mobile_network_code = "92";
+
+ ////////// Physical parameters:
+
+ component_carriers = (
+ {
+ node_function = "eNodeB_3GPP";
+ node_timing = "synch_to_ext_device";
+ node_synch_ref = 0;
+ frame_type = "TDD";
+ tdd_config = 1;
+ tdd_config_s = 0;
+ prefix_type = "NORMAL";
+ eutra_band = 40;
+ downlink_frequency = 2350000000L;
+ uplink_frequency_offset = 0;
+ Nid_cell = 0;
+ N_RB_DL = 25;
+ Nid_cell_mbsfn = 0;
+ nb_antenna_ports = 1;
+ nb_antennas_tx = 1;
+ nb_antennas_rx = 1;
+ tx_gain = 90;
+ rx_gain = 125;
+ prach_root = 0;
+ prach_config_index = 0;
+ prach_high_speed = "DISABLE";
+ prach_zero_correlation = 1;
+ prach_freq_offset = 2;
+ pucch_delta_shift = 1;
+ pucch_nRB_CQI = 1;
+ pucch_nCS_AN = 0;
+ pucch_n1_AN = 0;
+ pdsch_referenceSignalPower =-27;
+ pdsch_p_b = 0;
+ pusch_n_SB = 1;
+ pusch_enable64QAM = "DISABLE";
+ pusch_hoppingMode = "interSubFrame";
+ pusch_hoppingOffset = 0;
+ pusch_groupHoppingEnabled = "ENABLE";
+ pusch_groupAssignment = 0;
+ pusch_sequenceHoppingEnabled = "DISABLE";
+ pusch_nDMRS1 = 1;
+ phich_duration = "NORMAL";
+ phich_resource = "ONESIXTH";
+ srs_enable = "DISABLE";
+ /* srs_BandwidthConfig =;
+ srs_SubframeConfig =;
+ srs_ackNackST =;
+ srs_MaxUpPts =;*/
+
+ pusch_p0_Nominal = -96;
+ pusch_alpha = "AL1";
+ pucch_p0_Nominal = -106;
+ msg3_delta_Preamble = 6;
+ pucch_deltaF_Format1 = "deltaF2";
+ pucch_deltaF_Format1b = "deltaF3";
+ pucch_deltaF_Format2 = "deltaF0";
+ pucch_deltaF_Format2a = "deltaF0";
+ pucch_deltaF_Format2b = "deltaF0";
+
+ rach_numberOfRA_Preambles = 64;
+ rach_preamblesGroupAConfig = "DISABLE";
+ /*
+ rach_sizeOfRA_PreamblesGroupA = ;
+ rach_messageSizeGroupA = ;
+ rach_messagePowerOffsetGroupB = ;
+ */
+ rach_powerRampingStep = 4;
+ rach_preambleInitialReceivedTargetPower = -108;
+ rach_preambleTransMax = 10;
+ rach_raResponseWindowSize = 10;
+ rach_macContentionResolutionTimer = 48;
+ rach_maxHARQ_Msg3Tx = 4;
+
+ pcch_default_PagingCycle = 128;
+ pcch_nB = "oneT";
+ bcch_modificationPeriodCoeff = 2;
+ ue_TimersAndConstants_t300 = 1000;
+ ue_TimersAndConstants_t301 = 1000;
+ ue_TimersAndConstants_t310 = 1000;
+ ue_TimersAndConstants_t311 = 10000;
+ ue_TimersAndConstants_n310 = 20;
+ ue_TimersAndConstants_n311 = 1;
+
+ ue_TransmissionMode = 1;
+ }
+ );
+
+
+ srb1_parameters :
+ {
+ # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+ timer_poll_retransmit = 80;
+
+ # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+ timer_reordering = 35;
+
+ # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+ timer_status_prohibit = 0;
+
+ # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+ poll_pdu = 4;
+
+ # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+ poll_byte = 99999;
+
+ # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+ max_retx_threshold = 4;
+ }
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "10.0.0.2";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+ ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "10.0.0.1/24";
+
+ ENB_INTERFACE_NAME_FOR_S1U = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1U = "10.0.0.1/24";
+ ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
+ };
+
+ log_config :
+ {
+ global_log_level ="debug";
+ global_log_verbosity ="medium";
+ hw_log_level ="info";
+ hw_log_verbosity ="medium";
+ phy_log_level ="info";
+ phy_log_verbosity ="medium";
+ mac_log_level ="info";
+ mac_log_verbosity ="high";
+ rlc_log_level ="info";
+ rlc_log_verbosity ="medium";
+ pdcp_log_level ="info";
+ pdcp_log_verbosity ="medium";
+ rrc_log_level ="info";
+ rrc_log_verbosity ="medium";
+ };
+
+ }
+);
+MACRLCs = (
+ {
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ scheduler_mode = "fairRR";
+ puSch10xSnr = 200;
+ puCch10xSnr = 200;
+ }
+);
+
+L1s = (
+ {
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ }
+);
+
+RUs = (
+ {
+ local_rf = "yes"
+ nb_tx = 1
+ nb_rx = 1
+ att_tx = 0
+ att_rx = 0;
+ bands = [38];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 115;
+ eNB_instances = [0];
+
+ }
+);
+
+NETWORK_CONTROLLER :
+{
+ FLEXRAN_ENABLED = "no";
+ FLEXRAN_INTERFACE_NAME = "lo";
+ FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
+ FLEXRAN_PORT = 2210;
+ FLEXRAN_CACHE = "/mnt/oai_agent_cache";
+ FLEXRAN_AWAIT_RECONF = "no";
+};
diff --git a/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf b/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf
new file mode 100644
index 0000000000..ede864b733
--- /dev/null
+++ b/ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf
@@ -0,0 +1,220 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+ ////////// Identification parameters:
+ eNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_ENB";
+
+ eNB_name = "eNB_Eurecom_LTEBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = "1";
+
+ mobile_country_code = "208";
+ mobile_network_code = "92";
+
+ ////////// Physical parameters:
+
+ component_carriers = (
+ {
+ node_function = "eNodeB_3GPP";
+ node_timing = "synch_to_ext_device";
+ node_synch_ref = 0;
+ frame_type = "TDD";
+ tdd_config = 1;
+ tdd_config_s = 0;
+ prefix_type = "NORMAL";
+ eutra_band = 40;
+ downlink_frequency = 2350000000L;
+ uplink_frequency_offset = 0;
+ Nid_cell = 0;
+ N_RB_DL = 50;
+ Nid_cell_mbsfn = 0;
+ nb_antenna_ports = 1;
+ nb_antennas_tx = 1;
+ nb_antennas_rx = 1;
+ tx_gain = 90;
+ rx_gain = 125;
+ prach_root = 0;
+ prach_config_index = 0;
+ prach_high_speed = "DISABLE";
+ prach_zero_correlation = 1;
+ prach_freq_offset = 2;
+ pucch_delta_shift = 1;
+ pucch_nRB_CQI = 1;
+ pucch_nCS_AN = 0;
+ pucch_n1_AN = 0;
+ pdsch_referenceSignalPower =-27;
+ pdsch_p_b = 0;
+ pusch_n_SB = 1;
+ pusch_enable64QAM = "DISABLE";
+ pusch_hoppingMode = "interSubFrame";
+ pusch_hoppingOffset = 0;
+ pusch_groupHoppingEnabled = "ENABLE";
+ pusch_groupAssignment = 0;
+ pusch_sequenceHoppingEnabled = "DISABLE";
+ pusch_nDMRS1 = 1;
+ phich_duration = "NORMAL";
+ phich_resource = "ONESIXTH";
+ srs_enable = "DISABLE";
+ /* srs_BandwidthConfig =;
+ srs_SubframeConfig =;
+ srs_ackNackST =;
+ srs_MaxUpPts =;*/
+
+ pusch_p0_Nominal = -96;
+ pusch_alpha = "AL1";
+ pucch_p0_Nominal = -106;
+ msg3_delta_Preamble = 6;
+ pucch_deltaF_Format1 = "deltaF2";
+ pucch_deltaF_Format1b = "deltaF3";
+ pucch_deltaF_Format2 = "deltaF0";
+ pucch_deltaF_Format2a = "deltaF0";
+ pucch_deltaF_Format2b = "deltaF0";
+
+ rach_numberOfRA_Preambles = 64;
+ rach_preamblesGroupAConfig = "DISABLE";
+ /*
+ rach_sizeOfRA_PreamblesGroupA = ;
+ rach_messageSizeGroupA = ;
+ rach_messagePowerOffsetGroupB = ;
+ */
+ rach_powerRampingStep = 4;
+ rach_preambleInitialReceivedTargetPower = -108;
+ rach_preambleTransMax = 10;
+ rach_raResponseWindowSize = 10;
+ rach_macContentionResolutionTimer = 48;
+ rach_maxHARQ_Msg3Tx = 4;
+
+ pcch_default_PagingCycle = 128;
+ pcch_nB = "oneT";
+ bcch_modificationPeriodCoeff = 2;
+ ue_TimersAndConstants_t300 = 1000;
+ ue_TimersAndConstants_t301 = 1000;
+ ue_TimersAndConstants_t310 = 1000;
+ ue_TimersAndConstants_t311 = 10000;
+ ue_TimersAndConstants_n310 = 20;
+ ue_TimersAndConstants_n311 = 1;
+
+ ue_TransmissionMode = 1;
+ }
+ );
+
+
+ srb1_parameters :
+ {
+ # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+ timer_poll_retransmit = 80;
+
+ # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+ timer_reordering = 35;
+
+ # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+ timer_status_prohibit = 0;
+
+ # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+ poll_pdu = 4;
+
+ # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+ poll_byte = 99999;
+
+ # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+ max_retx_threshold = 4;
+ }
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "10.0.0.2";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+ ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "10.0.0.1/24";
+
+ ENB_INTERFACE_NAME_FOR_S1U = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1U = "10.0.0.1/24";
+ ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
+ };
+
+ log_config :
+ {
+ global_log_level ="debug";
+ global_log_verbosity ="medium";
+ hw_log_level ="info";
+ hw_log_verbosity ="medium";
+ phy_log_level ="info";
+ phy_log_verbosity ="medium";
+ mac_log_level ="info";
+ mac_log_verbosity ="high";
+ rlc_log_level ="info";
+ rlc_log_verbosity ="medium";
+ pdcp_log_level ="info";
+ pdcp_log_verbosity ="medium";
+ rrc_log_level ="info";
+ rrc_log_verbosity ="medium";
+ };
+
+ }
+);
+MACRLCs = (
+ {
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ scheduler_mode = "fairRR";
+ puSch10xSnr = 200;
+ puCch10xSnr = 200;
+ }
+);
+
+L1s = (
+ {
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ }
+);
+
+RUs = (
+ {
+ local_rf = "yes"
+ nb_tx = 1
+ nb_rx = 1
+ att_tx = 0
+ att_rx = 0;
+ bands = [38];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 115;
+ eNB_instances = [0];
+
+ }
+);
+
+NETWORK_CONTROLLER :
+{
+ FLEXRAN_ENABLED = "no";
+ FLEXRAN_INTERFACE_NAME = "lo";
+ FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
+ FLEXRAN_PORT = 2210;
+ FLEXRAN_CACHE = "/mnt/oai_agent_cache";
+ FLEXRAN_AWAIT_RECONF = "no";
+};
diff --git a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
index 4380bd30be..37656de755 100644
--- a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
@@ -183,12 +183,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
diff --git a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
index dded9cfdeb..01c1ca1428 100644
--- a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf
@@ -183,12 +183,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
diff --git a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
index 7c4292eb61..eb5822cb22 100644
--- a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
+++ b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
@@ -183,12 +183,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
diff --git a/ci-scripts/conf_files/lte-basic-sim.conf b/ci-scripts/conf_files/lte-basic-sim.conf
new file mode 100644
index 0000000000..f0fab0bdcb
--- /dev/null
+++ b/ci-scripts/conf_files/lte-basic-sim.conf
@@ -0,0 +1,259 @@
+Active_eNBs = ( "eNB-Eurecom-LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+ ////////// Identification parameters:
+ eNB_ID = 0xe00;
+
+ cell_type = "CELL_MACRO_ENB";
+
+ eNB_name = "eNB-Eurecom-LTEBox";
+
+ // Tracking area code, 0x0000 and 0xfffe are reserved values
+ tracking_area_code = "1";
+
+ mobile_country_code = "208";
+
+ mobile_network_code = "93";
+
+ tr_s_preference = "local_mac"
+
+ ////////// Physical parameters:
+
+ component_carriers = (
+ {
+ node_function = "3GPP_eNODEB";
+ node_timing = "synch_to_ext_device";
+ node_synch_ref = 0;
+ frame_type = "FDD";
+ tdd_config = 3;
+ tdd_config_s = 0;
+ prefix_type = "NORMAL";
+ eutra_band = 7;
+ downlink_frequency = 2680000000L;
+ uplink_frequency_offset = -120000000;
+ Nid_cell = 0;
+ N_RB_DL = 25;
+ Nid_cell_mbsfn = 0;
+ nb_antenna_ports = 1;
+ nb_antennas_tx = 1;
+ nb_antennas_rx = 1;
+ tx_gain = 90;
+ rx_gain = 125;
+ pbch_repetition = "FALSE";
+ prach_root = 0;
+ prach_config_index = 0;
+ prach_high_speed = "DISABLE";
+ prach_zero_correlation = 1;
+ prach_freq_offset = 2;
+ pucch_delta_shift = 1;
+ pucch_nRB_CQI = 0;
+ pucch_nCS_AN = 0;
+ pucch_n1_AN = 0;
+ pdsch_referenceSignalPower = -27;
+ pdsch_p_b = 0;
+ pusch_n_SB = 1;
+ pusch_enable64QAM = "DISABLE";
+ pusch_hoppingMode = "interSubFrame";
+ pusch_hoppingOffset = 0;
+ pusch_groupHoppingEnabled = "ENABLE";
+ pusch_groupAssignment = 0;
+ pusch_sequenceHoppingEnabled = "DISABLE";
+ pusch_nDMRS1 = 1;
+ phich_duration = "NORMAL";
+ phich_resource = "ONESIXTH";
+ srs_enable = "DISABLE";
+ /* srs_BandwidthConfig =;
+ srs_SubframeConfig =;
+ srs_ackNackST =;
+ srs_MaxUpPts =;*/
+
+ pusch_p0_Nominal = -96;
+ pusch_alpha = "AL1";
+ pucch_p0_Nominal = -104;
+ msg3_delta_Preamble = 6;
+ pucch_deltaF_Format1 = "deltaF2";
+ pucch_deltaF_Format1b = "deltaF3";
+ pucch_deltaF_Format2 = "deltaF0";
+ pucch_deltaF_Format2a = "deltaF0";
+ pucch_deltaF_Format2b = "deltaF0";
+
+ rach_numberOfRA_Preambles = 64;
+ rach_preamblesGroupAConfig = "DISABLE";
+ /*
+ rach_sizeOfRA_PreamblesGroupA = ;
+ rach_messageSizeGroupA = ;
+ rach_messagePowerOffsetGroupB = ;
+ */
+ rach_powerRampingStep = 4;
+ rach_preambleInitialReceivedTargetPower = -108;
+ rach_preambleTransMax = 10;
+ rach_raResponseWindowSize = 10;
+ rach_macContentionResolutionTimer = 48;
+ rach_maxHARQ_Msg3Tx = 4;
+
+ pcch_default_PagingCycle = 128;
+ pcch_nB = "oneT";
+ bcch_modificationPeriodCoeff = 2;
+ ue_TimersAndConstants_t300 = 1000;
+ ue_TimersAndConstants_t301 = 1000;
+ ue_TimersAndConstants_t310 = 1000;
+ ue_TimersAndConstants_t311 = 10000;
+ ue_TimersAndConstants_n310 = 20;
+ ue_TimersAndConstants_n311 = 1;
+ ue_TransmissionMode = 1;
+
+ //Parameters for SIB18
+ rxPool_sc_CP_Len = "normal";
+ rxPool_sc_Period = "sf40";
+ rxPool_data_CP_Len = "normal";
+ rxPool_ResourceConfig_prb_Num = 20;
+ rxPool_ResourceConfig_prb_Start = 5;
+ rxPool_ResourceConfig_prb_End = 44;
+ rxPool_ResourceConfig_offsetIndicator_present = "prSmall";
+ rxPool_ResourceConfig_offsetIndicator_choice = 0;
+ rxPool_ResourceConfig_subframeBitmap_present = "prBs40";
+ rxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "00000000000000000000";
+ rxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
+ rxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
+/* rxPool_dataHoppingConfig_hoppingParameter = 0;
+ rxPool_dataHoppingConfig_numSubbands = "ns1";
+ rxPool_dataHoppingConfig_rbOffset = 0;
+ rxPool_commTxResourceUC-ReqAllowed = "TRUE";
+*/
+ // Parameters for SIB19
+ discRxPool_cp_Len = "normal"
+ discRxPool_discPeriod = "rf32"
+ discRxPool_numRetx = 1;
+ discRxPool_numRepetition = 2;
+ discRxPool_ResourceConfig_prb_Num = 5;
+ discRxPool_ResourceConfig_prb_Start = 3;
+ discRxPool_ResourceConfig_prb_End = 21;
+ discRxPool_ResourceConfig_offsetIndicator_present = "prSmall";
+ discRxPool_ResourceConfig_offsetIndicator_choice = 0;
+ discRxPool_ResourceConfig_subframeBitmap_present = "prBs40";
+ discRxPool_ResourceConfig_subframeBitmap_choice_bs_buf = "f0ffffffff";
+ discRxPool_ResourceConfig_subframeBitmap_choice_bs_size = 5;
+ discRxPool_ResourceConfig_subframeBitmap_choice_bs_bits_unused = 0;
+
+ }
+ );
+
+
+ srb1_parameters :
+ {
+ # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+ timer_poll_retransmit = 80;
+
+ # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+ timer_reordering = 35;
+
+ # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+ timer_status_prohibit = 0;
+
+ # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+ poll_pdu = 4;
+
+ # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+ poll_byte = 99999;
+
+ # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+ max_retx_threshold = 4;
+ }
+
+ # ------- SCTP definitions
+ SCTP :
+ {
+ # Number of streams to use in input/output
+ SCTP_INSTREAMS = 2;
+ SCTP_OUTSTREAMS = 2;
+ };
+
+
+ ////////// MME parameters:
+ mme_ip_address = ( { ipv4 = "CI_MME_IP_ADDR";
+ ipv6 = "192:168:30::17";
+ active = "yes";
+ preference = "ipv4";
+ }
+ );
+
+ NETWORK_INTERFACES :
+ {
+
+ ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1_MME = "CI_ENB_IP_ADDR";
+ ENB_INTERFACE_NAME_FOR_S1U = "eth0";
+ ENB_IPV4_ADDRESS_FOR_S1U = "CI_ENB_IP_ADDR";
+ ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "CI_ENB_IP_ADDR";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
+ };
+ }
+);
+
+MACRLCs = (
+ {
+ num_cc = 1;
+ tr_s_preference = "local_L1";
+ tr_n_preference = "local_RRC";
+ phy_test_mode = 0;
+ puSch10xSnr = 200;
+ puCch10xSnr = 200;
+ }
+);
+
+L1s = (
+ {
+ num_cc = 1;
+ tr_n_preference = "local_mac";
+ }
+);
+
+RUs = (
+ {
+ local_rf = "yes"
+ nb_tx = 1
+ nb_rx = 1
+ att_tx = 0
+ att_rx = 0;
+ bands = [7];
+ max_pdschReferenceSignalPower = -27;
+ max_rxgain = 125;
+ eNB_instances = [0];
+
+ }
+);
+
+NETWORK_CONTROLLER :
+{
+ FLEXRAN_ENABLED = "no";
+ FLEXRAN_INTERFACE_NAME = "lo";
+ FLEXRAN_IPV4_ADDRESS = "127.0.0.1";
+ FLEXRAN_PORT = 2210;
+ FLEXRAN_CACHE = "/mnt/oai_agent_cache";
+ FLEXRAN_AWAIT_RECONF = "no";
+};
+
+ log_config :
+ {
+ global_log_level ="info";
+ global_log_verbosity ="medium";
+ hw_log_level ="info";
+ hw_log_verbosity ="medium";
+ phy_log_level ="info";
+ phy_log_verbosity ="medium";
+ mac_log_level ="info";
+ mac_log_verbosity ="high";
+ rlc_log_level ="info";
+ rlc_log_verbosity ="medium";
+ pdcp_log_level ="info";
+ pdcp_log_verbosity ="medium";
+ rrc_log_level ="info";
+ rrc_log_verbosity ="medium";
+ };
+
diff --git a/ci-scripts/createVM.sh b/ci-scripts/createVM.sh
index 1c3099e843..f972a921ac 100755
--- a/ci-scripts/createVM.sh
+++ b/ci-scripts/createVM.sh
@@ -80,6 +80,7 @@ JOB_NAME=XX
BUILD_ID=XX
VM_NAME=ci-enb-usrp
VM_MEMORY=2048
+VM_CPU=4
while [[ $# -gt 0 ]]
do
@@ -107,6 +108,7 @@ case $key in
;;
-v2)
VM_NAME=ci-basic-sim
+ VM_MEMORY=8192
shift
;;
-v3)
@@ -116,6 +118,7 @@ case $key in
-v4)
VM_NAME=ci-cppcheck
VM_MEMORY=4096
+ VM_CPU=4
shift
;;
-v7)
@@ -134,6 +137,7 @@ case $key in
;;
basic-sim)
VM_NAME=ci-basic-sim
+ VM_MEMORY=8192
;;
phy-sim)
VM_NAME=ci-phy-sim
@@ -141,6 +145,7 @@ case $key in
cppcheck)
VM_NAME=ci-cppcheck
VM_MEMORY=4096
+ VM_CPU=4
;;
enb-ethernet)
VM_NAME=ci-enb-ethernet
@@ -178,11 +183,12 @@ VM_CMDS=${VM_NAME}_cmds.txt
echo "VM_NAME = $VM_NAME"
echo "VM_MEMORY = $VM_MEMORY MBytes"
+echo "VM_CPU = $VM_CPU"
echo "############################################################"
echo "Creating VM ($VM_NAME) on Ubuntu Cloud Image base"
echo "############################################################"
-uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu 4 --unsafe-caching --template ci-scripts/template-host.xml
+uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu $VM_CPU --unsafe-caching --template ci-scripts/template-host.xml
echo "Waiting for VM to be started"
uvt-kvm wait $VM_NAME --insecure
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index e66d25204b..f210fd4518 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -299,6 +299,7 @@ class SSHConnection():
self.command('sed -i -e \'s/mme_ip_address.*$/mme_ip_address = ( { ipv4 = "' + self.EPCIPAddress + '";/\' ' + ci_full_config_file, '\$', 2);
self.command('sed -i -e \'s/ENB_IPV4_ADDRESS_FOR_S1_MME.*$/ENB_IPV4_ADDRESS_FOR_S1_MME = "' + self.eNBIPAddress + '";/\' ' + ci_full_config_file, '\$', 2);
self.command('sed -i -e \'s/ENB_IPV4_ADDRESS_FOR_S1U.*$/ENB_IPV4_ADDRESS_FOR_S1U = "' + self.eNBIPAddress + '";/\' ' + ci_full_config_file, '\$', 2);
+ self.command('sed -i -e \'s/ENB_IPV4_ADDRESS_FOR_X2C.*$/ENB_IPV4_ADDRESS_FOR_X2C = "' + self.eNBIPAddress + '";/\' ' + ci_full_config_file, '\$', 2);
# Launch eNB with the modified config file
self.command('source oaienv', '\$', 5)
self.command('cd cmake_targets', '\$', 5)
diff --git a/ci-scripts/reportTestLocally.sh b/ci-scripts/reportTestLocally.sh
new file mode 100755
index 0000000000..569b62bc3d
--- /dev/null
+++ b/ci-scripts/reportTestLocally.sh
@@ -0,0 +1,582 @@
+#!/bin/bash
+#/*
+# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+# * contributor license agreements. See the NOTICE file distributed with
+# * this work for additional information regarding copyright ownership.
+# * The OpenAirInterface Software Alliance licenses this file to You under
+# * the OAI Public License, Version 1.1 (the "License"); you may not use this file
+# * except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# * http://www.openairinterface.org/?page_id=698
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# *-------------------------------------------------------------------------------
+# * For more information about the OpenAirInterface (OAI) Software Alliance:
+# * contact@openairinterface.org
+# */
+
+function usage {
+ echo "OAI Test Report script"
+ echo " Original Author: Raphael Defosseux"
+ echo ""
+ echo "Usage:"
+ echo "------"
+ echo ""
+ echo " reportTestLocally.sh [OPTIONS]"
+ echo ""
+ echo "Options:"
+ echo "--------"
+ echo ""
+ echo " --help OR -h"
+ echo " Print this help message."
+ echo ""
+ echo "Job Options:"
+ echo "------------"
+ echo ""
+ echo " --git-url #### OR -gu ####"
+ echo " Specify the URL of the GIT Repository."
+ echo ""
+ echo " --job-name #### OR -jn ####"
+ echo " Specify the name of the Jenkins job."
+ echo ""
+ echo " --build-id #### OR -id ####"
+ echo " Specify the build ID of the Jenkins job."
+ echo ""
+ echo " --trigger merge-request OR -mr"
+ echo " --trigger push OR -pu"
+ echo " Specify trigger action of the Jenkins job. Either a merge-request event or a push event."
+ echo ""
+ echo "Merge-Request Options:"
+ echo "----------------------"
+ echo ""
+ echo " --src-branch #### OR -sb ####"
+ echo " Specify the source branch of the merge request."
+ echo ""
+ echo " --src-commit #### OR -sc ####"
+ echo " Specify the source commit ID (SHA-1) of the merge request."
+ echo ""
+ echo " --target-branch #### OR -tb ####"
+ echo " Specify the target branch of the merge request (usually develop)."
+ echo ""
+ echo " --target-commit #### OR -tc ####"
+ echo " Specify the target commit ID (SHA-1) of the merge request."
+ echo ""
+ echo "Push Options:"
+ echo "----------------------"
+ echo ""
+ echo " --branch #### OR -br ####"
+ echo " Specify the branch of the push event."
+ echo ""
+ echo " --commit #### OR -co ####"
+ echo " Specify the commit ID (SHA-1) of the push event."
+ echo ""
+ echo ""
+}
+
+function trigger_usage {
+ echo "OAI Test Report script"
+ echo " Original Author: Raphael Defosseux"
+ echo ""
+ echo " --trigger merge-request OR -mr"
+ echo " --trigger push OR -pu"
+ echo " Specify trigger action of the Jenkins job. Either a merge-request event or a push event."
+ echo ""
+}
+
+jb_checker=0
+mr_checker=0
+pu_checker=0
+MR_TRIG=0
+PU_TRIG=0
+while [[ $# -gt 0 ]]
+do
+key="$1"
+
+case $key in
+ -h|--help)
+ shift
+ usage
+ exit 0
+ ;;
+ -gu|--git-url)
+ GIT_URL="$2"
+ let "jb_checker|=0x1"
+ shift
+ shift
+ ;;
+ -jn|--job-name)
+ JOB_NAME="$2"
+ let "jb_checker|=0x2"
+ shift
+ shift
+ ;;
+ -id|--build-id)
+ BUILD_ID="$2"
+ let "jb_checker|=0x4"
+ shift
+ shift
+ ;;
+ --trigger)
+ TRIG="$2"
+ case $TRIG in
+ merge-request)
+ MR_TRIG=1
+ ;;
+ push)
+ PU_TRIG=1
+ ;;
+ *)
+ echo ""
+ echo "Syntax Error: Invalid Trigger option -> $TRIG"
+ echo ""
+ trigger_usage
+ exit
+ ;;
+ esac
+ let "jb_checker|=0x8"
+ shift
+ shift
+ ;;
+ -mr)
+ MR_TRIG=1
+ let "jb_checker|=0x8"
+ shift
+ ;;
+ -pu)
+ PU_TRIG=1
+ let "jb_checker|=0x8"
+ shift
+ ;;
+ -sb|--src-branch)
+ SOURCE_BRANCH="$2"
+ let "mr_checker|=0x1"
+ shift
+ shift
+ ;;
+ -sc|--src-commit)
+ SOURCE_COMMIT_ID="$2"
+ let "mr_checker|=0x2"
+ shift
+ shift
+ ;;
+ -tb|--target-branch)
+ TARGET_BRANCH="$2"
+ let "mr_checker|=0x4"
+ shift
+ shift
+ ;;
+ -tc|--target-commit)
+ TARGET_COMMIT_ID="$2"
+ let "mr_checker|=0x8"
+ shift
+ shift
+ ;;
+ -br|--branch)
+ SOURCE_BRANCH="$2"
+ let "pu_checker|=0x1"
+ shift
+ shift
+ ;;
+ -co|--commit)
+ SOURCE_COMMIT_ID="$2"
+ let "pu_checker|=0x2"
+ shift
+ shift
+ ;;
+ *)
+ echo "Syntax Error: unknown option: $key"
+ echo ""
+ usage
+ exit 1
+ ;;
+esac
+
+done
+
+if [ $jb_checker -ne 15 ]
+then
+ echo ""
+ echo "Syntax Error: missing job information."
+ # TODO : list missing info
+ echo ""
+ exit 1
+fi
+
+if [ $PU_TRIG -eq 1 ] && [ $MR_TRIG -eq 1 ]
+then
+ echo ""
+ echo "Syntax Error: trigger action incoherent."
+ echo ""
+ trigger_usage
+ exit 1
+fi
+
+if [ $PU_TRIG -eq 1 ]
+then
+ if [ $pu_checker -ne 3 ]
+ then
+ echo ""
+ echo "Syntax Error: missing push information."
+ # TODO : list missing info
+ echo ""
+ exit 1
+ fi
+fi
+
+if [ $MR_TRIG -eq 1 ]
+then
+ if [ $mr_checker -ne 15 ]
+ then
+ echo ""
+ echo "Syntax Error: missing merge-request information."
+ # TODO : list missing info
+ echo ""
+ exit 1
+ fi
+fi
+
+echo "" > ./test_simulator_results.html
+echo "" >> ./test_simulator_results.html
+echo "
" >> ./test_simulator_results.html
+echo " Simulator Results for $JOB_NAME job build #$BUILD_ID" >> ./test_simulator_results.html
+echo " " >> ./test_simulator_results.html
+echo "" >> ./test_simulator_results.html
+echo "" >> ./test_simulator_results.html
+echo " " >> ./test_simulator_results.html
+echo "
" >> ./test_simulator_results.html
+echo " " >> ./test_simulator_results.html
+echo " " >> ./test_simulator_results.html
+echo " | GIT Repository | " >> ./test_simulator_results.html
+echo " $GIT_URL | " >> ./test_simulator_results.html
+echo "
" >> ./test_simulator_results.html
+echo " " >> ./test_simulator_results.html
+echo " | Job Trigger | " >> ./test_simulator_results.html
+if [ $PU_TRIG -eq 1 ]; then echo " Push Event | " >> ./test_simulator_results.html; fi
+if [ $MR_TRIG -eq 1 ]; then echo " Merge-Request | " >> ./test_simulator_results.html; fi
+echo "
" >> ./test_simulator_results.html
+if [ $PU_TRIG -eq 1 ]
+then
+ echo " " >> ./test_simulator_results.html
+ echo " | Branch | " >> ./test_simulator_results.html
+ echo " $SOURCE_BRANCH | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ echo " | Commit ID | " >> ./test_simulator_results.html
+ echo " $SOURCE_COMMIT_ID | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+fi
+if [ $MR_TRIG -eq 1 ]
+then
+ echo " " >> ./test_simulator_results.html
+ echo " | Source Branch | " >> ./test_simulator_results.html
+ echo " $SOURCE_BRANCH | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ echo " | Source Commit ID | " >> ./test_simulator_results.html
+ echo " $SOURCE_COMMIT_ID | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ echo " | Target Branch | " >> ./test_simulator_results.html
+ echo " $TARGET_BRANCH | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ echo " | Target Commit ID | " >> ./test_simulator_results.html
+ echo " $TARGET_COMMIT_ID | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+fi
+echo "
" >> ./test_simulator_results.html
+echo " Test Summary
" >> ./test_simulator_results.html
+
+ARCHIVES_LOC=archives/basic_sim/test
+if [ -d $ARCHIVES_LOC ]
+then
+ echo " Basic Simulator Check
" >> ./test_simulator_results.html
+
+ echo " " >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ echo " | Log File Name | " >> ./test_simulator_results.html
+ echo " Command | " >> ./test_simulator_results.html
+ echo " Status | " >> ./test_simulator_results.html
+ echo " Statistics | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+
+ BW_CASES=(05 10 20)
+ for BW in ${BW_CASES[@]}
+ do
+ ENB_LOG=$ARCHIVES_LOC/enb_${BW}MHz.log
+ UE_LOG=`echo $ENB_LOG | sed -e "s#enb#ue#"`
+ if [ -f $ENB_LOG ] && [ -f $UE_LOG ]
+ then
+ NAME_ENB=`echo $ENB_LOG | sed -e "s#$ARCHIVES_LOC/##"`
+ NAME_UE=`echo $UE_LOG | sed -e "s#$ARCHIVES_LOC/##"`
+ echo " " >> ./test_simulator_results.html
+ echo " | $NAME_ENB --- $NAME_UE | " >> ./test_simulator_results.html
+ echo " N/A | " >> ./test_simulator_results.html
+ NB_ENB_GOT_SYNC=`egrep -c "got sync" $ENB_LOG`
+ NB_UE_GOT_SYNC=`egrep -c "got sync" $UE_LOG`
+ NB_ENB_SYNCED_WITH_UE=`egrep -c "got UE capabilities for UE" $ENB_LOG`
+ if [ $NB_ENB_GOT_SYNC -eq 1 ] && [ $NB_UE_GOT_SYNC -eq 2 ] && [ $NB_ENB_SYNCED_WITH_UE -eq 1 ]
+ then
+ echo " OK | " >> ./test_simulator_results.html
+ else
+ echo " OK | " >> ./test_simulator_results.html
+ fi
+ echo " " >> ./test_simulator_results.html
+ if [ $NB_ENB_GOT_SYNC -eq 1 ]
+ then
+ echo "- eNB --> got sync" >> ./test_simulator_results.html
+ else
+ echo "- eNB NEVER got sync" >> ./test_simulator_results.html
+ fi
+ if [ $NB_UE_GOT_SYNC -eq 2 ]
+ then
+ echo "- UE --> got sync" >> ./test_simulator_results.html
+ else
+ echo "- UE NEVER got sync" >> ./test_simulator_results.html
+ fi
+ if [ $NB_ENB_SYNCED_WITH_UE -eq 1 ]
+ then
+ echo "- UE attached to eNB" >> ./test_simulator_results.html
+ else
+ echo "- UE NEVER attached to eNB" >> ./test_simulator_results.html
+ fi
+ NB_SEGFAULT_ENB=`egrep -i -c "Segmentation Fault" $ENB_LOG`
+ if [ $NB_SEGFAULT_ENB -ne 0 ]
+ then
+ echo "- eNB --> Segmentation Fault" >> ./test_simulator_results.html
+ fi
+ NB_SEGFAULT_UE=`egrep -i -c "Segmentation Fault" $UE_LOG`
+ if [ $NB_SEGFAULT_UE -ne 0 ]
+ then
+ echo "- UE --> Segmentation Fault" >> ./test_simulator_results.html
+ fi
+ NB_ASSERTION_ENB=`egrep -i -c "Assertion" $ENB_LOG`
+ if [ $NB_ASSERTION_ENB -ne 0 ]
+ then
+ echo "- eNB --> Assertion" >> ./test_simulator_results.html
+ awk 'BEGIN{assertion=10}{if(assertion < 3){print " " $0; assertion++};if ($0 ~/Assertion/){print " " $0;assertion=1}}END{}' $ENB_LOG >> ./test_simulator_results.html
+ fi
+ NB_ASSERTION_UE=`egrep -i -c "Assertion" $UE_LOG`
+ if [ $NB_ASSERTION_UE -ne 0 ]
+ then
+ echo "- eNB --> Assertion" >> ./test_simulator_results.html
+ awk 'BEGIN{assertion=10}{if(assertion < 3){print " " $0; assertion++};if ($0 ~/Assertion/){print " " $0;assertion=1}}END{}' $UE_LOG >> ./test_simulator_results.html
+ fi
+ echo " | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ fi
+ PING_CASE=$ARCHIVES_LOC/${BW}MHz_ping_ue.txt
+ if [ -f $PING_CASE ]
+ then
+ echo " " >> ./test_simulator_results.html
+ NAME=`echo $PING_CASE | sed -e "s#$ARCHIVES_LOC/##"`
+ echo " | $NAME | " >> ./test_simulator_results.html
+ CMD=`egrep "COMMAND IS" $PING_CASE | sed -e "s#COMMAND IS: ##"`
+ echo " $CMD | " >> ./test_simulator_results.html
+ FILE_COMPLETE=`egrep -c "ping statistics" $PING_CASE`
+ if [ $FILE_COMPLETE -eq 0 ]
+ then
+ echo " KO | " >> ./test_simulator_results.html
+ echo " N/A | " >> ./test_simulator_results.html
+ else
+ NB_TR_PACKETS=`egrep "packets transmitted" $PING_CASE | sed -e "s# packets transmitted.*##"`
+ NB_RC_PACKETS=`egrep "packets transmitted" $PING_CASE | sed -e "s#^.*packets transmitted, ##" -e "s# received,.*##"`
+ if [ $NB_TR_PACKETS -eq $NB_RC_PACKETS ]
+ then
+ echo " OK | " >> ./test_simulator_results.html
+ else
+ echo " KO | " >> ./test_simulator_results.html
+ fi
+ echo " " >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ STATS=`egrep "packets transmitted" $PING_CASE | sed -e "s#^.*received, ##" -e "s#, time.*##" -e "s# packet loss##"`
+ echo "Packet Loss : $STATS" >> ./test_simulator_results.html
+ RTTMIN=`egrep "rtt min" $PING_CASE | awk '{split($4,a,"/"); print a[1] " " $5}'`
+ echo "RTT Minimal : $RTTMIN" >> ./test_simulator_results.html
+ RTTAVG=`egrep "rtt min" $PING_CASE | awk '{split($4,a,"/"); print a[2] " " $5}'`
+ echo "RTT Average : $RTTAVG" >> ./test_simulator_results.html
+ RTTMAX=`egrep "rtt min" $PING_CASE | awk '{split($4,a,"/"); print a[3] " " $5}'`
+ echo "RTT Maximal : $RTTMAX" >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ echo " | " >> ./test_simulator_results.html
+ fi
+ echo "
" >> ./test_simulator_results.html
+ fi
+
+ if [ -f $ARCHIVES_LOC/${BW}*iperf*dl*client*txt ]
+ then
+ IPERF_TESTS=`ls $ARCHIVES_LOC/${BW}*iperf*client*txt`
+ else
+ echo "There are no iperf files"
+ IPERF_TESTS=""
+ fi
+ for IPERF_CASE in $IPERF_TESTS
+ do
+ echo " " >> ./test_simulator_results.html
+ NAME=`echo $IPERF_CASE | sed -e "s#$ARCHIVES_LOC/##"`
+ echo " | $NAME | " >> ./test_simulator_results.html
+ CMD=`egrep "COMMAND IS" $IPERF_CASE | sed -e "s#COMMAND IS: ##"`
+ echo " $CMD | " >> ./test_simulator_results.html
+ REQ_BITRATE=`echo $CMD | sed -e "s#^.*-b ##" -e "s#-i 1.*##"`
+ if [[ $REQ_BITRATE =~ .*K.* ]]
+ then
+ REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#K##"`
+ FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000.0" | bc -l`
+ fi
+ if [[ $REQ_BITRATE =~ .*M.* ]]
+ then
+ REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#M##"`
+ FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000000.0" | bc -l`
+ fi
+ if [[ $REQ_BITRATE =~ .*G.* ]]
+ then
+ REQ_BITRATE=`echo $REQ_BITRATE | sed -e "s#G##"`
+ FLOAT_REQ_BITRATE=`echo "$REQ_BITRATE * 1000000000.0" | bc -l`
+ fi
+ FILE_COMPLETE=`egrep -c "Server Report" $IPERF_CASE`
+ if [ $FILE_COMPLETE -eq 0 ]
+ then
+ echo " KO | " >> ./test_simulator_results.html
+ SERVER_FILE=`echo $IPERF_CASE | sed -e "s#client#server#"`
+ FLOAT_EFF_BITRATE=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*Bytes *##" -e "s#sec *.*#sec#" | awk 'BEGIN{s=0;n=0}{n++;if ($2 ~/Mbits/){a = $1 * 1000000};if ($2 ~/Kbits/){a = $1 * 1000};s=s+a}END{br=s/n; printf "%.0f", br}'`
+ EFFECTIVE_BITRATE=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*Bytes *##" -e "s#sec *.*#sec#" | awk 'BEGIN{s=0;n=0}{n++;if ($2 ~/Mbits/){a = $1 * 1000000};if ($2 ~/Kbits/){a = $1 * 1000};s=s+a}END{br=s/n; if(br>1000000){printf "%.2f MBits/sec", br/1000000}}'`
+ PERF=`echo "100 * $FLOAT_EFF_BITRATE / $FLOAT_REQ_BITRATE" | bc -l | awk '{printf "%.2f", $0}'`
+ JITTER=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*/sec *##" -e "s# *ms.*##" | awk 'BEGIN{s=0;n=0}{n++;s+=$1}END{jitter=s/n; printf "%.3f ms", jitter}'`
+ PACKETLOSS_NOSIGN=`grep --color=never sec $SERVER_FILE | sed -e "s#^.*(##" -e "s#%.*##" | awk 'BEGIN{s=0;n=0}{n++;s+=$1}END{per=s/n; printf "%.1f", per}'`
+ PACKETLOSS=`echo "${PACKETLOSS_NOSIGN}%"`
+ else
+ EFFECTIVE_BITRATE=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"`
+ if [[ $EFFECTIVE_BITRATE =~ .*Kbits/sec.* ]]
+ then
+ EFFECTIVE_BITRATE=`echo $EFFECTIVE_BITRATE | sed -e "s# *Kbits/sec.*##"`
+ FLOAT_EFF_BITRATE=`echo "$EFFECTIVE_BITRATE * 1000" | bc -l`
+ fi
+ if [[ $EFFECTIVE_BITRATE =~ .*Mbits/sec.* ]]
+ then
+ EFFECTIVE_BITRATE=`echo $EFFECTIVE_BITRATE | sed -e "s# *Mbits/sec.*##"`
+ FLOAT_EFF_BITRATE=`echo "$EFFECTIVE_BITRATE * 1000000" | bc -l`
+ fi
+ if [[ $EFFECTIVE_BITRATE =~ .*Gbits/sec.* ]]
+ then
+ EFFECTIVE_BITRATE=`echo $EFFECTIVE_BITRATE | sed -e "s# *Gbits/sec.*##"`
+ FLOAT_EFF_BITRATE=`echo "$EFFECTIVE_BITRATE * 1000000000" | bc -l`
+ fi
+ PERF=`echo "100 * $FLOAT_EFF_BITRATE / $FLOAT_REQ_BITRATE" | bc -l | awk '{printf "%.2f", $0}'`
+ PERF_INT=`echo "100 * $FLOAT_EFF_BITRATE / $FLOAT_REQ_BITRATE" | bc -l | awk '{printf "%.0f", $0}'`
+ if [[ $PERF_INT -lt 90 ]]
+ then
+ echo " KO | " >> ./test_simulator_results.html
+ else
+ echo " OK | " >> ./test_simulator_results.html
+ fi
+ EFFECTIVE_BITRATE=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"`
+ JITTER=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*Mbits/sec *##" -e "s#ms.*#ms#"`
+ PACKETLOSS=`tail -n3 $IPERF_CASE | egrep "Mbits/sec" | sed -e "s#^.*(##" -e "s#).*##"`
+ fi
+ echo " " >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ echo "Bitrate : $EFFECTIVE_BITRATE" >> ./test_simulator_results.html
+ echo "Bitrate Perf : $PERF %" >> ./test_simulator_results.html
+ echo "Jitter : $JITTER" >> ./test_simulator_results.html
+ echo "Packet Loss : $PACKETLOSS" >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ echo " | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ done
+ done
+
+ echo "
" >> ./test_simulator_results.html
+fi
+
+ARCHIVES_LOC=archives/phy_sim/test
+if [ -d $ARCHIVES_LOC ]
+then
+ echo " Physical Simulators Check
" >> ./test_simulator_results.html
+
+ echo " " >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ echo " | Log File Name | " >> ./test_simulator_results.html
+ echo " Nb Tests | " >> ./test_simulator_results.html
+ echo " Nb Errors | " >> ./test_simulator_results.html
+ echo " Nb Failures | " >> ./test_simulator_results.html
+ echo " Nb Failures | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+
+ XML_TESTS=`ls $ARCHIVES_LOC/*xml`
+ for XML_FILE in $XML_TESTS
+ do
+ echo " " >> ./test_simulator_results.html
+ NAME=`echo $XML_FILE | sed -e "s#$ARCHIVES_LOC/##"`
+ NB_TESTS=`egrep "testsuite errors" $XML_FILE | sed -e "s#^.*tests='##" -e "s#' *time=.*##"`
+ NB_ERRORS=`egrep "testsuite errors" $XML_FILE | sed -e "s#^.*errors='##" -e "s#' *failures=.*##"`
+ NB_FAILURES=`egrep "testsuite errors" $XML_FILE | sed -e "s#^.*failures='##" -e "s#' *hostname=.*##"`
+ NB_SKIPPED=`egrep "testsuite errors" $XML_FILE | sed -e "s#^.*skipped='##" -e "s#' *tests=.*##"`
+ if [ $NB_ERRORS -eq 0 ] && [ $NB_FAILURES -eq 0 ]
+ then
+ echo " | $NAME | " >> ./test_simulator_results.html
+ else
+ echo " $NAME | " >> ./test_simulator_results.html
+ fi
+ echo " $NB_TESTS | " >> ./test_simulator_results.html
+ echo " $NB_ERRORS | " >> ./test_simulator_results.html
+ echo " $NB_FAILURES | " >> ./test_simulator_results.html
+ echo " $NB_SKIPPED | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ done
+
+ echo "
" >> ./test_simulator_results.html
+
+ echo " Details
" >> ./test_simulator_results.html
+ for XML_FILE in $XML_TESTS
+ do
+ echo " " >> ./test_simulator_results.html
+ echo " " >> ./test_simulator_results.html
+ echo " | Test Name | " >> ./test_simulator_results.html
+ echo " Description | " >> ./test_simulator_results.html
+ echo " Result | " >> ./test_simulator_results.html
+ echo " Time | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ TESTCASES_LIST=`sed -e "s# #@#g" $XML_FILE | grep testcase`
+ for TESTCASE in $TESTCASES_LIST
+ do
+ echo " " >> ./test_simulator_results.html
+ NAME=`echo $TESTCASE | sed -e "s#^.*name='##" -e "s#'@description=.*##" | sed -e "s#@# #g"`
+ echo " | $NAME | " >> ./test_simulator_results.html
+ DESC=`echo $TESTCASE | sed -e "s#^.*description='##" -e "s#'@Run_result=.*##" | sed -e "s#@# #g"`
+ echo " $DESC | " >> ./test_simulator_results.html
+ RESULT=`echo $TESTCASE | sed -e "s#^.*RESULT='##" -e "s#'.*##" | sed -e "s#@# #g"`
+ if [[ $RESULT =~ .*PASS.* ]]
+ then
+ echo " $RESULT | " >> ./test_simulator_results.html
+ else
+ echo " $RESULT | " >> ./test_simulator_results.html
+ fi
+ TIME=`echo $TESTCASE | sed -e "s#^.*time='##" -e "s#'@RESULT=.*##" | sed -e "s#@# #g"`
+ echo " $TIME | " >> ./test_simulator_results.html
+ echo "
" >> ./test_simulator_results.html
+ done
+ echo "
" >> ./test_simulator_results.html
+ done
+fi
+
+echo "" >> ./test_simulator_results.html
+echo "" >> ./test_simulator_results.html
+
+exit 0
diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh
index 68438758f5..6abdf35507 100755
--- a/ci-scripts/runTestOnVM.sh
+++ b/ci-scripts/runTestOnVM.sh
@@ -70,6 +70,196 @@ function variant_usage {
echo ""
}
+function start_basic_sim_enb {
+ local LOC_VM_IP_ADDR=$2
+ local LOC_EPC_IP_ADDR=$3
+ local LOC_LOG_FILE=$4
+ local LOC_NB_RBS=$5
+ echo "cd /home/ubuntu/tmp" > $1
+ echo "echo \"sudo apt-get --yes --quiet install daemon \"" >> $1
+ echo "sudo apt-get --yes install daemon >> /home/ubuntu/tmp/cmake_targets/log/daemon-install.txt 2>&1" >> $1
+ echo "echo \"export ENODEB=1\"" >> $1
+ echo "export ENODEB=1" >> $1
+ echo "echo \"source oaienv\"" >> $1
+ echo "source oaienv" >> $1
+ echo "cd ci-scripts/conf_files/" >> $1
+ echo "cp lte-basic-sim.conf ci-lte-basic-sim.conf" >> $1
+ echo "sed -i -e 's#N_RB_DL.*=.*;#N_RB_DL = $LOC_NB_RBS;#' -e 's#CI_MME_IP_ADDR#$LOC_EPC_IP_ADDR#' -e 's#CI_ENB_IP_ADDR#$LOC_VM_IP_ADDR#' ci-lte-basic-sim.conf" >> $1
+ echo "echo \"grep N_RB_DL ci-lte-basic-sim.conf\"" >> $1
+ echo "grep N_RB_DL ci-lte-basic-sim.conf | sed -e 's#N_RB_DL.*=#N_RB_DL =#'" >> $1
+ echo "echo \"cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/\"" >> $1
+ echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/enb/" >> $1
+ echo "echo \"./lte-softmodem -O /home/ubuntu/tmp/ci-scripts/conf_files/ci-lte-basic-sim.conf\" > ./my-lte-softmodem-run.sh " >> $1
+ echo "chmod 775 ./my-lte-softmodem-run.sh" >> $1
+ echo "cat ./my-lte-softmodem-run.sh" >> $1
+ echo "sudo -E daemon --inherit --unsafe --name=enb_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/enb -o /home/ubuntu/tmp/cmake_targets/log/$LOC_LOG_FILE ./my-lte-softmodem-run.sh" >> $1
+
+ ssh -o StrictHostKeyChecking=no ubuntu@$LOC_VM_IP_ADDR < $1
+ sleep 60
+ rm $1
+}
+
+function start_basic_sim_ue {
+ local LOC_UE_LOG_FILE=$3
+ local LOC_NB_RBS=$4
+ echo "echo \"cd /home/ubuntu/tmp/cmake_targets/basic_simulator/ue\"" > $1
+ echo "cd /home/ubuntu/tmp/cmake_targets/basic_simulator/ue" > $1
+ echo "echo \"./lte-uesoftmodem -C 2680000000 -r $LOC_NB_RBS --ue-rxgain 140\" > ./my-lte-uesoftmodem-run.sh" >> $1
+ echo "chmod 775 ./my-lte-uesoftmodem-run.sh" >> $1
+ echo "cat ./my-lte-uesoftmodem-run.sh" >> $1
+ echo "sudo -E daemon --inherit --unsafe --name=ue_daemon --chdir=/home/ubuntu/tmp/cmake_targets/basic_simulator/ue -o /home/ubuntu/tmp/cmake_targets/log/$LOC_UE_LOG_FILE ./my-lte-uesoftmodem-run.sh" >> $1
+
+ ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
+ rm $1
+
+ local i="0"
+ echo "ifconfig oip1 | egrep -c \"inet addr\"" > $1
+ while [ $i -lt 40 ]
+ do
+ sleep 5
+ CONNECTED=`ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1`
+ if [ $CONNECTED -eq 1 ]
+ then
+ i="100"
+ else
+ i=$[$i+1]
+ fi
+ done
+ rm $1
+ if [ $i -lt 50 ]
+ then
+ UE_SYNC=0
+ else
+ UE_SYNC=1
+ fi
+}
+
+function get_ue_ip_addr {
+ echo "ifconfig oip1 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $1
+ UE_IP_ADDR=`ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1`
+ echo "UE IP Address for EPC is : $UE_IP_ADDR"
+ rm $1
+}
+
+function ping_ue_ip_addr {
+ echo "echo \"ping -c 20 $3\"" > $1
+ echo "echo \"COMMAND IS: ping -c 20 $3\" > $4" > $1
+ echo "ping -c 20 $UE_IP_ADDR | tee -a $4" >> $1
+ ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
+ rm -f $1
+}
+
+function check_ping_result {
+ local LOC_PING_FILE=$1
+ local LOC_NB_PINGS=$2
+ if [ -f $LOC_PING_FILE ]
+ then
+ local FILE_COMPLETE=`egrep -c "ping statistics" $LOC_PING_FILE`
+ if [ $FILE_COMPLETE -eq 0 ]
+ then
+ PING_STATUS=-1
+ else
+ local ALL_PACKET_RECEIVED=`egrep -c "$LOC_NB_PINGS received" $LOC_PING_FILE`
+ if [ $ALL_PACKET_RECEIVED -eq 1 ]
+ then
+ echo "got all ping packets"
+ else
+ PING_STATUS=-1
+ fi
+ fi
+ else
+ PING_STATUS=-1
+ fi
+}
+
+function iperf_dl {
+ local REQ_BANDWIDTH=$5
+ local BASE_LOG_FILE=$6
+ echo "echo \"iperf -u -s -i 1\"" > $1
+ echo "echo \"COMMAND IS: iperf -u -s -i 1\" > tmp/cmake_targets/log/${BASE_LOG_FILE}_server.txt" > $1
+ echo "nohup iperf -u -s -i 1 >> tmp/cmake_targets/log/${BASE_LOG_FILE}_server.txt &" >> $1
+ ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
+ rm $1
+
+ echo "echo \"iperf -c $UE_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1\"" > $3
+ echo "echo \"COMMAND IS: iperf -c $UE_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1\" > ${BASE_LOG_FILE}_client.txt" > $3
+ echo "iperf -c $UE_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1 | tee -a ${BASE_LOG_FILE}_client.txt" >> $3
+ ssh -o StrictHostKeyChecking=no ubuntu@$4 < $3
+ rm -f $3
+
+ echo "killall --signal SIGKILL iperf" >> $1
+ ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
+ rm $1
+}
+
+function iperf_ul {
+ local REQ_BANDWIDTH=$5
+ local BASE_LOG_FILE=$6
+ echo "echo \"iperf -u -s -i 1\"" > $3
+ echo "echo \"COMMAND IS: iperf -u -s -i 1\" > ${BASE_LOG_FILE}_server.txt" > $3
+ echo "nohup iperf -u -s -i 1 >> ${BASE_LOG_FILE}_server.txt &" >> $3
+ ssh -o StrictHostKeyChecking=no ubuntu@$4 < $3
+ rm $3
+
+ echo "echo \"iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1\"" > $1
+ echo "echo \"COMMAND IS: iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1\" > /home/ubuntu/tmp/cmake_targets/log/${BASE_LOG_FILE}_client.txt" > $1
+ echo "iperf -c $REAL_EPC_IP_ADDR -u -t 30 -b ${REQ_BANDWIDTH}M -i 1 | tee -a /home/ubuntu/tmp/cmake_targets/log/${BASE_LOG_FILE}_client.txt" >> $1
+ ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
+ rm -f $1
+
+ echo "killall --signal SIGKILL iperf" >> $3
+ ssh -o StrictHostKeyChecking=no ubuntu@$4 < $3
+ rm $3
+}
+
+function check_iperf {
+ local LOC_BASE_LOG=$1
+ local LOC_REQ_BW=$2
+ local LOC_REQ_BW_MINUS_ONE=`echo "$LOC_REQ_BW - 1" | bc -l`
+ if [ -f ${LOC_BASE_LOG}_client.txt ]
+ then
+ local FILE_COMPLETE=`egrep -c "Server Report" ${LOC_BASE_LOG}_client.txt`
+ if [ $FILE_COMPLETE -eq 0 ]
+ then
+ IPERF_STATUS=-1
+ else
+ local EFFECTIVE_BANDWIDTH=`tail -n3 ${LOC_BASE_LOG}_client.txt | egrep "Mbits/sec" | sed -e "s#^.*MBytes *##" -e "s#sec.*#sec#"`
+ if [[ $EFFECTIVE_BANDWIDTH =~ .*${LOC_REQ_BW}.*Mbits.* ]] || [[ $EFFECTIVE_BANDWIDTH =~ .*${LOC_REQ_BW_MINUS_ONE}.*Mbits.* ]]
+ then
+ echo "got requested DL bandwidth: $EFFECTIVE_BANDWIDTH"
+ else
+ IPERF_STATUS=-1
+ fi
+ fi
+ else
+ IPERF_STATUS=-1
+ fi
+}
+
+function terminate_enb_ue_basic_sim {
+ echo "echo \"sudo daemon --name=enb_daemon --stop\"" > $1
+ echo "sudo daemon --name=enb_daemon --stop" >> $1
+ echo "echo \"sudo daemon --name=ue_daemon --stop\"" >> $1
+ echo "sudo daemon --name=ue_daemon --stop" >> $1
+ echo "echo \"sudo killall --signal SIGKILL lte-softmodem\"" >> $1
+ echo "sudo killall --signal SIGKILL lte-softmodem" >> $1
+ ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
+ rm -f $1
+}
+
+function terminate_ltebox_epc {
+ echo "echo \"cd /opt/ltebox/tools\"" > $1
+ echo "cd /opt/ltebox/tools" >> $1
+ echo "echo \"sudo ./stop_ltebox\"" >> $1
+ echo "sudo ./stop_ltebox" >> $1
+ echo "echo \"sudo daemon --name=simulated_hss --stop\"" >> $1
+ echo "sudo daemon --name=simulated_hss --stop" >> $1
+ echo "echo \"sudo killall --signal SIGKILL hss_sim\"" >> $1
+ echo "sudo killall --signal SIGKILL hss_sim" >> $1
+ ssh -o StrictHostKeyChecking=no ubuntu@$2 < $1
+ rm $1
+}
+
if [ $# -lt 1 ] || [ $# -gt 9 ]
then
echo "Syntax Error: not the correct number of arguments"
@@ -122,6 +312,8 @@ case $key in
;;
-v2)
VM_NAME=ci-basic-sim
+ RUN_OPTIONS="complex"
+ ARCHIVES_LOC=basic_sim/test
shift
;;
-v3)
@@ -150,6 +342,8 @@ case $key in
;;
basic-sim)
VM_NAME=ci-basic-sim
+ RUN_OPTIONS="complex"
+ ARCHIVES_LOC=basic_sim/test
;;
phy-sim)
VM_NAME=ci-phy-sim
@@ -210,8 +404,11 @@ echo "$VM_NAME has for IP addr = $VM_IP_ADDR"
if [ "$RUN_OPTIONS" == "none" ]
then
echo "No run on VM testing for this variant currently"
-else
+ exit $STATUS
+fi
+if [[ $RUN_OPTIONS =~ .*run_exec_autotests.* ]]
+then
echo "############################################################"
echo "Running test script on VM ($VM_NAME)"
echo "############################################################"
@@ -271,7 +468,7 @@ else
rm -f $VM_CMDS
echo "############################################################"
- echo "Checking build status"
+ echo "Checking run status"
echo "############################################################"
LOG_FILES=`ls $ARCHIVES_LOC/results_autotests*.xml`
@@ -306,13 +503,346 @@ else
if [ $NB_RUNS -eq 0 ]; then STATUS=-1; fi
if [ $NB_FAILURES -ne 0 ]; then STATUS=-1; fi
- if [ $STATUS -eq 0 ]
+fi
+
+if [[ "$RUN_OPTIONS" == "complex" ]] && [[ $VM_NAME =~ .*-basic-sim.* ]]
+then
+ PING_STATUS=0
+ IPERF_STATUS=0
+ if [ -d $ARCHIVES_LOC ]
then
- echo "STATUS seems OK"
- else
- echo "STATUS failed?"
+ rm -Rf $ARCHIVES_LOC
fi
+ mkdir --parents $ARCHIVES_LOC
+
+ EPC_VM_NAME=`echo $VM_NAME | sed -e "s#basic-sim#epc#"`
+ LTEBOX=0
+ if [ -d /opt/ltebox-archives/ ]
+ then
+ # Checking if all ltebox archives are available to run ltebx epc on a brand new VM
+ if [ -f /opt/ltebox-archives/ltebox_2.2.70_16_04_amd64.deb ] && [ -f /opt/ltebox-archives/etc-conf.zip ] && [ -f /opt/ltebox-archives/hss-sim.zip ]
+ then
+ echo "############################################################"
+ echo "Test EPC on VM ($EPC_VM_NAME) will be using ltebox"
+ echo "############################################################"
+ LTEBOX=1
+ fi
+ fi
+ # Here we could have other types of EPC detection
+
+ # Do we need to start the EPC VM
+ EPC_VM_CMDS=`echo $VM_CMDS | sed -e "s#cmds#epc-cmds#"`
+ echo "EPC_VM_CMD_FILE = $EPC_VM_CMDS"
+ IS_EPC_VM_ALIVE=`uvt-kvm list | grep -c $EPC_VM_NAME`
+ if [ $IS_EPC_VM_ALIVE -eq 0 ]
+ then
+ echo "############################################################"
+ echo "Creating test EPC VM ($EPC_VM_NAME) on Ubuntu Cloud Image base"
+ echo "############################################################"
+ uvt-kvm create $EPC_VM_NAME release=xenial --unsafe-caching
+ fi
+
+ uvt-kvm wait $EPC_VM_NAME --insecure
+ EPC_VM_IP_ADDR=`uvt-kvm ip $EPC_VM_NAME`
+ echo "$EPC_VM_NAME has for IP addr = $EPC_VM_IP_ADDR"
+ scp -o StrictHostKeyChecking=no /etc/apt/apt.conf.d/01proxy ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu
+
+ # ltebox specific actions (install and start)
+ LTE_BOX_TO_INSTALL=1
+ if [ $LTEBOX -eq 1 ]
+ then
+ echo "ls -ls /opt/ltebox/tools/start_ltebox" > $EPC_VM_CMDS
+ RESPONSE=`ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS`
+ NB_EXES=`echo $RESPONSE | grep -c ltebox`
+ if [ $NB_EXES -eq 1 ]; then LTE_BOX_TO_INSTALL=0; fi
+ fi
+
+ if [ $LTEBOX -eq 1 ] && [ $LTE_BOX_TO_INSTALL -eq 1 ]
+ then
+ echo "############################################################"
+ echo "Copying ltebox archives into EPC VM ($EPC_VM_NAME)"
+ echo "############################################################"
+ scp -o StrictHostKeyChecking=no /opt/ltebox-archives/ltebox_2.2.70_16_04_amd64.deb ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu
+ scp -o StrictHostKeyChecking=no /opt/ltebox-archives/etc-conf.zip ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu
+ scp -o StrictHostKeyChecking=no /opt/ltebox-archives/hss-sim.zip ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu
+
+ echo "############################################################"
+ echo "Install EPC on EPC VM ($EPC_VM_NAME)"
+ echo "############################################################"
+ echo "sudo cp 01proxy /etc/apt/apt.conf.d/" > $EPC_VM_CMDS
+ echo "touch /home/ubuntu/.hushlogin" >> $EPC_VM_CMDS
+ echo "echo \"sudo apt-get --yes --quiet install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev daemon iperf\"" >> $EPC_VM_CMDS
+ echo "sudo apt-get update > zip-install.txt 2>&1" >> $EPC_VM_CMDS
+ echo "sudo apt-get --yes install zip openjdk-8-jre libconfuse-dev libreadline-dev liblog4c-dev libgcrypt-dev libsctp-dev python2.7 python2.7-dev daemon iperf >> zip-install.txt 2>&1" >> $EPC_VM_CMDS
+
+ # Installing HSS
+ echo "echo \"cd /opt\"" >> $EPC_VM_CMDS
+ echo "cd /opt" >> $EPC_VM_CMDS
+ echo "echo \"sudo unzip -qq /home/ubuntu/hss-sim.zip\"" >> $EPC_VM_CMDS
+ echo "sudo unzip -qq /home/ubuntu/hss-sim.zip" >> $EPC_VM_CMDS
+ echo "echo \"cd /opt/hss_sim0609\"" >> $EPC_VM_CMDS
+ echo "cd /opt/hss_sim0609" >> $EPC_VM_CMDS
+
+ # Installing ltebox
+ echo "echo \"cd /home/ubuntu\"" >> $EPC_VM_CMDS
+ echo "cd /home/ubuntu" >> $EPC_VM_CMDS
+ echo "echo \"sudo dpkg -i ltebox_2.2.70_16_04_amd64.deb \"" >> $EPC_VM_CMDS
+ echo "sudo dpkg -i ltebox_2.2.70_16_04_amd64.deb >> zip-install.txt 2>&1" >> $EPC_VM_CMDS
+
+ echo "echo \"cd /opt/ltebox/etc/\"" >> $EPC_VM_CMDS
+ echo "cd /opt/ltebox/etc/" >> $EPC_VM_CMDS
+ echo "echo \"sudo unzip -qq -o /home/ubuntu/etc-conf.zip\"" >> $EPC_VM_CMDS
+ echo "sudo unzip -qq -o /home/ubuntu/etc-conf.zip" >> $EPC_VM_CMDS
+ echo "sudo sed -i -e 's#EPC_VM_IP_ADDRESS#$EPC_VM_IP_ADDR#' gw.conf" >> $EPC_VM_CMDS
+ echo "sudo sed -i -e 's#EPC_VM_IP_ADDRESS#$EPC_VM_IP_ADDR#' mme.conf" >> $EPC_VM_CMDS
+ fi
+
+ # Starting EPC
+ if [ $LTEBOX -eq 1 ]
+ then
+ echo "############################################################"
+ echo "Start EPC on EPC VM ($EPC_VM_NAME)"
+ echo "############################################################"
+ echo "echo \"cd /opt/hss_sim0609\"" >> $EPC_VM_CMDS
+ echo "cd /opt/hss_sim0609" >> $EPC_VM_CMDS
+ echo "echo \"sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real\"" >> $EPC_VM_CMDS
+ echo "sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real" >> $EPC_VM_CMDS
+
+ echo "echo \"cd /opt/ltebox/tools/\"" >> $EPC_VM_CMDS
+ echo "cd /opt/ltebox/tools/" >> $EPC_VM_CMDS
+ echo "echo \"sudo ./start_ltebox\"" >> $EPC_VM_CMDS
+ echo "nohup sudo ./start_ltebox > /home/ubuntu/ltebox.txt" >> $EPC_VM_CMDS
+
+ ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS
+ rm -f $EPC_VM_CMDS
+
+ # We may have some adaptation to do
+ if [ -f /opt/ltebox-archives/adapt_ue_sim.txt ]
+ then
+ echo "############################################################"
+ echo "Doing some adaptation on UE side"
+ echo "############################################################"
+ ssh -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR < /opt/ltebox-archives/adapt_ue_sim.txt
+ fi
+
+ i="0"
+ echo "ifconfig tun5 | egrep -c \"inet addr\"" > $EPC_VM_CMDS
+ while [ $i -lt 10 ]
+ do
+ sleep 2
+ CONNECTED=`ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS`
+ if [ $CONNECTED -eq 1 ]
+ then
+ i="100"
+ else
+ i=$[$i+1]
+ fi
+ done
+ rm $EPC_VM_CMDS
+ if [ $i -lt 50 ]
+ then
+ echo "Problem w/ starting ltebox EPC"
+ exit -1
+ fi
+ fi
+
+ # HERE ADD ANY INSTALL ACTIONS FOR ANOTHER EPC
+
+ # Retrieve EPC real IP address
+ if [ $LTEBOX -eq 1 ]
+ then
+ # in our configuration file, we are using pool 5
+ echo "ifconfig tun5 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $EPC_VM_CMDS
+ REAL_EPC_IP_ADDR=`ssh -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR < $EPC_VM_CMDS`
+ echo "EPC IP Address is : $REAL_EPC_IP_ADDR"
+ rm $EPC_VM_CMDS
+ fi
+
+ echo "############################################################"
+ echo "Starting the eNB at 5MHz"
+ echo "############################################################"
+ CURRENT_ENB_LOG_FILE=enb_05MHz.log
+ start_basic_sim_enb $VM_CMDS $VM_IP_ADDR $EPC_VM_IP_ADDR $CURRENT_ENB_LOG_FILE 25
+
+ echo "############################################################"
+ echo "Starting the UE at 5MHz"
+ echo "############################################################"
+ CURRENT_UE_LOG_FILE=ue_05MHz.log
+ start_basic_sim_ue $VM_CMDS $VM_IP_ADDR $CURRENT_UE_LOG_FILE 25
+ if [ $UE_SYNC -eq 0 ]
+ then
+ echo "Problem w/ eNB and UE not syncing"
+ terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
+ terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR
+ exit -1
+ fi
+ get_ue_ip_addr $VM_CMDS $VM_IP_ADDR
+
+ echo "############################################################"
+ echo "Pinging the UE"
+ echo "############################################################"
+ ping_ue_ip_addr $EPC_VM_CMDS $EPC_VM_IP_ADDR $UE_IP_ADDR 05MHz_ping_ue.txt
+ scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/05MHz_ping_ue.txt $ARCHIVES_LOC
+ check_ping_result $ARCHIVES_LOC/05MHz_ping_ue.txt 20
+
+ echo "############################################################"
+ echo "Iperf DL"
+ echo "############################################################"
+ CURR_IPERF_LOG_BASE=05MHz_iperf_dl
+ iperf_dl $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 15 $CURR_IPERF_LOG_BASE
+ scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC
+ check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 15
+
+ echo "############################################################"
+ echo "Iperf UL"
+ echo "############################################################"
+ CURR_IPERF_LOG_BASE=05MHz_iperf_ul
+ iperf_ul $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 2 $CURR_IPERF_LOG_BASE
+ scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC
+ check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 2
+
+ echo "############################################################"
+ echo "Terminate enb/ue simulators"
+ echo "############################################################"
+ terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
+
+ echo "############################################################"
+ echo "Starting the eNB at 10MHz"
+ echo "############################################################"
+ CURRENT_ENB_LOG_FILE=enb_10MHz.log
+ start_basic_sim_enb $VM_CMDS $VM_IP_ADDR $EPC_VM_IP_ADDR $CURRENT_ENB_LOG_FILE 50
+
+ echo "############################################################"
+ echo "Starting the UE at 10MHz"
+ echo "############################################################"
+ CURRENT_UE_LOG_FILE=ue_10MHz.log
+ start_basic_sim_ue $VM_CMDS $VM_IP_ADDR $CURRENT_UE_LOG_FILE 50
+ if [ $UE_SYNC -eq 0 ]
+ then
+ echo "Problem w/ eNB and UE not syncing"
+ terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
+ terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR
+ exit -1
+ fi
+ get_ue_ip_addr $VM_CMDS $VM_IP_ADDR
+
+ echo "############################################################"
+ echo "Pinging the UE"
+ echo "############################################################"
+ ping_ue_ip_addr $EPC_VM_CMDS $EPC_VM_IP_ADDR $UE_IP_ADDR 10MHz_ping_ue.txt
+ scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/10MHz_ping_ue.txt $ARCHIVES_LOC
+ check_ping_result $ARCHIVES_LOC/10MHz_ping_ue.txt 20
+
+ echo "############################################################"
+ echo "Iperf DL"
+ echo "############################################################"
+ CURR_IPERF_LOG_BASE=10MHz_iperf_dl
+ iperf_dl $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 15 $CURR_IPERF_LOG_BASE
+ scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC
+ check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 15
+
+ echo "############################################################"
+ echo "Iperf UL"
+ echo "############################################################"
+ CURR_IPERF_LOG_BASE=10MHz_iperf_ul
+ iperf_ul $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 2 $CURR_IPERF_LOG_BASE
+ scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC
+ check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 2
+
+ echo "############################################################"
+ echo "Terminate enb/ue simulators"
+ echo "############################################################"
+ terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
+
+ echo "############################################################"
+ echo "Starting the eNB at 20MHz"
+ echo "############################################################"
+ CURRENT_ENB_LOG_FILE=enb_20MHz.log
+ start_basic_sim_enb $VM_CMDS $VM_IP_ADDR $EPC_VM_IP_ADDR $CURRENT_ENB_LOG_FILE 100
+
+ echo "############################################################"
+ echo "Starting the UE at 20MHz"
+ echo "############################################################"
+ CURRENT_UE_LOG_FILE=ue_20MHz.log
+ start_basic_sim_ue $VM_CMDS $VM_IP_ADDR $CURRENT_UE_LOG_FILE 100
+ if [ $UE_SYNC -eq 0 ]
+ then
+ echo "Problem w/ eNB and UE not syncing"
+ terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
+ terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR
+ exit -1
+ fi
+ get_ue_ip_addr $VM_CMDS $VM_IP_ADDR
+
+ echo "############################################################"
+ echo "Pinging the UE"
+ echo "############################################################"
+ ping_ue_ip_addr $EPC_VM_CMDS $EPC_VM_IP_ADDR $UE_IP_ADDR 20MHz_ping_ue.txt
+ scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/20MHz_ping_ue.txt $ARCHIVES_LOC
+ check_ping_result $ARCHIVES_LOC/20MHz_ping_ue.txt 20
+
+ echo "############################################################"
+ echo "Iperf DL"
+ echo "############################################################"
+ CURR_IPERF_LOG_BASE=20MHz_iperf_dl
+ iperf_dl $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 15 $CURR_IPERF_LOG_BASE
+ scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC
+ check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 15
+
+ echo "############################################################"
+ echo "Iperf UL"
+ echo "############################################################"
+# CURR_IPERF_LOG_BASE=20MHz_iperf_ul
+# iperf_ul $VM_CMDS $VM_IP_ADDR $EPC_VM_CMDS $EPC_VM_IP_ADDR 1 $CURR_IPERF_LOG_BASE
+# scp -o StrictHostKeyChecking=no ubuntu@$EPC_VM_IP_ADDR:/home/ubuntu/${CURR_IPERF_LOG_BASE}_server.txt $ARCHIVES_LOC
+# scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/${CURR_IPERF_LOG_BASE}_client.txt $ARCHIVES_LOC
+# check_iperf $ARCHIVES_LOC/$CURR_IPERF_LOG_BASE 1
+
+ echo "############################################################"
+ echo "Terminate enb/ue simulators"
+ echo "############################################################"
+ terminate_enb_ue_basic_sim $VM_CMDS $VM_IP_ADDR
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_ENB_LOG_FILE $ARCHIVES_LOC
+ scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/$CURRENT_UE_LOG_FILE $ARCHIVES_LOC
+
+ echo "############################################################"
+ echo "Terminate EPC"
+ echo "############################################################"
+
+ if [ $LTEBOX -eq 1 ]
+ then
+ terminate_ltebox_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR
+ fi
+
+ echo "############################################################"
+ echo "Checking run status"
+ echo "############################################################"
+
+ if [ $PING_STATUS -ne 0 ]; then STATUS=-1; fi
+ if [ $IPERF_STATUS -ne 0 ]; then STATUS=-1; fi
fi
+if [ $STATUS -eq 0 ]
+then
+ echo "STATUS seems OK"
+else
+ echo "STATUS failed?"
+fi
+
exit $STATUS
diff --git a/ci-scripts/xml_files/enb_usrpb210_band40.xml b/ci-scripts/xml_files/enb_usrpb210_band40.xml
new file mode 100644
index 0000000000..5b54d9b8df
--- /dev/null
+++ b/ci-scripts/xml_files/enb_usrpb210_band40.xml
@@ -0,0 +1,179 @@
+
+
+ 010101 050101 060101 070101 040101 030104 040301 040501 040602 040601 040603 040401 040201 030201 030105 040301 040502 040702 040701 040401 040201 030201 050201 060201 070201
+
+
+
+ Build_eNB
+ Build eNB (USRP)
+ -w USRP -c --eNB
+
+
+
+ Initialize_eNB
+ Initialize eNB (FDD/Band40/10MHz)
+ -O ci-scripts/conf_files/enb.band40.tm1.25PRB.FairScheduler.usrpb210.conf --codingw --fepw
+
+
+
+ Initialize_eNB
+ Initialize eNB (TDD/Band40/5MHz/info)
+ -O ci-scripts/conf_files/enb.band40.tm1.50PRB.FairScheduler.usrpb210.conf --codingw --fepw
+
+
+
+ Terminate_eNB
+ Terminate eNB
+
+
+
+ Initialize_UE
+ Initialize UE
+
+
+
+ Terminate_UE
+ Terminate UE
+
+
+
+ Attach_UE
+ Attach UE
+
+
+
+ Detach_UE
+ Detach UE
+
+
+
+ Ping
+ ping (5MHz - 20 sec)
+ -c 20
+ 25
+
+
+
+ Ping
+ ping (10MHz - 20 sec)
+ -c 20
+ 25
+
+
+
+ Iperf
+ iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)
+ -u -b 6.5M -t 30 -i 1
+ 50
+ balanced
+
+
+
+ Iperf
+ iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue)
+ -u -b 6.5M -t 30 -i 1
+ 50
+ single-ue
+
+
+
+ Iperf
+ iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(unbalanced)
+ -u -b 6.5M -t 30 -i 1
+ 50
+ unbalanced
+
+
+
+ Iperf
+ iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(balanced)
+ -u -b 13.5M -t 30 -i 1
+ 50
+ balanced
+
+
+
+ Iperf
+ iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(single-ue)
+ -u -b 13.5M -t 30 -i 1
+ 50
+ single-ue
+
+
+
+
+ Iperf
+ iperf (5MHz - UL/1Mbps/UDP)(30 sec)(single-ue)
+ -u -b 1M -t 30 -i 1 -R
+ 50
+ single-ue
+
+
+
+ Iperf
+ iperf (5MHz - UL/1Mbps/UDP)(30 sec)(balanced)
+ -u -b 1M -t 30 -i 1 -R
+ 50
+ balanced
+
+
+
+ Iperf
+ iperf (5MHz - UL/8Mbps/UDP)(30 sec)(unbalanced)
+ -u -b 8M -t 30 -i 1 -R
+ 50
+ unbalanced
+
+
+
+ Initialize_HSS
+ Initialize HSS
+
+
+
+ Initialize_MME
+ Initialize MME
+
+
+
+ Initialize_SPGW
+ Initialize SPGW
+
+
+
+ Terminate_HSS
+ Terminate HSS
+
+
+
+ Terminate_MME
+ Terminate MME
+
+
+
+ Terminate_SPGW
+ Terminate SPGW
+
+
+
diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 172e11bf7d..232693dd28 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -1010,12 +1010,9 @@ add_library(HASHTABLE
)
include_directories(${OPENAIR_DIR}/common/utils/hashtable)
-if (MESSAGE_CHART_GENERATOR)
- add_library(MSC
- ${OPENAIR_DIR}/common/utils/msc/msc.c
- )
- set(MSC_LIB MSC)
-endif()
+add_library(msc MODULE ${OPENAIR_DIR}/common/utils/msc/msc.c )
+target_link_libraries (msc LFDS)
+
include_directories(${OPENAIR_DIR}/common/utils/msc)
set(UTIL_SRC
@@ -1510,7 +1507,6 @@ include_directories(${NFAPI_USER_DIR})
add_library(CN_UTILS
${OPENAIR3_DIR}/UTILS/conversions.c
${OPENAIR3_DIR}/UTILS/enum_string.c
- ${OPENAIR3_DIR}/UTILS/log.c
${OPENAIR3_DIR}/UTILS/mcc_mnc_itu.c
)
@@ -1685,7 +1681,6 @@ set(libnas_ies_OBJS
set (libnas_utils_OBJS
${NAS_SRC}COMMON/UTIL/device.c
${NAS_SRC}COMMON/UTIL/memory.c
- ${NAS_SRC}COMMON/UTIL/nas_log.c
${NAS_SRC}COMMON/UTIL/nas_timer.c
${NAS_SRC}COMMON/UTIL/socket.c
${NAS_SRC}COMMON/UTIL/stty.c
@@ -2067,7 +2062,7 @@ add_executable(lte-softmodem
target_link_libraries (lte-softmodem
-Wl,--start-group
- RRC_LIB S1AP_LIB S1AP_ENB F1AP_LIB F1AP GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2
+ RRC_LIB S1AP_LIB S1AP_ENB F1AP_LIB F1AP X2AP_LIB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB PHY_COMMON PHY PHY_RU LFDS L2
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB} ${PROTO_AGENT_LIB} LFDS7
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
-Wl,--end-group z dl)
@@ -2147,7 +2142,7 @@ add_executable(lte-uesoftmodem
target_link_libraries (lte-uesoftmodem
-Wl,--start-group
- RRC_LIB S1AP_LIB S1AP_ENB F1AP_LIB F1AP GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU
+ RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB F1AP_LIB F1AP GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
-Wl,--end-group z dl)
@@ -2188,7 +2183,7 @@ add_executable(lte-uesoftmodem-nos1
target_link_libraries (lte-uesoftmodem-nos1
-Wl,--start-group
- RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB}
+ RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU ${RAL_LIB} ${ITTI_LIB}
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7 ${ATLAS_LIBRARIES}
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
-Wl,--end-group z dl )
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
index e2ea056ea1..08eb76e09d 100644
--- a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
+++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
@@ -146,12 +146,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.82/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
log_config :
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
index b2ac3ccf42..eff42040ad 100644
--- a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
+++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
@@ -146,12 +146,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.82/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
log_config :
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
index 006d59d2a5..8eb66d4643 100644
--- a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
+++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
@@ -146,12 +146,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.82/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.82/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.82/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
log_config :
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
index 8c76d95d4c..dc3b3bc4f0 100644
--- a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
+++ b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
@@ -146,12 +146,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
log_config :
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
index 0d2bb27dcc..6af71831f5 100644
--- a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
+++ b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
@@ -146,12 +146,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
log_config :
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
index c418f355f2..077b6e4ead 100644
--- a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
+++ b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
@@ -146,12 +146,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
log_config :
diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf
index 89e06d2b1e..e2f5981418 100644
--- a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf
+++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.10MHz.conf
@@ -146,12 +146,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.18/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
rrh_gw_config = (
diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf
index c8e6c861e0..9e08414ab3 100644
--- a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf
+++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.20MHz.conf
@@ -146,12 +146,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.18/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
rrh_gw_config = (
diff --git a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf
index cc00f4f3ea..2a598c31d3 100644
--- a/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf
+++ b/cmake_targets/autotests/v2/config/rcc.band7.tm1.if4p5.5MHz.conf
@@ -146,12 +146,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.18/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.18/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.18/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
rrh_gw_config = (
diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf
index 6e1e776fed..4966108d03 100644
--- a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf
+++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.10MHz.udp.usrpb210.conf
@@ -148,12 +148,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.215/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
rrh_gw_config = (
diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf
index 7e7c3c185d..4f3b25349a 100644
--- a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf
+++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.20MHz.udp.usrpb210.conf
@@ -148,12 +148,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.215/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
rrh_gw_config = (
diff --git a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf
index 3098660c8d..54e5a327cd 100644
--- a/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf
+++ b/cmake_targets/autotests/v2/config/rru.band7.tm1.if4p5.5MHz.udp.usrpb210.conf
@@ -148,12 +148,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth3";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth3";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.215/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
rrh_gw_config = (
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index 45ad04b999..54683af1cc 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -40,7 +40,7 @@ set_openair_env
gen_nvram_path=$OPENAIR_DIR/targets/bin
conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf
-MSC_GEN="False"
+MSC_GEN=0
XFORMS="True"
UE_EXPANSION="False"
PRINT_STATS="False"
@@ -163,6 +163,10 @@ Options
Disable all LOG_* macros
--build-eclipse
Build eclipse project files. Paths are auto corrected by fixprj.sh
+--build-telnet
+ Build telnet server, specify --telnetsrv on command line to start it (eNB only)
+--build-msc
+ Build MSC tracing utility, specify --msc on command line to start it (eNB and UE)
--usrp-recplay
Build for I/Q record-playback modes
--ue-nas-use-tun
@@ -359,6 +363,10 @@ function main() {
--build-telnetsrv)
BUILD_TELNETSRV=1
echo_info "Build embedded telnet server"
+ shift ;;
+ --build-msc)
+ MSC_GEN=1
+ echo_info "Build MSC tracing utility"
shift ;;
--usrp-recplay)
USRP_REC_PLAY="True"
@@ -711,6 +719,15 @@ function main() {
$build_dir telnetsrv \
libtelnetsrv.so $dbin/libtelnetsrv.so
+ fi
+ # Telnet server compilation
+ #####################
+ if [ "$MSC_GEN" = "1" ] ; then
+ build_dir=$lte_build_dir
+ compilations \
+ $build_dir msc \
+ libmsc.so $dbin/libmsc.so
+
fi
# build RF device and transport protocol libraries
#####################################
diff --git a/cmake_targets/nas_sim_tools/CMakeLists.txt b/cmake_targets/nas_sim_tools/CMakeLists.txt
index 81e3fe4b3c..c1a0bb419b 100644
--- a/cmake_targets/nas_sim_tools/CMakeLists.txt
+++ b/cmake_targets/nas_sim_tools/CMakeLists.txt
@@ -27,7 +27,6 @@ set(CONF2UEDATA_LIB_SRC
${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/usim_api.c
${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/aka_functions.c
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/memory.c
- ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/nas_log.c
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/OctetString.c
${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/TLVEncoder.c
${OPENAIR_DIR}/common/utils/utils.c
diff --git a/common/config/config_cmdline.c b/common/config/config_cmdline.c
index 8b3026c22b..c9b1c32378 100644
--- a/common/config/config_cmdline.c
+++ b/common/config/config_cmdline.c
@@ -38,7 +38,7 @@
#include "config_userapi.h"
-void parse_stringlist(paramdef_t *cfgoptions, char *val)
+int parse_stringlist(paramdef_t *cfgoptions, char *val)
{
char *atoken;
char *tokctx;
@@ -63,7 +63,7 @@ int numelt=0;
printf_params("[LIBCONFIG] %s[%i]: %s\n", cfgoptions->optname,i,cfgoptions->strlistptr[i]);
atoken=strtok_r(NULL, ",",&tokctx);
}
- cfgoptions->numelt=numelt;
+ return (cfgoptions->numelt > 0);
}
int processoption(paramdef_t *cfgoptions, char *value)
@@ -95,7 +95,7 @@ char defbool[2]="1";
break;
case TYPE_STRINGLIST:
- parse_stringlist(cfgoptions,tmpval);
+ optisset=parse_stringlist(cfgoptions,tmpval);
break;
case TYPE_UINT32:
case TYPE_INT32:
diff --git a/common/utils/LOG/log.c b/common/utils/LOG/log.c
index 20442a02a4..6d602d7027 100644
--- a/common/utils/LOG/log.c
+++ b/common/utils/LOG/log.c
@@ -54,7 +54,6 @@
mapping log_level_names[] = {
{"error", OAILOG_ERR},
- {"file", OAILOG_FILE},
{"warn", OAILOG_WARNING},
{"info", OAILOG_INFO},
{"debug", OAILOG_DEBUG},
@@ -70,18 +69,10 @@ mapping log_options[] = {
};
-mapping log_maskmap[] = {
- {"prach", DEBUG_PRACH},
- {"RU", DEBUG_RU},
- {"LTEESTIM", DEBUG_LTEESTIM},
- {"ctrlsocket", DEBUG_CTRLSOCKET},
- {"UE_PHYPROC", DEBUG_UE_PHYPROC},
- {"UE_TIMING", UE_TIMING},
- {NULL,-1}
-};
+mapping log_maskmap[] = LOG_MASKMAP_INIT;
-char *log_level_highlight_start[] = {LOG_RED, LOG_GREEN, LOG_ORANGE, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */
-char *log_level_highlight_end[] = {LOG_RESET,LOG_RESET,LOG_RESET,LOG_RESET, LOG_RESET,LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */
+char *log_level_highlight_start[] = {LOG_RED, LOG_ORANGE, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */
+char *log_level_highlight_end[] = {LOG_RESET,LOG_RESET,LOG_RESET, LOG_RESET,LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */
int write_file_matlab(const char *fname,const char *vname,void *data,int length,int dec,char format)
@@ -243,14 +234,14 @@ int write_file_matlab(const char *fname,const char *vname,void *data,int length,
/* get log parameters from configuration file */
void log_getconfig(log_t *g_log) {
char *gloglevel = NULL;
- int level;
+ int consolelog ;
paramdef_t logparams_defaults[] = LOG_GLOBALPARAMS_DESC;
paramdef_t logparams_level[MAX_LOG_PREDEF_COMPONENTS];
paramdef_t logparams_logfile[MAX_LOG_PREDEF_COMPONENTS];
paramdef_t logparams_debug[sizeof(log_maskmap)/sizeof(mapping)];
- paramdef_t logparams_matlab[sizeof(log_maskmap)/sizeof(mapping)];
+ paramdef_t logparams_dump[sizeof(log_maskmap)/sizeof(mapping)];
int ret = config_get( logparams_defaults,sizeof(logparams_defaults)/sizeof(paramdef_t),CONFIG_STRING_LOG_PREFIX);
if (ret <0) {
@@ -258,6 +249,7 @@ void log_getconfig(log_t *g_log) {
return;
}
+/* set LOG display options (enable/disable color, thread name, level ) */
for(int i=0; ilog_component[i].level = map_str_to_int(log_level_names, *(logparams_level[i].strptr));
+ set_log(i, g_log->log_component[i].level);
if (*(logparams_logfile[i].uptr) == 1)
set_component_filelog(i);
}
-/* build then read the debug and matlab parameter array */
+/* build then read the debug and dump parameter array */
for (int i=0;log_maskmap[i].name != NULL ; i++) {
- sprintf(logparams_debug[i].optname, LOG_CONFIG_DEBUG_FORMAT, log_maskmap[i].name);
- sprintf(logparams_matlab[i].optname, LOG_CONFIG_MATLAB_FORMAT, log_maskmap[i].name);
+ sprintf(logparams_debug[i].optname, LOG_CONFIG_DEBUG_FORMAT, log_maskmap[i].name);
+ sprintf(logparams_dump[i].optname, LOG_CONFIG_DUMP_FORMAT, log_maskmap[i].name);
logparams_debug[i].defuintval = 0;
logparams_debug[i].type = TYPE_UINT;
logparams_debug[i].paramflags = PARAMFLAG_BOOL;
logparams_debug[i].uptr = NULL;
logparams_debug[i].chkPptr = NULL;
logparams_debug[i].numelt = 0;
- logparams_matlab[i].defuintval = 0;
- logparams_matlab[i].type = TYPE_UINT;
- logparams_matlab[i].paramflags = PARAMFLAG_BOOL;
- logparams_matlab[i].uptr = NULL;
- logparams_matlab[i].chkPptr = NULL;
- logparams_matlab[i].numelt = 0;
+ logparams_dump[i].defuintval = 0;
+ logparams_dump[i].type = TYPE_UINT;
+ logparams_dump[i].paramflags = PARAMFLAG_BOOL;
+ logparams_dump[i].uptr = NULL;
+ logparams_dump[i].chkPptr = NULL;
+ logparams_dump[i].numelt = 0;
}
config_get( logparams_debug,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
- config_get( logparams_matlab,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
+ config_get( logparams_dump,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
/* set the debug mask according to the debug parameters values */
for (int i=0; log_maskmap[i].name != NULL ; i++) {
if (*(logparams_debug[i].uptr) )
g_log->debug_mask = g_log->debug_mask | log_maskmap[i].value;
- if (*(logparams_matlab[i].uptr) )
- g_log->matlab_mask = g_log->matlab_mask | log_maskmap[i].value;
+ if (*(logparams_dump[i].uptr) )
+ g_log->dump_mask = g_log->dump_mask | log_maskmap[i].value;
}
+/* log globally enabled/disabled */
+ set_glog_onlinelog(consolelog);
}
int register_log_component(char *name, char *fext, int compidx)
@@ -354,11 +348,9 @@ int computed_compidx=compidx;
}
if (computed_compidx >= 0 && computed_compidx log_component[computed_compidx].name = strdup(name);
- g_log->log_component[computed_compidx].level = LOG_ERR;
- g_log->log_component[computed_compidx].interval = 1;
- g_log->log_component[computed_compidx].stream = NULL;
+ g_log->log_component[computed_compidx].stream = stdout;
g_log->log_component[computed_compidx].filelog = 0;
- g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/.%s rounded to ^2 */
+ g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/.%s */
sprintf(g_log->log_component[computed_compidx].filelog_name,"/tmp/%s.%s",name,fext);
} else {
fprintf(stderr,"{LOG} %s %d Couldn't register componemt %s\n",__FILE__,__LINE__,name);
@@ -423,23 +415,16 @@ int logInit (void)
register_log_component("DU_F1AP","",DU_F1AP);
register_log_component("SCTP","",SCTP);
- register_log_component("RRH","",RRH);
-
-
+ register_log_component("X2AP","",X2AP);
+ register_log_component("LOADER","log",LOADER);
+ register_log_component("ASN","log",ASN);
+ for (int i=0 ; log_level_names[i].name != NULL ; i++)
+ g_log->level2string[i] = toupper(log_level_names[i].name[0]); // uppercased first letter of level name
- g_log->level2string[OAILOG_ERR] = "E"; // ERROR
- g_log->level2string[OAILOG_WARNING] = "W"; // WARNING
- g_log->level2string[OAILOG_INFO] = "I"; //INFO
- g_log->level2string[OAILOG_DEBUG] = "D"; // DEBUG
- g_log->level2string[OAILOG_FILE] = "F"; // file
- g_log->level2string[OAILOG_TRACE] = "T"; // TRACE
-
- g_log->onlinelog = 1; //online log file
- g_log->filelog = 0;
@@ -448,19 +433,6 @@ int logInit (void)
log_getconfig(g_log);
- // could put a loop here to check for all comps
- for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
- if (g_log->log_component[i].filelog == 1 ) {
- g_log->log_component[i].stream = fopen(g_log->log_component[i].filelog_name,"w");
- g_log->log_component[i].fwrite = vfprintf;
- } else if (g_log->log_component[i].filelog == 1 ) {
- g_log->log_component[i].stream = fopen(g_log->filelog_name,"w");
- g_log->log_component[i].fwrite = vfprintf;
- } else if (g_log->onlinelog == 1 ) {
- g_log->log_component[i].stream = stdout;
- g_log->log_component[i].fwrite = vfprintf;
- }
- }
// set all unused component items to 0, they are for non predefined components
for (i=MAX_LOG_PREDEF_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
@@ -472,8 +444,6 @@ int logInit (void)
}
-
-
char *log_getthreadname(char *threadname, int bufsize) {
int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ;
@@ -485,11 +455,20 @@ int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ;
}
}
+int inline log_header(char *log_buffer, int buffsize, int comp, int level,const char *format) {
+ char threadname[PR_SET_NAME];
+return snprintf(log_buffer, buffsize , "%s%s[%s]%c %s %s%s",
+ log_level_highlight_end[level],
+ ( (g_log->flag & FLAG_NOCOLOR)?"":log_level_highlight_start[level]),
+ g_log->log_component[comp].name,
+ ( (g_log->flag & FLAG_LEVEL)?g_log->level2string[level]:' '),
+ ( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""),
+ format,
+ log_level_highlight_end[level]);
+}
void logRecord_mt(const char *file, const char *func, int line, int comp, int level, const char* format, ... )
{
-
- char threadname[PR_SET_NAME];
char log_buffer[MAX_LOG_TOTAL];
va_list args;
@@ -498,38 +477,63 @@ void logRecord_mt(const char *file, const char *func, int line, int comp, int le
-
-
- snprintf(log_buffer, MAX_LOG_TOTAL , "%s%s[%s]%s %s %s",
- log_level_highlight_end[level],
- ( (g_log->flag & FLAG_NOCOLOR)?"":log_level_highlight_start[level]),
- g_log->log_component[comp].name,
- ( (g_log->flag & FLAG_LEVEL)?g_log->level2string[level]:""),
- ( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""),
- format);
-
- g_log->log_component[comp].fwrite(g_log->log_component[comp].stream,log_buffer, args);
+ log_header(log_buffer,MAX_LOG_TOTAL ,comp, level,format);
+ g_log->log_component[comp].vprint(g_log->log_component[comp].stream,log_buffer, args);
va_end(args);
}
+void log_dump(int component, void *buffer, int buffsize,int datatype, const char* format, ... ) {
+va_list args;
+char *wbuf;
-int set_log(int component, int level, int interval)
+ switch(datatype) {
+ case LOG_DUMP_DOUBLE:
+ wbuf=malloc((buffsize * 10) + 64 + MAX_LOG_TOTAL);
+ break;
+ case LOG_DUMP_CHAR:
+ default:
+ wbuf=malloc((buffsize * 3 ) + 64 + MAX_LOG_TOTAL);
+ break;
+ }
+ if (wbuf != NULL) {
+ va_start(args, format);
+ int pos=log_header(wbuf,MAX_LOG_TOTAL ,component, OAILOG_INFO,"");
+ int pos2=vsprintf(wbuf+pos,format, args);
+ pos=pos+pos2;
+ va_end(args);
+
+ for (int i=0; ilog_component[component].print(g_log->log_component[component].stream,wbuf);
+ free(wbuf);
+ }
+}
+
+int set_log(int component, int level)
{
/* Checking parameters */
DevCheck((component >= MIN_LOG_COMPONENTS) && (component < MAX_LOG_COMPONENTS),
component, MIN_LOG_COMPONENTS, MAX_LOG_COMPONENTS);
- DevCheck((level < NUM_LOG_LEVEL) && (level >= OAILOG_ERR), level, NUM_LOG_LEVEL,
+ DevCheck((level < NUM_LOG_LEVEL) && (level >= OAILOG_DISABLE), level, NUM_LOG_LEVEL,
OAILOG_ERR);
- DevCheck((interval >= 0) && (interval <= 0xFF), interval, 0, 0xFF);
+ if ( g_log->log_component[component].level != OAILOG_DISABLE )
+ g_log->log_component[component].savedlevel = g_log->log_component[component].level;
g_log->log_component[component].level = level;
-
- g_log->log_component[component].interval = interval;
-
return 0;
}
@@ -538,32 +542,67 @@ int set_log(int component, int level, int interval)
void set_glog(int level)
{
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
- g_log->log_component[c].level = level;
+ set_log(c, level);
}
}
void set_glog_onlinelog(int enable)
{
- g_log->onlinelog = enable;
+ for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
+ if ( enable ) {
+ g_log->log_component[c].level = g_log->log_component[c].savedlevel;
+ g_log->log_component[c].vprint = vfprintf;
+ g_log->log_component[c].print = fprintf;
+ g_log->log_component[c].stream = stdout;
+ } else {
+ g_log->log_component[c].level = OAILOG_DISABLE;
+ }
+ }
}
void set_glog_filelog(int enable)
{
- g_log->filelog = enable;
+static FILE *fptr;
+
+ if ( enable ) {
+ fptr = fopen(g_log->filelog_name,"w");
+
+ for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
+ close_component_filelog(c);
+ g_log->log_component[c].stream = fptr;
+ g_log->log_component[c].filelog = 1;
+ }
+ } else {
+ for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
+ g_log->log_component[c].filelog = 0;
+ if (fptr != NULL) {
+ fclose(fptr);
+ }
+ g_log->log_component[c].stream = stdout;
+ }
+ }
}
void set_component_filelog(int comp)
{
- if (g_log->log_component[comp].filelog == 0) {
- g_log->log_component[comp].filelog = 1;
-
- if (g_log->log_component[comp].stream == NULL) {
+ if (g_log->log_component[comp].stream == NULL || g_log->log_component[comp].stream == stdout) {
g_log->log_component[comp].stream = fopen(g_log->log_component[comp].filelog_name,"w");
}
- }
+ g_log->log_component[comp].vprint = vfprintf;
+ g_log->log_component[comp].print = fprintf;
+ g_log->log_component[comp].filelog = 1;
+}
+void close_component_filelog(int comp)
+{
+ g_log->log_component[comp].filelog = 0;
+ if (g_log->log_component[comp].stream != NULL && g_log->log_component[comp].stream != stdout ) {
+ fclose(g_log->log_component[comp].stream);
+ g_log->log_component[comp].stream = stdout;
+ }
+ g_log->log_component[comp].vprint = vfprintf;
+ g_log->log_component[comp].print = fprintf;
+
}
-
-
/*
* for the two functions below, the passed array must have a final entry
@@ -618,15 +657,13 @@ int is_newline( char *str, int size)
void logClean (void)
{
int i;
- LOG_I(PHY,"\n");
+ LOG_UI(PHY,"\n");
for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
- if (g_log->log_component[i].stream != NULL) {
- fclose(g_log->log_component[i].stream);
- }
+ close_component_filelog(i);
}
}
@@ -652,8 +689,8 @@ int test_log(void)
LOG_D(MAC, "1 debug MAC \n");
LOG_W(MAC, "1 warning MAC \n");
- set_log(EMU, OAILOG_INFO, FLAG_ONLINE);
- set_log(MAC, OAILOG_WARNING, 0);
+ set_log(EMU, OAILOG_INFO);
+ set_log(MAC, OAILOG_WARNING);
LOG_I(EMU, "2 Starting OAI logs version %s Build date: %s on %s\n",
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
@@ -663,7 +700,7 @@ int test_log(void)
LOG_I(MAC, "2 info MAC \n");
- set_log(MAC, OAILOG_NOTICE, 1);
+ set_log(MAC, OAILOG_NOTICE);
LOG_ENTER(MAC);
LOG_I(EMU, "3 Starting OAI logs version %s Build date: %s on %s\n",
@@ -672,8 +709,8 @@ int test_log(void)
LOG_W(MAC, "3 warning MAC \n");
LOG_I(MAC, "3 info MAC \n");
- set_log(MAC, LOG_DEBUG,1);
- set_log(EMU, LOG_DEBUG,1);
+ set_log(MAC, LOG_DEBUG);
+ set_log(EMU, LOG_DEBUG);
LOG_ENTER(MAC);
LOG_I(EMU, "4 Starting OAI logs version %s Build date: %s on %s\n",
@@ -683,8 +720,8 @@ int test_log(void)
LOG_I(MAC, "4 info MAC \n");
- set_log(MAC, LOG_DEBUG,0);
- set_log(EMU, LOG_DEBUG,0);
+ set_log(MAC, LOG_DEBUG);
+ set_log(EMU, LOG_DEBUG);
LOG_I(LOG, "5 Starting OAI logs version %s Build date: %s on %s\n",
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
@@ -693,8 +730,8 @@ int test_log(void)
LOG_I(MAC, "5 info MAC \n");
- set_log(MAC, LOG_TRACE,0X07F);
- set_log(EMU, LOG_TRACE,0X07F);
+ set_log(MAC, LOG_TRACE);
+ set_log(EMU, LOG_TRACE);
LOG_ENTER(MAC);
LOG_I(LOG, "6 Starting OAI logs version %s Build date: %s on %s\n",
diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h
index 9e1feab22e..22d393d1a7 100644
--- a/common/utils/LOG/log.h
+++ b/common/utils/LOG/log.h
@@ -81,15 +81,14 @@ extern "C" {
* @ingroup _macro
* @brief LOG defines 9 levels of messages for users. Importance of these levels decrease gradually from 0 to 8
* @{*/
+# define OAILOG_DISABLE -1 /*!< \brief disable all LOG messages, cannot be used in LOG macros, use only in LOG module */
+# define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" fuctinalities */
+# define OAILOG_WARNING 1 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */
+# define OAILOG_INFO 2 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
+# define OAILOG_DEBUG 3 /*!< \brief first level debug-level messages, for developers , may impact real-time behavior */
+# define OAILOG_TRACE 4 /*!< \brief second level debug-level messages, for developers ,likely impact real-time behavior*/
-# define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" fuctinalities */
-# define OAILOG_FILE 1 /*!< \brief important informational messages, but everything OK */
-# define OAILOG_WARNING 2 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */
-# define OAILOG_INFO 3 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
-# define OAILOG_DEBUG 4 /*!< \brief first level debug-level messages, for developers , may impact real-time behavior */
-# define OAILOG_TRACE 5 /*!< \brief second level debug-level messages, for developers ,likely impact real-time behavior*/
-
-#define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG */
+#define NUM_LOG_LEVEL 5 /*!< \brief the number of message levels users have with LOG (OAILOG_DISABLE is not available to user as a level, so it is not included)*/
/* @}*/
@@ -128,21 +127,53 @@ extern "C" {
/** @defgroup macros to identify a debug entity
* @ingroup each macro is a bit mask where the unique bit set identifies an entity to be debugged
- * it allows to dynamically activate or not blocks of code
+ * it allows to dynamically activate or not blocks of code. The LOG_MASKMAP_INIT macro
+ * is used to map a character string name to each debug bit, it allows to set or clear
+ * the corresponding bit via the defined name, from the configuration or from the telnet
+ * server.
* @brief
* @{*/
#define DEBUG_PRACH (1<<0)
#define DEBUG_RU (1<<1)
#define DEBUG_UE_PHYPROC (1<<2)
#define DEBUG_LTEESTIM (1<<3)
+#define DEBUG_DLCELLSPEC (1<<4)
+#define DEBUG_ULSCH (1<<5)
+#define DEBUG_RRC (1<<6)
+#define DEBUG_PDCP (1<<7)
+#define DEBUG_DFT (1<<8)
+#define DEBUG_ASN1 (1<<9)
#define DEBUG_CTRLSOCKET (1<<10)
+#define DEBUG_SECURITY (1<<11)
+#define DEBUG_NAS (1<<12)
#define UE_TIMING (1<<20)
-#define SET_LOG_DEBUG(O) g_log->debug_mask = (g_log->debug_mask | O)
-#define CLEAR_LOG_DEBUG(O) g_log->debug_mask = (g_log->debug_mask & (~O))
-#define SET_LOG_MATLAB(O) g_log->matlab_mask = (g_log->matlab_mask | O)
-#define CLEAR_LOG_MATLAB(O) g_log->matlab_mask = (g_log->matlab_mask & (~O))
+#define LOG_MASKMAP_INIT {\
+ {"PRACH", DEBUG_PRACH},\
+ {"RU", DEBUG_RU},\
+ {"UE_PHYPROC", DEBUG_UE_PHYPROC},\
+ {"LTEESTIM", DEBUG_LTEESTIM},\
+ {"DLCELLSPEC", DEBUG_DLCELLSPEC},\
+ {"ULSCH", DEBUG_ULSCH},\
+ {"RRC", DEBUG_RRC},\
+ {"PDCP", DEBUG_PDCP},\
+ {"DFT", DEBUG_DFT},\
+ {"ASN1", DEBUG_ASN1},\
+ {"CTRLSOCKET", DEBUG_CTRLSOCKET},\
+ {"SECURITY", DEBUG_SECURITY},\
+ {"NAS", DEBUG_NAS},\
+ {"UE_TIMING", UE_TIMING},\
+ {NULL,-1}\
+}
+
+
+
+#define SET_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask | B)
+#define CLEAR_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask & (~B))
+
+#define SET_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask | B)
+#define CLEAR_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask & (~B))
@@ -191,6 +222,7 @@ typedef enum {
F1U,
X2AP,
LOADER,
+ ASN,
MAX_LOG_PREDEF_COMPONENTS,
}
comp_name_t;
@@ -204,17 +236,18 @@ typedef struct {
int value; /*!< \brief integer value of mapping */
} mapping;
-typedef int(*log_write_func_t)(FILE *stream, const char *format, va_list ap );
-
+typedef int(*log_vprint_func_t)(FILE *stream, const char *format, va_list ap );
+typedef int(*log_print_func_t)(FILE *stream, const char *format, ... );
typedef struct {
- const char *name;
- int level;
- int flag;
- int interval;
- int filelog;
- char *filelog_name;
- FILE *stream;
- log_write_func_t fwrite;
+ const char *name;
+ int level;
+ int savedlevel;
+ int flag;
+ int filelog;
+ char *filelog_name;
+ FILE *stream;
+ log_vprint_func_t vprint;
+ log_print_func_t print;
/* SR: make the log buffer component relative */
char log_buffer[MAX_LOG_TOTAL];
} log_component_t;
@@ -222,13 +255,11 @@ typedef struct {
typedef struct {
log_component_t log_component[MAX_LOG_COMPONENTS];
- char* level2string[NUM_LOG_LEVEL];
- int onlinelog;
+ char level2string[NUM_LOG_LEVEL];
int flag;
- int filelog;
char* filelog_name;
uint64_t debug_mask;
- uint64_t matlab_mask;
+ uint64_t dump_mask;
} log_t;
@@ -259,14 +290,15 @@ extern log_t *g_log;
/*----------------------------------------------------------------------------*/
int logInit (void);
void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
-
-int set_log(int component, int level, int interval);
+void log_dump(int component, void *buffer, int buffsize,int datatype, const char* format, ... );
+int set_log(int component, int level);
void set_glog(int level);
void set_glog_onlinelog(int enable);
void set_glog_filelog(int enable);
void set_component_filelog(int comp);
-
+void close_component_filelog(int comp);
+void set_component_consolelog(int comp);
int map_str_to_int(mapping *map, const char *str);
char *map_int_to_str(mapping *map, int val);
void logClean (void);
@@ -298,7 +330,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
#define LOG_CONFIG_LEVEL_FORMAT "%s_log_level"
#define LOG_CONFIG_LOGFILE_FORMAT "%s_log_infile"
#define LOG_CONFIG_DEBUG_FORMAT "%s_debug"
-#define LOG_CONFIG_MATLAB_FORMAT "%s_matlab"
+#define LOG_CONFIG_DUMP_FORMAT "%s_dump"
#define LOG_CONFIG_HELP_OPTIONS " list of comma separated options to enable log module behavior. Available options: \n"\
" nocolor: disable color usage in log messages\n"\
@@ -314,7 +346,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#define LOG_GLOBALPARAMS_DESC { \
{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, "Default log level for all componemts\n", 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, 0}, \
-{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(g_log->onlinelog), defintval:1, TYPE_INT, 0}, \
+{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(consolelog), defintval:1, TYPE_INT, 0}, \
{LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST,0} \
}
@@ -324,23 +356,25 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
* @ingroup _macro
* @brief Macro used to call logIt function with different message levels
* @{*/
-
-// debugging macros(g_log->log_component[component].interval?logRecord_mt(__FILE__, __FUNCTION__, __LINE__, component, level, format, ##args):(void)0)
+#define LOG_DUMP_CHAR 0
+#define LOG_DUMP_DOUBLE 1
+// debugging macros
+#define LOG_F LOG_I /* because LOG_F was originaly to dump a message or buffer but is also used as a regular level...., to dump use LOG_DUMPMSG */
# if T_TRACER
/* per component, level dependant macros */
-# define LOG_I(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0)
-# define LOG_W(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0)
# define LOG_E(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} else { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ;}} while (0)
+# define LOG_W(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0)
+# define LOG_I(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0)
# define LOG_D(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} else { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ;}} while (0)
# define LOG_T(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} else { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ;}} while (0)
-# define LOG_F(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_FILE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_FILE, x) ;}} while (0) /* */
+ /* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */
+# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */
# define nfapi_log(FILE, FNC, LN, COMP, LVL, F...) do { if (T_stdout) { logRecord_mt(__FILE__, __FUNCTION__, __LINE__,COMP, LVL, F) ;}} while (0) /* */
/* bitmask dependant macros, to isolate debugging code */
-# define LOG_DEBUG_BEGIN(D) if (g_log->debug_mask & D) {
-# define LOG_DEBUG_END }
- /* bitmask dependant macros, to generate matlab files */
-# define LOG_M_BEGIN(D) if (g_log->matlab_mask & D) {
-# define LOG_M_END }
+# define LOG_DEBUGFLAG(D) (g_log->debug_mask & D)
+
+ /* bitmask dependant macros, to generate debug file such as matlab file or message dump */
+# define LOG_DUMPFLAG(D) (g_log->dump_mask & D)
# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)/* */
/* define variable only used in LOG macro's */
# define LOG_VAR(A,B) A B
@@ -350,22 +384,22 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
# define LOG_E(c, x...) /* */
# define LOG_D(c, x...) /* */
# define LOG_T(c, x...) /* */
-# define LOG_F(c, x...) /* */
+
+# define LOG_DUMPMSG(c, b, s, x...) /* */
# define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
-# define LOG_DEBUG_BEGIN(D) if (0) {
-# define LOG_DEBUG_END }
-# define LOG_M_BEGIN(D) if (0) {
-# define LOG_M_END }
+# define LOG_DEBUGFLAG(D) ( 0 )
+# define LOG_DUMPFLAG(D) ( 0 )
# define LOG_M(file, vector, data, len, dec, format)
# define LOG_VAR(A,B)
# endif /* T_TRACER */
/* avoid warnings for variables only used in LOG macro's but set outside debug section */
-#define LOG_USEDINLOG_VAR(A,B) __attribute__((unused)) A B
+#define GCC_NOTUSED __attribute__((unused))
+#define LOG_USEDINLOG_VAR(A,B) GCC_NOTUSED A B
/* unfiltered macros, usefull for simulators or messages at init time, before log is configured */
#define LOG_UM(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)
-
#define LOG_UI(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ; } while(0)
+#define LOG_UDUMPMSG(c, b, s, f, x...) do { log_dump(c, b, s, f, x) ;} while (0) /* */
/* @}*/
@@ -373,9 +407,12 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
* @ingroup _macro
* @brief Macro of some useful functions defined by LOG
* @{*/
-#define LOG_ENTER(c) do {LOG_T(c, "Entering\n");}while(0) /*!< \brief Macro to log a message with severity DEBUG when entering a function */
-#define LOG_EXIT(c) do {LOG_T(c,"Exiting\n"); return;}while(0) /*!< \brief Macro to log a message with severity TRACE when exiting a function */
-#define LOG_RETURN(c,x) do {uint32_t __rv;__rv=(unsigned int)(x);LOG_T(c,"Returning %08x\n", __rv);return((typeof(x))__rv);}while(0) /*!< \brief Macro to log a function exit, including integer value, then to return a value to the calling function */
+#define LOG_ENTER(c) do {LOG_T(c, "Entering %s\n",__FUNCTION__);}while(0) /*!< \brief Macro to log a message with severity DEBUG when entering a function */
+#define LOG_END(c) do {LOG_T(c, "End of %s\n",__FUNCTION__);}while(0) /*!< \brief Macro to log a message with severity DEBUG when entering a function */
+#define LOG_EXIT(c) do { LOG_END(c); return;}while(0) /*!< \brief Macro to log a message with severity TRACE when exiting a function */
+#define LOG_RETURN(c,r) do {LOG_T(c,"Leaving %s (rc = %08lx)\n", __FUNCTION__ , (unsigned long)(r) );return(r);}while(0) /*!< \brief Macro to log a function exit, including integer value, then to return a value to the calling function */
+
+
/* @}*/
static __inline__ uint64_t rdtsc(void) {
diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt
index 7e6bae7ed0..3ef08bc510 100644
--- a/common/utils/T/T_messages.txt
+++ b/common/utils/T/T_messages.txt
@@ -750,6 +750,27 @@ ID = LEGACY_OSA_TRACE
GROUP = ALL:LEGACY_OSA:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log
+ID = LEGACY_ASN_INFO
+ DESC = ASN legacy logs - info level
+ GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_INFO:LEGACY
+ FORMAT = string,log
+ID = LEGACY_ASN_ERROR
+ DESC = ASN legacy logs - error level
+ GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_ERROR:LEGACY
+ FORMAT = string,log
+ID = LEGACY_ASN_WARNING
+ DESC = ASN legacy logs - warning level
+ GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_WARNING:LEGACY
+ FORMAT = string,log
+ID = LEGACY_ASN_DEBUG
+ DESC = ASN legacy logs - debug level
+ GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_DEBUG:LEGACY
+ FORMAT = string,log
+ID = LEGACY_ASN_TRACE
+ DESC = ASN legacy logs - trace level
+ GROUP = ALL:LEGACY_ASN:LEGACY_GROUP_TRACE:LEGACY
+ FORMAT = string,log
+
ID = LEGACY_SIM_INFO
DESC = SIM legacy logs - info level
GROUP = ALL:LEGACY_SIM:LEGACY_GROUP_INFO:LEGACY
diff --git a/common/utils/T/tracer/gui/x.c b/common/utils/T/tracer/gui/x.c
index 94448eb666..ef5334767c 100644
--- a/common/utils/T/tracer/gui/x.c
+++ b/common/utils/T/tracer/gui/x.c
@@ -150,7 +150,17 @@ x_image *x_create_image(x_connection *_x, unsigned char *data,
vs = XGetVisualInfo(x->d, VisualDepthMask | VisualClassMask |
VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask |
VisualBitsPerRGBMask, &template, &nvs);
- if (vs == NULL || nvs == 0) ERR("no good visual found\n");
+
+ if (vs == NULL) {
+ /* try again with 32 bpp */
+ template.depth = 32;
+ vs = XGetVisualInfo(x->d, VisualDepthMask | VisualClassMask |
+ VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask |
+ VisualBitsPerRGBMask, &template, &nvs);
+ }
+
+ if (vs == NULL) ERR("no good visual found\n");
+
v = vs[0].visual;
XFree(vs);
diff --git a/common/utils/itti/signals.c b/common/utils/itti/signals.c
index 5dd667ae65..f8dfe2d49b 100644
--- a/common/utils/itti/signals.c
+++ b/common/utils/itti/signals.c
@@ -39,7 +39,7 @@
#include "assertions.h"
#include "signals.h"
-#include "log.h"
+#include "common/utils/LOG/log.h"
#if defined (LOG_D) && defined (LOG_E)
# define SIG_DEBUG(x, args...) LOG_D(RRC, x, ##args)
diff --git a/common/utils/itti/timer.c b/common/utils/itti/timer.c
index 6327aeacfb..720cf70d1f 100644
--- a/common/utils/itti/timer.c
+++ b/common/utils/itti/timer.c
@@ -32,7 +32,7 @@
#include "assertions.h"
#include "intertask_interface.h"
#include "timer.h"
-#include "log.h"
+#include "common/utils/LOG/log.h"
#include "queue.h"
#if defined (LOG_D) && defined (LOG_E)
diff --git a/common/utils/load_module_shlib.c b/common/utils/load_module_shlib.c
index 656f6a8852..c0afdb0b64 100644
--- a/common/utils/load_module_shlib.c
+++ b/common/utils/load_module_shlib.c
@@ -70,8 +70,8 @@ char *tmpstr;
char *shlibpath =NULL;
char *shlibversion=NULL;
char *cfgprefix;
-paramdef_t LoaderParams[] ={{"shlibpath", NULL, 0, strptr:&shlibpath, defstrval:NULL, TYPE_STRING, 0},
- {"shlibversion", NULL, 0, strptr:&shlibversion, defstrval:"", TYPE_STRING, 0}};
+paramdef_t LoaderParams[] ={{"shlibpath", NULL, 0, strptr:&shlibpath, defstrval:NULL, TYPE_STRING, 0, NULL},
+ {"shlibversion", NULL, 0, strptr:&shlibversion, defstrval:"", TYPE_STRING, 0, NULL}};
int ret;
@@ -118,7 +118,7 @@ int ret;
return tmpstr;
}
-int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf)
+int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf, void *autoinit_arg)
{
void *lib_handle;
initfunc_t fpi;
@@ -155,7 +155,7 @@ int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf)
fpi = dlsym(lib_handle,afname);
if (fpi != NULL ) {
- fpi();
+ fpi(autoinit_arg);
}
if (farray != NULL) {
diff --git a/common/utils/load_module_shlib.h b/common/utils/load_module_shlib.h
index ffbad66570..685b3d1b65 100644
--- a/common/utils/load_module_shlib.h
+++ b/common/utils/load_module_shlib.h
@@ -59,7 +59,8 @@ typedef struct {
/* function type of functions which may be implemented by a module */
/* 1: init function, called when loading, if found in the shared lib */
-typedef int(*initfunc_t)(void);
+typedef int(*initfunc_t)(void *);
+
/* 2: version checking function, called when loading, if it returns -1, trigger main exec abort */
typedef int(*checkverfunc_t)(char * mainexec_version, char ** shlib_version);
/* 3: get function array function, called when loading when a module doesn't provide */
@@ -72,18 +73,18 @@ typedef int(*getfarrayfunc_t)(loader_shlibfunc_t **funcarray);
#define DEFAULT_MAXSHLIBS 10
loader_data_t loader_data;
-/*------------------------------------------------------------------------------------------------------------------------------------------------*/
-/* LOADER parameters */
-/* optname helpstr paramflags XXXptr defXXXval type numelt */
-/*------------------------------------------------------------------------------------------------------------------------------------------------*/
+/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
+/* LOADER parameters */
+/* optname helpstr paramflags XXXptr defXXXval type numelt check func*/
+/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
#define LOADER_PARAMS_DESC { \
-{"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0}, \
-{"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs), defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0}, \
+{"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0, NULL},\
+{"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs), defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0, NULL}\
}
/*-------------------------------------------------------------------------------------------------------------*/
#else /* LOAD_MODULE_SHLIB_MAIN */
-extern int load_module_shlib(char *modname, loader_shlibfunc_t *farray, int numf);
+extern int load_module_shlib(char *modname, loader_shlibfunc_t *farray, int numf, void *initfunc_arg);
extern void * get_shlibmodule_fptr(char *modname, char *fname);
extern loader_data_t loader_data;
#endif /* LOAD_MODULE_SHLIB_MAIN */
diff --git a/common/utils/msc/msc.c b/common/utils/msc/msc.c
index bb88b9b4b6..8ff8846b70 100644
--- a/common/utils/msc/msc.c
+++ b/common/utils/msc/msc.c
@@ -32,11 +32,15 @@
#include
#include
+#define MSC_LIBRARY
+#include "msc.h"
+
#include "liblfds611.h"
#include "intertask_interface.h"
#include "timer.h"
-#include "msc.h"
+
+
#include "assertions.h"
//-------------------------------
@@ -67,8 +71,8 @@ void *msc_task(void *args_p)
//------------------------------------------------------------------------------
{
MessageDef *received_message_p = NULL;
- const char *msg_name = NULL;
- instance_t instance = 0;
+// const char *msg_name = NULL;
+// instance_t instance = 0;
long timer_id;
itti_mark_task_ready(TASK_MSC);
@@ -88,9 +92,9 @@ void *msc_task(void *args_p)
itti_receive_msg(TASK_MSC, &received_message_p);
if (received_message_p != NULL) {
- msg_name = ITTI_MSG_NAME (received_message_p);
- instance = ITTI_MSG_INSTANCE (received_message_p);
-
+// msg_name = ITTI_MSG_NAME (received_message_p);
+// instance = ITTI_MSG_INSTANCE (received_message_p);
+
switch (ITTI_MSG_ID(received_message_p)) {
case TIMER_HAS_EXPIRED: {
@@ -571,4 +575,17 @@ error_event:
free(new_item_p);
}
+//------------------------------------------------------------------------------
+// function called when oai loader loads the msc shared lib
+int msc_autoinit(msc_interface_t *msc_interface)
+//------------------------------------------------------------------------------
+ {
+ msc_interface->msc_init = msc_init;
+ msc_interface->msc_start_use = msc_start_use;
+ msc_interface->msc_end = msc_end;
+ msc_interface->msc_log_event = msc_log_event;
+ msc_interface->msc_log_message = msc_log_message;
+ msc_interface->msc_loaded = 1;
+ return 0;
+ }
diff --git a/common/utils/msc/msc.h b/common/utils/msc/msc.h
index 4493a5239a..78eb6cdb08 100644
--- a/common/utils/msc/msc.h
+++ b/common/utils/msc/msc.h
@@ -73,7 +73,23 @@ typedef enum {
#define MSC_AS_TIME_ARGS(CTXT_Pp) \
(CTXT_Pp)->frame, \
(CTXT_Pp)->subframe
-#if defined(MESSAGE_CHART_GENERATOR)
+
+typedef int(*msc_init_t)(const msc_env_t, const int );
+typedef void(*msc_start_use_t)(void );
+typedef void(*msc_end_t)(void);
+typedef void(*msc_log_event_t)(const msc_proto_t,char *, ...);
+typedef void(*msc_log_message_t)(const char * const, const msc_proto_t, const msc_proto_t,
+ const uint8_t* const, const unsigned int, char * , ...);
+typedef struct msc_interface {
+ int msc_loaded;
+ msc_init_t msc_init;
+ msc_start_use_t msc_start_use;
+ msc_end_t msc_end;
+ msc_log_event_t msc_log_event;
+ msc_log_message_t msc_log_message;
+} msc_interface_t;
+
+#ifdef MSC_LIBRARY
int msc_init(const msc_env_t envP, const int max_threadsP);
void msc_start_use(void);
void msc_flush_messages(void);
@@ -88,22 +104,17 @@ void msc_log_message(
const unsigned int num_bytes,
char *format, ...);
-#define MSC_INIT(arg1,arg2) msc_init(arg1,arg2)
-#define MSC_START_USE msc_start_use
-#define MSC_END msc_end
-#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...) msc_log_event(mScPaRaMs, fORMAT, ##aRGS)
-#define MSC_LOG_RX_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("<-",rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, ##aRGS)
-#define MSC_LOG_RX_DISCARDED_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("x-",rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, ##aRGS)
-#define MSC_LOG_TX_MESSAGE(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("->",sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, ##aRGS)
-#define MSC_LOG_TX_MESSAGE_FAILED(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) msc_log_message("-x",sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, ##aRGS)
#else
-#define MSC_INIT(arg1,arg2)
-#define MSC_START_USE(mScPaRaMs)
-#define MSC_END(mScPaRaMs)
-#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...)
-#define MSC_LOG_RX_MESSAGE(mScPaRaMs, fORMAT, aRGS...)
-#define MSC_LOG_RX_DISCARDED_MESSAGE(mScPaRaMs, fORMAT, aRGS...)
-#define MSC_LOG_TX_MESSAGE(mScPaRaMs, fORMAT, aRGS...)
-#define MSC_LOG_TX_MESSAGE_FAILED(mScPaRaMs, fORMAT, aRGS...)
-#endif
+
+msc_interface_t msc_interface;
+#define MSC_INIT(arg1,arg2) if(msc_interface.msc_loaded) msc_interface.msc_init(arg1,arg2)
+#define MSC_START_USE if(msc_interface.msc_loaded) msc_interface.msc_start_use
+#define MSC_END if(msc_interface.msc_loaded) msc_interface.msc_end
+#define MSC_LOG_EVENT(mScPaRaMs, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_event(mScPaRaMs, fORMAT, ##aRGS)
+#define MSC_LOG_RX_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("<-",rECEIVER, sENDER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
+#define MSC_LOG_RX_DISCARDED_MESSAGE(rECEIVER, sENDER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("x-",rECEIVER, sENDER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
+#define MSC_LOG_TX_MESSAGE(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("->",sENDER, rECEIVER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
+#define MSC_LOG_TX_MESSAGE_FAILED(sENDER, rECEIVER, bYTES, nUMbYTES, fORMAT, aRGS...) if(msc_interface.msc_loaded) msc_interface.msc_log_message("-x",sENDER, rECEIVER, (const uint8_t *)bYTES, nUMbYTES, fORMAT, ##aRGS)
#endif
+
+#endif
diff --git a/common/utils/telnetsrv/telnetsrv_proccmd.c b/common/utils/telnetsrv/telnetsrv_proccmd.c
index 519c222114..ba1b011513 100644
--- a/common/utils/telnetsrv/telnetsrv_proccmd.c
+++ b/common/utils/telnetsrv/telnetsrv_proccmd.c
@@ -199,28 +199,29 @@ int proccmd_show(char *buf, int debug, telnet_printfunc_t prnt)
print_threads(buf,debug,prnt);
}
if (strcasestr(buf,"loglvl") != NULL) {
- prnt(" component level enabled\n");
+ prnt("\n component level enabled output\n");
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
if (g_log->log_component[i].name != NULL) {
- prnt("%02i %17.17s:%10.10s %s\n",i ,g_log->log_component[i].name,
- map_int_to_str(log_level_names,g_log->log_component[i].level),
- ((g_log->log_component[i].interval>0)?"Y":"N") );
+ prnt("%02i %17.17s:%10.10s %s %s\n",i ,g_log->log_component[i].name,
+ map_int_to_str(log_level_names,(g_log->log_component[i].level>=0)?g_log->log_component[i].level:g_log->log_component[i].savedlevel),
+ ((g_log->log_component[i].level>=0)?"Y":"N"),
+ ((g_log->log_component[i].filelog>0)?g_log->log_component[i].filelog_name:"stdout"));
}
}
}
if (strcasestr(buf,"logopt") != NULL) {
- prnt(" option enabled\n");
+ prnt("\n option enabled\n");
for (int i=0; log_options[i].name != NULL; i++) {
prnt("%02i %17.17s %10.10s \n",i ,log_options[i].name,
((g_log->flag & log_options[i].value)?"Y":"N") );
}
}
if (strcasestr(buf,"dbgopt") != NULL) {
- prnt(" option debug matlab\n");
+ prnt("\n module debug dumpfile\n");
for (int i=0; log_maskmap[i].name != NULL ; i++) {
- prnt("%02i %17.17s %5.5s %5.5s\n",i ,log_maskmap[i].name,
+ prnt("%02i %17.17s %5.5s %5.5s\n",i ,log_maskmap[i].name,
((g_log->debug_mask & log_maskmap[i].value)?"Y":"N"),
- ((g_log->matlab_mask & log_maskmap[i].value)?"Y":"N") );
+ ((g_log->dump_mask & log_maskmap[i].value)?"Y":"N") );
}
}
if (strcasestr(buf,"config") != NULL) {
@@ -337,15 +338,15 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
prnt("Available log levels: \n ");
for (int i=0; log_level_names[i].name != NULL; i++)
prnt("%s ",log_level_names[i].name);
- prnt("\n");
+ prnt("\n\n");
prnt("Available display options: \n ");
for (int i=0; log_options[i].name != NULL; i++)
prnt("%s ",log_options[i].name);
- prnt("\n");
- prnt("Available debug or matlab options: \n ");
+ prnt("\n\n");
+ prnt("Available debug and dump options: \n ");
for (int i=0; log_maskmap[i].name != NULL; i++)
prnt("%s ",log_maskmap[i].name);
- prnt("\n");
+ prnt("\n\n");
proccmd_show("loglvl",debug,prnt);
proccmd_show("logopt",debug,prnt);
proccmd_show("dbgopt",debug,prnt);
@@ -377,7 +378,7 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
else if (l == 2 && strcmp(logparam,"debug") == 0){
optbit=map_str_to_int(log_maskmap,opt);
if (optbit < 0) {
- prnt("debug flag %s unknown\n",opt);
+ prnt("module %s unknown\n",opt);
} else {
if (idx1 > 0)
SET_LOG_DEBUG(optbit);
@@ -386,42 +387,51 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
proccmd_show("dbgopt",debug,prnt);
}
}
- else if (l == 2 && strcmp(logparam,"matlab") == 0){
+ else if (l == 2 && strcmp(logparam,"dump") == 0){
optbit=map_str_to_int(log_maskmap,opt);
if (optbit < 0) {
- prnt("matlab flag %s unknown\n",opt);
+ prnt("module %s unknown\n",opt);
} else {
if (idx1 > 0)
- SET_LOG_MATLAB(optbit);
+ SET_LOG_DUMP(optbit);
else
- CLEAR_LOG_MATLAB(optbit);
+ CLEAR_LOG_DUMP(optbit);
proccmd_show("dbgopt",debug,prnt);
}
}
if (logparam != NULL) free(logparam);
if (opt != NULL) free(opt);
} else if ( s == 3 && logsubcmd != NULL) {
- int level, interval;
+ int level, enable,filelog;
char *tmpstr=NULL;
char *logparam=NULL;
int l;
- level = interval = -1;
+ level = OAILOG_DISABLE - 1;
+ filelog = -1;
+ enable=-1;
l=sscanf(logsubcmd,"%m[^'_']_%m[^'_']",&logparam,&tmpstr);
if (debug > 0)
prnt("l=%i, %s %s\n",l,((logparam==NULL)?"\"\"":logparam), ((tmpstr==NULL)?"\"\"":tmpstr));
if (l ==2 ) {
if (strcmp(logparam,"level") == 0) {
level=map_str_to_int(log_level_names,tmpstr);
- if (level < 0) prnt("level %s unknown\n",tmpstr);
+ if (level < 0) {
+ prnt("level %s unknown\n",tmpstr);
+ level=OAILOG_DISABLE - 1;
+ }
} else {
prnt("%s%s unknown log sub command \n",logparam, tmpstr);
}
} else if (l ==1 ) {
if (strcmp(logparam,"enable") == 0) {
- interval = 1;
+ enable=1;
} else if (strcmp(logparam,"disable") == 0) {
- interval = 0;
+ level=OAILOG_DISABLE;
+ } else if (strcmp(logparam,"file") == 0) {
+ filelog = 1 ;
+ } else if (strcmp(logparam,"nofile") == 0) {
+ filelog = 0 ;
} else {
prnt("%s%s unknown log sub command \n",logparam, tmpstr);
}
@@ -431,20 +441,18 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
if (logparam != NULL) free(logparam);
if (tmpstr != NULL) free(tmpstr);
for (int i=idx1; i<=idx2 ; i++) {
- if (level < 0) {
- level=g_log->log_component[i].level;
- }
- if (interval < 0) {
- interval=g_log->log_component[i].interval;
- }
- set_log(i, level, interval);
- prnt("log level comp %i %s set to %s (%s)\n",
- i,((g_log->log_component[i].name==NULL)?"":g_log->log_component[i].name),
- map_int_to_str(log_level_names,g_log->log_component[i].level),
- ((g_log->log_component[i].interval>0)?"enabled":"disabled"));
-
-
- }
+ if (level >= OAILOG_DISABLE)
+ set_log(i, level);
+ else if ( enable == 1)
+ set_log(i,g_log->log_component[i].savedlevel);
+ else if ( filelog == 1 ) {
+ set_component_filelog(i);
+ } else if ( filelog == 0 ) {
+ close_component_filelog(i);
+ }
+
+ }
+ proccmd_show("loglvl",debug,prnt);
} else {
prnt("%s: wrong log command...\n",buf);
}
diff --git a/common/utils/telnetsrv/telnetsrv_proccmd.h b/common/utils/telnetsrv/telnetsrv_proccmd.h
index 409484455c..1a0a8d25dc 100644
--- a/common/utils/telnetsrv/telnetsrv_proccmd.h
+++ b/common/utils/telnetsrv/telnetsrv_proccmd.h
@@ -48,13 +48,15 @@ telnetshell_vardef_t proc_vardef[] = {
show: display current log configuration \n\
online, noonline: enable or disable console logs \n\
enable, disable id1-id2: enable or disable logs for components index id1 to id2 \n\
+ file, nofile id1-id2: enable or disable redirecting logs to file for components index id1 to id2 \n\
+ logfile name depends on component name and is printed in the show command \n\
level_ id1-id2: set log level to for components index id1 to id2 \n\
-use the show command to get the authorized values for and the list of component \
-indexes that can be used for id1 and id2 \n\
+ use the show command to get the authorized values for \n\
+ and the list of component indexes that can be used for id1 and id2 \n\
print_ <0|1> disable or enable the \"opt\" log option, use the show command to get \
-the available options\n\
- matlab_ debug_ disable or enable the debug code or matlab file generation \
-for \"func\" function. use the show command to get the available options\n"
+ the available options\n\
+ dump_ debug_ disable or enable the debug file generation or debug code\
+ for \"mod\" module. use the show command to get the available modules\n"
#define PROCCMD_THREAD_HELP_STRING " thread sub commands: \n\
aff : set affinity of thread to core \n\
diff --git a/openair1/PHY/CODING/coding_load.c b/openair1/PHY/CODING/coding_load.c
index a895d9648e..30b876c654 100644
--- a/openair1/PHY/CODING/coding_load.c
+++ b/openair1/PHY/CODING/coding_load.c
@@ -130,7 +130,7 @@ int load_codinglib(void) {
shlib_fdesc[ENCODE_SSE_FPTRIDX].fname= "threegpplte_turbo_encoder_sse";
shlib_fdesc[ENCODE_C_FPTRIDX].fname= "threegpplte_turbo_encoder";
shlib_fdesc[ENCODE_INIT_SSE_FPTRIDX].fname= "init_encoder_sse";
- ret=load_module_shlib("coding",shlib_fdesc,DECODE_NUM_FPTR);
+ ret=load_module_shlib("coding",shlib_fdesc,DECODE_NUM_FPTR,NULL);
if (ret < 0) exit_fun("Error loading coding library");
/* execute encoder/decoder init functions */
diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c
index ec3dda3372..a26d00491c 100644
--- a/openair1/PHY/INIT/lte_init.c
+++ b/openair1/PHY/INIT/lte_init.c
@@ -450,11 +450,11 @@ void phy_config_sib2_eNB(uint8_t Mod_id,
} else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
fp->MBSFN_config[i].fourFrames_flag = 1;
fp->MBSFN_config[i].mbsfn_SubframeConfig =
- mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]|
+ mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]|
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
- (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]<<16);
+ (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]<<16);
- LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %d\n", i,
+ LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %x\n", i,
fp->MBSFN_config[i].mbsfn_SubframeConfig);
}
}
diff --git a/openair1/PHY/INIT/lte_init_ue.c b/openair1/PHY/INIT/lte_init_ue.c
index e8f606495a..7a4461c88a 100644
--- a/openair1/PHY/INIT/lte_init_ue.c
+++ b/openair1/PHY/INIT/lte_init_ue.c
@@ -165,11 +165,11 @@ void phy_config_sib2_ue(module_id_t Mod_id,int CC_id,
} else if (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames) { // 24-bit subframe configuration
fp->MBSFN_config[i].fourFrames_flag = 1;
fp->MBSFN_config[i].mbsfn_SubframeConfig =
- mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]|
+ mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]|
(mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[1]<<8)|
- (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[2]<<16);
+ (mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]<<16);
- LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %d\n", i,
+ LOG_I(PHY, "[CONFIG] MBSFN_SubframeConfig[%d] pattern is %x\n", i,
fp->MBSFN_config[i].mbsfn_SubframeConfig);
}
}
diff --git a/openair1/PHY/INIT/lte_parms.c b/openair1/PHY/INIT/lte_parms.c
index 3b8a26125d..03f226c637 100644
--- a/openair1/PHY/INIT/lte_parms.c
+++ b/openair1/PHY/INIT/lte_parms.c
@@ -20,7 +20,7 @@
*/
#include "phy_init.h"
-#include "log.h"
+#include "common/utils/LOG/log.h"
uint16_t dl_S_table_normal[10]={3,9,10,11,12,3,9,10,11,6};
uint16_t dl_S_table_extended[10]={3,8,9,10,3,8,9,5,0,0};
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
index e268a5b061..516cb32999 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c
@@ -61,8 +61,8 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
temp = 0;
for (aa=0; aanb_antennas_rx; aa++) {
- Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<2)];
- Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<2)];
+ Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<1)];
+ Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<1)];
temp += (Re*Re/2) + (Im*Im/2);
}
@@ -81,7 +81,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
// do not filter to have proactive timing adjustment
max_pos_fil = max_pos;
- if(subframe == 6)
+ if(subframe == 5)
{
diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3);
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c
index 732db1fa4e..c912c88934 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync_ue.c
@@ -62,8 +62,8 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
temp = 0;
for (aa=0; aanb_antennas_rx; aa++) {
- Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<2)];
- Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<2)];
+ Re = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[(i<<1)];
+ Im = ((int16_t*)ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].dl_ch_estimates_time[eNB_id][aa])[1+(i<<1)];
temp += (Re*Re/2) + (Im*Im/2);
}
@@ -82,7 +82,7 @@ void lte_adjust_synch(LTE_DL_FRAME_PARMS *frame_parms,
// do not filter to have proactive timing adjustment
max_pos_fil = max_pos;
- if(subframe == 6)
+ if(subframe == 5)
{
diff = max_pos_fil - (frame_parms->nb_prefix_samples>>3);
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
index 805119c1e1..faffa3d88a 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
@@ -274,11 +274,11 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
-LOG_M_BEGIN(DEBUG_LTEESTIM);
- LOG_M("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1);
- LOG_M("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1);
- LOG_M("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1);
-LOG_M_END
+ if ( LOG_DUMPFLAG(DEBUG_LTEESTIM)){
+ LOG_M("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1);
+ LOG_M("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1);
+ LOG_M("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1);
+ }
return (1);
}
@@ -460,18 +460,18 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
LOG_I(PHY,"[UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d (%d dB)\n",sync_source,peak_pos,peak_val,dB_fixed(peak_val)/2);
-LOG_M_BEGIN(DEBUG_LTEESTIM)
-static int debug_cnt;
- if (debug_cnt == 0) {
- LOG_M("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2);
- LOG_M("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2);
- LOG_M("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2);
- LOG_M("rxdata0.m","rxd0",rxdata[0],length<<1,1,1);
- // exit(-1);
- } else {
+ if ( LOG_DUMPFLAG(DEBUG_LTEESTIM)){
+ static int debug_cnt;
+ if (debug_cnt == 0) {
+ LOG_M("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2);
+ LOG_M("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2);
+ LOG_M("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2);
+ LOG_M("rxdata0.m","rxd0",rxdata[0],length<<1,1,1);
+ // exit(-1);
+ } else {
debug_cnt++;
}
-LOG_M_END
+}
return(peak_pos);
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
index bf22802145..2e4f3e6036 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
@@ -23,7 +23,7 @@
#include "PHY/defs_UE.h"
#include "PHY/phy_extern_ue.h"
-#include "log.h"
+#include "common/utils/LOG/log.h"
#include "PHY/sse_intrin.h"
//#define k1 1000
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
index 1eabfd6c36..284a22e2e6 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
@@ -25,9 +25,9 @@
#include "PHY/defs_eNB.h"
#include "PHY/defs_UE.h"
#include "PHY/impl_defs_top.h"
-
+#include "common/utils/LOG/log.h"
//extern unsigned int lte_gold_table[3][20][2][14];
-//#define DEBUG_DL_CELL_SPEC
+
@@ -64,7 +64,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
else if ((p==1) && (l>0))
nu = 0;
else {
- printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
+ LOG_E(PHY,"lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
return(-1);
}
@@ -85,19 +85,19 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
// this is r_mprime from 3GPP 36-211 6.10.1.2
output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
-#ifdef DEBUG_DL_CELL_SPEC
- printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
- Ns,l,m,mprime_dword,mprime_qpsk_symb);
- printf("index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
-#endif
+ if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
+ LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
+ Ns,l,m,mprime_dword,mprime_qpsk_symb);
+ LOG_I(PHY,"index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
+ }
mprime++;
-#ifdef DEBUG_DL_CELL_SPEC
+ if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
if (m<4)
- printf("Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
+ LOG_I(PHY,"Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
-#endif
+ }
k+=6;//b
if (k >= eNB->frame_parms.ofdm_symbol_size) {
@@ -105,7 +105,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
k-=eNB->frame_parms.ofdm_symbol_size;
}
- // printf("** k %d\n",k);
+ // LOG_I(PHY,"** k %d\n",k);
}
return(0);
@@ -143,7 +143,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *eNB,
else if ((p==1) && (l>0))
nu = 0;
else {
- printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
+ LOG_E(PHY,"lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
return(-1);
}
@@ -168,27 +168,24 @@ int lte_dl_cell_spec(PHY_VARS_eNB *eNB,
// this is r_mprime from 3GPP 36-211 6.10.1.2
output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
-#ifdef DEBUG_DL_CELL_SPEC
- printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
- Ns,l,m,mprime_dword,mprime_qpsk_symb);
- printf("index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
-#endif
-
+ if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
+ LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
+ Ns,l,m,mprime_dword,mprime_qpsk_symb);
+ LOG_I(PHY,"index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
+ }
mprime++;
-#ifdef DEBUG_DL_CELL_SPEC
+ if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
+ if (m<4)
+ LOG_I(PHY,"Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
+ }
- if (m<4)
- printf("Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
-
-#endif
k+=6;
-
if (k >= eNB->frame_parms.ofdm_symbol_size) {
k++; // skip DC carrier
k-=eNB->frame_parms.ofdm_symbol_size;
}
- // printf("** k %d\n",k);
+ // LOG_I(PHY,"** k %d\n",k);
}
return(0);
@@ -231,21 +228,21 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *ue,
// this is r_mprime from 3GPP 36-211 6.10.1.2
output[k] = qpsk[(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
-#ifdef DEBUG_DL_CELL_SPEC
- printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
- Ns,l,m,mprime_dword,mprime_qpsk_symb);
- printf("index = %d (k %d)\n",(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
-#endif
+ if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
+ LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
+ Ns,l,m,mprime_dword,mprime_qpsk_symb);
+ LOG_I(PHY,"index = %d (k %d)\n",(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
+ }
mprime++;
-#ifdef DEBUG_DL_CELL_SPEC
+ if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
- if (m<4)
- printf("Ns %d l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
+ if (m<4)
+ LOG_I(PHY,"Ns %d l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
-#endif
- k++;
- // printf("** k %d\n",k);
+ }
+ k++;
+ // LOG_I(PHY,"** k %d\n",k);
}
return(0);
diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
index 2c5240e143..1b9c17133c 100644
--- a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
+++ b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
@@ -36,7 +36,7 @@
#include "lte_refsig.h"
#include "PHY/defs_eNB.h"
#include "PHY/defs_UE.h"
-#include "log.h"
+#include "common/utils/LOG/log.h"
#include "PHY/impl_defs_top.h"
//extern unsigned int lte_gold_table[3][20][2][14];
diff --git a/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c b/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c
index 14def309b7..69dbb705db 100644
--- a/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c
+++ b/openair1/PHY/LTE_REFSIG/lte_gold_mbsfn.c
@@ -54,9 +54,9 @@ void lte_gold_mbsfn(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_mbsfn_tabl
for (l=0; l<3; l++) {
if (l==0)
- x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + 2 + (7*(1+(sfn>>1)))))<<9); //cinit
+ x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + 2 + (7*(1+(sfn<<1)))))<<9); //cinit
else
- x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + ((l-1)<<2) + (7*(2+(sfn>>1)))))<<9); //cinit
+ x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + ((l-1)<<2) + (7*(2+(sfn<<1)))))<<9); //cinit
//x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit
//n = 0
diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c
index 1c015b1c84..520488664d 100755
--- a/openair1/PHY/LTE_TRANSPORT/dci.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci.c
@@ -346,6 +346,13 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
y[0] = &yseq0[0];
y[1] = &yseq1[0];
+#if BASIC_SIMULATOR
+ /* this should be the normal case
+ * but it has to be validated for all the various cases
+ * so let's just do it for the basic simulator
+ */
+ memset(e, 2, DCI_BITS_MAX);
+#else
#if 1
// reset all bits to , here we set elements as 2
// memset(e, 2, DCI_BITS_MAX);
@@ -358,6 +365,7 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
* (not sure about this, to be checked somehow)
*/
//memset(e, 0, DCI_BITS_MAX);
+#endif /* BASIC_SIMULATOR */
e_ptr = e;
diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
index c3a309a424..c33d9efe63 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c
@@ -220,7 +220,7 @@ void fill_pdcch_order(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_a
break;
}
- LOG_I(PHY,"%d.%d: DCI 1A: rnti %x, PDCCH order to do PRACH\n",
+ LOG_T(PHY,"%d.%d: DCI 1A: rnti %x, PDCCH order to do PRACH\n",
proc->frame_tx, proc->subframe_tx, rel8->rnti);
}
@@ -1791,7 +1791,7 @@ void fill_dci0(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc,
#ifdef T_TRACER
T(T_ENB_PHY_ULSCH_UE_DCI, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe),
- T_INT(pdu->dci_pdu_rel8.rnti), T_INT(((frame*10+subframe+4) % 8) /* TODO: correct harq pid */),
+ T_INT(pdu->dci_pdu_rel8.rnti), T_INT(pdu->dci_pdu_rel8.harq_pid),
T_INT(mcs), T_INT(-1 /* TODO: remove round? */),
T_INT(pdu->dci_pdu_rel8.resource_block_start),
T_INT(pdu->dci_pdu_rel8.number_of_resource_block),
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
index 6f1913ff91..bfdcdc1e94 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
@@ -165,10 +165,19 @@ int allocate_REs_in_RB_no_pilots_QPSK_siso(PHY_VARS_eNB* phy_vars_eNB,
uint32_t tti_offset;
uint8_t re;
uint8_t *x0p;
+ uint8_t first_re,last_re;
+
+ last_re=12;
+ first_re=0;
+ if (skip_half==1)
+ last_re=6;
+ else if (skip_half==2)
+ first_re=6;
+ re=first_re;
if (skip_dc == 0) {
- for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset,re=0;
- re<12;
+ for (x0p=&x0[*jj],tti_offset=symbol_offset+re_offset+re;
+ reN_RB_DL==25)
+ //allocate_REs = allocate_REs_in_RB;
switch (mod_order1) {
case 2:
@@ -2486,8 +2587,6 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
skip_half = check_skiphalf(rb,subframe_offset,frame_parms,l,nsymb);
skip_dc = check_skip_dc(rb,frame_parms);
-
-
if (dlsch0) {
if (dlsch0_harq->Nlayers>1) {
LOG_E(PHY,"Nlayers %d: re_offset %d, symbol %d offset %d\n",dlsch0_harq->Nlayers,re_offset,l,symbol_offset);
diff --git a/openair1/PHY/LTE_TRANSPORT/pmch_common.c b/openair1/PHY/LTE_TRANSPORT/pmch_common.c
index 1d12c79621..a4821a420f 100644
--- a/openair1/PHY/LTE_TRANSPORT/pmch_common.c
+++ b/openair1/PHY/LTE_TRANSPORT/pmch_common.c
@@ -27,6 +27,7 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par
uint32_t period;
uint8_t i;
+ uint8_t j;
// LOG_D(PHY,"is_pmch_subframe: frame %d, subframe %d, num_MBSFN_config %d\n",
// frame,subframe,frame_parms->num_MBSFN_config);
@@ -34,8 +35,8 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par
for (i=0; inum_MBSFN_config; i++) { // we have at least one MBSFN configuration
period = 1<MBSFN_config[i].radioframeAllocationPeriod;
- if ((frame % period) == frame_parms->MBSFN_config[i].radioframeAllocationOffset) {
- if (frame_parms->MBSFN_config[i].fourFrames_flag == 0) {
+ if (frame_parms->MBSFN_config[i].fourFrames_flag == 0) {
+ if ((frame % period) == frame_parms->MBSFN_config[i].radioframeAllocationOffset) {
if (frame_parms->frame_type == FDD) {
switch (subframe) {
@@ -108,9 +109,96 @@ int is_pmch_subframe(uint32_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_par
break;
}
}
+ }
- } else { // handle 4 frames case
+ } else { // handle 4 frames case
+ for(j=0;j<4;j++) {
+ if ((frame % period) == (frame_parms->MBSFN_config[i].radioframeAllocationOffset + j)) {
+ if (frame_parms->frame_type == FDD) {
+ switch (subframe) {
+ case 1:
+ if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x800000>>(j*6))) > 0) {
+ //LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x800000>>(j*6));
+ return(1);
+ }
+
+ break;
+
+ case 2:
+ if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x400000>>(j*6))) > 0) {
+ //LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x400000>>(j*6));
+ return(1);
+ }
+
+ break;
+
+ case 3:
+ if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x200000>>(j*6))) > 0) {
+ //LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x200000>>(j*6));
+ return(1);
+ }
+
+ break;
+
+ case 6:
+ if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x100000>>(j*6))) > 0) {
+ //LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x100000>>(j*6));
+ return(1);
+ }
+
+ break;
+
+ case 7:
+ if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x80000>>(j*6))) > 0) {
+ //LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x80000>>(j*6));
+ return(1);
+ }
+
+ break;
+
+ case 8:
+ if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig) & (0x40000>>(j*6))) > 0) {
+ //LOG_E(PHY,"SubframeConfig<<6(%x),MBSFN_FDD_SF1(%x)\n",frame_parms->MBSFN_config[i].mbsfn_SubframeConfig,0x40000>>(j*6));
+ return(1);
+ }
+
+ break;
+ }
+ } else {
+ switch (subframe) {
+ case 3:
+ if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF3) > 0)
+ return(1);
+
+ break;
+
+ case 4:
+ if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF4) > 0)
+ return(1);
+
+ break;
+
+ case 7:
+ if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF7) > 0)
+ return(1);
+
+ break;
+
+ case 8:
+ if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF8) > 0)
+ return(1);
+
+ break;
+
+ case 9:
+ if (((frame_parms->MBSFN_config[i].mbsfn_SubframeConfig>>j*6) & MBSFN_TDD_SF9) > 0)
+ return(1);
+
+ break;
+ }
+ }
+ }
}
}
}
diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c
index db6f04f788..ec0b7db4ad 100644
--- a/openair1/PHY/LTE_TRANSPORT/prach.c
+++ b/openair1/PHY/LTE_TRANSPORT/prach.c
@@ -153,25 +153,24 @@ void rx_prach0(PHY_VARS_eNB *eNB,
subframe = eNB->proc.subframe_prach_br;
prachF = eNB->prach_vars_br.prachF;
rxsigF = eNB->prach_vars_br.rxsigF[ce_level];
-LOG_DEBUG_BEGIN(PRACH)
- if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d, rootSequenceIndex %d, repetition number %d,numRepetitionsPrePreambleAttempt %d\n",
- br_flag,ce_level,ru->proc.frame_prach,subframe,
- fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],
- prach_ConfigIndex,rootSequenceIndex,
- eNB->prach_vars_br.repetition_number[ce_level],
- fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]);
-LOG_DEBUG_END
- }
- else
+ if (LOG_DEBUGFLAG(PRACH)){
+ if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d, rootSequenceIndex %d, repetition number %d,numRepetitionsPrePreambleAttempt %d\n",
+ br_flag,ce_level,ru->proc.frame_prach,subframe,
+ fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],
+ prach_ConfigIndex,rootSequenceIndex,
+ eNB->prach_vars_br.repetition_number[ce_level],
+ fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]);
+ }
+ } else
#endif
{
prach_ifftp = eNB->prach_vars.prach_ifft[0];
subframe = eNB->proc.subframe_prach;
prachF = eNB->prach_vars.prachF;
rxsigF = eNB->prach_vars.rxsigF[0];
-LOG_DEBUG_BEGIN(PRACH)
- if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n", subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(PRACH)){
+ if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n", subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex);
+ }
}
}
else {
@@ -179,20 +178,19 @@ LOG_DEBUG_END
if (br_flag == 1) {
subframe = ru->proc.subframe_prach_br;
rxsigF = ru->prach_rxsigF_br[ce_level];
-LOG_DEBUG_BEGIN(PRACH)
- if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
- br_flag,ce_level,ru->proc.frame_prach,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex);
-LOG_DEBUG_END
- }
- else
+ if (LOG_DEBUGFLAG(PRACH)){
+ if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
+ br_flag,ce_level,ru->proc.frame_prach,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex);
+ }
+ } else
#endif
{
subframe = ru->proc.subframe_prach;
rxsigF = ru->prach_rxsigF;
-LOG_DEBUG_BEGIN(PRACH)
- if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
- subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(PRACH)){
+ if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
+ subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex);
+ }
}
}
@@ -204,27 +202,25 @@ LOG_DEBUG_END
// DJP - indexing below in subframe zero takes us off the beginning of the array???
prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset];
-LOG_M_BEGIN(PRACH)
- int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti);
- int8_t dbEn0 = dB_fixed(en0);
- int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB;
- char buffer[80];
- if (dbEn0>32 && prach[0]!= NULL)
- {
- static int counter=0;
- sprintf(buffer, "%s%d", "/tmp/prach_rx",counter);
- LOG_M(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13);
+ if (LOG_DUMPFLAG(PRACH)){
+ int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti);
+ int8_t dbEn0 = dB_fixed(en0);
+ int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB;
+ char buffer[80];
+ if (dbEn0>32 && prach[0]!= NULL) {
+ static int counter=0;
+ sprintf(buffer, "%s%d", "/tmp/prach_rx",counter);
+ LOG_M(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13);
+ }
+ if (dB_fixed(en0)>32) {
+ sprintf(buffer, "rach_dBm:%d",rach_dBm);
+ if (prach[0]!= NULL) LOG_M("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1);
+ LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d %s rxdata:%p index:%d\n",
+ ru->idx,br_flag,ce_level,ru->proc.frame_prach,subframe,fp->samples_per_tti,
+ prach[aa],dbEn0,ru->N_TA_offset,buffer,ru->common.rxdata[aa],
+ (subframe*fp->samples_per_tti)-ru->N_TA_offset);
}
- if (dB_fixed(en0)>32)
- {
- sprintf(buffer, "rach_dBm:%d",rach_dBm);
- if (prach[0]!= NULL) LOG_M("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1);
- LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d %s rxdata:%p index:%d\n",
- ru->idx,br_flag,ce_level,ru->proc.frame_prach,subframe,fp->samples_per_tti,
- prach[aa],dbEn0,ru->N_TA_offset,buffer,ru->common.rxdata[aa],
- (subframe*fp->samples_per_tti)-ru->N_TA_offset);
- }
-LOG_M_END
+ }
}
}
@@ -306,9 +302,9 @@ LOG_M_END
if (((eNB!=NULL) && (ru->function != NGFI_RAU_IF4p5))||
((eNB==NULL) && (ru->function == NGFI_RRU_IF4p5))) { // compute the DFTs of the PRACH temporal resources
// Do forward transform
-LOG_DEBUG_BEGIN(PRACH)
- LOG_D(PHY,"rx_prach: Doing FFT for N_RB_UL %d nb_rx:%d Ncp:%d\n",fp->N_RB_UL, nb_rx, Ncp);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(PRACH)) {
+ LOG_D(PHY,"rx_prach: Doing FFT for N_RB_UL %d nb_rx:%d Ncp:%d\n",fp->N_RB_UL, nb_rx, Ncp);
+ }
for (aa=0; aa 60)&&(br_flag==1)) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,n_ra_prb,k,eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(PRACH)) {
+ int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
+ if ((en > 60)&&(br_flag==1)) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,n_ra_prb,k,eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
+ }
}
// in case of RAU and prach received rx_thread wakes up prach
@@ -477,10 +473,10 @@ LOG_DEBUG_END
*max_preamble_energy=0;
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
-LOG_DEBUG_BEGIN(PRACH)
- int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
- if (en>60) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",ru->proc.frame_prach,subframe,preamble_index,br_flag);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(PRACH)){
+ int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
+ if (en>60) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",ru->proc.frame_prach,subframe,preamble_index,br_flag);
+ }
if (restricted_set == 0) {
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
@@ -563,11 +559,11 @@ LOG_DEBUG_END
}
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
-LOG_DEBUG_BEGIN(PRACH)
- int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
- if (en>60) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n",
- ru->proc.frame_prach,subframe,preamble_index,preamble_offset,preamble_shift,br_flag,en);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(PRACH)) {
+ int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
+ if (en>60) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n",
+ ru->proc.frame_prach,subframe,preamble_index,preamble_offset,preamble_shift,br_flag,en);
+ }
log2_ifft_size = 10;
fft_size = 6144;
@@ -589,13 +585,13 @@ LOG_DEBUG_END
}
memset(prachF, 0, sizeof(int16_t)*2*1024 );
-LOG_M_BEGIN(PRACH)
- if (prach[0]!= NULL) LOG_M("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1);
- LOG_M("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1);
- LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1);
- LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1);
-LOG_M_END
-
+ if (LOG_DUMPFLAG(PRACH)) {
+ if (prach[0]!= NULL) LOG_M("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1);
+ LOG_M("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1);
+ LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1);
+ LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1);
+ }
+
for (aa=0;aa>10;
}
-LOG_M_BEGIN(PRACH)
- if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
- if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
-LOG_M_END
+ if (LOG_DUMPFLAG(PRACH)) {
+ if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
+ if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
+ }
}// antennas_rx
} // new dft
@@ -637,10 +633,10 @@ LOG_M_END
eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]))
#endif
{
-LOG_DEBUG_BEGIN(PRACH)
+ if (LOG_DEBUGFLAG(PRACH)){
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
if (en>60) LOG_I(PHY,"frame %d, subframe %d: Checking for peak in time-domain (br_flag %d, en %d)\n",ru->proc.frame_prach,subframe,br_flag,en);
-LOG_DEBUG_END
+ }
preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<>log2_ifft_size)*update_TA/update_TA2;
*max_preamble = preamble_index;
-LOG_DEBUG_BEGIN(PRACH)
- int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
- if ((en>60) && (br_flag==1)) LOG_D(PHY,"frame %d, subframe %d : max_preamble_energy %d, max_preamble_delay %d, max_preamble %d (br_flag %d,ce_level %d, levdB %d, lev %d)\n",ru->proc.frame_prach,subframe,*max_preamble_energy,*max_preamble_delay,*max_preamble,br_flag,ce_level,levdB,lev);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(PRACH)){
+ int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
+ if ((en>60) && (br_flag==1))
+ LOG_D(PHY,"frame %d, subframe %d : max_preamble_energy %d, max_preamble_delay %d, max_preamble %d (br_flag %d,ce_level %d, levdB %d, lev %d)\n",
+ ru->proc.frame_prach,subframe,
+ *max_preamble_energy,*max_preamble_delay,
+ *max_preamble,br_flag,ce_level,levdB,lev);
+ }
}
}
}
}// preamble_index
-LOG_M_BEGIN(PRACH)
- int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
- if (en>60) {
- k = (12*n_ra_prb) - 6*fp->N_RB_UL;
-
- if (k<0) k+=fp->ofdm_symbol_size;
-
- k*=12;
- k+=13;
- k*=2;
-
- if (br_flag == 0) {
- LOG_M("rxsigF.m","prach_rxF",&rxsigF[0][0],12288,1,1);
- LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
- LOG_M("Xu.m","xu",Xu,N_ZC,1,1);
- LOG_M("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1);
- }
- else {
- LOG_E(PHY,"Dumping prach (br_flag %d), k = %d (n_ra_prb %d)\n",br_flag,k,n_ra_prb);
- LOG_M("rxsigF_br.m","prach_rxF_br",&rxsigF[0][0],12288,1,1);
- LOG_M("prach_rxF_comp0_br.m","prach_rxF_comp0_br",prachF,1024,1,1);
- LOG_M("Xu_br.m","xu_br",Xu,N_ZC,1,1);
- LOG_M("prach_ifft0_br.m","prach_t0_br",prach_ifft,1024,1,1);
- exit(-1);
- }
+ if (LOG_DUMPFLAG(PRACH)) {
+ int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
+ if (en>60) {
+ k = (12*n_ra_prb) - 6*fp->N_RB_UL;
+
+ if (k<0) k+=fp->ofdm_symbol_size;
+
+ k*=12;
+ k+=13;
+ k*=2;
+
+ if (br_flag == 0) {
+ LOG_M("rxsigF.m","prach_rxF",&rxsigF[0][0],12288,1,1);
+ LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
+ LOG_M("Xu.m","xu",Xu,N_ZC,1,1);
+ LOG_M("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1);
+ }
+ else {
+ LOG_E(PHY,"Dumping prach (br_flag %d), k = %d (n_ra_prb %d)\n",br_flag,k,n_ra_prb);
+ LOG_M("rxsigF_br.m","prach_rxF_br",&rxsigF[0][0],12288,1,1);
+ LOG_M("prach_rxF_comp0_br.m","prach_rxF_comp0_br",prachF,1024,1,1);
+ LOG_M("Xu_br.m","xu_br",Xu,N_ZC,1,1);
+ LOG_M("prach_ifft0_br.m","prach_t0_br",prach_ifft,1024,1,1);
+ exit(-1);
+ }
- }
-LOG_M_END
+ }
+ } /* LOG_DUMPFLAG(PRACH) */
if (eNB) stop_meas(&eNB->rx_prach);
}
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
index 619d84cee2..adb0d1576f 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
@@ -33,7 +33,6 @@
#include "PHY/defs_eNB.h"
#include "PHY/phy_extern.h"
#include "transport_eNB.h"
-//#define DEBUG_ULSCH
#include "PHY/sse_intrin.h"
#include "transport_common_proto.h"
#include "PHY/LTE_ESTIMATION/lte_estimation.h"
@@ -67,7 +66,7 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH)
- // printf("Doing lte_idft for Msc_PUSCH %d\n",Msc_PUSCH);
+ LOG_T(PHY,"Doing lte_idft for Msc_PUSCH %d\n",Msc_PUSCH);
if (frame_parms->Ncp == 0) { // Normal prefix
z0 = z;
@@ -388,13 +387,13 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH)
for (i=0,ip=0; iN_RB_DL*12),llr128U-(__m128i*)ulsch_llr);
-
for (i=0; i<(nb_rb*3); i++) {
- //printf("%d,%d,%d,%d,%d,%d,%d,%d\n",((int16_t *)rxF)[0],((int16_t *)rxF)[1],((int16_t *)rxF)[2],((int16_t *)rxF)[3],((int16_t *)rxF)[4],((int16_t *)rxF)[5],((int16_t *)rxF)[6],((int16_t *)rxF)[7]);
*(*llrp128) = *rxF;
rxF++;
(*llrp128)++;
@@ -593,7 +589,9 @@ void ulsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
ch_mag =(int16x8_t*)&ul_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
ch_magb =(int16x8_t*)&ul_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)];
#endif
- // printf("symbol %d: mag %d, magb %d\n",symbol,_mm_extract_epi16(ch_mag[0],0),_mm_extract_epi16(ch_magb[0],0));
+ if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
+ LOG_UI(PHY,"symbol %d: mag %d, magb %d\n",symbol,_mm_extract_epi16(ch_mag[0],0),_mm_extract_epi16(ch_magb[0],0));
+ }
for (i=0; i<(nb_rb*3); i++) {
@@ -736,9 +734,9 @@ void ulsch_extract_rbs_single(int32_t **rxdataF,
nb_rb1 = cmin(cmax((int)(frame_parms->N_RB_UL) - (int)(2*first_rb),(int)0),(int)(2*nb_rb)); // 2 times no. RBs before the DC
nb_rb2 = 2*nb_rb - nb_rb1; // 2 times no. RBs after the DC
-#ifdef DEBUG_ULSCH
- printf("ulsch_extract_rbs_single: 2*nb_rb1 = %d, 2*nb_rb2 = %d\n",nb_rb1,nb_rb2);
-#endif
+ if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
+ LOG_UI(PHY,"ulsch_extract_rbs_single: 2*nb_rb1 = %d, 2*nb_rb2 = %d\n",nb_rb1,nb_rb2);
+ }
rxF_ext = &rxdataF_ext[aarx][(symbol*frame_parms->N_RB_UL*12)];
@@ -838,7 +836,7 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
#endif
for (rb=0; rb %d,%d,%d (output_shift %d)\n",symbol,rb,*((int16_t*)&ul_ch_mag128[0]),*((int16_t*)&ul_ch_mag128[1]),*((int16_t*)&ul_ch_mag128[2]),output_shift);
+ LOG_D(PHY,"comp: symbol %d rb %d => %d,%d,%d (output_shift %d)\n",symbol,rb,*((int16_t*)&ul_ch_mag128[0]),*((int16_t*)&ul_ch_mag128[1]),*((int16_t*)&ul_ch_mag128[2]),output_shift);
#elif defined(__arm__)
@@ -1125,10 +1123,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
Qm = ulsch[UE_id]->harq_processes[harq_pid]->Qm;
-#ifdef DEBUG_ULSCH
- printf("rx_ulsch: harq_pid %d, nb_rb %d first_rb %d\n",harq_pid,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,ulsch[UE_id]->harq_processes[harq_pid]->first_rb);
-
-#endif //DEBUG_ULSCH
+ if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
+ LOG_I(PHY,"rx_ulsch: harq_pid %d, nb_rb %d first_rb %d\n",harq_pid,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,ulsch[UE_id]->harq_processes[harq_pid]->first_rb);
+ }
if (ulsch[UE_id]->harq_processes[harq_pid]->nb_rb == 0) {
LOG_E(PHY,"PUSCH (%d/%x) nb_rb=0!\n", harq_pid,ulsch[UE_id]->rnti);
@@ -1137,13 +1134,13 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
-#ifdef DEBUG_ULSCH
- printf("rx_ulsch : symbol %d (first_rb %d,nb_rb %d), rxdataF %p, rxdataF_ext %p\n",l,
+ if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
+ LOG_I(PHY,"rx_ulsch : symbol %d (first_rb %d,nb_rb %d), rxdataF %p, rxdataF_ext %p\n",l,
ulsch[UE_id]->harq_processes[harq_pid]->first_rb,
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
common_vars->rxdataF,
pusch_vars->rxdataF_ext);
-#endif //DEBUG_ULSCH
+ }
ulsch_extract_rbs_single(common_vars->rxdataF,
pusch_vars->rxdataF_ext,
@@ -1179,21 +1176,16 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
pusch_vars->ulsch_power[i] = signal_energy_nodc(pusch_vars->drs_ch_estimates[i],
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)/correction_factor;
- /* printf("%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d) power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_times10(pusch_vars->ulsch_power[i]));
- */
+ LOG_D(PHY,"%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d) power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_times10(pusch_vars->ulsch_power[i]));
+
}
-
- //LOG_M("rxdataF_ext.m","rxF_ext",pusch_vars->rxdataF_ext[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1);
- //LOG_M("ulsch_chest.m","drs_est",pusch_vars->drs_ch_estimates[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1);
-
-
ulsch_channel_level(pusch_vars->drs_ch_estimates,
frame_parms,
avgU,
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
- // printf("[ULSCH] avg[0] %d\n",avgU[0]);
+ LOG_D(PHY,"[ULSCH] avg[0] %d\n",avgU[0]);
avgs = 0;
@@ -1205,9 +1197,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
log2_maxh = (log2_approx(avgs)/2)+ log2_approx(frame_parms->nb_antennas_rx-1)+4;
-#ifdef DEBUG_ULSCH
- printf("[ULSCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgU[0],avgs);
-#endif
+
+ LOG_D(PHY,"[ULSCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgU[0],avgs);
+
for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
@@ -1229,9 +1221,6 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
log2_maxh); // log2_maxh+I0_shift
-
-
-
if (frame_parms->nb_antennas_rx > 1)
ulsch_detection_mrc(frame_parms,
pusch_vars->rxdataF_comp,
@@ -1240,9 +1229,7 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
l,
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
-
-
- // if ((eNB->measurements.n0_power_dB[0]+3)ulsch_power[0]) {
+ // if ((eNB->measurements.n0_power_dB[0]+3)ulsch_power[0])
if (23ulsch_power[0]) {
freq_equalization(frame_parms,
pusch_vars->rxdataF_comp,
@@ -1254,22 +1241,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
}
}
-
-
-
-
- //#ifdef DEBUG_ULSCH
- // Inverse-Transform equalized outputs
- // printf("Doing IDFTs\n");
lte_idft(frame_parms,
(uint32_t*)pusch_vars->rxdataF_comp[0],
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12);
- // printf("Done\n");
- //#endif //DEBUG_ULSCH
-
-
-
-
llrp = (int16_t*)&pusch_vars->llr[0];
@@ -1316,9 +1290,8 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
break;
default:
-#ifdef DEBUG_ULSCH
- printf("ulsch_demodulation.c (rx_ulsch): Unknown Qm!!!!\n");
-#endif //DEBUG_ULSCH
+ LOG_E(PHY,"ulsch_demodulation.c (rx_ulsch): Unknown Qm!!!!\n");
+
break;
}
}
@@ -1329,7 +1302,7 @@ void rx_ulsch_emul(PHY_VARS_eNB *eNB,
eNB_rxtx_proc_t *proc,
uint8_t UE_index)
{
- printf("[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, UE_index %d\n",eNB->Mod_id,proc->subframe_rx,UE_index);
+ LOG_I(PHY,"[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, UE_index %d\n",eNB->Mod_id,proc->subframe_rx,UE_index);
eNB->pusch_vars[UE_index]->ulsch_power[0] = 31622; //=45dB;
eNB->pusch_vars[UE_index]->ulsch_power[1] = 31622; //=45dB;
@@ -1344,7 +1317,7 @@ void rx_ulsch_emul(PHY_VARS_eNB *eNB,
harq_pid = subframe2harq_pid(&eNB->frame_parms,frame,subframe);
- printf("Dumping ULSCH in subframe %d with harq_pid %d, round %d for NB_rb %d, TBS %d, Qm %d, N_symb %d\n",
+ LOG_UI(PHY,"Dumping ULSCH in subframe %d with harq_pid %d, round %d for NB_rb %d, TBS %d, Qm %d, N_symb %d\n",
subframe,harq_pid,round,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS,eNB->ulsch[UE_id]->harq_processes[harq_pid]->Qm,
eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch);
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c
index b9fbcad9c9..e0ea796a82 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c
@@ -179,29 +179,29 @@ void extract_dci1C_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_
uint32_t rballoc=0;
uint8_t mcs=0;
+ uint8_t Ngap=0;
switch (N_RB_DL) {
case 6:
- mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs;
- rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc,6);
-
+ mcs = ((DCI1C_1_5MHz_t *)dci_pdu)->mcs;
+ rballoc = conv_1C_RIV(((DCI1C_1_5MHz_t *)dci_pdu)->rballoc, 6);
break;
case 25:
- mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs;
- rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc,6);
-
+ mcs = ((DCI1C_5MHz_t *)dci_pdu)->mcs;
+ rballoc = conv_1C_RIV(((DCI1C_5MHz_t *)dci_pdu)->rballoc, 25);
break;
case 50:
- mcs = ((DCI1C_10MHz_t *)dci_pdu)->mcs;
- rballoc = conv_1C_RIV(((DCI1C_10MHz_t *)dci_pdu)->rballoc,6);
-
+ mcs = ((DCI1C_10MHz_t *)dci_pdu)->mcs;
+ rballoc = conv_1C_RIV(((DCI1C_10MHz_t *)dci_pdu)->rballoc, 50);
+ Ngap = ((DCI1C_10MHz_t *)dci_pdu)->Ngap;
break;
case 100:
- mcs = ((DCI1C_20MHz_t *)dci_pdu)->mcs;
- rballoc = conv_1C_RIV(((DCI1C_20MHz_t *)dci_pdu)->rballoc,6);
+ mcs = ((DCI1C_20MHz_t *)dci_pdu)->mcs;
+ rballoc = conv_1C_RIV(((DCI1C_20MHz_t *)dci_pdu)->rballoc, 100);
+ Ngap = ((DCI1C_20MHz_t *)dci_pdu)->Ngap;
break;
default:
@@ -211,6 +211,7 @@ void extract_dci1C_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_
pdci_info_extarcted->mcs1 = mcs;
pdci_info_extarcted->rballoc = rballoc;
+ pdci_info_extarcted->Ngap = Ngap;
}
void extract_dci1_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted)
diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c
index e7a7f1a259..45373ab9e2 100644
--- a/openair1/PHY/TOOLS/lte_dfts.c
+++ b/openair1/PHY/TOOLS/lte_dfts.c
@@ -3097,10 +3097,10 @@ void dft128(int16_t *x,int16_t *y,int scale)
dft64((int16_t*)(xtmp),(int16_t*)ytmp,1);
dft64((int16_t*)(xtmp+32),(int16_t*)(ytmp+16),1);
-
- /* LOG_M("dft128a.m","dfta",ytmp,64,1,1);
- LOG_M("dft128b.m","dftb",ytmp+16,64,1,1);*/
-
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("dft128a.m","dfta",ytmp,64,1,1);
+ LOG_M("dft128b.m","dftb",ytmp+16,64,1,1);
+ }
for (i=0; i<16; i++) {
bfly2_16(ytmpp,ytmpp+16,
y128p,y128p+16,
@@ -3149,9 +3149,10 @@ void dft128(int16_t *x,int16_t *y,int scale)
}
-
- /* LOG_M("dft128out.m","dft128",y,128,1,1);
- exit(-1);*/
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("dft128out.m","dft128",y,128,1,1);
+ exit(-1);
+ }
_mm_empty();
_m_empty();
@@ -3176,17 +3177,17 @@ void dft128(int16_t *x,int16_t *y,int scale)
transpose4_ooff_simd256(x256+10,xtmp+5,8);
transpose4_ooff_simd256(x256+12,xtmp+6,8);
transpose4_ooff_simd256(x256+14,xtmp+7,8);
-
- /* LOG_M("dft128ina_256.m","dftina",xtmp,64,1,1);
- LOG_M("dft128inb_256.m","dftinb",xtmp+8,64,1,1);
- */
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("dft128ina_256.m","dftina",xtmp,64,1,1);
+ LOG_M("dft128inb_256.m","dftinb",xtmp+8,64,1,1);
+ }
dft64((int16_t*)(xtmp),(int16_t*)ytmp,1);
dft64((int16_t*)(xtmp+8),(int16_t*)(ytmp+8),1);
-
- /*LOG_M("dft128outa_256.m","dftouta",ytmp,64,1,1);
- LOG_M("dft128outb_256.m","dftoutb",ytmp+8,64,1,1);
- */
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("dft128outa_256.m","dftouta",ytmp,64,1,1);
+ LOG_M("dft128outb_256.m","dftoutb",ytmp+8,64,1,1);
+ }
for (i=0; i<8; i++) {
bfly2_16_256(ytmpp,ytmpp+8,
@@ -3219,9 +3220,10 @@ void dft128(int16_t *x,int16_t *y,int scale)
y256[15] = mulhi_int16_simd256(y256[15],ONE_OVER_SQRT2_Q15_256);
}
-
- /* LOG_M("dft128.m","dft",y256,128,1,1);
- exit(-1);*/
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("dft128.m","dft",y256,128,1,1);
+ exit(-1);
+ }
}
#endif
@@ -5422,10 +5424,11 @@ void dft1536(int16_t *input, int16_t *output, int scale)
tmpo[1][i] = tmpo[1][i<<1];
tmpo[2][i] = tmpo[2][i<<1];
}*/
-
- // LOG_M("out0.m","o0",tmpo[0],2048,1,1);
- // LOG_M("out1.m","o1",tmpo[1],2048,1,1);
- // LOG_M("out2.m","o2",tmpo[2],2048,1,1);
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("dft1536out0.m","o0",tmpo[0],2048,1,1);
+ LOG_M("dft1536out1.m","o1",tmpo[1],2048,1,1);
+ LOG_M("dft1536out2.m","o2",tmpo[2],2048,1,1);
+ }
for (i=0,i2=0; i<1024; i+=8,i2+=4) {
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+1024+i),(simd_q15_t*)(output+2048+i),
@@ -5585,12 +5588,20 @@ void idft6144(int16_t *input, int16_t *output,int scale)
idft2048((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft2048((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("idft6144in.m","in",input,6144,1,1);
+ LOG_M("idft6144out0.m","o0",tmpo[0],2048,1,1);
+ LOG_M("idft6144out1.m","o1",tmpo[1],2048,1,1);
+ LOG_M("idft6144out2.m","o2",tmpo[2],2048,1,1);
+ }
+
for (i=0,i2=0; i<4096; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i),
(simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i));
}
+
if (scale==1) {
for (i=0; i<96; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
@@ -5643,10 +5654,11 @@ void dft6144(int16_t *input, int16_t *output,int scale)
tmpo[1][i] = tmpo[1][i<<1];
tmpo[2][i] = tmpo[2][i<<1];
}*/
-
- // LOG_M("out0.m","o0",tmpo[0],2048,1,1);
- // LOG_M("out1.m","o1",tmpo[1],2048,1,1);
- // LOG_M("out2.m","o2",tmpo[2],2048,1,1);
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("ft6144out0.m","o0",tmpo[0],2048,1,1);
+ LOG_M("ft6144out1.m","o1",tmpo[1],2048,1,1);
+ LOG_M("ft6144out2.m","o2",tmpo[2],2048,1,1);
+ }
for (i=0,i2=0; i<4096; i+=8,i2+=4) {
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i),
@@ -5707,10 +5719,11 @@ void dft12288(int16_t *input, int16_t *output,int scale)
tmpo[1][i] = tmpo[1][i<<1];
tmpo[2][i] = tmpo[2][i<<1];
}*/
-
- // LOG_M("out0.m","o0",tmpo[0],4096,1,1);
- // LOG_M("out1.m","o1",tmpo[1],4096,1,1);
- // LOG_M("out2.m","o2",tmpo[2],4096,1,1);
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("dft12288out0.m","o0",tmpo[0],4096,1,1);
+ LOG_M("dft12288out1.m","o1",tmpo[1],4096,1,1);
+ LOG_M("dft12288out2.m","o2",tmpo[2],4096,1,1);
+ }
for (i=0,i2=0; i<8192; i+=8,i2+=4) {
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i),
@@ -5758,9 +5771,18 @@ void idft12288(int16_t *input, int16_t *output,int scale)
}
+
idft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale);
idft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale);
idft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale);
+
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("idft12288in.m","in",input,12288,1,1);
+ LOG_M("idft12288out0.m","o0",tmpo[0],4096,1,1);
+ LOG_M("idft12288out1.m","o1",tmpo[1],4096,1,1);
+ LOG_M("idft12288out2.m","o2",tmpo[2],4096,1,1);
+ }
+
for (i=0,i2=0; i<8192; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i),
@@ -5790,8 +5812,9 @@ void idft12288(int16_t *input, int16_t *output,int scale)
}
_mm_empty();
_m_empty();
-
- // LOG_M("out.m","out",output,6144,1,1);
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("idft12288out.m","out",output,6144,1,1);
+ }
}
int16_t twa18432[12288] __attribute__((aligned(32)));
@@ -5920,16 +5943,18 @@ void dft24576(int16_t *input, int16_t *output,int scale)
tmpo[1][i] = tmpo[1][i<<1];
tmpo[2][i] = tmpo[2][i<<1];
}*/
-
- // LOG_M("out0.m","o0",tmpo[0],8192,1,1);
- // LOG_M("out1.m","o1",tmpo[1],8192,1,1);
- // LOG_M("out2.m","o2",tmpo[2],8192,1,1);
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("dft24576out0.m","o0",tmpo[0],8192,1,1);
+ LOG_M("dft24576out1.m","o1",tmpo[1],8192,1,1);
+ LOG_M("dft24576out2.m","o2",tmpo[2],8192,1,1);
+ }
for (i=0,i2=0; i<16384; i+=8,i2+=4) {
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+16384+i),(simd_q15_t*)(output+32768+i),
(simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i));
}
+
if (scale==1) {
for (i=0; i<384; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
@@ -5953,8 +5978,9 @@ void dft24576(int16_t *input, int16_t *output,int scale)
}
_mm_empty();
_m_empty();
-
- // LOG_M("out.m","out",output,24576,1,1);
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("out.m","out",output,24576,1,1);
+ }
}
void idft24576(int16_t *input, int16_t *output,int scale)
@@ -5975,12 +6001,12 @@ void idft24576(int16_t *input, int16_t *output,int scale)
idft8192((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft8192((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
- /*
- LOG_M("in.m","in",input,24576,1,1);
- LOG_M("out0.m","o0",tmpo[0],8192,1,1);
- LOG_M("out1.m","o1",tmpo[1],8192,1,1);
- LOG_M("out2.m","o2",tmpo[2],8192,1,1);
- */
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("idft24576in.m","in",input,24576,1,1);
+ LOG_M("idft24576out0.m","o0",tmpo[0],8192,1,1);
+ LOG_M("idft24576out1.m","o1",tmpo[1],8192,1,1);
+ LOG_M("idft24576out2.m","o2",tmpo[2],8192,1,1);
+ }
for (i=0,i2=0; i<16384; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
@@ -6011,7 +6037,9 @@ void idft24576(int16_t *input, int16_t *output,int scale)
_mm_empty();
_m_empty();
- // LOG_M("out.m","out",output,24576,1,1);
+ if (LOG_DUMPFLAG(DEBUG_DFT)) {
+ LOG_M("idft24576out.m","out",output,24576,1,1);
+ }
}
/// THIS SECTION IS FOR ALL PUSCH DFTS (i.e. radix 2^a * 3^b * 4^c * 5^d)
diff --git a/openair1/PHY/defs_L1_NB_IoT.h b/openair1/PHY/defs_L1_NB_IoT.h
index bb08d5122d..8a7c853df5 100644
--- a/openair1/PHY/defs_L1_NB_IoT.h
+++ b/openair1/PHY/defs_L1_NB_IoT.h
@@ -52,7 +52,7 @@
# include "COMMON/ral_messages_types.h"
# include "UTIL/queue.h"
# endif
-# include "log.h"
+# include "common/utils/LOG/log.h"
# define msg(aRGS...) LOG_D(PHY, ##aRGS)
# else
# define msg printf
diff --git a/openair1/PHY/defs_UE.h b/openair1/PHY/defs_UE.h
index f079794a34..55f8c9639a 100644
--- a/openair1/PHY/defs_UE.h
+++ b/openair1/PHY/defs_UE.h
@@ -93,7 +93,7 @@
# include "COMMON/ral_messages_types.h"
# include "UTIL/queue.h"
# endif
-# include "log.h"
+# include "common/utils/LOG/log.h"
# define msg(aRGS...) LOG_D(PHY, ##aRGS)
# else
# define msg printf
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index a6a44c66e2..e2a28118ff 100644
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -347,7 +347,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
dlsch_harq->rvidx,
dlsch_harq->round);
}
-#if defined(MESSAGE_CHART_GENERATOR_PHY)
+
MSC_LOG_TX_MESSAGE(
MSC_PHY_ENB,MSC_PHY_UE,
NULL,0,
@@ -368,7 +368,7 @@ void pdsch_procedures(PHY_VARS_eNB *eNB,
pmi2hex_2Ar1(dlsch_harq->pmi_alloc),
dlsch_harq->rvidx,
dlsch_harq->round);
-#endif
+
if (ue_stats) ue_stats->dlsch_sliding_cnt++;
@@ -1375,7 +1375,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
ulsch->harq_mask &= ~(1 << harq_pid);
ulsch_harq->round = 0;
}
-#if defined(MESSAGE_CHART_GENERATOR_PHY)
+
MSC_LOG_RX_DISCARDED_MESSAGE(
MSC_PHY_ENB,MSC_PHY_UE,
NULL,0,
@@ -1384,7 +1384,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
ulsch->rnti,harq_pid,
ulsch_harq->round-1
);
-#endif
+
/* Mark the HARQ process to release it later if max transmission reached
* (see below).
@@ -1403,7 +1403,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
T(T_ENB_PHY_ULSCH_UE_ACK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(ulsch->rnti),
T_INT(harq_pid));
-#if defined(MESSAGE_CHART_GENERATOR_PHY)
+
MSC_LOG_RX_MESSAGE(
MSC_PHY_ENB,MSC_PHY_UE,
NULL,0,
@@ -1411,7 +1411,7 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
frame,subframe,
ulsch->rnti,harq_pid
);
-#endif
+
#ifdef DEBUG_PHY_PROC
#ifdef DEBUG_ULSCH
@@ -1604,6 +1604,16 @@ static void do_release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,ui
dlsch1_harq = dlsch1->harq_processes[harq_pid];
AssertFatal(dlsch0_harq!=NULL,"dlsch0_harq is null\n");
+#if T_TRACER
+ if (after_rounds != -1) {
+ T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe),
+ T_INT(dlsch0->rnti), T_INT(harq_pid));
+ } else {
+ T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe),
+ T_INT(dlsch0->rnti), T_INT(harq_pid));
+ }
+#endif
+
if (dlsch0_harq->round >= after_rounds) {
dlsch0_harq->status = SCH_IDLE;
/*if ((dlsch1_harq == NULL)||
@@ -1631,6 +1641,15 @@ static void do_release_harq(PHY_VARS_eNB *eNB,int UE_id,int tb,uint16_t frame,ui
dlsch1_harq = dlsch1->harq_processes[harq_pid];
AssertFatal(dlsch0_harq!=NULL,"dlsch0_harq is null\n");
+#if T_TRACER
+ if (after_rounds != -1) {
+ T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe),
+ T_INT(dlsch0->rnti), T_INT(harq_pid));
+ } else {
+ T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe),
+ T_INT(dlsch0->rnti), T_INT(harq_pid));
+ }
+#endif
if (dlsch0_harq->round >= after_rounds) {
dlsch0_harq->status = SCH_IDLE;
if ((dlsch1_harq == NULL)||
@@ -1753,22 +1772,6 @@ void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq,
pdu->harq_indication_fdd_rel13.harq_tb_n[i] = 2-ulsch_harq->o_ACK[i];
// release DLSCH if needed
release_harq(eNB,UE_id,i,frame,subframe,0xffff, ulsch_harq->o_ACK[i] == 1);
-
-
-#if T_TRACER
- /* TODO: get correct harq pid */
- {
- int subframe_tx = (subframe+6)%10;
- int frame_tx = subframe_tx >= 6 ? (frame+1023)%1024 : frame;
- if (ulsch_harq->o_ACK[i] != 1) {
- T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe),
- T_INT(rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx]));
- } else {
- T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe),
- T_INT(rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx]));
- }
- }
-#endif
}
}
else { // TDD
@@ -1857,21 +1860,6 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
pdu->harq_indication_fdd_rel13.harq_tb_n[0] = harq_ack[0];
// release DLSCH if needed
release_harq(eNB,UE_id,0,frame,subframe,0xffff, harq_ack[0] == 1);
-
-
-#if T_TRACER
- {
- int subframe_tx = (subframe+6)%10;
- int frame_tx = subframe_tx >= 6 ? (frame+1023)%1024 : frame;
- if (harq_ack[0] != 1) {
- T(T_ENB_PHY_DLSCH_UE_NACK, T_INT(0), T_INT(frame), T_INT(subframe),
- T_INT(uci->rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx]));
- } else {
- T(T_ENB_PHY_DLSCH_UE_ACK, T_INT(0), T_INT(frame), T_INT(subframe),
- T_INT(uci->rnti), T_INT(eNB->dlsch[UE_id][0]->harq_ids[frame_tx%2][subframe_tx]));
- }
- }
-#endif
}
else if (uci->pucch_fmt == pucch_format1b) {
pdu->harq_indication_fdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_FDD_REL13_TAG;
@@ -2041,16 +2029,15 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
const int subframe = proc->subframe_rx;
const int frame = proc->frame_rx;
-
- if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)!=SF_UL)) return;
-
- T(T_ENB_PHY_UL_TICK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe));
-
/* TODO: use correct rxdata */
T(T_ENB_PHY_INPUT_SIGNAL, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(0),
T_BUFFER(&eNB->RU_list[0]->common.rxdata[0][subframe*eNB->frame_parms.samples_per_tti],
eNB->frame_parms.samples_per_tti * 4));
+ if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)!=SF_UL)) return;
+
+ T(T_ENB_PHY_UL_TICK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe));
+
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC, 1 );
LOG_D(PHY,"[eNB %d] Frame %d: Doing phy_procedures_eNB_uespec_RX(%d)\n",eNB->Mod_id,frame, subframe);
diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c
index ed258ed47c..b7d05ba006 100644
--- a/openair1/SCHED_UE/phy_procedures_lte_ue.c
+++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c
@@ -99,77 +99,77 @@ void get_dumpparam(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id, uint8_t
void dump_dlsch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe,uint8_t harq_pid)
{
-LOG_M_BEGIN(DEBUG_UE_PHYPROC)
- unsigned int coded_bits_per_codeword;
- uint8_t nsymb ;
+ if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)) {
+ unsigned int coded_bits_per_codeword;
+ uint8_t nsymb ;
- get_dumpparam(ue, proc, eNB_id,
- ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->nb_rb ,
- ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
- subframe,
- ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->Qm,
- ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->Nl,
- ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id],
- &nsymb, &coded_bits_per_codeword);
+ get_dumpparam(ue, proc, eNB_id,
+ ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->nb_rb ,
+ ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->rb_alloc_even,
+ subframe,
+ ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->Qm,
+ ue->dlsch[ue->current_thread_id[subframe]][eNB_id][0]->harq_processes[harq_pid]->Nl,
+ ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id],
+ &nsymb, &coded_bits_per_codeword);
- LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,2,1);
- LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
- LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_estimates_ext[0],300*nsymb,1,1);
- /*
- LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
- LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
- LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
- LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1);
- */
- LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->rxdataF_comp0[0],300*12,1,1);
- LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->llr[0],coded_bits_per_codeword,1,0);
+ LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,2,1);
+ LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
+ LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_estimates_ext[0],300*nsymb,1,1);
+ /*
+ LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
+ LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
+ LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
+ LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1);
+ */
+ LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->rxdataF_comp0[0],300*12,1,1);
+ LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars[ue->current_thread_id[subframe]][0]->llr[0],coded_bits_per_codeword,1,0);
- LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_mag0,300*12,1,1);
- LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_magb0,300*12,1,1);
-LOG_M_END
+ LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_mag0,300*12,1,1);
+ LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars[ue->current_thread_id[subframe]][0]->dl_ch_magb0,300*12,1,1);
+ }
}
void dump_dlsch_SI(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe)
{
-LOG_M_BEGIN(DEBUG_UE_PHYPROC)
- unsigned int coded_bits_per_codeword;
- uint8_t nsymb;
+ if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)){
+ unsigned int coded_bits_per_codeword;
+ uint8_t nsymb;
- get_dumpparam(ue, proc, eNB_id,
- ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
- ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even,
- subframe,2,1,0,
- &nsymb, &coded_bits_per_codeword);
+ get_dumpparam(ue, proc, eNB_id,
+ ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
+ ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even,
+ subframe,2,1,0,
+ &nsymb, &coded_bits_per_codeword);
- LOG_D(PHY,"[UE %d] Dumping dlsch_SI : ofdm_symbol_size %d, nsymb %d, nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n",
- ue->Mod_id,
- ue->frame_parms.ofdm_symbol_size,
- nsymb,
- ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
- ue->dlsch_SI[eNB_id]->harq_processes[0]->mcs,
- ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
- ue->pdcch_vars[0%RX_NB_TH][eNB_id]->num_pdcch_symbols,
- coded_bits_per_codeword);
+ LOG_D(PHY,"[UE %d] Dumping dlsch_SI : ofdm_symbol_size %d, nsymb %d, nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n",
+ ue->Mod_id,
+ ue->frame_parms.ofdm_symbol_size,
+ nsymb,
+ ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
+ ue->dlsch_SI[eNB_id]->harq_processes[0]->mcs,
+ ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
+ ue->pdcch_vars[0%RX_NB_TH][eNB_id]->num_pdcch_symbols,
+ coded_bits_per_codeword);
- LOG_M("rxsig0.m","rxs0", &ue->common_vars.rxdata[0][subframe*ue->frame_parms.samples_per_tti],ue->frame_parms.samples_per_tti,1,1);
+ LOG_M("rxsig0.m","rxs0", &ue->common_vars.rxdata[0][subframe*ue->frame_parms.samples_per_tti],ue->frame_parms.samples_per_tti,1,1);
- LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
- LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_SI[0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
- LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_SI[0]->dl_ch_estimates_ext[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1);
- /*
- LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
- LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
- LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
- LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1);
- */
- LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_SI[0]->rxdataF_comp0[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1);
- LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_SI[0]->llr[0],coded_bits_per_codeword,1,0);
+ LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
+ LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_SI[0]->rxdataF_ext[0],2*nsymb*ue->frame_parms.ofdm_symbol_size,1,1);
+ LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_SI[0]->dl_ch_estimates_ext[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1);
+ /*
+ LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
+ LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
+ LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
+ LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1);
+ */
+ LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_SI[0]->rxdataF_comp0[0],ue->frame_parms.N_RB_DL*12*nsymb,1,1);
+ LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_SI[0]->llr[0],coded_bits_per_codeword,1,0);
- LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_SI[0]->dl_ch_mag0,300*nsymb,1,1);
- LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_SI[0]->dl_ch_magb0,300*nsymb,1,1);
- sleep(1);
- exit(-1);
-LOG_M_END
+ LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_SI[0]->dl_ch_mag0,300*nsymb,1,1);
+ LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_SI[0]->dl_ch_magb0,300*nsymb,1,1);
+ sleep(1);
+ exit(-1);
+ }
}
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
@@ -234,40 +234,40 @@ unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb
void dump_dlsch_ra(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t subframe)
{
-LOG_M_BEGIN(DEBUG_UE_PHYPROC)
- unsigned int coded_bits_per_codeword;
- uint8_t nsymb ;
+ if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)){
+ unsigned int coded_bits_per_codeword;
+ uint8_t nsymb ;
- get_dumpparam(ue, proc, eNB_id,
- ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
- ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even,
- subframe,2,1,0,
- &nsymb, &coded_bits_per_codeword);
+ get_dumpparam(ue, proc, eNB_id,
+ ue->dlsch_SI[eNB_id]->harq_processes[0]->nb_rb,
+ ue->dlsch_SI[eNB_id]->harq_processes[0]->rb_alloc_even,
+ subframe,2,1,0,
+ &nsymb, &coded_bits_per_codeword);
- LOG_D(PHY,"[UE %d] Dumping dlsch_ra : nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n",
- ue->Mod_id,
- ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb,
- ue->dlsch_ra[eNB_id]->harq_processes[0]->mcs,
- ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb,
- ue->pdcch_vars[0%RX_NB_TH][eNB_id]->num_pdcch_symbols,
- coded_bits_per_codeword);
+ LOG_D(PHY,"[UE %d] Dumping dlsch_ra : nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n",
+ ue->Mod_id,
+ ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb,
+ ue->dlsch_ra[eNB_id]->harq_processes[0]->mcs,
+ ue->dlsch_ra[eNB_id]->harq_processes[0]->nb_rb,
+ ue->pdcch_vars[0%RX_NB_TH][eNB_id]->num_pdcch_symbols,
+ coded_bits_per_codeword);
- LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],2*12*ue->frame_parms.ofdm_symbol_size,2,1);
- LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_ra[0]->rxdataF_ext[0],2*12*ue->frame_parms.ofdm_symbol_size,1,1);
- LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_ra[0]->dl_ch_estimates_ext[0],300*nsymb,1,1);
- /*
- LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
- LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
- LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
- LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1);
- */
- LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_ra[0]->rxdataF_comp0[0],300*nsymb,1,1);
- LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_ra[0]->llr[0],coded_bits_per_codeword,1,0);
+ LOG_M("rxsigF0.m","rxsF0", ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[0],2*12*ue->frame_parms.ofdm_symbol_size,2,1);
+ LOG_M("rxsigF0_ext.m","rxsF0_ext", ue->pdsch_vars_ra[0]->rxdataF_ext[0],2*12*ue->frame_parms.ofdm_symbol_size,1,1);
+ LOG_M("dlsch00_ch0_ext.m","dl00_ch0_ext", ue->pdsch_vars_ra[0]->dl_ch_estimates_ext[0],300*nsymb,1,1);
+ /*
+ LOG_M("dlsch01_ch0_ext.m","dl01_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[1],300*12,1,1);
+ LOG_M("dlsch10_ch0_ext.m","dl10_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[2],300*12,1,1);
+ LOG_M("dlsch11_ch0_ext.m","dl11_ch0_ext",pdsch_vars[0]->dl_ch_estimates_ext[3],300*12,1,1);
+ LOG_M("dlsch_rho.m","dl_rho",pdsch_vars[0]->rho[0],300*12,1,1);
+ */
+ LOG_M("dlsch_rxF_comp0.m","dlsch0_rxF_comp0", ue->pdsch_vars_ra[0]->rxdataF_comp0[0],300*nsymb,1,1);
+ LOG_M("dlsch_rxF_llr.m","dlsch_llr", ue->pdsch_vars_ra[0]->llr[0],coded_bits_per_codeword,1,0);
- LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_ra[0]->dl_ch_mag0,300*nsymb,1,1);
- LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_ra[0]->dl_ch_magb0,300*nsymb,1,1);
-LOG_M_END
+ LOG_M("dlsch_mag1.m","dlschmag1",ue->pdsch_vars_ra[0]->dl_ch_mag0,300*nsymb,1,1);
+ LOG_M("dlsch_mag2.m","dlschmag2",ue->pdsch_vars_ra[0]->dl_ch_magb0,300*nsymb,1,1);
+ }
}
void phy_reset_ue(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index)
@@ -362,11 +362,11 @@ void process_timing_advance_rar(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint16_t ti
ue->timing_advance = timing_advance*4;
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
/* TODO: fix this log, what is 'HW timing advance'? */
/*LOG_I(PHY,"[UE %d] AbsoluteSubFrame %d.%d, received (rar) timing_advance %d, HW timing advance %d\n",ue->Mod_id,proc->frame_rx, proc->subframe_rx, ue->timing_advance);*/
- LOG_I(PHY,"[UE %d] AbsoluteSubFrame %d.%d, received (rar) timing_advance %d\n",ue->Mod_id,proc->frame_rx, proc->subframe_rx, ue->timing_advance);
-LOG_DEBUG_END
+ LOG_UI(PHY,"[UE %d] AbsoluteSubFrame %d.%d, received (rar) timing_advance %d\n",ue->Mod_id,proc->frame_rx, proc->subframe_rx, ue->timing_advance);
+ }
}
@@ -740,17 +740,17 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
} else {
bundling_flag = ue->pucch_config_dedicated[eNB_id].tdd_AckNackFeedbackMode;
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
- if (bundling_flag==bundling) {
- LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, bundling, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR,
- ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
- } else {
- LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, multiplexing, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR,
- ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
+ if (bundling_flag==bundling) {
+ LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, bundling, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR,
+ ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
+ } else {
+ LOG_D(PHY,"[UE%d] Frame %d subframe %d : get_n1_pucch, multiplexing, SR %d/%d\n",ue->Mod_id,proc->frame_tx,subframe,SR,
+ ue->scheduling_request_config[eNB_id].sr_PUCCH_ResourceIndex);
+ }
}
-LOG_DEBUG_END
switch (frame_parms->tdd_config) {
case 1: // DL:S:UL:UL:DL:DL:S:UL:UL:DL
@@ -1226,9 +1226,9 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
#endif
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON,VCD_FUNCTION_IN);
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->ofdm_mod_stats);
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->ofdm_mod_stats);
+ }
nsymb = (frame_parms->Ncp == 0) ? 14 : 12;
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)//this is the EXPRESS MIMO case
@@ -1345,9 +1345,9 @@ LOG_DEBUG_END
} //nb_antennas_tx
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->ofdm_mod_stats);
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->ofdm_mod_stats);
+ }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON,VCD_FUNCTION_OUT);
@@ -1634,30 +1634,30 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
}
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- if(ue->ulsch[eNB_id]->o_ACK[0])
- {
- LOG_I(PHY,"PUSCH ACK\n");
- T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
- T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
- }
- else
- {
- LOG_I(PHY,"PUSCH NACK\n");
- T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
- T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
- }
- LOG_I(PHY,"[UE %d][PDSCH %x] AbsSubFrame %d.%d Generating ACK (%d,%d) for %d bits on PUSCH\n",
- Mod_id,
- ue->ulsch[eNB_id]->rnti,
- frame_tx%1024,subframe_tx,
- ue->ulsch[eNB_id]->o_ACK[0],ue->ulsch[eNB_id]->o_ACK[1],
- ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK);
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ if(ue->ulsch[eNB_id]->o_ACK[0])
+ {
+ LOG_I(PHY,"PUSCH ACK\n");
+ T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
+ T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
+ }
+ else
+ {
+ LOG_I(PHY,"PUSCH NACK\n");
+ T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
+ T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
+ }
+ LOG_I(PHY,"[UE %d][PDSCH %x] AbsSubFrame %d.%d Generating ACK (%d,%d) for %d bits on PUSCH\n",
+ Mod_id,
+ ue->ulsch[eNB_id]->rnti,
+ frame_tx%1024,subframe_tx,
+ ue->ulsch[eNB_id]->o_ACK[0],ue->ulsch[eNB_id]->o_ACK[1],
+ ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK);
}
+ }
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
+ if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)){
LOG_D(PHY,
"[UE %d][PUSCH %d] AbsSubframe %d.%d Generating PUSCH : first_rb %d, nb_rb %d, round %d, mcs %d, rv %d, "
"cyclic_shift %d (cyclic_shift_common %d,n_DMRS2 %d,n_PRS %d), ACK (%d,%d), O_ACK %d, ack_status_cw0 %d ack_status_cw1 %d bundling %d, Nbundled %d, CQI %d, RI %d\n",
@@ -1679,7 +1679,7 @@ LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
ue->ulsch[eNB_id]->bundling, Nbundled,
cqi_status,
ri_status);
-LOG_DEBUG_END
+ }
@@ -1701,9 +1701,9 @@ LOG_DEBUG_END
ue->prach_resources[eNB_id]->Msg3[6],
ue->prach_resources[eNB_id]->Msg3[7],
ue->prach_resources[eNB_id]->Msg3[8]);
-LOG_DEBUG_BEGIN(UE_TIMING)
+ if ( LOG_DEBUGFLAG(UE_TIMING)) {
start_meas(&ue->ulsch_encoding_stats);
-LOG_DEBUG_END
+ }
AssertFatal(ulsch_encoding(ue->prach_resources[eNB_id]->Msg3,
ue,
@@ -1713,11 +1713,11 @@ LOG_DEBUG_END
ue->transmission_mode[eNB_id],0,0)==0,
"ulsch_coding.c: FATAL ERROR: returning\n");
-LOG_DEBUG_BEGIN(UE_TIMING)
+ if ( LOG_DEBUGFLAG(UE_TIMING)) {
stop_meas(&ue->phy_proc_tx);
LOG_UI(PHY,"------FULL TX PROC : %5.2f ------\n",ue->phy_proc_tx.p_time/(cpuf*1000.0));
stop_meas(&ue->ulsch_encoding_stats);
-LOG_DEBUG_END
+ }
if (ue->mac_enabled == 1) {
@@ -1752,26 +1752,25 @@ LOG_DEBUG_END
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
LOG_D(PHY,"[UE] Frame %d, subframe %d : ULSCH SDU (TX harq_pid %d) (%d bytes) : \n",frame_tx,subframe_tx,harq_pid, ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3);
for (i=0; iulsch[eNB_id]->harq_processes[harq_pid]->TBS>>3; i++)
LOG_T(PHY,"%x.",ulsch_input_buffer[i]);
LOG_T(PHY,"\n");
-LOG_DEBUG_END
}
- else {
+ } else {
unsigned int taus(void);
for (i=0; iulsch_encoding_stats);
-LOG_DEBUG_END
+ }
if (abstraction_flag==0) {
if (ulsch_encoding(ulsch_input_buffer,
@@ -1783,16 +1782,16 @@ LOG_DEBUG_END
Nbundled)!=0) {
LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->phy_proc_tx);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->phy_proc_tx);
+ }
return;
}
}
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->ulsch_encoding_stats);
-LOG_DEBUG_END
+ if(LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->ulsch_encoding_stats);
+ }
}
if (abstraction_flag == 0) {
@@ -1817,13 +1816,13 @@ LOG_DEBUG_END
T(T_UE_PHY_PUSCH_TX_POWER, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]),
T_INT(tx_amp),T_INT(ue->ulsch[eNB_id]->f_pusch),T_INT(get_PL(Mod_id,0,eNB_id)),T_INT(nb_rb));
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d][PUSCH %d] AbsSubFrame %d.%d, generating PUSCH, Po_PUSCH: %d dBm (max %d dBm), amp %d\n",
- Mod_id,harq_pid,frame_tx%1024,subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_power_max_dBm, tx_amp);
-LOG_DEBUG_END
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->ulsch_modulation_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d][PUSCH %d] AbsSubFrame %d.%d, generating PUSCH, Po_PUSCH: %d dBm (max %d dBm), amp %d\n",
+ Mod_id,harq_pid,frame_tx%1024,subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_power_max_dBm, tx_amp);
+ }
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->ulsch_modulation_stats);
+ }
ulsch_modulation(ue->common_vars.txdataF,
tx_amp,
frame_tx,
@@ -1840,9 +1839,9 @@ LOG_DEBUG_END
nb_rb,
aa);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->ulsch_modulation_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->ulsch_modulation_stats);
+ }
}
@@ -2219,18 +2218,18 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
}
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- if(pucch_payload[0])
- {
- T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
- T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ if(pucch_payload[0])
+ {
+ T(T_UE_PHY_DLSCH_UE_ACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
+ T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
+ }
+ else
+ {
+ T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
+ T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
+ }
}
- else
- {
- T(T_UE_PHY_DLSCH_UE_NACK, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx), T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti),
- T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->current_harq_pid));
- }
-LOG_DEBUG_END
generate_pucch1x(ue->common_vars.txdataF,
&ue->frame_parms,
@@ -2268,15 +2267,15 @@ LOG_DEBUG_END
#endif
T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]),
T_INT(tx_amp),T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (RI or CQI), Po_PUCCH %d, isShortenPucch %d, amp %d\n",
- Mod_id,
- ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti,
- frame_tx%1024, subframe_tx,
- Po_PUCCH,
- isShortenPucch,
- tx_amp);
-LOG_DEBUG_END
+ if( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (RI or CQI), Po_PUCCH %d, isShortenPucch %d, amp %d\n",
+ Mod_id,
+ ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->rnti,
+ frame_tx%1024, subframe_tx,
+ Po_PUCCH,
+ isShortenPucch,
+ tx_amp);
+ }
generate_pucch2x(ue->common_vars.txdataF,
&ue->frame_parms,
ue->ncs_cell,
@@ -2354,9 +2353,9 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
ue->generate_ul_signal[eNB_id] = 0;
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->phy_proc_tx);
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->phy_proc_tx);
+ }
ue->tx_power_dBm[subframe_tx]=-127;
@@ -2449,9 +2448,9 @@ LOG_DEBUG_END
LOG_D(PHY,"****** end TX-Chain for AbsSubframe %d.%d ******\n", frame_tx, subframe_tx);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->phy_proc_tx);
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->phy_proc_tx);
+ }
}
void phy_procedures_UE_S_TX(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_flag)
@@ -2516,7 +2515,7 @@ void ue_measurement_procedures(
T_INT((int)ue->common_vars.freq_offset));
}
- if (l==(6-ue->frame_parms.Ncp)) {
+ if (( (slot%2) == 0) && (l==(6-ue->frame_parms.Ncp))) {
// make sure we have signal from PSS/SSS for N0 measurement
// LOG_I(PHY," l==(6-ue->frame_parms.Ncp) ue_rrc_measurements\n");
@@ -2617,7 +2616,7 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
dummy[0] = ue->pbch_vars[eNB_id]->decoded_output[2];
dummy[1] = ue->pbch_vars[eNB_id]->decoded_output[1];
dummy[2] = ue->pbch_vars[eNB_id]->decoded_output[0];
- trace_pdu(1, dummy, 3, ue->Mod_id, 0, 0,
+ trace_pdu( DIRECTION_DOWNLINK, dummy, WS_C_RNTI, ue->Mod_id, 0, 0,
frame_rx, subframe_rx, 0, 0);
LOG_D(OPT,"[UE %d][PBCH] Frame %d trace pdu for PBCH\n",
ue->Mod_id, subframe_rx);
@@ -2693,40 +2692,36 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
}
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
- LOG_UI(PHY,"[UE %d] frame %d, subframe %d, Received PBCH (MIB): nb_antenna_ports_eNB %d, tx_ant %d, frame_tx %d. N_RB_DL %d, phich_duration %d, phich_resource %d/6!\n",
- ue->Mod_id,
- frame_rx,
- subframe_rx,
- ue->frame_parms.nb_antenna_ports_eNB,
- pbch_tx_ant,
- frame_tx,
- ue->frame_parms.N_RB_DL,
- ue->frame_parms.phich_config_common.phich_duration,
- ue->frame_parms.phich_config_common.phich_resource);
-LOG_DEBUG_END
+ LOG_UI(PHY,"[UE %d] frame %d, subframe %d, Received PBCH (MIB): nb_antenna_ports_eNB %d, tx_ant %d, frame_tx %d. N_RB_DL %d, phich_duration %d, phich_resource %d/6!\n",
+ ue->Mod_id,
+ frame_rx,
+ subframe_rx,
+ ue->frame_parms.nb_antenna_ports_eNB,
+ pbch_tx_ant,
+ frame_tx,
+ ue->frame_parms.N_RB_DL,
+ ue->frame_parms.phich_config_common.phich_duration,
+ ue->frame_parms.phich_config_common.phich_resource);
+ }
} else {
- /*
- LOG_E(PHY,"[UE %d] frame %d, subframe %d, Error decoding PBCH!\n",
- ue->Mod_id,frame_rx, subframe_rx);
+ if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_E(PHY,"[UE %d] frame %d, subframe %d, Error decoding PBCH!\n",
+ ue->Mod_id,frame_rx, subframe_rx);
- LOG_I(PHY,"[UE %d] rx_offset %d\n",ue->Mod_id,ue->rx_offset);
+ LOG_I(PHY,"[UE %d] rx_offset %d\n",ue->Mod_id,ue->rx_offset);
- LOG_M("rxsig0.m","rxs0", ue->common_vars.rxdata[0],ue->frame_parms.samples_per_tti,1,1);
+ LOG_M("rxsig0.m","rxs0", ue->common_vars.rxdata[0],ue->frame_parms.samples_per_tti,1,1);
- LOG_M("H00.m","h00",&(ue->common_vars.dl_ch_estimates[0][0][0]),((ue->frame_parms.Ncp==0)?7:6)*(ue->frame_parms.ofdm_symbol_size),1,1);
- LOG_M("H10.m","h10",&(ue->common_vars.dl_ch_estimates[0][2][0]),((ue->frame_parms.Ncp==0)?7:6)*(ue->frame_parms.ofdm_symbol_size),1,1);
-
- LOG_M("rxsigF0.m","rxsF0", ue->common_vars.rxdataF[0],8*ue->frame_parms.ofdm_symbol_size,1,1);
- LOG_M("PBCH_rxF0_ext.m","pbch0_ext",ue->pbch_vars[0]->rxdataF_ext[0],12*4*6,1,1);
- LOG_M("PBCH_rxF0_comp.m","pbch0_comp",ue->pbch_vars[0]->rxdataF_comp[0],12*4*6,1,1);
- LOG_M("PBCH_rxF_llr.m","pbch_llr",ue->pbch_vars[0]->llr,(ue->frame_parms.Ncp==0) ? 1920 : 1728,1,4);
- exit(-1);
- */
+ LOG_M("PBCH_rxF0_ext.m","pbch0_ext",ue->pbch_vars[0]->rxdataF_ext[0],12*4*6,1,1);
+ LOG_M("PBCH_rxF0_comp.m","pbch0_comp",ue->pbch_vars[0]->rxdataF_comp[0],12*4*6,1,1);
+ LOG_M("PBCH_rxF_llr.m","pbch_llr",ue->pbch_vars[0]->llr,(ue->frame_parms.Ncp==0) ? 1920 : 1728,1,4);
+ exit(-1);
+ }
ue->pbch_vars[eNB_id]->pdu_errors_conseq++;
ue->pbch_vars[eNB_id]->pdu_errors++;
@@ -2742,12 +2737,12 @@ LOG_DEBUG_END
ue->pbch_vars[eNB_id]->pdu_errors_last = ue->pbch_vars[eNB_id]->pdu_errors;
}
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_UI(PHY,"[UE %d] frame %d, slot %d, PBCH errors = %d, consecutive errors = %d!\n",
- ue->Mod_id,frame_rx, subframe_rx,
- ue->pbch_vars[eNB_id]->pdu_errors,
- ue->pbch_vars[eNB_id]->pdu_errors_conseq);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_UI(PHY,"[UE %d] frame %d, slot %d, PBCH errors = %d, consecutive errors = %d!\n",
+ ue->Mod_id,frame_rx, subframe_rx,
+ ue->pbch_vars[eNB_id]->pdu_errors,
+ ue->pbch_vars[eNB_id]->pdu_errors_conseq);
+ }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PBCH_PROCEDURES, VCD_FUNCTION_OUT);
}
@@ -2767,9 +2762,9 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
LOG_D(PHY,"DCI Decoding procedure in %d.%d\n",frame_rx,subframe_rx);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_IN);
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->dlsch_rx_pdcch_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->dlsch_rx_pdcch_stats);
+ }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_IN);
rx_pdcch(ue,
@@ -2896,17 +2891,17 @@ LOG_DEBUG_END
ue->dlsch_received[eNB_id]++;
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d] Generated UE DLSCH C_RNTI format %d\n",ue->Mod_id,dci_alloc_rx[i].format);
- dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
- LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d=> %d\n",ue->Mod_id,subframe_rx,ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active);
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d] Generated UE DLSCH C_RNTI format %d\n",ue->Mod_id,dci_alloc_rx[i].format);
+ dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
+ LOG_D(PHY,"[UE %d] *********** dlsch->active in subframe %d=> %d\n",ue->Mod_id,subframe_rx,ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active);
+ }
// we received a CRNTI, so we're in PUSCH
if (ue->UE_mode[eNB_id] != PUSCH) {
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Received DCI with CRNTI %x => Mode PUSCH\n",ue->Mod_id,frame_rx,subframe_rx,ue->pdcch_vars[subframe_rx&1][eNB_id]->crnti);
-LOG_DEBUG_END
+ }
//dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
ue->UE_mode[eNB_id] = PUSCH;
@@ -2921,9 +2916,9 @@ LOG_DEBUG_END
((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) {
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i);
+ }
if (generate_ue_dlsch_params_from_dci(frame_rx,
subframe_rx,
@@ -2952,9 +2947,9 @@ LOG_DEBUG_END
else if ((dci_alloc_rx[i].rnti == P_RNTI) &&
((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) {
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d] subframe %d: Found rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i);
+ }
if (generate_ue_dlsch_params_from_dci(frame_rx,
@@ -2982,18 +2977,18 @@ LOG_DEBUG_END
else if ((ue->prach_resources[eNB_id]) &&
(dci_alloc_rx[i].rnti == ue->prach_resources[eNB_id]->ra_RNTI) &&
- (dci_alloc_rx[i].format == format1A)) {
+ ((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) {
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1A, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,i);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1%s, dci_cnt %d\n",ue->Mod_id,subframe_rx,dci_alloc_rx[i].rnti,dci_alloc_rx[i].format==format1A?"A":"C",i);
+ }
if (generate_ue_dlsch_params_from_dci(frame_rx,
subframe_rx,
- (DCI1A_5MHz_TDD_1_6_t *)&dci_alloc_rx[i].dci_pdu,
+ (void *)&dci_alloc_rx[i].dci_pdu,
ue->prach_resources[eNB_id]->ra_RNTI,
- format1A,
+ dci_alloc_rx[i].format,
ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id],
ue->pdsch_vars_ra[eNB_id],
&ue->dlsch_ra[eNB_id],
@@ -3005,20 +3000,20 @@ LOG_DEBUG_END
ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id],
0)==0) {
- ue->dlsch_ra_received[eNB_id]++;
+ ue->dlsch_ra_received[eNB_id]++;
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d] Generate UE DLSCH RA_RNTI format 1A, rb_alloc %x, dlsch_ra[eNB_id] %p\n",
- ue->Mod_id,ue->dlsch_ra[eNB_id]->harq_processes[0]->rb_alloc_even[0],ue->dlsch_ra[eNB_id]);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d] Generate UE DLSCH RA_RNTI format 1A, rb_alloc %x, dlsch_ra[eNB_id] %p\n",
+ ue->Mod_id,ue->dlsch_ra[eNB_id]->harq_processes[0]->rb_alloc_even[0],ue->dlsch_ra[eNB_id]);
+ }
}
} else if( (dci_alloc_rx[i].rnti == ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->crnti) &&
(dci_alloc_rx[i].format == format0)) {
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d][PUSCH] Frame %d subframe %d: Found rnti %x, format 0, dci_cnt %d\n",
- ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d][PUSCH] Frame %d subframe %d: Found rnti %x, format 0, dci_cnt %d\n",
+ ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i);
+ }
ue->ulsch_no_allocation_counter[eNB_id] = 0;
//dump_dci(&ue->frame_parms,&dci_alloc_rx[i]);
@@ -3036,42 +3031,41 @@ LOG_DEBUG_END
CBA_RNTI,
eNB_id,
0)==0)) {
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
- LOG_USEDINLOG_VAR(int8_t,harq_pid) = subframe2harq_pid(&ue->frame_parms,
- pdcch_alloc2ul_frame(&ue->frame_parms,proc->frame_rx,proc->subframe_rx),
- pdcch_alloc2ul_subframe(&ue->frame_parms,proc->subframe_rx));
- T(T_UE_PHY_ULSCH_UE_DCI, T_INT(eNB_id), T_INT(proc->frame_rx%1024), T_INT(proc->subframe_rx),
- T_INT(dci_alloc_rx[i].rnti),
- T_INT(harq_pid),
- T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->mcs),
- T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->round),
- T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb),
- T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb),
- T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS));
-
- LOG_D(PHY,"[UE %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx);
-LOG_DEBUG_END
+ LOG_USEDINLOG_VAR(int8_t,harq_pid) = subframe2harq_pid(&ue->frame_parms,
+ pdcch_alloc2ul_frame(&ue->frame_parms,proc->frame_rx,proc->subframe_rx),
+ pdcch_alloc2ul_subframe(&ue->frame_parms,proc->subframe_rx));
+ T(T_UE_PHY_ULSCH_UE_DCI, T_INT(eNB_id), T_INT(proc->frame_rx%1024), T_INT(proc->subframe_rx),
+ T_INT(dci_alloc_rx[i].rnti),
+ T_INT(harq_pid),
+ T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->mcs),
+ T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->round),
+ T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->first_rb),
+ T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->nb_rb),
+ T_INT(ue->ulsch[eNB_id]->harq_processes[harq_pid]->TBS));
+ LOG_D(PHY,"[UE %d] Generate UE ULSCH C_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx);
+ }
}
} else if( (dci_alloc_rx[i].rnti == ue->ulsch[eNB_id]->cba_rnti[0]) &&
(dci_alloc_rx[i].format == format0)) {
// UE could belong to more than one CBA group
// ue->Mod_id%ue->ulsch[eNB_id]->num_active_cba_groups]
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d][PUSCH] Frame %d subframe %d: Found cba rnti %x, format 0, dci_cnt %d\n",
- ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i);
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d][PUSCH] Frame %d subframe %d: Found cba rnti %x, format 0, dci_cnt %d\n",
+ ue->Mod_id,frame_rx,subframe_rx,dci_alloc_rx[i].rnti,i);
/*
if (((frame_rx%100) == 0) || (frame_rx < 20))
dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
*/
-LOG_DEBUG_END
+ }
ue->ulsch_no_allocation_counter[eNB_id] = 0;
//dump_dci(&ue->frame_parms,&dci_alloc_rx[i]);
if ((ue->UE_mode[eNB_id] > PRACH) &&
- (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
+ (generate_ue_ulsch_params_from_dci((void *)&dci_alloc_rx[i].dci_pdu,
ue->ulsch[eNB_id]->cba_rnti[0],
subframe_rx,
format0,
@@ -3084,28 +3078,28 @@ LOG_DEBUG_END
eNB_id,
0)==0)) {
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d] Generate UE ULSCH CBA_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx);
-LOG_DEBUG_END
- ue->ulsch[eNB_id]->num_cba_dci[(subframe_rx+4)%10]++;
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d] Generate UE ULSCH CBA_RNTI format 0 (subframe %d)\n",ue->Mod_id,subframe_rx);
+ }
+ ue->ulsch[eNB_id]->num_cba_dci[(subframe_rx+4)%10]++;
}
}
else {
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d] frame %d, subframe %d: received DCI %d with RNTI=%x (C-RNTI:%x, CBA_RNTI %x) and format %d!\n",ue->Mod_id,frame_rx,subframe_rx,i,dci_alloc_rx[i].rnti,
- ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->crnti,
- ue->ulsch[eNB_id]->cba_rnti[0],
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d] frame %d, subframe %d: received DCI %d with RNTI=%x (C-RNTI:%x, CBA_RNTI %x) and format %d!\n",ue->Mod_id,frame_rx,subframe_rx,i,dci_alloc_rx[i].rnti,
+ ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->crnti,
+ ue->ulsch[eNB_id]->cba_rnti[0],
dci_alloc_rx[i].format);
// dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
-LOG_DEBUG_END
+ }
}
}
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->dlsch_rx_pdcch_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->dlsch_rx_pdcch_stats);
+ }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_OUT);
return(0);
}
@@ -3128,7 +3122,7 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs
// LOG_D(PHY,"ue calling pmch subframe ..\n ");
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Querying for PMCH demodulation\n",
- ue->Mod_id,(subframe_rx==9?-1:0)+frame_rx,subframe_rx);
+ ue->Mod_id,frame_rx,subframe_rx);
#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
pmch_mcs = ue_query_mch(ue->Mod_id,
@@ -3147,9 +3141,7 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Programming PMCH demodulation for mcs %d\n",ue->Mod_id,frame_rx,subframe_rx,pmch_mcs);
fill_UE_dlsch_MCH(ue,pmch_mcs,1,0,0);
-
for (l=2; l<12; l++) {
-
slot_fep_mbsfn(ue,
l,
subframe_rx,
@@ -3164,6 +3156,8 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs
}
+ ue->dlsch_MCH[0]->harq_processes[0]->Qm = get_Qm(pmch_mcs);
+
ue->dlsch_MCH[0]->harq_processes[0]->G = get_G(&ue->frame_parms,
ue->dlsch_MCH[0]->harq_processes[0]->nb_rb,
ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
@@ -3177,7 +3171,14 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs
dlsch_unscrambling(&ue->frame_parms,1,ue->dlsch_MCH[0],
ue->dlsch_MCH[0]->harq_processes[0]->G,
ue->pdsch_vars_MCH[0]->llr[0],0,subframe_rx<<1);
-
+
+ LOG_D(PHY,"start turbo decode for MCH %d.%d --> nb_rb %d \n", frame_rx, subframe_rx, ue->dlsch_MCH[0]->harq_processes[0]->nb_rb);
+ LOG_D(PHY,"start turbo decode for MCH %d.%d --> rb_alloc_even %x \n", frame_rx, subframe_rx, (unsigned int)((intptr_t)ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even));
+ LOG_D(PHY,"start turbo decode for MCH %d.%d --> Qm %d \n", frame_rx, subframe_rx, ue->dlsch_MCH[0]->harq_processes[0]->Qm);
+ LOG_D(PHY,"start turbo decode for MCH %d.%d --> Nl %d \n", frame_rx, subframe_rx, ue->dlsch_MCH[0]->harq_processes[0]->Nl);
+ LOG_D(PHY,"start turbo decode for MCH %d.%d --> G %d \n", frame_rx, subframe_rx, ue->dlsch_MCH[0]->harq_processes[0]->G);
+ LOG_D(PHY,"start turbo decode for MCH %d.%d --> Kmimo %d \n", frame_rx, subframe_rx, ue->dlsch_MCH[0]->Kmimo);
+
ret = dlsch_decoding(ue,
ue->pdsch_vars_MCH[0]->llr[0],
&ue->frame_parms,
@@ -3206,15 +3207,16 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs
ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3,
ue->dlsch_MCH[0]->max_turbo_iterations,
ue->dlsch_MCH[0]->harq_processes[0]->G);
- dump_mch(ue,0,ue->dlsch_MCH[0]->harq_processes[0]->G,subframe_rx);
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
+ // dump_mch(ue,0,ue->dlsch_MCH[0]->harq_processes[0]->G,subframe_rx);
+
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
- for (int i=0; idlsch_MCH[0]->harq_processes[0]->TBS>>3; i++) {
- LOG_T(PHY,"%02x.",ue->dlsch_MCH[0]->harq_processes[0]->c[0][i]);
- }
+ for (int i=0; idlsch_MCH[0]->harq_processes[0]->TBS>>3; i++) {
+ LOG_T(PHY,"%02x.",ue->dlsch_MCH[0]->harq_processes[0]->c[0][i]);
+ }
- LOG_T(PHY,"\n");
-LOG_DEBUG_END
+ LOG_T(PHY,"\n");
+ }
// if (subframe_rx==9)
@@ -3222,25 +3224,24 @@ LOG_DEBUG_END
} else { // decoding successful
#if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
- if (mcch_active == 1) {
- ue_send_mch_sdu(ue->Mod_id,
- CC_id,
- frame_rx,
- ue->dlsch_MCH[0]->harq_processes[0]->b,
- ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3,
- eNB_id,// not relevant in eMBMS context
- sync_area);
+ ue_send_mch_sdu(ue->Mod_id,
+ CC_id,
+ frame_rx,
+ ue->dlsch_MCH[0]->harq_processes[0]->b,
+ ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3,
+ eNB_id,// not relevant in eMBMS context
+ sync_area);
+
+ if (mcch_active == 1)
ue->dlsch_mcch_received[sync_area][0]++;
-
-
- if (ue->dlsch_mch_received_sf[subframe_rx%5][0] == 1 ) {
- ue->dlsch_mch_received_sf[subframe_rx%5][0]=0;
- } else {
- ue->dlsch_mch_received[0]+=1;
- ue->dlsch_mch_received_sf[subframe_rx][0]=1;
- }
-
-
+ else
+ ue->dlsch_mtch_received[sync_area][0]++;
+
+ if (ue->dlsch_mch_received_sf[subframe_rx%5][0] == 1 ) {
+ ue->dlsch_mch_received_sf[subframe_rx%5][0]=0;
+ } else {
+ ue->dlsch_mch_received[0]+=1;
+ ue->dlsch_mch_received_sf[subframe_rx][0]=1;
}
#endif // #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
@@ -3345,12 +3346,12 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC
else
first_symbol_flag = 0;
-LOG_DEBUG_BEGIN(UE_TIMING)
- uint8_t slot = 0;
- if(m >= ue->frame_parms.symbols_per_tti>>1)
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ uint8_t slot = 0;
+ if(m >= ue->frame_parms.symbols_per_tti>>1)
slot = 1;
- start_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot]);
-LOG_DEBUG_END
+ start_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot]);
+ }
// process DLSCH received in first slot
rx_pdsch(ue,
pdsch,
@@ -3363,13 +3364,13 @@ LOG_DEBUG_END
dual_stream_UE,
i_mod,
dlsch0->current_harq_pid);
-LOG_DEBUG_BEGIN(UE_TIMING)
- uint8_t slot = 0;
- if(m >= ue->frame_parms.symbols_per_tti>>1)
- slot = 1;
- stop_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot]);
- LOG_UI(PHY, "[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",proc->frame_rx,subframe_rx,m,ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot].p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ uint8_t slot = 0;
+ if(m >= ue->frame_parms.symbols_per_tti>>1)
+ slot = 1;
+ stop_meas(&ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot]);
+ LOG_UI(PHY, "[AbsSFN %d.%d] LLR Computation Symbol %d %5.2f \n",proc->frame_rx,subframe_rx,m,ue->dlsch_llr_stats_parallelization[ue->current_thread_id[subframe_rx]][slot].p_time/(cpuf*1000.0));
+ }
@@ -3564,9 +3565,9 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
frame_rx,
subframe_rx,
ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->dlsch_unscrambling_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->dlsch_unscrambling_stats);
+ }
dlsch_unscrambling(&ue->frame_parms,
0,
dlsch0,
@@ -3574,9 +3575,9 @@ LOG_DEBUG_END
pdsch_vars->llr[0],
0,
subframe_rx<<1);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->dlsch_unscrambling_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->dlsch_unscrambling_stats);
+ }
LOG_D(PHY," ------ start turbo decoder for AbsSubframe %d.%d / %d ------ \n", frame_rx, subframe_rx, harq_pid);
LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->harq_processes[harq_pid]->nb_rb);
@@ -3587,9 +3588,9 @@ LOG_DEBUG_END
LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Kmimo %d \n", frame_rx, subframe_rx, harq_pid, dlsch0->Kmimo);
LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, subframe_rx, harq_pid, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols);
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
+ }
ret = dlsch_decoding(ue,
pdsch_vars->llr[0],
&ue->frame_parms,
@@ -3601,14 +3602,14 @@ LOG_DEBUG_END
pdsch==PDSCH?1:0,
dlsch0->harq_processes[harq_pid]->TBS>256?1:0);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
- LOG_UI(PHY, " --> Unscrambling for CW0 %5.3f\n",
- (ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
- LOG_UI(PHY, "AbsSubframe %d.%d --> Turbo Decoding for CW0 %5.3f\n",
- frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0));
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
+ LOG_UI(PHY, " --> Unscrambling for CW0 %5.3f\n",
+ (ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
+ LOG_UI(PHY, "AbsSubframe %d.%d --> Turbo Decoding for CW0 %5.3f\n",
+ frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0));
-LOG_DEBUG_END
+ }
if(is_cw1_active)
{
// start turbo decode for CW 1
@@ -3621,9 +3622,9 @@ LOG_DEBUG_END
frame_rx,
subframe_rx,
ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->dlsch_unscrambling_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->dlsch_unscrambling_stats);
+ }
dlsch_unscrambling(&ue->frame_parms,
0,
dlsch1,
@@ -3631,9 +3632,9 @@ LOG_DEBUG_END
pdsch_vars->llr[1],
1,
subframe_rx<<1);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->dlsch_unscrambling_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->dlsch_unscrambling_stats);
+ }
LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> nb_rb %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->harq_processes[harq_pid]->nb_rb);
LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> rb_alloc_even %x \n", frame_rx, subframe_rx, harq_pid, (uint16_t)((intptr_t)dlsch1->harq_processes[harq_pid]->rb_alloc_even));
@@ -3643,9 +3644,9 @@ LOG_DEBUG_END
LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Kmimo %d \n", frame_rx, subframe_rx, harq_pid, dlsch1->Kmimo);
LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, subframe_rx, harq_pid, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols);
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
+ }
ret1 = dlsch_decoding(ue,
pdsch_vars->llr[1],
@@ -3658,13 +3659,13 @@ LOG_DEBUG_END
pdsch==PDSCH?1:0,
dlsch1->harq_processes[harq_pid]->TBS>256?1:0);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
- LOG_UI(PHY, " --> Unscrambling for CW1 %5.3f\n",
- (ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
- LOG_UI(PHY, "AbsSubframe %d.%d --> Turbo Decoding for CW1 %5.3f\n",
- frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0));
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
+ LOG_UI(PHY, " --> Unscrambling for CW1 %5.3f\n",
+ (ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
+ LOG_UI(PHY, "AbsSubframe %d.%d --> Turbo Decoding for CW1 %5.3f\n",
+ frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0));
+ }
LOG_D(PHY,"AbsSubframe %d.%d --> Turbo Decoding for CW1 %5.3f\n",
frame_rx%1024, subframe_rx,(ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0));
@@ -3703,15 +3704,15 @@ LOG_DEBUG_END
dlsch0->harq_processes[harq_pid]->TBS);
}
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- int j;
- LOG_D(PHY,"dlsch harq_pid %d (rx): \n",dlsch0->current_harq_pid);
+ if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)){
+ int j;
+ LOG_D(PHY,"dlsch harq_pid %d (rx): \n",dlsch0->current_harq_pid);
- for (j=0; jharq_processes[dlsch0->current_harq_pid]->TBS>>3; j++)
- LOG_T(PHY,"%x.",dlsch0->harq_processes[dlsch0->current_harq_pid]->b[j]);
+ for (j=0; jharq_processes[dlsch0->current_harq_pid]->TBS>>3; j++)
+ LOG_T(PHY,"%x.",dlsch0->harq_processes[dlsch0->current_harq_pid]->b[j]);
- LOG_T(PHY,"\n");
-LOG_DEBUG_END
+ LOG_T(PHY,"\n");
+ }
if (ue->mac_enabled == 1) {
@@ -3804,26 +3805,26 @@ LOG_DEBUG_END
}
}
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d: PDSCH/DLSCH decoding iter %d (mcs %d, rv %d, TBS %d)\n",
- ue->Mod_id,
- dlsch0->rnti,harq_pid,
- frame_rx,subframe_rx,ret,
- dlsch0->harq_processes[harq_pid]->mcs,
- dlsch0->harq_processes[harq_pid]->rvidx,
- dlsch0->harq_processes[harq_pid]->TBS);
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d][PDSCH %x/%d] Frame %d subframe %d: PDSCH/DLSCH decoding iter %d (mcs %d, rv %d, TBS %d)\n",
+ ue->Mod_id,
+ dlsch0->rnti,harq_pid,
+ frame_rx,subframe_rx,ret,
+ dlsch0->harq_processes[harq_pid]->mcs,
+ dlsch0->harq_processes[harq_pid]->rvidx,
+ dlsch0->harq_processes[harq_pid]->TBS);
+
+ if (frame_rx%100==0) {
+ LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d dlsch_errors %d, dlsch_received %d, dlsch_fer %d, current_dlsch_cqi %d\n",
+ ue->Mod_id,dlsch0->rnti,
+ frame_rx,subframe_rx,
+ ue->dlsch_errors[eNB_id],
+ ue->dlsch_received[eNB_id],
+ ue->dlsch_fer[eNB_id],
+ ue->measurements.wideband_cqi_tot[eNB_id]);
+ }
- if (frame_rx%100==0) {
- LOG_D(PHY,"[UE %d][PDSCH %x] Frame %d subframe %d dlsch_errors %d, dlsch_received %d, dlsch_fer %d, current_dlsch_cqi %d\n",
- ue->Mod_id,dlsch0->rnti,
- frame_rx,subframe_rx,
- ue->dlsch_errors[eNB_id],
- ue->dlsch_received[eNB_id],
- ue->dlsch_fer[eNB_id],
- ue->measurements.wideband_cqi_tot[eNB_id]);
- }
-
-LOG_DEBUG_END
+ } /*LOG_DEBUGFLAG(DEBUG_UE_PHYPROC) */
}
@@ -3909,9 +3910,9 @@ void *UE_thread_slot1_dl_processing(void *arg) {
}
/**** Slot1 FE Processing ****/
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1]);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1]);
+ }
// I- start dl slot1 processing
// do first symbol of next downlink subframe for channel estimation
/*
@@ -3936,9 +3937,9 @@ LOG_DEBUG_END
{
//if( (l != pilot0) && (l != pilot1))
{
-LOG_DEBUG_BEGIN(UE_TIMING)
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
start_meas(&ue->ofdm_demod_stats);
-LOG_DEBUG_END
+ }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
//printf("AbsSubframe %d.%d FFT slot %d, symbol %d\n", frame_rx,subframe_rx,slot1,l);
front_end_fft(ue,
@@ -3947,9 +3948,9 @@ LOG_DEBUG_END
0,
0);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->ofdm_demod_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->ofdm_demod_stats);
+ }
}
} // for l=1..l2
@@ -4002,11 +4003,10 @@ LOG_DEBUG_END
//printf(" [slot1 dl processing] ==> Start LLR Comuptation slot1 for AbsSubframe %d.%d \n", proc->frame_rx, proc->subframe_rx);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1]);
- LOG_UI(PHY, "[AbsSFN %d.%d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1].p_time/(cpuf*1000.0));
-
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1]);
+ LOG_UI(PHY, "[AbsSFN %d.%d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1].p_time/(cpuf*1000.0));
+ }
//wait until pdcch is decoded
@@ -4025,9 +4025,9 @@ LOG_DEBUG_END
//printf("AbsSubframe %d.%d Pdsch Procedure (slot1)\n",frame_rx,subframe_rx);
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1]);
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1]);
+ }
// start slave thread for Pdsch Procedure (slot1)
// do procedures for C-RNTI
uint8_t eNB_id = 0;
@@ -4097,10 +4097,10 @@ LOG_DEBUG_END
proc->llr_slot1_available=1;
//printf("Set available LLR slot1 to 1 AbsSubframe %d.%d \n",frame_rx,subframe_rx);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1]);
- LOG_UI(PHY, "[AbsSFN %d.%d] Slot1: LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1].p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1]);
+ LOG_UI(PHY, "[AbsSFN %d.%d] Slot1: LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1].p_time/(cpuf*1000.0));
+ }
if (pthread_mutex_lock(&proc->mutex_slot1_dl_processing) != 0) {
@@ -4144,14 +4144,14 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *pr
// start timers
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY," ****** start RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY," ****** start RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
+ }
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
- start_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
+ start_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
+ }
pmch_flag = is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms) ? 1 : 0;
@@ -4170,16 +4170,16 @@ LOG_DEBUG_END
ue->dlsch_ra[eNB_id]->active = 0;
}
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n",
- ue->Mod_id,frame_rx, subframe_rx);
-LOG_DEBUG_END
+ if ( LOG_DEBUG_FLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n",
+ ue->Mod_id,frame_rx, subframe_rx);
+ }
if (subframe_select(&ue->frame_parms,subframe_rx) == SF_S) { // S-subframe, do first 5 symbols only
- l2 = 5;
+ l2 = 4;
} else if (pmch_flag == 1) { // do first 2 symbols only
l2 = 1;
} else { // normal subframe, last symbol to be processed is the first of the second slot
@@ -4247,9 +4247,9 @@ LOG_DEBUG_END
/**** Slot0 FE Processing ****/
// I- start main thread for FFT/ChanEst symbol: 0/1 --> 7
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0]);
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0]);
+ }
// 1- perform FFT for pilot ofdm symbols first (ofdmSym7 ofdmSym4 or (ofdmSym6 ofdmSym3))
//printf("AbsSubframe %d.%d FFT slot %d, symbol %d\n", frame_rx,subframe_rx,slot1,pilot0);
front_end_fft(ue,
@@ -4282,9 +4282,9 @@ LOG_DEBUG_END
if( (l != pilot0) && (l != pilot1))
{
//printf("AbsSubframe %d.%d FFT slot %d, symbol %d\n", frame_rx,subframe_rx,slot0,l);
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->ofdm_demod_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->ofdm_demod_stats);
+ }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
front_end_fft(ue,
l,
@@ -4292,9 +4292,9 @@ LOG_DEBUG_END
0,
0);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->ofdm_demod_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->ofdm_demod_stats);
+ }
}
} // for l=1..l2
@@ -4313,32 +4313,32 @@ LOG_DEBUG_END
}
if (do_pdcch_flag) {
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]]);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+ }
if (ue_pdcch_procedures(eNB_id,ue,proc,abstraction_flag) == -1) {
LOG_E(PHY,"[UE %d] Frame %d, subframe %d: Error in pdcch procedures\n",ue->Mod_id,frame_rx,subframe_rx);
-LOG_DEBUG_BEGIN(UE_TIMING)
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: PDCCH %5.2f \n",frame_rx,subframe_rx,ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ }
//proc->dci_slot0_available = 1;
return(-1);
}
//proc->dci_slot0_available=1;
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]]);
- LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: PDCCH %5.2f \n",frame_rx,subframe_rx,ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+ LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: PDCCH %5.2f \n",frame_rx,subframe_rx,ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+ }
}
//printf("num_pdcch_symbols %d\n",ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols);
// first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH)
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0]);
- LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0]);
+ LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0));
+ }
//wait until slot1 FE is done
uint32_t wait = 0;
@@ -4348,10 +4348,10 @@ LOG_DEBUG_END
wait++;
}
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
- LOG_UI(PHY, "[AbsSFN %d.%d] FULL FE Processing %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
+ LOG_UI(PHY, "[AbsSFN %d.%d] FULL FE Processing %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0));
+ }
/**** End Subframe FE Processing ****/
@@ -4365,13 +4365,13 @@ LOG_DEBUG_END
//printf("AbsSubframe %d.%d Pdsch Procedure (slot0)\n",frame_rx%1024,subframe_rx);
//printf("AbsSubframe %d.%d Pdsch Procedure PDSCH Active %d \n",frame_rx%1024,subframe_rx, ue->dlsch[ue->current_thread_id[subframe_rx]][0][0]->active);
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+ }
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0]);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0]);
+ }
if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
ue_pdsch_procedures(ue,
@@ -4437,10 +4437,10 @@ LOG_DEBUG_END
//printf("Set available dci slot0 to 1 AbsSubframe %d.%d \n",frame_rx%1024,subframe_rx);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0]);
- LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)){
+ stop_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0]);
+ LOG_UI(PHY, "[AbsSFN %d.%d] Slot0: LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0));
+ }
//wait until LLR Slot1 is done
@@ -4453,16 +4453,16 @@ LOG_DEBUG_END
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
- LOG_UI(PHY, "[AbsSFN %d.%d] Full LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)){
+ stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+ LOG_UI(PHY, "[AbsSFN %d.%d] Full LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+ }
//=====================================================================//
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)){
+ start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+ }
LOG_D(PHY,"==> Start Turbo Decoder active dlsch %d SI %d RA %d \n",ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active,
ue->dlsch_SI[eNB_id]->active,
@@ -4524,10 +4524,10 @@ LOG_DEBUG_END
ue->dlsch_ra[eNB_id]->active = 0;
}
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
- LOG_UI(PHY, "[AbsSFN %d.%d] Channel Decoder: %5.2f \n",frame_rx,subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)
+ stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+ LOG_UI(PHY, "[AbsSFN %d.%d] Channel Decoder: %5.2f \n",frame_rx,subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+ }
// duplicate harq structure
uint8_t current_harq_pid = ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid;
@@ -4587,10 +4587,10 @@ LOG_DEBUG_END
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
-LOG_DEBUG_BEGIN(UE_TIMING)
+ if (LOG_DEBUGFLAG(UE_TIMING)){
stop_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
LOG_UI(PHY, "------FULL RX PROC [AbsSFN %d.%d]: %5.2f ------\n",frame_rx,subframe_rx,ue->phy_proc_rx[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ }
LOG_D(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
return (0);
@@ -4626,14 +4626,14 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
// start timers
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_I(PHY," ****** start RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_I(PHY," ****** start RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
+ }
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
- start_meas(&ue->generic_stat);
-LOG_DEBUG_END
+ if(LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
+ start_meas(&ue->generic_stat);
+ }
pmch_flag = is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms) ? 1 : 0;
@@ -4652,10 +4652,10 @@ LOG_DEBUG_END
ue->dlsch_ra[eNB_id]->active = 0;
}
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- LOG_D(PHY,"[UE %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n",
- ue->Mod_id,frame_rx, subframe_rx);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ LOG_D(PHY,"[UE %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n",
+ ue->Mod_id,frame_rx, subframe_rx);
+ }
if (ue->frame_parms.Ncp == 0) { // normal prefix
pilot1 = 4;
@@ -4665,7 +4665,7 @@ LOG_DEBUG_END
if (subframe_select(&ue->frame_parms,subframe_rx) == SF_S) { // S-subframe, do first 5 symbols only
- l2 = 5;
+ l2 = 4;
} else if (pmch_flag == 1) { // do first 2 symbols only
l2 = 1;
} else { // normal subframe, last symbol to be processed is the first of the second slot
@@ -4689,9 +4689,9 @@ LOG_DEBUG_END
LOG_D(PHY," ------ --> FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
for (; l<=l2; l++) {
if (abstraction_flag == 0) {
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->ofdm_demod_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->ofdm_demod_stats);
+ }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
slot_fep(ue,
l,
@@ -4700,16 +4700,16 @@ LOG_DEBUG_END
0,
0);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->ofdm_demod_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->ofdm_demod_stats);
+ }
}
ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
if (do_pdcch_flag) {
if ((l==pilot1) ||
- ((pmch_flag==1)&(l==l2))) {
+ ((pmch_flag==1)&&(l==l2))) {
LOG_D(PHY,"[UE %d] Frame %d: Calling pdcch procedures (eNB %d)\n",ue->Mod_id,frame_rx,eNB_id);
//start_meas(&ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]]);
@@ -4729,9 +4729,22 @@ LOG_DEBUG_END
ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
LOG_D(PHY," ------ end FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
- // If this is PMCH, call procedures and return
+
+ // If this is PMCH, call procedures, do channel estimation for first symbol of next DL subframe and return
if (pmch_flag == 1) {
ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag);
+
+ int next_subframe_rx = (1+subframe_rx)%10;
+ if (subframe_select(&ue->frame_parms,next_subframe_rx) != SF_UL)
+ {
+ slot_fep(ue,
+ 0,
+ (next_subframe_rx<<1),
+ 0,
+ 0,
+ 0);
+ }
+
return 0;
}
@@ -4743,16 +4756,16 @@ LOG_DEBUG_END
0);
// first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH)
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->generic_stat);
- LOG_UI(PHY, "[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->generic_stat);
+ LOG_UI(PHY, "[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
+ }
LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->generic_stat);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->generic_stat);
+ }
// do procedures for C-RNTI
if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
@@ -4822,9 +4835,9 @@ LOG_DEBUG_END
if (subframe_select(&ue->frame_parms,subframe_rx) != SF_S) { // do front-end processing for second slot, and first symbol of next subframe
for (l=1; lframe_parms.symbols_per_tti>>1; l++) {
if (abstraction_flag == 0) {
-LOG_DEBUG_BEGIN(UE_TIMING)
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
start_meas(&ue->ofdm_demod_stats);
-LOG_DEBUG_END
+ }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
slot_fep(ue,
l,
@@ -4833,14 +4846,15 @@ LOG_DEBUG_END
0,
0);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->ofdm_demod_stats);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->ofdm_demod_stats);
+ }
}
ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode);
} // for l=1..l2
+ ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode);
// do first symbol of next downlink subframe for channel estimation
int next_subframe_rx = (1+subframe_rx)%10;
@@ -4854,10 +4868,10 @@ LOG_DEBUG_END
0);
}
} // not an S-subframe
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->generic_stat);
- LOG_UI(PHY, "[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if(LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->generic_stat);
+ LOG_UI(PHY, "[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
+ }
LOG_D(PHY," ------ end FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
@@ -4872,9 +4886,9 @@ LOG_DEBUG_END
LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+ }
ue_pdsch_procedures(ue,
proc,
eNB_id,
@@ -4886,10 +4900,10 @@ LOG_DEBUG_END
abstraction_flag);
LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
LOG_D(PHY," ------ --> PDSCH Turbo Decoder slot 0/1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
- start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+ start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+ }
ue_dlsch_procedures(ue,
proc,
eNB_id,
@@ -4899,38 +4913,38 @@ LOG_DEBUG_END
&ue->dlsch_errors[eNB_id],
mode,
abstraction_flag);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
- LOG_UI(PHY, "[SFN %d] Slot1: Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
- LOG_UI(PHY, "[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+ LOG_UI(PHY, "[SFN %d] Slot1: Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+ LOG_UI(PHY, "[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+ }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
}
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->generic_stat);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->generic_stat);
+ }
-LOG_M_BEGIN(DEBUG_UE_PHYPROC)
- if(subframe_rx==5 && ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid]->nb_rb > 20){
- //LOG_M("decoder_llr.m","decllr",dlsch_llr,G,1,0);
- //LOG_M("llr.m","llr", &ue->pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0);
+ if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)) {
+ if(subframe_rx==5 && ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid]->nb_rb > 20){
+ //LOG_M("decoder_llr.m","decllr",dlsch_llr,G,1,0);
+ //LOG_M("llr.m","llr", &ue->pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0);
- LOG_M("rxdataF0_current.m" , "rxdataF0", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
- //LOG_M("rxdataF0_previous.m" , "rxdataF0_prev_sss", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
+ LOG_M("rxdataF0_current.m" , "rxdataF0", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
+ //LOG_M("rxdataF0_previous.m" , "rxdataF0_prev_sss", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
- //LOG_M("rxdataF0_previous.m" , "rxdataF0_prev", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
+ //LOG_M("rxdataF0_previous.m" , "rxdataF0_prev", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
- LOG_M("dl_ch_estimates.m", "dl_ch_estimates_sfn5", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].dl_ch_estimates[0][0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
- LOG_M("dl_ch_estimates_ext.m", "dl_ch_estimatesExt_sfn5", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_estimates_ext[0][0],14*ue->frame_parms.N_RB_DL*12,1,1);
- LOG_M("rxdataF_comp00.m","rxdataF_comp00", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->rxdataF_comp0[0][0],14*ue->frame_parms.N_RB_DL*12,1,1);
- //LOG_M("magDLFirst.m", "magDLFirst", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_mag0[0][0],14*frame_parms->N_RB_DL*12,1,1);
- //LOG_M("magDLSecond.m", "magDLSecond", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_magb0[0][0],14*frame_parms->N_RB_DL*12,1,1);
+ LOG_M("dl_ch_estimates.m", "dl_ch_estimates_sfn5", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].dl_ch_estimates[0][0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
+ LOG_M("dl_ch_estimates_ext.m", "dl_ch_estimatesExt_sfn5", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_estimates_ext[0][0],14*ue->frame_parms.N_RB_DL*12,1,1);
+ LOG_M("rxdataF_comp00.m","rxdataF_comp00", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->rxdataF_comp0[0][0],14*ue->frame_parms.N_RB_DL*12,1,1);
+ //LOG_M("magDLFirst.m", "magDLFirst", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_mag0[0][0],14*frame_parms->N_RB_DL*12,1,1);
+ //LOG_M("magDLSecond.m", "magDLSecond", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_magb0[0][0],14*frame_parms->N_RB_DL*12,1,1);
- AssertFatal (0,"");
+ AssertFatal (0,"");
+ }
}
-LOG_M_END
// do procedures for SI-RNTI
if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
@@ -5035,25 +5049,25 @@ LOG_M_END
ue->Mod_id,frame_rx,ue->total_TBS[eNB_id],
ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0);
-LOG_DEBUG_BEGIN(DEBUG_UE_PHYPROC)
- if ((frame_rx % 100 == 0)) {
- LOG_I(PHY,"[UE %d] AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", ue->Mod_id, (float) ue->bitrate[eNB_id]/1000.0, frame_rx);
+ if ( LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+ if ((frame_rx % 100 == 0)) {
+ LOG_UI(PHY,"[UE %d] AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", ue->Mod_id, (float) ue->bitrate[eNB_id]/1000.0, frame_rx);
+ }
}
-LOG_DEBUG_END
}
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->generic_stat);
- printf("after tubo until end of Rx %5.2f \n",ue->generic_stat.p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->generic_stat);
+ LOG_UI(PHY,"after tubo until end of Rx %5.2f \n",ue->generic_stat.p_time/(cpuf*1000.0));
+ }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
- LOG_UI(PHY, "------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(UE_TIMING) ) {
+ stop_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
+ LOG_UI(PHY, "------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+ }
LOG_D(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
return (0);
@@ -5083,9 +5097,9 @@ void phy_procedures_UE_lte(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,u
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,1);
-LOG_DEBUG_BEGIN(UE_TIMING)
- start_meas(&ue->phy_proc[ue->current_thread_id[subframe_rx]]);
-LOG_DEBUG_END
+ if ( LOG_DEBUGFLAG(UE_TIMING)) {
+ start_meas(&ue->phy_proc[ue->current_thread_id[subframe_rx]]);
+ }
#if defined(ENABLE_ITTI)
@@ -5168,9 +5182,9 @@ LOG_DEBUG_END
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,0);
-LOG_DEBUG_BEGIN(UE_TIMING)
- stop_meas(&ue->phy_proc[ue->current_thread_id[subframe_rx]]);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(UE_TIMING)) {
+ stop_meas(&ue->phy_proc[ue->current_thread_id[subframe_rx]]);
+ }
} // slot
}
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index 7e2f1ad2e0..a03ce34bca 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -523,7 +523,7 @@ int main(int argc, char **argv)
int c;
int k,i,j,aa;
int re;
-
+ int loglvl=OAILOG_DEBUG;
int s,Kr,Kr_bytes;
@@ -1001,7 +1001,7 @@ int main(int argc, char **argv)
break;
case 'L':
- set_glog(atoi(optarg));
+ loglvl = atoi(optarg);
break;
case 'h':
@@ -1049,7 +1049,7 @@ int main(int argc, char **argv)
"cannot load configuration module, exiting\n");
logInit();
// enable these lines if you need debug info
- set_glog(LOG_DEBUG);
+ set_glog(loglvl);
// moreover you need to init itti with the following line
// however itti will catch all signals, so ctrl-c won't work anymore
// alternatively you can disable ITTI completely in CMakeLists.txt
@@ -2046,24 +2046,9 @@ int main(int argc, char **argv)
qsort (table_rx, time_vector_rx.size, sizeof(double), &compare);
if (dump_table == 1 ) {
- set_component_filelog(USIM); // file located in /tmp/usim.txt
- int n;
- LOG_F(USIM,"The transmitter raw data: \n");
-
- for (n=0; n< time_vector_tx.size; n++) {
- printf("%f ", table_tx[n]);
- LOG_F(USIM,"%f ", table_tx[n]);
- }
-
- LOG_F(USIM,"\n");
- LOG_F(USIM,"The receiver raw data: \n");
-
- for (n=0; n< time_vector_rx.size; n++) {
- // printf("%f ", table_rx[n]);
- LOG_F(USIM,"%f ", table_rx[n]);
- }
-
- LOG_F(USIM,"\n");
+ set_component_filelog(SIM); // file located in /tmp/usim.txt
+ LOG_UDUMPMSG(SIM,table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,"The transmitter raw data: \n");
+ LOG_UDUMPMSG(SIM,table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,"Thereceiver raw data: \n");
}
double tx_median = table_tx[time_vector_tx.size/2];
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
index 0c942df275..2176e272c8 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
@@ -5016,24 +5016,11 @@ int main(int argc, char **argv)
if (dump_table == 1 ) {
set_component_filelog(USIM); // file located in /tmp/usim.txt
- int n;
- LOG_F(USIM,"The transmitter raw data: \n");
+ LOG_UDUMPMSG(RRC,(char *)table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,
+ "The transmitter raw data: \n");
+ LOG_UDUMPMSG(RRC,(char *)table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,
+ "The receiver raw data: \n");
- for (n=0; n< time_vector_tx.size; n++) {
- printf("%f ", table_tx[n]);
- LOG_F(USIM,"%f ", table_tx[n]);
- }
-
- LOG_F(USIM,"\n");
- LOG_F(USIM,"The receiver raw data: \n");
-
- for (n=0; n< time_vector_rx.size; n++) {
- // printf("%f ", table_rx[n]);
- LOG_F(USIM,"%f ", table_rx[n]);
- }
-
- LOG_F(USIM,"\n");
- }
double tx_median = table_tx[time_vector_tx.size/2];
double tx_q1 = table_tx[time_vector_tx.size/4];
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
index b41dd5536c..570c13c0b6 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
@@ -3851,24 +3851,9 @@ PMI_FEEDBACK:
qsort (table_rx, time_vector_rx.size, sizeof(double), &compare);
if (dump_table == 1 ) {
- set_component_filelog(USIM); // file located in /tmp/usim.txt
- int n;
- LOG_F(USIM,"The transmitter raw data: \n");
-
- for (n=0; n< time_vector_tx.size; n++) {
- printf("%f ", table_tx[n]);
- LOG_F(USIM,"%f ", table_tx[n]);
- }
-
- LOG_F(USIM,"\n");
- LOG_F(USIM,"The receiver raw data: \n");
-
- for (n=0; n< time_vector_rx.size; n++) {
- // printf("%f ", table_rx[n]);
- LOG_F(USIM,"%f ", table_rx[n]);
- }
-
- LOG_F(USIM,"\n");
+ set_component_filelog(SIM); // file located in /tmp/usim.txt
+ LOG_UDUMPMSG(SIM,table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,"The transmitter raw data: \n");
+ LOG_UDUMPMSG(SIM,table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,"The receiver raw data: \n");
}
double tx_median = table_tx[time_vector_tx.size/2];
diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c
index ab7a29b096..3fcb010685 100644
--- a/openair1/SIMULATION/LTE_PHY/ulsim.c
+++ b/openair1/SIMULATION/LTE_PHY/ulsim.c
@@ -1491,24 +1491,9 @@ int main(int argc, char **argv)
qsort (table_rx, time_vector_rx.size, sizeof(double), &compare);
if (dump_table == 1 ) {
- int n;
set_component_filelog(SIM); // file located in /tmp/usim.txt
- LOG_F(SIM,"The transmitter raw data: \n");
-
- for (n=0; n< time_vector_tx.size; n++) {
- // printf("%f ", table_tx[n]);
- LOG_F(SIM,"%f ", table_tx[n]);
- }
-
- LOG_F(SIM,"\n");
- LOG_F(SIM,"The receiver raw data: \n");
-
- for (n=0; n< time_vector_rx.size; n++) {
- // printf("%f ", table_rx[n]);
- LOG_F(SIM,"%f ", table_rx[n]);
- }
-
- LOG_F(SIM,"\n");
+ LOG_UDUMPMSG(SIM,table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,"The transmitter raw data: \n");
+ LOG_UDUMPMSG(SIM,table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,"The receiver raw data: \n");
}
double tx_median = table_tx[time_vector_tx.size/2];
diff --git a/openair2/COMMON/x2ap_messages_def.h b/openair2/COMMON/x2ap_messages_def.h
index 4690bba42e..36842c13d0 100644
--- a/openair2/COMMON/x2ap_messages_def.h
+++ b/openair2/COMMON/x2ap_messages_def.h
@@ -19,3 +19,24 @@
* contact@openairinterface.org
*/
+/* eNB application layer -> X2AP messages */
+/* ITTI LOG messages */
+/* ENCODER */
+MESSAGE_DEF(X2AP_RESET_REQUST_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , x2ap_reset_request_log)
+MESSAGE_DEF(X2AP_RESOURCE_STATUS_RESPONSE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , x2ap_resource_status_response_log)
+MESSAGE_DEF(X2AP_RESOURCE_STATUS_FAILURE_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , x2ap_resource_status_failure_log)
+
+/* Messages for X2AP logging */
+MESSAGE_DEF(X2AP_SETUP_REQUEST_LOG , MESSAGE_PRIORITY_MED, IttiMsgText , x2ap_setup_request_log)
+
+
+/* eNB application layer -> X2AP messages */
+MESSAGE_DEF(X2AP_REGISTER_ENB_REQ , MESSAGE_PRIORITY_MED, x2ap_register_enb_req_t , x2ap_register_enb_req)
+
+/* X2AP -> eNB application layer messages */
+MESSAGE_DEF(X2AP_REGISTER_ENB_CNF , MESSAGE_PRIORITY_MED, x2ap_register_enb_cnf_t , x2ap_register_enb_cnf)
+MESSAGE_DEF(X2AP_DEREGISTERED_ENB_IND , MESSAGE_PRIORITY_MED, x2ap_deregistered_enb_ind_t , x2ap_deregistered_enb_ind)
+
+/* handover messages X2AP <-> RRC */
+MESSAGE_DEF(X2AP_HANDOVER_REQ , MESSAGE_PRIORITY_MED, x2ap_handover_req_t , x2ap_handover_req)
+MESSAGE_DEF(X2AP_HANDOVER_REQ_ACK , MESSAGE_PRIORITY_MED, x2ap_handover_req_ack_t , x2ap_handover_req_ack)
diff --git a/openair2/COMMON/x2ap_messages_types.h b/openair2/COMMON/x2ap_messages_types.h
index 4690bba42e..6c4031b981 100644
--- a/openair2/COMMON/x2ap_messages_types.h
+++ b/openair2/COMMON/x2ap_messages_types.h
@@ -19,3 +19,158 @@
* contact@openairinterface.org
*/
+#ifndef X2AP_MESSAGES_TYPES_H_
+#define X2AP_MESSAGES_TYPES_H_
+
+#include "PhysCellId.h"
+
+//-------------------------------------------------------------------------------------------//
+// Defines to access message fields.
+
+#define X2AP_REGISTER_ENB_REQ(mSGpTR) (mSGpTR)->ittiMsg.x2ap_register_enb_req
+#define X2AP_HANDOVER_REQ(mSGpTR) (mSGpTR)->ittiMsg.x2ap_handover_req
+#define X2AP_HANDOVER_REQ_ACK(mSGpTR) (mSGpTR)->ittiMsg.x2ap_handover_req_ack
+#define X2AP_REGISTER_ENB_CNF(mSGpTR) (mSGpTR)->ittiMsg.x2ap_register_enb_cnf
+#define X2AP_DEREGISTERED_ENB_IND(mSGpTR) (mSGpTR)->ittiMsg.x2ap_deregistered_enb_ind
+
+
+#define X2AP_MAX_NB_ENB_IP_ADDRESS 2
+
+// eNB application layer -> X2AP messages
+typedef struct x2ap_register_enb_req_s {
+ /* Unique eNB_id to identify the eNB within EPC.
+ * For macro eNB ids this field should be 20 bits long.
+ * For home eNB ids this field should be 28 bits long.
+ */
+ uint32_t eNB_id;
+ /* The type of the cell */
+ enum cell_type_e cell_type;
+
+ /* Optional name for the cell
+ * NOTE: the name can be NULL (i.e no name) and will be cropped to 150
+ * characters.
+ */
+ char *eNB_name;
+
+ /* Tracking area code */
+ uint16_t tac;
+
+ /* Mobile Country Code
+ * Mobile Network Code
+ */
+ uint16_t mcc;
+ uint16_t mnc;
+ uint8_t mnc_digit_length;
+
+ /*
+ * EARFCN
+ */
+ uint16_t fdd_uL_EARFCN;
+ uint16_t fdd_dL_EARFCN;
+ uint16_t tdd_EARFCN;
+
+
+ uint16_t fdd_uL_Transmission_Bandwidth;
+ uint16_t fdd_dL_Transmission_Bandwidth;
+ uint16_t tdd_Transmission_Bandwidth;
+
+
+ /* The local eNB IP address to bind */
+ net_ip_address_t enb_x2_ip_address;
+
+ /* Nb of MME to connect to */
+ uint8_t nb_x2;
+
+ /* List of target eNB to connect to for X2*/
+ net_ip_address_t target_enb_x2_ip_address[X2AP_MAX_NB_ENB_IP_ADDRESS];
+
+ /* Number of SCTP streams used for associations */
+ uint16_t sctp_in_streams;
+ uint16_t sctp_out_streams;
+
+ /* eNB port for X2C*/
+ uint32_t enb_port_for_X2C;
+} x2ap_register_enb_req_t;
+
+//-------------------------------------------------------------------------------------------//
+// X2AP -> eNB application layer messages
+typedef struct x2ap_register_enb_cnf_s {
+ /* Nb of connected eNBs*/
+ uint8_t nb_x2;
+} x2ap_register_enb_cnf_t;
+
+typedef struct x2ap_deregistered_enb_ind_s {
+ /* Nb of connected eNBs */
+ uint8_t nb_x2;
+} x2ap_deregistered_enb_ind_t;
+
+//-------------------------------------------------------------------------------------------//
+// X2AP <-> RRC
+typedef struct x2ap_gummei_s {
+ uint16_t mcc;
+ uint16_t mnc;
+ uint8_t mnc_len;
+ uint8_t mme_code;
+ uint16_t mme_group_id;
+} x2ap_gummei_t;
+
+typedef struct x2ap_lastvisitedcell_info_s {
+ uint16_t mcc;
+ uint16_t mnc;
+ uint8_t mnc_len;
+ PhysCellId_t target_physCellId;
+ cell_type_t cell_type;
+ uint64_t time_UE_StayedInCell;
+}x2ap_lastvisitedcell_info_t;
+
+//used for src
+typedef struct x2ap_handover_req_s {
+ int source_rnti; /* TODO: to be fixed/remove */
+ int source_x2id; /* TODO: to be fixed/remove */
+
+ unsigned old_eNB_ue_s1ap_id:24;
+
+ PhysCellId_t target_physCellId;
+
+ x2ap_gummei_t ue_gummei;
+
+ /*UE-ContextInformation */
+
+ /* MME UE id */
+ uint32_t mme_ue_s1ap_id;
+
+ security_capabilities_t security_capabilities;
+
+ uint8_t kenb[32]; // keNB or keNB*
+
+ /*next_hop_chaining_coun */
+ long int kenb_ncc;
+
+ /* UE aggregate maximum bitrate */
+ ambr_t ue_ambr;
+
+ uint8_t nb_e_rabs_tobesetup;
+
+ /* list of e_rab setup-ed by RRC layers */
+ e_rab_setup_t e_rabs_tobesetup[S1AP_MAX_E_RAB];
+
+ /* ue_context_pP->ue_context.e_rab[i].param.sgw_addr; */
+
+ x2ap_lastvisitedcell_info_t lastvisitedcell_info;
+
+ /* TODO: this parameter has to be removed */
+ int target_mod_id;
+} x2ap_handover_req_t;
+
+typedef struct x2ap_handover_req_ack_s {
+ int source_rnti; /* TODO: to be fixed/remove */
+ int source_x2id; /* TODO: to be fixed/remove */
+ /* TODO: this parameter has to be removed */
+ int target_mod_id;
+ uint8_t rrc_buffer[1024 /* arbitrary, big enough */];
+ int rrc_buffer_size;
+
+ uint32_t mme_ue_s1ap_id;
+} x2ap_handover_req_ack_t;
+
+#endif /* X2AP_MESSAGES_TYPES_H_ */
diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c
index 0545eeb3be..549c7eaa22 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c
+++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c
@@ -38,7 +38,7 @@
#include "liblfds700.h"
-#include "log.h"
+#include "common/utils/LOG/log.h"
/*Flags showing if a mac agent has already been registered*/
unsigned int mac_agent_registered[NUM_MAX_ENB];
diff --git a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
index e5e242232c..b4bf029373 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
+++ b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
@@ -31,7 +31,7 @@
#include "liblfds700.h"
-#include "log.h"
+#include "common/utils/LOG/log.h"
/*Trigger boolean for RRC measurement*/
bool triggered_rrc = false;
diff --git a/openair2/ENB_APP/NB_IoT_interface.c b/openair2/ENB_APP/NB_IoT_interface.c
index c4884453c2..7355233d71 100644
--- a/openair2/ENB_APP/NB_IoT_interface.c
+++ b/openair2/ENB_APP/NB_IoT_interface.c
@@ -43,7 +43,7 @@ int load_NB_IoT(void) {
RCConfig_NbIoT_f_t RCConfig;
loader_shlibfunc_t shlib_fdesc[]=NBIOT_INTERFACE_FLIST;
- ret=load_module_shlib(NBIOT_MODULENAME,shlib_fdesc,sizeof(shlib_fdesc)/sizeof(loader_shlibfunc_t));
+ ret=load_module_shlib(NBIOT_MODULENAME,shlib_fdesc,sizeof(shlib_fdesc)/sizeof(loader_shlibfunc_t),NULL);
if (ret) {
return ret;
}
diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c
index 37cdf06ed2..f01c734bc3 100644
--- a/openair2/ENB_APP/enb_app.c
+++ b/openair2/ENB_APP/enb_app.c
@@ -35,7 +35,7 @@
#include "assertions.h"
#include "common/ran_context.h"
-#include "log.h"
+#include "common/utils/LOG/log.h"
#if defined(ENABLE_ITTI)
# include "intertask_interface.h"
@@ -43,12 +43,20 @@
# if defined(ENABLE_USE_MME)
# define ENB_REGISTER_RETRY_DELAY 10
# include "s1ap_eNB.h"
+# include "sctp_eNB_task.h"
+# include "gtpv1u_eNB_task.h"
+# else
+# define EPC_MODE_ENABLED 0
# endif
#if defined(FLEXRAN_AGENT_SB_IF)
# include "flexran_agent.h"
#endif
+//# include "x2ap_eNB.h"
+# include "x2ap_messages_types.h"
+# define X2AP_ENB_REGISTER_RETRY_DELAY 10
+
#include "openair1/PHY/INIT/phy_init.h"
extern unsigned char NB_eNB_INST;
#endif
@@ -101,6 +109,30 @@ static uint32_t eNB_app_register(ngran_node_t node_type,uint32_t enb_id_start, u
# endif
#endif
+/*------------------------------------------------------------------------------*/
+static uint32_t eNB_app_register_x2(uint32_t enb_id_start, uint32_t enb_id_end)
+{
+ uint32_t enb_id;
+ MessageDef *msg_p;
+ uint32_t register_enb_x2_pending = 0;
+
+ for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) {
+
+ {
+
+ msg_p = itti_alloc_new_message (TASK_ENB_APP, X2AP_REGISTER_ENB_REQ);
+
+ RCconfig_X2(msg_p, enb_id);
+
+ //itti_send_msg_to_task (TASK_X2AP, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
+
+ register_enb_x2_pending++;
+ }
+ }
+
+ return register_enb_x2_pending;
+}
+
/*------------------------------------------------------------------------------*/
void *eNB_app_task(void *args_p)
{
@@ -109,10 +141,13 @@ void *eNB_app_task(void *args_p)
uint32_t enb_id_start = 0;
uint32_t enb_id_end = enb_id_start + enb_nb;
# if defined(ENABLE_USE_MME)
- uint32_t register_enb_pending;
+ uint32_t register_enb_pending=0;
uint32_t registered_enb;
long enb_register_retry_timer_id;
# endif
+ uint32_t x2_register_enb_pending;
+ //uint32_t x2_registered_enb;
+ //long x2_enb_register_retry_timer_id;
uint32_t enb_id;
MessageDef *msg_p = NULL;
instance_t instance;
@@ -129,9 +164,13 @@ void *eNB_app_task(void *args_p)
register_enb_pending = eNB_app_register (RC.rrc[0]->node_type,enb_id_start, enb_id_end);//, enb_properties_p);
# else
/* Start L2L1 task */
- msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE);
- itti_send_msg_to_task(TASK_L2L1, INSTANCE_DEFAULT, msg_p);
-# endif
+ msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE);
+ itti_send_msg_to_task(TASK_L2L1, INSTANCE_DEFAULT, msg_p);
+#endif
+
+ /* Try to register each eNB with each other */
+ // x2_registered_enb = 0;
+ x2_register_enb_pending = eNB_app_register_x2 (enb_id_start, enb_id_end);
do {
// Wait for a message
@@ -149,8 +188,6 @@ void *eNB_app_task(void *args_p)
LOG_I(ENB_APP, "Received %s\n", ITTI_MSG_NAME(msg_p));
break;
-# if defined(ENABLE_USE_MME)
-
case S1AP_REGISTER_ENB_CNF:
AssertFatal(RC.rrc[0]->node_type != ngran_eNB_DU, "Should not have received S1AP_REGISTER_ENB_CNF\n");
@@ -239,23 +276,26 @@ void *eNB_app_task(void *args_p)
break;
case S1AP_DEREGISTERED_ENB_IND:
- LOG_W(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p),
- S1AP_DEREGISTERED_ENB_IND(msg_p).nb_mme);
+ if (EPC_MODE_ENABLED) {
+ LOG_W(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p),
+ S1AP_DEREGISTERED_ENB_IND(msg_p).nb_mme);
- /* TODO handle recovering of registration */
+ /* TODO handle recovering of registration */
+ }
break;
case TIMER_HAS_EXPIRED:
- LOG_I(ENB_APP, " Received %s: timer_id %ld\n", ITTI_MSG_NAME (msg_p), TIMER_HAS_EXPIRED(msg_p).timer_id);
-
- if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) {
- /* Restart the registration process */
- registered_enb = 0;
- register_enb_pending = eNB_app_register (RC.rrc[0]->node_type,enb_id_start, enb_id_end);//, enb_properties_p);
- }
+# if defined(ENABLE_USE_MME)
+ LOG_I(ENB_APP, " Received %s: timer_id %ld\n", ITTI_MSG_NAME (msg_p), TIMER_HAS_EXPIRED(msg_p).timer_id);
+ if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) {
+ /* Restart the registration process */
+ registered_enb = 0;
+ register_enb_pending = eNB_app_register (RC.rrc[0]->node_type, enb_id_start, enb_id_end);//, enb_properties_p);
+ }
+#endif
break;
-# endif
+
default:
LOG_E(ENB_APP, "Received unexpected message %s\n", ITTI_MSG_NAME (msg_p));
diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c
index 93a49cca2e..1d9a088144 100644
--- a/openair2/ENB_APP/enb_config.c
+++ b/openair2/ENB_APP/enb_config.c
@@ -37,10 +37,12 @@
#include "UTIL/OTG/otg_externs.h"
#if defined(ENABLE_ITTI)
# include "intertask_interface.h"
-# if defined(ENABLE_USE_MME)
+# if defined(ENABLE_USE_MME)
# include "s1ap_eNB.h"
# include "sctp_eNB_task.h"
-# endif
+# else
+# define EPC_MODE_ENABLED 0
+# endif
#endif
#include "common/ran_context.h"
#include "sctp_default_values.h"
@@ -202,11 +204,10 @@ void RCconfig_flexran()
/* eNB ID from configuration, as read in by RCconfig_RRC() */
if (!ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr) {
// Calculate a default eNB ID
-# if defined(ENABLE_USE_MME)
- enb_id = i + (s1ap_generate_eNB_id () & 0xFFFF8);
-# else
- enb_id = i;
-# endif
+ if (EPC_MODE_ENABLED)
+ enb_id = i + (s1ap_generate_eNB_id () & 0xFFFF8);
+ else
+ enb_id = i;
} else {
enb_id = *(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr);
}
@@ -729,32 +730,13 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc) {
CCsParams[I].chkPptr = &(config_check_CCparams[I]);
}
/* get global parameters, defined outside any section in the config file */
-
+
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
+
num_enbs = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt;
AssertFatal (i0) {
@@ -766,14 +748,14 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc) {
if (ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr == NULL) {
// Calculate a default eNB ID
-# if defined(ENABLE_USE_MME)
- uint32_t hash;
-
- hash = s1ap_generate_eNB_id ();
- enb_id = i + (hash & 0xFFFF8);
-# else
- enb_id = i;
-# endif
+ if (EPC_MODE_ENABLED) {
+ uint32_t hash;
+
+ hash = s1ap_generate_eNB_id ();
+ enb_id = i + (hash & 0xFFFF8);
+ } else {
+ enb_id = i;
+ }
} else {
enb_id = *(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr);
}
@@ -2527,23 +2509,9 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
/* get global parameters, defined outside any section in the config file */
- config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
-#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
- if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) {
- asn_debug = 0;
- asn1_xer_print = 0;
- } else if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) {
- asn_debug = 1;
- asn1_xer_print = 1;
- } else if (strcasecmp(*(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr) , ENB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) {
- asn_debug = 1;
- asn1_xer_print = 2;
- } else {
- asn_debug = 0;
- asn1_xer_print = 0;
- }
+ config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
+
-#endif
AssertFatal (i 0) {
+ // Output a list of all eNBs.
+ config_getlist( &ENBParamList,ENBParams,sizeof(ENBParams)/sizeof(paramdef_t),NULL);
+ if (ENBParamList.numelt > 0) {
+ for (k = 0; k < ENBParamList.numelt; k++) {
+ if (ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr == NULL) {
+ // Calculate a default eNB ID
+# if defined(ENABLE_USE_MME)
+ uint32_t hash;
+
+ hash = s1ap_generate_eNB_id ();
+ enb_id = k + (hash & 0xFFFF8);
+# else
+ enb_id = k;
+# endif
+ } else {
+ enb_id = *(ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr);
+ }
+
+ // search if in active list
+ for (j = 0; j < ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt; j++) {
+ if (strcmp(ENBSParams[ENB_ACTIVE_ENBS_IDX].strlistptr[j], *(ENBParamList.paramarray[k][ENB_ENB_NAME_IDX].strptr)) == 0) {
+
+ paramdef_t X2Params[] = X2PARAMS_DESC;
+ paramlist_def_t X2ParamList = {ENB_CONFIG_STRING_TARGET_ENB_X2_IP_ADDRESS,NULL,0};
+
+ paramdef_t SCTPParams[] = SCTPPARAMS_DESC;
+ paramdef_t NETParams[] = NETPARAMS_DESC;
+ char aprefix[MAX_OPTNAME_SIZE*2 + 8];
+
+ /* Some default/random parameters */
+
+ X2AP_REGISTER_ENB_REQ (msg_p).eNB_id = enb_id;
+
+ if (strcmp(*(ENBParamList.paramarray[k][ENB_CELL_TYPE_IDX].strptr), "CELL_MACRO_ENB") == 0) {
+ X2AP_REGISTER_ENB_REQ (msg_p).cell_type = CELL_MACRO_ENB;
+ } else if (strcmp(*(ENBParamList.paramarray[k][ENB_CELL_TYPE_IDX].strptr), "CELL_HOME_ENB") == 0) {
+ X2AP_REGISTER_ENB_REQ (msg_p).cell_type = CELL_HOME_ENB;
+ } else {
+ AssertFatal (0,
+ "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for cell_type choice: CELL_MACRO_ENB or CELL_HOME_ENB !\n",
+ RC.config_file_name, i, *(ENBParamList.paramarray[k][ENB_CELL_TYPE_IDX].strptr));
+ }
+
+ X2AP_REGISTER_ENB_REQ (msg_p).eNB_name = strdup(*(ENBParamList.paramarray[k][ENB_ENB_NAME_IDX].strptr));
+ X2AP_REGISTER_ENB_REQ (msg_p).tac = (uint16_t)atoi(*(ENBParamList.paramarray[k][ENB_TRACKING_AREA_CODE_IDX].strptr));
+ X2AP_REGISTER_ENB_REQ (msg_p).mcc = (uint16_t)atoi(*(ENBParamList.paramarray[k][ENB_MOBILE_COUNTRY_CODE_IDX].strptr));
+ X2AP_REGISTER_ENB_REQ (msg_p).mnc = (uint16_t)atoi(*(ENBParamList.paramarray[k][ENB_MOBILE_NETWORK_CODE_IDX].strptr));
+ X2AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length = strlen(*(ENBParamList.paramarray[k][ENB_MOBILE_NETWORK_CODE_IDX].strptr));
+
+ AssertFatal((X2AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length == 2) ||
+ (X2AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length == 3),
+ "BAD MNC DIGIT LENGTH %d",
+ X2AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length);
+
+ sprintf(aprefix,"%s.[%i]",ENB_CONFIG_STRING_ENB_LIST,k);
+ config_getlist( &X2ParamList,X2Params,sizeof(X2Params)/sizeof(paramdef_t),aprefix);
+
+ if(X2ParamList.numelt>X2AP_MAX_NB_ENB_IP_ADDRESS){
+ LOG_E(RRC,"value of X2ParamList.numelt %d must be lower than X2AP_MAX_NB_ENB_IP_ADDRESS %d value: reconsider to increase X2AP_MAX_NB_ENB_IP_ADDRESS\n",X2ParamList.numelt,X2AP_MAX_NB_ENB_IP_ADDRESS);
+ exit(1);
+ }
+
+ X2AP_REGISTER_ENB_REQ (msg_p).nb_x2 = 0;
+ for (l = 0; l < X2ParamList.numelt; l++) {
+ X2AP_REGISTER_ENB_REQ (msg_p).nb_x2 += 1;
+
+ strcpy(X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4_address,*(X2ParamList.paramarray[l][ENB_X2_IPV4_ADDRESS_IDX].strptr));
+ strcpy(X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6_address,*(X2ParamList.paramarray[l][ENB_X2_IPV6_ADDRESS_IDX].strptr));
+
+ if (strcmp(*(X2ParamList.paramarray[l][ENB_X2_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) {
+ X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4 = 1;
+ } else if (strcmp(*(X2ParamList.paramarray[l][ENB_X2_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv6") == 0) {
+ X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6 = 1;
+ } else if (strcmp(*(X2ParamList.paramarray[l][ENB_X2_IP_ADDRESS_PREFERENCE_IDX].strptr), "no") == 0) {
+ X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv4 = 1;
+ X2AP_REGISTER_ENB_REQ (msg_p).target_enb_x2_ip_address[l].ipv6 = 1;
+ }
+ }
+
+ // SCTP SETTING
+ X2AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = SCTP_OUT_STREAMS;
+ X2AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = SCTP_IN_STREAMS;
+# if defined(ENABLE_USE_MME)
+ sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_SCTP_CONFIG);
+ config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix);
+ X2AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = (uint16_t)*(SCTPParams[ENB_SCTP_INSTREAMS_IDX].uptr);
+ X2AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = (uint16_t)*(SCTPParams[ENB_SCTP_OUTSTREAMS_IDX].uptr);
+#endif
+
+ sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG);
+
+ // NETWORK_INTERFACES
+ config_get( NETParams,sizeof(NETParams)/sizeof(paramdef_t),aprefix);
+
+ X2AP_REGISTER_ENB_REQ (msg_p).enb_port_for_X2C = (uint32_t)*(NETParams[ENB_PORT_FOR_X2C_IDX].uptr);
+
+ if ((NETParams[ENB_IPV4_ADDR_FOR_X2C_IDX].strptr == NULL) || (X2AP_REGISTER_ENB_REQ (msg_p).enb_port_for_X2C == 0)) {
+ LOG_E(RRC,"Add eNB IPv4 address and/or port for X2C in the CONF file!\n");
+ exit(1);
+ }
+
+ cidr = *(NETParams[ENB_IPV4_ADDR_FOR_X2C_IDX].strptr);
+ address = strtok(cidr, "/");
+
+ X2AP_REGISTER_ENB_REQ (msg_p).enb_x2_ip_address.ipv6 = 0;
+ X2AP_REGISTER_ENB_REQ (msg_p).enb_x2_ip_address.ipv4 = 1;
+
+ strcpy(X2AP_REGISTER_ENB_REQ (msg_p).enb_x2_ip_address.ipv4_address, address);
+ }
+ }
+ }
+ }
+ }
+return 0;
+}
+
void RCConfig(void) {
paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
@@ -2708,8 +2802,11 @@ void RCConfig(void) {
printf("Getting ENBSParams\n");
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
+# if defined(ENABLE_USE_MME)
+ EPC_MODE_ENABLED = ((*ENBSParams[ENB_NOS1_IDX].uptr) == 0);
+#endif
RC.nb_inst = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt;
-
+
if (RC.nb_inst > 0) {
RC.nb_CC = (int *)malloc((1+RC.nb_inst)*sizeof(int));
for (int i=0;iUE_template[CC_id][i].phr_info,
UE_list->UE_sched_ctrl[i].dl_cqi[CC_id],
- (UE_list->UE_sched_ctrl[i].pusch_snr[CC_id] - 128) / 2,
- (UE_list->UE_sched_ctrl[i].pucch1_snr[CC_id] - 128) / 2);
+ (5*UE_list->UE_sched_ctrl[i].pusch_snr[CC_id] - 640) / 10,
+ (5*UE_list->UE_sched_ctrl[i].pucch1_snr[CC_id] - 640) / 10);
}
RC.eNB[module_idP][CC_id]->pusch_stats_bsr[i][(frameP * 10) +
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
index 35590ec896..b637a92a96 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
@@ -988,9 +988,10 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP,
payload[0], ra->msg4_TBsize));
if (opt_enabled == 1) {
- trace_pdu(1,
+ trace_pdu(DIRECTION_DOWNLINK,
(uint8_t *) mac->
- UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], rrc_sdu_length, UE_id, 3,
+ UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0],
+ rrc_sdu_length, UE_id, WS_C_RNTI,
UE_RNTI(module_idP, UE_id), mac->frame,
mac->subframe, 0, 0);
LOG_D(OPT,
@@ -1193,9 +1194,10 @@ generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP,
payload[0], ra->msg4_TBsize));
if (opt_enabled == 1) {
- trace_pdu(1,
+ trace_pdu(DIRECTION_DOWNLINK,
(uint8_t *) mac->
- UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], rrc_sdu_length, UE_id, 3,
+ UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0],
+ rrc_sdu_length, UE_id, WS_C_RNTI,
UE_RNTI(module_idP, UE_id), mac->frame,
mac->subframe, 0, 0);
LOG_D(OPT,
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_bch.c b/openair2/LAYER2/MAC/eNB_scheduler_bch.c
index d965bc811b..b2b59691f8 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_bch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_bch.c
@@ -281,10 +281,10 @@ schedule_SIB1_BR(module_id_t module_idP,
eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
if (opt_enabled == 1) {
- trace_pdu(1,
+ trace_pdu(DIRECTION_DOWNLINK,
&cc->BCCH_BR_pdu[0].payload[0],
bcch_sdu_length,
- 0xffff, 4, 0xffff, eNB->frame, eNB->subframe, 0, 0);
+ 0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
LOG_D(OPT,
"[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
module_idP, frameP, CC_id, 0xffff, bcch_sdu_length);
@@ -472,11 +472,11 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
if (opt_enabled == 1) {
- trace_pdu(1,
+ trace_pdu(DIRECTION_DOWNLINK,
&cc->BCCH_BR_pdu[i + 1].payload[0],
bcch_sdu_length,
0xffff,
- 4,
+ WS_SI_RNTI,
0xffff, eNB->frame, eNB->subframe, 0,
0);
LOG_D(OPT,
@@ -759,11 +759,11 @@ schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
}
if (opt_enabled == 1) {
- trace_pdu(1,
+ trace_pdu(DIRECTION_DOWNLINK,
&cc->BCCH_pdu.payload[0],
bcch_sdu_length,
0xffff,
- 4, 0xffff, eNB->frame, eNB->subframe, 0, 0);
+ WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
LOG_D(OPT,
"[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
module_idP, frameP, CC_id, 0xffff,
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
index df52b83d72..da52a8fedc 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
@@ -1359,9 +1359,9 @@ schedule_ue_spec(module_id_t module_idP,slice_id_t slice_idP,
}
if (opt_enabled == 1) {
- trace_pdu(1, (uint8_t *)
- UE_list->DLSCH_pdu[CC_id][0][UE_id].
- payload[0], TBS, module_idP, 3,
+ trace_pdu(DIRECTION_DOWNLINK,
+ (uint8_t *) UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
+ TBS, module_idP, WS_C_RNTI,
UE_RNTI(module_idP, UE_id), eNB->frame,
eNB->subframe, 0, 0);
LOG_D(OPT,
@@ -2085,7 +2085,7 @@ void schedule_PCH(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
}
if (opt_enabled == 1) {
- trace_pdu(1,
+ trace_pdu(DIRECTION_DOWNLINK,
&eNB->common_channels[CC_id].PCCH_pdu.payload[0],
pcch_sdu_length,
0xffff,
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
index 1acf657220..76589eebdb 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
@@ -1655,8 +1655,8 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
}
if (opt_enabled == 1) {
- trace_pdu(1, (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
- TBS, module_idP, 3, UE_RNTI(module_idP,UE_id),
+ trace_pdu(DIRECTION_DOWNLINK, (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
+ TBS, module_idP, WS_RA_RNTI, UE_RNTI(module_idP,UE_id),
eNB->frame, eNB->subframe,0,0);
LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d rnti %x with size %d\n",
module_idP, CC_id, frameP, UE_RNTI(module_idP,UE_id), TBS);
@@ -1696,9 +1696,9 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
// this is the normalized RX power
eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id];
- /* TODO: fix how we deal with power, unit is not dBm, it's special from nfapi */
- normalized_rx_power = ue_sched_ctl->pucch1_snr[CC_id];
- target_rx_power = 208;
+ /* Unit is not dBm, it's special from nfapi */
+ normalized_rx_power = (5*ue_sched_ctl->pucch1_snr[CC_id]-640)/10+30;//(+eNB->measurements.n0_power_dB[0])
+ target_rx_power= eNB->puCch10xSnr/10 + 30;//(+eNB->measurements.n0_power_dB[0])
// this assumes accumulated tpc
// make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
@@ -2690,9 +2690,25 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
if (status < RRC_CONNECTED)
cqi_req = 0;
else if (UE_sched_ctrl->cqi_req_timer>30) {
- cqi_req = 1;
- UE_sched_ctrl->cqi_req_timer=0;
- UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP;
+ cqi_req = 1;
+ // To be safe , do not ask CQI in special SFs:36.213/7.2.3 CQI definition
+ if (cc->tdd_Config) {
+ switch (cc->tdd_Config->subframeAssignment) {
+ case 1:
+ if( subframeP == 1 || subframeP == 6 ) cqi_req=0;
+ break;
+ case 3:
+ if( subframeP == 1 ) cqi_req=0;
+ break;
+ default:
+ LOG_E(MAC," TDD config not supported\n");
+ break;
+ }
+ }
+ if(cqi_req == 1){
+ UE_sched_ctrl->cqi_req_timer=0;
+ UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP;
+ }
}
else
cqi_req = 0;
@@ -2701,8 +2717,8 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
//compute the expected ULSCH RX power (for the stats)
// this is the normalized RX power and this should be constant (regardless of mcs
- normalized_rx_power = UE_sched_ctrl->pusch_snr[CC_id];
- target_rx_power = 178;
+ normalized_rx_power = (5*UE_sched_ctrl->pusch_snr[CC_id]-640)/10+30; //(+eNB->measurements.n0_power_dB[0])
+ target_rx_power= eNB->puSch10xSnr/10 + 30; //(+eNB->measurements.n0_power_dB[0])
// this assumes accumulated tpc
// make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_mch.c b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
index 63a4711778..16953e958a 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_mch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
@@ -767,7 +767,7 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
/* Tracing of PDU is done on UE side */
if (opt_enabled == 1) {
- trace_pdu(1, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, 6, 0xffff, // M_RNTI = 6 in wirehsark
+ trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, WS_M_RNTI , 0xffff, // M_RNTI = 6 in wirehsark
RC.mac[module_idP]->frame,
RC.mac[module_idP]->subframe, 0, 0);
LOG_D(OPT,
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c
index 49cc68b06a..03def31172 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c
@@ -71,7 +71,7 @@ schedule_ue_spec_phy_test(
uint16_t rnti = 0x1235;
uint32_t rb_alloc = 0x1FFFFF;
int32_t tpc = 1;
- int32_t mcs = 28;
+ int32_t mcs = 10;
int32_t cqi = 15;
int32_t ndi = (frameP*10+subframeP)/8;
int32_t dai = 0;
@@ -202,7 +202,8 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s
int32_t normalized_rx_power;
int32_t target_rx_power= 178;
int CC_id = 0;
- int nb_rb = 96;
+ int nb_rb = 24;
+ int N_RB_UL;
eNB_MAC_INST *mac = RC.mac[module_idP];
COMMON_channels_t *cc = &mac->common_channels[0];
UE_list_t *UE_list=&mac->UE_list;
@@ -211,8 +212,7 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s
int sched_frame=frameP;
int sched_subframe = (subframeP+4)%10;
uint16_t ul_req_index;
- uint8_t dlsch_flag;
-
+
if (sched_subframeHI_DCI0_req[CC_id][subframeP];
@@ -222,6 +222,18 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s
//nfapi_ul_config_request_pdu_t *ul_config_pdu = &ul_req->ul_config_pdu_list[0];;
nfapi_ul_config_request_body_t *ul_req = &mac->UL_req[CC_id].ul_config_request_body;
+ N_RB_UL = to_prb(cc->mib->message.dl_Bandwidth);
+ switch(N_RB_UL){
+ case 100:
+ nb_rb = 96;
+ break;
+ case 50:
+ nb_rb = 48;
+ break;
+ case 25:
+ nb_rb = 24;
+ break;
+ }
mac->UL_req[CC_id].sfn_sf = (sched_frame<<4) + sched_subframe;
hi_dci0_req->sfn_sf = (frameP << 4) + subframeP;
@@ -306,10 +318,8 @@ void schedule_ulsch_phy_test(module_id_t module_idP,frame_t frameP,sub_frame_t s
hi_dci0_req_body->number_of_dci++;
ul_req_index = 0;
- dlsch_flag = 0;
for(ul_req_index = 0;ul_req_index < ul_req->number_of_pdus;ul_req_index++){
if(ul_req->ul_config_pdu_list[ul_req_index].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE){
- dlsch_flag = 1;
LOG_D(MAC,"Frame %d, Subframe %d:rnti %x ul_req_index %d Switched UCI HARQ to ULSCH HARQ(first)\n",frameP,subframeP,rnti,ul_req_index);
break;
}
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index 230dc8eac8..b8cf85a0a3 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -150,7 +150,7 @@ rx_sdu(const module_id_t enb_mod_idP,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU, 1);
if (opt_enabled == 1) {
- trace_pdu(0, sduP, sdu_lenP, 0, 3, current_rnti, frameP, subframeP,
+ trace_pdu(DIRECTION_UPLINK, sduP, sdu_lenP, 0, WS_C_RNTI, current_rnti, frameP, subframeP,
0, 0);
LOG_D(OPT, "[eNB %d][ULSCH] Frame %d rnti %x with size %d\n",
enb_mod_idP, frameP, current_rnti, sdu_lenP);
@@ -1347,10 +1347,24 @@ schedule_ulsch_rnti(module_id_t module_idP,
if (status >= RRC_CONNECTED && UE_sched_ctrl->cqi_req_timer > 30) {
if (UE_sched_ctrl->cqi_received == 0) {
if (nfapi_mode) {
- cqi_req = 0;
+ cqi_req = 0;
} else {
- cqi_req = 1;
- UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP;
+ cqi_req = 1;
+ // To be safe , do not ask CQI in special Subframes:36.213/7.2.3 CQI definition
+ if (cc[CC_id].tdd_Config) {
+ switch (cc[CC_id].tdd_Config->subframeAssignment) {
+ case 1:
+ if( subframeP == 1 || subframeP == 6 ) cqi_req=0;
+ break;
+ case 3:
+ if( subframeP == 1 ) cqi_req=0;
+ break;
+ default:
+ LOG_E(MAC," TDD config not supported\n");
+ break;
+ }
+ }
+ if(cqi_req == 1) UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP;
}
}
else if (UE_sched_ctrl->cqi_received == 1) {
diff --git a/openair2/LAYER2/MAC/mac.h b/openair2/LAYER2/MAC/mac.h
index 7e43c86d14..8804849a4a 100644
--- a/openair2/LAYER2/MAC/mac.h
+++ b/openair2/LAYER2/MAC/mac.h
@@ -443,7 +443,7 @@ typedef struct {
/*!\brief LCID of MCCH for DL */
#define MCCH_LCHANID 0
/*!\brief LCID of MCH scheduling info for DL */
-#define MCH_SCHDL_INFO 3
+#define MCH_SCHDL_INFO 30
/*!\brief LCID of Carrier component activation/deactivation */
#define CC_ACT_DEACT 27
//TTN (for D2D)
@@ -1503,7 +1503,16 @@ typedef struct {
/// MCCH status
uint8_t mcch_status;
/// MSI status
- uint8_t msi_status; // could be an array if there are >1 MCH in one MBSFN area
+ uint8_t msi_status_v[28];
+ uint8_t msi_current_alloc;
+ uint8_t msi_pmch;
+
+ struct MBSFN_SubframeConfig *commonSF_Alloc_r9_mbsfn_SubframeConfig[8]; // FIXME replace 8 by MAX_MBSFN_AREA?
+ uint8_t commonSF_AllocPeriod_r9;
+ int common_num_sf_alloc;
+
+ uint8_t pmch_lcids[28];
+ uint16_t pmch_stop_mtch[28];
#endif
//#ifdef CBA
/// CBA RNTI for each group
diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c
index f5df67ab64..aeabbd092a 100644
--- a/openair2/LAYER2/MAC/ra_procedures.c
+++ b/openair2/LAYER2/MAC/ra_procedures.c
@@ -248,7 +248,7 @@ Msg1_transmitted(module_id_t module_idP, uint8_t CC_id,
UE_mac_inst[module_idP].RA_attempt_number++;
if (opt_enabled) {
- trace_pdu(0, NULL, 0, module_idP, 0,
+ trace_pdu(DIRECTION_UPLINK, NULL, 0, module_idP, WS_NO_RNTI,
UE_mac_inst[module_idP].RA_prach_resources.
ra_PreambleIndex, UE_mac_inst[module_idP].txFrame,
UE_mac_inst[module_idP].txSubframe, 0,
@@ -277,8 +277,8 @@ Msg3_transmitted(module_id_t module_idP, uint8_t CC_id,
UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1;
if (opt_enabled) { // msg3
- trace_pdu(0, &UE_mac_inst[module_idP].CCCH_pdu.payload[0],
- UE_mac_inst[module_idP].RA_Msg3_size, module_idP, 3,
+ trace_pdu(DIRECTION_UPLINK , &UE_mac_inst[module_idP].CCCH_pdu.payload[0],
+ UE_mac_inst[module_idP].RA_Msg3_size, module_idP, WS_C_RNTI,
UE_mac_inst[module_idP].crnti,
UE_mac_inst[module_idP].txFrame,
UE_mac_inst[module_idP].txSubframe, 0, 0);
diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c
index b70b382494..2e6b47ff60 100644
--- a/openair2/LAYER2/MAC/rar_tools.c
+++ b/openair2/LAYER2/MAC/rar_tools.c
@@ -96,7 +96,7 @@ fill_rar(const module_id_t module_idP,
((ra->msg3_ULdelay & 1) << 1) | (ra->msg3_cqireq & 1);
if (opt_enabled) {
- trace_pdu(1, dlsch_buffer, input_buffer_length, module_idP, 2, 1,
+ trace_pdu(DIRECTION_DOWNLINK , dlsch_buffer, input_buffer_length, module_idP, WS_RA_RNTI , 1,
RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe,
0, 0);
LOG_D(OPT,
@@ -181,7 +181,7 @@ fill_rar_br(eNB_MAC_INST * eNB,
ra->preamble_index, ra->timing_offset);
if (opt_enabled) {
- trace_pdu(1, dlsch_buffer, input_buffer_length, eNB->Mod_id, 2, 1,
+ trace_pdu(DIRECTION_DOWNLINK , dlsch_buffer, input_buffer_length, eNB->Mod_id, WS_RA_RNTI , 1,
eNB->frame, eNB->subframe, 0, 0);
LOG_D(OPT,
"[RAPROC] RAR Frame %d trace pdu for rnti %x and rapid %d size %d\n",
diff --git a/openair2/LAYER2/MAC/rar_tools_ue.c b/openair2/LAYER2/MAC/rar_tools_ue.c
index 991eaae052..35d1f7925e 100644
--- a/openair2/LAYER2/MAC/rar_tools_ue.c
+++ b/openair2/LAYER2/MAC/rar_tools_ue.c
@@ -119,8 +119,8 @@ uint16_t ue_process_rar(const module_id_t module_idP, const int CC_id, const fra
LOG_D(OPT,
"[UE %d][RAPROC] CC_id %d RAR Frame %d trace pdu for ra-RNTI %x\n",
module_idP, CC_id, frameP, ra_rnti);
- trace_pdu(1, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6,
- module_idP, 2, ra_rnti, UE_mac_inst[module_idP].rxFrame,
+ trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6,
+ module_idP, WS_RA_RNTI, ra_rnti, UE_mac_inst[module_idP].rxFrame,
UE_mac_inst[module_idP].rxSubframe, 0, 0);
}
diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c
index dd78da7275..2c99b79ce8 100644
--- a/openair2/LAYER2/MAC/ue_procedures.c
+++ b/openair2/LAYER2/MAC/ue_procedures.c
@@ -420,7 +420,7 @@ ue_send_sdu(module_id_t module_idP,
//LOG_D(MAC,"sdu: %x.%x.%x\n",sdu[0],sdu[1],sdu[2]);
if (opt_enabled) {
- trace_pdu(1, sdu, sdu_len, module_idP, 3,
+ trace_pdu(DIRECTION_DOWNLINK, sdu, sdu_len, module_idP, WS_C_RNTI,
UE_mac_inst[module_idP].crnti, frameP, subframeP, 0, 0);
LOG_D(OPT,
"[UE %d][DLSCH] Frame %d trace pdu for rnti %x with size %d\n",
@@ -637,11 +637,11 @@ ue_decode_si(module_id_t module_idP, int CC_id, frame_t frameP,
stop_meas(&UE_mac_inst[module_idP].rx_si);
#endif
if (opt_enabled == 1) {
- trace_pdu(0,
+ trace_pdu(DIRECTION_UPLINK,
(uint8_t *) pdu,
len,
module_idP,
- 4,
+ WS_SI_RNTI,
0xffff,
UE_mac_inst[module_idP].rxFrame,
UE_mac_inst[module_idP].rxSubframe, 0, 0);
@@ -675,11 +675,11 @@ ue_decode_p(module_id_t module_idP, int CC_id, frame_t frameP,
stop_meas(&UE_mac_inst[module_idP].rx_p);
#endif
if (opt_enabled == 1) {
- trace_pdu(0,
+ trace_pdu(DIRECTION_UPLINK ,
(uint8_t *) pdu,
len,
module_idP,
- 4,
+ WS_SI_RNTI,
P_RNTI,
UE_mac_inst[module_idP].rxFrame,
UE_mac_inst[module_idP].rxSubframe, 0, 0);
@@ -750,7 +750,7 @@ ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
uint8_t sync_area)
{
- unsigned char num_sdu, i, *payload_ptr;
+ unsigned char num_sdu, i, j, *payload_ptr;
unsigned char rx_lcids[NB_RB_MAX];
unsigned short rx_lengths[NB_RB_MAX];
#if UE_TIMING_TRACE
@@ -771,47 +771,76 @@ ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
num_sdu);
for (i = 0; i < num_sdu; i++) {
- if (rx_lcids[i] == MCH_SCHDL_INFO) {
- if (UE_mac_inst[module_idP].mcch_status == 1) {
- LOG_I(MAC,
- "[UE %d] Frame %d : MCH->MSI for sync area %d (eNB %d, %d bytes)\n",
- module_idP, frameP, sync_area, eNB_index,
- rx_lengths[i]);
- // ??store necessary scheduling info to ue_mac_inst in order to
- // calculate exact position of interested service (for the complex case has >1 mtch)
- // set msi_status to 1
- UE_mac_inst[module_idP].msi_status = 1;
- }
- } else if (rx_lcids[i] == MCCH_LCHANID) {
- LOG_I(MAC,
- "[UE %d] Frame %d : SDU %d MCH->MCCH for sync area %d (eNB %d, %d bytes)\n",
- module_idP, frameP, i, sync_area, eNB_index,
- rx_lengths[i]);
- mac_rrc_data_ind_ue(module_idP, CC_id, frameP, 0, // unknown subframe
- M_RNTI,
- MCCH,
- payload_ptr, rx_lengths[i], eNB_index,
- sync_area);
- } else if (rx_lcids[i] == MTCH) {
- if (UE_mac_inst[module_idP].msi_status == 1) {
- LOG_I(MAC,
- "[UE %d] Frame %d : MCH->MTCH for sync area %d (eNB %d, %d bytes)\n",
- module_idP, frameP, sync_area, eNB_index,
- rx_lengths[i]);
+ if (rx_lcids[i] == MCH_SCHDL_INFO) {
+ if (rx_lengths[i] & 0x01) {
+ LOG_E(MAC,"MCH Scheduling Information MAC Control Element should have an even size\n");
+ }
- mac_rlc_data_ind(module_idP, UE_mac_inst[module_idP].crnti, eNB_index, frameP, ENB_FLAG_NO, MBMS_FLAG_YES, MTCH, /*+ (maxDRB + 3), */
- (char *) payload_ptr, rx_lengths[i], 1,
- NULL);
+ LOG_D(MAC,"MCH Scheduling Information, len(%d)\n",rx_lengths[i]);
- }
- } else {
- LOG_W(MAC,
- "[UE %d] Frame %d : unknown sdu %d rx_lcids[%d]=%d mcch status %d eNB %d \n",
- module_idP, frameP, rx_lengths[i], i, rx_lcids[i],
- UE_mac_inst[module_idP].mcch_status, eNB_index);
- }
+ for (j=0; j> 3;
+ UE_mac_inst[module_idP].pmch_stop_mtch[j] = stop_mtch_val;
+ LOG_D(MAC,"lcid(%d),stop_mtch_val %d frameP(%d)\n", UE_mac_inst[module_idP].pmch_lcids[j], stop_mtch_val, frameP);
+
+ if ((stop_mtch_val >= 2043) && (stop_mtch_val <= 2046)) {
+ LOG_D(MAC,"(reserved)\n");
+ }
+
+ UE_mac_inst[module_idP].msi_status_v[j] = 0;
+
+ if (UE_mac_inst[module_idP].mcch_status==1) {
+ LOG_D(MAC,"[UE %d] Frame %d : MCH->MSI for sync area %d (eNB %d, %d bytes), i(%d)\n", module_idP, frameP, sync_area, eNB_index, rx_lengths[i], UE_mac_inst[module_idP].pmch_stop_mtch[j]);
+ if (UE_mac_inst[module_idP].pmch_stop_mtch[j] < 2043) {
+ UE_mac_inst[module_idP].pmch_stop_mtch[j] += UE_mac_inst[module_idP].msi_current_alloc;
+ UE_mac_inst[module_idP].msi_status_v[j] = 1;
+ }
+ }
+ }
+ } else if (rx_lcids[i] == MCCH_LCHANID) {
+ LOG_D(MAC,"[UE %d] Frame %d : SDU %d MCH->MCCH for sync area %d (eNB %d, %d bytes)\n",module_idP,frameP, i, sync_area, eNB_index, rx_lengths[i]);
+ mac_rrc_data_ind_ue(module_idP,
+ CC_id,
+ frameP,0, // unknown subframe
+ M_RNTI,
+ MCCH,
+ payload_ptr + 1, // Skip RLC layer 1st byte
+ rx_lengths[i] - 1,
+ eNB_index,
+ sync_area);
+ } else if (rx_lcids[i] <= 28) {
+ for (j=0; j<28; j++) {
+ if (rx_lcids[i] == UE_mac_inst[module_idP].pmch_lcids[j])
+ break;
+ }
+
+ if (j<28 && UE_mac_inst[module_idP].msi_status_v[j]==1) {
+ LOG_D(MAC,"[UE %d] Frame %d : MCH->MTCH for sync area %d (eNB %d, %d bytes), j=%d\n", module_idP, frameP, sync_area, eNB_index, rx_lengths[i], j);
+
+ mac_rlc_data_ind(
+ module_idP,
+ UE_mac_inst[module_idP].crnti,
+ eNB_index,
+ frameP,
+ ENB_FLAG_NO,
+ MBMS_FLAG_YES,
+ rx_lcids[i], /*+ (maxDRB + 3),*/
+ (char *)payload_ptr,
+ rx_lengths[i],
+ 1,
+ NULL);
+
+ }
+ } else {
+ LOG_W(MAC,
+ "[UE %d] Frame %d : unknown sdu %d rx_lcids[%d]=%d mcch status %d eNB %d \n",
+ module_idP, frameP, rx_lengths[i], i, rx_lcids[i],
+ UE_mac_inst[module_idP].mcch_status, eNB_index);
+ }
+
+ payload_ptr += rx_lengths[i];
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
@@ -916,406 +945,591 @@ int8_t ue_get_mbsfn_sf_alloction (module_id_t module_idP, uint8_t mbsfn_sync_are
}
}
-int
-ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP,
- uint32_t subframe, uint8_t eNB_index, uint8_t * sync_area,
- uint8_t * mcch_active)
+int ue_query_p_mch_info(module_id_t module_idP, uint32_t frameP, uint32_t subframe, int commonSFAlloc_period, int commonSFAlloc_offset, int num_sf_alloc, int *mtch_active, int *msi_active, uint8_t *mch_lcid)
+{
+ int i, mtch_mcs = -1;
+ int mtch_flag = 0;
+ int msi_flag = 0;
+
+ for (i = 0; i < 4; i++) {
+ if (UE_mac_inst[module_idP].pmch_Config[i] == NULL)
+ continue;
+
+ int mch_scheduling_period = 8 << UE_mac_inst[module_idP].pmch_Config[i]->mch_SchedulingPeriod_r9;
+ uint8_t sf_AllocEnd_r9 = UE_mac_inst[module_idP].pmch_Config[i]->sf_AllocEnd_r9;
+
+ if (sf_AllocEnd_r9 == 2047) {
+ msi_flag = 1;
+ break;
+ }
+
+ if ((frameP % mch_scheduling_period) == (commonSFAlloc_offset + (frameP % 4))) {
+ if (i == 0) {
+ //msi and mtch are mutally excluded then the break is safe
+ if ((num_sf_alloc == 0) && (sf_AllocEnd_r9 >= 1)) {
+ msi_flag = 1;
+ LOG_D(MAC,"msi(%d) should be allocated:frame(%d),submframe(%d),num_sf_alloc(%d),sf_AllocEnd_r9(%d),common_num_sf_alloc(%d)\n",i,frameP,subframe,num_sf_alloc,sf_AllocEnd_r9,UE_mac_inst[module_idP].common_num_sf_alloc);
+ UE_mac_inst[module_idP].msi_current_alloc = num_sf_alloc;
+ UE_mac_inst[module_idP].msi_pmch = i;
+ }
+ } else { //more that one MCH ?? check better this condition
+ //msi and mtch are mutally excluded then the break is safe
+ if ((num_sf_alloc == UE_mac_inst[module_idP].pmch_Config[i-1]->sf_AllocEnd_r9 + 1) && (sf_AllocEnd_r9 >= (num_sf_alloc+1))) {
+ //msi should be just after
+ msi_flag = 1;
+ LOG_D(MAC,"msi(%d) should be allocated:frame(%d),submframe(%d),num_sf_alloc(%d),sf_AllocEnd_r9(%d),common_num_sf_alloc(%d)\n",i,frameP,subframe,num_sf_alloc,sf_AllocEnd_r9,UE_mac_inst[module_idP].common_num_sf_alloc);
+ UE_mac_inst[module_idP].msi_current_alloc = num_sf_alloc;
+ UE_mac_inst[module_idP].msi_pmch = i;
+ }
+ }
+ }
+ }
+
+ for (i = 0; i < 28; i++) {
+ if (UE_mac_inst[module_idP].pmch_stop_mtch[i] >= num_sf_alloc) {
+ if (UE_mac_inst[module_idP].pmch_stop_mtch[i] != 2047) {
+ mtch_flag = 1;
+ if (UE_mac_inst[module_idP].pmch_Config[UE_mac_inst[module_idP].msi_pmch] != NULL)
+ mtch_mcs = UE_mac_inst[module_idP].pmch_Config[UE_mac_inst[module_idP].msi_pmch]->dataMCS_r9;
+ else
+ mtch_mcs = -1;
+ *mch_lcid = (uint8_t)i;
+ LOG_D(MAC,"mtch should be allocated:frame(%d),submframe(%d),num_sf_alloc(%d),mtch_mcs(%d),pmch_stop_mtch(%d),lcid(%d),msi_pmch(%d)\n",frameP,subframe,num_sf_alloc,mtch_mcs,UE_mac_inst[module_idP].pmch_stop_mtch[i],UE_mac_inst[module_idP].pmch_lcids[i],UE_mac_inst[module_idP].msi_pmch);
+ break;
+ }
+ }
+ }
+
+ *mtch_active = mtch_flag;
+ *msi_active = msi_flag;
+
+ return mtch_mcs;
+}
+
+int ue_query_p_mch(module_id_t module_idP, uint32_t frameP, uint32_t subframe, int *mtch_active, int *msi_active, uint8_t *mch_lcid)
+{
+ int i, j, mtch_mcs = -1;
+ int mtch_flag = 0;
+
+ // Acount for sf_allocable in CSA
+ int num_sf_alloc = 0;
+ for (i = 0; i < 8; i++) {
+ if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] == NULL)
+ continue;
+
+ if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) // one-frameP format
+ continue;
+
+ // four-frameP format
+ uint32_t common_mbsfn_SubframeConfig = UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[2] |
+ (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[1]<<8) |
+ (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[0]<<16);
+ for (j = 0; j < 24; j++)
+ num_sf_alloc += ((common_mbsfn_SubframeConfig & (0x800000 >> j)) == (0x800000 >> j));
+ }
+
+ for (i = 0; i < 8; i++ ) {
+ if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] == NULL)
+ continue;
+
+ if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) // one-frameP format
+ continue;
+
+ // four-frameP format
+ int common_mbsfn_alloc_offset = UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->radioframeAllocationOffset;
+ int common_mbsfn_period = 1 << UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->radioframeAllocationPeriod;
+ int commonSF_AllocPeriod = 4 << UE_mac_inst[module_idP].commonSF_AllocPeriod_r9;
+
+ uint32_t common_mbsfn_SubframeConfig = UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[2] |
+ (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[1]<<8) |
+ (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[0]<<16);
+
+ int jj = frameP % 4;
+ if ((frameP % common_mbsfn_period) != (common_mbsfn_alloc_offset + jj))
+ continue;
+
+ if(UE_mac_inst[module_idP].tdd_Config == NULL){
+ switch (subframe) {
+ case 1:
+ if ((common_mbsfn_SubframeConfig & (0x800000 >> (jj*6))) == (0x800000 >> (jj*6))) {
+ mtch_flag = 1;
+ mtch_mcs = ue_query_p_mch_info(module_idP,frameP,subframe,common_mbsfn_period,common_mbsfn_alloc_offset,UE_mac_inst[module_idP].common_num_sf_alloc,mtch_active,msi_active,mch_lcid);
+ UE_mac_inst[module_idP].common_num_sf_alloc++;
+ UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc % (num_sf_alloc * commonSF_AllocPeriod / common_mbsfn_period);//48;
+ }
+ break;
+ case 2:
+ if ((common_mbsfn_SubframeConfig & (0x400000 >> (jj*6))) == (0x400000 >> (jj*6))) {
+ mtch_flag = 1;
+ mtch_mcs = ue_query_p_mch_info(module_idP,frameP,subframe,common_mbsfn_period,common_mbsfn_alloc_offset,UE_mac_inst[module_idP].common_num_sf_alloc,mtch_active,msi_active,mch_lcid);
+ UE_mac_inst[module_idP].common_num_sf_alloc++;
+ UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc % (num_sf_alloc * commonSF_AllocPeriod / common_mbsfn_period);//48;
+ }
+ break;
+ case 3:
+ if ((common_mbsfn_SubframeConfig & (0x200000 >> (jj*6))) == (0x200000 >> (jj*6))) {
+ mtch_flag = 1;
+ mtch_mcs = ue_query_p_mch_info(module_idP,frameP,subframe,common_mbsfn_period,common_mbsfn_alloc_offset,UE_mac_inst[module_idP].common_num_sf_alloc,mtch_active,msi_active,mch_lcid);
+ UE_mac_inst[module_idP].common_num_sf_alloc++;
+ UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc % (num_sf_alloc * commonSF_AllocPeriod / common_mbsfn_period);//48;
+ }
+ break;
+ case 6:
+ if ((common_mbsfn_SubframeConfig & (0x100000 >> (jj*6))) == (0x100000 >> (jj*6))) {
+ mtch_flag = 1;
+ mtch_mcs = ue_query_p_mch_info(module_idP,frameP,subframe,common_mbsfn_period,common_mbsfn_alloc_offset,UE_mac_inst[module_idP].common_num_sf_alloc,mtch_active,msi_active,mch_lcid);
+ UE_mac_inst[module_idP].common_num_sf_alloc++;
+ UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc % (num_sf_alloc * commonSF_AllocPeriod / common_mbsfn_period);//48;
+ }
+ break;
+ case 7:
+ if ((common_mbsfn_SubframeConfig & (0x80000 >> (jj*6))) == (0x80000 >> (jj*6))) {
+ mtch_flag = 1;
+ mtch_mcs = ue_query_p_mch_info(module_idP,frameP,subframe,common_mbsfn_period,common_mbsfn_alloc_offset,UE_mac_inst[module_idP].common_num_sf_alloc,mtch_active,msi_active,mch_lcid);
+ UE_mac_inst[module_idP].common_num_sf_alloc++;
+ UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc % (num_sf_alloc * commonSF_AllocPeriod / common_mbsfn_period);//48;
+ }
+ break;
+ case 8:
+ if ((common_mbsfn_SubframeConfig & (0x40000 >> (jj*6))) == (0x40000 >> (jj*6))) {
+ mtch_flag = 1;
+ mtch_mcs = ue_query_p_mch_info(module_idP,frameP,subframe,common_mbsfn_period,common_mbsfn_alloc_offset,UE_mac_inst[module_idP].common_num_sf_alloc,mtch_active,msi_active,mch_lcid);
+ UE_mac_inst[module_idP].common_num_sf_alloc++;
+ UE_mac_inst[module_idP].common_num_sf_alloc = UE_mac_inst[module_idP].common_num_sf_alloc% ( num_sf_alloc*commonSF_AllocPeriod/common_mbsfn_period);//48;
+ }
+ break;
+ }
+ } else {
+ // TODO TDD
+ }
+ if (mtch_flag == 1)
+ break;
+ }
+
+ return mtch_mcs;
+}
+
+int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_t subframe, uint8_t eNB_index,uint8_t *sync_area, uint8_t *mcch_active)
{
- int i = 0, j = 0, ii = 0, msi_pos = 0, mcch_mcs = -1;
- int mcch_flag = 0, mtch_flag = 0, msi_flag = 0;
- int mbsfn_period = 0; // 1<<(UE_mac_inst[module_idP].mbsfn_SubframeConfig[0]->radioframeAllocationPeriod);
- int mcch_period = 0; // 32<<(UE_mac_inst[module_idP].mbsfn_AreaInfo[0]->mcch_Config_r9.mcch_RepetitionPeriod_r9);
- int mch_scheduling_period = -1;
-
- int frame_FDD = 1;
-
+ int i = 0, j = 0, ii = 0, jj = 0, msi_pos = 0, mcch_mcs = -1, mtch_mcs = -1;
+ int mcch_flag = 0, mtch_flag = 0, msi_flag = 0;
+ long mch_scheduling_period = -1;
+ uint8_t mch_lcid = 0;
#if UE_TIMING_TRACE
- start_meas(&UE_mac_inst[module_idP].ue_query_mch);
+ start_meas(&UE_mac_inst[module_idP].ue_query_mch);
#endif
- if (UE_mac_inst[module_idP].pmch_Config[0]) {
- mch_scheduling_period =
- 8 << (UE_mac_inst[module_idP].
- pmch_Config[0]->mch_SchedulingPeriod_r9);
+ if (UE_mac_inst[module_idP].pmch_Config[0]) {
+ mch_scheduling_period = 8 << UE_mac_inst[module_idP].pmch_Config[0]->mch_SchedulingPeriod_r9;
+ }
+
+ for (i = 0;
+ i < UE_mac_inst[module_idP].num_active_mbsfn_area;
+ i++ )
+ {
+ // assume, that there is always a mapping
+ if ((j = ue_get_mbsfn_sf_alloction(module_idP,i,eNB_index)) == -1) {
+ return -1; // continue;
}
- for (i = 0; i < UE_mac_inst[module_idP].num_active_mbsfn_area; i++) {
- // assume, that there is always a mapping
- if ((j =
- ue_get_mbsfn_sf_alloction(module_idP, i, eNB_index)) == -1) {
- return -1; // continue;
- }
+ ii = 0;
+ msi_pos = 0;
+
+ long mbsfn_period = 1 << UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->radioframeAllocationPeriod;
+ long mbsfn_alloc_offset = UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->radioframeAllocationOffset;
+ long mcch_period = 32 << UE_mac_inst[module_idP].mbsfn_AreaInfo[j]->mcch_Config_r9.mcch_RepetitionPeriod_r9;
+ long mcch_offset = UE_mac_inst[module_idP].mbsfn_AreaInfo[j]->mcch_Config_r9.mcch_Offset_r9;
- ii = 0;
- msi_pos = 0;
- mbsfn_period =
- 1 << (UE_mac_inst[module_idP].
- mbsfn_SubframeConfig[0]->radioframeAllocationPeriod);
- mcch_period =
- 32 << (UE_mac_inst[module_idP].
- mbsfn_AreaInfo[0]->mcch_Config_r9.
- mcch_RepetitionPeriod_r9);
+ LOG_D(MAC,
+ "[UE %d] Frame %d subframe %d: Checking MBSFN Sync Area %d/%d with SF allocation %d/%d for MCCH and MTCH (mbsfn period %ld, mcch period %ld,mac sched period (%ld,%ld))\n",
+ module_idP,frameP, subframe,i,UE_mac_inst[module_idP].num_active_mbsfn_area,
+ j,UE_mac_inst[module_idP].num_sf_allocation_pattern,mbsfn_period,mcch_period,
+ mcch_offset,mbsfn_alloc_offset);
- LOG_D(MAC,
- "[UE %d] Frame %d subframe %d: Checking MBSFN Sync Area %d/%d with SF allocation %d/%d for MCCH and MTCH (mbsfn period %d, mcch period %d,mac sched period (%d,%ld))\n",
- module_idP, frameP, subframe, i,
- UE_mac_inst[module_idP].num_active_mbsfn_area, j,
- UE_mac_inst[module_idP].num_sf_allocation_pattern,
- mbsfn_period, mcch_period, mch_scheduling_period,
- UE_mac_inst[module_idP].
- mbsfn_SubframeConfig[j]->radioframeAllocationOffset);
+ // get the real MCS value
+ switch (UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.signallingMCS_r9) {
+ case 0:
+ mcch_mcs = 2;
+ break;
- // get the real MCS value
- switch (UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->
- mcch_Config_r9.signallingMCS_r9) {
- case 0:
- mcch_mcs = 2;
- break;
+ case 1:
+ mcch_mcs = 7;
+ break;
- case 1:
- mcch_mcs = 7;
- break;
+ case 2:
+ mcch_mcs = 13;
+ break;
- case 2:
- mcch_mcs = 13;
- break;
+ case 3:
+ mcch_mcs = 19;
+ break;
+ }
- case 3:
- mcch_mcs = 19;
- break;
- }
+ if (UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) { // one-frameP format
+ if (frameP % mbsfn_period == mbsfn_alloc_offset) { // MBSFN frameP
- if (frameP % mbsfn_period == UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->radioframeAllocationOffset) { // MBSFN frameP
- if (UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) { // one-frameP format
+ if (UE_mac_inst[module_idP].pmch_Config[0]) {
+ // Find the first subframe in this MCH to transmit MSI
+ if (frameP % mch_scheduling_period == mbsfn_alloc_offset) {
+ while (ii == 0) {
+ ii = UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & (0x80 >> msi_pos);
+ msi_pos++;
+ }
+ }
+ }
- if (UE_mac_inst[module_idP].pmch_Config[0]) {
- // Find the first subframe in this MCH to transmit MSI
- if (frameP % mch_scheduling_period ==
- UE_mac_inst[module_idP].
- mbsfn_SubframeConfig
- [j]->radioframeAllocationOffset) {
- while (ii == 0) {
- ii = UE_mac_inst[module_idP].
- mbsfn_SubframeConfig[j]->
- subframeAllocation.choice.
- oneFrame.buf[0] & (0x80 >> msi_pos);
- msi_pos++;
- }
- }
- }
+ // Check if the subframe is for MSI, MCCH or MTCHs and Set the correspoding flag to 1
+ switch (subframe) {
+ case 1:
+ if (UE_mac_inst[module_idP].tdd_Config == NULL) {
+ if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1) {
+ if (msi_pos == 1) {
+ msi_flag = 1;
+ }
- if (UE_mac_inst[module_idP].tdd_Config == NULL)
- frame_FDD = 1;
- else
- frame_FDD = 0;
- // Check if the subframe is for MSI, MCCH or MTCHs and Set the correspoding flag to 1
- switch (subframe) {
- case 1:
- if (frame_FDD == 1) {
- if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig
- [j]->subframeAllocation.choice.oneFrame.
- buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1) {
- if (msi_pos == 1) {
- msi_flag = 1;
- }
+ if ((frameP % mcch_period == mcch_offset) &&
+ ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1)) {
+ mcch_flag = 1;
+ }
- if ((frameP % mcch_period ==
- UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.mcch_Offset_r9)
- &&
- ((UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.sf_AllocInfo_r9.
- buf[0] & MBSFN_FDD_SF1) ==
- MBSFN_FDD_SF1)) {
- mcch_flag = 1;
- }
+ mtch_flag = 1;
+ }
+ }
- mtch_flag = 1;
- }
- }
+ break;
- break;
+ case 2:
+ if (UE_mac_inst[module_idP].tdd_Config == NULL) {
+ if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2) {
+ if (msi_pos == 2) {
+ msi_flag = 1;
+ }
- case 2:
- if (frame_FDD == 1) {
- if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig
- [j]->subframeAllocation.choice.oneFrame.
- buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2) {
- if (msi_pos == 2) {
- msi_flag = 1;
- }
+ if ((frameP % mcch_period == mcch_offset) &&
+ ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2)) {
+ mcch_flag = 1;
+ }
- if ((frameP % mcch_period ==
- UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.mcch_Offset_r9)
- &&
- ((UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.sf_AllocInfo_r9.
- buf[0] & MBSFN_FDD_SF2) ==
- MBSFN_FDD_SF2)) {
- mcch_flag = 1;
- }
+ mtch_flag = 1;
+ }
+ }
- mtch_flag = 1;
- }
- }
+ break;
- break;
+ case 3:
+ if (UE_mac_inst[module_idP].tdd_Config != NULL) { // TDD
+ if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3) {
+ if (msi_pos == 1) {
+ msi_flag = 1;
+ }
- case 3:
- if (frame_FDD == 0) { //TDD
- if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig
- [j]->subframeAllocation.choice.oneFrame.
- buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3) {
- if (msi_pos == 1) {
- msi_flag = 1;
- }
+ if ((frameP % mcch_period == mcch_offset) &&
+ ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3)) {
+ mcch_flag = 1;
+ }
- if ((frameP % mcch_period ==
- UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.mcch_Offset_r9)
- &&
- ((UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.sf_AllocInfo_r9.
- buf[0] & MBSFN_TDD_SF3) ==
- MBSFN_TDD_SF3)) {
- mcch_flag = 1;
- }
+ mtch_flag = 1;
+ }
+ } else { // FDD
+ if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF3) == MBSFN_FDD_SF3) {
+ if (msi_pos == 3) {
+ msi_flag = 1;
+ }
- mtch_flag = 1;
- }
- } else { // FDD
- if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig
- [j]->subframeAllocation.choice.oneFrame.
- buf[0] & MBSFN_FDD_SF3) == MBSFN_FDD_SF3) {
- if (msi_pos == 3) {
- msi_flag = 1;
- }
+ if ((frameP % mcch_period == mcch_offset) &&
+ ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF3) == MBSFN_FDD_SF3)) {
+ mcch_flag = 1;
+ }
- if ((frameP % mcch_period ==
- UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.mcch_Offset_r9)
- &&
- ((UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.sf_AllocInfo_r9.
- buf[0] & MBSFN_FDD_SF3) ==
- MBSFN_FDD_SF3)) {
- mcch_flag = 1;
- }
+ mtch_flag = 1;
+ }
+ }
- mtch_flag = 1;
- }
- }
+ break;
- break;
+ case 4:
+ if (UE_mac_inst[module_idP].tdd_Config != NULL) {
+ if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4) {
+ if (msi_pos == 2) {
+ msi_flag = 1;
+ }
- case 4:
- if (frame_FDD == 0) {
- if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig
- [j]->subframeAllocation.choice.oneFrame.
- buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4) {
- if (msi_pos == 2) {
- msi_flag = 1;
- }
+ if ((frameP % mcch_period == mcch_offset) &&
+ ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4)) {
+ mcch_flag = 1;
+ }
- if ((frameP % mcch_period ==
- UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.mcch_Offset_r9)
- &&
- ((UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.sf_AllocInfo_r9.
- buf[0] & MBSFN_TDD_SF4) ==
- MBSFN_TDD_SF4)) {
- mcch_flag = 1;
- }
+ mtch_flag = 1;
+ }
+ }
- mtch_flag = 1;
- }
- }
+ break;
- break;
+ case 6:
+ if (UE_mac_inst[module_idP].tdd_Config == NULL) {
+ if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6) {
+ if (msi_pos == 4) {
+ msi_flag = 1;
+ }
- case 6:
- if (frame_FDD == 1) {
- if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig
- [j]->subframeAllocation.choice.oneFrame.
- buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6) {
- if (msi_pos == 4) {
- msi_flag = 1;
- }
+ if ((frameP % mcch_period == mcch_offset) &&
+ ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6)) {
+ mcch_flag = 1;
+ }
- if ((frameP % mcch_period ==
- UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.mcch_Offset_r9)
- &&
- ((UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.sf_AllocInfo_r9.
- buf[0] & MBSFN_FDD_SF6) ==
- MBSFN_FDD_SF6)) {
- mcch_flag = 1;
- }
+ mtch_flag = 1;
+ }
+ }
- mtch_flag = 1;
- }
- }
+ break;
- break;
+ case 7:
+ if (UE_mac_inst[module_idP].tdd_Config != NULL) { // TDD
+ if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7) {
+ if (msi_pos == 3) {
+ msi_flag = 1;
+ }
- case 7:
- if (frame_FDD == 0) { // TDD
- if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig
- [j]->subframeAllocation.choice.oneFrame.
- buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7) {
- if (msi_pos == 3) {
- msi_flag = 1;
- }
+ if ((frameP % mcch_period == mcch_offset) &&
+ ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7)) {
+ mcch_flag = 1;
+ }
- if ((frameP % mcch_period ==
- UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.mcch_Offset_r9)
- &&
- ((UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.sf_AllocInfo_r9.
- buf[0] & MBSFN_TDD_SF7) ==
- MBSFN_TDD_SF7)) {
- mcch_flag = 1;
- }
+ mtch_flag = 1;
+ }
+ } else { // FDD
+ if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF7) == MBSFN_FDD_SF7) {
+ if (msi_pos == 5) {
+ msi_flag = 1;
+ }
- mtch_flag = 1;
- }
- } else { // FDD
- if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig
- [j]->subframeAllocation.choice.oneFrame.
- buf[0] & MBSFN_FDD_SF7) == MBSFN_FDD_SF7) {
- if (msi_pos == 5) {
- msi_flag = 1;
- }
+ if ((frameP % mcch_period == mcch_offset) &&
+ ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF7) == MBSFN_FDD_SF7)) {
+ mcch_flag = 1;
+ }
- if ((frameP % mcch_period ==
- UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.mcch_Offset_r9)
- &&
- ((UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.sf_AllocInfo_r9.
- buf[0] & MBSFN_FDD_SF7) ==
- MBSFN_FDD_SF7)) {
- mcch_flag = 1;
- }
+ mtch_flag = 1;
+ }
+ }
- mtch_flag = 1;
- }
- }
+ break;
- break;
+ case 8:
+ if (UE_mac_inst[module_idP].tdd_Config != NULL) { //TDD
+ if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8) {
+ if (msi_pos == 4) {
+ msi_flag = 1;
+ }
- case 8:
- if (frame_FDD == 0) { //TDD
- if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig
- [j]->subframeAllocation.choice.oneFrame.
- buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8) {
- if (msi_pos == 4) {
- msi_flag = 1;
- }
+ if ((frameP % mcch_period == mcch_offset) &&
+ ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8)) {
+ mcch_flag = 1;
+ }
- if ((frameP % mcch_period ==
- UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.mcch_Offset_r9)
- &&
- ((UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.sf_AllocInfo_r9.
- buf[0] & MBSFN_TDD_SF8) ==
- MBSFN_TDD_SF8)) {
- mcch_flag = 1;
- }
+ mtch_flag = 1;
+ }
+ } else { // FDD
+ if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF8) == MBSFN_FDD_SF8) {
+ if (msi_pos == 6) {
+ msi_flag = 1;
+ }
- mtch_flag = 1;
- }
- } else { // FDD
- if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig
- [j]->subframeAllocation.choice.oneFrame.
- buf[0] & MBSFN_FDD_SF8) == MBSFN_FDD_SF8) {
- if (msi_pos == 6) {
- msi_flag = 1;
- }
+ if ((frameP % mcch_period == mcch_offset) &&
+ ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF8) == MBSFN_FDD_SF8)) {
+ mcch_flag = 1;
+ }
- if ((frameP % mcch_period ==
- UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.mcch_Offset_r9)
- &&
- ((UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.sf_AllocInfo_r9.
- buf[0] & MBSFN_FDD_SF8) ==
- MBSFN_FDD_SF8)) {
- mcch_flag = 1;
- }
+ mtch_flag = 1;
+ }
+ }
- mtch_flag = 1;
- }
- }
+ break;
- break;
+ case 9:
+ if (UE_mac_inst[module_idP].tdd_Config != NULL) {
+ if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9) {
+ if (msi_pos == 5) {
+ msi_flag = 1;
+ }
- case 9:
- if (frame_FDD == 0) {
- if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig
- [j]->subframeAllocation.choice.oneFrame.
- buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9) {
- if (msi_pos == 5) {
- msi_flag = 1;
- }
+ if ((frameP % mcch_period == mcch_offset) &&
+ ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9)) {
+ mcch_flag = 1;
+ }
- if ((frameP % mcch_period ==
- UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.mcch_Offset_r9)
- &&
- ((UE_mac_inst[module_idP].mbsfn_AreaInfo
- [i]->mcch_Config_r9.sf_AllocInfo_r9.
- buf[0] & MBSFN_TDD_SF9) ==
- MBSFN_TDD_SF9)) {
- mcch_flag = 1;
- }
+ mtch_flag = 1;
+ }
+ }
- mtch_flag = 1;
- }
- }
+ break;
+ }// end switch
- break;
- } // end switch
+ // Acount for sf_allocable in CSA
+ int num_sf_alloc = 0;
+ for (i = 0; i < 8; i++) {
+ if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] == NULL)
+ continue;
- // sf allocation is non-overlapping
- if ((msi_flag == 1) || (mcch_flag == 1)
- || (mtch_flag == 1)) {
- LOG_D(MAC,
- "[UE %d] Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n",
- module_idP, frameP, subframe, i, j, msi_flag,
- mcch_flag, mtch_flag);
+ if (UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.present != MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame)
+ continue;
+
+ uint32_t common_mbsfn_SubframeConfig = UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[0];
+ for (j = 0; j < 6; j++)
+ num_sf_alloc += ((common_mbsfn_SubframeConfig & (0x80 >> j)) == (0x80 >> j));
+ }
+
+ for (i = 0; i < 28; i++) {
+ if (UE_mac_inst[module_idP].pmch_stop_mtch[i] >= num_sf_alloc) {
+ if (UE_mac_inst[module_idP].pmch_stop_mtch[i] != 2047) {
+ if (UE_mac_inst[module_idP].pmch_Config[UE_mac_inst[module_idP].msi_pmch] != NULL)
+ mtch_mcs = UE_mac_inst[module_idP].pmch_Config[UE_mac_inst[module_idP].msi_pmch]->dataMCS_r9;
+ else
+ mtch_mcs = -1;
+ mch_lcid = (uint8_t)i;
+ break;
+ }
+ }
+ }
+
+ // sf allocation is non-overlapping
+ if ((msi_flag==1) || (mcch_flag==1) || (mtch_flag==1)) {
+ LOG_D(MAC,"[UE %d] Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n",
+ module_idP, frameP, subframe,i,j,msi_flag,mcch_flag,mtch_flag);
+
+ *sync_area=i;
+ break;
+ }
+ }
+ } else { // four-frameP format
+ uint32_t mbsfn_SubframeConfig = UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[2] |
+ (UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[1]<<8) |
+ (UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0]<<16);
+ uint32_t MCCH_mbsfn_SubframeConfig = /* UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[2] |
+ (UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[1]<<8) | */
+ (UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0]<<16);
+
+ jj=frameP%4;
+ if ((frameP % mbsfn_period) == (mbsfn_alloc_offset+jj)) {
+ if (UE_mac_inst[module_idP].tdd_Config == NULL) {
+ switch (subframe) {
+ case 1:
+ if ((mbsfn_SubframeConfig & (0x800000>>(jj*6))) == (0x800000>>(jj*6))) {
+ if ((frameP % mcch_period == (mcch_offset+jj)) && ((MCCH_mbsfn_SubframeConfig & (0x800000>>(jj*6))) == (0x800000>>(jj*6)))) {
+ mcch_flag=1;
+ LOG_D(MAC,"frameP(%d),mcch_period(%ld),mbsfn_SubframeConfig(%x),MCCH_mbsfn_SubframeConfig(%x),mask(%x),jj(%d),num_sf_alloc(%d)\n",
+ frameP, mcch_period, mbsfn_SubframeConfig, MCCH_mbsfn_SubframeConfig, (0x800000>>(jj*6)), jj, UE_mac_inst[module_idP].common_num_sf_alloc);
+ if(UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]==NULL)
+ UE_mac_inst[module_idP].common_num_sf_alloc++;
+ }
+ }
+ break;
+ case 2:
+ if ((mbsfn_SubframeConfig & (0x400000>>(jj*6))) == (0x400000>>(jj*6))) {
+ if ((frameP % mcch_period == (mcch_offset+jj)) && ((MCCH_mbsfn_SubframeConfig & (0x400000>>(jj*6))) == (0x400000>>(jj*6)))) {
+ mcch_flag=1;
+ LOG_D(MAC,"frameP(%d),mcch_period(%ld),mbsfn_SubframeConfig(%x),MCCH_mbsfn_SubframeConfig(%x),mask(%x),jj(%d),num_sf_alloc(%d)\n",
+ frameP, mcch_period, mbsfn_SubframeConfig, MCCH_mbsfn_SubframeConfig, (0x400000>>(jj*6)), jj, UE_mac_inst[module_idP].common_num_sf_alloc);
+ if(UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]==NULL)
+ UE_mac_inst[module_idP].common_num_sf_alloc++;
+ }
+ }
+ break;
+ case 3:
+ if ((mbsfn_SubframeConfig & (0x200000>>(jj*6))) == (0x200000>>(jj*6))) {
+ if ((frameP % mcch_period == (mcch_offset+jj)) && ((MCCH_mbsfn_SubframeConfig & (0x200000>>(jj*6))) == (0x200000>>(jj*6)))) {
+ LOG_D(MAC,"frameP(%d),mcch_period(%ld),mbsfn_SubframeConfig(%x),MCCH_mbsfn_SubframeConfig(%x),mask(%x),jj(%d),num_sf_alloc(%d)\n",
+ frameP, mcch_period, mbsfn_SubframeConfig, MCCH_mbsfn_SubframeConfig, (0x200000>>(jj*6)), jj, UE_mac_inst[module_idP].common_num_sf_alloc);
+ mcch_flag=1;
+ if(UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]==NULL)
+ UE_mac_inst[module_idP].common_num_sf_alloc++;
+ }
+ }
+ break;
+ case 6:
+ if ((mbsfn_SubframeConfig & (0x100000>>(jj*6))) == (0x100000>>(jj*6))) {
+ if ((frameP % mcch_period == (mcch_offset+jj)) && ((MCCH_mbsfn_SubframeConfig & (0x100000>>(jj*6))) == (0x100000>>(jj*6)))) {
+ LOG_D(MAC,"frameP(%d),mcch_period(%ld),mbsfn_SubframeConfig(%x),MCCH_mbsfn_SubframeConfig(%x),mask(%x),jj(%d),num_sf_alloc(%d)\n",
+ frameP, mcch_period, mbsfn_SubframeConfig, MCCH_mbsfn_SubframeConfig, (0x100000>>(jj*6)), jj, UE_mac_inst[module_idP].common_num_sf_alloc);
+ mcch_flag=1;
+ if(UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]==NULL)
+ UE_mac_inst[module_idP].common_num_sf_alloc++;
+ }
+ }
+ break;
+ case 7:
+ if ((mbsfn_SubframeConfig & (0x80000>>(jj*6))) == (0x80000>>(jj*6))) {
+ if ((frameP % mcch_period == (mcch_offset+jj)) && ((MCCH_mbsfn_SubframeConfig & (0x80000>>(jj*6))) == (0x80000>>(jj*6)))) {
+ LOG_D(MAC,"frameP(%d),mcch_period(%ld),mbsfn_SubframeConfig(%x),MCCH_mbsfn_SubframeConfig(%x),mask(%x),jj(%d),num_sf_alloc(%d)\n",
+ frameP, mcch_period, mbsfn_SubframeConfig, MCCH_mbsfn_SubframeConfig, (0x80000>>(jj*6)), jj, UE_mac_inst[module_idP].common_num_sf_alloc);
+ if(UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]==NULL)
+ UE_mac_inst[module_idP].common_num_sf_alloc++;
+ mcch_flag=1;
+ }
+ }
+ break;
+ case 8:
+ if ((mbsfn_SubframeConfig & (0x40000>>(jj*6))) == (0x40000>>(jj*6))) {
+ if ((frameP % mcch_period == (mcch_offset+jj)) && ((MCCH_mbsfn_SubframeConfig & (0x40000>>(jj*6))) == (0x40000>>(jj*6)))) {
+ LOG_D(MAC,"frameP(%d),mcch_period(%ld),mbsfn_SubframeConfig(%x),MCCH_mbsfn_SubframeConfig(%x),mask(%x),jj(%d),num_sf_alloc(%d)\n",
+ frameP, mcch_period, mbsfn_SubframeConfig, MCCH_mbsfn_SubframeConfig, (0x40000>>(jj*6)), jj, UE_mac_inst[module_idP].common_num_sf_alloc);
+ if(UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[0]==NULL)
+ UE_mac_inst[module_idP].common_num_sf_alloc++;
+ mcch_flag=1;
+ }
+ }
+ break;
+ }// end switch
+ } else {
+ // TODO TDD
+ }
+
+ mtch_mcs = ue_query_p_mch(module_idP, frameP, subframe, &mtch_flag, &msi_flag, &mch_lcid);
+
+ // sf allocation is non-overlapping
+ if ((msi_flag==1) || (mcch_flag==1) || (mtch_flag==1)) {
+ LOG_D(MAC,"[UE %d] Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n",
+ module_idP, frameP, subframe,i,j,msi_flag,mcch_flag,mtch_flag);
+ *sync_area=i;
+ break;
+ }
+ }
+ }
+ } // end of for
- *sync_area = i;
- break;
- }
- } else { // four-frameP format
- }
- }
- } // end of for
#if UE_TIMING_TRACE
- stop_meas(&UE_mac_inst[module_idP].ue_query_mch);
+ stop_meas(&UE_mac_inst[module_idP].ue_query_mch);
#endif
- if ((mcch_flag == 1)) { // || (msi_flag==1))
- *mcch_active = 1;
- }
+ if ((mcch_flag == 1)) { // || (msi_flag==1))
+ *mcch_active = 1;
+ }
- if ((mcch_flag == 1)
- || ((msi_flag == 1) && (UE_mac_inst[module_idP].mcch_status == 1))) {
- return mcch_mcs;
- } else if ((mtch_flag == 1)
- && (UE_mac_inst[module_idP].msi_status == 1)) {
- return UE_mac_inst[module_idP].pmch_Config[0]->dataMCS_r9;
+ if ( (mcch_flag==1) || ((msi_flag==1) && (UE_mac_inst[module_idP].mcch_status==1)) ) {
+ if (msi_flag!=1) {
+ for (i=0; i<8; i++)
+ UE_mac_inst[module_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] = NULL;
+ for (i=0; i<15; i++)
+ UE_mac_inst[module_idP].pmch_Config[i] = NULL;
+ for (i=0; i<28 ;i++) {
+ UE_mac_inst[module_idP].pmch_lcids[i] = -1;
+ UE_mac_inst[module_idP].pmch_stop_mtch[i] = 2047;
+ UE_mac_inst[module_idP].msi_status_v[i] = 0;
+ }
} else {
- return -1;
+ for (i=0; i<28; i++) {
+ UE_mac_inst[module_idP].pmch_lcids[i] = -1;
+ UE_mac_inst[module_idP].pmch_stop_mtch[i] = 2047;
+ UE_mac_inst[module_idP].msi_status_v[i] = 0;
+ }
}
+ return mcch_mcs;
+ } else if ((mtch_flag==1) && (UE_mac_inst[module_idP].msi_status_v[(mch_lcid > 27) ? 27 : mch_lcid] == 1)) {
+ return mtch_mcs;
+ } else {
+ return -1;
+ }
}
#endif
@@ -2255,7 +2469,7 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
#endif
if (opt_enabled) {
- trace_pdu(0, ulsch_buffer, buflen, module_idP, 3,
+ trace_pdu(DIRECTION_UPLINK, ulsch_buffer, buflen, module_idP, WS_C_RNTI,
UE_mac_inst[module_idP].crnti,
UE_mac_inst[module_idP].txFrame,
UE_mac_inst[module_idP].txSubframe, 0, 0);
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
index 1144f6ac65..681a6e32f8 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c
@@ -30,6 +30,8 @@
#define PDCP_C
//#define DEBUG_PDCP_FIFO_FLUSH_SDU
+#define MBMS_MULTICAST_OUT
+
#include "assertions.h"
#include "hashtable.h"
#include "pdcp.h"
@@ -72,6 +74,17 @@ extern int otg_enabled;
#include "common/ran_context.h"
extern RAN_CONTEXT_t RC;
+#ifdef MBMS_MULTICAST_OUT
+# include
+# include
+# include
+# include
+# include
+# include
+
+static int mbms_socket = -1;
+#endif
+
//-----------------------------------------------------------------------------
/*
* If PDCP_UNIT_TEST is set here then data flow between PDCP and RLC is broken
@@ -356,16 +369,11 @@ boolean_t pdcp_data_req(
* Ask sublayer to transmit data and check return value
* to see if RLC succeeded
*/
-#ifdef PDCP_MSG_PRINT
- int i=0;
- LOG_F(PDCP,"[MSG] PDCP DL %s PDU on rb_id %d\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP);
- for (i = 0; i < pdcp_pdu_size; i++) {
- LOG_F(PDCP,"%02x ", ((uint8_t*)pdcp_pdu_p->data)[i]);
- }
+ LOG_DUMPMSG(PDCP,DEBUG_PDCP,(char *)pdcp_pdu_p->data,pdcp_pdu_size,
+ "[MSG] PDCP DL %s PDU on rb_id %d\n",(srb_flagP)? "CONTROL" : "DATA", rb_idP);
LOG_F(PDCP,"\n");
-#endif
static cudu_params_t *cudu = NULL;
if (ctxt_pP->enb_flag == 1)
{
@@ -527,17 +535,8 @@ pdcp_data_ind(
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_IND,VCD_FUNCTION_IN);
-
-#ifdef PDCP_MSG_PRINT
- int i=0;
- LOG_F(PDCP,"[MSG] PDCP UL %s PDU on rb_id %d\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP);
-
- for (i = 0; i < sdu_buffer_sizeP; i++) {
- LOG_F(PDCP,"%02x ", ((uint8_t*)sdu_buffer_pP->data)[i]);
- }
-
- LOG_F(PDCP,"\n");
-#endif
+ LOG_DUMPMSG(PDCP,DEBUG_PDCP,(char *)sdu_buffer_pP->data,sdu_buffer_sizeP,
+ "[MSG] PDCP UL %s PDU on rb_id %d\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP);
#if T_TRACER
if (ctxt_pP->enb_flag != ENB_FLAG_NO)
@@ -824,11 +823,26 @@ pdcp_data_ind(
packet_forwarded = FALSE;
#endif
+#ifdef MBMS_MULTICAST_OUT
+ if ((MBMS_flagP != 0) && (mbms_socket != -1)) {
+ struct iphdr *ip_header = (struct iphdr*)&sdu_buffer_pP->data[payload_offset];
+ struct udphdr *udp_header = (struct udphdr*)&sdu_buffer_pP->data[payload_offset + sizeof(struct iphdr)];
+ struct sockaddr_in dest_addr;
+
+ dest_addr.sin_family = AF_INET;
+ dest_addr.sin_port = udp_header->dest;
+ dest_addr.sin_addr.s_addr = ip_header->daddr;
+
+ sendto(mbms_socket, &sdu_buffer_pP->data[payload_offset], sdu_buffer_sizeP - payload_offset, MSG_DONTWAIT, (struct sockaddr*)&dest_addr, sizeof(dest_addr));
+ packet_forwarded = TRUE;
+ }
+#endif
+
if (FALSE == packet_forwarded) {
new_sdu_p = get_free_mem_block(sdu_buffer_sizeP - payload_offset + sizeof (pdcp_data_ind_header_t), __func__);
if (new_sdu_p) {
- if (pdcp_p->rlc_mode == RLC_MODE_AM ) {
+ if ((MBMS_flagP == 0) && (pdcp_p->rlc_mode == RLC_MODE_AM)) {
pdcp_p->last_submitted_pdcp_rx_sn = sequence_number;
}
@@ -869,7 +883,6 @@ pdcp_data_ind(
}
- }
/* Print octets of incoming data in hexadecimal form */
LOG_D(PDCP, "Following content has been received from RLC (%d,%d)(PDCP header has already been removed):\n",
@@ -905,13 +918,14 @@ pdcp_data_ind(
#if defined(STOP_ON_IP_TRAFFIC_OVERLOAD)
- else {
- AssertFatal(0, PROTOCOL_PDCP_CTXT_FMT" PDCP_DATA_IND SDU DROPPED, OUT OF MEMORY \n",
- PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP, pdcp_p));
- }
-
+ else {
+ AssertFatal(0, PROTOCOL_PDCP_CTXT_FMT" PDCP_DATA_IND SDU DROPPED, OUT OF MEMORY \n",
+ PROTOCOL_PDCP_CTXT_ARGS(ctxt_pP, pdcp_p));
+ }
#endif
+ }
+
free_mem_block(sdu_buffer_pP, __func__);
if (ctxt_pP->enb_flag) {
@@ -1524,8 +1538,12 @@ rrc_pdcp_config_asn1_req (
for (j=0; jlist.count; j++) {
MBMS_SessionInfo_p = mbms_SessionInfoList_r9_p->list.array[j];
- lc_id = MBMS_SessionInfo_p->sessionId_r9->buf[0];
+ if (MBMS_SessionInfo_p->sessionId_r9)
+ lc_id = MBMS_SessionInfo_p->sessionId_r9->buf[0];
+ else
+ lc_id = MBMS_SessionInfo_p->logicalChannelIdentity_r9;
mch_id = MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2]; //serviceId is 3-octet string
+// mch_id = j;
// can set the mch_id = i
if (ctxt_pP->enb_flag) {
@@ -1546,6 +1564,14 @@ rrc_pdcp_config_asn1_req (
}
}
+ LOG_D(PDCP, "lc_id (%02ld) mch_id(%02x,%02x,%02x) drb_id(%ld) action(%d)\n",
+ lc_id,
+ MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[0],
+ MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[1],
+ MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2],
+ drb_id,
+ action);
+
pdcp_config_req_asn1 (
ctxt_pP,
NULL, // unused for MBMS
@@ -2084,6 +2110,12 @@ void pdcp_layer_init(void)
#endif
}
+#ifdef MBMS_MULTICAST_OUT
+ mbms_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
+ if (mbms_socket == -1)
+ LOG_W(PDCP, "Could not create RAW socket, MBMS packets will not be put to the network\n");
+#endif
+
LOG_I(PDCP, "PDCP layer has been initialized\n");
pdcp_output_sdu_bytes_to_write=0;
@@ -2134,6 +2166,12 @@ void pdcp_layer_cleanup (void)
{
list_free (&pdcp_sdu_list);
hashtable_destroy(pdcp_coll_p);
+#ifdef MBMS_MULTICAST_OUT
+ if(mbms_socket != -1) {
+ close(mbms_socket);
+ mbms_socket = -1;
+ }
+#endif
}
#ifdef PDCP_USE_RT_FIFO
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
index bca7e007c2..ae1679e009 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
@@ -760,10 +760,10 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
0,
MSC_AS_TIME_FMT" DATA-REQ inst %u rb %u rab %u size %u",
MSC_AS_TIME_ARGS(ctxt_pP),
- pc5s_header.inst,
- pc5s_header.rb_id,
+ pc5s_header->inst,
+ pc5s_header->rb_id,
rab_id,
- pc5s_header.data_size);
+ pc5s_header->data_size);
pdcp_data_req(
&ctxt,
@@ -787,10 +787,10 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
0,
MSC_AS_TIME_FMT" DATA-REQ inst %u rb %u rab %u size %u",
MSC_AS_TIME_ARGS(ctxt_pP),
- pc5s_header.inst,
- pc5s_header.rb_id,
+ pc5s_header->inst,
+ pc5s_header->rb_id,
rab_id,
- pc5s_header.data_size);
+ pc5s_header->data_size);
LOG_D(PDCP,
"[FRAME %5u][UE][IP][INSTANCE %u][RB %u][--- PDCP_DATA_REQ / %d Bytes ---X][PDCP][MOD %u][UE %u][RB %u] NON INSTANCIATED INSTANCE key 0x%"PRIx64", DROPPED\n",
ctxt.frame,
diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent.c b/openair2/LAYER2/PROTO_AGENT/proto_agent.c
index eba720a58f..a38ffddaf3 100644
--- a/openair2/LAYER2/PROTO_AGENT/proto_agent.c
+++ b/openair2/LAYER2/PROTO_AGENT/proto_agent.c
@@ -35,7 +35,7 @@
*/
#include "ENB_APP/flexran_agent_defs.h"
#include "proto_agent_common.h"
-#include "log.h"
+#include "common/utils/LOG/log.h"
#include "proto_agent.h"
#include "assertions.h"
#include "proto_agent_net_comm.h"
diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent_common.c b/openair2/LAYER2/PROTO_AGENT/proto_agent_common.c
index eb2c6c0e7b..c829265825 100644
--- a/openair2/LAYER2/PROTO_AGENT/proto_agent_common.c
+++ b/openair2/LAYER2/PROTO_AGENT/proto_agent_common.c
@@ -40,7 +40,7 @@
#include "proto_agent_common.h"
#include "PHY/phy_extern.h"
-#include "log.h"
+#include "common/utils/LOG/log.h"
#include "RRC/LTE/rrc_extern.h"
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent_handler.c b/openair2/LAYER2/PROTO_AGENT/proto_agent_handler.c
index 1a88150419..7620a12a42 100644
--- a/openair2/LAYER2/PROTO_AGENT/proto_agent_handler.c
+++ b/openair2/LAYER2/PROTO_AGENT/proto_agent_handler.c
@@ -36,7 +36,7 @@
#include "proto_agent_common.h"
-#include "log.h"
+#include "common/utils/LOG/log.h"
#include "assertions.h"
proto_agent_message_decoded_callback proto_agent_messages_callback[][3] = {
diff --git a/openair2/LAYER2/RLC/rlc.h b/openair2/LAYER2/RLC/rlc.h
index d879c39f66..9aee5cbc11 100644
--- a/openair2/LAYER2/RLC/rlc.h
+++ b/openair2/LAYER2/RLC/rlc.h
@@ -208,7 +208,7 @@ rlc_mbms_id_t rlc_mbms_lcid2service_session_id_eNB[MAX_eNB][RLC_MAX_MBMS_
#define rlc_mbms_ue_get_lcid_by_rb_id(uE_mOD,rB_iD) rlc_mbms_rbid2lcid_ue[uE_mOD][rB_iD]
#define rlc_mbms_ue_set_lcid_by_rb_id(uE_mOD,rB_iD,lOG_cH_iD) do { \
- AssertFatal(rB_iDlist.count; j++) {
MBMS_SessionInfo_p = mbms_SessionInfoList_r9_p->list.array[j];
- mbms_session_id = MBMS_SessionInfo_p->sessionId_r9->buf[0];
+ if (MBMS_SessionInfo_p->sessionId_r9)
+ mbms_session_id = MBMS_SessionInfo_p->sessionId_r9->buf[0];
+ else
+ mbms_session_id = MBMS_SessionInfo_p->logicalChannelIdentity_r9;
lc_id = mbms_session_id;
mbms_service_id = MBMS_SessionInfo_p->tmgi_r9.serviceId_r9.buf[2]; //serviceId is 3-octet string
+// mbms_service_id = j;
// can set the mch_id = i
if (ctxt_pP->enb_flag) {
diff --git a/openair2/NETWORK_DRIVER/LITE/common.c b/openair2/NETWORK_DRIVER/LITE/common.c
index 0d616d5764..2ae6f5279d 100644
--- a/openair2/NETWORK_DRIVER/LITE/common.c
+++ b/openair2/NETWORK_DRIVER/LITE/common.c
@@ -333,7 +333,7 @@ void oai_nw_drv_common_class_wireless2ip(uint16_t dlen,
printk("\n");
#endif //OAI_DRV_DEBUG_RECEIVE
- netif_rx(skb);
+ netif_rx_ni(skb);
#ifdef OAI_DRV_DEBUG_RECEIVE
printk("[OAI_IP_DRV][%s] end\n",__FUNCTION__);
#endif
diff --git a/openair2/NETWORK_DRIVER/MESH/common.c b/openair2/NETWORK_DRIVER/MESH/common.c
index d380b8a4d8..1c7b8e4d12 100644
--- a/openair2/NETWORK_DRIVER/MESH/common.c
+++ b/openair2/NETWORK_DRIVER/MESH/common.c
@@ -309,7 +309,7 @@ void nas_COMMON_receive(uint16_t dlen,
printk("\n");
#endif //NAS_DEBUG_RECEIVE
- netif_rx(skb);
+ netif_rx_ni(skb);
#ifdef NAS_DEBUG_RECEIVE
printk("NAS_COMMON_RECEIVE: end\n");
#endif
diff --git a/openair2/NETWORK_DRIVER/UE_IP/common.c b/openair2/NETWORK_DRIVER/UE_IP/common.c
index 84f425ef3c..b21ca5f2dc 100644
--- a/openair2/NETWORK_DRIVER/UE_IP/common.c
+++ b/openair2/NETWORK_DRIVER/UE_IP/common.c
@@ -222,7 +222,7 @@ skb_p->mark = rb_idP;
printk("\n");
#endif //OAI_DRV_DEBUG_RECEIVE
- netif_rx(skb_p);
+ netif_rx_ni(skb_p);
#ifdef OAI_DRV_DEBUG_RECEIVE
printk("[UE_IP_DRV][%s] end\n",__FUNCTION__);
#endif
diff --git a/openair2/RRC/LTE/L2_interface.c b/openair2/RRC/LTE/L2_interface.c
index 442a93d3cc..e848ac47a9 100644
--- a/openair2/RRC/LTE/L2_interface.c
+++ b/openair2/RRC/LTE/L2_interface.c
@@ -43,9 +43,6 @@
#include "flexran_agent_extern.h"
-//#define RRC_DATA_REQ_DEBUG
-//#define DEBUG_RRC 1
-
extern RAN_CONTEXT_t RC;
@@ -68,10 +65,9 @@ mac_rrc_data_req(
uint8_t sfn = (uint8_t)((frameP>>2)&0xff);
-#ifdef DEBUG_RRC
- int i;
- LOG_I(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id);
-#endif
+ if (LOG_DEBUGFLAG(DEBUG_RRC)) {
+ LOG_D(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id);
+ }
eNB_RRC_INST *rrc;
rrc_eNB_carrier_data_t *carrier;
@@ -96,15 +92,15 @@ mac_rrc_data_req(
RC.rrc[Mod_idP]->carrier[CC_id].SIB1,
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1);
-#ifdef DEBUG_RRC
- LOG_T(RRC,"[eNB %d] Frame %d : BCCH request => SIB 1\n",Mod_idP,frameP);
+ if (LOG_DEBUGFLAG(DEBUG_RRC)) {
+ LOG_T(RRC,"[eNB %d] Frame %d : BCCH request => SIB 1\n",Mod_idP,frameP);
- for (i=0; icarrier[CC_id].sizeof_SIB1; i++) {
- LOG_T(RRC,"%x.",buffer_pP[i]);
- }
+ for (int i=0; icarrier[CC_id].sizeof_SIB1; i++) {
+ LOG_T(RRC,"%x.",buffer_pP[i]);
+ }
- LOG_T(RRC,"\n");
-#endif
+ LOG_T(RRC,"\n");
+ } /* LOG_DEBUGFLAG(DEBUG_RRC) */
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1);
} // All RFN mod 8 transmit SIB2-3 in SF 5
@@ -113,15 +109,15 @@ mac_rrc_data_req(
RC.rrc[Mod_idP]->carrier[CC_id].SIB23,
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
-#ifdef DEBUG_RRC
- LOG_T(RRC,"[eNB %d] Frame %d BCCH request => SIB 2-3\n",Mod_idP,frameP);
+ if (LOG_DEBUGFLAG(DEBUG_RRC)) {
+ LOG_T(RRC,"[eNB %d] Frame %d BCCH request => SIB 2-3\n",Mod_idP,frameP);
- for (i=0; icarrier[CC_id].sizeof_SIB23; i++) {
- LOG_T(RRC,"%x.",buffer_pP[i]);
- }
+ for (int i=0; icarrier[CC_id].sizeof_SIB23; i++) {
+ LOG_T(RRC,"%x.",buffer_pP[i]);
+ }
- LOG_T(RRC,"\n");
-#endif
+ LOG_T(RRC,"\n");
+ } /* LOG_DEBUGFLAG(DEBUG_RRC) */
return(RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
} else {
return(0);
@@ -193,20 +189,17 @@ mac_rrc_data_req(
RC.rrc[Mod_idP]->carrier[CC_id].MCCH_MESSAGE[mbsfn_sync_area],
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
-#ifdef DEBUG_RRC
- LOG_D(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE \n",Mod_idP,frameP);
+ if (LOG_DEBUGFLAG(DEBUG_RRC)) {
+ LOG_D(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE \n",Mod_idP,frameP);
- for (i=0; icarrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]; i++) {
- LOG_T(RRC,"%x.",buffer_pP[i]);
- }
+ for (int i=0; icarrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]; i++) {
+ LOG_T(RRC,"%x.",buffer_pP[i]);
+ }
- LOG_T(RRC,"\n");
-#endif
+ LOG_T(RRC,"\n");
+ } /* LOG_DEBUGFLAG(DEBUG_RRC) */
- return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
- // }
- //else
- //return(0);
+ return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
}
#endif // #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
@@ -370,7 +363,7 @@ void mac_eNB_rrc_ul_failure(const module_id_t Mod_instP,
rntiP,
PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED);
}
-// rrc_mac_remove_ue(Mod_instP,rntiP);
+ rrc_mac_remove_ue(Mod_instP,rntiP);
}
void mac_eNB_rrc_uplane_failure(const module_id_t Mod_instP,
diff --git a/openair2/RRC/LTE/L2_interface_ue.c b/openair2/RRC/LTE/L2_interface_ue.c
index d3527b8a17..3b7219af42 100644
--- a/openair2/RRC/LTE/L2_interface_ue.c
+++ b/openair2/RRC/LTE/L2_interface_ue.c
@@ -42,7 +42,6 @@
#endif
//#define RRC_DATA_REQ_DEBUG
-//#define DEBUG_RRC 1
@@ -61,10 +60,7 @@ mac_rrc_data_req_ue(
//--------------------------------------------------------------------------
{
-#ifdef DEBUG_RRC
- int i;
- LOG_I(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id);
-#endif
+ LOG_D(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id);
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
diff --git a/openair2/RRC/LTE/MESSAGES/asn1_msg.c b/openair2/RRC/LTE/MESSAGES/asn1_msg.c
index 56a3285364..c5fd6ed5fb 100644
--- a/openair2/RRC/LTE/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/LTE/MESSAGES/asn1_msg.c
@@ -91,7 +91,6 @@
#define msg printf
#endif
-//#define XER_PRINT
typedef struct xer_sprint_string_s {
char *string;
@@ -1353,9 +1352,9 @@ uint8_t do_SIB23(uint8_t Mod_id,
}
#endif
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message,
NULL,
(void*)bcch_message,
@@ -1607,9 +1606,9 @@ uint8_t do_SidelinkUEInformation(uint8_t Mod_id, uint8_t *buffer, SL_Destinatio
break;
}
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message,
@@ -2165,9 +2164,9 @@ do_RRCConnectionSetup(
#endif
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
NULL,
(void*)&dl_ccch_msg,
@@ -2240,9 +2239,9 @@ do_SecurityModeCommand(
dl_dcch_msg.message.choice.c1.choice.securityModeCommand.criticalExtensions.choice.c1.choice.securityModeCommand_r8.securityConfigSMC.securityAlgorithmConfig.integrityProtAlgorithm
= (e_SecurityAlgorithmConfig__integrityProtAlgorithm)integrityProtAlgorithm;
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message,
NULL,
(void*)&dl_dcch_msg,
@@ -2320,9 +2319,9 @@ do_UECapabilityEnquiry(
ASN_SEQUENCE_ADD(&dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8.ue_CapabilityRequest.list,
&rat);
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_DL_DCCH_Message, (void*)&dl_dcch_msg);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message,
NULL,
(void*)&dl_dcch_msg,
@@ -2539,9 +2538,9 @@ do_RRCConnectionReconfiguration(
enc_rval.failed_type->name, enc_rval.encoded);
return -1;
}
-#ifdef XER_PRINT
- xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)&dl_dcch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)&dl_dcch_msg);
+ }
#if defined(ENABLE_ITTI)
# if !defined(DISABLE_XER_SPRINT)
@@ -2742,9 +2741,9 @@ do_RRCConnectionReestablishment(
rrcConnectionReestablishment->criticalExtensions.choice.c1.choice.rrcConnectionReestablishment_r8.nonCriticalExtension = NULL;
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
NULL,
(void*)&dl_ccch_msg,
@@ -2804,9 +2803,9 @@ do_RRCConnectionReestablishmentReject(
// RRCConnectionReestablishmentReject
rrcConnectionReestablishmentReject->criticalExtensions.present = RRCConnectionReestablishmentReject__criticalExtensions_PR_rrcConnectionReestablishmentReject_r8;
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
NULL,
(void*)&dl_ccch_msg,
@@ -2867,9 +2866,9 @@ do_RRCConnectionReject(
/* let's put a wait time of 1s for the moment */
rrcConnectionReject->criticalExtensions.choice.c1.choice.rrcConnectionReject_r8.waitTime = 1;
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message,
NULL,
(void*)&dl_ccch_msg,
@@ -3061,9 +3060,9 @@ uint8_t do_MBSFNAreaConfig(uint8_t Mod_id,
*/
ASN_SEQUENCE_ADD(&(*mbsfnAreaConfiguration)->pmch_InfoList_r9.list,pmch_Info_1);
-#ifdef XER_PRINT
- xer_fprint(stdout,&asn_DEF_MCCH_Message,(void*)mcch_message);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout,&asn_DEF_MCCH_Message,(void*)mcch_message);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_MCCH_Message,
NULL,
(void*)mcch_message,
@@ -3339,9 +3338,9 @@ uint8_t do_Paging(uint8_t Mod_id, uint8_t *buffer, ue_paging_identity_t ue_pagin
enc_rval.failed_type->name, enc_rval.encoded);
return -1;
}
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_PCCH_Message, (void*)&pcch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_PCCH_Message, (void*)&pcch_msg);
+ }
return((enc_rval.encoded+7)/8);
}
@@ -3504,9 +3503,9 @@ OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname)
}
UECapability.UE_EUTRA_Capability = UE_EUTRA_Capability;
-#ifdef XER_PRINT
- xer_fprint(stdout,&asn_DEF_UE_EUTRA_Capability,(void *)UE_EUTRA_Capability);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout,&asn_DEF_UE_EUTRA_Capability,(void *)UE_EUTRA_Capability);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_UE_EUTRA_Capability,
NULL,
(void*)UE_EUTRA_Capability,
diff --git a/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c b/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c
index cdfc1ac0f3..20962f3ca1 100644
--- a/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c
+++ b/openair2/RRC/LTE/MESSAGES/asn1_msg_NB_IoT.c
@@ -136,7 +136,7 @@ uint8_t do_MIB_NB_IoT(
carrier->MIB_NB_IoT,
100);
if(enc_rval.encoded <= 0) {
- LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
+ LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
}
@@ -382,9 +382,9 @@ uint8_t do_SIB1_NB_IoT(uint8_t Mod_id, int CC_id,
ASN_SEQUENCE_ADD(&(*sib1_NB_IoT)->systemInfoValueTagList_r13->list,&systemInfoValueTagSI);
-#ifdef XER_PRINT //generate xml files
- xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message_NB,
@@ -394,7 +394,7 @@ uint8_t do_SIB1_NB_IoT(uint8_t Mod_id, int CC_id,
100);
if (enc_rval.encoded > 0){
- LOG_F(RRC,"ASN1 message encoding failed (%s, %lu)!\n",
+ LOG_E(RRC,"ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
}
@@ -667,9 +667,9 @@ uint8_t do_SIB23_NB_IoT(uint8_t Mod_id,
ASN_SEQUENCE_ADD(&bcch_message->message.choice.c1.choice.systemInformation_r13.criticalExtensions.choice.systemInformation_r13.sib_TypeAndInfo_r13.list,
sib3_NB_part);
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message_NB, (void*)bcch_message);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message_NB,
NULL,
(void*)bcch_message,
@@ -887,9 +887,9 @@ uint8_t do_RRCConnectionSetup_NB_IoT(
rrcConnectionSetup_NB_IoT->criticalExtensions.choice.c1.choice.rrcConnectionSetup_r13.radioResourceConfigDedicated_r13.physicalConfigDedicated_r13 = physicalConfigDedicated2_NB_IoT;
rrcConnectionSetup_NB_IoT->criticalExtensions.choice.c1.choice.rrcConnectionSetup_r13.radioResourceConfigDedicated_r13.mac_MainConfig_r13 = NULL;
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_DL_CCCH_Message, (void*)&dl_ccch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB,
NULL,
(void*)&dl_ccch_msg_NB_IoT,
@@ -897,7 +897,7 @@ uint8_t do_RRCConnectionSetup_NB_IoT(
100);
if (enc_rval.encoded <= 0) {
- LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
+ LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
}
@@ -939,16 +939,16 @@ uint8_t do_SecurityModeCommand_NB_IoT(
= (e_SecurityAlgorithmConfig__integrityProtAlgorithm)integrityProtAlgorithm;
//only changed "asn_DEF_DL_DCCH_Message_NB"
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message_NB,
NULL,
(void*)&dl_dcch_msg_NB_IoT,
buffer,
100);
if (enc_rval.encoded <= 0) {
- LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
+ LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
}
@@ -1001,16 +1001,16 @@ uint8_t do_UECapabilityEnquiry_NB_IoT(
//no ue_CapabilityRequest (list of RAT_Type)
//only changed "asn_DEF_DL_DCCH_Message_NB"
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_DL_DCCH_Message_NB, (void*)&dl_dcch_msg_NB_IoT);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_DCCH_Message_NB,
NULL,
(void*)&dl_dcch_msg_NB_IoT,
buffer,
100);
if (enc_rval.encoded <= 0) {
- LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
+ LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
}
@@ -1105,14 +1105,14 @@ uint16_t do_RRCConnectionReconfiguration_NB_IoT(
buffer,
RRC_BUF_SIZE);
if (enc_rval.encoded <= 0) {
- LOG_F(RRC, "ASN1 message encoding failed %s, %li\n",
+ LOG_E(RRC, "ASN1 message encoding failed %s, %li\n",
enc_rval.failed_type->name, enc_rval.encoded);
}
//changed only asn_DEF_DL_DCCH_Message_NB
-#ifdef XER_PRINT
- xer_fprint(stdout,&asn_DEF_DL_DCCH_Message_NB,(void*)&dl_dcch_msg_NB_IoT);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout,&asn_DEF_DL_DCCH_Message_NB,(void*)&dl_dcch_msg_NB_IoT);
+ }
//#if defined(ENABLE_ITTI)
//# if !defined(DISABLE_XER_SPRINT)...
@@ -1143,16 +1143,16 @@ uint8_t do_RRCConnectionReestablishmentReject_NB_IoT(
rrcConnectionReestablishmentReject->criticalExtensions.present = RRCConnectionReestablishmentReject__criticalExtensions_PR_rrcConnectionReestablishmentReject_r8;
//Only change in "asn_DEF_DL_CCCH_Message_NB"
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB,
NULL,
(void*)&dl_ccch_msg_NB_IoT,
buffer,
100);
if (enc_rval.encoded <= 0) {
- LOG_F(RRC,"ASN1 message encoding failed (%s, %lu)!\n",
+ LOG_E(RRC,"ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
}
@@ -1214,16 +1214,16 @@ uint8_t do_RRCConnectionReject_NB_IoT(
RRCConnectionReject_NB_r13_IEs__rrc_SuspendIndication_r13_true;
//Only Modified "asn_DEF_DL_CCCH_Message_NB"
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_DL_CCCH_Message_NB, (void*)&dl_ccch_msg_NB_IoT);
+ }
enc_rval = uper_encode_to_buffer(&asn_DEF_DL_CCCH_Message_NB,
NULL,
(void*)&dl_ccch_msg_NB_IoT,
buffer,
100);
if (enc_rval.encoded <= 0) {
- LOG_F(RRC, "ASN1 message encoding failed (%s, %ld)!\n",
+ LOG_E(RRC, "ASN1 message encoding failed (%s, %ld)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
}
@@ -1351,13 +1351,13 @@ uint8_t do_RRCConnectionReestablishment_NB_IoT(
RRC_BUF_SIZE);
if (enc_rval.encoded <= 0) {
- LOG_F(RRC, "ASN1 message encoding failed (%s, %li)!\n",
+ LOG_E(RRC, "ASN1 message encoding failed (%s, %li)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
}
-#ifdef XER_PRINT
- xer_fprint(stdout,&asn_DEF_DL_CCCH_Message_NB,(void*)&dl_ccch_msg_NB_IoT);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout,&asn_DEF_DL_CCCH_Message_NB,(void*)&dl_ccch_msg_NB_IoT);
+ }
#if defined(ENABLE_ITTI)
# if !defined(DISABLE_XER_SPRINT)
diff --git a/openair2/RRC/LTE/rrc_UE.c b/openair2/RRC/LTE/rrc_UE.c
index c23bf12d52..b111f77871 100644
--- a/openair2/RRC/LTE/rrc_UE.c
+++ b/openair2/RRC/LTE/rrc_UE.c
@@ -99,10 +99,6 @@ int send_ue_information = 0;
// for malloc_clear
#include "PHY/defs_UE.h"
-//#define XER_PRINT
-
-
-
extern void pdcp_config_set_security(
const protocol_ctxt_t* const ctxt_pP,
pdcp_t * const pdcp_pP,
@@ -733,9 +729,9 @@ int rrc_ue_decode_ccch( const protocol_ctxt_t* const ctxt_pP, const SRB_INFO* co
(uint8_t*)Srb_info->Rx_buffer.Payload,
100,0,0);
-#ifdef XER_PRINT
- xer_fprint(stdout,&asn_DEF_DL_CCCH_Message,(void*)dl_ccch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout,&asn_DEF_DL_CCCH_Message,(void*)dl_ccch_msg);
+ }
#if defined(ENABLE_ITTI)
# if defined(DISABLE_ITTI_XER_PRINT)
@@ -1931,9 +1927,9 @@ rrc_ue_process_securityModeCommand(
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
+ }
#if defined(ENABLE_ITTI)
# if !defined(DISABLE_XER_SPRINT)
@@ -2042,9 +2038,9 @@ rrc_ue_process_ueCapabilityEnquiry(
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg);
+ }
#if defined(ENABLE_ITTI)
# if !defined(DISABLE_XER_SPRINT)
@@ -2429,9 +2425,9 @@ rrc_ue_decode_dcch(
(uint8_t*)Buffer,
RRC_BUF_SIZE,0,0);
-#ifdef XER_PRINT
- xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)dl_dcch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)dl_dcch_msg);
+ }
#if defined(ENABLE_ITTI)
# if defined(DISABLE_ITTI_XER_PRINT)
@@ -4560,9 +4556,9 @@ int decode_MCCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB
return -1;
}
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_MCCH_Message, (void*)mcch);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_MCCH_Message, (void*)mcch);
+ }
if (mcch->message.present == MCCH_MessageType_PR_c1) {
LOG_D(RRC,"[UE %d] Found mcch message \n",
@@ -4594,10 +4590,30 @@ int decode_MCCH_Message( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB
//-----------------------------------------------------------------------------
void decode_MBSFNAreaConfiguration( module_id_t ue_mod_idP, uint8_t eNB_index, frame_t frameP, uint8_t mbsfn_sync_area )
{
+ uint8_t i;
protocol_ctxt_t ctxt;
LOG_I(RRC,"[UE %d] Frame %d : Number of MCH(s) in the MBSFN Sync Area %d is %d\n",
ue_mod_idP, frameP, mbsfn_sync_area, UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->pmch_InfoList_r9.list.count);
+
+ // Configure commonSF_Alloc
+ for(i=0; i< UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.count;i++){
+ LOG_W(RRC,"[UE %d] Frame %d, commonSF_Alloc_r9: radioframeAllocationPeriod(%ldn),radioframeAllocationOffset(%ld), subframeAllocation(%x,%x,%x)\n",
+ ue_mod_idP, frameP,
+ UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->radioframeAllocationPeriod<<1,
+ UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->radioframeAllocationOffset,
+ UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->subframeAllocation.choice.oneFrame.buf[0],
+ UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->subframeAllocation.choice.oneFrame.buf[1],
+ UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i]->subframeAllocation.choice.oneFrame.buf[2]);
+ UE_mac_inst[ue_mod_idP].commonSF_Alloc_r9_mbsfn_SubframeConfig[i] = UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_Alloc_r9.list.array[i];
+ }
+ LOG_W(RRC,"[UE %d] Frame %d, commonSF_AllocPeriod_r9 %drf \n",
+ ue_mod_idP, frameP,
+ 4<commonSF_AllocPeriod_r9);
+
+ // Configure commonSF_AllocPeriod
+ UE_mac_inst[ue_mod_idP].commonSF_AllocPeriod_r9 = UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->commonSF_AllocPeriod_r9;
+
// store to MAC/PHY necessary parameters for receiving MTCHs
rrc_mac_config_req_ue(ue_mod_idP,0,eNB_index,
@@ -5558,9 +5574,9 @@ void *rrc_control_socket_thread_fct(void *arg)
//process the message
switch (sl_ctrl_msg_recv->type) {
case SESSION_INIT_REQ:
-LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
- LOG_UI(RRC,"Received SessionInitializationRequest on socket from ProSe App (msg type: %d)\n", sl_ctrl_msg_recv->type);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
+ LOG_UI(RRC,"Received SessionInitializationRequest on socket from ProSe App (msg type: %d)\n", sl_ctrl_msg_recv->type);
+ }
//TODO: get SL_UE_STATE from lower layer
LOG_I(RRC,"Send UEStateInformation to ProSe App \n");
@@ -5579,12 +5595,12 @@ LOG_DEBUG_END
exit(EXIT_FAILURE);
}
-LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
- struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
- ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
- LOG_UI(RRC,"[UEStateInformation] msg type: %d\n",ptr_ctrl_msg->type);
- LOG_UI(RRC,"[UEStateInformation] UE state: %d\n",ptr_ctrl_msg->sidelinkPrimitive.ue_state);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
+ struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
+ ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
+ LOG_UI(RRC,"[UEStateInformation] msg type: %d\n",ptr_ctrl_msg->type);
+ LOG_UI(RRC,"[UEStateInformation] UE state: %d\n",ptr_ctrl_msg->sidelinkPrimitive.ue_state);
+ }
/* if (enable_notification > 0) {
//create thread to send status notification (for testing purpose, status notification will be sent e.g., every 20 seconds)
pthread_t notification_thread;
@@ -5599,12 +5615,12 @@ LOG_DEBUG_END
sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id;
groupL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id;
-LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
- LOG_UI(RRC,"[GroupCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
- LOG_UI(RRC,"[GroupCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id);
- LOG_UI(RRC,"[GroupCommunicationEstablishReq] group Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id);
- LOG_UI(RRC,"[GroupCommunicationEstablishReq] group IP Address: " IPV4_ADDR "\n",IPV4_ADDR_FORMAT(sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupIpAddress));
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
+ LOG_UI(RRC,"[GroupCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
+ LOG_UI(RRC,"[GroupCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id);
+ LOG_UI(RRC,"[GroupCommunicationEstablishReq] group Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id);
+ LOG_UI(RRC,"[GroupCommunicationEstablishReq] group IP Address: " IPV4_ADDR "\n",IPV4_ADDR_FORMAT(sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupIpAddress));
+ }
//store sourceL2Id/groupL2Id
UE_rrc_inst[module_id].sourceL2Id = sourceL2Id;
@@ -5764,20 +5780,20 @@ LOG_DEBUG_END
exit(EXIT_FAILURE);
}
-LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
- struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
- ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
- LOG_UI(RRC,"[GroupCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type);
- LOG_UI(RRC,"[GroupCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
+ struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
+ ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
+ LOG_UI(RRC,"[GroupCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type);
+ LOG_UI(RRC,"[GroupCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id);
+ }
break;
case GROUP_COMMUNICATION_RELEASE_REQ:
printf("-----------------------------------\n");
-LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
- LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
- LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Slrb Id: %i\n",sl_ctrl_msg_recv->sidelinkPrimitive.slrb_id);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
+ LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
+ LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Slrb Id: %i\n",sl_ctrl_msg_recv->sidelinkPrimitive.slrb_id);
+ }
//reset groupL2ID from MAC LAYER
UE_rrc_inst[module_id].groupL2Id = 0x00000000;
sourceL2Id = UE_rrc_inst[module_id].sourceL2Id;
@@ -5849,11 +5865,11 @@ LOG_DEBUG_END
sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.direct_comm_establish_req.sourceL2Id;
destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.direct_comm_establish_req.destinationL2Id;
-LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
- LOG_UI(RRC,"[DirectCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
- LOG_UI(RRC,"[DirectCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id);
- LOG_UI(RRC,"[DirectCommunicationEstablishReq] destination Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
+ LOG_UI(RRC,"[DirectCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
+ LOG_UI(RRC,"[DirectCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id);
+ LOG_UI(RRC,"[DirectCommunicationEstablishReq] destination Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id);
+ }
//store sourceL2Id/destinationL2Id
UE_rrc_inst[module_id].sourceL2Id = sourceL2Id;
@@ -6013,27 +6029,27 @@ LOG_DEBUG_END
}
-LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
- struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
- ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
- LOG_UI(RRC,"[DirectCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type);
- LOG_UI(RRC,"[DirectCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
+ struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
+ ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
+ LOG_UI(RRC,"[DirectCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type);
+ LOG_UI(RRC,"[DirectCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id);
+ }
break;
case PC5S_ESTABLISH_REQ:
- type = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type;
- sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id;
-LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
- LOG_UI(RRC,"[PC5EstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
- LOG_UI(RRC,"[PC5EstablishReq] type: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type); //RX/TX
- LOG_UI(RRC,"[PC5EstablishReq] source Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id);
-LOG_DEBUG_END
+ type = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type;
+ sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id;
+ if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
+ LOG_UI(RRC,"[PC5EstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
+ LOG_UI(RRC,"[PC5EstablishReq] type: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type); //RX/TX
+ LOG_UI(RRC,"[PC5EstablishReq] source Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id);
+ }
if (type > 0) {
destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id;
-LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
- LOG_UI(RRC,"[PC5EstablishReq] destination Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id);
-LOG_DEBUG_END
+ if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
+ LOG_UI(RRC,"[PC5EstablishReq] destination Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id);
+ }
}
//store sourceL2Id/destinationL2Id
@@ -6244,9 +6260,9 @@ LOG_DEBUG_END
case PC5_DISCOVERY_MESSAGE:
-LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET)
+ if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
LOG_UI(RRC,"[PC5DiscoveryMessage] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
-LOG_DEBUG_END
+ }
//prepare SL_Discovery buffer
if (UE_rrc_inst) {
memcpy((void*)&UE_rrc_inst[module_id].SL_Discovery[0].Tx_buffer.Payload[0], (void*)&sl_ctrl_msg_recv->sidelinkPrimitive.pc5_discovery_message.payload[0], PC5_DISCOVERY_PAYLOAD_SIZE);
diff --git a/openair2/RRC/LTE/rrc_common.c b/openair2/RRC/LTE/rrc_common.c
index d18c43d6cf..cf0196441e 100644
--- a/openair2/RRC/LTE/rrc_common.c
+++ b/openair2/RRC/LTE/rrc_common.c
@@ -43,7 +43,6 @@
#include "rrc_eNB_UE_context.h"
#include "common/ran_context.h"
-#define DEBUG_RRC 1
extern RAN_CONTEXT_t RC;
extern UE_MAC_INST *UE_mac_inst;
diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c
index 8b06950292..8dcff3bf57 100644
--- a/openair2/RRC/LTE/rrc_eNB.c
+++ b/openair2/RRC/LTE/rrc_eNB.c
@@ -85,6 +85,8 @@
# else
# include "../../S1AP/s1ap_eNB.h"
# endif
+#else
+# define EPC_MODE_ENABLED 0
#endif
#include "pdcp.h"
@@ -100,7 +102,6 @@
#include "SIMULATION/TOOLS/sim.h" // for taus
-//#define XER_PRINT
extern RAN_CONTEXT_t RC;
@@ -904,11 +905,6 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s*
protocol_ctxt_t ctxt;
-#if !defined(ENABLE_USE_MME)
- module_id_t ue_module_id;
- /* avoid gcc warnings */
- (void)ue_module_id;
-#endif
rnti_t rnti = ue_context_pP->ue_context.rnti;
if (enb_mod_idP >= NB_eNB_INST) {
LOG_I(RRC, "eNB inst invalid (%d/%d) for UE %x!\n",enb_mod_idP, NB_eNB_INST,rnti);
@@ -923,20 +919,21 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s*
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, enb_mod_idP, ENB_FLAG_YES, rnti, 0, 0,enb_mod_idP);
LOG_W(RRC, "[eNB %d] Removing UE RNTI %x\n", enb_mod_idP, rnti);
-#if defined(ENABLE_USE_MME)
- if((ue_context_pP->ue_context.ul_failure_timer >= 20000) &&
- (mac_eNB_get_rrc_status(enb_mod_idP,rnti) >= RRC_CONNECTED)) {
- LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ RNTI %x\n", enb_mod_idP, rnti);
- rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_context_pP, S1AP_CAUSE_RADIO_NETWORK, 21); // send cause 21: connection with ue lost
- /* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered)
- * If the E-UTRAN internal reason is a radio link failure detected in the eNB, the eNB shall wait a sufficient time before
- * triggering the S1 UE Context Release Request procedure
- * in order to allow the UE to perform the NAS recovery
- * procedure, see TS 23.401 [17].
- */
- return;
+ if(EPC_MODE_ENABLED) {
+
+ if((ue_context_pP->ue_context.ul_failure_timer >= 20000) &&
+ (mac_eNB_get_rrc_status(enb_mod_idP,rnti) >= RRC_CONNECTED)) {
+ LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ RNTI %x\n", enb_mod_idP, rnti);
+ rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_context_pP, S1AP_CAUSE_RADIO_NETWORK, 21); // send cause 21: connection with ue lost
+ /* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered)
+ * If the E-UTRAN internal reason is a radio link failure detected in the eNB, the eNB shall wait a sufficient time before
+ * triggering the S1 UE Context Release Request procedure
+ * in order to allow the UE to perform the NAS recovery
+ * procedure, see TS 23.401 [17].
+ */
+ return;
}
-#endif
+ }
// add UE info to freeList
LOG_I(RRC, "put UE %x into freeList\n", rnti);
put_UE_in_freelist(enb_mod_idP, rnti, 1);
@@ -1083,17 +1080,13 @@ rrc_eNB_process_RRCConnectionSetupComplete(
T(T_ENB_RRC_CONNECTION_SETUP_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
-#if defined(ENABLE_USE_MME)
-
if (EPC_MODE_ENABLED == 1) {
// Forward message to S1AP layer
rrc_eNB_send_S1AP_NAS_FIRST_REQ(
ctxt_pP,
ue_context_pP,
rrcConnectionSetupComplete);
- } else
-#endif
- {
+ } else {
// RRC loop back (no S1AP), send SecurityModeCommand to UE
rrc_eNB_generate_SecurityModeCommand(
ctxt_pP,
@@ -1123,16 +1116,8 @@ rrc_eNB_generate_SecurityModeCommand(
ue_context_pP->ue_context.ciphering_algorithm,
ue_context_pP->ue_context.integrity_algorithm);
-#ifdef RRC_MSG_PRINT
- uint16_t i=0;
- LOG_F(RRC,"[MSG] RRC Security Mode Command\n");
- for (i = 0; i < size; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
- }
-
- LOG_F(RRC,"\n");
-#endif
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,"[MSG] RRC Security Mode Command\n");
LOG_I(RRC,
PROTOCOL_RRC_CTXT_UE_FMT" Logical Channel DL-DCCH, Generate SecurityModeCommand (bytes %d)\n",
@@ -1231,9 +1216,6 @@ rrc_eNB_generate_RRCConnectionReject(
)
//-----------------------------------------------------------------------------
{
-#ifdef RRC_MSG_PRINT
- int cnt;
-#endif
T(T_ENB_RRC_CONNECTION_REJECT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
@@ -1242,15 +1224,10 @@ rrc_eNB_generate_RRCConnectionReject(
do_RRCConnectionReject(ctxt_pP->module_id,
(uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload);
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRCConnectionReject\n");
-
- for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->Srb0.Tx_buffer.Payload)[cnt]);
- }
-
- LOG_F(RRC,"\n");
-#endif
+ LOG_DUMPMSG(RRC,DEBUG_RRC,
+ (char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload),
+ RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
+ "[MSG] RRCConnectionReject\n");
MSC_LOG_TX_MESSAGE(
MSC_RRC_ENB,
@@ -1295,17 +1272,11 @@ rrc_eNB_generate_RRCConnectionReestablishment(
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
SRB_configList,
&ue_context_pP->ue_context.physicalConfigDedicated);
-
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRCConnectionReestablishment\n");
-
- for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload)[cnt]);
- }
-
- LOG_F(RRC,"\n");
-#endif
-
+ LOG_DUMPMSG(RRC,DEBUG_RRC,
+ (char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload),
+ RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
+ "[MSG] RRCConnectionReestablishment\n"
+ );
// configure SRB1 for UE
if (*SRB_configList != NULL) {
@@ -1421,10 +1392,6 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
struct SRB_ToAddMod *SRB2_config = NULL;
struct DRB_ToAddMod *DRB_config = NULL;
int i = 0;
-# if defined(ENABLE_USE_MME)
- int j = 0;
- hashtable_rc_t h_rc;
-#endif
uint8_t buffer[RRC_BUF_SIZE];
uint16_t size;
MeasObjectToAddModList_t *MeasObj_list = NULL;
@@ -1515,59 +1482,61 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
ue_context_pP->ue_context.Srb1.Active = 1;
//ue_context_pP->ue_context.Srb2.Srb_info.Srb_id = 2;
-# if defined(ENABLE_USE_MME)
- rrc_ue_s1ap_ids_t* rrc_ue_s1ap_ids_p = NULL;
- uint16_t ue_initial_id = ue_context_pP->ue_context.ue_initial_id;
- uint32_t eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id;
- eNB_RRC_INST *rrc_instance_p = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)];
- if (eNB_ue_s1ap_id > 0) {
- h_rc = hashtable_get(rrc_instance_p->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id, (void**)&rrc_ue_s1ap_ids_p);
- if (h_rc == HASH_TABLE_OK) {
- rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti;
+#if defined(ENABLE_USE_MME)
+ hashtable_rc_t h_rc;
+ int j;
+ rrc_ue_s1ap_ids_t* rrc_ue_s1ap_ids_p = NULL;
+ uint16_t ue_initial_id = ue_context_pP->ue_context.ue_initial_id;
+ uint32_t eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id;
+ eNB_RRC_INST *rrc_instance_p = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)];
+ if (eNB_ue_s1ap_id > 0) {
+ h_rc = hashtable_get(rrc_instance_p->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id, (void**)&rrc_ue_s1ap_ids_p);
+ if (h_rc == HASH_TABLE_OK) {
+ rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti;
+ }
}
- }
- if (ue_initial_id != 0) {
- h_rc = hashtable_get(rrc_instance_p->initial_id2_s1ap_ids, (hash_key_t)ue_initial_id, (void**)&rrc_ue_s1ap_ids_p);
- if (h_rc == HASH_TABLE_OK) {
- rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti;
+ if (ue_initial_id != 0) {
+ h_rc = hashtable_get(rrc_instance_p->initial_id2_s1ap_ids, (hash_key_t)ue_initial_id, (void**)&rrc_ue_s1ap_ids_p);
+ if (h_rc == HASH_TABLE_OK) {
+ rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti;
+ }
}
- }
- gtpv1u_enb_create_tunnel_req_t create_tunnel_req;
+ gtpv1u_enb_create_tunnel_req_t create_tunnel_req;
- /* Save e RAB information for later */
- memset(&create_tunnel_req, 0 , sizeof(create_tunnel_req));
+ /* Save e RAB information for later */
+ memset(&create_tunnel_req, 0 , sizeof(create_tunnel_req));
- for (j = 0, i = 0; i < NB_RB_MAX; i++) {
- if (ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_ESTABLISHED || ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_DONE) {
- create_tunnel_req.eps_bearer_id[j] = ue_context_pP->ue_context.e_rab[i].param.e_rab_id;
- create_tunnel_req.sgw_S1u_teid[j] = ue_context_pP->ue_context.e_rab[i].param.gtp_teid;
+ for ( j = 0, i = 0; i < NB_RB_MAX; i++) {
+ if (ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_ESTABLISHED || ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_DONE) {
+ create_tunnel_req.eps_bearer_id[j] = ue_context_pP->ue_context.e_rab[i].param.e_rab_id;
+ create_tunnel_req.sgw_S1u_teid[j] = ue_context_pP->ue_context.e_rab[i].param.gtp_teid;
- memcpy(&create_tunnel_req.sgw_addr[j],
- &ue_context_pP->ue_context.e_rab[i].param.sgw_addr,
- sizeof(transport_layer_addr_t));
- j++;
+ memcpy(&create_tunnel_req.sgw_addr[j],
+ &ue_context_pP->ue_context.e_rab[i].param.sgw_addr,
+ sizeof(transport_layer_addr_t));
+ j++;
+ }
}
- }
- create_tunnel_req.rnti = ctxt_pP->rnti; // warning put zero above
- create_tunnel_req.num_tunnels = j;
+ create_tunnel_req.rnti = ctxt_pP->rnti; // warning put zero above
+ create_tunnel_req.num_tunnels = j;
- gtpv1u_update_s1u_tunnel(
- ctxt_pP->instance,
- &create_tunnel_req,
- reestablish_rnti);
+ gtpv1u_update_s1u_tunnel(
+ ctxt_pP->instance,
+ &create_tunnel_req,
+ reestablish_rnti);
#endif
/* Update RNTI in ue_context */
ue_context_pP->ue_id_rnti = ctxt_pP->rnti; // here ue_id_rnti is just a key, may be something else
ue_context_pP->ue_context.rnti = ctxt_pP->rnti;
-# if defined(ENABLE_USE_MME)
- uint8_t send_security_mode_command = FALSE;
- rrc_pdcp_config_security(
- ctxt_pP,
- ue_context_pP,
- send_security_mode_command);
- LOG_D(RRC, "set security successfully \n");
+#if defined(ENABLE_USE_MME)
+ uint8_t send_security_mode_command = FALSE;
+ rrc_pdcp_config_security(
+ ctxt_pP,
+ ue_context_pP,
+ send_security_mode_command);
+ LOG_D(RRC, "set security successfully \n");
#endif
// Measurement ID list
MeasId_list = CALLOC(1, sizeof(*MeasId_list));
@@ -1934,15 +1903,9 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
, (SCellToAddMod_r10_t*)NULL
#endif
);
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,
+ "[MSG] RRC Connection Reconfiguration\n");
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n");
- for (i = 0; i < size; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
- }
- LOG_F(RRC,"\n");
- ////////////////////////////////////////
-#endif
#if defined(ENABLE_ITTI)
@@ -2042,9 +2005,6 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject(
)
//-----------------------------------------------------------------------------
{
-#ifdef RRC_MSG_PRINT
- int cnt;
-#endif
int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti);
if(UE_id != -1){
RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1;
@@ -2062,15 +2022,11 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject(
do_RRCConnectionReestablishmentReject(ctxt_pP->module_id,
(uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload);
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRCConnectionReestablishmentReject\n");
+ LOG_DUMPMSG(RRC,DEBUG_RRC,
+ (char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload),
+ RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
+ "[MSG] RRCConnectionReestablishmentReject\n");
- for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload)[cnt]);
- }
-
- LOG_F(RRC,"\n");
-#endif
MSC_LOG_TX_MESSAGE(
MSC_RRC_ENB,
@@ -2401,15 +2357,8 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* co
#endif
);
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,"[MSG] RRC Connection Reconfiguration\n");
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n");
- for (i = 0; i < size; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
- }
- LOG_F(RRC,"\n");
- ////////////////////////////////////////
-#endif
#if defined(ENABLE_ITTI)
@@ -2671,15 +2620,8 @@ rrc_eNB_modify_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* cons
#endif
);
-
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n");
- for (i = 0; i < size; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
- }
- LOG_F(RRC,"\n");
- ////////////////////////////////////////
-#endif
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,
+ "[MSG] RRC Connection Reconfiguration\n");
#if defined(ENABLE_ITTI)
@@ -2796,15 +2738,8 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration_release( const protocol_
#endif
);
ue_context_pP->ue_context.e_rab_release_command_flag = 1;
-
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n");
- for (i = 0; i < size; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
- }
- LOG_F(RRC,"\n");
- ////////////////////////////////////////
-#endif
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,
+ "[MSG] RRC Connection Reconfiguration\n");
#if defined(ENABLE_ITTI)
/* Free all NAS PDUs */
@@ -3525,15 +3460,8 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons
, (SCellToAddMod_r10_t*)NULL
#endif
);
-
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n");
- for (i = 0; i < size; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
- }
- LOG_F(RRC,"\n");
- ////////////////////////////////////////
-#endif
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,
+ "[MSG] RRC Connection Reconfiguration\n");
#if defined(ENABLE_ITTI)
@@ -4117,15 +4045,8 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
, (SCellToAddMod_r10_t*)NULL
#endif
);
-
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n");
- for (i = 0; i < size; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
- }
- LOG_F(RRC,"\n");
- ////////////////////////////////////////
-#endif
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,
+ "[MSG] RRC Connection Reconfiguration\n");
#if defined(ENABLE_ITTI)
@@ -5503,11 +5424,9 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
#ifdef PDCP_USE_NETLINK
int oip_ifup = 0;
int dest_ip_offset = 0;
- module_id_t ue_module_id = -1;
/* avoid gcc warnings */
(void)oip_ifup;
(void)dest_ip_offset;
- (void)ue_module_id;
#endif
uint8_t *kRRCenc = NULL;
@@ -5650,6 +5569,7 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
ctxt_pP->module_id + 1); // fourth octet
if (oip_ifup == 0) { // interface is up --> send a config the DRB
+ module_id_t ue_module_id;
dest_ip_offset = 8;
LOG_I(OIP,
"[eNB %d] Config the oai%d to send/receive pkt on DRB %ld to/from the protocol stack\n",
@@ -5819,16 +5739,10 @@ rrc_eNB_generate_RRCConnectionSetup(
SRB_configList,
&ue_context_pP->ue_context.physicalConfigDedicated);
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Connection Setup\n");
-
- for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->Srb0.Tx_buffer.Payload)[cnt]);
- }
-
- LOG_F(RRC,"\n");
- //////////////////////////////////
-#endif
+ LOG_DUMPMSG(RRC,DEBUG_RRC,
+ (char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload),
+ RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
+ "[MSG] RRC Connection Setup\n");
// configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE
@@ -6183,15 +6097,10 @@ rrc_eNB_decode_ccch(
T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Connection Reestablishment Request\n");
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)(Srb_info->Rx_buffer.Payload),
+ Srb_info->Rx_buffer.payload_size,
+ "[MSG] RRC Connection Reestablishment Request\n");
- for (i = 0; i < Srb_info->Rx_buffer.payload_size; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)Srb_info->Rx_buffer.Payload)[i]);
- }
-
- LOG_F(RRC,"\n");
-#endif
LOG_D(RRC,
PROTOCOL_RRC_CTXT_UE_FMT"MAC_eNB--- MAC_DATA_IND (rrcConnectionReestablishmentRequest on SRB0) --> RRC_eNB\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
@@ -6408,15 +6317,10 @@ rrc_eNB_decode_ccch(
T(T_ENB_RRC_CONNECTION_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Connection Request\n");
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)(Srb_info->Rx_buffer.Payload),
+ Srb_info->Rx_buffer.payload_size,
+ "[MSG] RRC Connection Request\n");
- for (i = 0; i < Srb_info->Rx_buffer.payload_size; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)Srb_info->Rx_buffer.Payload)[i]);
- }
-
- LOG_F(RRC,"\n");
-#endif
LOG_D(RRC,
PROTOCOL_RRC_CTXT_UE_FMT"MAC_eNB --- MAC_DATA_IND (rrcConnectionRequest on SRB0) --> RRC_eNB\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
@@ -6704,36 +6608,7 @@ rrc_eNB_decode_dcch(
sdu_sizeP,
0,
0);
- /*
-#if defined(ENABLE_ITTI)
-# if defined(DISABLE_ITTI_XER_PRINT)
- {
- MessageDef *message_p;
- message_p = itti_alloc_new_message(TASK_RRC_ENB, RRC_UL_DCCH_MESSAGE);
- memcpy(&message_p->ittiMsg, (void *)ul_dcch_msg, sizeof(RrcUlDcchMessage));
-
- itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, message_p);
- }
-# else
- {
- char message_string[10000];
- size_t message_string_size;
-
- if ((message_string_size =
- xer_sprint(message_string, sizeof(message_string), &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg)) >= 0) {
- MessageDef *msg_p;
-
- msg_p = itti_alloc_new_message_sized(TASK_RRC_ENB, RRC_UL_DCCH, message_string_size + sizeof(IttiMsgText));
- msg_p->ittiMsg.rrc_ul_dcch.size = message_string_size;
- memcpy(&msg_p->ittiMsg.rrc_ul_dcch.text, message_string, message_string_size);
-
- itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, msg_p);
- }
- }
-# endif
-#endif
- */
{
for (i = 0; i < sdu_sizeP; i++) {
LOG_T(RRC, "%x.", Rx_sdu[i]);
@@ -6787,15 +6662,9 @@ rrc_eNB_decode_dcch(
LOG_I(RRC, "Processing RRCConnectionReconfigurationComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti);
break;
}
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Connection Reconfiguration Complete\n");
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)(Rx_sdu),sdu_sizeP,
+ "[MSG] RRC Connection Reconfiguration Complete\n");
- for (i = 0; i < sdu_sizeP; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
- }
-
- LOG_F(RRC,"\n");
-#endif
MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB,
MSC_RRC_UE,
@@ -6818,42 +6687,42 @@ rrc_eNB_decode_dcch(
RRCConnectionReconfigurationComplete__criticalExtensions_PR_rrcConnectionReconfigurationComplete_r8) {
/*NN: revise the condition */
/*FK: left the condition as is for the case MME is used (S1 mode) but setting dedicated_DRB = 1 otherwise (noS1 mode) so that no second RRCReconfiguration message activationg more DRB is sent as this causes problems with the nasmesh driver.*/
-#if defined(ENABLE_USE_MME)
- if (ue_context_p->ue_context.Status == RRC_RECONFIGURED){
- dedicated_DRB = 1;
- LOG_I(RRC,
- PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n",
- PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
- //clear
- int16_t UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti);
- if(UE_id == -1){
- LOG_E(RRC,
- PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReconfigurationComplete without rnti %x, fault\n",
- PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ctxt_pP->rnti);
- break;
- }
- if(RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag == 1){
- LOG_I(RRC,
- PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld) C-RNTI Complete\n",
- PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
- dedicated_DRB = 2;
- RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag = 0;
- }
- } else {
- dedicated_DRB = 0;
- ue_context_p->ue_context.Status = RRC_RECONFIGURED;
- LOG_I(RRC,
- PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (default DRB, xid %ld)\n",
- PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
- }
- ue_context_p->ue_context.reestablishment_xid = -1;
-#else
- dedicated_DRB = 1;
- ue_context_p->ue_context.Status = RRC_RECONFIGURED;
- LOG_I(RRC,
- PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n",
- PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
-#endif
+ if (EPC_MODE_ENABLED) {
+ if (ue_context_p->ue_context.Status == RRC_RECONFIGURED){
+ dedicated_DRB = 1;
+ LOG_I(RRC,
+ PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n",
+ PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
+ //clear
+ int16_t UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti);
+ if(UE_id == -1){
+ LOG_E(RRC,
+ PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReconfigurationComplete without rnti %x, fault\n",
+ PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ctxt_pP->rnti);
+ break;
+ }
+ if(RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag == 1){
+ LOG_I(RRC,
+ PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld) C-RNTI Complete\n",
+ PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
+ dedicated_DRB = 2;
+ RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag = 0;
+ }
+ } else {
+ dedicated_DRB = 0;
+ ue_context_p->ue_context.Status = RRC_RECONFIGURED;
+ LOG_I(RRC,
+ PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (default DRB, xid %ld)\n",
+ PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
+ }
+ ue_context_p->ue_context.reestablishment_xid = -1;
+ } else {
+ dedicated_DRB = 1;
+ ue_context_p->ue_context.Status = RRC_RECONFIGURED;
+ LOG_I(RRC,
+ PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n",
+ PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
+ }
rrc_eNB_process_RRCConnectionReconfigurationComplete(
ctxt_pP,
@@ -6868,8 +6737,7 @@ rrc_eNB_decode_dcch(
}
}
#if defined(ENABLE_ITTI)
-# if defined(ENABLE_USE_MME)
- if (EPC_MODE_ENABLED == 1) {
+#if defined(ENABLE_USE_MME)
if (dedicated_DRB == 1){
// rrc_eNB_send_S1AP_E_RAB_SETUP_RESP(ctxt_pP,
// ue_context_p,
@@ -6934,14 +6802,12 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
}
}
}
- }
+#endif
#else // establish a dedicated bearer
if (dedicated_DRB == 0 ) {
// ue_context_p->ue_context.e_rab[0].status = E_RAB_STATUS_ESTABLISHED;
rrc_eNB_reconfigure_DRBs(ctxt_pP,ue_context_p);
}
-
-#endif
#endif
break;
@@ -6949,15 +6815,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Connection Reestablishment Complete\n");
-
- for (i = 0; i < sdu_sizeP; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
- }
-
- LOG_F(RRC,"\n");
-#endif
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
+ "[MSG] RRC Connection Reestablishment Complete\n");
MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB,
@@ -7036,15 +6895,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
LOG_I(RRC, "Processing RRCConnectionSetupComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti);
break;
}
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Connection SetupComplete\n");
-
- for (i = 0; i < sdu_sizeP; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
- }
-
- LOG_F(RRC,"\n");
-#endif
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
+ "[MSG] RRC Connection SetupComplete\n");
MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB,
@@ -7096,15 +6948,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
LOG_I(RRC, "Processing securityModeComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti);
break;
}
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Security Mode Complete\n");
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
+ "[MSG] RRC Security Mode Complete\n");
- for (i = 0; i < sdu_sizeP; i++) eNB->pusch_vars[UE_id]{
- LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
- }
-
- LOG_F(RRC,"\n");
-#endif
MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB,
@@ -7126,9 +6972,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
DCCH,
sdu_sizeP);
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg);
+ }
// confirm with PDCP about the security mode for DCCH
//rrc_pdcp_config_req (enb_mod_idP, frameP, 1,CONFIG_ACTION_SET_SECURITY_MODE, (ue_mod_idP * NB_RB_MAX) + DCCH, 0x77);
// continue the procedure
@@ -7141,15 +6987,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
T(T_ENB_RRC_SECURITY_MODE_FAILURE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC Security Mode Failure\n");
-
- for (i = 0; i < sdu_sizeP; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
- }
-
- LOG_F(RRC,"\n");
-#endif
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
+ "[MSG] RRC Security Mode Failure\n");
MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB,
@@ -7167,9 +7006,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
DCCH,
sdu_sizeP);
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg);
+ }
// cancel the security mode in PDCP
// followup with the remaining procedure
@@ -7185,15 +7024,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
LOG_I(RRC, "Processing ueCapabilityInformation UE %x, ue_context_p is NULL\n", ctxt_pP->rnti);
break;
}
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC UECapablility Information \n");
- for (i = 0; i < sdu_sizeP; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
- }
-
- LOG_F(RRC,"\n");
-#endif
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
+ "[MSG] RRC UECapablility Information\n");
MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB,
@@ -7215,9 +7048,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),
DCCH,
sdu_sizeP);
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg);
+ }
LOG_I(RRC, "got UE capabilities for UE %x\n", ctxt_pP->rnti);
if (ue_context_p->ue_context.UE_Capability) {
LOG_I(RRC, "freeing old UE capabilities for UE %x\n", ctxt_pP->rnti);
@@ -7234,9 +7067,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
ul_dcch_msg->message.choice.c1.choice.ueCapabilityInformation.criticalExtensions.
choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list.
array[0]->ueCapabilityRAT_Container.size, 0, 0);
-#ifdef XER_PRINT
- xer_fprint(stdout, &asn_DEF_UE_EUTRA_Capability, ue_context_p->ue_context.UE_Capability);
-#endif
+ if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
+ xer_fprint(stdout, &asn_DEF_UE_EUTRA_Capability, ue_context_p->ue_context.UE_Capability);
+ }
if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) {
LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Failed to decode UE capabilities (%zu bytes)\n",
@@ -7247,22 +7080,22 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
ue_context_p->ue_context.UE_Capability = 0;
}
-#if defined(ENABLE_USE_MME)
+ if (EPC_MODE_ENABLED) {
- if (EPC_MODE_ENABLED == 1) {
- rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(ctxt_pP,
- ue_context_p,
- ul_dcch_msg);
+ if (EPC_MODE_ENABLED == 1) {
+ rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(ctxt_pP,
+ ue_context_p,
+ ul_dcch_msg);
+ }
+ } else {
+ ue_context_p->ue_context.nb_of_e_rabs = 1;
+ for (i = 0; i < ue_context_p->ue_context.nb_of_e_rabs; i++){
+ ue_context_p->ue_context.e_rab[i].status = E_RAB_STATUS_NEW;
+ ue_context_p->ue_context.e_rab[i].param.e_rab_id = 1+i;
+ ue_context_p->ue_context.e_rab[i].param.qos.qci=9;
+ }
+ ue_context_p->ue_context.setup_e_rabs =ue_context_p->ue_context.nb_of_e_rabs;
}
-#else
- ue_context_p->ue_context.nb_of_e_rabs = 1;
- for (i = 0; i < ue_context_p->ue_context.nb_of_e_rabs; i++){
- ue_context_p->ue_context.e_rab[i].status = E_RAB_STATUS_NEW;
- ue_context_p->ue_context.e_rab[i].param.e_rab_id = 1+i;
- ue_context_p->ue_context.e_rab[i].param.qos.qci=9;
- }
- ue_context_p->ue_context.setup_e_rabs =ue_context_p->ue_context.nb_of_e_rabs;
-#endif
rrc_eNB_generate_defaultRRCConnectionReconfiguration(ctxt_pP,
ue_context_p,
@@ -7285,16 +7118,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
}
LOG_D(RRC,"[MSG] RRC UL Information Transfer \n");
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] RRC UL Information Transfer \n");
-
- for (i = 0; i < sdu_sizeP; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
- }
-
- LOG_F(RRC,"\n");
-#endif
-
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
+ "[MSG] RRC UL Information Transfer \n");
MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB,
@@ -7306,15 +7131,11 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
ue_context_p->ue_context.rnti,
sdu_sizeP);
-#if defined(ENABLE_USE_MME)
-
if (EPC_MODE_ENABLED == 1) {
rrc_eNB_send_S1AP_UPLINK_NAS(ctxt_pP,
ue_context_p,
ul_dcch_msg);
}
-
-#endif
break;
case UL_DCCH_MessageType__c1_PR_counterCheckResponse:
@@ -7380,15 +7201,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
//case UL_DCCH_MessageType__messageClassExtension__c2_PR_sidelinkUEInformation_r12: //SidelinkUEInformation
LOG_I(RRC,"THINH [UL_DCCH_MessageType__messageClassExtension_PR_c2]\n");
-#ifdef RRC_MSG_PRINT
- LOG_F(RRC,"[MSG] SidelinkUEInformation\n");
-
- for (i = 0; i < sdu_sizeP; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
- }
-
- LOG_F(RRC,"\n");
-#endif
+ LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
+ "[MSG] RRC SidelinkUEInformation \n");
MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB,
diff --git a/openair2/RRC/LTE/rrc_eNB_S1AP.c b/openair2/RRC/LTE/rrc_eNB_S1AP.c
index 36e0645795..7d24228602 100644
--- a/openair2/RRC/LTE/rrc_eNB_S1AP.c
+++ b/openair2/RRC/LTE/rrc_eNB_S1AP.c
@@ -467,43 +467,20 @@ rrc_pdcp_config_security(
&kRRCint);
#if !defined(USRP_REC_PLAY)
-#define DEBUG_SECURITY 1
+ SET_LOG_DUMP(DEBUG_SECURITY) ;
#endif
-#if defined (DEBUG_SECURITY)
-#undef msg
-#define msg printf
- if (print_keys ==1 ) {
- print_keys =0;
- int i;
- msg("\nKeNB:");
+ if ( LOG_DUMPFLAG( DEBUG_SECURITY ) ) {
+ if (print_keys ==1 ) {
+ print_keys =0;
- for(i = 0; i < 32; i++) {
- msg("%02x", ue_context_pP->ue_context.kenb[i]);
+ LOG_DUMPMSG(RRC, DEBUG_SECURITY, ue_context_pP->ue_context.kenb, 32,"\nKeNB:" );
+ LOG_DUMPMSG(RRC, DEBUG_SECURITY, kRRCenc, 32,"\nKRRCenc:" );
+ LOG_DUMPMSG(RRC, DEBUG_SECURITY, kRRCint, 32,"\nKRRCint:" );
}
-
- msg("\n");
-
- msg("\nKRRCenc:");
-
- for(i = 0; i < 32; i++) {
- msg("%02x", kRRCenc[i]);
- }
-
- msg("\n");
-
- msg("\nKRRCint:");
-
- for(i = 0; i < 32; i++) {
- msg("%02x", kRRCint[i]);
- }
-
- msg("\n");
-
}
-#endif //DEBUG_SECURITY
key = PDCP_COLL_KEY_VALUE(ctxt_pP->module_id, ctxt_pP->rnti, ctxt_pP->enb_flag, DCCH, SRB_FLAG_YES);
h_rc = hashtable_get(pdcp_coll_p, key, (void**)&pdcp_p);
@@ -945,16 +922,8 @@ rrc_eNB_process_S1AP_DOWNLINK_NAS(
S1AP_DOWNLINK_NAS (msg_p).nas_pdu.length,
S1AP_DOWNLINK_NAS (msg_p).nas_pdu.buffer);
-#ifdef RRC_MSG_PRINT
- int i=0;
- LOG_F(RRC,"[MSG] RRC DL Information Transfer\n");
+ LOG_DUMPMSG(RRC,DEBUG_RRC,buffer,length,"[MSG] RRC DL Information Transfer\n");
- for (i = 0; i < length; i++) {
- LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
- }
-
- LOG_F(RRC,"\n");
-#endif
/*
* switch UL or DL NAS message without RRC piggybacked to SRB2 if active.
*/
diff --git a/openair2/UTIL/OPT/README.txt b/openair2/UTIL/OPT/README.txt
index 7193733d00..c56aeda93d 100644
--- a/openair2/UTIL/OPT/README.txt
+++ b/openair2/UTIL/OPT/README.txt
@@ -1,9 +1,13 @@
-2012 07 10 - Working version
How to configure wireshark for dissecting LTE protocols:
- start the wireshark as a sudoers
+- goto analyze->enabled prototols
+ => enable mac_lte_udp and rlc_lte_udp
- goto edit/preferences and expand Protocols
- select UDP and check "try heuristic sub-dissectors first"
- select MAC-LTE, and check all the options (checkboxes), and set the "which layer info to show in info column" to "MAC info"
- select RLC-LTE, and check all the options except the "May see RLC headers only", and set the "call PDCP dissector for DRB PDUs" to "12-bit SN". Optionally you may select the sequence analysis for RLC AM/UM.
+
+How to use
+- start eNB or UE with option -W (or -P if you want to make a pcap file)
- capture on local interface "lo"
- filter out the ICMP/DNS/TCP messages (e.g. "!icmp && !dns && !tcp")
diff --git a/openair2/UTIL/OPT/mac_pcap.h b/openair2/UTIL/OPT/mac_pcap.h
index f1d4b32492..48b31bb3c0 100644
--- a/openair2/UTIL/OPT/mac_pcap.h
+++ b/openair2/UTIL/OPT/mac_pcap.h
@@ -42,11 +42,4 @@ typedef struct MAC_Context_Info_t {
unsigned int subframesSinceCaptureStart;
} MAC_Context_Info_t;
-pcap_hdr_t file_header = {
- 0xa1b2c3d4, /* magic number */
- 2, 4, /* version number is 2.4 */
- 0, /* timezone */
- 0, /* sigfigs - apparently all tools do this */
- 65535, /* snaplen - this should be long enough */
- MAC_LTE_DLT /* Data Link Type (DLT). Set as unused value 147 for now */
-};
+
diff --git a/openair2/UTIL/OPT/opt.h b/openair2/UTIL/OPT/opt.h
index c9340f258e..b4ff3b5006 100644
--- a/openair2/UTIL/OPT/opt.h
+++ b/openair2/UTIL/OPT/opt.h
@@ -55,6 +55,16 @@ This header file must be included */
#include "PHY/impl_defs_lte.h"
#endif
+#define PACKET_MAC_LTE_DEFAULT_UDP_PORT (9999)
+
+typedef uint8_t guint8;
+typedef uint16_t guint16;
+typedef uint32_t guint32;
+typedef guint8 gboolean;
+
+#include "packet-mac-lte.h"
+#include "mac_pcap.h"
+
#ifdef OCP_FRAMEWORK
#include
#else
@@ -74,7 +84,7 @@ typedef enum radio_type_e {
extern trace_mode_t opt_type;
extern char in_ip[40];
-extern char in_path[100];
+extern char in_path[FILENAME_MAX];
/**
* function def
@@ -84,7 +94,7 @@ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
int ueid, int rntiType, int rnti, uint16_t sysFrame, uint8_t subframe,
int oob_event, int oob_event_value);
-int init_opt(char *path, char *ip, char *port, radio_type_t radio_type_p);
+int init_opt(char *path, char *ip);
void terminate_opt(void);
diff --git a/openair2/UTIL/OPT/packet-mac-lte.h b/openair2/UTIL/OPT/packet-mac-lte.h
index d0bb60f6b5..4dfbe7912e 100644
--- a/openair2/UTIL/OPT/packet-mac-lte.h
+++ b/openair2/UTIL/OPT/packet-mac-lte.h
@@ -1,41 +1,36 @@
/* packet-mac-lte.h
*
* Martin Mathieson
- * $Id: packet-mac-lte.h 42240 2012-04-25 20:02:12Z pascal $
*
* Wireshark - Network traffic analyzer
* By Gerald Combs
* Copyright 1998 Gerald Combs
*
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
* This header file may also be distributed under
* the terms of the BSD Licence as follows:
*
* Copyright (C) 2009 Martin Mathieson. All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+ /*
+ this is wireshark, commit: commit eda834b6e29c36e05a63a6056afa98390ff79357
+ Date: Wed Aug 22 14:36:20 2018 +0200
+ modified to be used in OpenAir to create the LTE MAC/RLC encapsulated in UDP as per Wireshark feature
*/
-#ifndef PACKET_MAC_LTE_H_
-#define PACKET_MAC_LTE_H_
+
+#include "ws_symbol_export.h"
+
+/** data structure to hold time values with nanosecond resolution*/
+typedef struct {
+ time_t secs;
+ int nsecs;
+} nstime_t;
+
/* radioType */
#define FDD_RADIO 1
@@ -45,105 +40,190 @@
#define DIRECTION_UPLINK 0
#define DIRECTION_DOWNLINK 1
-/* SR: no need to declare following part: */
+/* rntiType */
+#define WS_NO_RNTI 0
+#define WS_P_RNTI 1
+#define WS_RA_RNTI 2
+#define WS_C_RNTI 3
+#define WS_SI_RNTI 4
+#define WS_SPS_RNTI 5
+#define WS_M_RNTI 6
+#define WS_SL_BCH_RNTI 7
+#define WS_SL_RNTI 8
+#define WS_SC_RNTI 9
+#define WS_G_RNTI 10
+
typedef enum mac_lte_oob_event {
- ltemac_send_preamble,
- ltemac_send_sr,
- ltemac_sr_failure
+ ltemac_send_preamble,
+ ltemac_send_sr,
+ ltemac_sr_failure
} mac_lte_oob_event;
typedef enum mac_lte_dl_retx {
- dl_retx_no,
- dl_retx_yes,
- dl_retx_unknown
+ dl_retx_no,
+ dl_retx_yes,
+ dl_retx_unknown
} mac_lte_dl_retx;
typedef enum mac_lte_crc_status {
- crc_fail = 0,
- crc_success = 1,
- crc_high_code_rate = 2,
- crc_pdsch_lost = 3,
- crc_duplicate_nonzero_rv = 4
+ crc_fail = 0,
+ crc_success = 1,
+ crc_high_code_rate = 2,
+ crc_pdsch_lost = 3,
+ crc_duplicate_nonzero_rv = 4,
+ crc_false_dci = 5
} mac_lte_crc_status;
+/* N.B. for SCellIndex-r13 extends to 31 */
+typedef enum mac_lte_carrier_id {
+ carrier_id_primary,
+ carrier_id_secondary_1,
+ carrier_id_secondary_2,
+ carrier_id_secondary_3,
+ carrier_id_secondary_4,
+ carrier_id_secondary_5,
+ carrier_id_secondary_6,
+ carrier_id_secondary_7
+} mac_lte_carrier_id;
+
+typedef enum mac_lte_ce_mode {
+ no_ce_mode = 0,
+ ce_mode_a = 1,
+ ce_mode_b = 2
+} mac_lte_ce_mode;
+
+typedef enum mac_lte_nb_mode {
+ no_nb_mode = 0,
+ nb_mode = 1
+} mac_lte_nb_mode;
+
/* Context info attached to each LTE MAC frame */
-typedef struct mac_lte_info {
- /* Needed for decode */
- guint8 radioType;
- guint8 direction;
- guint8 rntiType;
+typedef struct mac_lte_info
+{
+ /* Needed for decode */
+ guint8 radioType;
+ guint8 direction;
+ guint8 rntiType;
- /* Extra info to display */
- guint16 rnti;
- guint16 ueid;
+ /* Extra info to display */
+ guint16 rnti;
+ guint16 ueid;
- /* Timing info */
- guint16 sysframeNumber;
- guint16 subframeNumber;
+ /* Timing info */
+ guint16 sysframeNumber;
+ guint16 subframeNumber;
- /* Optional field. More interesting for TDD (FDD is always -4 subframeNumber) */
- gboolean subframeNumberOfGrantPresent;
- guint16 subframeNumberOfGrant;
+ /* Optional field. More interesting for TDD (FDD is always -4 subframeNumber) */
+ gboolean subframeNumberOfGrantPresent;
+ guint16 subframeNumberOfGrant;
- /* Flag set only if doing PHY-level data test - i.e. there may not be a
- well-formed MAC PDU so just show as raw data */
- gboolean isPredefinedData;
+ /* Flag set only if doing PHY-level data test - i.e. there may not be a
+ well-formed MAC PDU so just show as raw data */
+ gboolean isPredefinedData;
- /* Length of DL PDU or UL grant size in bytes */
- guint16 length;
+ /* Length of DL PDU or UL grant size in bytes */
+ guint16 length;
- /* UL only. 0=newTx, 1=first-retx, etc */
- guint8 reTxCount;
- guint8 isPHICHNACK; /* FALSE=PDCCH retx grant, TRUE=PHICH NACK */
+ /* 0=newTx, 1=first-retx, etc */
+ guint8 reTxCount;
+ guint8 isPHICHNACK; /* FALSE=PDCCH retx grant, TRUE=PHICH NACK */
- /* UL only. Indicates if the R10 extendedBSR-Sizes parameter is set */
- gboolean isExtendedBSRSizes;
+ /* UL only. Indicates if the R10 extendedBSR-Sizes parameter is set */
+ gboolean isExtendedBSRSizes;
- /* DL only. Status of CRC check */
- mac_lte_crc_status crcStatusValid;
+ /* UL only. Indicates if the R10 simultaneousPUCCH-PUSCH parameter is set for PCell */
+ gboolean isSimultPUCCHPUSCHPCell;
- /* DL only. Is this known to be a retransmission? */
- mac_lte_dl_retx dl_retx;
+ /* UL only. Indicates if the R10 extendedBSR-Sizes parameter is set for PSCell */
+ gboolean isSimultPUCCHPUSCHPSCell;
- /* More Physical layer info (see direction above for which side of union to use) */
- union {
- struct mac_lte_ul_phy_info {
- guint8 present; /* Remaining UL fields are present and should be displayed */
- guint8 modulation_type;
- guint8 tbs_index;
- guint8 resource_block_length;
- guint8 resource_block_start;
- guint8 harq_id;
- gboolean ndi;
- } ul_info;
- struct mac_lte_dl_phy_info {
- guint8 present; /* Remaining UL fields are present and should be displayed */
- guint8 dci_format;
- guint8 resource_allocation_type;
- guint8 aggregation_level;
- guint8 mcs_index;
- guint8 redundancy_version_index;
- guint8 resource_block_length;
- mac_lte_crc_status crc_status;
- guint8 harq_id;
- gboolean ndi;
- guint8 transport_block; /* 1..2 */
- } dl_info;
- } detailed_phy_info;
+ /* Status of CRC check. For UE it is DL only. For eNodeB it is UL
+ only. For an analyzer, it is present for both DL and UL. */
+ gboolean crcStatusValid;
+ mac_lte_crc_status crcStatus;
- /* Relating to out-of-band events */
- /* N.B. dissector will only look to these fields if length is 0... */
- mac_lte_oob_event oob_event;
- guint8 rapid;
- guint8 rach_attempt_number;
-#define MAX_SRs 20
- guint16 number_of_srs;
- guint16 oob_ueid[MAX_SRs];
- guint16 oob_rnti[MAX_SRs];
+ /* Carrier ID */
+ mac_lte_carrier_id carrierId;
+
+ /* DL only. Is this known to be a retransmission? */
+ mac_lte_dl_retx dl_retx;
+
+ /* DL only. CE mode to be used for RAR decoding */
+ mac_lte_ce_mode ceMode;
+
+ /* DL and UL. NB-IoT mode of the UE */
+ mac_lte_nb_mode nbMode;
+
+ /* UL only, for now used for CE mode A RAR decoding */
+ guint8 nUlRb;
+
+ /* More Physical layer info (see direction above for which side of union to use) */
+ union {
+ struct mac_lte_ul_phy_info
+ {
+ guint8 present; /* Remaining UL fields are present and should be displayed */
+ guint8 modulation_type;
+ guint8 tbs_index;
+ guint8 resource_block_length;
+ guint8 resource_block_start;
+ guint8 harq_id;
+ gboolean ndi;
+ } ul_info;
+ struct mac_lte_dl_phy_info
+ {
+ guint8 present; /* Remaining DL fields are present and should be displayed */
+ guint8 dci_format;
+ guint8 resource_allocation_type;
+ guint8 aggregation_level;
+ guint8 mcs_index;
+ guint8 redundancy_version_index;
+ guint8 resource_block_length;
+ guint8 harq_id;
+ gboolean ndi;
+ guint8 transport_block; /* 0..1 */
+ } dl_info;
+ } detailed_phy_info;
+
+ /* Relating to out-of-band events */
+ /* N.B. dissector will only look to these fields if length is 0... */
+ mac_lte_oob_event oob_event;
+ guint8 rapid;
+ guint8 rach_attempt_number;
+ #define MAX_SRs 20
+ guint16 number_of_srs;
+ guint16 oob_ueid[MAX_SRs];
+ guint16 oob_rnti[MAX_SRs];
} mac_lte_info;
-/* Accessor function to check if a frame was considered to be ReTx */
-//int is_mac_lte_frame_retx(packet_info *pinfo, guint8 direction);
+
+typedef struct mac_lte_tap_info {
+ /* Info from context */
+ guint16 rnti;
+ guint16 ueid;
+ guint8 rntiType;
+ guint8 isPredefinedData;
+ gboolean crcStatusValid;
+ mac_lte_crc_status crcStatus;
+ guint8 direction;
+
+ guint8 isPHYRetx;
+ guint16 ueInTTI;
+
+ nstime_t mac_lte_time;
+
+ /* Number of bytes (which part is used depends upon context settings) */
+ guint32 single_number_of_bytes;
+ guint32 bytes_for_lcid[11];
+ guint32 sdus_for_lcid[11];
+ guint8 number_of_rars;
+ guint8 number_of_paging_ids;
+
+ /* Number of padding bytes includes padding subheaders and trailing padding */
+ guint16 padding_bytes;
+ guint16 raw_length;
+} mac_lte_tap_info;
+
+
/*****************************************************************/
/* UDP framing format */
@@ -153,12 +233,10 @@ typedef struct mac_lte_info {
/* and implemented by this dissector, using the definitions */
/* below. A link to an example program showing you how to encode */
/* these headers and send LTE MAC PDUs on a UDP socket is */
-/* provided at http://wiki.wireshark.org/MAC-LTE */
+/* provided at https://wiki.wireshark.org/MAC-LTE */
/* */
-/* A heuristic dissecter (enabled by a preference) will */
-/* recognise a signature at the beginning of these frames . */
-/* Until someone is using this format, suggestions for changes */
-/* are welcome. */
+/* A heuristic dissector (enabled by a preference) will */
+/* recognise a signature at the beginning of these frames. */
/*****************************************************************/
@@ -177,7 +255,7 @@ typedef struct mac_lte_info {
to show you display/filter/plot/add-custom-columns on these fields, so should
be added if available.
The format is to have the tag, followed by the value (there is no length field,
- its implicit from the tag) */
+ it's implicit from the tag) */
#define MAC_LTE_RNTI_TAG 0x02
/* 2 bytes, network order */
@@ -185,8 +263,8 @@ typedef struct mac_lte_info {
#define MAC_LTE_UEID_TAG 0x03
/* 2 bytes, network order */
-#define MAC_LTE_SUBFRAME_TAG 0x04
-/* 2 bytes, network order */
+#define MAC_LTE_FRAME_SUBFRAME_TAG 0x04
+/* 2 bytes, network order, SFN is stored in 12 MSB and SF in 4 LSB */
#define MAC_LTE_PREDEFINED_DATA_TAG 0x05
/* 1 byte */
@@ -200,29 +278,101 @@ typedef struct mac_lte_info {
#define MAC_LTE_EXT_BSR_SIZES_TAG 0x08
/* 0 byte */
-#define MAC_LTE_OOB_EVENT_TAG 0x09
-/* 3 byte */
+#define MAC_LTE_SEND_PREAMBLE_TAG 0x09
+/* 2 bytes, RAPID value (1 byte) followed by RACH attempt number (1 byte) */
+
+#define MAC_LTE_CARRIER_ID_TAG 0x0A
+/* 1 byte */
+
+#define MAC_LTE_PHY_TAG 0x0B
+/* variable length, length (1 byte) then depending on direction
+ in UL: modulation type (1 byte), TBS index (1 byte), RB length (1 byte),
+ RB start (1 byte), HARQ id (1 byte), NDI (1 byte)
+ in DL: DCI format (1 byte), resource allocation type (1 byte), aggregation level (1 byte),
+ MCS index (1 byte), redundancy version (1 byte), resource block length (1 byte),
+ HARQ id (1 byte), NDI (1 byte), TB (1 byte), DL reTx (1 byte) */
+
+#define MAC_LTE_SIMULT_PUCCH_PUSCH_PCELL_TAG 0x0C
+/* 0 byte */
+
+#define MAC_LTE_SIMULT_PUCCH_PUSCH_PSCELL_TAG 0x0D
+/* 0 byte */
+
+#define MAC_LTE_CE_MODE_TAG 0x0E
+/* 1 byte containing mac_lte_ce_mode enum value */
+
+#define MAC_LTE_NB_MODE_TAG 0x0F
+/* 1 byte containing mac_lte_nb_mode enum value */
+
+#define MAC_LTE_N_UL_RB_TAG 0x10
+/* 1 byte containing the number of UL resource blocks: 6, 15, 25, 50, 75 or 100 */
+
+#define MAC_LTE_SR_TAG 0x11
+/* 2 bytes for the number of items, followed by that number of ueid, rnti (2 bytes each) */
+
/* MAC PDU. Following this tag comes the actual MAC PDU (there is no length, the PDU
continues until the end of the frame) */
#define MAC_LTE_PAYLOAD_TAG 0x01
-/* Set details of an LCID -> drb channel mapping. To be called from
- configuration protocol (e.g. RRC) */
-/*void set_mac_lte_channel_mapping(guint16 ueid, guint8 lcid,
- guint8 srbid, guint8 drbid,
- guint8 rlcMode, guint8 um_sn_length,
- guint8 ul_priority);
-*/
-/* Functions to be called from outside this module (e.g. in a plugin, where mac_lte_info
- isn't available) to get/set per-packet data */
-//mac_lte_info *get_mac_lte_proto_data(packet_info *pinfo);
-//void set_mac_lte_proto_data(packet_info *pinfo, mac_lte_info *p_mac_lte_info);
+/* Type to store parameters for configuring LCID->RLC channel settings for DRB */
+/* Some are optional, and may not be seen (e.g. on reestablishment) */
+typedef struct drb_mapping_t
+{
+ guint16 ueid; /* Mandatory */
+ guint8 drbid; /* Mandatory */
+ gboolean lcid_present;
+ guint8 lcid; /* Part of LogicalChannelConfig - optional */
+ gboolean rlcMode_present;
+ guint8 rlcMode; /* Part of RLC config - optional */
+ gboolean rlc_ul_ext_li_field; /* Part of RLC config - optional */
+ gboolean rlc_dl_ext_li_field; /* Part of RLC config - optional */
+ gboolean rlc_ul_ext_am_sn; /* Part of RLC config - optional */
+ gboolean rlc_dl_ext_am_sn; /* Part of RLC config - optional */
+ gboolean um_sn_length_present;
+ guint8 um_sn_length; /* Part of RLC config - optional */
+ gboolean ul_priority_present;
+ guint8 ul_priority; /* Part of LogicalChannelConfig - optional */
+ gboolean pdcp_sn_size_present;
+ guint8 pdcp_sn_size; /* Part of pdcp-Config - optional */
+} drb_mapping_t;
-/* Function to attempt to populate p_mac_lte_info using framing definition above */
-/*gboolean dissect_mac_lte_context_fields(struct mac_lte_info *p_mac_lte_info, tvbuff_t *tvb,
- gint *p_offset);
-*/
-#endif /* PACKET_MAC_LTE_H_ */
+
+/* Dedicated DRX config. Used to verify that a sensible config is given.
+ Also, beginning to configure MAC with this config and (optionally) show
+ DRX config and state (cycles/timers) attached to each UL/DL PDU! */
+typedef struct drx_config_t {
+ gboolean configured;
+ guint32 frameNum;
+ guint32 previousFrameNum;
+
+ guint32 onDurationTimer;
+ guint32 inactivityTimer;
+ guint32 retransmissionTimer;
+ guint32 longCycle;
+ guint32 cycleOffset;
+ /* Optional Short cycle */
+ gboolean shortCycleConfigured;
+ guint32 shortCycle;
+ guint32 shortCycleTimer;
+} drx_config_t;
+
+/* RRC can indicate whether simultaneous PUCCH/PUSCH is used */
+typedef enum {
+ SIMULT_PUCCH_PUSCH_PCELL = 0,
+ SIMULT_PUCCH_PUSCH_PSCELL
+} simult_pucch_pusch_cell_type;
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 4
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
+ */
diff --git a/openair2/UTIL/OPT/probe.c b/openair2/UTIL/OPT/probe.c
index 2f7dac3d1e..a1e5367168 100644
--- a/openair2/UTIL/OPT/probe.c
+++ b/openair2/UTIL/OPT/probe.c
@@ -95,26 +95,22 @@ what about the implementation
int opt_enabled=0;
-#define PACKET_MAC_LTE_DEFAULT_UDP_PORT (9999)
-
-typedef uint8_t guint8;
-typedef uint16_t guint16;
-typedef uint32_t guint32;
-typedef guint8 gboolean;
-
-#include "packet-mac-lte.h"
-#include "mac_pcap.h"
-
//static unsigned char g_PDUBuffer[1600];
//static unsigned int g_PDUOffset;
-
char in_ip[40];
-char in_path[100];
+char in_path[FILENAME_MAX];
FILE *file_fd = NULL;
+pcap_hdr_t file_header = {
+ 0xa1b2c3d4, /* magic number */
+ 2, 4, /* version number is 2.4 */
+ 0, /* timezone */
+ 0, /* sigfigs - apparently all tools do this */
+ 65535, /* snaplen - this should be long enough */
+ MAC_LTE_DLT /* Data Link Type (DLT). Set as unused value 147 for now */
+};
trace_mode_t opt_type = OPT_NONE;
-static radio_type_t radio_type;
static unsigned int subframesSinceCaptureStart;
static int g_socksd = -1;/* UDP socket used for sending frames */
@@ -237,22 +233,13 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
guint8 oob_event, guint8 oob_event_value,
uint8_t *pdu_buffer, unsigned int pdu_buffer_size)
{
- #ifdef JUMBO_FRAME
- static unsigned char frameBuffer[9000];
- #else
- static unsigned char frameBuffer[1600];
- #endif
- static unsigned int frameOffset;
+ unsigned char frameBuffer[9000];
+ unsigned int frameOffset;
ssize_t bytesSent;
frameOffset = 0;
uint16_t tmp16;
- /********************************************************************/
- /* Fixed start to each frame (allowing heuristic dissector to work) */
- /* Not NULL terminated */
- memset(frameBuffer+frameOffset, 0, sizeof(mac_lte_info)+pdu_buffer_size + 8);
-
memcpy(frameBuffer+frameOffset, MAC_LTE_START_STRING,
strlen(MAC_LTE_START_STRING));
frameOffset += strlen(MAC_LTE_START_STRING);
@@ -279,7 +266,7 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
frameOffset += 2;
/* Subframe number */
- frameBuffer[frameOffset++] = MAC_LTE_SUBFRAME_TAG;
+ frameBuffer[frameOffset++] = MAC_LTE_FRAME_SUBFRAME_TAG;
tmp16 = htons(sfnSf); // frame counter : this will give an expert info as wireshark expects SF and not F
memcpy(frameBuffer+frameOffset, &tmp16, 2);
frameOffset += 2;
@@ -313,26 +300,29 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType,
if (pdu_buffer_size==0) {
switch (oob_event) {
case ltemac_send_preamble :
- LOG_D(OPT,"oob ltemac_send_preamble event %02x."
+ LOG_D(OPT,"ltemac_send_preamble event %02x."
//"%02x."
"%02x.%02x\n",
- MAC_LTE_OOB_EVENT_TAG,
+ MAC_LTE_SEND_PREAMBLE_TAG,
//ltemac_send_preamble,
rnti,
oob_event_value);
//frameBuffer[frameOffset++]=0;
//frameBuffer[frameOffset++]=0;
//frameBuffer[frameOffset++]=0;
- frameBuffer[frameOffset++] = MAC_LTE_OOB_EVENT_TAG;
+ frameBuffer[frameOffset++] = MAC_LTE_SEND_PREAMBLE_TAG;
//frameBuffer[frameOffset++]=ltemac_send_preamble;
frameBuffer[frameOffset++]=rnti; // is the preamble
frameBuffer[frameOffset++]=oob_event_value;
break;
case ltemac_send_sr:
- frameBuffer[frameOffset++]=ltemac_send_sr;
+ frameBuffer[frameOffset++]=MAC_LTE_SR_TAG ;
frameOffset+=2;
+ frameBuffer[frameOffset++]=rnti;
+ frameOffset++;
frameBuffer[frameOffset++]=oob_event_value;
+ frameOffset++;
break;
case ltemac_sr_failure:
@@ -394,7 +384,7 @@ static int MAC_LTE_PCAP_WritePDU(MAC_Context_Info_t *context,
offset += 2;
/* Subframe number */
- context_header[offset++] = MAC_LTE_SUBFRAME_TAG;
+ context_header[offset++] = MAC_LTE_FRAME_SUBFRAME_TAG;
tmp16 = htons(context->subFrameNumber);
memcpy(context_header+offset, &tmp16, 2);
offset += 2;
@@ -423,21 +413,27 @@ static int MAC_LTE_PCAP_WritePDU(MAC_Context_Info_t *context,
return 1;
}
-
+#include
+extern RAN_CONTEXT_t RC;
+#include
/* Remote serveraddress (where Wireshark is running) */
void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
int ueid, int rntiType, int rnti, uint16_t sysFrameNumber, uint8_t subFrameNumber, int oob_event,
int oob_event_value)
{
MAC_Context_Info_t pdu_context;
-
+ int radioType=FDD_RADIO;
+ if (RC.eNB[0][0]!=NULL)
+ radioType=RC.eNB[0][0]->frame_parms.frame_type== FDD ? FDD_RADIO:TDD_RADIO;
+ if (PHY_vars_UE_g[0][0] != NULL)
+ radioType=PHY_vars_UE_g[0][0]->frame_parms.frame_type== FDD ? FDD_RADIO:TDD_RADIO;
switch (opt_type) {
case OPT_WIRESHARK :
if (g_socksd == -1) {
return;
}
- SendFrame(radio_type,
+ SendFrame( radioType,
(direction == DIRECTION_DOWNLINK) ? DIRECTION_DOWNLINK : DIRECTION_UPLINK,
rntiType, rnti, ueid, (sysFrameNumber<<4) + subFrameNumber,
1, 0, 1, //guint8 isPredefinedData, guint8 retx, guint8 crcStatus
@@ -450,7 +446,7 @@ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
return;
}
- pdu_context.radioType = radio_type;
+ pdu_context.radioType = radioType;
pdu_context.direction = (direction == DIRECTION_DOWNLINK) ? DIRECTION_DOWNLINK
: DIRECTION_UPLINK;
pdu_context.rntiType = rntiType;
@@ -470,7 +466,7 @@ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
}
}
/*---------------------------------------------------*/
-int init_opt(char *path, char *ip, char *port, radio_type_t radio_type_p)
+int init_opt(char *path, char *ip)
{
uint16_t in_port;
subframesSinceCaptureStart = 0;
@@ -489,13 +485,7 @@ int init_opt(char *path, char *ip, char *port, radio_type_t radio_type_p)
strcpy( in_ip, "127.0.0.1" );
}
- if (port != NULL) {
- in_port = atoi(port);
- } else {
- in_port = PACKET_MAC_LTE_DEFAULT_UDP_PORT;
- }
-
- radio_type = radio_type_p;
+ in_port = PACKET_MAC_LTE_DEFAULT_UDP_PORT;
// trace_mode
switch (opt_type) {
diff --git a/openair2/UTIL/OPT/ws_compiler_tests.h b/openair2/UTIL/OPT/ws_compiler_tests.h
new file mode 100644
index 0000000000..46a4ab6099
--- /dev/null
+++ b/openair2/UTIL/OPT/ws_compiler_tests.h
@@ -0,0 +1,138 @@
+/* ws_compiler_tests.h
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef __WS_COMPILER_TESTS_H__
+#define __WS_COMPILER_TESTS_H__
+
+/*
+ * This was introduced by Clang:
+ *
+ * http://clang.llvm.org/docs/LanguageExtensions.html#has-attribute
+ *
+ * in some version (which version?); it has been picked up by GCC 5.0.
+ */
+#ifndef __has_attribute
+ /*
+ * It's a macro, so you can check whether it's defined to check
+ * whether it's supported.
+ *
+ * If it's not, define it to always return 0, so that we move on to
+ * the fallback checks.
+ */
+ #define __has_attribute(x) 0
+#endif
+
+/*
+ * Note that the C90 spec's "6.8.1 Conditional inclusion" and the
+ * C99 spec's and C11 spec's "6.10.1 Conditional inclusion" say:
+ *
+ * Prior to evaluation, macro invocations in the list of preprocessing
+ * tokens that will become the controlling constant expression are
+ * replaced (except for those macro names modified by the defined unary
+ * operator), just as in normal text. If the token "defined" is
+ * generated as a result of this replacement process or use of the
+ * "defined" unary operator does not match one of the two specified
+ * forms prior to macro replacement, the behavior is undefined.
+ *
+ * so you shouldn't use defined() in a #define that's used in #if or
+ * #elif. Some versions of Clang, for example, will warn about this.
+ *
+ * Instead, we check whether the pre-defined macros for particular
+ * compilers are defined and, if not, define the "is this version XXX
+ * or a later version of this compiler" macros as 0.
+ */
+
+/*
+ * Check whether this is GCC major.minor or a later release, or some
+ * compiler that claims to be "just like GCC" of that version or a
+ * later release.
+ */
+
+#if !defined(__GNUC__)
+ #define WS_IS_AT_LEAST_GNUC_VERSION(major, minor) 0
+#else
+ #define WS_IS_AT_LEAST_GNUC_VERSION(major, minor) \
+ (__GNUC__ > (major) || \
+ (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
+#endif
+
+/*
+ * Check whether this is Clang major.minor or a later release.
+ */
+
+#if !defined(__clang__)
+ #define WS_IS_AT_LEAST_CLANG_VERSION(major, minor) 0
+#else
+ #define WS_IS_AT_LEAST_CLANG_VERSION(major, minor) \
+ (__clang_major__ > (major) || \
+ (__clang_major__ == (major) && __clang_minor__ >= (minor)))
+#endif
+
+/*
+ * Check whether this is Sun C/SunPro C/Oracle Studio major.minor
+ * or a later release.
+ *
+ * The version number in __SUNPRO_C is encoded in hex BCD, with the
+ * uppermost hex digit being the major version number, the next
+ * one or two hex digits being the minor version number, and
+ * the last digit being the patch version.
+ *
+ * It represents the *compiler* version, not the product version;
+ * see
+ *
+ * https://sourceforge.net/p/predef/wiki/Compilers/
+ *
+ * for a partial mapping, which we assume continues for later
+ * 12.x product releases.
+ */
+
+#if !defined(__SUNPRO_C)
+ #define WS_IS_AT_LEAST_SUNC_VERSION(major, minor) 0
+#else
+ #define WS_SUNPRO_VERSION_TO_BCD(major, minor) \
+ (((minor) >= 10) ? \
+ (((major) << 12) | (((minor)/10) << 8) | (((minor)%10) << 4)) : \
+ (((major) << 8) | ((minor) << 4)))
+ #define WS_IS_AT_LEAST_SUNC_VERSION(major, minor) \
+ (__SUNPRO_C >= WS_SUNPRO_VERSION_TO_BCD((major), (minor)))
+#endif
+
+/*
+ * Check whether this is IBM XL C major.minor or a later release.
+ *
+ * The version number in __xlC__ has the major version in the
+ * upper 8 bits and the minor version in the lower 8 bits.
+ */
+
+#if !defined(__xlC__)
+ #define WS_IS_AT_LEAST_XL_C_VERSION(major, minor) 0
+#else
+ #define WS_IS_AT_LEAST_XL_C_VERSION(major, minor) \
+ (__xlC__ >= (((major) << 8) | (minor)))
+#endif
+
+/*
+ * Check whether this is HP aC++/HP C major.minor or a later release.
+ *
+ * The version number in __HP_aCC is encoded in zero-padded decimal BCD,
+ * with the "A." stripped off, the uppermost two decimal digits being
+ * the major version number, the next two decimal digits being the minor
+ * version number, and the last two decimal digits being the patch version.
+ * (Strip off the A., remove the . between the major and minor version
+ * number, and add two digits of patch.)
+ */
+
+#if !defined(__HP_aCC)
+ #define WS_IS_AT_LEAST_HP_C_VERSION(major, minor) 0
+#else
+ #define WS_IS_AT_LEAST_HP_C_VERSION(major, minor) \
+ (__HP_aCC >= ((major)*10000 + (minor)*100))
+#endif
+
+#endif /* __WS_COMPILER_TESTS_H__ */
diff --git a/openair2/UTIL/OPT/ws_symbol_export.h b/openair2/UTIL/OPT/ws_symbol_export.h
new file mode 100644
index 0000000000..4c7a2f710a
--- /dev/null
+++ b/openair2/UTIL/OPT/ws_symbol_export.h
@@ -0,0 +1,202 @@
+/*
+ * Cross platform defines for exporting symbols from shared libraries
+ *
+ * Wireshark - Network traffic analyzer
+ * By Balint Reczey
+ * Copyright 2013 Balint Reczey
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "ws_compiler_tests.h"
+
+/** Reset symbol export behavior.
+ * If you {un}define WS_BUILD_DLL on the fly you'll have to define this
+ * as well.
+ */
+#ifdef RESET_SYMBOL_EXPORT
+
+#ifdef SYMBOL_EXPORT_H
+#undef SYMBOL_EXPORT_H
+#endif
+
+#ifdef WS_DLL_PUBLIC
+#undef WS_DLL_PUBLIC
+#endif
+
+#ifdef WS_DLL_PUBLIC_DEF
+#undef WS_DLL_PUBLIC_DEF
+#endif
+
+#ifdef WS_DLL_LOCAL
+#undef WS_DLL_LOCAL
+#endif
+
+#endif /* RESET_SYMBOL_EXPORT */
+
+#ifndef SYMBOL_EXPORT_H
+#define SYMBOL_EXPORT_H
+
+/*
+ * NOTE: G_HAVE_GNUC_VISIBILITY is defined only if all of
+ *
+ * __attribute__ ((visibility ("hidden")))
+ *
+ * __attribute__ ((visibility ("internal")))
+ *
+ * __attribute__ ((visibility ("protected")))
+ *
+ * __attribute__ ((visibility ("default")))
+ *
+ * are supported, and at least some versions of GCC from Apple support
+ * "default" and "hidden" but not "internal" or "protected", so it
+ * shouldn't be used to determine whether "hidden" or "default" is
+ * supported.
+ *
+ * This also means that we shouldn't use G_GNUC_INTERNAL instead of
+ * WS_DLL_LOCAL, as GLib uses G_HAVE_GNUC_VISIBILITY to determine
+ * whether to use __attribute__ ((visibility ("hidden"))) for
+ * G_GNUC_INTERNAL, and that will not use it even with compilers
+ * that support it.
+ */
+
+/* Originally copied from GCC Wiki at http://gcc.gnu.org/wiki/Visibility */
+#if defined _WIN32 || defined __CYGWIN__
+ /* Compiling for Windows, so we use the Windows DLL declarations. */
+ #ifdef WS_BUILD_DLL
+ /*
+ * Building a DLL; for all definitions, we want dllexport, and
+ * (presumably so source from DLL and source from a program using the
+ * DLL can both include a header that declares APIs and exported data
+ * for the DLL), for declarations, either dllexport or dllimport will
+ * work (they mean the same thing for a declaration when building a DLL).
+ */
+ #ifdef __GNUC__
+ /* GCC */
+ #define WS_DLL_PUBLIC_DEF __attribute__ ((dllexport))
+ #else /* ! __GNUC__ */
+ /*
+ * Presumably MSVC.
+ * Note: actually gcc seems to also support this syntax.
+ */
+ #define WS_DLL_PUBLIC_DEF __declspec(dllexport)
+ #endif /* __GNUC__ */
+ #else /* WS_BUILD_DLL */
+ /*
+ * Building a program; we should only see declarations, not definitions,
+ * with WS_DLL_PUBLIC, and they all represent APIs or data imported
+ * from a DLL, so use dllimport.
+ *
+ * For functions, export shouldn't be necessary; for data, it might
+ * be necessary, e.g. if what's declared is an array whose size is
+ * not given in the declaration.
+ */
+ #ifdef __GNUC__
+ /* GCC */
+ #define WS_DLL_PUBLIC_DEF __attribute__ ((dllimport))
+ #elif ! (defined ENABLE_STATIC) /* ! __GNUC__ */
+ /*
+ * Presumably MSVC, and we're not building all-static.
+ * Note: actually gcc seems to also support this syntax.
+ */
+ #define WS_DLL_PUBLIC_DEF __declspec(dllimport)
+ #else /* ! __GNUC__ && ENABLE_STATIC */
+ /*
+ * Presumably MSVC, and we're building all-static, so we're
+ * not building any DLLs.
+ */
+ #define WS_DLL_PUBLIC_DEF
+ #endif /* __GNUC__ */
+ #endif /* WS_BUILD_DLL */
+
+ /*
+ * Symbols in a DLL are *not* exported unless they're specifically
+ * flagged as exported, so, for a non-static but non-exported
+ * symbol, we don't have to do anything.
+ */
+ #define WS_DLL_LOCAL
+#else /* defined _WIN32 || defined __CYGWIN__ */
+ /*
+ * Compiling for UN*X, where the dllimport and dllexport stuff
+ * is neither necessary nor supported; just specify the
+ * visibility if we have a compiler that supports doing so.
+ */
+ #if WS_IS_AT_LEAST_GNUC_VERSION(3,4) \
+ || WS_IS_AT_LEAST_XL_C_VERSION(12,0)
+ /*
+ * GCC 3.4 or later, or some compiler asserting compatibility with
+ * GCC 3.4 or later, or XL C 13.0 or later, so we have
+ * __attribute__((visibility()).
+ */
+
+ /*
+ * Symbols exported from libraries.
+ */
+ #define WS_DLL_PUBLIC_DEF __attribute__ ((visibility ("default")))
+
+ /*
+ * Non-static symbols *not* exported from libraries.
+ */
+ #define WS_DLL_LOCAL __attribute__ ((visibility ("hidden")))
+ #elif WS_IS_AT_LEAST_SUNC_VERSION(5,5)
+ /*
+ * Sun C 5.5 or later, so we have __global and __hidden.
+ * (Sun C 5.9 and later also have __attribute__((visibility()),
+ * but there's no reason to prefer it with Sun C.)
+ */
+
+ /*
+ * Symbols exported from libraries.
+ */
+ #define WS_DLL_PUBLIC_DEF __global
+
+ /*
+ * Non-static symbols *not* exported from libraries.
+ */
+ #define WS_DLL_LOCAL __hidden
+ #else
+ /*
+ * We have neither a way to make stuff not explicitly marked as
+ * visible invisible outside a library nor a way to make stuff
+ * explicitly marked as local invisible outside the library.
+ */
+
+ /*
+ * Symbols exported from libraries.
+ */
+ #define WS_DLL_PUBLIC_DEF
+
+ /*
+ * Non-static symbols *not* exported from libraries.
+ */
+ #define WS_DLL_LOCAL
+ #endif
+#endif
+
+/*
+ * You *must* use this for exported data *declarations*; if you use
+ * WS_DLL_PUBLIC_DEF, some compilers, such as MSVC++, will complain
+ * about array definitions with no size.
+ *
+ * You must *not* use this for exported data *definitions*, as that
+ * will, for some compilers, cause warnings about items being initialized
+ * and declared extern.
+ *
+ * Either can be used for exported *function* declarations and definitions.
+ */
+#define WS_DLL_PUBLIC WS_DLL_PUBLIC_DEF extern
+
+#endif /* SYMBOL_EXPORT_H */
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local Variables:
+ * c-basic-offset: 2
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=2 tabstop=8 expandtab:
+ * :indentSize=2:tabSize=8:noTabs=true:
+ */
diff --git a/openair2/X2AP/x2ap_common.c b/openair2/X2AP/x2ap_common.c
index 2ac875155d..cc2954f77b 100644
--- a/openair2/X2AP/x2ap_common.c
+++ b/openair2/X2AP/x2ap_common.c
@@ -66,7 +66,7 @@ ssize_t x2ap_generate_initiating_message(
pdu.present = X2AP_X2AP_PDU_PR_initiatingMessage;
pdu.choice.initiatingMessage.procedureCode = procedureCode;
pdu.choice.initiatingMessage.criticality = criticality;
- ANY_fromType_aper(&pdu.choice.initiatingMessage.value, td, sptr);
+ ANY_fromType_aper((ANY_t *)&pdu.choice.initiatingMessage.value, td, sptr);
if (asn1_xer_print) {
xer_fprint(stdout, &asn_DEF_X2AP_X2AP_PDU, (void *)&pdu);
@@ -98,7 +98,7 @@ ssize_t x2ap_generate_successfull_outcome(
pdu.present = X2AP_X2AP_PDU_PR_successfulOutcome;
pdu.choice.successfulOutcome.procedureCode = procedureCode;
pdu.choice.successfulOutcome.criticality = criticality;
- ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr);
+ ANY_fromType_aper((ANY_t *)&pdu.choice.successfulOutcome.value, td, sptr);
if (asn1_xer_print) {
xer_fprint(stdout, &asn_DEF_X2AP_X2AP_PDU, (void *)&pdu);
@@ -130,7 +130,7 @@ ssize_t x2ap_generate_unsuccessfull_outcome(
pdu.present = X2AP_X2AP_PDU_PR_unsuccessfulOutcome;
pdu.choice.successfulOutcome.procedureCode = procedureCode;
pdu.choice.successfulOutcome.criticality = criticality;
- ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr);
+ ANY_fromType_aper((ANY_t *)&pdu.choice.successfulOutcome.value, td, sptr);
if (asn1_xer_print) {
xer_fprint(stdout, &asn_DEF_X2AP_X2AP_PDU, (void *)&pdu);
diff --git a/openair2/X2AP/x2ap_common.h b/openair2/X2AP/x2ap_common.h
index 1a4889f0f0..76cc92aed2 100644
--- a/openair2/X2AP/x2ap_common.h
+++ b/openair2/X2AP/x2ap_common.h
@@ -57,11 +57,10 @@
#define FALSE 0
#endif
-extern int asn_debug;
extern int asn1_xer_print;
#if defined(ENB_MODE)
-# include "log.h"
+# include "common/utils/LOG/log.h"
# define X2AP_ERROR(x, args...) LOG_E(X2AP, x, ##args)
# define X2AP_WARN(x, args...) LOG_W(X2AP, x, ##args)
# define X2AP_DEBUG(x, args...) LOG_D(X2AP, x, ##args)
diff --git a/openair3/NAS/COMMON/UTIL/nas_log.c b/openair3/NAS/COMMON/UTIL/nas_log.c
deleted file mode 100644
index 6af90c4be8..0000000000
--- a/openair3/NAS/COMMON/UTIL/nas_log.c
+++ /dev/null
@@ -1,273 +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
- */
-
-/*****************************************************************************
-Source nas_log.c
-
-Version 0.1
-
-Date 2012/02/28
-
-Product NAS stack
-
-Subsystem Utilities
-
-Author Frederic Maurel
-
-Description Usefull logging functions
-
-*****************************************************************************/
-
-#include "nas_log.h"
-#if defined(NAS_BUILT_IN_UE) && defined(NAS_UE)
-int nas_log_func_indent;
-#else
-#include // stderr, sprintf, fprintf, vfprintf
-#include // va_list, va_start, va_end
-#include // strlen
-
-/****************************************************************************/
-/**************** E X T E R N A L D E F I N I T I O N S ****************/
-/****************************************************************************/
-
-/* ANSI escape codes for colored display */
-#define LOG_BLACK "\033[30m"
-#define LOG_RED "\033[31m"
-#define LOG_GREEN "\033[32m"
-#define LOG_YELLOW "\033[33m"
-#define LOG_BLUE "\033[34m"
-#define LOG_MAGENTA "\033[35m"
-#define LOG_CYAN "\033[36m"
-#define LOG_WHITE "\033[37m"
-#define LOG_END "\033[0m"
-#define LOG_AUTO LOG_END
-
-/****************************************************************************/
-/******************* L O C A L D E F I N I T I O N S *******************/
-/****************************************************************************/
-
-/* ------------------------
- * Internal logging context
- * ------------------------
- * Internal logging context consists on:
- * - The file name and the line number from where the data have been
- * logged. These information are gathered into a string that will
- * be displayed as a prefix of the logging trace with the format
- * filename[line]
- * - The severity level filter
- * - The indentation level to convey FUNC logging traces
- * - The data definition of each logging trace level: name and mask
- * (the mask is used against the severity level filter to enable
- * or disable specific logging traces)
- */
-typedef struct {
-#define LOG_PREFIX_SIZE 118
- char prefix[LOG_PREFIX_SIZE];
- unsigned char filter;
- int indent;
- const struct {
- char* name;
- unsigned char mask;
- char* color;
- } level[];
-} log_context_t;
-
-/*
- * Definition of the logging context
- */
-static log_context_t _log_context = {
- "", /* prefix */
- 0x00, /* filter */
- 0, /* indent */
- {
- { "DEBUG", NAS_LOG_DEBUG, LOG_GREEN }, /* DEBUG */
- { "INFO", NAS_LOG_INFO, LOG_AUTO }, /* INFO */
- { "WARNING", NAS_LOG_WARNING, LOG_BLUE }, /* WARNING */
- { "ERROR", NAS_LOG_ERROR, LOG_RED }, /* ERROR */
- { "", NAS_LOG_FUNC, LOG_AUTO }, /* FUNC_IN */
- { "", NAS_LOG_FUNC, LOG_AUTO }, /* FUNC_OUT */
- } /* level[] */
-};
-
-/* Maximum number of bytes into a line of dump logging data */
-#define LOG_DUMP_LINE_SIZE 16
-
-/****************************************************************************/
-/****************** E X P O R T E D F U N C T I O N S ******************/
-/****************************************************************************/
-
-/****************************************************************************
- ** **
- ** Name: log_init() **
- ** **
- ** Description: Initializes internal logging data **
- ** **
- ** Inputs: filter: Value of the severity level that will be **
- ** used as a filter to enable or disable **
- ** specific logging traces **
- ** Others: None **
- ** **
- ** Outputs: Return: None **
- ** Others: None **
- ** **
- ***************************************************************************/
-void nas_log_init(char filter)
-{
- _log_context.filter = filter;
-}
-
-/****************************************************************************
- ** **
- ** Name: log_data() **
- ** **
- ** Description: Defines internal logging data **
- ** **
- ** Inputs: filename: Name of the file from where the data have **
- ** been logged **
- ** line: Number of the line in the file **
- ** Others: None **
- ** **
- ** Outputs: Return: None **
- ** Others: None **
- ** **
- ***************************************************************************/
-void log_data(const char* filename, int line)
-{
- int len = strlen(filename) + 2 + 1; //2:[], 1:/0
- if (line > 9999) len+=5;
- else if (line > 999) len+=4;
- else if (line > 99) len+=3;
- else if (line > 9) len+=2;
- else len+=1;
- if (len > LOG_PREFIX_SIZE) {
- snprintf(_log_context.prefix, LOG_PREFIX_SIZE, "%s:%d", &filename[len - LOG_PREFIX_SIZE], line);
- } else {
- snprintf(_log_context.prefix, LOG_PREFIX_SIZE, "%s:%d", filename, line);
- }
-}
-
-/****************************************************************************
- ** **
- ** Name: log_trace() **
- ** **
- ** Description: Displays logging data **
- ** **
- ** Inputs: severity: Severity level of the logging data **
- ** data: Formated logging data to display **
- ** Others: None **
- ** **
- ** Outputs: Return: None **
- ** Others: None **
- ** **
- ***************************************************************************/
-void log_trace(log_severity_t severity, const char* data, ...)
-{
- int i;
-
- /* Sanity check */
- if (severity > LOG_SEVERITY_MAX) return;
-
- /* Display only authorized logging traces */
- if (_log_context.level[severity].mask & _log_context.filter) {
- va_list argp;
-
- /*
- * First, display internal logging data (logging trace prefix: file
- * name and line number from where the data have been logged) and
- * the severity level.
- */
- fprintf(stderr, "%s%-120.118s%-10s", _log_context.level[severity].color,
- _log_context.prefix, _log_context.level[severity].name);
- {
- /* Next, perform indentation for FUNC logging trace */
- if (severity == FUNC_OUT) {
- _log_context.indent--;
- }
-
- for (i=0; i<_log_context.indent; i++) {
- fprintf(stderr, " ");
- }
-
- if (severity == FUNC_IN) {
- _log_context.indent++;
- }
- }
-
- /* Finally, display logging data */
- va_start(argp, data);
- vfprintf(stderr, data, argp);
-
- /* Terminate with line feed character */
- fprintf(stderr, "%s\n", LOG_END);
-
- va_end(argp);
- }
-}
-
-/****************************************************************************
- ** **
- ** Name: log_dump() **
- ** **
- ** Description: Dump logging data **
- ** **
- ** Inputs: data: Logging data to dump **
- ** len: Number of bytes to be dumped **
- ** Others: None **
- ** **
- ** Outputs: Return: None **
- ** Others: None **
- ** **
- ***************************************************************************/
-void log_dump(const char* data, int len)
-{
- int i;
-
- /* Display only authorized logging traces */
- if ( (len > 0) && (NAS_LOG_HEX & _log_context.filter) ) {
- int bytes = 0;
-
- fprintf(stderr, "\n\t");
-
- for (i=0; i < len; i++) {
- fprintf(stderr, "%.2hx ", (const unsigned char) data[i]);
-
- /* Add new line when the number of displayed bytes exceeds
- * the line's size */
- if ( ++bytes > (LOG_DUMP_LINE_SIZE - 1) ) {
- bytes = 0;
- fprintf(stderr, "\n\t");
- }
- }
-
- if (bytes % LOG_DUMP_LINE_SIZE) {
- fprintf(stderr, "\n");
- }
-
- fprintf(stderr, "\n");
- fflush(stderr);
- }
-}
-
-/****************************************************************************/
-/********************* L O C A L F U N C T I O N S *********************/
-/****************************************************************************/
-#endif
-
diff --git a/openair3/NAS/COMMON/UTIL/nas_log.h b/openair3/NAS/COMMON/UTIL/nas_log.h
index c36e0795c7..b41e34c51b 100644
--- a/openair3/NAS/COMMON/UTIL/nas_log.h
+++ b/openair3/NAS/COMMON/UTIL/nas_log.h
@@ -95,7 +95,7 @@ typedef enum {
/****************** E X P O R T E D F U N C T I O N S ******************/
/****************************************************************************/
-#if defined(NAS_BUILT_IN_UE) && defined(NAS_UE)
+#ifdef LOG_E
# define LOG_TRACE(s, x, args...) \
do { \
switch (s) { \
@@ -106,54 +106,21 @@ do { \
} \
} while (0)
-# define LOG_DUMP(dATA, lEN) \
-do { \
- char buffer[3*lEN + 1]; \
- int i; \
- for (i = 0; i < lEN; i++) \
- sprintf (&buffer[3*i], "%02x ", dATA[i]); \
- LOG_D(NAS, " Dump %d: %s\n", lEN, buffer); \
-} while (0)
-
-# define LOG_FUNC_IN \
-do { \
- LOG_D(NAS, " %s:%d %*sEntering %s()\n", __FILE__, __LINE__, nas_log_func_indent, "", __FUNCTION__); \
- nas_log_func_indent += 2; \
-} while (0)
-
-# define LOG_FUNC_OUT \
-do { \
- nas_log_func_indent -= 2; \
- LOG_D(NAS, " %s:%d %*sLeaving %s()\n", __FILE__, __LINE__, nas_log_func_indent, "", __FUNCTION__); \
-} while (0)
-
-# define LOG_FUNC_RETURN(rETURNcODE) \
-do { \
- nas_log_func_indent -= 2; \
- LOG_D(NAS, " %s:%d %*sLeaving %s(rc = %ld)\n", __FILE__, __LINE__, nas_log_func_indent, "", \
- __FUNCTION__, (long) (rETURNcODE)); \
- return (rETURNcODE); \
-} while (0)
+# define LOG_DUMP(dATA, lEN) LOG_DUMPMSG(NAS, DEBUG_NAS,dATA, lEN, " Dump %d:\n", lEN)
+# define LOG_FUNC_IN LOG_ENTER(NAS)
+# define LOG_FUNC_OUT LOG_END(NAS)
+# define LOG_FUNC_RETURN(rETURNcODE) LOG_RETURN(NAS,rETURNcODE)
extern int nas_log_func_indent;
#else
-# define LOG_TRACE log_data(__FILE__, __LINE__); log_trace
-# define LOG_DUMP(a, b) log_dump((a),(b));
+# define LOG_TRACE(s, x, args...)
+# define LOG_DUMP(dATA, lEN) LOG_DUMPMSG(NAS, LOG_DUMP_CHAR,dATA, lEN, " Dump %d:\n", lEN)
-# define LOG_FUNC_IN LOG_TRACE(FUNC_IN, "Entering %s()", __FUNCTION__)
-# define LOG_FUNC_OUT LOG_TRACE(FUNC_OUT, "Leaving %s()", __FUNCTION__)
-# define LOG_FUNC_RETURN(rETURNcODE) \
-do { \
- LOG_TRACE(FUNC_OUT, "Leaving %s(rc = %ld)", __FUNCTION__, \
- (long) (rETURNcODE)); \
- return (rETURNcODE); \
-} while(0)
+# define LOG_FUNC_IN
+# define LOG_FUNC_OUT
+# define LOG_FUNC_RETURN(rETURNcODE) return rETURNcODE \
-void nas_log_init(char filter);
-void log_data(const char* filename, int line);
-void log_trace(log_severity_t severity, const char* data, ...);
-void log_dump(const char* data, int len);
#endif
#endif /* __NAS_LOG_H__*/
diff --git a/openair3/NAS/UE/EMM/SAP/emm_fsm.c b/openair3/NAS/UE/EMM/SAP/emm_fsm.c
index d614b9ec7e..5a715727ad 100644
--- a/openair3/NAS/UE/EMM/SAP/emm_fsm.c
+++ b/openair3/NAS/UE/EMM/SAP/emm_fsm.c
@@ -208,8 +208,7 @@ emm_fsm_state_t emm_fsm_initialize()
{
LOG_FUNC_IN;
- LOG_FUNC_OUT;
- return EMM_NULL;
+ LOG_FUNC_RETURN(EMM_NULL);
}
/****************************************************************************
diff --git a/openair3/S1AP/s1ap_common.c b/openair3/S1AP/s1ap_common.c
index 7c4f970af2..d31c6e5839 100644
--- a/openair3/S1AP/s1ap_common.c
+++ b/openair3/S1AP/s1ap_common.c
@@ -32,26 +32,9 @@
#include "s1ap_common.h"
#include "S1AP_S1AP-PDU.h"
-int asn_debug = 0;
+
int asn1_xer_print = 0;
-#if defined(EMIT_ASN_DEBUG_EXTERN)
-inline void ASN_DEBUG(const char *fmt, ...)
-{
- if (asn_debug) {
- int adi = asn_debug_indent;
- va_list ap;
- va_start(ap, fmt);
- fprintf(stderr, "[ASN1]");
-
- while(adi--) fprintf(stderr, " ");
-
- vfprintf(stderr, fmt, ap);
- fprintf(stderr, "\n");
- va_end(ap);
- }
-}
-#endif
void s1ap_handle_criticality(S1AP_Criticality_t criticality)
{
diff --git a/openair3/S1AP/s1ap_common.h b/openair3/S1AP/s1ap_common.h
index 8a2faa311f..94b3e43bc6 100644
--- a/openair3/S1AP/s1ap_common.h
+++ b/openair3/S1AP/s1ap_common.h
@@ -31,13 +31,16 @@
#ifndef S1AP_COMMON_H_
#define S1AP_COMMON_H_
-/* Defined in asn_internal.h */
-// extern int asn_debug_indent;
-extern int asn_debug;
-#if defined(EMIT_ASN_DEBUG_EXTERN)
-inline void ASN_DEBUG(const char *fmt, ...);
+#include "common/utils/LOG/log.h"
+/* replace ASN_DEBUG defined in asn_internal.h by oai tracing system
+ Would be cleaner to modify asn_internal.h but it seems to come
+ from non oai source, with BSD license, so prefer to do that here..
+*/
+#ifdef ASN_DEBUG
+# undef ASN_DEBUG
#endif
+#define ASN_DEBUG( x... ) LOG_I(ASN, x)
#include "S1AP_ProtocolIE-Field.h"
#include "S1AP_S1AP-PDU.h"
diff --git a/openair3/S1AP/s1ap_eNB_handlers.c b/openair3/S1AP/s1ap_eNB_handlers.c
index 9b150fe751..5c6b208b87 100644
--- a/openair3/S1AP/s1ap_eNB_handlers.c
+++ b/openair3/S1AP/s1ap_eNB_handlers.c
@@ -1043,7 +1043,7 @@ int s1ap_eNB_handle_paging(uint32_t assoc_id,
/* Paging procedure -> stream != 0 */
if (stream == 0) {
- S1AP_ERROR("[SCTP %d] Received Paging procedure on stream (%d)\n",
+ LOG_W(S1AP,"[SCTP %d] Received Paging procedure on stream (%d)\n",
assoc_id, stream);
return -1;
}
diff --git a/openair3/S1AP/s1ap_eNB_nas_procedures.c b/openair3/S1AP/s1ap_eNB_nas_procedures.c
index f2f84de32d..ebd5bab4fd 100644
--- a/openair3/S1AP/s1ap_eNB_nas_procedures.c
+++ b/openair3/S1AP/s1ap_eNB_nas_procedures.c
@@ -473,17 +473,11 @@ int s1ap_eNB_handle_nas_downlink(uint32_t assoc_id,
MSC_LOG_RX_DISCARDED_MESSAGE(
MSC_S1AP_ENB,
MSC_S1AP_MME,
- (const char *)NULL,
NULL,
+ 0,
MSC_AS_TIME_FMT" downlinkNASTransport eNB_ue_s1ap_id %u mme_ue_s1ap_id %u",
- 0,0,//MSC_AS_TIME_ARGS(ctxt_pP),
enb_ue_s1ap_id,
mme_ue_s1ap_id);
- /* TODO: fix this log - the original version is suspicious (twice downlink_NAS_transport_p->eNB_UE_S1AP_ID?) */
- /*S1AP_ERROR("[SCTP %d] Received NAS downlink message for non existing UE context eNB_UE_S1AP_ID: 0x%"PRIx32" %u\n",
- assoc_id,
- downlink_NAS_transport_p->eNB_UE_S1AP_ID,
- downlink_NAS_transport_p->eNB_UE_S1AP_ID);*/
S1AP_ERROR("[SCTP %d] Received NAS downlink message for non existing UE context eNB_UE_S1AP_ID: 0x%lx\n",
assoc_id,
enb_ue_s1ap_id);
@@ -518,11 +512,10 @@ int s1ap_eNB_handle_nas_downlink(uint32_t assoc_id,
MSC_LOG_RX_MESSAGE(
MSC_S1AP_ENB,
MSC_S1AP_MME,
- (const char *)NULL,
NULL,
+ 0,
MSC_AS_TIME_FMT" downlinkNASTransport eNB_ue_s1ap_id %u mme_ue_s1ap_id %u",
- 0,0,//MSC_AS_TIME_ARGS(ctxt_pP),
- enb_ue_s1ap_id,
+ assoc_id,
mme_ue_s1ap_id);
S1AP_FIND_PROTOCOLIE_BY_ID(S1AP_DownlinkNASTransport_IEs_t, ie, container,
diff --git a/openair3/UTILS/log.c b/openair3/UTILS/log.c
deleted file mode 100644
index 5ddebd415c..0000000000
--- a/openair3/UTILS/log.c
+++ /dev/null
@@ -1,43 +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
- */
-
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "log.h"
-
-/* mme log */
-int log_enabled = 0;
-
-int log_init(const mme_config_t *mme_config_p,
- log_specific_init_t specific_init)
-{
- if (mme_config_p->verbosity_level == 1) {
- log_enabled = 1;
- } else if (mme_config_p->verbosity_level == 2) {
- log_enabled = 1;
- } else {
- log_enabled = 0;
- }
-
- return specific_init(mme_config_p->verbosity_level);
-}
diff --git a/openair3/UTILS/log.h b/openair3/UTILS/log.h
deleted file mode 100644
index 7b712df755..0000000000
--- a/openair3/UTILS/log.h
+++ /dev/null
@@ -1,37 +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
- */
-
-#include "mme_config.h"
-
-#ifndef LOG_H_
-#define LOG_H_
-
-/* asn1c debug */
-extern int asn_debug;
-extern int asn1_xer_print;
-extern int fd_g_debug_lvl;
-
-typedef int (*log_specific_init_t)(int log_level);
-
-int log_init(const mme_config_t *mme_config,
- log_specific_init_t specific_init);
-
-#endif /* LOG_H_ */
diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c
index 7ff3b820dc..d25826e82e 100644
--- a/targets/ARCH/COMMON/common_lib.c
+++ b/targets/ARCH/COMMON/common_lib.c
@@ -100,7 +100,7 @@ int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_param
libname=OAI_TP_LIBNAME;
shlib_fdesc[0].fname="transport_init";
}
- ret=load_module_shlib(libname,shlib_fdesc,1);
+ ret=load_module_shlib(libname,shlib_fdesc,1,NULL);
if (ret < 0) {
fprintf(stderr,"Library %s couldn't be loaded\n",libname);
} else {
diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h
index 433e29e97d..0ef3cd233f 100644
--- a/targets/ARCH/COMMON/common_lib.h
+++ b/targets/ARCH/COMMON/common_lib.h
@@ -199,6 +199,8 @@ typedef struct {
double tx_bw;
//! clock source
clock_source_t clock_source;
+ //! Manual SDR IP address
+ char *sdr_addrs;
//! Auto calibration flag
int autocal[4];
//! rf devices work with x bits iqs when oai have its own iq format
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
index e2ecaed044..47cd12d816 100644
--- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
@@ -950,11 +950,15 @@ int trx_usrp_recplay_config_init(paramdef_t *usrp_recplay_params) {
#endif
extern "C" {
- /*! \brief Initialize Openair USRP target. It returns 0 if OK
- * \param device the hardware to use
- * \param openair0_cfg RF frontend parameters set by application
- */
- int device_init(openair0_device* device, openair0_config_t *openair0_cfg) {
+ /*! \brief Initialize Openair USRP target. It returns 0 if OK
+ * \param device the hardware to use
+ * \param openair0_cfg RF frontend parameters set by application
+ */
+ int device_init(openair0_device* device, openair0_config_t *openair0_cfg) {
+
+ LOG_D(PHY, "openair0_cfg[0].sdr_addrs == '%s'\n", openair0_cfg[0].sdr_addrs);
+ LOG_D(PHY, "openair0_cfg[0].clock_source == '%d'\n", openair0_cfg[0].clock_source);
+
#if defined(USRP_REC_PLAY)
paramdef_t usrp_recplay_params[7];
struct sysinfo systeminfo;
@@ -1022,8 +1026,30 @@ extern "C" {
// Initialize USRP device
device->openair0_cfg = openair0_cfg;
- std::string args = "type=b200";
- uhd::device_addrs_t device_adds = uhd::device::find(args);
+ std::string args = "type=b200";
+
+ char *addr_args = NULL;
+ // Check whether sdr_addrs is set in the config or not
+ if (openair0_cfg[0].sdr_addrs != NULL) {
+ if (strcmp(openair0_cfg[0].sdr_addrs, "0.0.0.0") != 0) {
+ // Check whether sdr_addrs contains multiple IP addresses
+ // and split and add them to addr_args
+ if (strstr(openair0_cfg[0].sdr_addrs, ",") != NULL) {
+ char *addr0 = openair0_cfg[0].sdr_addrs;
+ // Replace , with \0
+ strsep(&openair0_cfg[0].sdr_addrs, ",");
+ char *addr1 = openair0_cfg[0].sdr_addrs;
+ // Allocate memory for ",addr0=,addr1=\0" and the addresses
+ size_t addr_args_len = sizeof(char)*(15 + strlen(addr0) + strlen(addr1));
+ addr_args = (char *)malloc(addr_args_len);
+ snprintf(addr_args, addr_args_len, ",addr0=%s,addr1=%s", addr0, addr1);
+ args += addr_args;
+ LOG_D(PHY, "addr_args == '%s'\n", addr_args);
+ }
+ }
+ }
+
+ uhd::device_addrs_t device_adds = uhd::device::find(args);
int vers=0,subvers=0,subsubvers=0;
int bw_gain_adjust=0;
@@ -1037,12 +1063,17 @@ extern "C" {
LOG_I(PHY,"Checking for USRPs : UHD %s (%d.%d.%d)\n",
uhd::get_version_string().c_str(),vers,subvers,subsubvers);
- if(device_adds.size() == 0) {
- double usrp_master_clock = 184.32e6;
- std::string args = "type=x300";
+ if(device_adds.size() == 0) {
- // workaround for an api problem, master clock has to be set with the constructor not via set_master_clock_rate
- args += boost::str(boost::format(",master_clock_rate=%f") % usrp_master_clock);
+ double usrp_master_clock = 184.32e6;
+ std::string args = "type=x300";
+
+ if (addr_args) {
+ args += addr_args;
+ }
+
+ // workaround for an api problem, master clock has to be set with the constructor not via set_master_clock_rate
+ args += boost::str(boost::format(",master_clock_rate=%f") % usrp_master_clock);
// args += ",num_send_frames=256,num_recv_frames=256, send_frame_size=4096, recv_frame_size=4096";
uhd::device_addrs_t device_adds = uhd::device::find(args);
@@ -1232,12 +1263,14 @@ extern "C" {
}
}
- for(int i=0; iusrp->get_tx_num_channels(); i++) {
- ::uhd::gain_range_t gain_range_tx = s->usrp->get_tx_gain_range(i);
- if (iusrp->set_tx_rate(openair0_cfg[0].sample_rate,i);
- s->usrp->set_tx_freq(openair0_cfg[0].tx_freq[i],i);
- s->usrp->set_tx_gain(gain_range_tx.stop()-openair0_cfg[0].tx_gain[i],i);
+ LOG_D(PHY, "usrp->get_tx_num_channels() == %zd\n", s->usrp->get_tx_num_channels());
+ LOG_D(PHY, "openair0_cfg[0].tx_num_channels == %d\n", openair0_cfg[0].tx_num_channels);
+ for(int i=0; iusrp->get_tx_num_channels(); i++) {
+ ::uhd::gain_range_t gain_range_tx = s->usrp->get_tx_gain_range(i);
+ if (iusrp->set_tx_rate(openair0_cfg[0].sample_rate,i);
+ s->usrp->set_tx_freq(openair0_cfg[0].tx_freq[i],i);
+ s->usrp->set_tx_gain(gain_range_tx.stop()-openair0_cfg[0].tx_gain[i],i);
LOG_I(PHY,"USRP TX_GAIN:%3.2lf gain_range:%3.2lf tx_gain:%3.2lf\n", gain_range_tx.stop()-openair0_cfg[0].tx_gain[i], gain_range_tx.stop(), openair0_cfg[0].tx_gain[i]);
}
diff --git a/targets/ARCH/tcp_bridge/tcp_bridge_oai.c b/targets/ARCH/tcp_bridge/tcp_bridge_oai.c
index ba6d96db93..4d7d49d9c7 100644
--- a/targets/ARCH/tcp_bridge/tcp_bridge_oai.c
+++ b/targets/ARCH/tcp_bridge/tcp_bridge_oai.c
@@ -253,7 +253,7 @@ int tcp_bridge_ue_first_read(openair0_device *device, openair0_timestamp *timest
tcp_bridge_state_t *t = device->priv;
uint32_t b[t->samples_per_subframe * 12];
- memset(b, 0, nsamps * 4);
+ memset(b, 0, t->samples_per_subframe * 12 * 4);
int n = fullwrite(t->sock, b, t->samples_per_subframe * 12 * 4);
if (n != t->samples_per_subframe * 12 * 4) {
printf("tcp_bridge: write error ret %d error %s\n", n, strerror(errno));
diff --git a/targets/COMMON/create_tasks.c b/targets/COMMON/create_tasks.c
index 49b078dede..aea5a5ab99 100644
--- a/targets/COMMON/create_tasks.c
+++ b/targets/COMMON/create_tasks.c
@@ -22,7 +22,7 @@
#if defined(ENABLE_ITTI)
# include "intertask_interface.h"
# include "create_tasks.h"
-# include "log.h"
+# include "common/utils/LOG/log.h"
# include "common/ran_context.h"
# ifdef OPENAIR2
@@ -31,6 +31,8 @@
# include "nas_ue_task.h"
# include "udp_eNB_task.h"
# include "gtpv1u_eNB_task.h"
+# else
+# define EPC_MODE_ENABLED 0
# endif
# include "RRC/LTE/rrc_defs.h"
# endif
@@ -75,6 +77,7 @@ int create_tasks(uint32_t enb_nb)
}
}
+
switch (type) {
case ngran_eNB_CU:
case ngran_ng_eNB_CU:
diff --git a/targets/COMMON/create_tasks_ue.c b/targets/COMMON/create_tasks_ue.c
index 7e7d545c9f..c1faa8d406 100644
--- a/targets/COMMON/create_tasks_ue.c
+++ b/targets/COMMON/create_tasks_ue.c
@@ -22,7 +22,7 @@
#if defined(ENABLE_ITTI)
# include "intertask_interface.h"
# include "create_tasks.h"
-# include "log.h"
+# include "common/utils/LOG/log.h"
# ifdef OPENAIR2
# if defined(ENABLE_USE_MME)
diff --git a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.calisson.conf b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.calisson.conf
index 09406d98cf..7ec670d568 100755
--- a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.calisson.conf
+++ b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.calisson.conf
@@ -47,6 +47,9 @@ eNBs =
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24";
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.13.10/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
diff --git a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.memphis.conf b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.memphis.conf
index 47c12a7926..e3a0ea3c56 100755
--- a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.memphis.conf
+++ b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.memphis.conf
@@ -59,6 +59,9 @@ eNBs =
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24";
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.13.10/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
# available options for level: error, warn, notice, info, debug, trace
# available options for verbosity: none, low, medium, high, full
diff --git a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.nord.conf b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.nord.conf
index 4360884c1d..591257ff71 100755
--- a/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.nord.conf
+++ b/targets/PROJECTS/CENTOS-LTE-EPC-INTEGRATION/CONF/enb.centos.nord.conf
@@ -46,6 +46,9 @@ eNBs =
ENB_INTERFACE_NAME_FOR_S1U = "eth1";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24";
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.13.10/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf
index 73da2a8b3f..bec9c2c6dd 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf
@@ -151,6 +151,9 @@ eNBs =
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
log_config :
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf
index bd0503a466..834b6cf044 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf
@@ -151,6 +151,9 @@ eNBs =
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
log_config :
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf
index 9a2ca88257..6b3614f490 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf
@@ -149,12 +149,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth6";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth6";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf
index 99df987b43..fb184549c5 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf
@@ -183,12 +183,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "lo";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24";
ENB_INTERFACE_NAME_FOR_S1U = "lo";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.13.10/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf
index 7d73e55c6c..c6ace3b68f 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf
@@ -183,14 +183,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "lo";
ENB_IPV4_ADDRESS_FOR_S1_MME = "127.0.0.2/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.4/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
-
-
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "127.0.0.2/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
index 5c7b2ce66c..025f46eaed 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
@@ -183,12 +183,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eno1";
ENB_IPV4_ADDRESS_FOR_S1_MME = "10.64.45.62/23";
ENB_INTERFACE_NAME_FOR_S1U = "eno1";
ENB_IPV4_ADDRESS_FOR_S1U = "10.64.45.62/23";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.111/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf
index 1197c4ad93..e46467598e 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf
@@ -150,12 +150,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf
index c4d23bac42..a6efe74283 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf
@@ -152,12 +152,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "lo";
ENB_IPV4_ADDRESS_FOR_S1_MME = "127.0.0.2/24";
ENB_INTERFACE_NAME_FOR_S1U = "lo";
ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.5/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "127.0.0.2/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf
index 71a163209d..fefb4b11de 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf
@@ -153,12 +153,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "vboxnet0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.56.1/24";
ENB_INTERFACE_NAME_FOR_S1U = "vboxnet0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.56.1/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.56.1/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf
index a6da42c2f5..cd21fb935e 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf
@@ -183,12 +183,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "lo";
ENB_IPV4_ADDRESS_FOR_S1_MME = "127.0.0.2/24";
ENB_INTERFACE_NAME_FOR_S1U = "lo";
ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.5/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "127.0.0.2/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf
index 550de4e1a2..581012d7d3 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf
@@ -152,12 +152,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.5/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "192.168.12.19/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf
index 2b5a0ca684..5f9f8c4d7b 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf
@@ -151,12 +151,14 @@ eNBs =
NETWORK_INTERFACES :
{
-
ENB_INTERFACE_NAME_FOR_S1_MME = "lo";
ENB_IPV4_ADDRESS_FOR_S1_MME = "127.0.0.2/24";
ENB_INTERFACE_NAME_FOR_S1U = "lo";
ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.5/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152
+
+ ENB_IPV4_ADDRESS_FOR_X2C = "127.0.0.2/24";
+ ENB_PORT_FOR_X2C = 36422; # Spec 36422
};
}
);
diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index eddda38dc6..ed881bae07 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -1882,13 +1882,13 @@ void *ru_thread_synch(void *arg) {
LOG_I(PHY,"Estimated sync_pos %d, peak_val %d => timing offset %d\n",sync_pos,peak_val,ru->rx_offset);
-LOG_M_BEGIN(RU)
- if ((peak_val > 300000) && (sync_pos > 0)) {
- LOG_M("ru_sync.m","sync",(void*)&sync_corr[0],fp->samples_per_tti*5,1,2);
- LOG_M("ru_rx.m","rxs",&(ru->eNB_list[0]->common_vars.rxdata[0][0]),fp->samples_per_tti*10,1,1);
- exit(-1);
- }
-LOG_M_END
+ if (LOG_DEBUGFLAG(RU)) {
+ if ((peak_val > 300000) && (sync_pos > 0)) {
+ LOG_M("ru_sync.m","sync",(void*)&sync_corr[0],fp->samples_per_tti*5,1,2);
+ LOG_M("ru_rx.m","rxs",&(ru->eNB_list[0]->common_vars.rxdata[0][0]),fp->samples_per_tti*10,1,1);
+ exit(-1);
+ }
+ }
ru->in_synch=1;
}
}
@@ -2838,6 +2838,24 @@ void RCconfig_RU(void) {
RC.ru[j]->num_eNB = 0;
for (i=0;inum_eNB;i++) RC.ru[j]->eNB_list[i] = RC.eNB[RUParamList.paramarray[j][RU_ENB_LIST_IDX].iptr[i]][0];
+ if (config_isparamset(RUParamList.paramarray[j], RU_SDR_ADDRS)) {
+ RC.ru[j]->openair0_cfg.sdr_addrs = strdup(*(RUParamList.paramarray[j][RU_SDR_ADDRS].strptr));
+ }
+
+ if (config_isparamset(RUParamList.paramarray[j], RU_SDR_CLK_SRC)) {
+ if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "internal") == 0) {
+ RC.ru[j]->openair0_cfg.clock_source = internal;
+ LOG_D(PHY, "RU clock source set as internal\n");
+ } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "external") == 0) {
+ RC.ru[j]->openair0_cfg.clock_source = external;
+ LOG_D(PHY, "RU clock source set as external\n");
+ } else if (strcmp(*(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr), "gpsdo") == 0) {
+ RC.ru[j]->openair0_cfg.clock_source = gpsdo;
+ LOG_D(PHY, "RU clock source set as gpsdo\n");
+ } else {
+ LOG_E(PHY, "Erroneous RU clock source in the provided configuration file: '%s'\n", *(RUParamList.paramarray[j][RU_SDR_CLK_SRC].strptr));
+ }
+ }
if (strcmp(*(RUParamList.paramarray[j][RU_LOCAL_RF_IDX].strptr), "yes") == 0) {
if ( !(config_isparamset(RUParamList.paramarray[j],RU_LOCAL_IF_NAME_IDX)) ) {
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 86f1d92c26..2145e5d98c 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -108,6 +108,10 @@ unsigned char scope_enb_num_ue = 2;
static pthread_t forms_thread; //xforms
#endif //XFORMS
+#ifndef ENABLE_USE_MME
+#define EPC_MODE_ENABLED 0
+#endif
+
pthread_cond_t nfapi_sync_cond;
pthread_mutex_t nfapi_sync_mutex;
int nfapi_sync_var=-1; //!< protected by mutex \ref nfapi_sync_mutex
@@ -514,7 +518,7 @@ void *l2l1_task(void *arg) {
#endif
-static void get_options(void) {
+static void get_options(unsigned int *start_msc) {
int tddflag, nonbiotflag;
@@ -548,11 +552,9 @@ static void get_options(void) {
set_glog(glog_level);
}
if (start_telnetsrv) {
- load_module_shlib("telnetsrv",NULL,0);
+ load_module_shlib("telnetsrv",NULL,0,NULL);
}
-
-
if ( !(CONFIG_ISFLAGSET(CONFIG_ABORT)) ) {
memset((void*)&RC,0,sizeof(RC));
/* Read RC configuration file */
@@ -788,7 +790,7 @@ int stop_L1L2(module_id_t enb_id)
oai_exit = 1;
if (!RC.ru) {
- LOG_F(ENB_APP, "no RU configured\n");
+ LOG_UI(ENB_APP, "no RU configured\n");
return -1;
}
@@ -925,6 +927,7 @@ int main( int argc, char **argv )
#if defined (XFORMS)
int ret;
#endif
+ unsigned int start_msc=0;
if ( load_configmodule(argc,argv) == NULL) {
exit_fun("[SOFTMODEM] Error, configuration module init failed\n");
@@ -942,7 +945,7 @@ int main( int argc, char **argv )
printf("Reading in command-line options\n");
- get_options ();
+ get_options (&start_msc);
if (CONFIG_ISFLAGSET(CONFIG_ABORT) ) {
fprintf(stderr,"Getting configuration failed\n");
exit(-1);
@@ -967,22 +970,19 @@ int main( int argc, char **argv )
#if defined(ENABLE_ITTI)
- printf("ITTI init\n");
+ printf("ITTI init, useMME: %i\n" ,EPC_MODE_ENABLED);
+
itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info);
// initialize mscgen log after ITTI
+ if (start_msc) {
+ load_module_shlib("msc",NULL,0,&msc_interface);
+ }
MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX);
#endif
if (opt_type != OPT_NONE) {
- radio_type_t radio_type;
-
- if (frame_parms[0]->frame_type == FDD)
- radio_type = RADIO_TYPE_FDD;
- else
- radio_type = RADIO_TYPE_TDD;
-
- if (init_opt(in_path, in_ip, NULL, radio_type) == -1)
+ if (init_opt(in_path, in_ip) == -1)
LOG_E(OPT,"failed to run OPT \n");
}
diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h
index 2f8209f2d3..2eb4b0d60d 100644
--- a/targets/RT/USER/lte-softmodem.h
+++ b/targets/RT/USER/lte-softmodem.h
@@ -192,8 +192,9 @@
}
#define CONFIG_HLP_FLOG "Enable online log \n"
-#define CONFIG_HLP_LOGL "Set the global log level, valide options: (9:trace, 8/7:debug, 6:info, 4:warn, 3:error)\n"
+#define CONFIG_HLP_LOGL "Set the global log level, valide options: (4:trace, 3:debug, 2:info, 1:warn, (0:error))\n"
#define CONFIG_HLP_TELN "Start embedded telnet server \n"
+#define CONFIG_HLP_MSC "Enable the MSC tracing utility \n"
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* command line parameters for LOG utility */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
@@ -202,6 +203,7 @@
{"R" , CONFIG_HLP_FLOG, 0, uptr:&online_log_messages, defintval:1, TYPE_INT, 0}, \
{"g" , CONFIG_HLP_LOGL, 0, uptr:&glog_level, defintval:0, TYPE_UINT, 0}, \
{"telnetsrv", CONFIG_HLP_TELN, PARAMFLAG_BOOL, uptr:&start_telnetsrv, defintval:0, TYPE_UINT, 0}, \
+{"msc", CONFIG_HLP_MSC, PARAMFLAG_BOOL, uptr:start_msc, defintval:0, TYPE_UINT, 0}, \
}
#define CMDLINE_ONLINELOG_IDX 0
#define CMDLINE_GLOGLEVEL_IDX 1
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index ab84249f9f..66107d79a4 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -446,7 +446,6 @@ static void *UE_thread_synch(void *arg)
int freq_offset=0;
char threadname[128];
- UE->is_synchronized = 0;
printf("UE_thread_sync in with PHY_vars_UE %p\n",arg);
cpu_set_t cpuset;
@@ -522,11 +521,6 @@ static void *UE_thread_synch(void *arg)
printf("Started device, unlocked sync_mutex (UE_sync_thread)\n");
- if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) {
- LOG_E(HW,"Could not start the device\n");
- oai_exit=1;
- }
-
while (oai_exit==0) {
AssertFatal ( 0== pthread_mutex_lock(&UE->proc.mutex_synch), "");
while (UE->proc.instance_cnt_synch < 0)
@@ -755,7 +749,6 @@ static void *UE_thread_rxn_txnp4(void *arg) {
UE_rxtx_proc_t *proc = rtd->proc;
PHY_VARS_UE *UE = rtd->UE;
- proc->instance_cnt_rxtx=-1;
proc->subframe_rx=proc->sub_frame_start;
char threadname[256];
@@ -1457,20 +1450,25 @@ void *UE_thread(void *arg) {
int sub_frame=-1;
//int cumulated_shift=0;
+ if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) {
+ LOG_E(HW,"Could not start the device\n");
+ oai_exit=1;
+ }
while (!oai_exit) {
+#if BASIC_SIMULATOR
+ while (!(UE->proc.instance_cnt_synch < 0)) {
+ printf("ue sync not ready\n");
+ usleep(500*1000);
+ }
+#endif
+
AssertFatal ( 0== pthread_mutex_lock(&UE->proc.mutex_synch), "");
int instance_cnt_synch = UE->proc.instance_cnt_synch;
int is_synchronized = UE->is_synchronized;
AssertFatal ( 0== pthread_mutex_unlock(&UE->proc.mutex_synch), "");
if (is_synchronized == 0) {
-#if BASIC_SIMULATOR
- while (!((instance_cnt_synch = UE->proc.instance_cnt_synch) < 0)) {
- printf("ue sync not ready\n");
- usleep(500*1000);
- }
-#endif
if (instance_cnt_synch < 0) { // we can invoke the synch
// grab 10 ms of signal and wakeup synch thread
for (int i=0; iframe_parms.nb_antennas_rx; i++)
@@ -1661,12 +1659,7 @@ void *UE_thread(void *arg) {
proc->instance_cnt_rxtx++;
LOG_D( PHY, "[SCHED][UE %d] UE RX instance_cnt_rxtx %d subframe %d !!\n", UE->Mod_id, proc->instance_cnt_rxtx,proc->subframe_rx);
- if (proc->instance_cnt_rxtx == 0) {
- if (pthread_cond_signal(&proc->cond_rxtx) != 0) {
- LOG_E( PHY, "[SCHED][UE %d] ERROR pthread_cond_signal for UE RX thread\n", UE->Mod_id);
- exit_fun("nothing to add");
- }
- } else {
+ if (proc->instance_cnt_rxtx != 0) {
LOG_E( PHY, "[SCHED][UE %d] UE RX thread busy (IC %d)!!\n", UE->Mod_id, proc->instance_cnt_rxtx);
if (proc->instance_cnt_rxtx > 2)
exit_fun("instance_cnt_rxtx > 2");
@@ -1717,6 +1710,8 @@ void init_UE_threads(int inst) {
pthread_mutex_init(&UE->proc.mutex_synch,NULL);
pthread_cond_init(&UE->proc.cond_synch,NULL);
+ UE->proc.instance_cnt_synch = -1;
+ UE->is_synchronized = 0;
// the threads are not yet active, therefore access is allowed without locking
int nb_threads=RX_NB_TH;
@@ -1728,6 +1723,7 @@ void init_UE_threads(int inst) {
pthread_mutex_init(&UE->proc.proc_rxtx[i].mutex_rxtx,NULL);
pthread_cond_init(&UE->proc.proc_rxtx[i].cond_rxtx,NULL);
+ UE->proc.proc_rxtx[i].instance_cnt_rxtx = -1;
UE->proc.proc_rxtx[i].sub_frame_start=i;
UE->proc.proc_rxtx[i].sub_frame_step=nb_threads;
printf("Init_UE_threads rtd %d proc %d nb_threads %d i %d\n",rtd->proc->sub_frame_start, UE->proc.proc_rxtx[i].sub_frame_start,nb_threads, i);
diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c
index a2a12f9dd9..422f434710 100644
--- a/targets/RT/USER/lte-uesoftmodem.c
+++ b/targets/RT/USER/lte-uesoftmodem.c
@@ -470,7 +470,7 @@ void *l2l1_task(void *arg) {
extern int16_t dlsch_demod_shift;
-static void get_options(void) {
+static void get_options(unsigned int *start_msc) {
int CC_id;
int tddflag, nonbiotflag;
char *loopfile=NULL;
@@ -505,7 +505,7 @@ static void get_options(void) {
set_glog(glog_level);
}
if (start_telnetsrv) {
- load_module_shlib("telnetsrv",NULL,0);
+ load_module_shlib("telnetsrv",NULL,0,NULL);
}
paramdef_t cmdline_uemodeparams[] =CMDLINE_UEMODEPARAMS_DESC;
@@ -770,6 +770,7 @@ int main( int argc, char **argv )
int CC_id;
uint8_t abstraction_flag=0;
+ unsigned int start_msc=0;
// Default value for the number of UEs. It will hold,
// if not changed from the command line option --num-ues
@@ -797,7 +798,7 @@ int main( int argc, char **argv )
printf("Reading in command-line options\n");
for (int i=0;iframe_type == FDD)
- radio_type = RADIO_TYPE_FDD;
- else
- radio_type = RADIO_TYPE_TDD;
-
- if (init_opt(in_path, in_ip, NULL, radio_type) == -1)
+ if (init_opt(in_path, in_ip) == -1)
LOG_E(OPT,"failed to run OPT \n");
}