* update bladerf api (now it respect the timing)
* update the tx/rx bandwidth according to sampling rate * add openair2 stats git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7609 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
+45
-11
@@ -446,14 +446,21 @@ typedef struct {
|
||||
uint32_t total_dlsch_bytes_tx;
|
||||
//
|
||||
uint32_t total_dlsch_pdus_tx;
|
||||
|
||||
|
||||
// here for RX
|
||||
//
|
||||
uint32_t ulsch_bitrate;
|
||||
//
|
||||
uint32_t ulsch_bytes_rx;
|
||||
//
|
||||
uint64_t ulsch_pdus_rx;
|
||||
// here for RX
|
||||
uint64_t ulsch_pdus_rx;
|
||||
|
||||
uint32_t total_ulsch_bitrate;
|
||||
//
|
||||
uint32_t total_ulsch_bytes_rx;
|
||||
//
|
||||
uint32_t total_ulsch_pdus_rx;
|
||||
|
||||
} eNB_STATS;
|
||||
/*! \brief eNB statistics for the connected UEs*/
|
||||
typedef struct {
|
||||
@@ -490,13 +497,7 @@ typedef struct {
|
||||
// total rb used for retransmission
|
||||
uint32_t total_rbs_used_retx;
|
||||
|
||||
/// preassigned mcs after rate adaptation
|
||||
uint8_t ulsch_mcs1;
|
||||
/// adjusted mcs
|
||||
uint8_t ulsch_mcs2;
|
||||
|
||||
|
||||
/// TX
|
||||
/// TX
|
||||
/// Num pkt
|
||||
uint32_t num_pdu_tx[NB_RB_MAX];
|
||||
/// num bytes
|
||||
@@ -528,6 +529,12 @@ typedef struct {
|
||||
// uint32_t avg_pdu_size;
|
||||
|
||||
/// RX
|
||||
|
||||
/// preassigned mcs after rate adaptation
|
||||
uint8_t ulsch_mcs1;
|
||||
/// adjusted mcs
|
||||
uint8_t ulsch_mcs2;
|
||||
|
||||
/// estimated average pdu inter-departure time
|
||||
uint32_t avg_pdu_idt;
|
||||
/// estimated average pdu size
|
||||
@@ -536,6 +543,22 @@ typedef struct {
|
||||
uint32_t aggregated_pdu_size;
|
||||
uint32_t aggregated_pdu_arrival;
|
||||
|
||||
/// uplink transport block size
|
||||
uint32_t ulsch_TBS;
|
||||
|
||||
/// total rb used for a new uplink transmission
|
||||
uint32_t num_retransmission_rx;
|
||||
/// total rb used for a new uplink transmission
|
||||
uint32_t rbs_used_rx;
|
||||
/// total rb used for a new uplink retransmission
|
||||
uint32_t rbs_used_retx_rx;
|
||||
/// total rb used for a new uplink transmission
|
||||
uint32_t total_rbs_used_rx;
|
||||
/// normalized rx power
|
||||
int32_t normalized_rx_power;
|
||||
/// target rx power
|
||||
int32_t target_rx_power;
|
||||
|
||||
/// num rx pdu
|
||||
uint32_t num_pdu_rx[NB_RB_MAX];
|
||||
/// num bytes rx
|
||||
@@ -544,8 +567,19 @@ typedef struct {
|
||||
// uint32_t tti_goodput[NB_RB_MAX];
|
||||
/// errors
|
||||
uint32_t num_errors_rx;
|
||||
|
||||
uint64_t overhead_bytes_rx;
|
||||
/// headers+ CE + padding bytes for a MAC PDU
|
||||
uint64_t total_overhead_bytes_rx;
|
||||
/// headers+ CE + padding bytes for a MAC PDU
|
||||
uint64_t avg_overhead_bytes_rx;
|
||||
//
|
||||
uint32_t ulsch_bitrate;
|
||||
//total
|
||||
uint32_t total_ulsch_bitrate;
|
||||
/// overall
|
||||
|
||||
/// MAC pdu bytes
|
||||
uint64_t pdu_bytes_rx;
|
||||
/// total MAC pdu bytes
|
||||
uint64_t total_pdu_bytes_rx;
|
||||
/// total num pdu
|
||||
|
||||
@@ -104,9 +104,12 @@ void rx_sdu(
|
||||
}
|
||||
|
||||
LOG_D(MAC,"[eNB %d] CC_id %d Received ULSCH sdu from PHY (rnti %x, UE_id %d), parsing header\n",enb_mod_idP,CC_idP,rntiP,UE_id);
|
||||
|
||||
|
||||
payload_ptr = parse_ulsch_header(sduP,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,sdu_lenP);
|
||||
|
||||
|
||||
eNB->eNB_stats[CC_idP].ulsch_bytes_rx=sdu_lenP;
|
||||
eNB->eNB_stats[CC_idP].total_ulsch_bytes_rx+=sdu_lenP;
|
||||
eNB->eNB_stats[CC_idP].total_ulsch_pdus_rx+=1;
|
||||
// control element
|
||||
for (i=0; i<num_ce; i++) {
|
||||
|
||||
@@ -343,7 +346,6 @@ void rx_sdu(
|
||||
}
|
||||
|
||||
payload_ptr+=rx_lengths[i];
|
||||
|
||||
}
|
||||
|
||||
/* NN--> FK: we could either check the payload, or use a phy helper to detect a false msg3 */
|
||||
@@ -357,6 +359,7 @@ void rx_sdu(
|
||||
}
|
||||
}
|
||||
} else {
|
||||
UE_list->eNB_UE_stats[CC_idP][UE_id].pdu_bytes_rx=sdu_lenP;
|
||||
UE_list->eNB_UE_stats[CC_idP][UE_id].total_pdu_bytes_rx+=sdu_lenP;
|
||||
UE_list->eNB_UE_stats[CC_idP][UE_id].total_num_pdus_rx+=1;
|
||||
}
|
||||
@@ -769,7 +772,9 @@ void schedule_ulsch_rnti(module_id_t module_idP,
|
||||
|
||||
ndi = 1-UE_template->oldNDI_UL[harq_pid];
|
||||
UE_template->oldNDI_UL[harq_pid]=ndi;
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2=UE_template->pre_assigned_mcs_ul;
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].normalized_rx_power=normalized_rx_power;
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].target_rx_power=target_rx_power;
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=UE_template->pre_assigned_mcs_ul;
|
||||
mcs = cmin (UE_template->pre_assigned_mcs_ul, openair_daq_vars.target_ue_ul_mcs); // adjust, based on user-defined MCS
|
||||
|
||||
if (UE_template->pre_allocated_rb_table_index_ul >=0) {
|
||||
@@ -788,6 +793,8 @@ void schedule_ulsch_rnti(module_id_t module_idP,
|
||||
}
|
||||
|
||||
TBS = mac_xface->get_TBS_UL(mcs,rb_table[rb_table_index]);
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx+=rb_table[rb_table_index];
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS=TBS;
|
||||
buffer_occupancy -= TBS;
|
||||
rballoc = mac_xface->computeRIV(frame_parms->N_RB_UL,
|
||||
first_rb[CC_id],
|
||||
@@ -817,17 +824,22 @@ void schedule_ulsch_rnti(module_id_t module_idP,
|
||||
|
||||
}
|
||||
|
||||
LOG_D(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE retransmission (mcs %d, first rb %d, nb_rb %d, TBS %d, harq_pid %d, round %d)\n",
|
||||
LOG_D(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE retransmission (mcs %d, first rb %d, nb_rb %d, harq_pid %d, round %d)\n",
|
||||
module_idP,UE_id,rnti,CC_id,frameP,subframeP,mcs,
|
||||
first_rb[CC_id],UE_template->nb_rb_ul[harq_pid],
|
||||
TBS,//mac_xface->get_TBS_UL(mcs,UE_template->nb_rb_ul[harq_pid]),
|
||||
harq_pid, round);
|
||||
harq_pid, round);
|
||||
|
||||
rballoc = mac_xface->computeRIV(frame_parms->N_RB_UL,
|
||||
first_rb[CC_id],
|
||||
UE_template->nb_rb_ul[harq_pid]);
|
||||
first_rb[CC_id]+=UE_template->nb_rb_ul[harq_pid]; // increment for next UE allocation
|
||||
}
|
||||
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].num_retransmission_rx+=1;
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx_rx=UE_template->nb_rb_ul[harq_pid];
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx+=UE_template->nb_rb_ul[harq_pid];
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=mcs;
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2=mcs;
|
||||
}
|
||||
|
||||
// Cyclic shift for DM RS
|
||||
if(cooperation_flag == 2) {
|
||||
|
||||
@@ -102,23 +102,14 @@ int dump_eNB_l2_stats(char *buffer, int length)
|
||||
eNB->eNB_stats[CC_id].total_bcch_buffer,
|
||||
eNB->eNB_stats[CC_id].bcch_mcs);
|
||||
|
||||
len += sprintf(&buffer[len],"CCCH , NB_TX_MAC = %d, transmitted bytes (TTI %d, total %d) MCS (TTI %d)\n",
|
||||
eNB->eNB_stats[CC_id].total_num_bcch_pdu,
|
||||
eNB->eNB_stats[CC_id].bcch_buffer,
|
||||
eNB->eNB_stats[CC_id].total_bcch_buffer,
|
||||
eNB->eNB_stats[CC_id].bcch_mcs);
|
||||
|
||||
len += sprintf(&buffer[len],"DCCH , NB_TX_MAC = %d, transmitted bytes (TTI %d, total %d) MCS (TTI %d)\n",
|
||||
eNB->eNB_stats[CC_id].total_num_bcch_pdu,
|
||||
eNB->eNB_stats[CC_id].bcch_buffer,
|
||||
eNB->eNB_stats[CC_id].total_bcch_buffer,
|
||||
eNB->eNB_stats[CC_id].bcch_mcs);
|
||||
|
||||
eNB->eNB_stats[CC_id].dlsch_bitrate=((eNB->eNB_stats[CC_id].dlsch_bytes_tx*8)/((eNB->frame + 1)*10));
|
||||
eNB->eNB_stats[CC_id].total_dlsch_pdus_tx+=eNB->eNB_stats[CC_id].dlsch_pdus_tx;
|
||||
eNB->eNB_stats[CC_id].total_dlsch_bytes_tx+=eNB->eNB_stats[CC_id].dlsch_bytes_tx;
|
||||
eNB->eNB_stats[CC_id].total_dlsch_bitrate=((eNB->eNB_stats[CC_id].total_dlsch_bytes_tx*8)/((eNB->frame + 1)*10));
|
||||
|
||||
eNB->eNB_stats[CC_id].ulsch_bitrate=((eNB->eNB_stats[CC_id].ulsch_bytes_rx*8)/((eNB->frame + 1)*10));
|
||||
eNB->eNB_stats[CC_id].total_ulsch_bitrate=((eNB->eNB_stats[CC_id].total_ulsch_bytes_rx*8)/((eNB->frame + 1)*10));
|
||||
|
||||
len += sprintf(&buffer[len],"DLSCH bitrate (TTI %u, avg %u) kbps, Transmitted bytes (TTI %u, total %u), Transmitted PDU (TTI %u, total %u) \n",
|
||||
eNB->eNB_stats[CC_id].dlsch_bitrate,
|
||||
eNB->eNB_stats[CC_id].total_dlsch_bitrate,
|
||||
@@ -126,6 +117,14 @@ int dump_eNB_l2_stats(char *buffer, int length)
|
||||
eNB->eNB_stats[CC_id].total_dlsch_bytes_tx,
|
||||
eNB->eNB_stats[CC_id].dlsch_pdus_tx,
|
||||
eNB->eNB_stats[CC_id].total_dlsch_pdus_tx);
|
||||
|
||||
len += sprintf(&buffer[len],"ULSCH bitrate (TTI %u, avg %u) kbps, Received bytes (TTI %u, total %u), Received PDU (TTI %u, total %lu) \n",
|
||||
eNB->eNB_stats[CC_id].ulsch_bitrate,
|
||||
eNB->eNB_stats[CC_id].total_ulsch_bitrate,
|
||||
eNB->eNB_stats[CC_id].ulsch_bytes_rx,
|
||||
eNB->eNB_stats[CC_id].total_ulsch_bytes_rx,
|
||||
eNB->eNB_stats[CC_id].ulsch_pdus_rx,
|
||||
eNB->eNB_stats[CC_id].total_ulsch_pdus_rx);
|
||||
}
|
||||
|
||||
len += sprintf(&buffer[len],"\n");
|
||||
@@ -133,12 +132,16 @@ int dump_eNB_l2_stats(char *buffer, int length)
|
||||
for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id]) {
|
||||
for (i=0; i<UE_list->numactiveCCs[UE_id]; i++) {
|
||||
CC_id=UE_list->ordered_CCids[i][UE_id];
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_bitrate=((UE_list->eNB_UE_stats[CC_id][UE_id].TBS*8)/((eNB->frame + 1)*10));
|
||||
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_bitrate=((UE_list->eNB_UE_stats[CC_id][UE_id].TBS*8)/((eNB->frame + 1)*10));
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].total_dlsch_bitrate= ((UE_list->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes*8)/((eNB->frame + 1)*10));
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].total_overhead_bytes+= UE_list->eNB_UE_stats[CC_id][UE_id].overhead_bytes;
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].avg_overhead_bytes=((UE_list->eNB_UE_stats[CC_id][UE_id].total_overhead_bytes*8)/((eNB->frame + 1)*10));
|
||||
|
||||
len += sprintf(&buffer[len],"UE %d %s, RNTI %x : CQI %d, MCS1 %d, MCS2 %d, RB (tx %d, retx %d, total %d), ncce (tx %d, retx %d) \n",
|
||||
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_bitrate=((UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS*8)/((eNB->frame + 1)*10));
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].total_ulsch_bitrate= ((UE_list->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes_rx*8)/((eNB->frame + 1)*10));
|
||||
|
||||
len += sprintf(&buffer[len],"UE %d %s (DLSCH), RNTI %x : CQI %d, MCS1 %d, MCS2 %d, RB (tx %d, retx %d, total %d), ncce (tx %d, retx %d) \n",
|
||||
UE_id,
|
||||
map_int_to_str(rrc_status_names, UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status),
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].crnti,
|
||||
@@ -165,12 +168,30 @@ int dump_eNB_l2_stats(char *buffer, int length)
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].total_overhead_bytes,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].avg_overhead_bytes
|
||||
);
|
||||
len += sprintf(&buffer[len],
|
||||
"[MAC] ULSCH received bytes (total %"PRIu64"),"
|
||||
"Total received PDU %d, Total errors %d\n",
|
||||
|
||||
len += sprintf(&buffer[len],"UE %d %s (ULSCH), RNTI %x : rx power (normalized %d, target %d), MCS (pre %d, post %d), RB (rx %d, retx %d, total %d), Current TBS %d \n",
|
||||
UE_id,
|
||||
map_int_to_str(rrc_status_names, UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status),
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].crnti,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].normalized_rx_power,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].target_rx_power,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_rx,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx_rx,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS
|
||||
);
|
||||
|
||||
len += sprintf(&buffer[len],
|
||||
"[MAC] ULSCH bitrate (TTI %d, avg %d), received bytes (total %"PRIu64"),"
|
||||
"Total received PDU %d, Total errors %d\n",
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_bitrate,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].total_ulsch_bitrate,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes_rx,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].total_num_pdus_rx,
|
||||
UE_list->eNB_UE_stats[CC_id][UE_id].num_errors_rx);
|
||||
|
||||
len+= sprintf(&buffer[len],"Received PHR PH = %d (db)\n", UE_list->UE_template[CC_id][UE_id].phr_info);
|
||||
len+= sprintf(&buffer[len],"Received BSR LCGID[0][1][2][3] = %u %u %u %u\n",
|
||||
UE_list->UE_template[CC_id][UE_id].bsr_info[LCGID0],
|
||||
|
||||
@@ -710,7 +710,7 @@ rrc_ue_establish_drb(
|
||||
RADIO_ACCESS_BEARER,Rlc_info_um);
|
||||
*/
|
||||
#ifdef PDCP_USE_NETLINK
|
||||
# if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) && !defined(OAI_USRP) && !defined(LINK_ENB_PDCP_TO_GTPV1U)
|
||||
# if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) && !defined(OAI_USRP) && !defined(OAI_BLADERF) && !defined(LINK_ENB_PDCP_TO_GTPV1U)
|
||||
# ifdef OAI_EMU
|
||||
ip_addr_offset3 = oai_emulation.info.nb_enb_local;
|
||||
ip_addr_offset4 = NB_eNB_INST;
|
||||
|
||||
@@ -3005,7 +3005,7 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
|
||||
ctxt_pP->module_id, ctxt_pP->frame, (int)DRB_configList->list.array[i]->drb_Identity);
|
||||
#if defined(PDCP_USE_NETLINK) && !defined(LINK_ENB_PDCP_TO_GTPV1U)
|
||||
// can mean also IPV6 since ether -> ipv6 autoconf
|
||||
# if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) && !defined(OAI_USRP)
|
||||
# if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) && !defined(OAI_USRP) && !defined(OAI_BLADERF)
|
||||
LOG_I(OIP, "[eNB %d] trying to bring up the OAI interface oai%d\n",
|
||||
ctxt_pP->module_id,
|
||||
ctxt_pP->module_id);
|
||||
|
||||
Reference in New Issue
Block a user