Fixed bug with NDI toggling
This commit is contained in:
@@ -249,6 +249,8 @@ schedule_ue_spec_default(
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
mcs = cqi_to_mcs[eNB_UE_stats->DL_cqi[0]];
|
mcs = cqi_to_mcs[eNB_UE_stats->DL_cqi[0]];
|
||||||
|
mcs = cmin(mcs, openair_daq_vars.target_ue_dl_mcs);
|
||||||
|
|
||||||
|
|
||||||
/*TODO: Must also update these stats*/
|
/*TODO: Must also update these stats*/
|
||||||
//eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[eNB_UE_stats->DL_cqi[0]];
|
//eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[eNB_UE_stats->DL_cqi[0]];
|
||||||
@@ -514,7 +516,6 @@ schedule_ue_spec_default(
|
|||||||
|
|
||||||
if ( TBS-ta_len-header_len_dcch > 0 ) {
|
if ( TBS-ta_len-header_len_dcch > 0 ) {
|
||||||
LOG_D(MAC, "[TEST]Requested %d bytes in DCCH buffer during first call\n", dci_tbs-ta_len-header_len_dcch);
|
LOG_D(MAC, "[TEST]Requested %d bytes in DCCH buffer during first call\n", dci_tbs-ta_len-header_len_dcch);
|
||||||
LOG_D(MAC, "DCCH dci_tbus is %d\n", dci_tbs);
|
|
||||||
//If we have space, we need to see how much data we can request at most (if any available)
|
//If we have space, we need to see how much data we can request at most (if any available)
|
||||||
rlc_status = mac_rlc_status_ind(mod_id,
|
rlc_status = mac_rlc_status_ind(mod_id,
|
||||||
rnti,
|
rnti,
|
||||||
@@ -552,6 +553,7 @@ schedule_ue_spec_default(
|
|||||||
//Set this to the max value that we might request
|
//Set this to the max value that we might request
|
||||||
sdu_length_total = data_to_request;
|
sdu_length_total = data_to_request;
|
||||||
} else {
|
} else {
|
||||||
|
LOG_D(MAC, "[TEST]Nothing here\n");
|
||||||
header_len_dcch = 0;
|
header_len_dcch = 0;
|
||||||
sdu_length_total = 0;
|
sdu_length_total = 0;
|
||||||
}
|
}
|
||||||
@@ -559,6 +561,7 @@ schedule_ue_spec_default(
|
|||||||
|
|
||||||
// check for DCCH1 and update header information (assume 2 byte sub-header)
|
// check for DCCH1 and update header information (assume 2 byte sub-header)
|
||||||
if (dci_tbs-ta_len-header_len_dcch-sdu_length_total-2 > 0 ) {
|
if (dci_tbs-ta_len-header_len_dcch-sdu_length_total-2 > 0 ) {
|
||||||
|
LOG_D(MAC, "[TEST]Requested %d bytes in DCCH1 buffer during first call\n", dci_tbs-ta_len-header_len_dcch-sdu_length_total-2);
|
||||||
|
|
||||||
//If we have space, we need to see how much data we can request at most (if any are available)
|
//If we have space, we need to see how much data we can request at most (if any are available)
|
||||||
rlc_status = mac_rlc_status_ind(mod_id,
|
rlc_status = mac_rlc_status_ind(mod_id,
|
||||||
@@ -577,7 +580,7 @@ schedule_ue_spec_default(
|
|||||||
header_len_dcch += 2;
|
header_len_dcch += 2;
|
||||||
|
|
||||||
//Fill in as much as possible
|
//Fill in as much as possible
|
||||||
data_to_request = cmin(dci_tbs-ta_len-header_len_dcch-sdu_length_total, rlc_status.bytes_in_buffer) + 1;
|
data_to_request = cmin(dci_tbs-ta_len-header_len_dcch-sdu_length_total, rlc_status.bytes_in_buffer);
|
||||||
|
|
||||||
rlc_pdus[channels_added] = (Protocol__PrpRlcPdu *) malloc(sizeof(Protocol__PrpRlcPdu));
|
rlc_pdus[channels_added] = (Protocol__PrpRlcPdu *) malloc(sizeof(Protocol__PrpRlcPdu));
|
||||||
protocol__prp_rlc_pdu__init(rlc_pdus[channels_added]);
|
protocol__prp_rlc_pdu__init(rlc_pdus[channels_added]);
|
||||||
@@ -628,7 +631,7 @@ schedule_ue_spec_default(
|
|||||||
if (rlc_status.bytes_in_buffer > 0) {
|
if (rlc_status.bytes_in_buffer > 0) {
|
||||||
LOG_D(MAC, "[TEST] Have %d bytes in buffer DTCH during first call\n", rlc_status.bytes_in_buffer);
|
LOG_D(MAC, "[TEST] Have %d bytes in buffer DTCH during first call\n", rlc_status.bytes_in_buffer);
|
||||||
//Fill what remains in the TB
|
//Fill what remains in the TB
|
||||||
data_to_request = cmin(dci_tbs-ta_len-header_len_dcch-sdu_length_total-header_len_dtch, rlc_status.bytes_in_buffer) + 1;
|
data_to_request = cmin(dci_tbs-ta_len-header_len_dcch-sdu_length_total-header_len_dtch, rlc_status.bytes_in_buffer);
|
||||||
LOG_D(MAC, "[TEST]Will request %d \n", data_to_request);
|
LOG_D(MAC, "[TEST]Will request %d \n", data_to_request);
|
||||||
rlc_pdus[channels_added] = (Protocol__PrpRlcPdu *) malloc(sizeof(Protocol__PrpRlcPdu));
|
rlc_pdus[channels_added] = (Protocol__PrpRlcPdu *) malloc(sizeof(Protocol__PrpRlcPdu));
|
||||||
protocol__prp_rlc_pdu__init(rlc_pdus[channels_added]);
|
protocol__prp_rlc_pdu__init(rlc_pdus[channels_added]);
|
||||||
@@ -687,11 +690,15 @@ schedule_ue_spec_default(
|
|||||||
nb_rb=min_rb_unit[CC_id];
|
nb_rb=min_rb_unit[CC_id];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG_D(MAC,"[TEST]The initial number of resource blocks was %d\n", nb_rb);
|
||||||
|
LOG_D(MAC,"[TEST] The initial mcs was %d\n", mcs_tmp);
|
||||||
|
|
||||||
TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_rb);
|
TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_rb);
|
||||||
|
LOG_D(MAC,"[TEST]The TBS during rate matching was %d\n", TBS);
|
||||||
|
|
||||||
while (TBS < (sdu_length_total + header_len_dcch + header_len_dtch + ta_len)) {
|
while (TBS < (sdu_length_total + header_len_dcch + header_len_dtch + ta_len)) {
|
||||||
nb_rb += min_rb_unit[CC_id]; //
|
nb_rb += min_rb_unit[CC_id]; //
|
||||||
|
LOG_D(MAC, "[TEST]Had to increase the number of RBs\n");
|
||||||
if (nb_rb > nb_available_rb) { // if we've gone beyond the maximum number of RBs
|
if (nb_rb > nb_available_rb) { // if we've gone beyond the maximum number of RBs
|
||||||
// (can happen if N_RB_DL is odd)
|
// (can happen if N_RB_DL is odd)
|
||||||
TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_available_rb);
|
TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_available_rb);
|
||||||
@@ -702,14 +709,18 @@ schedule_ue_spec_default(
|
|||||||
TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_rb);
|
TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_rb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG_D(MAC,"[TEST] After the first pass the resource blocks became %d\n", nb_rb);
|
||||||
|
LOG_D(MAC,"[TEST] After the first pass the MCS was %d\n", mcs_tmp);
|
||||||
|
|
||||||
if(nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) {
|
if(nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) {
|
||||||
|
LOG_D(MAC, "[TEST]We had the exact number of rbs. Time to fill the rballoc subband\n");
|
||||||
for(j = 0; j < frame_parms[CC_id]->N_RBG; j++) { // for indicating the rballoc for each sub-band
|
for(j = 0; j < frame_parms[CC_id]->N_RBG; j++) { // for indicating the rballoc for each sub-band
|
||||||
UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j];
|
UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
nb_rb_temp = nb_rb;
|
nb_rb_temp = nb_rb;
|
||||||
j = 0;
|
j = 0;
|
||||||
|
LOG_D(MAC, "[TEST]Will only partially fill the bitmap\n");
|
||||||
while((nb_rb_temp > 0) && (j < frame_parms[CC_id]->N_RBG)) {
|
while((nb_rb_temp > 0) && (j < frame_parms[CC_id]->N_RBG)) {
|
||||||
if(ue_sched_ctl->rballoc_sub_UE[CC_id][j] == 1) {
|
if(ue_sched_ctl->rballoc_sub_UE[CC_id][j] == 1) {
|
||||||
UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j];
|
UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j];
|
||||||
@@ -726,6 +737,9 @@ schedule_ue_spec_default(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG_D(MAC,"[TEST] After the second pass the resource blocks became %d\n", nb_rb);
|
||||||
|
LOG_D(MAC,"[TEST] After the second pass the mcs was %d\n", mcs_tmp);
|
||||||
|
|
||||||
PHY_vars_eNB_g[mod_id][CC_id]->mu_mimo_mode[UE_id].pre_nb_available_rbs = nb_rb;
|
PHY_vars_eNB_g[mod_id][CC_id]->mu_mimo_mode[UE_id].pre_nb_available_rbs = nb_rb;
|
||||||
PHY_vars_eNB_g[mod_id][CC_id]->mu_mimo_mode[UE_id].dl_pow_off = ue_sched_ctl->dl_pow_off[CC_id];
|
PHY_vars_eNB_g[mod_id][CC_id]->mu_mimo_mode[UE_id].dl_pow_off = ue_sched_ctl->dl_pow_off[CC_id];
|
||||||
|
|
||||||
@@ -829,7 +843,7 @@ schedule_ue_spec_default(
|
|||||||
dl_dci->rb_shift = 0;
|
dl_dci->rb_shift = 0;
|
||||||
dl_dci->n_ndi = 1;
|
dl_dci->n_ndi = 1;
|
||||||
dl_dci->ndi = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_ndi);
|
dl_dci->ndi = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_ndi);
|
||||||
dl_dci->ndi[0] = 1;
|
dl_dci->ndi[0] = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid];
|
||||||
dl_dci->n_rv = 1;
|
dl_dci->n_rv = 1;
|
||||||
dl_dci->rv = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_rv);
|
dl_dci->rv = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_rv);
|
||||||
dl_dci->rv[0] = 0;
|
dl_dci->rv[0] = 0;
|
||||||
@@ -987,6 +1001,7 @@ schedule_ue_spec_default(
|
|||||||
dl_dci->precoding_info = 5; // Is this right??
|
dl_dci->precoding_info = 5; // Is this right??
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle NDI for next time
|
// Toggle NDI for next time
|
||||||
LOG_D(MAC,"CC_id %d Frame %d, subframeP %d: Toggling Format1 NDI for UE %d (rnti %x/%d) oldNDI %d\n",
|
LOG_D(MAC,"CC_id %d Frame %d, subframeP %d: Toggling Format1 NDI for UE %d (rnti %x/%d) oldNDI %d\n",
|
||||||
CC_id, frame, subframe, UE_id,
|
CC_id, frame, subframe, UE_id,
|
||||||
@@ -998,12 +1013,12 @@ schedule_ue_spec_default(
|
|||||||
} else { // There is no data from RLC or MAC header, so don't schedule
|
} else { // There is no data from RLC or MAC header, so don't schedule
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (frame_parms[CC_id]->frame_type == TDD) {
|
if (frame_parms[CC_id]->frame_type == TDD) {
|
||||||
set_ul_DAI(mod_id, UE_id, CC_id, frame, subframe, frame_parms);
|
set_ul_DAI(mod_id, UE_id, CC_id, frame, subframe, frame_parms);
|
||||||
}
|
}
|
||||||
}
|
} // UE_id loop
|
||||||
}
|
} // CC_id loop
|
||||||
|
|
||||||
// Add all the dl_data elements to the progran message
|
// Add all the dl_data elements to the progran message
|
||||||
dl_info->dl_mac_config_msg->n_dl_ue_data = num_ues_added;
|
dl_info->dl_mac_config_msg->n_dl_ue_data = num_ues_added;
|
||||||
@@ -1072,9 +1087,6 @@ void apply_scheduling_decisions(mid_t mod_id,
|
|||||||
rnti = dl_data->rnti;
|
rnti = dl_data->rnti;
|
||||||
UE_id = find_ue(rnti, PHY_vars_eNB_g[mod_id][CC_id]);
|
UE_id = find_ue(rnti, PHY_vars_eNB_g[mod_id][CC_id]);
|
||||||
|
|
||||||
//NOTICE: Maybe later will not be required, once scheduler fully restructured
|
|
||||||
//eNB_dlsch_info[mod_id][CC_id][UE_id].status = S_DL_WAITING;
|
|
||||||
|
|
||||||
ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
|
ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
|
||||||
eNB_UE_stats = mac_xface->get_eNB_UE_stats(mod_id,CC_id,rnti);
|
eNB_UE_stats = mac_xface->get_eNB_UE_stats(mod_id,CC_id,rnti);
|
||||||
|
|
||||||
@@ -1108,6 +1120,7 @@ void apply_scheduling_decisions(mid_t mod_id,
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (dl_dci->format == PROTOCOL__PRP_DCI_FORMAT__PRDCIF_1) {
|
if (dl_dci->format == PROTOCOL__PRP_DCI_FORMAT__PRDCIF_1) {
|
||||||
|
LOG_D(MAC,"[TEST] Setting DCI format 1\n");
|
||||||
((DCI1_1_5MHz_FDD_t*)DLSCH_dci)->harq_pid = harq_pid;
|
((DCI1_1_5MHz_FDD_t*)DLSCH_dci)->harq_pid = harq_pid;
|
||||||
((DCI1_1_5MHz_FDD_t*)DLSCH_dci)->rv = round;
|
((DCI1_1_5MHz_FDD_t*)DLSCH_dci)->rv = round;
|
||||||
((DCI1_1_5MHz_FDD_t*)DLSCH_dci)->rballoc = dl_dci->rb_bitmap;
|
((DCI1_1_5MHz_FDD_t*)DLSCH_dci)->rballoc = dl_dci->rb_bitmap;
|
||||||
@@ -1240,13 +1253,16 @@ void apply_scheduling_decisions(mid_t mod_id,
|
|||||||
rlc_status.bytes_in_buffer = 0;
|
rlc_status.bytes_in_buffer = 0;
|
||||||
|
|
||||||
TBS = dl_dci->tbs_size[0];
|
TBS = dl_dci->tbs_size[0];
|
||||||
|
LOG_D(MAC,"[TEST] The TBS during the creation process is %d\n", TBS);
|
||||||
|
|
||||||
if (dl_data->n_ce_bitmap > 0) {
|
if (dl_data->n_ce_bitmap > 0) {
|
||||||
//Check if there is TA command
|
//Check if there is TA command
|
||||||
if (dl_data->ce_bitmap[0] & PROTOCOL__PRP_CE_TYPE__PRPCET_TA) {
|
if (dl_data->ce_bitmap[0] & PROTOCOL__PRP_CE_TYPE__PRPCET_TA) {
|
||||||
ta_len = 2;
|
ta_len = 2;
|
||||||
|
LOG_D(MAC, "[TEST] Need to send timing advance\n");
|
||||||
} else {
|
} else {
|
||||||
ta_len = 0;
|
ta_len = 0;
|
||||||
|
LOG_D(MAC, "[TEST] No timing advance\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1257,9 +1273,12 @@ void apply_scheduling_decisions(mid_t mod_id,
|
|||||||
// Go through each one of the channel commands and create SDUs
|
// Go through each one of the channel commands and create SDUs
|
||||||
for (i = 0; i < n_lc; i++) {
|
for (i = 0; i < n_lc; i++) {
|
||||||
lcid = dl_data->rlc_pdu[i]->rlc_pdu_tb[0]->logical_channel_id;
|
lcid = dl_data->rlc_pdu[i]->rlc_pdu_tb[0]->logical_channel_id;
|
||||||
|
LOG_D(MAC, "[TEST] Going through SDU of channel %d\n", lcid);
|
||||||
rlc_size = dl_data->rlc_pdu[i]->rlc_pdu_tb[0]->size;
|
rlc_size = dl_data->rlc_pdu[i]->rlc_pdu_tb[0]->size;
|
||||||
LOG_D(MAC,"[TEST]Have to check %d channels\n", n_lc);
|
LOG_D(MAC,"[TEST] [eNB %d] Frame %d, LCID %d, CC_id %d, Requesting %d bytes from RLC (RRC message)\n",
|
||||||
|
mod_id, frame, lcid, CC_id, rlc_size);
|
||||||
if (rlc_size > 0) {
|
if (rlc_size > 0) {
|
||||||
|
|
||||||
rlc_status = mac_rlc_status_ind(mod_id,
|
rlc_status = mac_rlc_status_ind(mod_id,
|
||||||
rnti,
|
rnti,
|
||||||
mod_id,
|
mod_id,
|
||||||
@@ -1271,10 +1290,7 @@ void apply_scheduling_decisions(mid_t mod_id,
|
|||||||
|
|
||||||
sdu_lengths[i] = 0;
|
sdu_lengths[i] = 0;
|
||||||
|
|
||||||
LOG_D(MAC,"[eNB %d] Frame %d, LCID %d, CC_id %d, Requesting %d bytes from RLC (RRC message)\n",
|
LOG_D(MAC, "[TEST] RLC can give %d bytes for LCID %d during second call\n", rlc_status.bytes_in_buffer, lcid);
|
||||||
mod_id, frame, lcid, CC_id, rlc_size);
|
|
||||||
|
|
||||||
LOG_D(MAC, "[TEST] Have %d bytes for LCID %d during second call\n", rlc_status.bytes_in_buffer, lcid);
|
|
||||||
|
|
||||||
sdu_lengths[i] += mac_rlc_data_req(mod_id,
|
sdu_lengths[i] += mac_rlc_data_req(mod_id,
|
||||||
rnti,
|
rnti,
|
||||||
@@ -1285,10 +1301,11 @@ void apply_scheduling_decisions(mid_t mod_id,
|
|||||||
lcid,
|
lcid,
|
||||||
(char *)&dlsch_buffer[sdu_length_total]);
|
(char *)&dlsch_buffer[sdu_length_total]);
|
||||||
|
|
||||||
LOG_D(MAC, "[TEST] This is what I actually got from LCID %d -> %d\n",lcid, sdu_lengths[i]);
|
LOG_D(MAC, "[TEST] RLC gave %d bytes in LCID %d\n", sdu_lengths[i], lcid);
|
||||||
|
|
||||||
LOG_D(MAC,"[eNB %d][LCID %d] CC_id %d Got %d bytes from RLC\n",mod_id, lcid, CC_id, sdu_lengths[i]);
|
LOG_D(MAC,"[eNB %d][LCID %d] CC_id %d Got %d bytes from RLC\n",mod_id, lcid, CC_id, sdu_lengths[i]);
|
||||||
sdu_length_total += sdu_lengths[i];
|
sdu_length_total += sdu_lengths[i];
|
||||||
|
LOG_D(MAC, "[TEST] Total sdu size became %d\n", sdu_length_total);
|
||||||
sdu_lcids[i] = lcid;
|
sdu_lcids[i] = lcid;
|
||||||
|
|
||||||
UE_list->eNB_UE_stats[CC_id][UE_id].num_pdu_tx[lcid] += 1;
|
UE_list->eNB_UE_stats[CC_id][UE_id].num_pdu_tx[lcid] += 1;
|
||||||
@@ -1321,7 +1338,6 @@ void apply_scheduling_decisions(mid_t mod_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// there is a payload
|
// there is a payload
|
||||||
LOG_D(MAC, "[TEST] This is the padding %d\n", TBS - header_len_dcch - header_len_dtch - sdu_length_total - ta_len);
|
|
||||||
if (((sdu_length_total + header_len_dcch + header_len_dtch ) > 0)) {
|
if (((sdu_length_total + header_len_dcch + header_len_dtch ) > 0)) {
|
||||||
if ((TBS - header_len_dcch - header_len_dtch - sdu_length_total - ta_len) <= 2
|
if ((TBS - header_len_dcch - header_len_dtch - sdu_length_total - ta_len) <= 2
|
||||||
|| (TBS - header_len_dcch - header_len_dtch - sdu_length_total - ta_len) > TBS) { //protect from overflow
|
|| (TBS - header_len_dcch - header_len_dtch - sdu_length_total - ta_len) > TBS) { //protect from overflow
|
||||||
@@ -1341,9 +1357,6 @@ void apply_scheduling_decisions(mid_t mod_id,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_D(MAC, "[TEST] This is the current SDU length %d and this is the TBS %d\n", sdu_length_total, TBS);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (ta_len > 0) {
|
if (ta_len > 0) {
|
||||||
ta_update = ue_sched_ctl->ta_update;
|
ta_update = ue_sched_ctl->ta_update;
|
||||||
@@ -1400,8 +1413,10 @@ void apply_scheduling_decisions(mid_t mod_id,
|
|||||||
UE_list->eNB_UE_stats[CC_id][UE_id].harq_pid = harq_pid;
|
UE_list->eNB_UE_stats[CC_id][UE_id].harq_pid = harq_pid;
|
||||||
UE_list->eNB_UE_stats[CC_id][UE_id].harq_round = round;
|
UE_list->eNB_UE_stats[CC_id][UE_id].harq_round = round;
|
||||||
|
|
||||||
//UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used = nb_rb;
|
nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid];
|
||||||
//UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used += nb_rb;
|
LOG_D(MAC,"[TEST] %d Number of resource blocks allocated\n", nb_rb);
|
||||||
|
UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used = nb_rb;
|
||||||
|
UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used += nb_rb;
|
||||||
UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs1=dl_dci->mcs[0];
|
UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs1=dl_dci->mcs[0];
|
||||||
UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs2=dl_dci->mcs[0];
|
UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs2=dl_dci->mcs[0];
|
||||||
UE_list->eNB_UE_stats[CC_id][UE_id].TBS = TBS;
|
UE_list->eNB_UE_stats[CC_id][UE_id].TBS = TBS;
|
||||||
|
|||||||
Reference in New Issue
Block a user