From b72ca3ee206b87107b6e9c5eea4c68f79aba082d Mon Sep 17 00:00:00 2001
From: Raymond Knopp <raymond.knopp@eurecom.fr>
Date: Sun, 11 Jan 2015 18:41:40 +0000
Subject: [PATCH] git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6348
 818b1a75-f10b-46b9-bf7c-635c3b92a50f

---
 .../lte_dl_channel_estimation.c               |   4 +-
 openair1/PHY/MODULATION/slot_fep.c            |   4 +-
 openair1/PHY/MODULATION/slot_fep_mbsfn.c      |   4 +-
 openair1/PHY/defs.h                           |   1 +
 openair1/SCHED/phy_procedures_lte_ue.c        |   9 +-
 openair1/SIMULATION/LTE_PHY/dlsim.c           |  17 +-
 openair1/SIMULATION/LTE_PHY/mbmssim.c         |  13 +-
 openair1/SIMULATION/LTE_PHY/pdcchsim.c        |  19 +-
 openair2/LAYER2/MAC/eNB_scheduler_ulsch.c     |   2 +-
 openair2/LAYER2/MAC/main.c                    |   8 +-
 openair2/LAYER2/MAC/proto.h                   |   4 +-
 openair2/PHY_INTERFACE/defs.h                 |   2 +-
 openair2/RRC/LITE/MESSAGES/asn1_msg.c         | 256 +++++-----
 openair2/RRC/LITE/MESSAGES/asn1_msg.h         |   2 +-
 openair2/RRC/LITE/proto.h                     |   2 +-
 openair2/RRC/LITE/rrc_common.c                |   9 +-
 openair2/UTIL/LOG/vcd_signal_dumper.c         |   1 +
 openair2/UTIL/LOG/vcd_signal_dumper.h         |   1 +
 .../ARCH/ETHERNET/USERSPACE/LIB/Makefile.inc  |   2 +-
 .../ETHERNET/USERSPACE/LIB/ethernet_lib.c     |  14 +-
 .../GENERIC-LTE-EPC/CONF/UE_config.xml        | 112 +++++
 .../CONF/enb.band7.exmimo2.conf               |  10 +
 .../CONF/enb.band7.tm1.usrpb210.conf          | 143 ------
 targets/RT/USER/Makefile                      |   6 +-
 targets/RT/USER/lte-softmodem.c               | 473 +++++++++++-------
 targets/RT/USER/ue.gtkw                       |  25 +-
 targets/SIMU/USER/oaisim_functions.c          |   1 +
 targets/build_helper.bash                     |  14 +-
 28 files changed, 635 insertions(+), 523 deletions(-)
 create mode 100644 targets/PROJECTS/GENERIC-LTE-EPC/CONF/UE_config.xml
 delete mode 100644 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf

diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
index 2fcec9c256..73e7bfb807 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
@@ -616,7 +616,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
     }
     
     
-#ifndef PERFECT_CE    
+    if (phy_vars_ue->perfect_ce == 0) {
     // Temporal Interpolation
     // printf("ch_offset %d\n",ch_offset);
 
@@ -691,7 +691,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
       }
     
     }
-#endif
+    }
   }
 
   void (*idft)(int16_t *,int16_t *, int);
diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c
index 3f29747abd..6fea6c858c 100644
--- a/openair1/PHY/MODULATION/slot_fep.c
+++ b/openair1/PHY/MODULATION/slot_fep.c
@@ -153,7 +153,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
 
   }
 
-#ifndef PERFECT_CE    
+  if (phy_vars_ue->perfect_ce == 0) {
   if ((l==0) || (l==(4-frame_parms->Ncp))) {
     for (aa=0;aa<frame_parms->nb_antennas_tx_eNB;aa++) {
 
@@ -193,7 +193,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
 
       }
   }
-#endif
+  }
 #ifdef DEBUG_FEP
   msg("slot_fep: done\n");
 #endif
diff --git a/openair1/PHY/MODULATION/slot_fep_mbsfn.c b/openair1/PHY/MODULATION/slot_fep_mbsfn.c
index f918ecf622..81d200b34b 100644
--- a/openair1/PHY/MODULATION/slot_fep_mbsfn.c
+++ b/openair1/PHY/MODULATION/slot_fep_mbsfn.c
@@ -173,7 +173,7 @@ int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue,
 // changed to invoke MBSFN channel estimation in symbols 2,6,10    
     if ((l==2)||(l==6)||(l==10)) {
     for (aa=0;aa<frame_parms->nb_antennas_tx;aa++) {
-#ifndef PERFECT_CE
+     if (phy_vars_ue->perfect_ce == 0) {
 #ifdef DEBUG_FEP
       msg("Channel estimation eNB %d, aatx %d, subframe %d, symbol %d\n",eNB_id,aa,subframe,l);
 #endif
@@ -201,7 +201,6 @@ int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue,
 				  l,
 				  symbol); */
     //  } 
-#endif
 
       // do frequency offset estimation here!
       // use channel estimates from current symbol (=ch_t) and last symbol (ch_{t-1}) 
@@ -215,6 +214,7 @@ int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue,
 			    l,
 			    &ue_common_vars->freq_offset); */
     }
+    }
   }
 #ifdef DEBUG_FEP
   msg("slot_fep_mbsfn: done\n");
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index 0c54f5095a..2bf159e9a8 100755
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -434,6 +434,7 @@ typedef struct
   uint32_t X_u[64][839];
 
   uint32_t high_speed_flag;
+  uint32_t perfect_ce;
   int16_t ch_est_alpha;
 
   char ulsch_no_allocation_counter[NUMBER_OF_CONNECTED_eNB_MAX];
diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c
index b8e7f6c884..1d97be9205 100755
--- a/openair1/SCHED/phy_procedures_lte_ue.c
+++ b/openair1/SCHED/phy_procedures_lte_ue.c
@@ -1905,10 +1905,12 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
 				     eNB_id,subframe_rx);
     vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING, VCD_FUNCTION_OUT);
     //LOG_D(PHY,"[UE  %d][PUSCH] Frame %d subframe %d PHICH RX\n",phy_vars_ue->Mod_id,frame_rx,subframe_rx);
- 
+
     if (is_phich_subframe(&phy_vars_ue->lte_frame_parms,subframe_rx)) {
+      vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PHICH, VCD_FUNCTION_IN);
       rx_phich(phy_vars_ue,
 	       subframe_rx,eNB_id);
+      vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PHICH, VCD_FUNCTION_OUT);
     }
   }
 #ifdef PHY_ABSTRACTION
@@ -2318,6 +2320,9 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst
   int CC_id = phy_vars_ue->CC_id;
 
   vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_IN);
+  vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_SLOT_NUMBER_UE, (slot_rx + 1) % 20);
+  vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_UE, frame_rx);
+
   start_meas(&phy_vars_ue->phy_proc_rx);
 #ifdef DEBUG_PHY_PROC
   LOG_D(PHY,"[%s %d] Frame %d subframe %d: Doing phy_procedures_UE_RX(%d)\n", 
@@ -3426,8 +3431,6 @@ void phy_UE_lte_check_measurement_thresholds(instance_t instanceP, ral_threshold
   prach_resources_local.ra_PreambleIndex = 0;
 #endif
 
-  vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_SLOT_NUMBER_UE, (slot_rx + 1) % 20);
-  vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_UE, frame_rx);
 
   vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,1);
 #ifdef EXMIMO
diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c
index 8aaebe9d33..16ea1c1d85 100644
--- a/openair1/SIMULATION/LTE_PHY/dlsim.c
+++ b/openair1/SIMULATION/LTE_PHY/dlsim.c
@@ -73,7 +73,6 @@ extern unsigned char offset_mumimo_llr_drange_fix;
 
 
 //#define ABSTRACTION
-//#define PERFECT_CE
 
 /*
   #define RBmask0 0x00fc00fc
@@ -107,7 +106,7 @@ void handler(int sig) {
   exit(1);
 }
 
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,uint8_t fdd_flag, uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL,uint8_t osf) {
+void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,uint8_t fdd_flag, uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL,uint8_t osf,uint32_t perfect_ce) {
 
   LTE_DL_FRAME_PARMS *lte_frame_parms;
   int i;
@@ -186,6 +185,7 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi
     ((PHY_vars_UE->lte_frame_parms).pdsch_config_common).p_b = 1;
   }
 
+  PHY_vars_UE->perfect_ce = perfect_ce;
 
   printf("Done lte_param_init\n");
 
@@ -344,6 +344,7 @@ int main(int argc, char **argv) {
   char channel_model_input[10]="I";
 
   int TB0_active = 1;
+  uint32_t perfect_ce = 0;
 
   LTE_DL_UE_HARQ_t *dlsch0_ue_harq;
   LTE_DL_eNB_HARQ_t *dlsch0_eNB_harq;
@@ -365,8 +366,9 @@ int main(int argc, char **argv) {
   n_frames = 1000;
   snr0 = 0;
   num_layers = 1;
+  perfect_ce = 0;
 
-  while ((c = getopt (argc, argv, "ahdpZDe:m:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:")) != -1) {
+  while ((c = getopt (argc, argv, "ahdpZDe:m:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:Y")) != -1) {
     switch (c)
       {
       case 'a':
@@ -564,6 +566,9 @@ int main(int argc, char **argv) {
       case 'Z':
 	dump_table=1;
 	break;
+      case 'Y':
+	perfect_ce=1;
+	break;
       case 'h':
       default:
 	printf("%s -h(elp) -a(wgn on) -d(ci decoding on) -p(extended prefix on) -m mcs1 -M mcs2 -n n_frames -s snr0 -x transmission mode (1,2,5,6) -y TXant -z RXant -I trch_file\n",argv[0]);
@@ -645,7 +650,7 @@ int main(int argc, char **argv) {
     printf("dual_stream_UE=%d\n", dual_stream_UE);
   }
 
-  lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,fdd_flag,Nid_cell,tdd_config,N_RB_DL,osf);  
+  lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,fdd_flag,Nid_cell,tdd_config,N_RB_DL,osf,perfect_ce);  
 
   eNB_id_i = PHY_vars_UE->n_connected_eNB;
   
@@ -2718,7 +2723,7 @@ int main(int argc, char **argv) {
 		       0,
 		       0);
 	      stop_meas(&PHY_vars_UE->ofdm_demod_stats);
-#ifdef PERFECT_CE
+              if (PHY_vars_UE->perfect_ce==1) {
 	      if (awgn_flag==0) {
 		// fill in perfect channel estimates
 		freq_channel(eNB2UE[round],PHY_vars_UE->lte_frame_parms.N_RB_DL,12*PHY_vars_UE->lte_frame_parms.N_RB_DL + 1);
@@ -2751,7 +2756,7 @@ int main(int argc, char **argv) {
 		      }
 		  }
 	      }
-#endif
+              }
  
 
 	      if ((Ns==((2*subframe))) && (l==0)) {
diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c
index 1f76a1a73b..100f794b1e 100644
--- a/openair1/SIMULATION/LTE_PHY/mbmssim.c
+++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c
@@ -60,7 +60,7 @@
 PHY_VARS_eNB *PHY_vars_eNB;
 PHY_VARS_UE *PHY_vars_UE;
 
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,lte_frame_type_t frame_type, uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL,uint8_t osf) {
+void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,lte_frame_type_t frame_type, uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL,uint8_t osf,uint32_t perfect_ce) {
 
   LTE_DL_FRAME_PARMS *lte_frame_parms;
 
@@ -121,7 +121,8 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi
   phy_init_lte_ue(PHY_vars_UE,1,0);
   phy_init_lte_eNB(PHY_vars_eNB,0,0,0);
 
-  
+ 
+  PHY_vars_UE->perfect_ce = perfect_ce; 
   printf("Done lte_param_init\n");
 
 
@@ -174,6 +175,7 @@ int main(int argc, char **argv) {
   
   uint8_t N_RB_DL=25,osf=1;
   double BW=5.0;
+  uint32_t perfect_ce = 0;
 
   lte_frame_type_t frame_type = FDD; 
 
@@ -201,7 +203,7 @@ int main(int argc, char **argv) {
     rxdata[0] = (int *)malloc16(FRAME_LENGTH_BYTES);
     rxdata[1] = (int *)malloc16(FRAME_LENGTH_BYTES);
   */
-  while ((c = getopt (argc, argv, "ahA:Cp:n:s:S:t:x:y:z:N:F:R:O:dm:i:")) != -1)
+  while ((c = getopt (argc, argv, "ahA:Cp:n:s:S:t:x:y:z:N:F:R:O:dm:i:Y")) != -1)
     {
       switch (c)
 	{
@@ -266,6 +268,9 @@ int main(int argc, char **argv) {
 	case 'O':
 	  osf = atoi(optarg);
 	  break;
+        case 'Y':
+          perfect_ce = 1;
+          break;
 	default:
 	case 'h':
 	  printf("%s -h(elp) -p(subframe) -N cell_id -g channel_model -n n_frames -t Delayspread -s snr0 -S snr1 -i snr increment -z RXant \n",argv[0]);
@@ -309,7 +314,7 @@ int main(int argc, char **argv) {
   if (transmission_mode==2)
     n_tx=2;
 
-  lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,frame_type,Nid_cell,tdd_config,N_RB_DL,osf);
+  lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,frame_type,Nid_cell,tdd_config,N_RB_DL,osf,perfect_ce);
 
 
 
diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c
index b1098e5658..d707171443 100644
--- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c
+++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c
@@ -59,7 +59,7 @@ PHY_VARS_UE *PHY_vars_UE;
 #define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2)
 #define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
 
-void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL,lte_frame_type_t frame_type,uint8_t osf) {
+void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,unsigned char extended_prefix_flag,uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL,lte_frame_type_t frame_type,uint8_t osf,uint32_t perfect_ce) {
 
   unsigned int i;
   LTE_DL_FRAME_PARMS *lte_frame_parms;
@@ -135,6 +135,7 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi
   PHY_vars_UE->PHY_measurements.n_adj_cells=2;
   PHY_vars_UE->PHY_measurements.adj_cell_id[0] = Nid_cell+1;
   PHY_vars_UE->PHY_measurements.adj_cell_id[1] = Nid_cell+2;
+  PHY_vars_UE->perfect_ce = perfect_ce;
   for (i=0;i<3;i++)
     lte_gold(lte_frame_parms,PHY_vars_UE->lte_gold_table[i],Nid_cell+i);    
   
@@ -548,10 +549,9 @@ int main(int argc, char **argv) {
   int re_offset;
   uint32_t *txptr; 
   int aarx;
-#ifdef PERFECT_CE
   int k;
-#endif
   double BW=5.0;
+  uint32_t perfect_ce = 0;
 
   number_of_cards = 1;
   openair_daq_vars.rx_rf_mode = 1;
@@ -565,7 +565,7 @@ int main(int argc, char **argv) {
     rxdata[0] = (int *)malloc16(FRAME_LENGTH_BYTES);
     rxdata[1] = (int *)malloc16(FRAME_LENGTH_BYTES);
   */
-  while ((c = getopt (argc, argv, "hapFg:R:c:n:s:x:y:z:L:M:N:I:f:i:S:P:")) != -1) {
+  while ((c = getopt (argc, argv, "hapFg:R:c:n:s:x:y:z:L:M:N:I:f:i:S:P:Y")) != -1) {
     switch (c)
       {
       case 'a':
@@ -699,6 +699,9 @@ int main(int argc, char **argv) {
       case 'P':
 	num_phich_interf=atoi(optarg);
 	break;
+      case 'Y':
+        perfect_ce = 1;
+        break;
       case 'h':  
 	printf("%s -h(elp) -a(wgn on) -c tdd_config -n n_frames -r RiceanFactor -s snr0 -t Delayspread -x transmission mode (1,2,6) -y TXant -z RXant -L AggregLevelUEspec -M AggregLevelCommonDCI -N DCIFormat\n\n",argv[0]);
 	printf("-h This message\n");
@@ -757,7 +760,8 @@ int main(int argc, char **argv) {
 		 Nid_cell,
 		 tdd_config,
 		 N_RB_DL,frame_type,
-		 osf);
+		 osf,
+                 perfect_ce);
   
 #ifdef XFORMS
   fl_initialize (&argc, argv, NULL, 0, 0);
@@ -1131,7 +1135,7 @@ int main(int argc, char **argv) {
 	       0,
 	       0);
         
-#ifdef PERFECT_CE
+              if (PHY_vars_UE->perfect_ce == 1) {
 	      if (awgn_flag==0) {
 		// fill in perfect channel estimates
 		freq_channel(eNB2UE,PHY_vars_UE->lte_frame_parms.N_RB_DL,12*PHY_vars_UE->lte_frame_parms.N_RB_DL + 1);
@@ -1164,8 +1168,7 @@ int main(int argc, char **argv) {
 		      }
 		  }
 	      }
-#endif
-
+              }
 
       if (l==((PHY_vars_eNB->lte_frame_parms.Ncp==0)?4:3)) {
           
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index 416cea7dc0..dc7a1f013d 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -567,7 +567,7 @@ void schedule_ulsch_rnti(module_id_t   module_idP,
   uint16_t                TBS,i;
   int32_t                buffer_occupancy=0;
   uint32_t                cqi_req,cshift,ndi,mcs,rballoc,tpc;
-  int32_t                 normalized_rx_power, target_rx_power=-75;
+  int32_t                 normalized_rx_power, target_rx_power=-90;
   static int32_t          tpc_accumulated=0;
 
   int n,CC_id;
diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c
index 6757717446..e4a0f8ad20 100644
--- a/openair2/LAYER2/MAC/main.c
+++ b/openair2/LAYER2/MAC/main.c
@@ -112,7 +112,7 @@ void mac_UE_out_of_sync_ind(module_id_t module_idP, frame_t frameP, uint16_t eNB
 }
 
 
-int mac_top_init(int eMBMS_active, uint8_t cba_group_active, uint8_t HO_active){
+int mac_top_init(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, uint8_t HO_active){
 
   module_id_t    Mod_id,i,j;
   RA_TEMPLATE *RA_template;
@@ -185,7 +185,7 @@ int mac_top_init(int eMBMS_active, uint8_t cba_group_active, uint8_t HO_active){
   if (Is_rrc_registered == 1){
       LOG_I(MAC,"[MAIN] calling RRC\n");
 #ifndef CELLULAR //nothing to be done yet for cellular
-      openair_rrc_top_init(eMBMS_active, cba_group_active,HO_active);
+      openair_rrc_top_init(eMBMS_active, uecap_xer, cba_group_active,HO_active);
 #endif
   }
   else {
@@ -401,7 +401,7 @@ void mac_top_cleanup(void){
   free( Mac_rlc_xface);
 }
 
-int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, uint8_t cba_group_active, uint8_t HO_active) {
+int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, char *uecap_xer,uint8_t cba_group_active, uint8_t HO_active) {
 
 
 
@@ -510,7 +510,7 @@ int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, uint8_t cba_group_
   mac_xface->get_PHR = get_PHR;
   LOG_D(MAC,"[MAIN] ALL INIT OK\n");
 
-  mac_xface->macphy_init(eMBMS_active,cba_group_active,HO_active);
+  mac_xface->macphy_init(eMBMS_active,uecap_xer,cba_group_active,HO_active);
 
   //Mac_rlc_xface->Is_cluster_head[0] = 1;
   //Mac_rlc_xface->Is_cluster_head[1] = 0;
diff --git a/openair2/LAYER2/MAC/proto.h b/openair2/LAYER2/MAC/proto.h
index dc0d1ea0b6..c435d21b14 100644
--- a/openair2/LAYER2/MAC/proto.h
+++ b/openair2/LAYER2/MAC/proto.h
@@ -156,7 +156,7 @@ void chbch_phy_sync_success(module_id_t module_idP,frame_t frameP,uint8_t eNB_in
 
 void mrbch_phy_sync_failure(module_id_t module_idP, frame_t frameP,uint8_t free_eNB_index);
 
-int mac_top_init(int eMBMS_active, uint8_t cba_group_active, uint8_t HO_active);
+int mac_top_init(int eMBMS_active, char *uecap_xer,uint8_t cba_group_active, uint8_t HO_active);
 
 char layer2_init_UE(module_id_t module_idP);
 
@@ -469,7 +469,7 @@ uint8_t *parse_ulsch_header(uint8_t *mac_header,
                        uint16_t tx_lenght);
 
 
-int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, uint8_t cba_group_active, uint8_t HO_active);
+int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, uint8_t HO_active);
 int mac_init(void);
 int add_new_ue(module_id_t Mod_id, int CC_id, rnti_t rnti,int harq_pid);
 int mac_remove_ue(module_id_t Mod_id, int UE_id,int frameP);
diff --git a/openair2/PHY_INTERFACE/defs.h b/openair2/PHY_INTERFACE/defs.h
index c1b301c0d7..4a7a8ad1cf 100755
--- a/openair2/PHY_INTERFACE/defs.h
+++ b/openair2/PHY_INTERFACE/defs.h
@@ -63,7 +63,7 @@ do {
 typedef struct
   {
     /// Pointer function that initializes L2
-    int (*macphy_init)(int eMBMS_active, uint8_t CBA_active,uint8_t HO_active);
+    int (*macphy_init)(int eMBMS_active, char *uecap_xer, uint8_t CBA_active,uint8_t HO_active);
 
     /// Pointer function that stops the low-level scheduler due an exit condition
     void (*macphy_exit)(const char *);
diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c
index 42621f7a2d..940069d63b 100644
--- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c
+++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c
@@ -356,7 +356,7 @@ uint8_t do_MIB(uint8_t Mod_id, LTE_DL_FRAME_PARMS *frame_parms, uint32_t frame,
                                    (void*)&mib,
                                    buffer,
                                    100);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
 #if defined(ENABLE_ITTI)
@@ -560,7 +560,7 @@ uint8_t do_SIB1(uint8_t Mod_id, LTE_DL_FRAME_PARMS *frame_parms, uint8_t *buffer
                                    (void*)bcch_message,
                                    buffer,
                                    100);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
 #if defined(ENABLE_ITTI)
@@ -1074,7 +1074,7 @@ uint8_t do_SIB23(uint8_t Mod_id,
                                    (void*)bcch_message,
                                    buffer,
                                    900);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
 #if defined(ENABLE_ITTI)
@@ -1164,7 +1164,7 @@ uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv) {
                                    (void*)&ul_ccch_msg,
                                    buffer,
                                    100);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
 #if defined(ENABLE_ITTI)
@@ -1242,7 +1242,7 @@ uint8_t do_RRCConnectionSetupComplete(uint8_t Mod_id, uint8_t *buffer, const uin
                                    (void*)&ul_dcch_msg,
                                    buffer,
                                    100);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
 #if defined(ENABLE_ITTI)
@@ -1296,7 +1296,7 @@ uint8_t do_RRCConnectionReconfigurationComplete(uint8_t Mod_id, uint8_t *buffer,
                                    (void*)&ul_dcch_msg,
                                    buffer,
                                    100);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
 #if defined(ENABLE_ITTI)
@@ -1611,7 +1611,7 @@ uint8_t do_RRCConnectionSetup(uint8_t Mod_id,
                                    (void*)&dl_ccch_msg,
                                    buffer,
                                    100);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
 #if defined(ENABLE_ITTI)
@@ -1678,7 +1678,7 @@ uint8_t do_SecurityModeCommand(uint8_t Mod_id,
                                    (void*)&dl_dcch_msg,
                                    buffer,
                                    100);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
 #if defined(ENABLE_ITTI)
@@ -1745,7 +1745,7 @@ uint8_t do_UECapabilityEnquiry(uint8_t Mod_id,
                                    (void*)&dl_dcch_msg,
                                    buffer,
                                    100);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
   #if defined(ENABLE_ITTI)
@@ -1891,7 +1891,7 @@ uint16_t do_RRCConnectionReconfiguration(uint8_t                             Mod
                                    (void*)&dl_dcch_msg,
                                    buffer,
                                    RRC_BUF_SIZE); 
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
 #ifdef XER_PRINT
@@ -2077,7 +2077,7 @@ uint8_t do_MBSFNAreaConfig(uint8_t Mod_id,
                                    (void*)mcch_message,
                                    buffer,
                                    100);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
 #if defined(ENABLE_ITTI)
@@ -2202,7 +2202,7 @@ uint8_t do_MeasurementReport(uint8_t Mod_id, uint8_t *buffer,int measid,int phy_
 
 
 
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
                enc_rval.failed_type->name, enc_rval.encoded);
 
 #if defined(ENABLE_ITTI)
@@ -2295,143 +2295,169 @@ uint8_t do_ULInformationTransfer(uint8_t **buffer, uint32_t pdu_length, uint8_t
   return encoded;
 }
 
-OAI_UECapability_t *fill_ue_capability(void) {
+//OAI_UECapability_t *fill_ue_capability(void) {
+OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname) {
   static OAI_UECapability_t UECapability; /* TODO declared static to allow returning this has an address should be allocated in a cleaner way. */
   SupportedBandEUTRA_t Bandlist[4];
   // BandInfoEUTRA_t BandInfo_meas[4];
   InterFreqBandInfo_t InterFreqBandInfo[4][4];
   BandInfoEUTRA_t BandInfoEUTRA[4];
 
-  UE_EUTRA_Capability_t *UE_EUTRA_Capability;
   asn_enc_rval_t enc_rval;
+  asn_dec_rval_t dec_rval;
+
   long maxNumberROHC_ContextSessions = PDCP_Parameters__maxNumberROHC_ContextSessions_cs16;
   int i;
 
-  Bandlist[0].bandEUTRA  = 33;  // 1900-1920 TDD
-  Bandlist[0].halfDuplex = 0;
-  Bandlist[1].bandEUTRA  = 38;  // 2570-2620 TDD 
-
-  Bandlist[1].halfDuplex = 0;
-  Bandlist[2].bandEUTRA  = 5;   // 824-849 , 869-894 FDD
-  Bandlist[2].halfDuplex = 0;
-  Bandlist[3].bandEUTRA  = 7;   // 2500-2570, 2620-2690 FDD
-  Bandlist[3].halfDuplex = 0;
-
-  memset((void*)InterFreqBandInfo, 0, sizeof(InterFreqBandInfo));
-  memset((void*)BandInfoEUTRA, 0, sizeof(BandInfoEUTRA));
-
-  InterFreqBandInfo[0][0].interFreqNeedForGaps = 0;
-  InterFreqBandInfo[0][1].interFreqNeedForGaps = 1;
-  InterFreqBandInfo[0][2].interFreqNeedForGaps = 1;
-  InterFreqBandInfo[0][3].interFreqNeedForGaps = 1;
-  InterFreqBandInfo[1][0].interFreqNeedForGaps = 1;
-  InterFreqBandInfo[1][1].interFreqNeedForGaps = 0;
-  InterFreqBandInfo[1][2].interFreqNeedForGaps = 1;
-  InterFreqBandInfo[1][3].interFreqNeedForGaps = 1;
-  InterFreqBandInfo[2][0].interFreqNeedForGaps = 1;
-  InterFreqBandInfo[2][1].interFreqNeedForGaps = 1;
-  InterFreqBandInfo[2][2].interFreqNeedForGaps = 0;
-  InterFreqBandInfo[2][3].interFreqNeedForGaps = 1;
-  InterFreqBandInfo[3][0].interFreqNeedForGaps = 1;
-  InterFreqBandInfo[3][1].interFreqNeedForGaps = 1;
-  InterFreqBandInfo[3][2].interFreqNeedForGaps = 1;
-  InterFreqBandInfo[3][3].interFreqNeedForGaps = 0;
-
-  LOG_I(RRC,"Allocating %d bytes for UE_EUTRA_Capability\n",sizeof(*UE_EUTRA_Capability));
+  UE_EUTRA_Capability_t *UE_EUTRA_Capability;
+  char UE_EUTRA_Capability_xer[8192];
+  size_t size; 
+  FILE *f;
 
+  LOG_I(RRC,"Allocating %u bytes for UE_EUTRA_Capability\n",sizeof(*UE_EUTRA_Capability));
+  
   UE_EUTRA_Capability = CALLOC(1, sizeof(*UE_EUTRA_Capability));
 
-  UE_EUTRA_Capability->accessStratumRelease = 0;//AccessStratumRelease_rel8;
-  UE_EUTRA_Capability->ue_Category          = 4;
-  UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0001=0;
-  UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0002=0;
-  UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0003=0;
-  UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0004=0;
-  UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0006=0;
-  UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0101=0;
-  UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0102=0;
-  UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0103=0;
-  UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0104=0;
-
-  UE_EUTRA_Capability->pdcp_Parameters.maxNumberROHC_ContextSessions = &maxNumberROHC_ContextSessions;
-
-  UE_EUTRA_Capability->phyLayerParameters.ue_TxAntennaSelectionSupported = 0;
-  UE_EUTRA_Capability->phyLayerParameters.ue_SpecificRefSigsSupported    = 0;
-  UE_EUTRA_Capability->rf_Parameters.supportedBandListEUTRA.list.count                          = 0;
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->rf_Parameters.supportedBandListEUTRA.list,(void*)&Bandlist[0]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->rf_Parameters.supportedBandListEUTRA.list,(void*)&Bandlist[1]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->rf_Parameters.supportedBandListEUTRA.list,(void*)&Bandlist[2]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->rf_Parameters.supportedBandListEUTRA.list,(void*)&Bandlist[3]);
-
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list,(void*)&BandInfoEUTRA[0]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list,(void*)&BandInfoEUTRA[1]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list,(void*)&BandInfoEUTRA[2]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list,(void*)&BandInfoEUTRA[3]);
-
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[0]->interFreqBandList.list,(void*)&InterFreqBandInfo[0][0]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[0]->interFreqBandList.list,(void*)&InterFreqBandInfo[0][1]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[0]->interFreqBandList.list,(void*)&InterFreqBandInfo[0][2]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[0]->interFreqBandList.list,(void*)&InterFreqBandInfo[0][3]);
-
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[1]->interFreqBandList.list,(void*)&InterFreqBandInfo[1][0]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[1]->interFreqBandList.list,(void*)&InterFreqBandInfo[1][1]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[1]->interFreqBandList.list,(void*)&InterFreqBandInfo[1][2]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[1]->interFreqBandList.list,(void*)&InterFreqBandInfo[1][3]);
-
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[2]->interFreqBandList.list,(void*)&InterFreqBandInfo[2][0]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[2]->interFreqBandList.list,(void*)&InterFreqBandInfo[2][1]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[2]->interFreqBandList.list,(void*)&InterFreqBandInfo[2][2]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[2]->interFreqBandList.list,(void*)&InterFreqBandInfo[2][3]);
-
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[3]->interFreqBandList.list,(void*)&InterFreqBandInfo[3][0]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[3]->interFreqBandList.list,(void*)&InterFreqBandInfo[3][1]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[3]->interFreqBandList.list,(void*)&InterFreqBandInfo[3][2]);
-  ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[3]->interFreqBandList.list,(void*)&InterFreqBandInfo[3][3]);
-
-  // UE_EUTRA_Capability->measParameters.bandListEUTRA.list.count                         = 0;  // no measurements on other bands
-  // UE_EUTRA_Capability->featureGroupIndicators  // null
-  // UE_EUTRA_Capability->interRAT_Parameters     // null
-  
+  assert(UE_EUTRA_Capability);
+
+  if (!UE_EUTRA_Capability_xer_fname)  {
+    Bandlist[0].bandEUTRA  = 33;  // 1900-1920 TDD
+    Bandlist[0].halfDuplex = 0;
+    Bandlist[1].bandEUTRA  = 38;  // 2570-2620 TDD 
+    
+    Bandlist[1].halfDuplex = 0;
+    Bandlist[2].bandEUTRA  = 5;   // 824-849 , 869-894 FDD
+    Bandlist[2].halfDuplex = 0;
+    Bandlist[3].bandEUTRA  = 7;   // 2500-2570, 2620-2690 FDD
+    Bandlist[3].halfDuplex = 0;
+    
+    memset((void*)InterFreqBandInfo, 0, sizeof(InterFreqBandInfo));
+    memset((void*)BandInfoEUTRA, 0, sizeof(BandInfoEUTRA));
+    
+    InterFreqBandInfo[0][0].interFreqNeedForGaps = 0;
+    InterFreqBandInfo[0][1].interFreqNeedForGaps = 1;
+    InterFreqBandInfo[0][2].interFreqNeedForGaps = 1;
+    InterFreqBandInfo[0][3].interFreqNeedForGaps = 1;
+    InterFreqBandInfo[1][0].interFreqNeedForGaps = 1;
+    InterFreqBandInfo[1][1].interFreqNeedForGaps = 0;
+    InterFreqBandInfo[1][2].interFreqNeedForGaps = 1;
+    InterFreqBandInfo[1][3].interFreqNeedForGaps = 1;
+    InterFreqBandInfo[2][0].interFreqNeedForGaps = 1;
+    InterFreqBandInfo[2][1].interFreqNeedForGaps = 1;
+    InterFreqBandInfo[2][2].interFreqNeedForGaps = 0;
+    InterFreqBandInfo[2][3].interFreqNeedForGaps = 1;
+    InterFreqBandInfo[3][0].interFreqNeedForGaps = 1;
+    InterFreqBandInfo[3][1].interFreqNeedForGaps = 1;
+    InterFreqBandInfo[3][2].interFreqNeedForGaps = 1;
+    InterFreqBandInfo[3][3].interFreqNeedForGaps = 0;
+    
+    
+    UE_EUTRA_Capability->accessStratumRelease = 0;//AccessStratumRelease_rel8;
+    UE_EUTRA_Capability->ue_Category          = 4;
+    UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0001=0;
+    UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0002=0;
+    UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0003=0;
+    UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0004=0;
+    UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0006=0;
+    UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0101=0;
+    UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0102=0;
+    UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0103=0;
+    UE_EUTRA_Capability->pdcp_Parameters.supportedROHC_Profiles.profile0x0104=0;
+    
+    UE_EUTRA_Capability->pdcp_Parameters.maxNumberROHC_ContextSessions = &maxNumberROHC_ContextSessions;
+    
+    UE_EUTRA_Capability->phyLayerParameters.ue_TxAntennaSelectionSupported = 0;
+    UE_EUTRA_Capability->phyLayerParameters.ue_SpecificRefSigsSupported    = 0;
+    UE_EUTRA_Capability->rf_Parameters.supportedBandListEUTRA.list.count                          = 0;
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->rf_Parameters.supportedBandListEUTRA.list,(void*)&Bandlist[0]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->rf_Parameters.supportedBandListEUTRA.list,(void*)&Bandlist[1]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->rf_Parameters.supportedBandListEUTRA.list,(void*)&Bandlist[2]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->rf_Parameters.supportedBandListEUTRA.list,(void*)&Bandlist[3]);
+    
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list,(void*)&BandInfoEUTRA[0]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list,(void*)&BandInfoEUTRA[1]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list,(void*)&BandInfoEUTRA[2]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list,(void*)&BandInfoEUTRA[3]);
+    
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[0]->interFreqBandList.list,(void*)&InterFreqBandInfo[0][0]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[0]->interFreqBandList.list,(void*)&InterFreqBandInfo[0][1]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[0]->interFreqBandList.list,(void*)&InterFreqBandInfo[0][2]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[0]->interFreqBandList.list,(void*)&InterFreqBandInfo[0][3]);
+    
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[1]->interFreqBandList.list,(void*)&InterFreqBandInfo[1][0]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[1]->interFreqBandList.list,(void*)&InterFreqBandInfo[1][1]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[1]->interFreqBandList.list,(void*)&InterFreqBandInfo[1][2]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[1]->interFreqBandList.list,(void*)&InterFreqBandInfo[1][3]);
+    
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[2]->interFreqBandList.list,(void*)&InterFreqBandInfo[2][0]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[2]->interFreqBandList.list,(void*)&InterFreqBandInfo[2][1]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[2]->interFreqBandList.list,(void*)&InterFreqBandInfo[2][2]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[2]->interFreqBandList.list,(void*)&InterFreqBandInfo[2][3]);
+    
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[3]->interFreqBandList.list,(void*)&InterFreqBandInfo[3][0]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[3]->interFreqBandList.list,(void*)&InterFreqBandInfo[3][1]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[3]->interFreqBandList.list,(void*)&InterFreqBandInfo[3][2]);
+    ASN_SEQUENCE_ADD(&UE_EUTRA_Capability->measParameters.bandListEUTRA.list.array[3]->interFreqBandList.list,(void*)&InterFreqBandInfo[3][3]);
+    
+    // UE_EUTRA_Capability->measParameters.bandListEUTRA.list.count                         = 0;  // no measurements on other bands
+    // UE_EUTRA_Capability->featureGroupIndicators  // null
+    // UE_EUTRA_Capability->interRAT_Parameters     // null
+  }
+
+  else {
+   
+    f = fopen(UE_EUTRA_Capability_xer_fname, "r"); 
+    assert(f); 
+    size = fread(UE_EUTRA_Capability_xer, 1, sizeof UE_EUTRA_Capability_xer, f); 
+    if (size == 0 || size == sizeof UE_EUTRA_Capability_xer) { 
+       LOG_E(RRC,"UE Capabilities XER file %s is too large\n", UE_EUTRA_Capability_xer_fname); 
+       return(NULL);      
+    }
+ 
+    dec_rval = xer_decode(0, &asn_DEF_UE_EUTRA_Capability, (void*)UE_EUTRA_Capability, UE_EUTRA_Capability_xer, size); 
+    assert(dec_rval.code == RC_OK);
+  }
+
   UECapability.UE_EUTRA_Capability = UE_EUTRA_Capability;
 #ifdef XER_PRINT
   xer_fprint(stdout,&asn_DEF_UE_EUTRA_Capability,(void *)UE_EUTRA_Capability);
 #endif
   enc_rval = uper_encode_to_buffer(&asn_DEF_UE_EUTRA_Capability,
-                                   (void*)UE_EUTRA_Capability,
-                                   &UECapability.sdu[0],
-                                   MAX_UE_CAPABILITY_SIZE);
-  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %d)!\n",
-               enc_rval.failed_type->name, enc_rval.encoded);
-
+				   (void*)UE_EUTRA_Capability,
+				   &UECapability.sdu[0],
+				   MAX_UE_CAPABILITY_SIZE);
+  AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
+	       enc_rval.failed_type->name, enc_rval.encoded);
+  
 #if defined(ENABLE_ITTI)
 # if defined(DISABLE_XER_SPRINT)
   {
     MessageDef *msg_p;
-
+    
     msg_p = itti_alloc_new_message (TASK_RRC_UE, RRC_UE_EUTRA_CAPABILITY);
     memcpy (&msg_p->ittiMsg, (void *) UE_EUTRA_Capability, sizeof(RrcUeEutraCapability));
-
+    
     itti_send_msg_to_task (TASK_UNKNOWN, NB_eNB_INST, msg_p);
   }
 # else
   {
     char        message_string[10000];
     size_t      message_string_size;
-
+    
     if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_UE_EUTRA_Capability, (void *)UE_EUTRA_Capability)) > 0)
-    {
-      MessageDef *msg_p;
-
-      msg_p = itti_alloc_new_message_sized (TASK_RRC_UE, RRC_UE_EUTRA_CAPABILITY, message_string_size + sizeof (IttiMsgText));
-      msg_p->ittiMsg.rrc_ue_eutra_capability.size = message_string_size;
-      memcpy(&msg_p->ittiMsg.rrc_ue_eutra_capability.text, message_string, message_string_size);
-
-      itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, msg_p);
-    }
+      {
+	MessageDef *msg_p;
+	
+	msg_p = itti_alloc_new_message_sized (TASK_RRC_UE, RRC_UE_EUTRA_CAPABILITY, message_string_size + sizeof (IttiMsgText));
+	msg_p->ittiMsg.rrc_ue_eutra_capability.size = message_string_size;
+	memcpy(&msg_p->ittiMsg.rrc_ue_eutra_capability.text, message_string, message_string_size);
+	
+	itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, msg_p);
+      }
   }
 # endif
 #endif
-
+  
   UECapability.sdu_size = (enc_rval.encoded + 7) / 8;
   LOG_I(PHY, "[RRC]UE Capability encoded, %d bytes (%d bits)\n",
         UECapability.sdu_size, enc_rval.encoded + 7);
diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.h b/openair2/RRC/LITE/MESSAGES/asn1_msg.h
index 13244bbb95..eb8104cd87 100644
--- a/openair2/RRC/LITE/MESSAGES/asn1_msg.h
+++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.h
@@ -232,7 +232,7 @@ uint8_t do_DLInformationTransfer(uint8_t Mod_id, uint8_t **buffer, uint8_t trans
 
 uint8_t do_ULInformationTransfer(uint8_t **buffer, uint32_t pdu_length, uint8_t *pdu_buffer);
 
-OAI_UECapability_t *fill_ue_capability(void);
+OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer);
 
 uint8_t do_UECapabilityEnquiry(uint8_t Mod_id,
                                uint8_t *buffer,
diff --git a/openair2/RRC/LITE/proto.h b/openair2/RRC/LITE/proto.h
index d32e5b82fc..ca5306217c 100644
--- a/openair2/RRC/LITE/proto.h
+++ b/openair2/RRC/LITE/proto.h
@@ -39,7 +39,7 @@
 //main.c
 int rrc_init_global_param(void);
 int L3_xface_init(void);
-void openair_rrc_top_init(int eMBMS_active, uint8_t cba_group_active,uint8_t HO_enabled);
+void openair_rrc_top_init(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active,uint8_t HO_enabled);
 char openair_rrc_lite_eNB_init(module_id_t module_idP);
 char openair_rrc_lite_ue_init(module_id_t module_idP,uint8_t CH_IDX);
 void rrc_config_buffer(SRB_INFO *srb_info, uint8_t Lchan_type, uint8_t Role);
diff --git a/openair2/RRC/LITE/rrc_common.c b/openair2/RRC/LITE/rrc_common.c
index 54bfef6ebd..475d5acb22 100644
--- a/openair2/RRC/LITE/rrc_common.c
+++ b/openair2/RRC/LITE/rrc_common.c
@@ -206,7 +206,7 @@ void rrc_config_buffer(SRB_INFO *Srb_info, uint8_t Lchan_type, uint8_t Role) {
 }
 
 /*------------------------------------------------------------------------------*/
-void openair_rrc_top_init(int eMBMS_active, uint8_t cba_group_active,uint8_t HO_active){
+void openair_rrc_top_init(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active,uint8_t HO_active){
   /*-----------------------------------------------------------------------------*/
 
   module_id_t         module_id;
@@ -221,16 +221,11 @@ void openair_rrc_top_init(int eMBMS_active, uint8_t cba_group_active,uint8_t HO_
     LOG_D(RRC, "ALLOCATE %d Bytes for UE_RRC_INST @ %p\n", (unsigned int)(NB_UE_INST*sizeof(UE_RRC_INST)), UE_rrc_inst);
 
     // fill UE capability
-    UECap = fill_ue_capability ();
+    UECap = fill_ue_capability (uecap_xer);
     for (module_id = 0; module_id < NB_UE_INST; module_id++) {
       UE_rrc_inst[module_id].UECapability = UECap->sdu;
       UE_rrc_inst[module_id].UECapability_size = UECap->sdu_size;
     }
-    /*
-     do_UECapabilityEnquiry(0,
-     dummy_buffer,
-     0,
-     0);*/
 #ifdef Rel10
     LOG_I(RRC,"[UE] eMBMS active state is %d \n", eMBMS_active);
     for (module_id=0;module_id<NB_UE_INST;module_id++) {
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c
index 85d969b304..a6d2733ea5 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.c
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.c
@@ -152,6 +152,7 @@ const char* eurecomFunctionsNames[] = {
     "dlsch_decoding7",
     "rx_pdcch",
     "dci_decoding",  
+    "rx_phich",  
     "phy_ue_config_sib2", 
     "macxface_phy_config_sib1_eNB",
     "macxface_phy_config_sib2_eNB",
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h
index 54c15820b0..f8aaef077e 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.h
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.h
@@ -127,6 +127,7 @@ typedef enum {
   VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING7,
   VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH,
   VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING,
+  VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PHICH,
   VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_UE_CONFIG_SIB2,
   VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_CONFIG_SIB1_ENB,
   VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_CONFIG_SIB2_ENB,
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/Makefile.inc b/targets/ARCH/ETHERNET/USERSPACE/LIB/Makefile.inc
index e6467b7f05..6e58738c4f 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/Makefile.inc
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/Makefile.inc
@@ -1,4 +1,4 @@
 ETHERNET_OBJ += $(OPENAIR_TARGETS)/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.o
 ETHERNET_FILE_OBJ += $(OPENAIR_TARGETS)/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
-ETHERNET_CFLAGS += -I$(OPENAIR_TARGETS)/ARCH/COMMON -I$(OPENAIR_TARGETS)/ARCH/ETHERNET/USERSPACE/LIB/ -I$(OPENAIR_TARGETS)/COMMON
+ETHERNET_CFLAGS += -O2 -I$(OPENAIR_TARGETS)/ARCH/COMMON -I$(OPENAIR_TARGETS)/ARCH/ETHERNET/USERSPACE/LIB/ -I$(OPENAIR_TARGETS)/COMMON
 
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
index bc4a34d537..775889c0fd 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
@@ -106,15 +106,15 @@ int ethernet_write_data(int Mod_id, openair0_timestamp timestamp, const void **b
   ((int16_t *)buff2)[0] = 1+(antenna_id<<1);
   ((int16_t *)buff2)[1] = nsamps;
   *((openair0_timestamp *)(buff2+(sizeof(int16_t)*2))) = timestamp;
-  printf("Timestamp TX sent : %d\n",timestamp);
+  //printf("Timestamp TX sent : %d\n",timestamp);
 
 //  printf("buffer head : %d %d %d %d \n",((int16_t *)buff2)[0],((int16_t *)buff2)[1],((int16_t *)buff2)[2],((int16_t *)buff2)[3]);
-  while(n_written < nsamps) {
+  while(n_written < (nsamps<<2)) {
     /* Send packet */
     if ((n_written += sendto(sockfd[Mod_id], 
 			     buff2,
 			     (nsamps<<2)+sizeof(openair0_timestamp)+(2*sizeof(int16_t)), 
-			     0, 
+			     MSG_DONTWAIT, 
 			     (struct sockaddr*)&dest_addr[Mod_id], 
 			     dest_addr_len[Mod_id])) < 0) {
       printf("Send failed for Mod_id %d\n",Mod_id);
@@ -137,16 +137,14 @@ int ethernet_read_data(int Mod_id,openair0_timestamp *timestamp,void **buff, int
   int ret;
   openair0_timestamp temp = *(openair0_timestamp*)(buff2);
   int16_t mesg[2];
-  char str[INET_ADDRSTRLEN];
 
   mesg[0] = 0+(antenna_id<<1);
   mesg[1] = nsamps;
 
-  inet_ntop(AF_INET, &(dest_addr[Mod_id].sin_addr), str, INET_ADDRSTRLEN);
+
   // send command RX for nsamps samples
-    printf("requesting %d samples from (%s:%d)\n",nsamps,str,ntohs(dest_addr[Mod_id].sin_port));
 
-  sendto(sockfd[Mod_id],mesg,4,0,(struct sockaddr *)&dest_addr[Mod_id],dest_addr_len[Mod_id]);
+  sendto(sockfd[Mod_id],mesg,4,MSG_DONTWAIT,(struct sockaddr *)&dest_addr[Mod_id],dest_addr_len[Mod_id]);
 
   bytes_received=0;
   block_cnt=0;
@@ -178,7 +176,7 @@ int ethernet_read_data(int Mod_id,openair0_timestamp *timestamp,void **buff, int
 
   //printf("buffer head : %x %x %x %x \n",((int32_t *)buff2)[0],((int32_t *)buff2)[1],((int32_t *)buff2)[2],((int32_t *)buff2)[3]);
   *timestamp =  *(openair0_timestamp *)(buff2);
-  printf("Received %d samples, timestamp = %d\n",bytes_received>>2,*(int32_t*)timestamp);
+//  printf("Received %d samples, timestamp = %d\n",bytes_received>>2,*(int32_t*)timestamp);
   *(openair0_timestamp *)(buff2) = temp;
   return nsamps;
   
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/UE_config.xml b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/UE_config.xml
new file mode 100644
index 0000000000..c8d57f944a
--- /dev/null
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/UE_config.xml
@@ -0,0 +1,112 @@
+<UE-EUTRA-Capability>
+    <accessStratumRelease><rel8/></accessStratumRelease>
+    <ue-Category>4</ue-Category>
+    <pdcp-Parameters>
+        <supportedROHC-Profiles>
+            <profile0x0001><false/></profile0x0001>
+            <profile0x0002><false/></profile0x0002>
+            <profile0x0003><false/></profile0x0003>
+            <profile0x0004><false/></profile0x0004>
+            <profile0x0006><false/></profile0x0006>
+            <profile0x0101><false/></profile0x0101>
+            <profile0x0102><false/></profile0x0102>
+            <profile0x0103><false/></profile0x0103>
+            <profile0x0104><false/></profile0x0104>
+        </supportedROHC-Profiles>
+        <maxNumberROHC-ContextSessions><cs16/></maxNumberROHC-ContextSessions>
+    </pdcp-Parameters>
+    <phyLayerParameters>
+        <ue-TxAntennaSelectionSupported><false/></ue-TxAntennaSelectionSupported>
+        <ue-SpecificRefSigsSupported><false/></ue-SpecificRefSigsSupported>
+    </phyLayerParameters>
+    <rf-Parameters>
+        <supportedBandListEUTRA>
+            <SupportedBandEUTRA>
+                <bandEUTRA>33</bandEUTRA>
+                <halfDuplex><false/></halfDuplex>
+            </SupportedBandEUTRA>
+            <SupportedBandEUTRA>
+                <bandEUTRA>38</bandEUTRA>
+                <halfDuplex><false/></halfDuplex>
+            </SupportedBandEUTRA>
+            <SupportedBandEUTRA>
+                <bandEUTRA>5</bandEUTRA>
+                <halfDuplex><false/></halfDuplex>
+            </SupportedBandEUTRA>
+            <SupportedBandEUTRA>
+                <bandEUTRA>7</bandEUTRA>
+                <halfDuplex><false/></halfDuplex>
+            </SupportedBandEUTRA>
+        </supportedBandListEUTRA>
+    </rf-Parameters>
+    <measParameters>
+        <bandListEUTRA>
+            <BandInfoEUTRA>
+               <interFreqBandList>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><false/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><true/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><true/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><true/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                </interFreqBandList>
+            </BandInfoEUTRA>
+            <BandInfoEUTRA>
+                <interFreqBandList>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><true/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><false/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><true/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><true/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                </interFreqBandList>
+            </BandInfoEUTRA>
+            <BandInfoEUTRA>
+                <interFreqBandList>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><true/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><true/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><false/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><true/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                </interFreqBandList>
+            </BandInfoEUTRA>
+            <BandInfoEUTRA>
+                <interFreqBandList>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><true/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><true/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><true/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                    <InterFreqBandInfo>
+                        <interFreqNeedForGaps><false/></interFreqNeedForGaps>
+                    </InterFreqBandInfo>
+                </interFreqBandList>
+            </BandInfoEUTRA>
+        </bandListEUTRA>
+    </measParameters>
+    <interRAT-Parameters>
+    </interRAT-Parameters>
+</UE-EUTRA-Capability>
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf
index 72c35b08cc..41b3d8045e 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf
@@ -113,11 +113,21 @@ eNBs =
 
     NETWORK_INTERFACES : 
     {
+<<<<<<< .mine
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth1";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.13.10/24";
+=======
         ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
         ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.13.10/24";
+>>>>>>> .r6319
 
+<<<<<<< .mine
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth1";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.13.10/24";
+=======
         ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
         ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.13.10/24";
+>>>>>>> .r6319
         ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
     };
  /*
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
deleted file mode 100644
index 50077ec06b..0000000000
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+++ /dev/null
@@ -1,143 +0,0 @@
-Active_eNBs = ( "eNB_Eurecom_LTEBox");
-# Asn1_verbosity, choice in: none, info, annoying
-Asn1_verbosity = "none";
-
-eNBs =
-(
- {
-    # real_time choice in {hard, rt-preempt, no}
-    real_time       =  "no";
-    ////////// 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 = (
-    		       	 {
-  			   frame_type					      = "FDD";	
-                           tdd_config 					      = 3;
-                           tdd_config_s            			      = 0;
- 			   prefix_type             			      = "NORMAL";
-  			   eutra_band              			      = 7;
-                           downlink_frequency      			      = 2660000000L;
-                           uplink_frequency_offset 			      = -120000000;
-  			   Nid_cell					      = 0;
-                           N_RB_DL                 			      = 50;
-                           Nid_cell_mbsfn          			      = 0;
-                           nb_antennas_tx          			      = 1;
-                           nb_antennas_rx          			      = 1; 
-			   tx_gain                                            = 90;
-			   rx_gain                                            = 135;
-                           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             			      = 32;
-                           pdsch_referenceSignalPower 			      = -26;
-                           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                                   = -108; 
-	                   pusch_alpha                                        = "AL1";
-	                   pucch_p0_Nominal                                   = -108;
-	                   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;
-
-			 }
-			 );
-    
-    ////////// MME parameters:
-    mme_ip_address      = ( { ipv4       = "192.168.13.11";
-                              ipv6       = "192:168:30::17";
-                              active     = "yes";
-                              preference = "ipv4";
-                            }
-                          );
-
-    NETWORK_INTERFACES : 
-    {
-        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth0";
-        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.13.10/24";
-
-        ENB_INTERFACE_NAME_FOR_S1U               = "eth0";
-        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.13.10/24";
-        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
-    };
-    
-    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/targets/RT/USER/Makefile b/targets/RT/USER/Makefile
index 3c03951d61..b691183b51 100644
--- a/targets/RT/USER/Makefile
+++ b/targets/RT/USER/Makefile
@@ -98,9 +98,11 @@ include $(OPENAIR3_DIR)/RAL-LTE/Makefile.inc
 ifeq ($(USRP),1)
 
 include $(OPENAIR_TARGETS)/ARCH/USRP/USERSPACE/LIB/Makefile.inc
-CFLAGS += -I/opt/include/uhd -L/opt/lib -luhd -lpthread -lstdc++
+#CFLAGS += -I/opt/include/uhd -L/opt/lib -luhd -lpthread -lstdc++
+CFLAGS += -I/usr/include/uhd -L/usr/lib -luhd -lpthread -lstdc++
 CFLAGS += -DUSRP
-LDFLAGS += -L/opt/lib -luhd -lpthread -lstdc++ 
+#LDFLAGS += -L/opt/lib -luhd -lpthread -lstdc++ 
+LDFLAGS += -L/usr/lib/ -luhd -lpthread -lstdc++
 endif
 
 ifeq ($(ETHERNET),1)
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index c31c0d33ff..fedcf8df00 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -214,10 +214,6 @@ static pthread_t                forms_thread; //xforms
 static pthread_t                thread3; //emos
 #endif
 
-#ifdef SPECTRA
-static pthread_t sensing_thread;
-#endif
-
 openair0_device openair0;
 openair0_timestamp timestamp;
 
@@ -258,14 +254,14 @@ static char                    *conf_config_file_name = NULL;
 static char                    *itti_dump_file = NULL;
 #endif
 
-#ifndef USRP
+#ifdef EXMIMO
 double tx_gain[MAX_NUM_CCs][4] = {{20,20,0,0},{20,20,0,0}};
 double rx_gain[MAX_NUM_CCs][4] = {{20,20,0,0},{20,20,0,0}};
 // these are for EXMIMO2 target only
 /*
-static unsigned int             rxg_max[4] =    {133,133,133,133};
-static unsigned int             rxg_med[4] =    {127,127,127,127};
-static unsigned int             rxg_byp[4] =    {120,120,120,120};
+  static unsigned int             rxg_max[4] =    {133,133,133,133};
+  static unsigned int             rxg_med[4] =    {127,127,127,127};
+  static unsigned int             rxg_byp[4] =    {120,120,120,120};
 */
 // these are for EXMIMO2 card 39
 static unsigned int             rxg_max[4] =    {128,128,128,126};
@@ -293,6 +289,22 @@ unsigned int samples_per_frame = 307200;
 unsigned int samples_per_packets = 2048; // samples got every recv or send
 unsigned int tx_forward_nsamps;
 
+#ifndef USRP
+//256 sample blocks
+int sf_bounds_1_5[10]    = {8, 15, 23, 30, 38, 45, 53, 60, 68, 75};
+int sf_bounds_1_5_tx[10] = {4, 11, 19, 26, 34, 41, 49, 56, 64, 71};
+
+int sf_bounds_5[10] = {5,10,15,20,25,30,35,40,45,50};
+int sf_bounds_5_tx[10] = {3,8,13,18,23,28,33,38,43,48};
+
+int sf_bounds_10[10]    = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
+int sf_bounds_10_tx[10] = {5, 15, 25, 35, 45, 55, 65, 75, 85,95};
+
+int sf_bounds_20[10] = {20, 40, 60, 80, 100, 120, 140, 160, 180, 200};
+int sf_bounds_20_tx[10] = {10, 30, 50, 70, 90, 110, 130, 150, 170, 190};
+
+#else
+
 int sf_bounds_1_5[10]    = {8, 15, 23, 30, 38, 45, 53, 60, 68, 75};
 int sf_bounds_1_5_tx[10] = {4, 11, 19, 26, 34, 41, 49, 56, 64, 71};
 
@@ -304,6 +316,7 @@ int sf_bounds_10_tx[10] = {4, 11, 19, 26, 34, 41, 49, 56, 64, 71};
 
 int sf_bounds_20[10] = {15, 30, 45, 60, 75, 90, 105, 120, 135, 150};
 int sf_bounds_20_tx[10] = {7, 22, 37, 52, 67, 82, 97, 112, 127, 142};
+#endif
 
 int *sf_bounds;
 int *sf_bounds_tx;
@@ -338,7 +351,7 @@ static char                     do_forms=0;
 int                             otg_enabled;
 #endif
 //int                             number_of_cards =   1;
-#ifndef USRP
+#ifdef EXMIMO
 static int                      mbox_bounds[20] =   {8,16,24,30,38,46,54,60,68,76,84,90,98,106,114,120,128,136,144, 0}; ///boundaries of slots in terms ob mbox counter rounded up to even numbers
 //static int                      mbox_bounds[20] =   {6,14,22,28,36,44,52,58,66,74,82,88,96,104,112,118,126,134,142, 148}; ///boundaries of slots in terms ob mbox counter rounded up to even numbers
 #endif
@@ -351,14 +364,16 @@ uint32_t target_ul_mcs = 10;
 uint8_t exit_missed_slots=1;
 uint64_t num_missed_slots=0; // counter for the number of missed slots
 
+
 time_stats_t softmodem_stats_mt; // main thread
-time_stats_t softmodem_stats_hw; //  hw acquisation
+time_stats_t softmodem_stats_hw; //  hw acquisition
 time_stats_t softmodem_stats_tx_sf[10]; // total tx time 
 time_stats_t softmodem_stats_rx_sf[10]; // total rx time 
 void reset_opp_meas(void);
 void print_opp_meas(void);
 int transmission_mode=1;
 
+
 int16_t           glog_level         = LOG_DEBUG;
 int16_t           glog_verbosity     = LOG_MED;
 int16_t           hw_log_level       = LOG_DEBUG;
@@ -384,6 +399,16 @@ int16_t           osa_log_level      = LOG_INFO;
 int16_t           osa_log_verbosity  = LOG_MED;
 #endif 
 
+
+#ifdef ETHERNET
+char rrh_eNB_ip[20] = "127.0.0.1";
+int rrh_eNB_port = 1500;
+char *rrh_UE_ip = "127.0.0.1";
+int rrh_UE_port = 1600;
+#endif
+
+char uecap_xer[1024],uecap_xer_in=0;
+
 unsigned int build_rflocal(int txi, int txq, int rxi, int rxq)
 {
   return (txi + (txq<<6) + (rxi<<12) + (rxq<<18));
@@ -492,9 +517,9 @@ void reset_stats(FL_OBJECT *button, long arg) {
       phy_vars_eNB->eNB_UE_stats[i].ulsch_consecutive_errors=0;
       for (j=0;j<phy_vars_eNB->ulsch_eNB[i]->Mdlharq;j++) {
 	phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts[k][j]=0;
-      phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[k][j]=0;
-      phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[k][j]=0;
-      phy_vars_eNB->eNB_UE_stats[i].ulsch_round_fer[k][j]=0;
+	phy_vars_eNB->eNB_UE_stats[i].ulsch_decoding_attempts_last[k][j]=0;
+	phy_vars_eNB->eNB_UE_stats[i].ulsch_round_errors[k][j]=0;
+	phy_vars_eNB->eNB_UE_stats[i].ulsch_round_fer[k][j]=0;
       }
     }
     phy_vars_eNB->eNB_UE_stats[i].dlsch_sliding_cnt=0;
@@ -540,7 +565,7 @@ static void *scope_thread(void *arg) {
 # ifdef ENABLE_XFORMS_WRITE_STATS
       len =
 # endif
-      dump_eNB_l2_stats (stats_buffer, 0);
+	dump_eNB_l2_stats (stats_buffer, 0);
       fl_set_object_label(form_stats_l2->stats_text, stats_buffer);
 
 # ifdef ENABLE_XFORMS_WRITE_STATS
@@ -746,37 +771,6 @@ void *emos_thread (void *arg)
 }
 #endif
 
-#ifdef SPECTRA
-void *sensing (void *arg)
-{
-  struct sched_param sched_param;
-  
-  sched_param.sched_priority = sched_get_priority_max(SCHED_FIFO)-1; 
-  sched_setscheduler(0, SCHED_FIFO,&sched_param);
-  
-  printf("[SPECTRA] sensing thread started with priority %d\n",sched_param.sched_priority);
- 
-  while (oai_exit==0) {
-
-    
-    openair0_cfg[0].rx_freq[2]+= 5e6;
-    if (openair0_cfg[0].rx_freq[2] >= 750000000)
-      openair0_cfg[0].rx_freq[2] = 727500000;
-    
-
-    //LOG_I(HW,"[SPECTRA] changing frequency to %u \n",(uint32_t)openair0_cfg[1].rx_freq[0]);
-
-    openair0_reconfig(&openair0_cfg[0]);
-
-    usleep(200000);
-    //sleep(1);
-    
-  }
-
-  pthread_exit((void*) arg);
-
-}
-#endif
 
 
 #if defined(ENABLE_ITTI)
@@ -953,25 +947,25 @@ static void * eNB_thread_tx(void *param) {
 #endif 
 
  
-/*#if defined(ENABLE_ITTI)
+  /*#if defined(ENABLE_ITTI)
   // Wait for eNB application initialization to be complete (eNB registration to MME)
   wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB);
-#endif*/
+  #endif*/
 
 #ifdef RTAI
   sprintf(task_name,"TXC%dS%d",proc->CC_id,proc->subframe);
   task = rt_task_init_schmod(nam2num(task_name), 0, 0, 0, SCHED_FIFO, 0xF);
 
   if (task==NULL) {
-    LOG_E(PHY,"[SCHED][eNB] Problem starting eNB_proc_TX thread_index %d (%s)!!!!\n",proc->subframe,task_name);
-    return 0;
-  }
+  LOG_E(PHY,"[SCHED][eNB] Problem starting eNB_proc_TX thread_index %d (%s)!!!!\n",proc->subframe,task_name);
+  return 0;
+}
   else {
-    LOG_I(PHY,"[SCHED][eNB] eNB TX thread CC %d SF %d started with id %p\n",
-	  proc->CC_id,
-	  proc->subframe,
-	  task);
-  }
+  LOG_I(PHY,"[SCHED][eNB] eNB TX thread CC %d SF %d started with id %p\n",
+    proc->CC_id,
+    proc->subframe,
+    task);
+}
 #else
 #ifdef LOWLATENCY
   attr.size = sizeof(attr);
@@ -993,7 +987,7 @@ static void * eNB_thread_tx(void *param) {
     proc->subframe, gettid(),sched_getcpu());
 #else 
   LOG_I(HW,"[SCHED] eNB TX thread %d started on CPU %d\n",
-	  proc->subframe,sched_getcpu());
+    proc->subframe,sched_getcpu());
 #endif
 
 #endif
@@ -1009,66 +1003,66 @@ static void * eNB_thread_tx(void *param) {
 
   while (!oai_exit){
     
-    vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->subframe),0);
+  vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->subframe),0);
     
-    //LOG_I(PHY,"Locking mutex for eNB proc %d (IC %d,mutex %p)\n",proc->subframe,proc->instance_cnt,&proc->mutex);
-    //    printf("Locking mutex for eNB proc %d (subframe_tx %d))\n",proc->subframe,proc->instance_cnt_tx);
+  //LOG_I(PHY,"Locking mutex for eNB proc %d (IC %d,mutex %p)\n",proc->subframe,proc->instance_cnt,&proc->mutex);
+  //    printf("Locking mutex for eNB proc %d (subframe_tx %d))\n",proc->subframe,proc->instance_cnt_tx);
 
-    if (pthread_mutex_lock(&proc->mutex_tx) != 0) {
-      LOG_E(PHY,"[SCHED][eNB] error locking mutex for eNB TX proc %d\n",proc->subframe);
-      oai_exit=1;
-    }
-    else {
+  if (pthread_mutex_lock(&proc->mutex_tx) != 0) {
+  LOG_E(PHY,"[SCHED][eNB] error locking mutex for eNB TX proc %d\n",proc->subframe);
+  oai_exit=1;
+}
+  else {
       
-      while (proc->instance_cnt_tx < 0) {
-	//	LOG_I(PHY,"Waiting and unlocking mutex for eNB proc %d (IC %d,lock %d)\n",proc->subframe,proc->instance_cnt,pthread_mutex_trylock(&proc->mutex));
-	//printf("Waiting and unlocking mutex for eNB proc %d (subframe_tx %d)\n",proc->subframe,proc->instance_cnt_tx);
+  while (proc->instance_cnt_tx < 0) {
+  //	LOG_I(PHY,"Waiting and unlocking mutex for eNB proc %d (IC %d,lock %d)\n",proc->subframe,proc->instance_cnt,pthread_mutex_trylock(&proc->mutex));
+  //printf("Waiting and unlocking mutex for eNB proc %d (subframe_tx %d)\n",proc->subframe,proc->instance_cnt_tx);
 	
-	pthread_cond_wait(&proc->cond_tx,&proc->mutex_tx);
-      }
-      //      LOG_I(PHY,"Waking up and unlocking mutex for eNB proc %d instance_cnt_tx %d\n",proc->subframe,proc->instance_cnt_tx);
-      if (pthread_mutex_unlock(&proc->mutex_tx) != 0) {	
-	LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for eNB TX proc %d\n",proc->subframe);
-	oai_exit=1;
-      }
-    }
-    vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->subframe),1);    
-    vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX_ENB, proc->frame_tx);
-    start_meas(&softmodem_stats_tx_sf[proc->subframe]);
+  pthread_cond_wait(&proc->cond_tx,&proc->mutex_tx);
+}
+  //      LOG_I(PHY,"Waking up and unlocking mutex for eNB proc %d instance_cnt_tx %d\n",proc->subframe,proc->instance_cnt_tx);
+  if (pthread_mutex_unlock(&proc->mutex_tx) != 0) {	
+  LOG_E(PHY,"[SCHED][eNB] error unlocking mutex for eNB TX proc %d\n",proc->subframe);
+  oai_exit=1;
+}
+}
+  vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->subframe),1);    
+  vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX_ENB, proc->frame_tx);
+  start_meas(&softmodem_stats_tx_sf[proc->subframe]);
 
-    if (oai_exit) break;
+  if (oai_exit) break;
 
     
-    if ((((PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == TDD)&&
-	  (subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_tx)==SF_DL))||
-	 (PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == FDD))) {
+  if ((((PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == TDD)&&
+    (subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_tx)==SF_DL))||
+    (PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.frame_type == FDD))) {
 
-      phy_procedures_eNB_TX(proc->subframe,PHY_vars_eNB_g[0][proc->CC_id],0,no_relay,NULL);
+  phy_procedures_eNB_TX(proc->subframe,PHY_vars_eNB_g[0][proc->CC_id],0,no_relay,NULL);
       
-    }
-    if ((subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_tx)==SF_S)) {
-      phy_procedures_eNB_TX(proc->subframe,PHY_vars_eNB_g[0][proc->CC_id],0,no_relay,NULL);
-    }
+}
+  if ((subframe_select(&PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms,proc->subframe_tx)==SF_S)) {
+  phy_procedures_eNB_TX(proc->subframe,PHY_vars_eNB_g[0][proc->CC_id],0,no_relay,NULL);
+}
     
-    do_OFDM_mod_rt(proc->subframe_tx,PHY_vars_eNB_g[0][proc->CC_id]);  
+  do_OFDM_mod_rt(proc->subframe_tx,PHY_vars_eNB_g[0][proc->CC_id]);  
     
-    if (pthread_mutex_lock(&proc->mutex_tx) != 0) {
-      printf("[openair][SCHED][eNB] error locking mutex for eNB TX proc %d\n",proc->subframe);
-    }
-    else {
-      proc->instance_cnt_tx--;
+  if (pthread_mutex_lock(&proc->mutex_tx) != 0) {
+  printf("[openair][SCHED][eNB] error locking mutex for eNB TX proc %d\n",proc->subframe);
+}
+  else {
+  proc->instance_cnt_tx--;
       
-      if (pthread_mutex_unlock(&proc->mutex_tx) != 0) {	
-	printf("[openair][SCHED][eNB] error unlocking mutex for eNB TX proc %d\n",proc->subframe);
-      }
-    }
+  if (pthread_mutex_unlock(&proc->mutex_tx) != 0) {	
+  printf("[openair][SCHED][eNB] error unlocking mutex for eNB TX proc %d\n",proc->subframe);
+}
+}
 
     
-    proc->frame_tx++;
-    if (proc->frame_tx==1024)
-      proc->frame_tx=0;
+  proc->frame_tx++;
+  if (proc->frame_tx==1024)
+    proc->frame_tx=0;
 
-  }    
+}    
   stop_meas(&softmodem_stats_tx_sf[proc->subframe]);
   vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_TX0+(2*proc->subframe),0);        
 #ifdef HARD_RT
@@ -1091,8 +1085,8 @@ static void * eNB_thread_tx(void *param) {
 #endif
 }
 
-int eNB_thread_rx_status[10];
-static void * eNB_thread_rx(void *param) {
+  int eNB_thread_rx_status[10];
+  static void * eNB_thread_rx(void *param) {
 
   //unsigned long cpuid;
   eNB_proc_t *proc = (eNB_proc_t*)param;
@@ -1107,19 +1101,19 @@ static void * eNB_thread_rx(void *param) {
 #endif
 #endif
 
-/*#if defined(ENABLE_ITTI)
+  /*#if defined(ENABLE_ITTI)
   // Wait for eNB application initialization to be complete (eNB registration to MME) 
   wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB);
-#endif*/
+  #endif*/
 
 #ifdef RTAI
   sprintf(task_name,"RXC%1dS%1d",proc->CC_id,proc->subframe);
   task = rt_task_init_schmod(nam2num(task_name), 0, 0, 0, SCHED_FIFO, 0xF);
 
   if (task==NULL) {
-    LOG_E(PHY,"[SCHED][eNB] Problem starting eNB_proc_RX thread_index %d (%s)!!!!\n",proc->subframe,task_name);
-    return 0;
-  }
+  LOG_E(PHY,"[SCHED][eNB] Problem starting eNB_proc_RX thread_index %d (%s)!!!!\n",proc->subframe,task_name);
+  return 0;
+}
   else {
     LOG_I(PHY,"[SCHED][eNB] eNB RX thread CC_id %d SF %d started with id %p\n", /*  on CPU %d*/
 	  proc->CC_id,
@@ -1144,10 +1138,10 @@ static void * eNB_thread_rx(void *param) {
     exit(-1);
   }
   LOG_I(HW,"[SCHED] eNB RX deadline thread %d(id %ld) started on CPU %d\n",
-	  proc->subframe, gettid(),sched_getcpu());
+	proc->subframe, gettid(),sched_getcpu());
 #else 
   LOG_I(HW,"[SCHED][eNB] eNB RX thread %d started on CPU %d\n",
-	  proc->subframe,sched_getcpu());
+	proc->subframe,sched_getcpu());
 #endif
  
 #endif
@@ -1389,43 +1383,46 @@ static void *eNB_thread(void *arg)
   void *rxp[2],*txp[2];
   int i;
 
+  int trace_cnt=0;
   hw_subframe = 0;
 #endif
 
+  struct timespec trx_time0,trx_time1,trx_time2;
+
   /*
-#if defined(ENABLE_ITTI)
-  // Wait for eNB application initialization to be complete (eNB registration to MME) 
-  wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB);
-#endif
+    #if defined(ENABLE_ITTI)
+    // Wait for eNB application initialization to be complete (eNB registration to MME) 
+    wait_system_ready ("Waiting for eNB application to be ready %s\r", &start_eNB);
+    #endif
   */
 
 #ifdef RTAI
-   task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
+  task = rt_task_init_schmod(nam2num("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF);
 #else 
 #ifdef LOWLATENCY
-   attr.size = sizeof(attr);
-   attr.sched_flags = 0;
-   attr.sched_nice = 0;
-   attr.sched_priority = 0;
+  attr.size = sizeof(attr);
+  attr.sched_flags = 0;
+  attr.sched_nice = 0;
+  attr.sched_priority = 0;
    
-   /* This creates a .5 ms  reservation */
-   attr.sched_policy = SCHED_DEADLINE;
-   attr.sched_runtime  = 0.5 * 1000000;
-   attr.sched_deadline = 0.5 * 1000000;
-   attr.sched_period   = 1   * 1000000;
+  /* This creates a .5 ms  reservation */
+  attr.sched_policy = SCHED_DEADLINE;
+  attr.sched_runtime  = 0.5 * 1000000;
+  attr.sched_deadline = 0.5 * 1000000;
+  attr.sched_period   = 1   * 1000000;
    
-   /* pin the eNB main thread to CPU0*/
-   /* if (pthread_setaffinity_np(pthread_self(), sizeof(mask),&mask) <0) {
-        perror("[MAIN_ENB_THREAD] pthread_setaffinity_np failed\n");
-	}*/
+  /* pin the eNB main thread to CPU0*/
+  /* if (pthread_setaffinity_np(pthread_self(), sizeof(mask),&mask) <0) {
+     perror("[MAIN_ENB_THREAD] pthread_setaffinity_np failed\n");
+     }*/
    
-   if (sched_setattr(0, &attr, flags) < 0 ){
-     perror("[SCHED] main eNB thread: sched_setattr failed\n");
-     exit_fun("Nothing to add");
-   } else {
-     LOG_I(HW,"[SCHED][eNB] eNB main deadline thread %ld started on CPU %d\n",
-	    gettid(),sched_getcpu());
-   }
+  if (sched_setattr(0, &attr, flags) < 0 ){
+    perror("[SCHED] main eNB thread: sched_setattr failed\n");
+    exit_fun("Nothing to add");
+  } else {
+    LOG_I(HW,"[SCHED][eNB] eNB main deadline thread %ld started on CPU %d\n",
+	  gettid(),sched_getcpu());
+  }
 #endif
 #endif
 
@@ -1548,6 +1545,7 @@ static void *eNB_thread(void *arg)
 	vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_RXCNT,rx_cnt*samples_per_packets);
 
 
+	clock_gettime(CLOCK_MONOTONIC,&trx_time0);
 	for (i=0;i<PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx;i++)
 	  rxp[i] = (void*)&rxdata[i][rx_cnt*samples_per_packets];
 	start_meas(&softmodem_stats_hw);
@@ -1559,6 +1557,7 @@ static void *eNB_thread(void *arg)
 				     samples_per_packets,
 				     PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx);
 	stop_meas(&softmodem_stats_hw);
+	clock_gettime(CLOCK_MONOTONIC,&trx_time1);
 
 	if (rxs != samples_per_packets)
 	  oai_exit=1;
@@ -1571,15 +1570,22 @@ static void *eNB_thread(void *arg)
 	
 	for (i=0;i<PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx;i++)
 	  txp[i] = (void*)&txdata[i][tx_cnt*samples_per_packets];
+		
 	openair0.trx_write_func(&openair0, 
 				(timestamp+samples_per_packets*tx_delay-tx_forward_nsamps), 
 				txp,
 				samples_per_packets, 
 				PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx,
 				1);
-
+	
 	stop_meas(&softmodem_stats_mt);
+	clock_gettime(CLOCK_MONOTONIC,&trx_time2);
+
 	vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE,0);
+
+	if (trace_cnt++<10) 
+	  printf("TRX: t1 %llu (trx_read), t2 %llu (trx_write)\n",(long long unsigned int)(trx_time1.tv_nsec  - trx_time0.tv_nsec), (long long unsigned int)(trx_time2.tv_nsec - trx_time1.tv_nsec));
+
 #else
 	rt_sleep_ns(1000000);
 #endif
@@ -1685,7 +1691,7 @@ static void *eNB_thread(void *arg)
 		LOG_E(PHY,"[eNB] ERROR pthread_cond_signal for eNB RX thread %d\n",sf);
 	      }
               //else
-		// LOG_I(PHY,"[eNB] pthread_cond_signal for eNB RX thread %d instance_cnt_rx %d\n",sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx);
+	      // LOG_I(PHY,"[eNB] pthread_cond_signal for eNB RX thread %d instance_cnt_rx %d\n",sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx);
 	    }
 	    else {
 	      LOG_W(PHY,"[eNB] Frame %d, eNB RX thread %d busy!! instance_cnt %d CC_id %d\n",PHY_vars_eNB_g[0][CC_id]->proc[sf].frame_rx,sf,PHY_vars_eNB_g[0][CC_id]->proc[sf].instance_cnt_rx,CC_id);
@@ -1877,6 +1883,11 @@ static void *UE_thread_synch(void *arg) {
 
 static void *UE_thread_tx(void *arg) {
 
+#ifdef LOWLATENCY
+  struct sched_attr attr;
+  unsigned int flags = 0;
+#endif
+
   PHY_VARS_UE *UE = (PHY_VARS_UE*)arg;
 
 #ifndef OPENAIR2
@@ -1887,6 +1898,24 @@ static void *UE_thread_tx(void *arg) {
 #endif
   UE->instance_cnt_tx=-1;
 
+#ifdef LOWLATENCY
+  attr.size = sizeof(attr);
+  attr.sched_flags = 0;
+  attr.sched_nice = 0;
+  attr.sched_priority = 0;
+  
+  /* This creates a 1ms reservation every 10ms period*/
+  attr.sched_policy = SCHED_DEADLINE;
+  attr.sched_runtime = 1 * 1000000;  // each tx thread requires 1ms to finish its job
+  attr.sched_deadline =1 * 1000000; // each tx thread will finish within 1ms
+  attr.sched_period = 1 * 10000000; // each tx thread has a period of 10ms from the starting point
+  
+  if (sched_setattr(0, &attr, flags) < 0 ){
+    perror("[SCHED] eNB tx thread: sched_setattr failed\n");
+    exit(-1);
+  }
+#endif
+
   mlockall(MCL_CURRENT | MCL_FUTURE);
 
   while (!oai_exit) {
@@ -1940,9 +1969,32 @@ static void *UE_thread_rx(void *arg) {
   
   PHY_VARS_UE *UE = (PHY_VARS_UE*)arg;
   int i;
+
+#ifdef LOWLATENCY
+  struct sched_attr attr;
+  unsigned int flags = 0;
+#endif
   
   UE->instance_cnt_rx=-1;
+
+#ifdef LOWLATENCY
+  attr.size = sizeof(attr);
+  attr.sched_flags = 0;
+  attr.sched_nice = 0;
+  attr.sched_priority = 0;
   
+  /* This creates a 1ms reservation every 10ms period*/
+  attr.sched_policy = SCHED_DEADLINE;
+  attr.sched_runtime = 1 * 1000000;  // each tx thread requires 1ms to finish its job
+  attr.sched_deadline =1 * 1000000; // each tx thread will finish within 1ms
+  attr.sched_period = 1 * 10000000; // each tx thread has a period of 10ms from the starting point
+  
+  if (sched_setattr(0, &attr, flags) < 0 ){
+    perror("[SCHED] eNB tx thread: sched_setattr failed\n");
+    exit(-1);
+  }  
+#endif
+
   mlockall(MCL_CURRENT | MCL_FUTURE);
   
 #ifndef EXMIMO
@@ -2041,6 +2093,13 @@ static void *UE_thread(void *arg) {
   unsigned int rxs;
   void *rxp[2],*txp[2];
 
+#ifdef LOWLATENCY
+  struct sched_attr attr;
+  unsigned int flags = 0;
+  unsigned long mask = 1; /* processor 0 */
+#endif
+
+
   printf("waiting for sync (UE_thread)\n");
 #ifdef RTAI
   rt_sem_wait(sync_sem);
@@ -2054,6 +2113,32 @@ static void *UE_thread(void *arg) {
 #endif
 
   printf("starting UE thread\n");
+#ifdef LOWLATENCY
+  attr.size = sizeof(attr);
+  attr.sched_flags = 0;
+  attr.sched_nice = 0;
+  attr.sched_priority = 0;
+   
+  /* This creates a .5 ms  reservation */
+  attr.sched_policy = SCHED_DEADLINE;
+  attr.sched_runtime  = 0.5 * 1000000;
+  attr.sched_deadline = 0.5 * 1000000;
+  attr.sched_period   = 1   * 1000000;
+   
+  /* pin the UE main thread to CPU0*/
+  /* if (pthread_setaffinity_np(pthread_self(), sizeof(mask),&mask) <0) {
+     perror("[MAIN_ENB_THREAD] pthread_setaffinity_np failed\n");
+     }*/
+   
+  if (sched_setattr(0, &attr, flags) < 0 ){
+    perror("[SCHED] main eNB thread: sched_setattr failed\n");
+    exit_fun("Nothing to add");
+  } else {
+    LOG_I(HW,"[SCHED][eNB] eNB main deadline thread %ld started on CPU %d\n",
+	  gettid(),sched_getcpu());
+  }
+#endif
+  mlockall(MCL_CURRENT | MCL_FUTURE);
 
   T0 = rt_get_time_ns();
   while (!oai_exit) {
@@ -2417,18 +2502,18 @@ static void *UE_thread(void *arg) {
 	
 	/*if (mode == rx_calib_ue) {
 	  exit_fun("[HW][UE] UE in RX calibration mode");
-	}
-	else {*/
-	  is_synchronized = 1;
-	  //start the DMA transfers
-	  //LOG_D(HW,"Before openair0_start_rt_acquisition \n");
-	  for (card=0;card<openair0_num_detected_cards;card++)
-	    openair0_start_rt_acquisition(card);
+	  }
+	  else {*/
+	is_synchronized = 1;
+	//start the DMA transfers
+	//LOG_D(HW,"Before openair0_start_rt_acquisition \n");
+	for (card=0;card<openair0_num_detected_cards;card++)
+	  openair0_start_rt_acquisition(card);
 	    
-	  hw_slot_offset = (PHY_vars_UE_g[0][0]->rx_offset<<1) / PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti;
-	  //LOG_D(HW,"Got synch: hw_slot_offset %d\n",hw_slot_offset);
-	  oai_exit=1;
-	  /*}*/
+	hw_slot_offset = (PHY_vars_UE_g[0][0]->rx_offset<<1) / PHY_vars_UE_g[0][0]->lte_frame_parms.samples_per_tti;
+	//LOG_D(HW,"Got synch: hw_slot_offset %d\n",hw_slot_offset);
+	oai_exit=1;
+	/*}*/
       }
       else {
 	if (openair_daq_vars.freq_offset >= 0) {
@@ -2544,9 +2629,15 @@ static void get_options (int argc, char **argv) {
   int clock_src;
 #endif
   int CC_id;
+#ifdef EXMIMO
   char rxg_fname[256], line[1000];
   FILE *rxg_fd;
   int l;
+#endif
+
+
+  size_t size; 
+  FILE *f;
 
   const Enb_properties_array_t *enb_properties;
   
@@ -2569,7 +2660,7 @@ static void get_options (int argc, char **argv) {
     {"no-L2-connect",   no_argument,        NULL, LONG_OPTION_NO_L2_CONNECT},
     {NULL, 0, NULL, 0}};
   
-  while ((c = getopt_long (argc, argv, "C:dK:g:F:G:qO:m:SUVRMr:P:s:t:x:",long_options,NULL)) != -1) {
+  while ((c = getopt_long (argc, argv, "C:dK:g:F:G:qO:m:SUVRM:r:P:s:t:x:",long_options,NULL)) != -1) {
     switch (c) {
     case LONG_OPTION_ULSCH_MAX_CONSECUTIVE_ERRORS:
       ULSCH_max_consecutive_errors = atoi(optarg);
@@ -2602,7 +2693,9 @@ static void get_options (int argc, char **argv) {
       mode = no_L2_connect;
       break;
     case 'M':
-      multi_thread=0;
+#ifdef ETHERNET
+      strcpy(rrh_eNB_ip,optarg);
+#endif
       break;
     case 'C':
       for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
@@ -2848,6 +2941,13 @@ static void get_options (int argc, char **argv) {
       } // CC_id
     }// i
   }
+  else if ((UE_flag == 1) && (conf_config_file_name != NULL)) {
+
+    // Here the configuration file is the XER encoded UE capabilities
+    // Read it in and store in asn1c data structures
+    strcpy(uecap_xer,conf_config_file_name);
+    uecap_xer_in=1;
+  }
 }
 
 int main(int argc, char **argv) {
@@ -2857,8 +2957,8 @@ int main(int argc, char **argv) {
   int *eNB_thread_status_p;
   //  int *eNB_thread_status_rx[10],*eNB_thread_status_tx[10];
 #endif
-  int i,j,aa,card;
-#if defined (XFORMS) || defined (EMOS) || (! defined (RTAI)) || defined (SPECTRA)
+  int i,aa,card;
+#if defined (XFORMS) || defined (EMOS)
   void *status;
 #endif
   
@@ -2873,19 +2973,7 @@ int main(int argc, char **argv) {
   unsigned int tcxo = 114;
 #endif
 
-#ifdef ETHERNET
-  char *rrh_eNB_ip = "192.168.12.196";
-  int rrh_eNB_port = 50000;
-  char *rrh_UE_ip = "192.168.12.196";
-  int rrh_UE_port = 22222;
-#endif
-  //  int amp;
-  // uint8_t prach_fmt;
-  // int N_ZC;
-
-  //  int ret, ant;
-  int ant_offset=0;
-#if defined (XFORMS) || defined (SPECTRA)
+#if defined (XFORMS)
   int ret;
 #endif
 #if defined (EMOS) || (! defined (RTAI))
@@ -3271,11 +3359,19 @@ int main(int argc, char **argv) {
     tx_delay = 5;
 #endif
   }
-  
+
+#ifdef ETHERNET
+  if (frame_parms[0]->N_RB_DL == 6) samples_per_packets = 256;
+  else samples_per_packets = 1536;
+
+  max_cnt = sf_bounds[9]; 
+  printf("HW: samples_per_packets %d, max_cnt %d\n",samples_per_packets,max_cnt);
+#endif
+
 
   for (card=0;card<MAX_CARDS;card++) {
 #ifndef EXMIMO
-    openair0_cfg[card].samples_per_packet = 1024;//samples_per_packets;
+    openair0_cfg[card].samples_per_packet = samples_per_packets;
 #endif
     printf("HW: Configuring card %d, nb_antennas_tx/rx %d/%d\n",card,
 	   ((UE_flag==0) ? PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx : PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_tx),
@@ -3283,16 +3379,16 @@ int main(int argc, char **argv) {
     openair0_cfg[card].Mod_id = 0;
 #ifdef ETHERNET
     if (UE_flag){
-    printf("ETHERNET: Configuring UE ETH for %s:%d\n",rrh_UE_ip,rrh_UE_port);
-    openair0_cfg[card].rrh_ip   = &rrh_UE_ip[0];
-    openair0_cfg[card].rrh_port = rrh_UE_port;
+      printf("ETHERNET: Configuring UE ETH for %s:%d\n",rrh_UE_ip,rrh_UE_port);
+      openair0_cfg[card].rrh_ip   = &rrh_UE_ip[0];
+      openair0_cfg[card].rrh_port = rrh_UE_port;
     }
     else
-    {
-    printf("ETHERNET: Configuring eNB ETH for %s:%d\n",rrh_eNB_ip,rrh_eNB_port);
-    openair0_cfg[card].rrh_ip   = &rrh_eNB_ip[0];
-    openair0_cfg[card].rrh_port = rrh_eNB_port;
-    }
+      {
+	printf("ETHERNET: Configuring eNB ETH for %s:%d\n",rrh_eNB_ip,rrh_eNB_port);
+	openair0_cfg[card].rrh_ip   = &rrh_eNB_ip[0];
+	openair0_cfg[card].rrh_port = rrh_eNB_port;
+      }
 #endif
     openair0_cfg[card].sample_rate = sample_rate;
     openair0_cfg[card].tx_bw = bw;
@@ -3307,7 +3403,7 @@ int main(int argc, char **argv) {
 
       openair0_cfg[card].tx_gain[i] = tx_gain[0][i];
       openair0_cfg[card].rx_gain[i] = ((UE_flag==0) ? PHY_vars_eNB_g[0][0]->rx_total_gain_eNB_dB : 
-				                      PHY_vars_UE_g[0][0]->rx_total_gain_dB) - 73;  // calibrated for USRP B210 @ 2.6 GHz
+				       PHY_vars_UE_g[0][0]->rx_total_gain_dB) - 73;  // calibrated for USRP B210 @ 2.6 GHz
       openair0_cfg[card].tx_freq[i] = (UE_flag==0) ? downlink_frequency[0][i] : downlink_frequency[0][i]+uplink_frequency_offset[0][i];
       openair0_cfg[card].rx_freq[i] = (UE_flag==0) ? downlink_frequency[0][i] + uplink_frequency_offset[0][i] : downlink_frequency[0][i];
       printf("Setting tx_gain %f, rx_gain %f, tx_freq %f, rx_freq %f\n",
@@ -3330,7 +3426,7 @@ int main(int argc, char **argv) {
 #ifdef OPENAIR2
   int eMBMS_active=0;
 
-  l2_init(frame_parms[0],eMBMS_active,
+  l2_init(frame_parms[0],eMBMS_active,(uecap_xer_in==1)?uecap_xer:NULL,
 	  0,// cba_group_active
 	  0); // HO flag
   if (UE_flag == 1)
@@ -3356,12 +3452,12 @@ int main(int argc, char **argv) {
   init_seeds(g_otg->seed);
   g_otg->num_nodes = 2;
   for (i=0; i<g_otg->num_nodes; i++){
-    for (j=0; j<g_otg->num_nodes; j++){
-      g_otg->application_idx[i][j] = 1;
-      //g_otg->packet_gen_type=SUBSTRACT_STRING;
-      g_otg->aggregation_level[i][j][0]=1;
-      g_otg->application_type[i][j][0] = BCBR; //MCBR, BCBR
-    }
+  for (j=0; j<g_otg->num_nodes; j++){
+  g_otg->application_idx[i][j] = 1;
+  //g_otg->packet_gen_type=SUBSTRACT_STRING;
+  g_otg->aggregation_level[i][j][0]=1;
+  g_otg->application_type[i][j][0] = BCBR; //MCBR, BCBR
+  }
   }
   init_predef_traffic(UE_flag ? 1 : 0, UE_flag ? 0 : 1);
   //  }
@@ -3530,11 +3626,6 @@ int main(int argc, char **argv) {
   printf("EMOS thread created, ret=%d\n",ret);
 #endif
 
-#ifdef SPECTRA
-  ret = pthread_create(&sensing_thread, NULL, sensing, NULL);
-  printf("sensing thread created, ret=%d\n",ret);
-#endif
-
   rt_sleep_ns(10*FRAME_PERIOD);
 
 #ifndef RTAI
@@ -3722,12 +3813,6 @@ int main(int argc, char **argv) {
   printf("[OPENAIR][SCHED][CLEANUP] EMOS FIFO closed, error_code %d\n", error_code);
 #endif
 
-#ifdef SPECTRA
-  printf("waiting for sensing thread\n");
-  pthread_cancel(sensing_thread);
-  pthread_join(sensing_thread,&status);
-#endif
-
   if (ouput_vcd)
     vcd_signal_dumper_close();
 
diff --git a/targets/RT/USER/ue.gtkw b/targets/RT/USER/ue.gtkw
index e311ba4b55..1b98219f60 100644
--- a/targets/RT/USER/ue.gtkw
+++ b/targets/RT/USER/ue.gtkw
@@ -1,22 +1,24 @@
 [*]
 [*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
-[*] Tue Sep  9 07:03:39 2014
+[*] Sat Jan  3 21:45:58 2015
 [*]
 [dumpfile] "/tmp/openair_dump_UE.vcd"
-[dumpfile_mtime] "Tue Sep  9 06:37:26 2014"
-[dumpfile_size] 94912
-[savefile] "/homes/knopp/Devel/openair4G/trunk/targets/RT/USER/ue.gtkw"
-[timestart] 12883150000
+[dumpfile_mtime] "Sat Jan  3 21:45:33 2015"
+[dumpfile_size] 98393197
+[savefile] "/home/haswell/openair4G_knopp/targets/RT/USER/ue.gtkw"
+[timestart] 72755430000
 [size] 1221 600
-[pos] 90 3
-*-21.000000 12886782928 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[pos] 251 123
+*-21.000000 72759034000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 [sst_width] 224
 [signals_width] 262
 [sst_expanded] 1
 [sst_vpaned_height] 143
 @24
-variables.frame_number_UE[63:0]
 variables.hw_subframe[63:0]
+variables.frame_number_UE[63:0]
+@25
+variables.slot_number_UE[63:0]
 @28
 functions.phy_procedures_ue_rx
 functions.ue_slot_fep
@@ -25,7 +27,12 @@ functions.ue_rrc_measurements
 functions.ue_gain_control
 functions.ue_adjust_synch
 functions.lte_ue_pbch_procedures
-@29
 functions.lte_ue_pdcch_procedures
+functions.rx_pdcch
+functions.dci_decoding
+functions.phy_ue_ulsch_encoding
+functions.phy_ue_ulsch_modulation
+functions.phy_ue_ulsch_scrambling
+functions.phy_ue_config_sib2
 [pattern_trace] 1
 [pattern_trace] 0
diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c
index ea9472773f..6ebc33c91c 100644
--- a/targets/SIMU/USER/oaisim_functions.c
+++ b/targets/SIMU/USER/oaisim_functions.c
@@ -922,6 +922,7 @@ void init_openair2(void) {
   for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++)
     l2_init (&PHY_vars_eNB_g[0][CC_id]->lte_frame_parms,
 	     oai_emulation.info.eMBMS_active_state,
+	     NULL,
 	     oai_emulation.info.cba_group_active,
 	     oai_emulation.info.handover_active);
   
diff --git a/targets/build_helper.bash b/targets/build_helper.bash
index f31b1dd1af..38271115ea 100755
--- a/targets/build_helper.bash
+++ b/targets/build_helper.bash
@@ -253,19 +253,19 @@ check_install_freediamter(){
     
     echo "Downloading gnutls archive"
     
-    if [ -f gnutls-3.1.0.tar.xz ];  then
-	$SUDO rm -f gnutls-3.1.0.tar.xz
+    if [ -f gnutls-3.1.23.tar.xz ];  then
+	$SUDO rm -f gnutls-3.1.23.tar.xz
     fi
-    if [ -d gnutls-3.1.0/ ];  then
-	$SUDO rm -rf gnutls-3.1.0/
+    if [ -d gnutls-3.1.23/ ];  then
+	$SUDO rm -rf gnutls-3.1.23/
     fi
     
     test_uninstall_package libgnutls-dev
     
-    $SUDO wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.0.tar.xz 
-    $SUDO tar -xf gnutls-3.1.0.tar.xz
+    $SUDO wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.23.tar.xz 
+    $SUDO tar -xf gnutls-3.1.23.tar.xz
     echo "Uncompressing gnutls archive ($PWD)"
-    cd gnutls-3.1.0/
+    cd gnutls-3.1.23/
     $SUDO ./configure --prefix=/usr
     if [ $? -ne 0 ];   then
 	exit -1
-- 
GitLab