From edd3e2502ace6d388f2e2cebcf8233ef9d16ce59 Mon Sep 17 00:00:00 2001
From: Navid Nikaein <navid.nikaein@eurecom.fr>
Date: Tue, 9 Sep 2014 12:37:16 +0000
Subject: [PATCH] * update OTG performance statistics

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5777 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 openair2/UTIL/OTG/otg_defs.h                  |  13 ++-
 openair2/UTIL/OTG/otg_kpi.c                   | 102 ++++++++++++++----
 openair2/UTIL/OTG/otg_rx.c                    |  56 +++++++---
 openair2/UTIL/OTG/otg_rx.h                    |  10 +-
 openair2/X2AP/Makefile.inc                    |   3 +-
 targets/Makefile.common                       |  16 +--
 .../SIMU/EXAMPLES/OSD/WEBXML/template_27.xml  |  18 ++--
 targets/SIMU/USER/oaisim_config.c             |   7 ++
 8 files changed, 169 insertions(+), 56 deletions(-)

diff --git a/openair2/UTIL/OTG/otg_defs.h b/openair2/UTIL/OTG/otg_defs.h
index 8e644c1cb21..305d2b760c6 100644
--- a/openair2/UTIL/OTG/otg_defs.h
+++ b/openair2/UTIL/OTG/otg_defs.h
@@ -531,11 +531,19 @@ typedef struct{
   float rx_pkt_owd[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX]; 		/*!< \brief  One way delay: rx_ctime - tx_ctime, */
   float rx_owd_min[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC];  		/*!< \brief  One way delay min*/
   float rx_owd_max[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC]; 		/*!< \brief  One way delay max*/
+  float rx_pkt_owd_e2e[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX]; 		/*!< \brief  One way delay: rx_ctime - tx_ctime, */
+  float rx_owd_min_e2e[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC];  		/*!< \brief  One way delay min*/
+  float rx_owd_max_e2e[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC]; 		/*!< \brief  One way delay max*/
   float rx_pkt_owd_history[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][2]; 		/*!< \brief  One way delay histoy used for jitter calculation: rx_ctime - tx_ctime, [2] to keep the owd for the current and previous pkt */  
+ float rx_pkt_owd_history_e2e[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][2]; 		/*!< \brief  One way delay histoy used for jitter calculation: rx_ctime - tx_ctime, [2] to keep the owd for the current and previous pkt */  
   float rx_pkt_jitter[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX]; 		/*!< \brief  One way delay: rx_ctime - tx_ctime */  
-  float rx_jitter_min[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC];  		/*!< \brief  One way delay min*/
+   float rx_jitter_min[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC];  		/*!< \brief  One way delay min*/
   float rx_jitter_max[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC]; 		/*!< \brief  One way delay max*/
   float rx_jitter_avg[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC]; 		/*!< \brief  One way delay max*/
+  float rx_pkt_jitter_e2e[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX]; 		/*!< \brief  One way delay: rx_ctime - tx_ctime */  
+  float rx_jitter_min_e2e[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC];  		/*!< \brief  One way delay min*/
+  float rx_jitter_max_e2e[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC]; 		/*!< \brief  One way delay max*/
+  float rx_jitter_avg_e2e[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC]; 		/*!< \brief  One way delay max*/
   int rx_jitter_sample[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC]; 		/*!< \brief  One way delay max*/
   int nb_loss_pkts_ul[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC];		/*!< \brief  Number of data packets losses for UL*/
   int nb_loss_pkts_dl[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_EMU_TRAFFIC];		/*!< \brief  Number of data packets losses for DL*/
@@ -575,7 +583,8 @@ typedef struct{
   unsigned int total_loss_ul;
   float average_jitter_dl;
   float average_jitter_ul;
-
+  float average_jitter_dl_e2e;
+  float average_jitter_ul_e2e;
   
   /* VOIP tarffic parameters*/
   float voip_transition_prob[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX][MAX_NUM_APPLICATION]; 
diff --git a/openair2/UTIL/OTG/otg_kpi.c b/openair2/UTIL/OTG/otg_kpi.c
index fe2a6b1c14b..c4fdb0cdddb 100644
--- a/openair2/UTIL/OTG/otg_kpi.c
+++ b/openair2/UTIL/OTG/otg_kpi.c
@@ -142,8 +142,13 @@ otg_info->total_loss_ul=0;
 
 void average_pkt_jitter(int src, int dst, int application){
  
-  otg_info->rx_jitter_avg[src][dst][application]/= otg_info->rx_jitter_sample[src][dst][application];
-
+  if (otg_info->rx_jitter_sample[src][dst][application] > 0 ) {
+    otg_info->rx_jitter_avg[src][dst][application]/= otg_info->rx_jitter_sample[src][dst][application];
+    otg_info->rx_jitter_avg_e2e[src][dst][application]/= otg_info->rx_jitter_sample[src][dst][application];
+  } else {
+    LOG_W(OTG,"[src %d][dst %d][app %d]number of samples for jitter calculation is %d\n",src, dst, application, otg_info->rx_jitter_sample[src][dst][application]);
+  } 
+    
   if (otg_info->rx_jitter_avg[src][dst][application] > 0) {
     if (src<NB_eNB_INST)
       otg_info->average_jitter_dl+=otg_info->rx_jitter_avg[src][dst][application];
@@ -152,6 +157,16 @@ void average_pkt_jitter(int src, int dst, int application){
     
     LOG_T(OTG,"average_jitter_dl %lf average_jitter_ul %lf \n",otg_info->average_jitter_dl,otg_info->average_jitter_ul  );
   }
+
+  if (otg_info->rx_jitter_avg_e2e[src][dst][application] > 0) {
+    if (src<NB_eNB_INST)
+      otg_info->average_jitter_dl_e2e+=otg_info->rx_jitter_avg_e2e[src][dst][application];
+    else
+      otg_info->average_jitter_ul_e2e+=otg_info->rx_jitter_avg_e2e[src][dst][application];
+    
+    LOG_T(OTG,"average_jitter_dl %lf average_jitter_ul %lf \n",otg_info->average_jitter_dl_e2e,otg_info->average_jitter_ul_e2e);
+  }
+
 }
 
 void average_total_jitter(){
@@ -159,14 +174,21 @@ unsigned int i,j,k;
 
 otg_info->average_jitter_dl=0;
 otg_info->average_jitter_ul=0;
+otg_info->average_jitter_dl_e2e=0;
+otg_info->average_jitter_ul_e2e=0;
 
   for (i=0; i<(NB_eNB_INST + NB_UE_INST); i++){
     for (j=0; j<(NB_eNB_INST + NB_UE_INST); j++){
       for (k=0; k<MAX_EMU_TRAFFIC; k++){
-	if (i<NB_eNB_INST)
+	if (i<NB_eNB_INST) {
 	  otg_info->average_jitter_dl+=otg_info->rx_jitter_avg[i][j][k];
-	else
+	  otg_info->average_jitter_dl_e2e+=otg_info->rx_jitter_avg_e2e[i][j][k];
+	
+	}
+	else {
 	  otg_info->average_jitter_ul+=otg_info->rx_jitter_avg[i][j][k];
+	  otg_info->average_jitter_ul_e2e+=otg_info->rx_jitter_avg_e2e[i][j][k];
+	}
       }
     }
   }
@@ -190,6 +212,9 @@ void kpi_gen() {
   float min_owd_dl=0;
   float max_owd_dl=0;
 
+  float min_owd_dl_e2e=0;
+  float max_owd_dl_e2e=0;
+
   int tx_total_bytes_dl_background=0;
   int tx_total_pkts_dl_background=0;
   int rx_total_bytes_dl_background=0;
@@ -201,6 +226,8 @@ void kpi_gen() {
 
   float min_owd_ul=0;
   float max_owd_ul=0;  
+  float min_owd_ul_e2e=0;
+  float max_owd_ul_e2e=0;  
 
 
   int tx_total_bytes_dl_multicast=0;
@@ -323,6 +350,12 @@ fc=fopen("/tmp/otg.log","w");;
 	      min_owd_dl=otg_info->rx_owd_min[i][j][k];
 	    if ((max_owd_dl<otg_info->rx_owd_max[i][j][k]) || (max_owd_dl==0))
 	      max_owd_dl=otg_info->rx_owd_max[i][j][k];
+
+	     if ((min_owd_dl_e2e>otg_info->rx_owd_min_e2e[i][j][k]) || (min_owd_dl_e2e==0))
+	      min_owd_dl_e2e=otg_info->rx_owd_min_e2e[i][j][k];
+	    if ((max_owd_dl_e2e<otg_info->rx_owd_max_e2e[i][j][k]) || (max_owd_dl_e2e==0))
+	      max_owd_dl_e2e=otg_info->rx_owd_max_e2e[i][j][k];
+
 	  }
 	  else { // UL
 	    tx_total_bytes_ul+=otg_info->tx_num_bytes[i][j][k];
@@ -337,6 +370,12 @@ fc=fopen("/tmp/otg.log","w");;
 	      min_owd_ul=otg_info->rx_owd_min[i][j][k];
 	    if ((max_owd_ul<otg_info->rx_owd_max[i][j][k]) || (max_owd_ul==0))
 	      max_owd_ul=otg_info->rx_owd_max[i][j][k];
+	    
+	    if ((min_owd_ul_e2e>otg_info->rx_owd_min_e2e[i][j][k]) || (min_owd_ul_e2e==0))
+	      min_owd_ul_e2e=otg_info->rx_owd_min_e2e[i][j][k];
+	    if ((max_owd_ul_e2e<otg_info->rx_owd_max_e2e[i][j][k]) || (max_owd_ul_e2e==0))
+	      max_owd_ul_e2e=otg_info->rx_owd_max_e2e[i][j][k];
+
 	  }
 	  
 	  //LOG_D(OTG,"KPI: (src=%d, dst=%d, appli %d) NB packet TX= %d,  NB packet RX= %d\n ",i, j,  otg_info->tx_num_pkt[i][j][k],  otg_info->rx_num_pkt[i][j][k]);
@@ -502,20 +541,26 @@ fc=fopen("/tmp/otg.log","w");;
     LOG_I(OTG,"[%s] DL [eNB:%d -> UE:%d][%s] \n",traffic_type, i, j, traffic);
   else
     LOG_I(OTG,"[%s] UL [UE:%d -> eNB:%d][%s] \n",traffic_type, i, j, traffic);
-  LOG_I(OTG,"[%s] Total packets(TX)= %d \n",traffic_type, otg_info->tx_num_pkt[i][j][k]);
-  LOG_I(OTG,"[%s] Total packets(RX)= %d \n",traffic_type, otg_info->rx_num_pkt[i][j][k]);
-  LOG_I(OTG,"[%s] Total bytes(TX)= %d \n",traffic_type, otg_info->tx_num_bytes[i][j][k]);
-  LOG_I(OTG,"[%s] Total bytes(RX)= %d \n",traffic_type, otg_info->rx_num_bytes[i][j][k]);
-  LOG_I(OTG,"[%s] OWD MIN (one way)ms= %.2f \n",traffic_type, otg_info->rx_owd_min[i][j][k]);
-  LOG_I(OTG,"[%s] OWD MAX (one way)ms= %.2f \n",traffic_type, otg_info->rx_owd_max[i][j][k]);
-  LOG_I(OTG,"[%s] JITTER AVG ms= %.2f \n",traffic_type, otg_info->rx_jitter_avg[i][j][k]);
-  LOG_I(OTG,"[%s] JITTER MIN ms= %.2f \n",traffic_type, otg_info->rx_jitter_min[i][j][k]);
-  LOG_I(OTG,"[%s] JITTER MAX ms= %.2f \n",traffic_type, otg_info->rx_jitter_max[i][j][k]);
-  LOG_I(OTG,"[%s] TX throughput = %.7f(Kbit/s) \n",traffic_type, otg_info->tx_throughput[i][j][k]);
-  LOG_I(OTG,"[%s] RX goodput= %.7f (Kbit/s) \n",traffic_type, otg_info->rx_goodput[i][j][k]);
+  
+  LOG_I(OTG,"[%s] Total packets(TX)           = %d \n",traffic_type, otg_info->tx_num_pkt[i][j][k]);
+  LOG_I(OTG,"[%s] Total packets(RX)           = %d \n",traffic_type, otg_info->rx_num_pkt[i][j][k]);
+  LOG_I(OTG,"[%s] Total bytes(TX)             = %d \n",traffic_type, otg_info->tx_num_bytes[i][j][k]);
+  LOG_I(OTG,"[%s] Total bytes(RX)             = %d \n",traffic_type, otg_info->rx_num_bytes[i][j][k]);
+  LOG_I(OTG,"[%s] OWD MIN (one way)ms         = %.2f \n",traffic_type, otg_info->rx_owd_min[i][j][k]);
+  LOG_I(OTG,"[%s] OWD MAX (one way)ms         = %.2f \n",traffic_type, otg_info->rx_owd_max[i][j][k]);
+  LOG_I(OTG,"[%s] Estimated E2E OWD MIN ms    = %.2f \n",traffic_type, otg_info->rx_owd_max_e2e[i][j][k]);
+  LOG_I(OTG,"[%s] Estimated E2E OWD MAX ms    = %.2f \n",traffic_type, otg_info->rx_owd_max_e2e[i][j][k]);
+  LOG_I(OTG,"[%s] JITTER AVG ms               = %.2f \n",traffic_type, otg_info->rx_jitter_avg[i][j][k]);
+  LOG_I(OTG,"[%s] JITTER MIN ms               = %.2f \n",traffic_type, otg_info->rx_jitter_min[i][j][k]);
+  LOG_I(OTG,"[%s] JITTER MAX ms               = %.2f \n",traffic_type, otg_info->rx_jitter_max[i][j][k]);
+  LOG_I(OTG,"[%s] Estimated E2E JITTER AVG ms = %.2f \n",traffic_type, otg_info->rx_jitter_avg_e2e[i][j][k]);
+  LOG_I(OTG,"[%s] Estimated E2E JITTER MIN ms = %.2f \n",traffic_type, otg_info->rx_jitter_min_e2e[i][j][k]);
+  LOG_I(OTG,"[%s] Estimated E2E JITTER MAX ms = %.2f \n",traffic_type, otg_info->rx_jitter_max_e2e[i][j][k]);
+  LOG_I(OTG,"[%s] TX throughput               = %.7f(Kbit/s) \n",traffic_type, otg_info->tx_throughput[i][j][k]);
+  LOG_I(OTG,"[%s] RX goodput                  = %.7f (Kbit/s) \n",traffic_type, otg_info->rx_goodput[i][j][k]);
   if (otg_info->rx_loss_rate[i][j][k]>0){
-    LOG_I(OTG,"[%s] Loss rate = %lf \n",traffic_type, (otg_info->rx_loss_rate[i][j][k]));
-    LOG_I(OTG,"[%s] NB Lost packets= %d \n",traffic_type, (otg_info->tx_num_pkt[i][j][k]-otg_info->rx_num_pkt[i][j][k]));
+    LOG_I(OTG,"[%s] Loss rate               = %lf \n",traffic_type, (otg_info->rx_loss_rate[i][j][k]));
+    LOG_I(OTG,"[%s] NB Lost packets         = %d \n",traffic_type, (otg_info->tx_num_pkt[i][j][k]-otg_info->rx_num_pkt[i][j][k]));
     //LOG_D(OTG,"[%s] NB Lost [OTG] packets=%d \n",traffic_type, otg_info->nb_loss_pkts_otg[i][j]);
   }
 /*  if ((g_otg->background_stats==1)&&(otg_info->tx_num_bytes_background[i][j]>0)){
@@ -541,9 +586,14 @@ fc=fopen("/tmp/otg.log","w");;
 	LOG_F(OTG,"[%s] Total bytes(RX)= %d \n",traffic_type, otg_info->rx_num_bytes[i][j][k]);
 	LOG_F(OTG,"[%s] OWD MIN (one way)ms= %.2f \n",traffic_type, otg_info->rx_owd_min[i][j][k]);
 	LOG_F(OTG,"[%s] OWD MAX (one way)ms= %.2f \n",traffic_type, otg_info->rx_owd_max[i][j][k]);
-	LOG_F(OTG,"[%s] JITTER AVG ms= %.2f \n",traffic_type, otg_info->rx_jitter_avg[i][j][k]);
+	LOG_F(OTG,"[%s] Estimated E2E OWD MIN ms = %.2f \n",traffic_type, otg_info->rx_owd_max_e2e[i][j][k]);
+	LOG_F(OTG,"[%s] Estimated E2E OWD MAX ms = %.2f \n",traffic_type, otg_info->rx_owd_max_e2e[i][j][k]);
+  	LOG_F(OTG,"[%s] JITTER AVG ms= %.2f \n",traffic_type, otg_info->rx_jitter_avg[i][j][k]);
 	LOG_F(OTG,"[%s] JITTER MIN ms= %.2f \n",traffic_type, otg_info->rx_jitter_min[i][j][k]);
 	LOG_F(OTG,"[%s] JITTER MAX ms= %.2f \n",traffic_type, otg_info->rx_jitter_max[i][j][k]);
+	LOG_F(OTG,"[%s] Estimated E2E JITTER AVG ms = %.2f \n",traffic_type, otg_info->rx_jitter_avg_e2e[i][j][k]);
+	LOG_F(OTG,"[%s] Estimated E2E JITTER MIN ms = %.2f \n",traffic_type, otg_info->rx_jitter_min_e2e[i][j][k]);
+	LOG_F(OTG,"[%s] Estimated E2E JITTER MAX ms = %.2f \n",traffic_type, otg_info->rx_jitter_max_e2e[i][j][k]);
 	LOG_F(OTG,"[%s] TX throughput = %.7f(Kbit/s) \n",traffic_type, otg_info->tx_throughput[i][j][k]);
 	LOG_F(OTG,"[%s] RX goodput= %.7f (Kbit/s) \n",traffic_type, otg_info->rx_goodput[i][j][k]);
 	if (otg_info->rx_loss_rate[i][j][k]>0){
@@ -684,7 +734,10 @@ if ((g_otg->background_stats==1)&&(otg_info->tx_num_bytes_background[i][j]>0)){
   LOG_I(OTG,"[DATA] Total bytes(RX)= %d \n", rx_total_bytes_dl);
   LOG_I(OTG,"[DATA] OWD MIN (one way)ms= %.2f \n", min_owd_dl);
   LOG_I(OTG,"[DATA] OWD MAX (one way)ms= %.2f \n", max_owd_dl);
+  LOG_I(OTG,"[DATA] Estimated E2E OWD MIN (one way)ms= %.2f \n", min_owd_dl_e2e);
+  LOG_I(OTG,"[DATA] Estimated E2E OWD MAX (one way)ms= %.2f \n", max_owd_dl_e2e);
   LOG_I(OTG,"[DATA] JITTER AVG ms= %lf \n", otg_info->average_jitter_dl/(float)num_active_source );
+  LOG_I(OTG,"[DATA] Estimated E2E JITTER AVG ms= %lf \n", otg_info->average_jitter_dl_e2e/(float)num_active_source );
   LOG_I(OTG,"[DATA] TX throughput = %.7f(Kbit/s) \n", ((double)tx_total_bytes_dl*1000*8)/(otg_info->ctime*1024));
   LOG_I(OTG,"[DATA] RX throughput = %.7f(Kbit/s) \n", ((double)rx_total_bytes_dl*1000*8)/(otg_info->ctime*1024));
   LOG_I(OTG,"[DATA] NB lost packet = %d \n", tx_total_pkts_dl - rx_total_pkts_dl );
@@ -717,7 +770,10 @@ if ((g_otg->background_stats==1)&&(otg_info->tx_num_bytes_background[i][j]>0)){
   LOG_F(OTG,"[DATA] Total bytes(RX)= %d \n", rx_total_bytes_dl);
   LOG_F(OTG,"[DATA] OWD MIN (one way)ms= %.2f \n", min_owd_dl);
   LOG_F(OTG,"[DATA] OWD MAX (one way)ms= %.2f \n", max_owd_dl);
+  LOG_F(OTG,"[DATA] ESTIMATED E2E OWD MIN (one way)ms= %.2f \n", min_owd_dl_e2e);
+  LOG_F(OTG,"[DATA] ESTIMATED E2E OWD MAX (one way)ms= %.2f \n", max_owd_dl_e2e);
   LOG_F(OTG,"[DATA] JITTER AVG ms= %lf \n",  otg_info->average_jitter_dl/(float)num_active_source);
+  LOG_F(OTG,"[DATA]  ESTIMATED E2E JITTER AVG ms= %lf \n",  otg_info->average_jitter_dl_e2e/(float)num_active_source);
   LOG_F(OTG,"[DATA] TX throughput = %.7f(Kbit/s) \n", ((double)tx_total_bytes_dl*1000*8)/(otg_info->ctime*1024));
   LOG_F(OTG,"[DATA] RX throughput = %.7f(Kbit/s) \n", ((double)rx_total_bytes_dl*1000*8)/(otg_info->ctime*1024));
   LOG_F(OTG,"[DATA] NB lost packet = %d \n", tx_total_pkts_dl - rx_total_pkts_dl );
@@ -740,7 +796,7 @@ if ((g_otg->background_stats==1)&&(otg_info->tx_num_bytes_background[i][j]>0)){
  
 
   
-	LOG_I(OTG,"**************** TOTAL UL RESULTS ******************\n");
+  LOG_I(OTG,"**************** TOTAL UL RESULTS ******************\n");
   LOG_I(OTG,"Total Time (ms)= %d \n", otg_info->ctime+1);
   LOG_I(OTG,"[DATA] Total packets(TX)= %d \n", tx_total_pkts_ul);
   LOG_I(OTG,"[DATA] Total packets(RX)= %d \n", rx_total_pkts_ul);
@@ -748,7 +804,10 @@ if ((g_otg->background_stats==1)&&(otg_info->tx_num_bytes_background[i][j]>0)){
   LOG_I(OTG,"[DATA] Total bytes(RX)= %d \n", rx_total_bytes_ul);
   LOG_I(OTG,"[DATA] OWD MIN (one way)ms= %.2f \n", min_owd_ul);
   LOG_I(OTG,"[DATA] OWD MAX (one way)ms= %.2f \n", max_owd_ul);
-  LOG_I(OTG,"[DATA] JITTER AVG ms= %lf \n",  otg_info->average_jitter_ul/(float)num_active_source);
+  LOG_I(OTG,"[DATA] ESTIMATED E2E OWD MIN (one way)ms= %.2f \n", min_owd_ul_e2e);
+  LOG_I(OTG,"[DATA] ESTIMATED E2E OWD MAX (one way)ms= %.2f \n", max_owd_ul_e2e);
+  LOG_I(OTG,"[DATA] JITTER AVG ms= %lf \n",  otg_info->average_jitter_ul_e2e/(float)num_active_source);
+  LOG_I(OTG,"[DATA] ESTIMATED E2E JITTER AVG ms= %lf \n",  otg_info->average_jitter_ul/(float)num_active_source);
   LOG_I(OTG,"[DATA] TX throughput = %.7f(Kbit/s) \n", ((double)tx_total_bytes_ul*1000*8)/(otg_info->ctime*1024));
   LOG_I(OTG,"[DATA] RX throughput = %.7f(Kbit/s) \n", ((double)rx_total_bytes_ul*1000*8)/(otg_info->ctime*1024));
   LOG_I(OTG,"[DATA] NB lost packet = %d \n", tx_total_pkts_ul - rx_total_pkts_ul );
@@ -772,7 +831,10 @@ if ((g_otg->background_stats==1)&&(otg_info->tx_num_bytes_background[i][j]>0)){
   LOG_F(OTG,"[DATA] Total bytes(RX)= %d \n", rx_total_bytes_ul);
   LOG_F(OTG,"[DATA] OWD MIN (one way)ms= %.2f \n", min_owd_ul);
   LOG_F(OTG,"[DATA] OWD MAX (one way)ms= %.2f \n", max_owd_ul);
+  LOG_F(OTG,"[DATA] ESTIMATED E2E OWD MIN (one way)ms= %.2f \n", min_owd_ul_e2e);
+  LOG_F(OTG,"[DATA] ESTIMATED E2E OWD MAX (one way)ms= %.2f \n", max_owd_ul_e2e);
   LOG_F(OTG,"[DATA] JITTER AVG ms= %lf \n",  otg_info->average_jitter_ul/(float)num_active_source);
+  LOG_F(OTG,"[DATA] ESTIMATED E2E JITTER AVG ms= %lf \n",  otg_info->average_jitter_ul_e2e/(float)num_active_source);
   LOG_F(OTG,"[DATA] TX throughput = %.7f(Kbit/s) \n", ((double)tx_total_bytes_ul*1000*8)/(otg_info->ctime*1024));
   LOG_F(OTG,"[DATA] RX throughput = %.7f(Kbit/s) \n", ((double)rx_total_bytes_ul*1000*8)/(otg_info->ctime*1024));
   LOG_F(OTG,"[DATA] NB lost packet = %d \n", tx_total_pkts_ul - rx_total_pkts_ul );
diff --git a/openair2/UTIL/OTG/otg_rx.c b/openair2/UTIL/OTG/otg_rx.c
index d901c1a7ad1..41c062ea0cf 100644
--- a/openair2/UTIL/OTG/otg_rx.c
+++ b/openair2/UTIL/OTG/otg_rx.c
@@ -155,18 +155,26 @@ float owd_const_application_v=owd_const_application()/2;
 	//  }
 
       if (otg_hdr_rx->time<=ctime){
-	otg_info->radio_access_delay[src][dst]=ctime- otg_hdr_rx->time;
-	otg_multicast_info->radio_access_delay[src][dst]=ctime- otg_hdr_rx->time;
-      } else
+	otg_info->radio_access_delay[src][dst]=(float) (ctime- otg_hdr_rx->time);
+	otg_multicast_info->radio_access_delay[src][dst]=(float) (ctime- otg_hdr_rx->time);
+      } else {
 	LOG_N(OTG,"received packet has tx time %d greater than the current time %d\n",otg_hdr_rx->time,ctime );
-
-      otg_info->rx_pkt_owd[src][dst]=otg_info->owd_const[src][dst][otg_hdr_rx->flow_id]+ otg_info->radio_access_delay[src][dst];
+	otg_info->radio_access_delay[src][dst] = 0;
+	otg_multicast_info->radio_access_delay[src][dst]=0;
+      }
+      /* actual radio OWD*/
+      otg_info->rx_pkt_owd[src][dst]=otg_info->radio_access_delay[src][dst]; 
+      /* estimated E2E OWD based on the emulated delays for the other part of the network */
+      otg_info->rx_pkt_owd_e2e[src][dst]=otg_info->owd_const[src][dst][otg_hdr_rx->flow_id] + otg_info->radio_access_delay[src][dst];
       otg_multicast_info->rx_pkt_owd[src][dst]=otg_multicast_info->radio_access_delay[src][dst];
       
+      LOG_D(OTG, "[src %d][dst %d] ctime %d tx time %d: OWD %lf E2E OWD %lf \n", src, dst, ctime, otg_hdr_rx->time, otg_info->rx_pkt_owd[src][dst], otg_info->rx_pkt_owd_e2e[src][dst] );
       // compute the jitter by ignoring the packet loss
       if (lost_packet == 0){
+	// radio access 
 	otg_info->rx_pkt_owd_history[src][dst][1] = otg_info->rx_pkt_owd_history[src][dst][0]; // the previous owd
 	otg_info->rx_pkt_owd_history[src][dst][0] = otg_info->rx_pkt_owd[src][dst]; // the current owd
+
 	if (otg_info->rx_pkt_owd_history[src][dst][1] == 0) // first packet
 	  otg_info->rx_pkt_jitter[src][dst]=0;
 	else // for the consecutive packets
@@ -175,6 +183,18 @@ float owd_const_application_v=owd_const_application()/2;
 	LOG_D(OTG,"The packet jitter for the pair (src %d, dst %d)) at %d is %lf (current %lf, previous %lf) \n",
 	      src, dst, ctime, otg_info->rx_pkt_jitter[src][dst],
 	      otg_info->rx_pkt_owd_history[src][dst][0], otg_info->rx_pkt_owd_history[src][dst][1]);
+	// e2e 
+	otg_info->rx_pkt_owd_history_e2e[src][dst][1] = otg_info->rx_pkt_owd_history_e2e[src][dst][0]; // the previous owd
+	otg_info->rx_pkt_owd_history_e2e[src][dst][0] = otg_info->rx_pkt_owd_e2e[src][dst]; // the current owd
+	if (otg_info->rx_pkt_owd_history_e2e[src][dst][1] == 0) // first packet
+	  otg_info->rx_pkt_jitter_e2e[src][dst]=0;
+	else // for the consecutive packets
+	  otg_info->rx_pkt_jitter_e2e[src][dst]= abs(otg_info->rx_pkt_owd_history_e2e[src][dst][0] - otg_info->rx_pkt_owd_history_e2e[src][dst][1]);
+	
+	LOG_D(OTG,"The packet jitter for the pair (src %d, dst %d)) at %d is %lf (current %lf, previous %lf) \n",
+	      src, dst, ctime, otg_info->rx_pkt_jitter_e2e[src][dst],
+	      otg_info->rx_pkt_owd_history_e2e[src][dst][0], otg_info->rx_pkt_owd_history_e2e[src][dst][1]);
+	
       }
       
       if (otg_hdr_info_rx->flag == 0x1000){
@@ -204,28 +224,38 @@ float owd_const_application_v=owd_const_application()/2;
       }
       else {
 
-	LOG_I(OTG,"INFO LATENCY :: [SRC %d][DST %d] radio access %.2f (tx time %d, ctime %d), OWD:%.2f (ms):\n",
-	      src, dst, otg_info->radio_access_delay[src][dst], otg_hdr_rx->time, ctime , otg_info->rx_pkt_owd[src][dst]);
+	LOG_I(OTG,"[SRC %d][DST %d] Stats :: radio access latency %.2f (tx time %d, ctime %d) jitter %.2f, Estimated E2E OWD:%.2f (ms):\n",
+	      src, dst, otg_info->radio_access_delay[src][dst], otg_hdr_rx->time, ctime , otg_info->rx_pkt_jitter[src][dst], otg_info->rx_pkt_owd_e2e[src][dst]);
 
 	if (otg_hdr_info_rx->flag == 0xffff){
 
 	  if (otg_info->rx_owd_max[src][dst][otg_hdr_rx->traffic_type]==0){
 	    otg_info->rx_owd_max[src][dst][otg_hdr_rx->traffic_type]=otg_info->rx_pkt_owd[src][dst];
 	    otg_info->rx_owd_min[src][dst][otg_hdr_rx->traffic_type]=otg_info->rx_pkt_owd[src][dst];
+	    otg_info->rx_owd_max_e2e[src][dst][otg_hdr_rx->traffic_type]=otg_info->rx_pkt_owd_e2e[src][dst];
+	    otg_info->rx_owd_min_e2e[src][dst][otg_hdr_rx->traffic_type]=otg_info->rx_pkt_owd_e2e[src][dst];
 	  }
 	  else {
 	    otg_info->rx_owd_max[src][dst][otg_hdr_rx->traffic_type]=MAX(otg_info->rx_owd_max[src][dst][otg_hdr_rx->traffic_type],otg_info->rx_pkt_owd[src][dst] );
 	    otg_info->rx_owd_min[src][dst][otg_hdr_rx->traffic_type]=MIN(otg_info->rx_owd_min[src][dst][otg_hdr_rx->traffic_type],otg_info->rx_pkt_owd[src][dst] );
+	    otg_info->rx_owd_max_e2e[src][dst][otg_hdr_rx->traffic_type]=MAX(otg_info->rx_owd_max_e2e[src][dst][otg_hdr_rx->traffic_type],otg_info->rx_pkt_owd_e2e[src][dst] );
+	    otg_info->rx_owd_min_e2e[src][dst][otg_hdr_rx->traffic_type]=MIN(otg_info->rx_owd_min_e2e[src][dst][otg_hdr_rx->traffic_type],otg_info->rx_pkt_owd_e2e[src][dst] );
 	  }
+
 	  if (otg_info->rx_jitter_max[src][dst][otg_hdr_rx->traffic_type]==0){
 	    otg_info->rx_jitter_max[src][dst][otg_hdr_rx->traffic_type]=otg_info->rx_pkt_jitter[src][dst];
-	    otg_info->rx_jitter_min[src][dst][otg_hdr_rx->traffic_type]=otg_info->rx_pkt_jitter[src][dst];
+	    otg_info->rx_jitter_min[src][dst][otg_hdr_rx->traffic_type]=otg_info->rx_pkt_jitter[src][dst]; 
+	    otg_info->rx_jitter_max_e2e[src][dst][otg_hdr_rx->traffic_type]=otg_info->rx_pkt_jitter_e2e[src][dst];
+	    otg_info->rx_jitter_min_e2e[src][dst][otg_hdr_rx->traffic_type]=otg_info->rx_pkt_jitter_e2e[src][dst];
 	  }
 	  else if (lost_packet==0){
 	    otg_info->rx_jitter_max[src][dst][otg_hdr_rx->traffic_type]=MAX(otg_info->rx_jitter_max[src][dst][otg_hdr_rx->traffic_type],otg_info->rx_pkt_jitter[src][dst] );
 	    otg_info->rx_jitter_min[src][dst][otg_hdr_rx->traffic_type]=MIN(otg_info->rx_jitter_min[src][dst][otg_hdr_rx->traffic_type],otg_info->rx_pkt_jitter[src][dst] );
+	    otg_info->rx_jitter_max_e2e[src][dst][otg_hdr_rx->traffic_type]=MAX(otg_info->rx_jitter_max_e2e[src][dst][otg_hdr_rx->traffic_type],otg_info->rx_pkt_jitter_e2e[src][dst] );
+	    otg_info->rx_jitter_min_e2e[src][dst][otg_hdr_rx->traffic_type]=MIN(otg_info->rx_jitter_min_e2e[src][dst][otg_hdr_rx->traffic_type],otg_info->rx_pkt_jitter_e2e[src][dst] );
 	    // avg jitter
 	    otg_info->rx_jitter_avg[src][dst][otg_hdr_rx->traffic_type] +=  otg_info->rx_pkt_jitter[src][dst];
+	    otg_info->rx_jitter_avg_e2e[src][dst][otg_hdr_rx->traffic_type] +=  otg_info->rx_pkt_jitter_e2e[src][dst];
 	    otg_info->rx_jitter_sample[src][dst][otg_hdr_rx->traffic_type] +=1;
 	  }
 
@@ -377,12 +407,12 @@ void owd_const_gen(int src, int dst, int flow_id, unsigned int flag){
     LOG_D(OTG,"(RX) [src %d] [dst %d] [ID %d] TRAFFIC_TYPE IS M2M [Add Capillary const]\n", src, dst, flow_id);
   }
   else
-    LOG_D(OTG,"(RX) [src %d] [dst %d] [ID %d] TRAFFIC_TYPE WITHOUT M2M [Capillary const]\n", src, dst, flow_id);
+    LOG_T(OTG,"(RX) [src %d] [dst %d] [ID %d] TRAFFIC_TYPE WITHOUT M2M [Capillary const]\n", src, dst, flow_id);
 }
 
 
 
-float owd_const_capillary(){
+float owd_const_capillary(void){
   /*return (uniform_dist(MIN_APPLICATION_PROCESSING_GATEWAY_DELAY, MAX_APPLICATION_PROCESSING_GATEWAY_DELAY) +
 	   uniform_dist(MIN_FORMATING_TRANSFERRING_DELAY, MAX_FORMATING_TRANSFERRING_DELAY) +
 	   uniform_dist(MIN_ACCESS_DELAY, MAX_ACCESS_DELAY) +
@@ -391,7 +421,7 @@ float owd_const_capillary(){
 }
 
 
-float owd_const_mobile_core(){
+float owd_const_mobile_core(void){
   /*double delay;
   // this is a delay model for a loaded GGSN according to
 	//"M. Laner, P. Svoboda and M. Rupp, Latency Analysis of 3G Network Components, EW'12, Poznan, Poland, 2012", table 2, page 6.
@@ -415,13 +445,13 @@ float owd_const_mobile_core(){
   return ((double)MIN_U_PLANE_CORE_IP_ACCESS_DELAY+ (double)MAX_U_PLANE_CORE_IP_ACCESS_DELAY + (double)MIN_FW_PROXY_DELAY + (double)MAX_FW_PROXY_DELAY)/2;
 }
 
-float owd_const_IP_backbone(){
+float owd_const_IP_backbone(void){
   /*return uniform_dist(MIN_NETWORK_ACCESS_DELAY,MAX_NETWORK_ACCESS_DELAY);*/
 	return ((double)MIN_NETWORK_ACCESS_DELAY+(double)MAX_NETWORK_ACCESS_DELAY)/2;
 
 }
 
-float owd_const_application(){
+float owd_const_application(void){
   /*return uniform_dist(MIN_APPLICATION_ACESS_DELAY, MAX_APPLICATION_ACESS_DELAY);*/
 	return ((double)MIN_APPLICATION_ACESS_DELAY+(double)MAX_APPLICATION_ACESS_DELAY)/2;
 }
diff --git a/openair2/UTIL/OTG/otg_rx.h b/openair2/UTIL/OTG/otg_rx.h
index 4e7f78abf97..b4692dbb796 100644
--- a/openair2/UTIL/OTG/otg_rx.h
+++ b/openair2/UTIL/OTG/otg_rx.h
@@ -62,7 +62,7 @@
 * \note 
 * @ingroup  _otg
 */
-int otg_rx_pkt_packet(int src, int dst, int ctime, char *packet, unsigned int size);
+int otg_rx_pkt(int src, int dst, int ctime, char *packet, unsigned int size);
 
 
 /*! \fn void owd_const_gen(int src,int dst);
@@ -81,7 +81,7 @@ void owd_const_gen(int src,int dst, int flow_id, unsigned int flag);
 *\note 
 *@ingroup  _otg
 */
-float owd_const_capillary();
+float owd_const_capillary(void);
 
 /*! \fn float owd_const_mobile_core();
 *\brief compute the one way delay introduced in LTE/LTE-A network REF PAPER: "Latency for Real-Time Machine-to-Machine Communication in LTE-Based System Architecture"
@@ -89,7 +89,7 @@ float owd_const_capillary();
 *\note 
 *@ingroup  _otg
 */
-float owd_const_mobile_core();
+float owd_const_mobile_core(void);
 
 /*! \fn float owd_const_IP_backbone();
 *\brief compute the one way delay introduced in LTE/LTE-A network REF PAPER: "Latency for Real-Time Machine-to-Machine Communication in LTE-Based System Architecture"
@@ -97,7 +97,7 @@ float owd_const_mobile_core();
 *\note 
 *@ingroup  _otg
 */
-float owd_const_IP_backbone();
+float owd_const_IP_backbone(void);
 
 /*! \fn float owd_const_applicatione();
 *\brief compute the one way delay introduced in LTE/LTE-A network REF PAPER: "Latency for Real-Time Machine-to-Machine Communication in LTE-Based System Architecture"
@@ -105,7 +105,7 @@ float owd_const_IP_backbone();
 *\note 
 *@ingroup  _otg
 */
-float owd_const_application();
+float owd_const_application(void);
 
 
 /*! \fn void rx_check_loss(int src, int dst, unsigned int flag, int seq_num, unsigned int *seq_num_rx, unsigned int *nb_loss_pkts);
diff --git a/openair2/X2AP/Makefile.inc b/openair2/X2AP/Makefile.inc
index c538baabd86..1b99d055057 100755
--- a/openair2/X2AP/Makefile.inc
+++ b/openair2/X2AP/Makefile.inc
@@ -78,7 +78,8 @@ $(OUTDIR)/x2ap_ieregen.stamp: $(ASN1DIR)/$(ASN1RELDIR)/X2AP-PDU-Contents.asn $(A
 
 $(OUTDIR)/x2ap_asn1regen.stamp:  $(ASN1DIR)/$(ASN1RELDIR)/X2AP-CommonDataTypes.asn  $(ASN1DIR)/$(ASN1RELDIR)/X2AP-Constants.asn $(ASN1DIR)/$(ASN1RELDIR)/X2AP-IEs.asn  $(ASN1DIR)/$(ASN1RELDIR)/X2AP-PDU.asn   
 	@echo "Timestamp DIR " $(ASN1DIR) " DIRREL " $(ASN1RELDIR)
-	(cd $(ASN1DIR)/$(ASN1RELDIR) && asn1c -fhave_native64 -gen-PER $^)
+#	(cd $(ASN1DIR)/$(ASN1RELDIR) && asn1c -fhave_native64 -gen-PER -fcompound-names $^)
+	(cd $(ASN1MESSAGESDIR) && asn1c -fhave_native64 -gen-PER -fcompound-names $^)
 	@echo "Timestamp" $(X2AP_CFLAGS)
 	@echo Timestamp > $@	
 
diff --git a/targets/Makefile.common b/targets/Makefile.common
index c655479d175..e094f703828 100644
--- a/targets/Makefile.common
+++ b/targets/Makefile.common
@@ -64,12 +64,16 @@ SHARED_DEPENDENCIES += $(ITTI_MESSAGES_H)
 endif
 
 ifdef USE_MME
-#LIBS				+= $(X2AP_OBJ_DIR)/libx2ap.a
-LIBS				+= $(UE_NAS_OBJ_DIR)/libuenas.a $(SECU_OBJ_DIR)/libsecu.a 
-LIBS				+= $(S1AP_OBJ_DIR)/libs1ap.a $(SCTP_OBJ_DIR)/libsctp.a -lsctp -lcrypt
-LIBS				+= $(UDP_OBJ_DIR)/libudp.a $(GTPV1U_OBJ_DIR)/libgtpv1u.a 
-#SHARED_DEPENDENCIES	+= $(UE_NAS_OBJ_DIR)/libuenas.a $(SECU_OBJ_DIR)/libsecu.a $(X2AP_OBJ_DIR)/libx2ap.a $(S1AP_OBJ_DIR)/libs1ap.a $(SCTP_OBJ_DIR)/libsctp.a  $(UDP_OBJ_DIR)/libudp.a $(GTPV1U_OBJ_DIR)/libgtpv1u.a
+LIBS			+= $(UE_NAS_OBJ_DIR)/libuenas.a $(SECU_OBJ_DIR)/libsecu.a 
+LIBS			+= $(S1AP_OBJ_DIR)/libs1ap.a $(SCTP_OBJ_DIR)/libsctp.a -lsctp -lcrypt
+LIBS			+= $(UDP_OBJ_DIR)/libudp.a $(GTPV1U_OBJ_DIR)/libgtpv1u.a 
+
+ifdef X2AP
+LIBS			+= $(X2AP_OBJ_DIR)/libx2ap.a
+SHARED_DEPENDENCIES	+= $(UE_NAS_OBJ_DIR)/libuenas.a $(SECU_OBJ_DIR)/libsecu.a $(X2AP_OBJ_DIR)/libx2ap.a $(S1AP_OBJ_DIR)/libs1ap.a $(SCTP_OBJ_DIR)/libsctp.a  $(UDP_OBJ_DIR)/libudp.a $(GTPV1U_OBJ_DIR)/libgtpv1u.a
+else 
 SHARED_DEPENDENCIES	+= $(UE_NAS_OBJ_DIR)/libuenas.a $(SECU_OBJ_DIR)/libsecu.a $(S1AP_OBJ_DIR)/libs1ap.a $(SCTP_OBJ_DIR)/libsctp.a  $(UDP_OBJ_DIR)/libudp.a $(GTPV1U_OBJ_DIR)/libgtpv1u.a
+endif 
 
 COMMON_CFLAGS		+= -DLOG_NO_THREAD 
 #-DEMIT_ASN_DEBUG
@@ -97,7 +101,7 @@ export SECU_CFLAGS
 
 COMMON_MME_CFLAGS	 = -I$(SECU_DIR)
 COMMON_MME_CFLAGS       += -I$(SCTP_DIR)
-COMMON_MME_CFLAGS	+= -I$(X2AP_DIR)
+COMMON_MME_CFLAGS	+= -I$(X2AP_DIR) -I$(X2AP_DIR)/MESSAGES
 COMMON_MME_CFLAGS	+= -I$(S1AP_DIR)
 COMMON_MME_CFLAGS	+= -I$(UDP_DIR)
 COMMON_MME_CFLAGS	+= -I$(GTPV1U_DIR)
diff --git a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_27.xml b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_27.xml
index a54e9d27440..74ef5e772f0 100644
--- a/targets/SIMU/EXAMPLES/OSD/WEBXML/template_27.xml
+++ b/targets/SIMU/EXAMPLES/OSD/WEBXML/template_27.xml
@@ -43,11 +43,11 @@
 
       <BACKGROUND_TRAFFIC>disable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
       <IDT_DIST>fixed</IDT_DIST>  <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
-      <IDT_MIN_ms>1</IDT_MIN_ms>  <!--Minimum IDT values in milliseconds-->
-      <IDT_MAX_ms>1</IDT_MAX_ms>  <!--Minimum IDT values in milliseconds-->
+      <IDT_MIN_ms>1000</IDT_MIN_ms>  <!--Minimum IDT values in milliseconds-->
+      <IDT_MAX_ms>1000</IDT_MAX_ms>  <!--Minimum IDT values in milliseconds-->
       <SIZE_DIST>fixed</SIZE_DIST>   <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
-      <SIZE_MIN_byte>1000</SIZE_MIN_byte>  <!--Minimum PAYLOAD size values in bytes-->
-      <SIZE_MAX_byte>2000</SIZE_MAX_byte>  <!--MAximum PAYLOAD size values in bytes-->
+      <SIZE_MIN_byte>32</SIZE_MIN_byte>  <!--Minimum PAYLOAD size values in bytes-->
+      <SIZE_MAX_byte>32</SIZE_MAX_byte>  <!--MAximum PAYLOAD size values in bytes-->
    </CUSTOMIZED_TRAFFIC>
 
    <CUSTOMIZED_TRAFFIC>	 
@@ -58,12 +58,12 @@
       <FLOW_START_ms>1000</FLOW_START_ms> <!-- indicates the start time of the app or the actual duration of the traffic-->
       <FLOW_DURATION_ms>10000</FLOW_DURATION_ms> <!-- indicates the start time of the app or the actual duration of the traffic-->
       <BACKGROUND_TRAFFIC>disable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
-      <IDT_DIST>uniform</IDT_DIST>  <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
-      <IDT_MIN_ms>100</IDT_MIN_ms>  <!--Minimum IDT values in milliseconds-->
-      <IDT_MAX_ms>150</IDT_MAX_ms>  <!--Minimum IDT values in milliseconds-->
+      <IDT_DIST>fixed</IDT_DIST>  <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
+      <IDT_MIN_ms>1000</IDT_MIN_ms>  <!--Minimum IDT values in milliseconds-->
+      <IDT_MAX_ms>1000</IDT_MAX_ms>  <!--Minimum IDT values in milliseconds-->
       <SIZE_DIST>uniform</SIZE_DIST>   <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
-      <SIZE_MIN_byte>256</SIZE_MIN_byte>  <!--Minimum PAYLOAD size values in bytes-->
-      <SIZE_MAX_byte>768</SIZE_MAX_byte>  <!--Maximum PAYLOAD size values in bytes-->
+      <SIZE_MIN_byte>32</SIZE_MIN_byte>  <!--Minimum PAYLOAD size values in bytes-->
+      <SIZE_MAX_byte>32</SIZE_MAX_byte>  <!--Maximum PAYLOAD size values in bytes-->
    </CUSTOMIZED_TRAFFIC>
 
  </APPLICATION_CONFIG>
diff --git a/targets/SIMU/USER/oaisim_config.c b/targets/SIMU/USER/oaisim_config.c
index eade5a128bc..b742010826a 100644
--- a/targets/SIMU/USER/oaisim_config.c
+++ b/targets/SIMU/USER/oaisim_config.c
@@ -784,6 +784,13 @@ int ocg_config_app(void){
 
   g_otg->packet_gen_type=map_str_to_int(packet_gen_names,oai_emulation.application_config.packet_gen_type);
 
+  LOG_I(OTG,"Metrics: Throuput %s(%d), One-way latency %s(%d) for %s, loss rate %s(%d), online curves %s(%d)\n",
+	oai_emulation.emulation_config.performance_metrics.throughput,g_otg->throughput_metric,
+	oai_emulation.emulation_config.performance_metrics.latency,g_otg->latency_metric,
+	(g_otg->owd_radio_access==1)? "Radio Access Network" : "End to End",
+	oai_emulation.emulation_config.performance_metrics.loss_rate,g_otg->loss_metric,
+	oai_emulation.emulation_config.curve,g_otg->curve );
+
   for (i=0; i<g_otg->num_nodes; i++){
 
     for (j=0; j<g_otg->num_nodes; j++){
-- 
GitLab