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