コード例 #1
0
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");



	    }

	  }
	}
      }
コード例 #2
0
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
    }