diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c index 059be2dfb0b3d20bbeedd61031a0a40ffc3d4c73..1411355bc6d92b4a318b6d92138554c2cfc57818 100644 --- a/openair2/ENB_APP/enb_app.c +++ b/openair2/ENB_APP/enb_app.c @@ -126,12 +126,6 @@ static uint32_t eNB_app_register() hash = s1ap_generate_eNB_id (); g_enb_properties[eNB_id]->eNB_id = eNB_id + (hash & 0xFFFF8); - if (EPC_MODE_ENABLED) - { - /* Overwrite default IP v4 address by value from command line */ - g_enb_properties[eNB_id]->mme_ip_address[0].ipv4_address = EPC_MODE_MME_ADDRESS; - } - /* note: there is an implicit relationship between the data structure and the message name */ msg_p = itti_alloc_new_message (TASK_ENB_APP, S1AP_REGISTER_ENB_REQ); @@ -191,9 +185,9 @@ void *eNB_app_task(void *args_p) # if defined(ENABLE_USE_MME) # if defined(OAI_EMU) enb_nb = oai_emulation.info.nb_enb_local; - enb_config_init(g_conf_config_file_name); # endif # endif + enb_config_init(g_conf_config_file_name); configure_rrc(); diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index d1223fe28c264ca098804d510e0225b88547e6d4..3e70743441318aeadd107eb2a847f592c29a774a 100755 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -34,6 +34,10 @@ #include "log.h" #include "assertions.h" #include "enb_config.h" +#if defined(OAI_EMU) +# include "OCG.h" +# include "OCG_extern.h" +#endif #if defined(ENABLE_ITTI) # include "intertask_interface.h" # if defined(ENABLE_USE_MME) @@ -76,15 +80,23 @@ int enb_config_init(char* lib_config_file_name_pP) { config_init(&cfg); - /* Read the file. If there is an error, report it and exit. */ - if(! config_read_file(&cfg, lib_config_file_name_pP)) + if(lib_config_file_name_pP != NULL) + { + /* Read the file. If there is an error, report it and exit. */ + if(! config_read_file(&cfg, lib_config_file_name_pP)) + { + LOG_E(ENB_APP, "%s:%d - %s\n", lib_config_file_name_pP, config_error_line(&cfg), config_error_text(&cfg)); + config_destroy(&cfg); + AssertFatal (1 == 0, "Failed to parse eNB configuration file %s!\n", lib_config_file_name_pP); + } + } + else { - LOG_E(ENB_APP, "%s:%d - %s\n", lib_config_file_name_pP, config_error_line(&cfg), config_error_text(&cfg)); + LOG_E(ENB_APP, "No eNB configuration file provided!\n"); config_destroy(&cfg); - AssertFatal (1 == 0, "Failed to parse config file %s!\n", lib_config_file_name_pP); + AssertFatal (0, "No eNB configuration file provided!\n"); } - // Get list of active eNBs, (only these will be configured) g_num_enb_properties = 0; setting = config_lookup(&cfg, ENB_CONFIG_STRING_ACTIVE_ENBS); @@ -123,7 +135,7 @@ int enb_config_init(char* lib_config_file_name_pP) { ) { parse_error = 1; AssertFatal (parse_error == 0, - "Failed to parse config file %s, %u th enb\n", + "Failed to parse eNB configuration file %s, %u th enb\n", lib_config_file_name_pP, i); } // search if in active list @@ -138,7 +150,7 @@ int enb_config_init(char* lib_config_file_name_pP) { g_enb_properties[enb_properties_index]->cell_type = CELL_HOME_ENB; } else { AssertFatal (1 == 0, - "Failed to parse config file %s, enb %d unknown value for cell_type choice: CELL_MACRO_ENB or CELL_HOME_ENB !\n", + "Failed to parse eNB configuration file %s, enb %d unknown value for cell_type choice: CELL_MACRO_ENB or CELL_HOME_ENB !\n", lib_config_file_name_pP, i); } g_enb_properties[enb_properties_index]->eNB_name = strdup(enb_name); @@ -156,10 +168,10 @@ int enb_config_init(char* lib_config_file_name_pP) { g_enb_properties[enb_properties_index]->default_drx = PAGING_DRX_256; } else { AssertFatal (1 == 0, - "Failed to parse config file %s, enb %d unknown value for default_drx choice: PAGING_DRX_32..PAGING_DRX_256 !\n", + "Failed to parse eNB configuration file %s, enb %d unknown value for default_drx choice: PAGING_DRX_32..PAGING_DRX_256 !\n", lib_config_file_name_pP, i); } - AssertFatal (parse_error == 0, "Failed to parse config file %s, enb %d\n", lib_config_file_name_pP, i); + AssertFatal (parse_error == 0, "Failed to parse eNB configuration file %s, enb %d\n", lib_config_file_name_pP, i); setting_mme_addresses = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_MME_IP_ADDRESS); num_mme_address = config_setting_length(setting_mme_addresses); @@ -175,7 +187,7 @@ int enb_config_init(char* lib_config_file_name_pP) { ) { parse_error = 1; AssertFatal (parse_error == 0, - "Failed to parse config file %s, %u th enb %u th mme address\n", + "Failed to parse eNB configuration file %s, %u th enb %u th mme address\n", lib_config_file_name_pP, i, j); } g_enb_properties[enb_properties_index]->nb_mme += 1; @@ -184,6 +196,9 @@ int enb_config_init(char* lib_config_file_name_pP) { g_enb_properties[enb_properties_index]->mme_ip_address[j].ipv6_address = strdup(ipv6); if (strcmp(active, "yes") == 0) { g_enb_properties[enb_properties_index]->mme_ip_address[j].active = 1; +#if defined(ENABLE_USE_MME) + EPC_MODE_ENABLED = 1; +#endif } // else { (calloc) if (strcmp(preference, "ipv4") == 0) { @@ -202,7 +217,7 @@ int enb_config_init(char* lib_config_file_name_pP) { } } AssertFatal (enb_properties_index == g_num_enb_properties, - "Failed to parse config file %s, mismatch between %u active eNBs and %u corresponding defined eNBs!\n", + "Failed to parse eNB configuration file %s, mismatch between %u active eNBs and %u corresponding defined eNBs!\n", lib_config_file_name_pP, g_num_enb_properties, enb_properties_index); return 0; } diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index dddde516a407c341a5ee6209269f329996968b85..0fc45e5d3cae1c8eefe250310a0ffdf70f6876c3 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -726,7 +726,9 @@ static void rrc_eNB_generate_defaultRRCConnectionReconfiguration (u8 Mod_id, u32 DRB_config = CALLOC (1, sizeof (*DRB_config)); DRB_config->eps_BearerIdentity = CALLOC(1, sizeof(long)); - *(DRB_config->eps_BearerIdentity) = 5L; // LW: set to first value, allowed value 5..15 + *(DRB_config->eps_BearerIdentity) = 5L; // LW set to first value, allowed value 5..15 + // DRB_config->drb_Identity = (DRB_Identity_t) 1; //allowed values 1..32 + // NN: this is the 1st DRB for this ue, so set it to 1 // NN: this is the 1st DRB for this ue, so set it to 1 DRB_config->drb_Identity = (DRB_Identity_t) 1; // (UE_index+1); //allowed values 1..32 DRB_config->logicalChannelIdentity = CALLOC (1, sizeof (long)); @@ -734,6 +736,7 @@ static void rrc_eNB_generate_defaultRRCConnectionReconfiguration (u8 Mod_id, u32 DRB_rlc_config = CALLOC (1, sizeof (*DRB_rlc_config)); DRB_config->rlc_Config = DRB_rlc_config; + #ifdef EXMIMO_IOT DRB_rlc_config->present = RLC_Config_PR_am; DRB_rlc_config->choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50; @@ -769,7 +772,6 @@ static void rrc_eNB_generate_defaultRRCConnectionReconfiguration (u8 Mod_id, u32 DRB_pdcp_config->rlc_UM = PDCP_rlc_UM; PDCP_rlc_UM->pdcp_SN_Size = PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits; #endif - DRB_pdcp_config->headerCompression.present = PDCP_Config__headerCompression_PR_notUsed; DRB_lchan_config = CALLOC (1, sizeof (*DRB_lchan_config)); @@ -2174,7 +2176,6 @@ void rrc_eNB_process_RRCConnectionReconfigurationComplete (u8 Mod_id, u32 frame, derive_key_rrc_int(eNB_rrc_inst[Mod_id].integrity_algorithm[UE_index], eNB_rrc_inst[Mod_id].kenb[UE_index], &kRRCint); #endif - #ifdef ENABLE_RAL { MessageDef *message_ral_p = NULL; @@ -2205,7 +2206,6 @@ void rrc_eNB_process_RRCConnectionReconfigurationComplete (u8 Mod_id, u32 frame, } #endif - // Refresh SRBs/DRBs rrc_pdcp_config_asn1_req (Mod_id, UE_index, frame, 1, SRB_configList, @@ -2496,26 +2496,16 @@ char openair_rrc_lite_eNB_init (u8 Mod_id) #if defined(ENABLE_USE_MME) /* Connect eNB to MME */ - if (EPC_MODE_ENABLED > 0) - { -# if !defined(ENABLE_ITTI) - if (s1ap_eNB_init (EPC_MODE_MME_ADDRESS, Mod_id) < 0) - { - mac_xface->macphy_exit (""); - return -1; - } -# endif - } - else + if (EPC_MODE_ENABLED <= 0) #endif - { - /* Init security parameters */ - for (j = 0; j < NUMBER_OF_UE_MAX; j++) { - eNB_rrc_inst[Mod_id].ciphering_algorithm[j] = SecurityAlgorithmConfig__cipheringAlgorithm_eea2; - eNB_rrc_inst[Mod_id].integrity_algorithm[j] = SecurityAlgorithmConfig__integrityProtAlgorithm_eia2; - rrc_lite_eNB_init_security(Mod_id, j); + { + /* Init security parameters */ + for (j = 0; j < NUMBER_OF_UE_MAX; j++) { + eNB_rrc_inst[Mod_id].ciphering_algorithm[j] = SecurityAlgorithmConfig__cipheringAlgorithm_eea2; + eNB_rrc_inst[Mod_id].integrity_algorithm[j] = SecurityAlgorithmConfig__integrityProtAlgorithm_eia2; + rrc_lite_eNB_init_security(Mod_id, j); + } } - } eNB_rrc_inst[Mod_id].Info.Nb_ue = 0;