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