add configuration for component carriers
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5707 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
+2
-2
@@ -140,8 +140,8 @@ enum transmission_access_mode{
|
|||||||
|
|
||||||
/// Context data structure for eNB subframe processing
|
/// Context data structure for eNB subframe processing
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/// Component Carrier index
|
/// Component Carrier index
|
||||||
int CC_id;
|
uint8_t CC_id;
|
||||||
/// subframe index
|
/// subframe index
|
||||||
int subframe;
|
int subframe;
|
||||||
/// subframe to act upon for transmission
|
/// subframe to act upon for transmission
|
||||||
|
|||||||
+235
-22
@@ -15,8 +15,8 @@
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with OpenAirInterface.The full GNU General Public License is
|
along with OpenAirInterface.The full GNU General Public License is
|
||||||
included in this distribution in the file called "COPYING". If not,
|
included in this distribution in the file called "COPYING". If not,
|
||||||
see <http://www.gnu.org/licenses/>.
|
see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Contact Information
|
Contact Information
|
||||||
OpenAirInterface Admin: openair_admin@eurecom.fr
|
OpenAirInterface Admin: openair_admin@eurecom.fr
|
||||||
@@ -30,9 +30,9 @@
|
|||||||
/*
|
/*
|
||||||
enb_config.c
|
enb_config.c
|
||||||
-------------------
|
-------------------
|
||||||
AUTHOR : Lionel GAUTHIER, Laurent Winckel
|
AUTHOR : Lionel GAUTHIER, navid nikaein, Laurent Winckel
|
||||||
COMPANY : EURECOM
|
COMPANY : EURECOM
|
||||||
EMAIL : Lionel.Gauthier@eurecom.fr
|
EMAIL : Lionel.Gauthier@eurecom.fr, navid.nikaein@eurecom.fr
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -40,6 +40,7 @@
|
|||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
#include "log_extern.h"
|
||||||
#include "assertions.h"
|
#include "assertions.h"
|
||||||
#include "enb_config.h"
|
#include "enb_config.h"
|
||||||
#if defined(OAI_EMU)
|
#if defined(OAI_EMU)
|
||||||
@@ -77,6 +78,10 @@
|
|||||||
#define ENB_CONFIG_STRING_DOWNLINK_FREQUENCY "downlink_frequency"
|
#define ENB_CONFIG_STRING_DOWNLINK_FREQUENCY "downlink_frequency"
|
||||||
#define ENB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET "uplink_frequency_offset"
|
#define ENB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET "uplink_frequency_offset"
|
||||||
|
|
||||||
|
#define ENB_CONFIG_STRING_COMPONENT_CARRIERS "component_carriers"
|
||||||
|
#define ENB_CONFIG_STRING_CELL_ID "cell_id"
|
||||||
|
#define ENB_CONFIG_STRING_N_RB_DL "N_RB_DL"
|
||||||
|
|
||||||
#define ENB_CONFIG_STRING_MME_IP_ADDRESS "mme_ip_address"
|
#define ENB_CONFIG_STRING_MME_IP_ADDRESS "mme_ip_address"
|
||||||
#define ENB_CONFIG_STRING_MME_IPV4_ADDRESS "ipv4"
|
#define ENB_CONFIG_STRING_MME_IPV4_ADDRESS "ipv4"
|
||||||
#define ENB_CONFIG_STRING_MME_IPV6_ADDRESS "ipv6"
|
#define ENB_CONFIG_STRING_MME_IPV6_ADDRESS "ipv6"
|
||||||
@@ -96,6 +101,26 @@
|
|||||||
#define ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO "info"
|
#define ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO "info"
|
||||||
|
|
||||||
|
|
||||||
|
// per eNB configuration
|
||||||
|
#define ENB_CONFIG_STRING_LOG_CONFIG "log_config"
|
||||||
|
#define ENB_CONFIG_STRING_GLOBAL_LOG_LEVEL "global_log_level"
|
||||||
|
#define ENB_CONFIG_STRING_GLOBAL_LOG_VERBOSITY "global_log_verbosity"
|
||||||
|
#define ENB_CONFIG_STRING_HW_LOG_LEVEL "hw_log_level"
|
||||||
|
#define ENB_CONFIG_STRING_HW_LOG_VERBOSITY "hw_log_verbosity"
|
||||||
|
#define ENB_CONFIG_STRING_PHY_LOG_LEVEL "phy_log_level"
|
||||||
|
#define ENB_CONFIG_STRING_PHY_LOG_VERBOSITY "phy_log_verbosity"
|
||||||
|
#define ENB_CONFIG_STRING_MAC_LOG_LEVEL "mac_log_level"
|
||||||
|
#define ENB_CONFIG_STRING_MAC_LOG_VERBOSITY "mac_log_verbosity"
|
||||||
|
#define ENB_CONFIG_STRING_RLC_LOG_LEVEL "rlc_log_level"
|
||||||
|
#define ENB_CONFIG_STRING_RLC_LOG_VERBOSITY "rlc_log_verbosity"
|
||||||
|
#define ENB_CONFIG_STRING_PDCP_LOG_LEVEL "pdcp_log_level"
|
||||||
|
#define ENB_CONFIG_STRING_PDCP_LOG_VERBOSITY "pdcp_log_verbosity"
|
||||||
|
#define ENB_CONFIG_STRING_RRC_LOG_LEVEL "rrc_log_level"
|
||||||
|
#define ENB_CONFIG_STRING_RRC_LOG_VERBOSITY "rrc_log_verbosity"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define KHz (1000UL)
|
#define KHz (1000UL)
|
||||||
#define MHz (1000 * KHz)
|
#define MHz (1000 * KHz)
|
||||||
|
|
||||||
@@ -141,24 +166,37 @@ static const eutra_band_t eutra_bands[] =
|
|||||||
static Enb_properties_array_t enb_properties;
|
static Enb_properties_array_t enb_properties;
|
||||||
|
|
||||||
static void enb_config_display(void) {
|
static void enb_config_display(void) {
|
||||||
int i;
|
int i,j;
|
||||||
|
|
||||||
printf( "\n----------------------------------------------------------------------\n");
|
printf( "\n----------------------------------------------------------------------\n");
|
||||||
printf( " ENB CONFIG FILE CONTENT LOADED (TBC):\n");
|
printf( " ENB CONFIG FILE CONTENT LOADED (TBC):\n");
|
||||||
printf( "----------------------------------------------------------------------\n");
|
printf( "----------------------------------------------------------------------\n");
|
||||||
for (i = 0; i < enb_properties.number; i++) {
|
for (i = 0; i < enb_properties.number; i++) {
|
||||||
printf( "ENB CONFIG no %u:\n\n", i);
|
printf( "ENB CONFIG for instance %u:\n\n", i);
|
||||||
printf( "\teNB name: \t%s:\n",enb_properties.properties[i]->eNB_name);
|
printf( "\teNB name: \t%s:\n",enb_properties.properties[i]->eNB_name);
|
||||||
printf( "\teNB ID: \t%u:\n",enb_properties.properties[i]->eNB_id);
|
printf( "\teNB ID: \t%u:\n",enb_properties.properties[i]->eNB_id);
|
||||||
printf( "\tCell type: \t%s:\n",enb_properties.properties[i]->cell_type == CELL_MACRO_ENB ? "CELL_MACRO_ENB":"CELL_HOME_ENB");
|
printf( "\tCell type: \t%s:\n",enb_properties.properties[i]->cell_type == CELL_MACRO_ENB ? "CELL_MACRO_ENB":"CELL_HOME_ENB");
|
||||||
printf( "\tTAC: \t%u:\n",enb_properties.properties[i]->tac);
|
printf( "\tTAC: \t%u:\n",enb_properties.properties[i]->tac);
|
||||||
printf( "\tMCC: \t%u:\n",enb_properties.properties[i]->mcc);
|
printf( "\tMCC: \t%u:\n",enb_properties.properties[i]->mcc);
|
||||||
printf( "\tMNC: \t%u:\n",enb_properties.properties[i]->mnc);
|
printf( "\tMNC: \t%u:\n",enb_properties.properties[i]->mnc);
|
||||||
printf( "\teutra band: \t%d:\n",enb_properties.properties[i]->eutra_band);
|
printf( "\teutra band: \t%d:\n",enb_properties.properties[i]->eutra_band);
|
||||||
printf( "\tdownlink freq:\t%u:\n",enb_properties.properties[i]->downlink_frequency);
|
printf( "\tdownlink freq: \t%u:\n",enb_properties.properties[i]->downlink_frequency);
|
||||||
printf( "\tuplink freq: \t%d:\n",enb_properties.properties[i]->uplink_frequency_offset);
|
printf( "\tuplink freq: \t%d:\n",enb_properties.properties[i]->uplink_frequency_offset);
|
||||||
|
|
||||||
printf( "\n--------------------------------------------------------\n");
|
for (j=0; j< enb_properties.properties[i]->nb_cc; j++) {
|
||||||
|
printf( "\n\tCell ID for CC %d:\t%d:\n",j,enb_properties.properties[i]->cell_id[j]);
|
||||||
|
printf( "\tN_RB_DL for CC %d:\t%d:\n",j,enb_properties.properties[i]->N_RB_DL[j]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf( "\n\tGlobal log level: \t%s\n", map_int_to_str(log_level_names,enb_properties.properties[i]->glog_level));
|
||||||
|
printf( "\tHW log level: \t%s\n", map_int_to_str(log_level_names,enb_properties.properties[i]->hw_log_level));
|
||||||
|
printf( "\tPHY log level: \t%s\n", map_int_to_str(log_level_names,enb_properties.properties[i]->phy_log_level));
|
||||||
|
printf( "\tMAC log level: \t%s\n", map_int_to_str(log_level_names,enb_properties.properties[i]->mac_log_level));
|
||||||
|
printf( "\tRLC log level: \t%s\n", map_int_to_str(log_level_names,enb_properties.properties[i]->rlc_log_level));
|
||||||
|
printf( "\tPDCP log level: \t%s\n", map_int_to_str(log_level_names,enb_properties.properties[i]->pdcp_log_level));
|
||||||
|
printf( "\tRRC log level: \t%s\n", map_int_to_str(log_level_names,enb_properties.properties[i]->rrc_log_level));
|
||||||
|
|
||||||
|
printf( "\n--------------------------------------------------------\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,6 +252,8 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
|
|||||||
config_t cfg;
|
config_t cfg;
|
||||||
config_setting_t *setting = NULL;
|
config_setting_t *setting = NULL;
|
||||||
config_setting_t *subsetting = NULL;
|
config_setting_t *subsetting = NULL;
|
||||||
|
config_setting_t *setting_component_carriers = NULL;
|
||||||
|
config_setting_t *component_carrier = NULL;
|
||||||
config_setting_t *setting_mme_addresses = NULL;
|
config_setting_t *setting_mme_addresses = NULL;
|
||||||
config_setting_t *setting_mme_address = NULL;
|
config_setting_t *setting_mme_address = NULL;
|
||||||
config_setting_t *setting_enb = NULL;
|
config_setting_t *setting_enb = NULL;
|
||||||
@@ -221,6 +261,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
|
|||||||
int enb_properties_index = 0;
|
int enb_properties_index = 0;
|
||||||
int num_enbs;
|
int num_enbs;
|
||||||
int num_mme_address;
|
int num_mme_address;
|
||||||
|
int num_component_carriers =0;
|
||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
int parse_errors = 0;
|
int parse_errors = 0;
|
||||||
@@ -238,6 +279,8 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
|
|||||||
long int eutra_band;
|
long int eutra_band;
|
||||||
long long int downlink_frequency;
|
long long int downlink_frequency;
|
||||||
long int uplink_frequency_offset;
|
long int uplink_frequency_offset;
|
||||||
|
long int cell_id[MAX_NUM_CCs];
|
||||||
|
long int N_RB_DL[MAX_NUM_CCs];
|
||||||
char* ipv4 = NULL;
|
char* ipv4 = NULL;
|
||||||
char* ipv6 = NULL;
|
char* ipv6 = NULL;
|
||||||
char* active = NULL;
|
char* active = NULL;
|
||||||
@@ -250,6 +293,20 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
|
|||||||
char *address = NULL;
|
char *address = NULL;
|
||||||
char *cidr = NULL;
|
char *cidr = NULL;
|
||||||
char *astring = NULL;
|
char *astring = NULL;
|
||||||
|
char* glog_level = NULL;
|
||||||
|
char* glog_verbosity = NULL;
|
||||||
|
char* hw_log_level = NULL;
|
||||||
|
char* hw_log_verbosity = NULL;
|
||||||
|
char* phy_log_level = NULL;
|
||||||
|
char* phy_log_verbosity = NULL;
|
||||||
|
char* mac_log_level = NULL;
|
||||||
|
char* mac_log_verbosity = NULL;
|
||||||
|
char* rlc_log_level = NULL;
|
||||||
|
char* rlc_log_verbosity = NULL;
|
||||||
|
char* pdcp_log_level = NULL;
|
||||||
|
char* pdcp_log_verbosity = NULL;
|
||||||
|
char* rrc_log_level = NULL;
|
||||||
|
char* rrc_log_verbosity = NULL;
|
||||||
|
|
||||||
memset((char*) (enb_properties.properties), 0 , MAX_ENB * sizeof(Enb_properties_t *));
|
memset((char*) (enb_properties.properties), 0 , MAX_ENB * sizeof(Enb_properties_t *));
|
||||||
memset((char*)active_enb, 0 , MAX_ENB * sizeof(char*));
|
memset((char*)active_enb, 0 , MAX_ENB * sizeof(char*));
|
||||||
@@ -423,22 +480,22 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
|
|||||||
|
|
||||||
if(config_setting_lookup_int(setting_enb, ENB_CONFIG_STRING_EUTRA_BAND, &eutra_band)) {
|
if(config_setting_lookup_int(setting_enb, ENB_CONFIG_STRING_EUTRA_BAND, &eutra_band)) {
|
||||||
enb_properties.properties[enb_properties_index]->eutra_band = eutra_band;
|
enb_properties.properties[enb_properties_index]->eutra_band = eutra_band;
|
||||||
printf( "\teutra band:\t%d\n",enb_properties.properties[enb_properties_index]->eutra_band);
|
// printf( "\teutra band:\t%d\n",enb_properties.properties[enb_properties_index]->eutra_band);
|
||||||
} else {
|
} else {
|
||||||
enb_properties.properties[enb_properties_index]->eutra_band = 7; // Default band
|
enb_properties.properties[enb_properties_index]->eutra_band = 7; // Default band
|
||||||
printf( "\teutra band:\t%d (default)\n",enb_properties.properties[enb_properties_index]->eutra_band);
|
//printf( "\teutra band:\t%d (default)\n",enb_properties.properties[enb_properties_index]->eutra_band);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(config_setting_lookup_int64(setting_enb, ENB_CONFIG_STRING_DOWNLINK_FREQUENCY, &downlink_frequency)) {
|
if(config_setting_lookup_int64(setting_enb, ENB_CONFIG_STRING_DOWNLINK_FREQUENCY, &downlink_frequency)) {
|
||||||
enb_properties.properties[enb_properties_index]->downlink_frequency = (uint32_t) downlink_frequency;
|
enb_properties.properties[enb_properties_index]->downlink_frequency = (uint32_t) downlink_frequency;
|
||||||
printf( "\tdownlink freq:\t%u\n",enb_properties.properties[enb_properties_index]->downlink_frequency);
|
//printf( "\tdownlink freq:\t%u\n",enb_properties.properties[enb_properties_index]->downlink_frequency);
|
||||||
} else {
|
} else {
|
||||||
enb_properties.properties[enb_properties_index]->downlink_frequency = 2680000000UL; // Default downlink frequency
|
enb_properties.properties[enb_properties_index]->downlink_frequency = 2680000000UL; // Default downlink frequency
|
||||||
printf( "\tdownlink freq:\t%u (default)\n",enb_properties.properties[enb_properties_index]->downlink_frequency);
|
// printf( "\tdownlink freq:\t%u (default)\n",enb_properties.properties[enb_properties_index]->downlink_frequency);
|
||||||
}
|
}
|
||||||
if(config_setting_lookup_int(setting_enb, ENB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET, &uplink_frequency_offset)) {
|
if(config_setting_lookup_int(setting_enb, ENB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET, &uplink_frequency_offset)) {
|
||||||
enb_properties.properties[enb_properties_index]->uplink_frequency_offset = (unsigned int) uplink_frequency_offset;
|
enb_properties.properties[enb_properties_index]->uplink_frequency_offset = (unsigned int) uplink_frequency_offset;
|
||||||
printf( "\tuplink freq offset:\t%ld\n",enb_properties.properties[enb_properties_index]->uplink_frequency_offset);
|
//printf( "\tuplink freq offset:\t%ld\n",enb_properties.properties[enb_properties_index]->uplink_frequency_offset);
|
||||||
} else {
|
} else {
|
||||||
// Default uplink frequency offset
|
// Default uplink frequency offset
|
||||||
if (enb_properties.properties[enb_properties_index]->frame_type == FDD) {
|
if (enb_properties.properties[enb_properties_index]->frame_type == FDD) {
|
||||||
@@ -446,7 +503,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
|
|||||||
} else {
|
} else {
|
||||||
enb_properties.properties[enb_properties_index]->uplink_frequency_offset = 0;
|
enb_properties.properties[enb_properties_index]->uplink_frequency_offset = 0;
|
||||||
}
|
}
|
||||||
printf( "\tuplink freq offset:\t%ld (default)\n",enb_properties.properties[enb_properties_index]->uplink_frequency_offset);
|
//printf( "\tuplink freq offset:\t%ld (default)\n",enb_properties.properties[enb_properties_index]->uplink_frequency_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
parse_errors += enb_check_band_frequencies(lib_config_file_name_pP,
|
parse_errors += enb_check_band_frequencies(lib_config_file_name_pP,
|
||||||
@@ -456,6 +513,36 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
|
|||||||
enb_properties.properties[enb_properties_index]->uplink_frequency_offset,
|
enb_properties.properties[enb_properties_index]->uplink_frequency_offset,
|
||||||
enb_properties.properties[enb_properties_index]->frame_type);
|
enb_properties.properties[enb_properties_index]->frame_type);
|
||||||
|
|
||||||
|
setting_component_carriers = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_COMPONENT_CARRIERS);
|
||||||
|
enb_properties.properties[enb_properties_index]->nb_cc = 0;
|
||||||
|
if(setting_component_carriers != NULL) {
|
||||||
|
|
||||||
|
num_component_carriers = config_setting_length(setting_component_carriers);
|
||||||
|
//printf("num component carrier %d \n", num_component_carriers);
|
||||||
|
//enb_properties.properties[enb_properties_index]->nb_cc = num_component_carriers;
|
||||||
|
for (j = 0; j < num_component_carriers /*&& j < MAX_NUM_CCs*/; j++) {
|
||||||
|
component_carrier = config_setting_get_elem(setting_component_carriers, j);
|
||||||
|
if(!(config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_CELL_ID, &cell_id[j]) &&
|
||||||
|
config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_N_RB_DL, &N_RB_DL[j]) )
|
||||||
|
){
|
||||||
|
AssertError (0, parse_errors ++,
|
||||||
|
"Failed to parse eNB configuration file %s, Component Carrier!\n",
|
||||||
|
lib_config_file_name_pP);
|
||||||
|
}
|
||||||
|
enb_properties.properties[enb_properties_index]->nb_cc++;
|
||||||
|
enb_properties.properties[enb_properties_index]->cell_id[j]= cell_id[j];
|
||||||
|
enb_properties.properties[enb_properties_index]->N_RB_DL[j]= N_RB_DL[j];
|
||||||
|
//printf("adding component carrier %d\n", j);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
for (j=0; j< MAX_NUM_CCs; j++) {
|
||||||
|
enb_properties.properties[enb_properties_index]->nb_cc +=1;
|
||||||
|
enb_properties.properties[enb_properties_index]->cell_id[j]=j;
|
||||||
|
enb_properties.properties[enb_properties_index]->N_RB_DL[j]=25;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setting_mme_addresses = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_MME_IP_ADDRESS);
|
setting_mme_addresses = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_MME_IP_ADDRESS);
|
||||||
num_mme_address = config_setting_length(setting_mme_addresses);
|
num_mme_address = config_setting_length(setting_mme_addresses);
|
||||||
enb_properties.properties[enb_properties_index]->nb_mme = 0;
|
enb_properties.properties[enb_properties_index]->nb_mme = 0;
|
||||||
@@ -492,6 +579,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
|
|||||||
enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv6 = 1;
|
enb_properties.properties[enb_properties_index]->mme_ip_address[j].ipv6 = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// NETWORK_INTERFACES
|
||||||
subsetting = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG);
|
subsetting = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG);
|
||||||
if(subsetting != NULL) {
|
if(subsetting != NULL) {
|
||||||
if( (
|
if( (
|
||||||
@@ -520,6 +608,131 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// log_config
|
||||||
|
subsetting = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_LOG_CONFIG);
|
||||||
|
if(subsetting != NULL) {
|
||||||
|
// global
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_GLOBAL_LOG_LEVEL, (const char **) &glog_level)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->glog_level = map_str_to_int(log_level_names, glog_level)) == -1)
|
||||||
|
enb_properties.properties[enb_properties_index]->glog_level = LOG_INFO;
|
||||||
|
//printf( "\tGlobal log level :\t%s->%d\n",glog_level, enb_properties.properties[enb_properties_index]->glog_level);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->glog_level = LOG_INFO;
|
||||||
|
}
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_GLOBAL_LOG_VERBOSITY,(const char **) &glog_verbosity)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->glog_verbosity = map_str_to_int(log_verbosity_names, glog_verbosity)) == -1)
|
||||||
|
enb_properties.properties[enb_properties_index]->glog_verbosity = LOG_MED;
|
||||||
|
//printf( "\tGlobal log verbosity:\t%s->%d\n",glog_verbosity, enb_properties.properties[enb_properties_index]->glog_verbosity);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->glog_verbosity = LOG_MED;
|
||||||
|
}
|
||||||
|
// HW
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_HW_LOG_LEVEL, (const char **) &hw_log_level)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->hw_log_level = map_str_to_int(log_level_names,hw_log_level)) == -1)
|
||||||
|
enb_properties.properties[enb_properties_index]->hw_log_level = LOG_INFO;
|
||||||
|
//printf( "\tHW log level :\t%s->%d\n",hw_log_level,enb_properties.properties[enb_properties_index]->hw_log_level);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->hw_log_level = LOG_INFO;
|
||||||
|
}
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_HW_LOG_VERBOSITY, (const char **) &hw_log_verbosity)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->hw_log_verbosity = map_str_to_int(log_verbosity_names,hw_log_verbosity)) == -1)
|
||||||
|
enb_properties.properties[enb_properties_index]->hw_log_verbosity = LOG_MED;
|
||||||
|
//printf( "\tHW log verbosity:\t%s->%d\n",hw_log_verbosity, enb_properties.properties[enb_properties_index]->hw_log_verbosity);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->hw_log_verbosity = LOG_MED;
|
||||||
|
}
|
||||||
|
// phy
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_PHY_LOG_LEVEL,(const char **) &phy_log_level)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->phy_log_level = map_str_to_int(log_level_names,phy_log_level)) == -1)
|
||||||
|
enb_properties.properties[enb_properties_index]->phy_log_level = LOG_INFO;
|
||||||
|
//printf( "\tPHY log level :\t%s->%d\n",phy_log_level,enb_properties.properties[enb_properties_index]->phy_log_level);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->phy_log_level = LOG_INFO;
|
||||||
|
}
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_PHY_LOG_VERBOSITY, (const char **)&phy_log_verbosity)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->phy_log_verbosity = map_str_to_int(log_verbosity_names,phy_log_verbosity)) == -1)
|
||||||
|
enb_properties.properties[enb_properties_index]->phy_log_verbosity = LOG_MED;
|
||||||
|
//printf( "\tPHY log verbosity:\t%s->%d\n",phy_log_level,enb_properties.properties[enb_properties_index]->phy_log_verbosity);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->phy_log_verbosity = LOG_MED;
|
||||||
|
}
|
||||||
|
//mac
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_MAC_LOG_LEVEL, (const char **)&mac_log_level)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->mac_log_level = map_str_to_int(log_level_names,mac_log_level)) == -1 )
|
||||||
|
enb_properties.properties[enb_properties_index]->mac_log_level = LOG_INFO;
|
||||||
|
//printf( "\tMAC log level :\t%s->%d\n",mac_log_level,enb_properties.properties[enb_properties_index]->mac_log_level);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->mac_log_level = LOG_INFO;
|
||||||
|
}
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_MAC_LOG_VERBOSITY, (const char **)&mac_log_verbosity)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->mac_log_verbosity = map_str_to_int(log_verbosity_names,mac_log_verbosity)) == -1)
|
||||||
|
enb_properties.properties[enb_properties_index]->mac_log_verbosity = LOG_MED;
|
||||||
|
//printf( "\tMAC log verbosity:\t%s->%d\n",mac_log_verbosity,enb_properties.properties[enb_properties_index]->mac_log_verbosity);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->mac_log_verbosity = LOG_MED;
|
||||||
|
}
|
||||||
|
//rlc
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_RLC_LOG_LEVEL, (const char **)&rlc_log_level)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->rlc_log_level = map_str_to_int(log_level_names,rlc_log_level)) == -1)
|
||||||
|
enb_properties.properties[enb_properties_index]->rlc_log_level = LOG_INFO;
|
||||||
|
//printf( "\tRLC log level :\t%s->%d\n",rlc_log_level, enb_properties.properties[enb_properties_index]->rlc_log_level);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->rlc_log_level = LOG_INFO;
|
||||||
|
}
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_RLC_LOG_VERBOSITY, (const char **)&rlc_log_verbosity)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->rlc_log_verbosity = map_str_to_int(log_verbosity_names,rlc_log_verbosity)) == -1)
|
||||||
|
enb_properties.properties[enb_properties_index]->rlc_log_verbosity = LOG_MED;
|
||||||
|
//printf( "\tRLC log verbosity:\t%s->%d\n",rlc_log_verbosity, enb_properties.properties[enb_properties_index]->rlc_log_verbosity);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->rlc_log_verbosity = LOG_MED;
|
||||||
|
}
|
||||||
|
//pdcp
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_PDCP_LOG_LEVEL, (const char **)&pdcp_log_level)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->pdcp_log_level = map_str_to_int(log_level_names,pdcp_log_level)) == -1)
|
||||||
|
enb_properties.properties[enb_properties_index]->pdcp_log_level = LOG_INFO;
|
||||||
|
//printf( "\tPDCP log level :\t%s->%d\n",pdcp_log_level, enb_properties.properties[enb_properties_index]->pdcp_log_level);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->pdcp_log_level = LOG_INFO;
|
||||||
|
}
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_PDCP_LOG_VERBOSITY, (const char **)&pdcp_log_verbosity)) {
|
||||||
|
enb_properties.properties[enb_properties_index]->pdcp_log_verbosity = map_str_to_int(log_verbosity_names,pdcp_log_verbosity);
|
||||||
|
//printf( "\tPDCP log verbosity:\t%s->%d\n",pdcp_log_verbosity, enb_properties.properties[enb_properties_index]->pdcp_log_verbosity);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->pdcp_log_verbosity = LOG_MED;
|
||||||
|
}
|
||||||
|
//rrc
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_RRC_LOG_LEVEL, (const char **)&rrc_log_level)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->rrc_log_level = map_str_to_int(log_level_names,rrc_log_level)) == -1 )
|
||||||
|
enb_properties.properties[enb_properties_index]->rrc_log_level = LOG_INFO;
|
||||||
|
//printf( "\tRRC log level :\t%s->%d\n",rrc_log_level,enb_properties.properties[enb_properties_index]->rrc_log_level);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->rrc_log_level = LOG_INFO;
|
||||||
|
}
|
||||||
|
if(config_setting_lookup_string(subsetting, ENB_CONFIG_STRING_RRC_LOG_VERBOSITY, (const char **)&rrc_log_verbosity)) {
|
||||||
|
if ((enb_properties.properties[enb_properties_index]->rrc_log_verbosity = map_str_to_int(log_verbosity_names,rrc_log_verbosity)) == -1)
|
||||||
|
enb_properties.properties[enb_properties_index]->rrc_log_verbosity = LOG_MED;
|
||||||
|
//printf( "\tRRC log verbosity:\t%s->%d\n",rrc_log_verbosity,enb_properties.properties[enb_properties_index]->rrc_log_verbosity);
|
||||||
|
} else {
|
||||||
|
enb_properties.properties[enb_properties_index]->rrc_log_verbosity = LOG_MED;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else { // not configuration is given
|
||||||
|
enb_properties.properties[enb_properties_index]->glog_level = LOG_INFO;
|
||||||
|
enb_properties.properties[enb_properties_index]->glog_verbosity = LOG_MED;
|
||||||
|
enb_properties.properties[enb_properties_index]->hw_log_level = LOG_INFO;
|
||||||
|
enb_properties.properties[enb_properties_index]->hw_log_verbosity = LOG_MED;
|
||||||
|
enb_properties.properties[enb_properties_index]->phy_log_level = LOG_INFO;
|
||||||
|
enb_properties.properties[enb_properties_index]->phy_log_verbosity = LOG_MED;
|
||||||
|
enb_properties.properties[enb_properties_index]->mac_log_level = LOG_INFO;
|
||||||
|
enb_properties.properties[enb_properties_index]->mac_log_verbosity = LOG_MED;
|
||||||
|
enb_properties.properties[enb_properties_index]->rlc_log_level = LOG_INFO;
|
||||||
|
enb_properties.properties[enb_properties_index]->rlc_log_verbosity = LOG_MED;
|
||||||
|
enb_properties.properties[enb_properties_index]->pdcp_log_level = LOG_INFO;
|
||||||
|
enb_properties.properties[enb_properties_index]->pdcp_log_verbosity = LOG_MED;
|
||||||
|
enb_properties.properties[enb_properties_index]->rrc_log_level = LOG_INFO;
|
||||||
|
enb_properties.properties[enb_properties_index]->rrc_log_verbosity = LOG_MED;
|
||||||
|
}
|
||||||
|
|
||||||
enb_properties_index += 1;
|
enb_properties_index += 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,7 +100,12 @@ typedef struct Enb_properties_s {
|
|||||||
int16_t eutra_band;
|
int16_t eutra_band;
|
||||||
uint32_t downlink_frequency;
|
uint32_t downlink_frequency;
|
||||||
int32_t uplink_frequency_offset;
|
int32_t uplink_frequency_offset;
|
||||||
|
|
||||||
|
/* Nb of component carrier for a given enb */
|
||||||
|
int16_t nb_cc;
|
||||||
|
int16_t cell_id[2];//cell_id[MAX_NUM_CCs];// for testing, change later
|
||||||
|
int16_t N_RB_DL[2];//N_RB_DL[MAX_NUM_CCs];// for testing, change later
|
||||||
|
|
||||||
/* Nb of MME to connect to */
|
/* Nb of MME to connect to */
|
||||||
uint8_t nb_mme;
|
uint8_t nb_mme;
|
||||||
/* List of MME to connect to */
|
/* List of MME to connect to */
|
||||||
@@ -112,6 +117,22 @@ typedef struct Enb_properties_s {
|
|||||||
char *enb_interface_name_for_S1_MME;
|
char *enb_interface_name_for_S1_MME;
|
||||||
in_addr_t enb_ipv4_address_for_S1_MME;
|
in_addr_t enb_ipv4_address_for_S1_MME;
|
||||||
|
|
||||||
|
// log config
|
||||||
|
int16_t glog_level;
|
||||||
|
int16_t glog_verbosity;
|
||||||
|
int16_t hw_log_level;
|
||||||
|
int16_t hw_log_verbosity;
|
||||||
|
int16_t phy_log_level;
|
||||||
|
int16_t phy_log_verbosity;
|
||||||
|
int16_t mac_log_level;
|
||||||
|
int16_t mac_log_verbosity;
|
||||||
|
int16_t rlc_log_level;
|
||||||
|
int16_t rlc_log_verbosity;
|
||||||
|
int16_t pdcp_log_level;
|
||||||
|
int16_t pdcp_log_verbosity;
|
||||||
|
int16_t rrc_log_level;
|
||||||
|
int16_t rrc_log_verbosity;
|
||||||
|
|
||||||
} Enb_properties_t;
|
} Enb_properties_t;
|
||||||
|
|
||||||
typedef struct Enb_properties_array_s {
|
typedef struct Enb_properties_array_s {
|
||||||
|
|||||||
@@ -30,22 +30,53 @@ eNBs =
|
|||||||
downlink_frequency = 2680000000L;
|
downlink_frequency = 2680000000L;
|
||||||
uplink_frequency_offset = -120000000;
|
uplink_frequency_offset = -120000000;
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
cell_id = 0;
|
||||||
|
N_RB_DL = 25;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cell_id = 1;
|
||||||
|
N_RB_DL = 50;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "192.168.14.11";
|
mme_ip_address = ( { ipv4 = "192.168.13.11";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
active = "yes";
|
active = "yes";
|
||||||
preference = "ipv4";
|
preference = "ipv4";
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
NETWORK_INTERFACES :
|
NETWORK_INTERFACES :
|
||||||
{
|
{
|
||||||
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.14.10/24";
|
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24";
|
||||||
|
|
||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.14.10/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24";
|
||||||
};
|
};
|
||||||
|
# available options for level: error, warn, notice, info, debug, trace
|
||||||
|
# available options for verbosity: none, low, medium, high, full
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="debug";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="debug";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="debug";
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -32,6 +32,17 @@ eNBs =
|
|||||||
downlink_frequency = 2680000000;
|
downlink_frequency = 2680000000;
|
||||||
uplink_frequency_offset = -120000000;
|
uplink_frequency_offset = -120000000;
|
||||||
|
|
||||||
|
component_carriers = (
|
||||||
|
{
|
||||||
|
cell_id = 0;
|
||||||
|
N_RB_DL = 25;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cell_id = 1;
|
||||||
|
N_RB_DL = 50;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
////////// MME parameters:
|
////////// MME parameters:
|
||||||
mme_ip_address = ( { ipv4 = "192.168.13.11";
|
mme_ip_address = ( { ipv4 = "192.168.13.11";
|
||||||
ipv6 = "192:168:30::17";
|
ipv6 = "192:168:30::17";
|
||||||
@@ -48,6 +59,24 @@ eNBs =
|
|||||||
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
ENB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||||
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24";
|
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="debug";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="debug";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="debug";
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ endif
|
|||||||
CFLAGS += -O2
|
CFLAGS += -O2
|
||||||
CFLAGS += -DDRIVER2013 -I$(OPENAIR_TARGETS)/ARCH/COMMON
|
CFLAGS += -DDRIVER2013 -I$(OPENAIR_TARGETS)/ARCH/COMMON
|
||||||
|
|
||||||
|
CFLAGS += -DMAX_NUM_CCs=1
|
||||||
|
|
||||||
ifeq ($(USRP),0)
|
ifeq ($(USRP),0)
|
||||||
CFLAGS += -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/ -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/DEFS -DENABLE_VCD_FIFO
|
CFLAGS += -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/LIB/ -I$(OPENAIR_TARGETS)/ARCH/EXMIMO/DEFS -DENABLE_VCD_FIFO
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -29,11 +29,11 @@
|
|||||||
|
|
||||||
/*! \file lte-softmodem.c
|
/*! \file lte-softmodem.c
|
||||||
* \brief main program to control HW and scheduling
|
* \brief main program to control HW and scheduling
|
||||||
* \author R. Knopp, F. Kaltenberger
|
* \author R. Knopp, F. Kaltenberger, Navid Nikaein
|
||||||
* \date 2012
|
* \date 2012
|
||||||
* \version 0.1
|
* \version 0.1
|
||||||
* \company Eurecom
|
* \company Eurecom
|
||||||
* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr
|
* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr, navid.nikaein@eurecom.fr
|
||||||
* \note
|
* \note
|
||||||
* \warning
|
* \warning
|
||||||
*/
|
*/
|
||||||
@@ -306,6 +306,21 @@ static LTE_DL_FRAME_PARMS *frame_parms;
|
|||||||
int multi_thread=1;
|
int multi_thread=1;
|
||||||
int N_RB_DL=25;
|
int N_RB_DL=25;
|
||||||
|
|
||||||
|
int16_t glog_level=LOG_DEBUG;
|
||||||
|
int16_t glog_verbosity=LOG_MED;
|
||||||
|
int16_t hw_log_level=LOG_DEBUG;
|
||||||
|
int16_t hw_log_verbosity=LOG_MED;
|
||||||
|
int16_t phy_log_level=LOG_DEBUG;
|
||||||
|
int16_t phy_log_verbosity=LOG_MED;
|
||||||
|
int16_t mac_log_level=LOG_DEBUG;
|
||||||
|
int16_t mac_log_verbosity=LOG_MED;
|
||||||
|
int16_t rlc_log_level=LOG_DEBUG;
|
||||||
|
int16_t rlc_log_verbosity=LOG_MED;
|
||||||
|
int16_t pdcp_log_level=LOG_DEBUG;
|
||||||
|
int16_t pdcp_log_verbosity=LOG_MED;
|
||||||
|
int16_t rrc_log_level=LOG_DEBUG;
|
||||||
|
int16_t rrc_log_verbosity=LOG_MED;
|
||||||
|
|
||||||
unsigned int build_rflocal(int txi, int txq, int rxi, int rxq)
|
unsigned int build_rflocal(int txi, int txq, int rxi, int rxq)
|
||||||
{
|
{
|
||||||
return (txi + (txq<<6) + (rxi<<12) + (rxq<<18));
|
return (txi + (txq<<6) + (rxi<<12) + (rxq<<18));
|
||||||
@@ -1695,6 +1710,7 @@ static void get_options (int argc, char **argv) {
|
|||||||
int c;
|
int c;
|
||||||
// char line[1000];
|
// char line[1000];
|
||||||
// int l;
|
// int l;
|
||||||
|
int i,j,k;
|
||||||
#ifdef USRP
|
#ifdef USRP
|
||||||
int clock_src;
|
int clock_src;
|
||||||
#endif
|
#endif
|
||||||
@@ -1722,7 +1738,7 @@ static void get_options (int argc, char **argv) {
|
|||||||
{"no-L2-connect", no_argument, NULL, LONG_OPTION_NO_L2_CONNECT},
|
{"no-L2-connect", no_argument, NULL, LONG_OPTION_NO_L2_CONNECT},
|
||||||
{NULL, 0, NULL, 0}};
|
{NULL, 0, NULL, 0}};
|
||||||
|
|
||||||
while ((c = getopt_long (argc, argv, "C:dK:qO:SUVRMr:s:",long_options,NULL)) != -1) {
|
while ((c = getopt_long (argc, argv, "C:dK:g:G:qO:SUVRMr:s:",long_options,NULL)) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case LONG_OPTION_ULSCH_MAX_CONSECUTIVE_ERRORS:
|
case LONG_OPTION_ULSCH_MAX_CONSECUTIVE_ERRORS:
|
||||||
ULSCH_max_consecutive_errors = atoi(optarg);
|
ULSCH_max_consecutive_errors = atoi(optarg);
|
||||||
@@ -1834,6 +1850,12 @@ static void get_options (int argc, char **argv) {
|
|||||||
printf("Note: -s not defined for ExpressMIMO2\n");
|
printf("Note: -s not defined for ExpressMIMO2\n");
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
case 'g':
|
||||||
|
glog_level=atoi(optarg); // value between 1 - 9
|
||||||
|
break;
|
||||||
|
case 'G':
|
||||||
|
glog_verbosity=atoi(optarg);// value from 0, 0x5, 0x15, 0x35, 0x75
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1852,14 +1874,41 @@ static void get_options (int argc, char **argv) {
|
|||||||
conf_config_file_name, NB_eNB_INST, enb_properties->number);
|
conf_config_file_name, NB_eNB_INST, enb_properties->number);
|
||||||
|
|
||||||
/* Update some simulation parameters */
|
/* Update some simulation parameters */
|
||||||
frame_parms->frame_type = enb_properties->properties[0]->frame_type;
|
for (i=0; i < enb_properties->number; i++) {
|
||||||
frame_parms->tdd_config = enb_properties->properties[0]->tdd_config;
|
|
||||||
frame_parms->tdd_config_S = enb_properties->properties[0]->tdd_config_s;
|
frame_parms->frame_type = enb_properties->properties[i]->frame_type;
|
||||||
for (i = 0 ; i < (sizeof(downlink_frequency) / sizeof (downlink_frequency[0])); i++) {
|
frame_parms->tdd_config = enb_properties->properties[i]->tdd_config;
|
||||||
downlink_frequency[i] = enb_properties->properties[0]->downlink_frequency;
|
frame_parms->tdd_config_S = enb_properties->properties[i]->tdd_config_s;
|
||||||
printf("Downlink frequency set to %u\n", downlink_frequency[i]);
|
|
||||||
uplink_frequency_offset[i] = enb_properties->properties[0]->uplink_frequency_offset;
|
for (j=0; j < enb_properties->properties[i]->nb_cc; j++ ){
|
||||||
}
|
frame_parms->Nid_cell = enb_properties->properties[i]->cell_id;
|
||||||
|
frame_parms->N_RB_DL = enb_properties->properties[i]->N_RB_DL;
|
||||||
|
} // j
|
||||||
|
|
||||||
|
glog_level = enb_properties->properties[i]->glog_level;
|
||||||
|
glog_verbosity = enb_properties->properties[i]->glog_verbosity;
|
||||||
|
hw_log_level = enb_properties->properties[i]->hw_log_level;
|
||||||
|
hw_log_verbosity = enb_properties->properties[i]->hw_log_verbosity ;
|
||||||
|
phy_log_level = enb_properties->properties[i]->phy_log_level;
|
||||||
|
phy_log_verbosity = enb_properties->properties[i]->phy_log_verbosity;
|
||||||
|
mac_log_level = enb_properties->properties[i]->mac_log_level;
|
||||||
|
mac_log_verbosity = enb_properties->properties[i]->mac_log_verbosity;
|
||||||
|
rlc_log_level = enb_properties->properties[i]->rlc_log_level;
|
||||||
|
rlc_log_verbosity = enb_properties->properties[i]->rlc_log_verbosity;
|
||||||
|
pdcp_log_level = enb_properties->properties[i]->pdcp_log_level;
|
||||||
|
pdcp_log_verbosity = enb_properties->properties[i]->pdcp_log_verbosity;
|
||||||
|
rrc_log_level = enb_properties->properties[i]->rrc_log_level;
|
||||||
|
rrc_log_verbosity = enb_properties->properties[i]->rrc_log_verbosity;
|
||||||
|
|
||||||
|
|
||||||
|
// adjust the log
|
||||||
|
|
||||||
|
for (k = 0 ; k < (sizeof(downlink_frequency) / sizeof (downlink_frequency[0])); k++) {
|
||||||
|
downlink_frequency[k] = enb_properties->properties[i]->downlink_frequency;
|
||||||
|
printf("Downlink frequency set to %u\n", downlink_frequency[k]);
|
||||||
|
uplink_frequency_offset[k] = enb_properties->properties[i]->uplink_frequency_offset;
|
||||||
|
} // k
|
||||||
|
}// i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1916,7 +1965,7 @@ int main(int argc, char **argv) {
|
|||||||
// initialize the log (see log.h for details)
|
// initialize the log (see log.h for details)
|
||||||
logInit();
|
logInit();
|
||||||
|
|
||||||
set_glog(LOG_DEBUG, LOG_MED);
|
set_glog(glog_level, glog_verbosity);
|
||||||
if (UE_flag==1)
|
if (UE_flag==1)
|
||||||
{
|
{
|
||||||
printf("configuring for UE\n");
|
printf("configuring for UE\n");
|
||||||
@@ -1943,17 +1992,16 @@ int main(int argc, char **argv) {
|
|||||||
{
|
{
|
||||||
printf("configuring for eNB\n");
|
printf("configuring for eNB\n");
|
||||||
|
|
||||||
set_comp_log(HW, LOG_DEBUG, LOG_HIGH, 1);
|
set_comp_log(HW, hw_log_level, hw_log_verbosity, 1);
|
||||||
#ifdef OPENAIR2
|
#ifdef OPENAIR2
|
||||||
set_comp_log(PHY, LOG_DEBUG, LOG_HIGH, 1);
|
set_comp_log(PHY, phy_log_level, phy_log_verbosity, 1);
|
||||||
#else
|
#else
|
||||||
set_comp_log(PHY, LOG_INFO, LOG_HIGH, 1);
|
set_comp_log(PHY, LOG_INFO, LOG_HIGH, 1);
|
||||||
#endif
|
#endif
|
||||||
set_comp_log(MAC, LOG_INFO, LOG_HIGH, 1);
|
set_comp_log(MAC, mac_log_level, mac_log_verbosity, 1);
|
||||||
set_comp_log(RLC, LOG_TRACE, LOG_HIGH, 1);
|
set_comp_log(RLC, rlc_log_level, rlc_log_verbosity, 1);
|
||||||
set_comp_log(PDCP, LOG_DEBUG, LOG_HIGH, 1);
|
set_comp_log(PDCP, pdcp_log_level, pdcp_log_verbosity, 1);
|
||||||
set_comp_log(OTG, LOG_INFO, LOG_HIGH, 1);
|
set_comp_log(RRC, rrc_log_level, rrc_log_verbosity, 1);
|
||||||
set_comp_log(RRC, LOG_DEBUG, LOG_HIGH, 1);
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
set_comp_log(EMU, LOG_INFO, LOG_MED, 1);
|
set_comp_log(EMU, LOG_INFO, LOG_MED, 1);
|
||||||
# if defined(ENABLE_USE_MME)
|
# if defined(ENABLE_USE_MME)
|
||||||
@@ -1967,6 +2015,7 @@ int main(int argc, char **argv) {
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
set_comp_log(ENB_APP, LOG_INFO, LOG_HIGH, 1);
|
set_comp_log(ENB_APP, LOG_INFO, LOG_HIGH, 1);
|
||||||
|
set_comp_log(OTG, LOG_INFO, LOG_HIGH, 1);
|
||||||
if (online_log_messages == 1) {
|
if (online_log_messages == 1) {
|
||||||
set_component_filelog(RRC);
|
set_component_filelog(RRC);
|
||||||
set_component_filelog(PDCP);
|
set_component_filelog(PDCP);
|
||||||
|
|||||||
@@ -223,6 +223,7 @@ static void * dlsch_thread(void *param) {
|
|||||||
|
|
||||||
#ifdef OPENAIR2
|
#ifdef OPENAIR2
|
||||||
mac_xface->ue_send_sdu(phy_vars_ue->Mod_id,
|
mac_xface->ue_send_sdu(phy_vars_ue->Mod_id,
|
||||||
|
0, // CC_id
|
||||||
phy_vars_ue->frame,
|
phy_vars_ue->frame,
|
||||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->b,
|
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->b,
|
||||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS>>3,
|
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->TBS>>3,
|
||||||
|
|||||||
Reference in New Issue
Block a user