int openair2_stats_read(char *buffer, char **my_buffer, off_t off, int length) #endif { int len = 0,fg,Overhead, Sign; unsigned int i,j,k,kk; unsigned int Mod_id = 0,CH_index; unsigned int tx_pdcp_sdu; unsigned int tx_pdcp_sdu_discarded; unsigned int tx_retransmit_pdu_unblock; unsigned int tx_retransmit_pdu_by_status; unsigned int tx_retransmit_pdu; unsigned int tx_data_pdu; unsigned int tx_control_pdu; unsigned int rx_sdu; unsigned int rx_error_pdu; unsigned int rx_data_pdu; unsigned int rx_data_pdu_out_of_window; unsigned int rx_control_pdu; // if (mac_xface->is_cluster_head == 0) { for (k=0;k<NB_INST;k++){ if (Mac_rlc_xface->Is_cluster_head[k] == 0){ #ifndef PHY_EMUL_ONE_MACHINE Mod_id=k-NB_CH_INST; len+=sprintf(&buffer[len],"UE TTI: %d\n",Mac_rlc_xface->frame); for (CH_index = 0;CH_index<NB_CNX_UE;CH_index++) { if (UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Active==1) { len+=sprintf(&buffer[len],"CH %d: Wideband SINR %d dB---\n", CH_index,UE_mac_inst[Mod_id].Def_meas[CH_index].Wideband_sinr); len+=sprintf(&buffer[len],"CH %d: Subband SINR (dB) :", CH_index); for (fg=0;fg<NUMBER_OF_MEASUREMENT_SUBBANDS;fg++) len+=sprintf(&buffer[len],"%d ",UE_mac_inst[Mod_id].Def_meas[CH_index].Sinr_meas[0][fg]); len+=sprintf(&buffer[len],"\n"); len+=sprintf(&buffer[len],"BCCH %d, NB_RX_MAC = %d (%d errors)\n", UE_mac_inst[Mod_id].Bcch_lchan[CH_index].Lchan_info.Lchan_id.Index, UE_mac_inst[Mod_id].Bcch_lchan[CH_index].Lchan_info.NB_RX, UE_mac_inst[Mod_id].Bcch_lchan[CH_index].Lchan_info.NB_RX_ERRORS); len+=sprintf(&buffer[len],"CCCH %d, NB_RX_MAC = %d (%d errors)\n", UE_mac_inst[Mod_id].Ccch_lchan[CH_index].Lchan_info.Lchan_id.Index, UE_mac_inst[Mod_id].Ccch_lchan[CH_index].Lchan_info.NB_RX, UE_mac_inst[Mod_id].Ccch_lchan[CH_index].Lchan_info.NB_RX_ERRORS); len+=sprintf(&buffer[len],"LCHAN %d (DCCH), NB_TX_MAC = %d (%d bits/TTI, %d kbits/sec), NB_RX_MAC = %d (%d errors)\n", UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.Lchan_id.Index, UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.NB_TX, UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.output_rate, (10*UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.output_rate)>>5, UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.NB_RX, UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.NB_RX_ERRORS); for(i=1;i<NB_RAB_MAX;i++){ if (UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Active==1) { Overhead=UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.output_rate - Pdcp_stats_tx_rate[k][CH_index][i]; if(Overhead<0){ Overhead=-Overhead; Sign=-1; } else Sign=1; len+=sprintf(&buffer[len],"[PDCP]LCHAN %d: NB_TX = %d ,Tx_rate =(%d bits/TTI ,%d Kbits/s), NB_RX = %d ,Rx_rate =(%d bits/TTI ,%d Kbits/s) , LAYER2 TX OVERHEAD: %d Kbits/s\n", UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, Pdcp_stats_tx[k][CH_index][i], Pdcp_stats_tx_rate[k][CH_index][i], (10*Pdcp_stats_tx_rate[k][CH_index][i])>>5, Pdcp_stats_rx[k][CH_index][i], Pdcp_stats_rx_rate[k][CH_index][i], (10*Pdcp_stats_rx_rate[k][CH_index][i])>>5, Sign*(10*Overhead)>>5); int status = rlc_stat_req (k, UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, &tx_pdcp_sdu, &tx_pdcp_sdu_discarded, &tx_retransmit_pdu_unblock, &tx_retransmit_pdu_by_status, &tx_retransmit_pdu, &tx_data_pdu, &tx_control_pdu, &rx_sdu, &rx_error_pdu, &rx_data_pdu, &rx_data_pdu_out_of_window, &rx_control_pdu) ; if (status == RLC_OP_STATUS_OK) { len+=sprintf(&buffer[len],"RLC LCHAN %d, NB_SDU_TO_TX = %d\tNB_SDU_DISC %d\tNB_RX_SDU %d\n", UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, tx_pdcp_sdu, tx_pdcp_sdu_discarded, rx_sdu); len+=sprintf(&buffer[len],"RLC LCHAN %d, NB_TB_TX_DATA = %d\tNB_TB_TX_CONTROL %d\tNB_TX_TB_RETRANS %d", UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, tx_data_pdu, tx_control_pdu, tx_retransmit_pdu); len+=sprintf(&buffer[len],"\tRLC LCHAN %d, NB_TX_TB_RETRANS_BY_STATUS = %d\tNB_TX_TB_RETRANS_PADD %d\n", UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, tx_retransmit_pdu_by_status, tx_retransmit_pdu_unblock); len+=sprintf(&buffer[len],"RLC LCHAN %d, NB_RX_DATA = %d\tNB_RX_TB_OUT_WIN %d\tNB_RX_TB_CORRUPT %d\n", UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, rx_data_pdu, rx_data_pdu_out_of_window, rx_error_pdu); } len+=sprintf(&buffer[len],"[MAC]: LCHAN %d, NB_TX_MAC = %d (%d bits/TTI, %d kbits/s), NB_RX_MAC = %d (%d errors)\n", UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_TX, UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.output_rate, (10*UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.output_rate)>>5, UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX, UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX_ERRORS); len+=sprintf(&buffer[len]," TX per TB: "); for(kk=0;kk<MAX_NUMBER_TB_PER_LCHAN/2;kk++) len+=sprintf(&buffer[len],"%d . ",UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_TX_TB[kk]); len+=sprintf(&buffer[len],"\n"); len+=sprintf(&buffer[len]," RXerr per TB: "); for(kk=0;kk<MAX_NUMBER_TB_PER_LCHAN/2;kk++) len+=sprintf(&buffer[len],"%d/%d . ",UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX_ERRORS_TB[kk], UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX_TB[kk]); len+=sprintf(&buffer[len],"\n"); } } } }
int openair2_stats_read(char *buffer, char **my_buffer, off_t off, int length) #endif { int len = 0,fg,Overhead, Sign; unsigned int i,j,k,kk; unsigned int ue_id, eNB_id; unsigned int Mod_id = 0,CH_index; unsigned int stat_tx_pdcp_sdu; unsigned int stat_tx_pdcp_bytes; unsigned int stat_tx_pdcp_sdu_discarded; unsigned int stat_tx_pdcp_bytes_discarded; unsigned int stat_tx_data_pdu; unsigned int stat_tx_data_bytes; unsigned int stat_tx_retransmit_pdu_by_status; unsigned int stat_tx_retransmit_bytes_by_status; unsigned int stat_tx_retransmit_pdu; unsigned int stat_tx_retransmit_bytes; unsigned int stat_tx_control_pdu; unsigned int stat_tx_control_bytes; unsigned int stat_rx_pdcp_sdu; unsigned int stat_rx_pdcp_bytes; unsigned int stat_rx_data_pdus_duplicate; unsigned int stat_rx_data_bytes_duplicate; unsigned int stat_rx_data_pdu; unsigned int stat_rx_data_bytes; unsigned int stat_rx_data_pdu_dropped; unsigned int stat_rx_data_bytes_dropped; unsigned int stat_rx_data_pdu_out_of_window; unsigned int stat_rx_data_bytes_out_of_window; unsigned int stat_rx_control_pdu; unsigned int stat_rx_control_bytes; unsigned int stat_timer_reordering_timed_out; unsigned int stat_timer_poll_retransmit_timed_out; unsigned int stat_timer_status_prohibit_timed_out; // UE part for (ue_id=0; ue_id<NUM_UE_INST; ue_id++) { // mod_id used for PDCP and RLC Mod_id = NB_eNB_INST + ue_id ; len+=sprintf(&buffer[len],"UE TTI: %d\n",UE_mac_inst[ue_id].frame); for (enb_id= 0; enb_id <NB_SIG_CNX_UE; enb_id++) { switch (mac_get_rrc_status(ue_id,0,enb_id) > RRC_CONNECTED) { case RRC_RECONFIGURED : case RRC_CONNECTED: case RRC_SI_RECEIVED: case RRC_IDLE: break; if (mac_get_rrc_status(ue_id,0,enb_id) > RRC_CONNECTED) { // if (UE_mac_inst[ue_id].Dcch_lchan[CH_index].Active==1) { len+=sprintf(&buffer[len],"eNB %d: Wideband SINR %d dB---\n", CH_index,UE_mac_inst[Mod_id].Def_meas[CH_index].Wideband_sinr); len+=sprintf(&buffer[len],"CH %d: Subband SINR (dB) :", CH_index); for (fg=0; fg<NUMBER_OF_MEASUREMENT_SUBBANDS; fg++) { len+=sprintf(&buffer[len],"%d ",UE_mac_inst[Mod_id].Def_meas[CH_index].Sinr_meas[0][fg]); } len+=sprintf(&buffer[len],"\n"); len+=sprintf(&buffer[len],"BCCH %d, NB_RX_MAC = %d (%d errors)\n", UE_mac_inst[Mod_id].Bcch_lchan[CH_index].Lchan_info.Lchan_id.Index, UE_mac_inst[Mod_id].Bcch_lchan[CH_index].Lchan_info.NB_RX, UE_mac_inst[Mod_id].Bcch_lchan[CH_index].Lchan_info.NB_RX_ERRORS); len+=sprintf(&buffer[len],"CCCH %d, NB_RX_MAC = %d (%d errors)\n", UE_mac_inst[Mod_id].Ccch_lchan[CH_index].Lchan_info.Lchan_id.Index, UE_mac_inst[Mod_id].Ccch_lchan[CH_index].Lchan_info.NB_RX, UE_mac_inst[Mod_id].Ccch_lchan[CH_index].Lchan_info.NB_RX_ERRORS); len+=sprintf(&buffer[len],"LCHAN %d (DCCH), NB_TX_MAC = %d (%d bits/TTI, %d kbits/sec), NB_RX_MAC = %d (%d errors)\n", UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.Lchan_id.Index, UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.NB_TX, UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.output_rate, (10*UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.output_rate)>>5, UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.NB_RX, UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.NB_RX_ERRORS); for(i=1; i<NB_RAB_MAX; i++) { if (UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Active==1) { Overhead=UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.output_rate - Pdcp_stats_tx_rate[k][CH_index][i]; if(Overhead<0) { Overhead=-Overhead; Sign=-1; } else { Sign=1; } len+=sprintf(&buffer[len],"[PDCP]LCHAN %d: NB_TX = %d ,Tx_rate =(%d bits/TTI ,%d Kbits/s), NB_RX = %d ,Rx_rate =(%d bits/TTI ,%d Kbits/s) , LAYER2 TX OVERHEAD: %d Kbits/s\n", UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, Pdcp_stats_tx[k][CH_index][i], Pdcp_stats_tx_rate[k][CH_index][i], (10*Pdcp_stats_tx_rate[k][CH_index][i])>>5, Pdcp_stats_rx[k][CH_index][i], Pdcp_stats_rx_rate[k][CH_index][i], (10*Pdcp_stats_rx_rate[k][CH_index][i])>>5, Sign*(10*Overhead)>>5); int status = rlc_stat_req (k, UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, &stat_tx_pdcp_sdu, &stat_tx_pdcp_bytes, &stat_tx_pdcp_sdu_discarded, &stat_tx_pdcp_bytes_discarded, &stat_tx_data_pdu, &stat_tx_data_bytes, &stat_tx_retransmit_pdu_by_status, &stat_tx_retransmit_bytes_by_status, &stat_tx_retransmit_pdu, &stat_tx_retransmit_bytes, &stat_tx_control_pdu, &stat_tx_control_bytes, &stat_rx_pdcp_sdu, &stat_rx_pdcp_bytes, &stat_rx_data_pdus_duplicate, &stat_rx_data_bytes_duplicate, &stat_rx_data_pdu, &stat_rx_data_bytes, &stat_rx_data_pdu_dropped, &stat_rx_data_bytes_dropped, &stat_rx_data_pdu_out_of_window, &stat_rx_data_bytes_out_of_window, &stat_rx_control_pdu, &stat_rx_control_bytes, &stat_timer_reordering_timed_out, &stat_timer_poll_retransmit_timed_out, &stat_timer_status_prohibit_timed_out) ; if (status == RLC_OP_STATUS_OK) { len+=sprintf(&buffer[len],"RLC LCHAN %d, NB_SDU_TO_TX = %d\tNB_SDU_DISC %d\tNB_RX_SDU %d\n", UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, tx_pdcp_sdu, tx_pdcp_sdu_discarded, rx_sdu); len+=sprintf(&buffer[len],"RLC LCHAN %d, NB_TB_TX_DATA = %d\tNB_TB_TX_CONTROL %d\tNB_TX_TB_RETRANS %d", UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, tx_data_pdu, tx_control_pdu, tx_retransmit_pdu); len+=sprintf(&buffer[len],"\tRLC LCHAN %d, NB_TX_TB_RETRANS_BY_STATUS = %d\tNB_TX_TB_RETRANS_PADD %d\n", UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, tx_retransmit_pdu_by_status, tx_retransmit_pdu_unblock); len+=sprintf(&buffer[len],"RLC LCHAN %d, NB_RX_DATA = %d\tNB_RX_TB_OUT_WIN %d\tNB_RX_TB_CORRUPT %d\n", UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, rx_data_pdu, rx_data_pdu_out_of_window, rx_error_pdu); } len+=sprintf(&buffer[len],"[MAC]: LCHAN %d, NB_TX_MAC = %d (%d bits/TTI, %d kbits/s), NB_RX_MAC = %d (%d errors)\n", UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_TX, UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.output_rate, (10*UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.output_rate)>>5, UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX, UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX_ERRORS); len+=sprintf(&buffer[len]," TX per TB: "); for(kk=0; kk<MAX_NUMBER_TB_PER_LCHAN/2; kk++) { len+=sprintf(&buffer[len],"%d . ",UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_TX_TB[kk]); } len+=sprintf(&buffer[len],"\n"); len+=sprintf(&buffer[len]," RXerr per TB: "); for(kk=0; kk<MAX_NUMBER_TB_PER_LCHAN/2; kk++) len+=sprintf(&buffer[len],"%d/%d . ",UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX_ERRORS_TB[kk], UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX_TB[kk]); len+=sprintf(&buffer[len],"\n"); } } } } #endif //PHY_EMUL_ONE_MACHINE }