From be2b2ca2bb99e567c384e42948a8116e4558724a Mon Sep 17 00:00:00 2001 From: Navid Nikaein <navid.nikaein@eurecom.fr> Date: Sat, 5 Apr 2014 08:57:12 +0000 Subject: [PATCH] * catch CTRL^C in oaisim, and handle oaisim shutdown (not fully tested) * fix few pre-ci issues git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5231 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- .../collection/hashtable/obj_hashtable.h | 3 +- openair2/LAYER2/RLC/rlc_mac.c | 3 +- openair2/UTIL/OSD/OpenAirEmu.conf | 4 +- .../LTE_RAL_ENB/INCLUDE/lteRALenb_main.h | 4 +- .../LTE_RAL_UE/INCLUDE/lteRALue_main.h | 4 +- .../GENERIC-LTE-EPC/CONF/enb.sfr.sud.conf | 27 +- targets/RTAI/USER/Makefile | 3 +- targets/SIMU/USER/Makefile | 10 - targets/SIMU/USER/oaisim.c | 281 ++++++++++-------- targets/SIMU/USER/oaisim_config.c | 3 +- 10 files changed, 184 insertions(+), 158 deletions(-) diff --git a/common/utils/collection/hashtable/obj_hashtable.h b/common/utils/collection/hashtable/obj_hashtable.h index c984e1c150..1450022b52 100755 --- a/common/utils/collection/hashtable/obj_hashtable.h +++ b/common/utils/collection/hashtable/obj_hashtable.h @@ -4,7 +4,8 @@ #include <stdint.h> #include <stddef.h> -#include "collection/hashtable/hashtable.h" +//#include "collection/hashtable/hashtable.h" +#include "hashtable.h" typedef struct obj_hash_node_s { int key_size; diff --git a/openair2/LAYER2/RLC/rlc_mac.c b/openair2/LAYER2/RLC/rlc_mac.c index eddf96f8ce..3b9644deb3 100644 --- a/openair2/LAYER2/RLC/rlc_mac.c +++ b/openair2/LAYER2/RLC/rlc_mac.c @@ -424,7 +424,8 @@ mac_rlc_status_resp_t mac_rlc_status_ind( rlc_mode = rlc_union_p->mode; } else { rlc_mode = RLC_MODE_NONE; - LOG_E(RLC , "RLC not configured rb id %u lcid %u module %u!\n", rb_id, channel_idP, ue_module_idP); + //LOG_W(RLC , "[%s] RLC not configured rb id %u lcid %u module %u!\n", __FUNCTION__, rb_id, channel_idP, ue_module_idP); + LOG_D(RLC , "[%s] RLC not configured rb id %u lcid %u module %u!\n", __FUNCTION__, rb_id, channel_idP, ue_module_idP); } switch (rlc_mode) { diff --git a/openair2/UTIL/OSD/OpenAirEmu.conf b/openair2/UTIL/OSD/OpenAirEmu.conf index 10b0ef860a..aa37b9df44 100644 --- a/openair2/UTIL/OSD/OpenAirEmu.conf +++ b/openair2/UTIL/OSD/OpenAirEmu.conf @@ -1,6 +1,6 @@ <? -// PLEASE ADAPT THE OPENAIR_HOMER VARIABLE TO YOUR CORRECT PATH -$OPENAIR_HOME = "/home/navid/openair4G"; +// PLEASE ADAPT THE OPENAIR_HOME VARIABLE TO YOUR CORRECT PATH +$OPENAIR_HOME = "/home/$USER/openair4G"; // diff --git a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_main.h b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_main.h index 15718062ff..907624b406 100755 --- a/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_main.h +++ b/openair3/RAL-LTE/LTE_RAL_ENB/INCLUDE/lteRALenb_main.h @@ -57,7 +57,9 @@ //----------------------------------------------------------------------------- #include "lteRALenb.h" #include "commonDef.h" -#include "collection/hashtable/hashtable.h" +#include "hashtable.h" +//#include "collection/hashtable/hashtable.h" + public_lteralenb_main(char* g_conf_enb_ral_listening_port;) public_lteralenb_main(char* g_conf_enb_ral_ip_address;) public_lteralenb_main(char* g_conf_enb_ral_link_id;) diff --git a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_main.h b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_main.h index eac478dbdb..95ecda3a17 100755 --- a/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_main.h +++ b/openair3/RAL-LTE/LTE_RAL_UE/INCLUDE/lteRALue_main.h @@ -71,7 +71,9 @@ //----------------------------------------------------------------------------- #include "lteRALue.h" #include "commonDef.h" -#include "collection/hashtable/hashtable.h" +#include "hashtable.h" +//#include "collection/hashtable/hashtable.h" + public_mrallte_main(char* g_conf_ue_ral_listening_port;) public_mrallte_main(char* g_conf_ue_ral_ip_address;) public_mrallte_main(char* g_conf_ue_ral_link_id;) diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.sfr.sud.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.sfr.sud.conf index ced4b6899d..daafd72223 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.sfr.sud.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.sfr.sud.conf @@ -11,11 +11,11 @@ eNBs = eNB_name = "eNB_Eurecom_0"; // Tracking area code, 0x0000 and 0xfffe are reserved values - tracking_area_code = 1; + tracking_area_code = "1"; - mobile_country_code = 208; + mobile_country_code = "208"; - mobile_network_code = 10; + mobile_network_code = "10"; ////////// Channel parameters: // Default Paging DRX of the eNB as defined in TS 36.304 @@ -50,11 +50,11 @@ eNBs = eNB_name = "eNB_Eurecom_1"; // Tracking area code, 0x0000 and 0xfffe are reserved values - tracking_area_code = 1; + tracking_area_code = "1"; - mobile_country_code = 208; + mobile_country_code = "208"; - mobile_network_code = 92; + mobile_network_code = "92"; ////////// Channel parameters: // Default Paging DRX of the eNB as defined in TS 36.304 @@ -87,11 +87,11 @@ eNBs = eNB_name = "eNB_Eurecom_2"; // Tracking area code, 0x0000 and 0xfffe are reserved values - tracking_area_code = 1; + tracking_area_code = "1"; - mobile_country_code = 208; + mobile_country_code = "208"; - mobile_network_code = 92; + mobile_network_code = "92"; ////////// Channel parameters: // Default Paging DRX of the eNB as defined in TS 36.304 @@ -126,13 +126,12 @@ eNBs = eNB_name = "eNB_Eurecom_3"; // Tracking area code, 0x0000 and 0xfffe are reserved values - tracking_area_code = 1; + tracking_area_code = "1"; - mobile_country_code = 208; - - // EXMIMO_IOT mobile_network_code = 92; - mobile_network_code = 92; + mobile_country_code = "208"; + mobile_network_code = "92"; + ////////// Channel parameters: // Default Paging DRX of the eNB as defined in TS 36.304 default_paging_drx = "PAGING_DRX_256"; diff --git a/targets/RTAI/USER/Makefile b/targets/RTAI/USER/Makefile index 7191a4ee33..2717b5cce5 100644 --- a/targets/RTAI/USER/Makefile +++ b/targets/RTAI/USER/Makefile @@ -101,8 +101,9 @@ OBJ += $(OPENAIR1_DIR)/SIMULATION/ETH_TRANSPORT/netlink_init.o CFLAGS += -DOPENAIR2 -DNO_RRM -DPUCCH -DMAC_CONTEXT=1 endif -ifdef ENABLE_ITTI RTAI_OBJ += $(UTILS_OBJS) + +ifdef ENABLE_ITTI CFLAGS += -DEXMIMO_IOT endif diff --git a/targets/SIMU/USER/Makefile b/targets/SIMU/USER/Makefile index 42581887f0..53d94ae87c 100644 --- a/targets/SIMU/USER/Makefile +++ b/targets/SIMU/USER/Makefile @@ -111,10 +111,6 @@ endif # make cleanasn1 #make all Rel10=1 - -#export IS_REL10=$(shell if [ -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/.lock-rel10 ] ; then echo "1" ; else echo "0" ; fi) -#export IS_REL8=$(shell if [ -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/.lock-rel8 ] ; then echo "1" ; else echo "0" ; fi) - ifdef CBA CFLAGS += -DRel10 CFLAGS += -DCBA @@ -123,15 +119,9 @@ CFLAGS += -DCBA else ifdef Rel10 CFLAGS += -DRel10 @echo "Rel10=1" -#ifeq ($(IS_REL10), 0) -# $(/bin/bash cd $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/ ; rm EUTRA-RRC-Definitions.asn ln -s EUTRA-RRC-Definitions-a20.asn EUTRA-RRC-Definitions.asn ; cd $(OPENAIR_TARGETS)/SIMU/USER/ ; rm -f $(ASN1_MSG_OBJS1) ; rm -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc.generated ; rm -f $(L2_OBJS) ; rm -f *.o ; rm -f oaisim ; rm -f oaisim_pad; touch $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/.lock-rel10 ; rm $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/.lock-rel8 ; $(OPENAIR_TARGETS)/SCRIPTS/asn1_generate_rrc_messaging_c_code.bash ) -#endif else # default is rel 8 @echo "Rel8=1" CFLAGS += -DRel8 -#ifeq ($(IS_REL8), 0) -# $(/bin/bash cd $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/ ; rm EUTRA-RRC-Definitions.asn ln -s EUTRA-RRC-Definitions-86.asn EUTRA-RRC-Definitions.asn ; cd $(OPENAIR_TARGETS)/SIMU/USER/ ; rm -f $(ASN1_MSG_OBJS1) ; rm -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc.generated ; rm -f $(L2_OBJS); rm -f *.o ; rm -f oaisim ; touch $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/.lock-rel8 ; rm $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/asn1c/ASN1_files/.lock-rel10 ; $(OPENAIR_TARGETS)/SCRIPTS/asn1_generate_rrc_messaging_c_code.bash ) -#endif endif ifeq ($(RLC_STOP_ON_LOST_PDU), 1) diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c index 9e02219572..140d3294c8 100644 --- a/targets/SIMU/USER/oaisim.c +++ b/targets/SIMU/USER/oaisim.c @@ -162,9 +162,10 @@ mapping small_scale_names[] = { {"AWGN", AWGN}, {NULL, -1} }; - -//static void *sigh(void *arg); -void terminate(void); +#if !defined(ENABLE_ITTI) +static void *sigh(void *arg); +#endif +void oai_shutdown(void); void help(void) { printf ("Usage: oaisim -h -a -F -C tdd_config -K [log_file] -V [vcd_file] -R N_RB_DL -e -x transmission_mode -m target_dl_mcs -r(ate_adaptation) -n n_frames -s snr_dB -k ricean_factor -t max_delay -f forgetting factor -A channel_model -z cooperation_flag -u nb_local_ue -U UE mobility -b nb_local_enb -B eNB_mobility -M ethernet_flag -p nb_master -g multicast_group -l log_level -c ocg_enable -T traffic model -D multicast network device\n"); @@ -375,9 +376,11 @@ typedef enum l2l1_task_state_e L2L1_TERMINATED, } l2l1_task_state_t; +l2l1_task_state_t l2l1_state = L2L1_WAITTING; + /*------------------------------------------------------------------------------*/ void *l2l1_task(void *args_p) { - l2l1_task_state_t l2l1_state = L2L1_WAITTING; + clock_t t; // Framing variables @@ -1019,19 +1022,28 @@ int main(int argc, char **argv) { // Initialize VCD LOG module vcd_signal_dumper_init (oai_emulation.info.vcd_file); - /* pthread_t sigth; - sigset_t sigblock; - sigemptyset(&sigblock); - sigaddset(&sigblock, SIGHUP); - sigaddset(&sigblock, SIGINT); - sigaddset(&sigblock, SIGTERM); - pthread_sigmask(SIG_BLOCK, &sigblock, NULL); - if (pthread_create(&sigth, NULL, sigh, NULL)) { - msg("Pthread for tracing Signals is not created!\n"); - return -1; - } else { - msg("Pthread for tracing Signals is created!\n"); - }*/ +#if !defined(ENABLE_ITTI) + pthread_t tid; + int err; + sigset_t sigblock; + sigemptyset(&sigblock); + sigaddset(&sigblock, SIGHUP); + sigaddset(&sigblock, SIGINT); + sigaddset(&sigblock, SIGTERM); + sigaddset(&sigblock, SIGQUIT); + //sigaddset(&sigblock, SIGKILL); + + if ((err= pthread_sigmask(SIG_BLOCK, &sigblock, NULL)) != 0){ + printf("SIG_BLOCK error\n"); + return -1; + } + if (pthread_create(&tid, NULL, sigh, NULL)) { + printf("Pthread for tracing Signals is not created!\n"); + return -1; + } else { + printf("Pthread for tracing Signals is created!\n"); + } +#endif // configure oaisim with OCG oaisim_config (); // config OMG and OCG, OPT, OTG, OLG @@ -1094,92 +1106,9 @@ int main(int argc, char **argv) { // fclose(SINRpost); LOG_N(EMU, ">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU Ending <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); - free (otg_pdcp_buffer); -#ifdef SMBV - if (config_smbv) { - smbv_send_config (smbv_fname,smbv_ip); - } -#endif - - //Perform KPI measurements - if (oai_emulation.info.otg_enabled == 1) - kpi_gen (); - - if (oai_emulation.info.opp_enabled == 1) - print_opp_meas(); - - // relase all rx state - if (ethernet_flag == 1) { - emu_transport_release (); - } - -#ifdef PROC - if (abstraction_flag == 0 && Channel_Flag==0 && Process_Flag==0) -#else - if (abstraction_flag == 0) -#endif - { - /* - #ifdef IFFT_FPGA - free(txdataF2[0]); - free(txdataF2[1]); - free(txdataF2); - free(txdata[0]); - free(txdata[1]); - free(txdata); - #endif - */ - - for (i = 0; i < 2; i++) { - free (s_re[i]); - free (s_im[i]); - free (r_re[i]); - free (r_im[i]); - } - free (s_re); - free (s_im); - free (r_re); - free (r_im); - - lte_sync_time_free (); - } - // pthread_join(sigth, NULL); - - // added for PHY abstraction - if (oai_emulation.info.ocm_enabled == 1) { - for (eNB_inst = 0; eNB_inst < NUMBER_OF_eNB_MAX; eNB_inst++) { - free (enb_data[eNB_inst]); - } - for (UE_inst = 0; UE_inst < NUMBER_OF_UE_MAX; UE_inst++) { - free (ue_data[UE_inst]); - } - } //End of PHY abstraction changes - -#ifdef OPENAIR2 - mac_top_cleanup (); -#endif - - // stop OMG - stop_mobility_generator (oai_emulation.info.omg_model_ue); //omg_param_list.mobility_type -#ifdef OPENAIR2 - if (oai_emulation.info.omv_enabled == 1) - omv_end (pfd[1], omv_data); -#endif - if ((oai_emulation.info.ocm_enabled == 1) && (ethernet_flag == 0) && (ShaF != NULL)) - destroyMat (ShaF, map1, map2); - - if ((oai_emulation.info.opt_enabled == 1)) - terminate_opt (); - - if (oai_emulation.info.cli_enabled) - cli_server_cleanup (); - - //bring oai if down - terminate (); - log_thread_finalize (); - logClean (); - vcd_signal_dumper_close (); + raise(SIGINT); + oai_shutdown(); return (0); } @@ -1444,38 +1373,138 @@ void print_opp_meas(void){ } -/* + static void *sigh(void *arg) { - int signum; - sigset_t sigcatch; - sigemptyset(&sigcatch); - sigaddset(&sigcatch, SIGHUP); - sigaddset(&sigcatch, SIGINT); - sigaddset(&sigcatch, SIGTERM); - - for (;;) { - sigwait(&sigcatch, &signum); - switch (signum) { - case SIGHUP: - case SIGINT: - case SIGTERM: - terminate(); - default: - break; - } - } - pthread_exit(NULL); + int signum; + sigset_t sigcatch; + sigemptyset(&sigcatch); + sigaddset(&sigcatch, SIGHUP); + sigaddset(&sigcatch, SIGINT); + sigaddset(&sigcatch, SIGTERM); + sigaddset(&sigcatch, SIGQUIT); + + for (;;) { + sigwait(&sigcatch, &signum); + //sigwait(&sigblock, &signum); + switch (signum) { + case SIGHUP: + case SIGINT: + case SIGTERM: + case SIGQUIT: + fprintf(stderr,"received signal %d \n", signum); + // no need for mutx: when ITTI not used, this variable is only accessed by this function + l2l1_state = L2L1_TERMINATED; + break; + default: + fprintf(stderr,"Unexpected signal %d \n",signum); + exit(-1); + break; + } + } + pthread_exit(NULL); } - */ -void terminate(void) { + +void oai_shutdown(void) { + static int done=0; int i; char interfaceName[8]; + + if (done) + return; + + free (otg_pdcp_buffer); + +#ifdef SMBV + if (config_smbv) { + smbv_send_config (smbv_fname,smbv_ip); + } +#endif + + //Perform KPI measurements + if (oai_emulation.info.otg_enabled == 1) + kpi_gen (); + + if (oai_emulation.info.opp_enabled == 1) + print_opp_meas(); + + // relase all rx state + if (ethernet_flag == 1) { + emu_transport_release (); + } + +#ifdef PROC + if (abstraction_flag == 0 && Channel_Flag==0 && Process_Flag==0) +#else + if (abstraction_flag == 0) +#endif + { + /* + #ifdef IFFT_FPGA + free(txdataF2[0]); + free(txdataF2[1]); + free(txdataF2); + free(txdata[0]); + free(txdata[1]); + free(txdata); + #endif + */ + + for (i = 0; i < 2; i++) { + free (s_re[i]); + free (s_im[i]); + free (r_re[i]); + free (r_im[i]); + } + free (s_re); + free (s_im); + free (r_re); + free (r_im); + + lte_sync_time_free (); + } + + // added for PHY abstraction + if (oai_emulation.info.ocm_enabled == 1) { + for (eNB_inst = 0; eNB_inst < NUMBER_OF_eNB_MAX; eNB_inst++) { + free (enb_data[eNB_inst]); + } + for (UE_inst = 0; UE_inst < NUMBER_OF_UE_MAX; UE_inst++) { + free (ue_data[UE_inst]); + } + } //End of PHY abstraction changes + +#ifdef OPENAIR2 + mac_top_cleanup (); +#endif + + // stop OMG + stop_mobility_generator (oai_emulation.info.omg_model_ue); //omg_param_list.mobility_type +#ifdef OPENAIR2 + if (oai_emulation.info.omv_enabled == 1) + omv_end (pfd[1], omv_data); +#endif + if ((oai_emulation.info.ocm_enabled == 1) && (ethernet_flag == 0) && (ShaF != NULL)) + destroyMat (ShaF, map1, map2); + + if ((oai_emulation.info.opt_enabled == 1)) + terminate_opt (); + + if (oai_emulation.info.cli_enabled) + cli_server_cleanup (); + for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) if (oai_emulation.info.oai_ifup[i] == 1) { - sprintf (interfaceName, "oai%d", i); - bringInterfaceUp (interfaceName, 0); + sprintf (interfaceName, "oai%d", i); + bringInterfaceUp (interfaceName, 0); } + + log_thread_finalize (); + logClean (); + vcd_signal_dumper_close (); + done =1; + + LOG_N(EMU, ">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU shutdown <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); } diff --git a/targets/SIMU/USER/oaisim_config.c b/targets/SIMU/USER/oaisim_config.c index de2dce38ff..94eb752e1f 100644 --- a/targets/SIMU/USER/oaisim_config.c +++ b/targets/SIMU/USER/oaisim_config.c @@ -460,7 +460,7 @@ int olg_config() { oai_emulation.info.g_log_verbosity, oai_emulation.emulation_config.log_emu.interval ); - + /* // if perf eval then reset the otg log level set_comp_log(PHY, LOG_EMERG, 0x15,1); set_comp_log(EMU, LOG_EMERG, 0x15,1); @@ -473,6 +473,7 @@ int olg_config() { set_comp_log(PDCP, LOG_DEBUG, LOG_MED,1); set_comp_log(RLC, LOG_DEBUG, LOG_MED,1); set_comp_log(RRC, LOG_DEBUG, LOG_MED,1); + */ #if defined(ENABLE_RAL) set_comp_log(RAL_ENB, LOG_TRACE, LOG_MED,1); set_comp_log(RAL_UE, LOG_TRACE, LOG_MED,1); -- GitLab