Added crnti checking routine in nrUE.
This commit is contained in:
@@ -1366,10 +1366,10 @@ void set_thread_priority(int priority);
|
||||
void *vnf_nr_p7_thread_start(void *ptr) {
|
||||
set_thread_priority(79);
|
||||
LOG_I(MAC, "Clearing Queues\n");
|
||||
reset_queue(&gnb_rach_ind_queue);
|
||||
reset_queue(&gnb_rx_ind_queue);
|
||||
reset_queue(&gnb_crc_ind_queue);
|
||||
reset_queue(&gnb_uci_ind_queue);
|
||||
init_queue(&gnb_rach_ind_queue);
|
||||
init_queue(&gnb_rx_ind_queue);
|
||||
init_queue(&gnb_crc_ind_queue);
|
||||
init_queue(&gnb_uci_ind_queue);
|
||||
|
||||
vnf_p7_info *p7_vnf = (vnf_p7_info *)ptr;
|
||||
p7_vnf->config->port = p7_vnf->local_port;
|
||||
|
||||
@@ -82,7 +82,8 @@ int get_rnti_type(NR_UE_MAC_INST_t *mac, uint16_t rnti){
|
||||
} else if (rnti == 0xFFFF) {
|
||||
rnti_type = NR_RNTI_SI;
|
||||
} else {
|
||||
AssertFatal(1 == 0, "In %s: Not identified/handled rnti %d \n", __FUNCTION__, rnti);
|
||||
AssertFatal(1 == 0, "In %s: Not identified/handled rnti %x [ra->ra_rnti %x, mac->crnti %x, ra->t_crnti %x]\n",
|
||||
__FUNCTION__, rnti, ra->ra_rnti, mac->crnti, ra->t_crnti);
|
||||
}
|
||||
|
||||
LOG_D(MAC, "In %s: returning rnti_type %s \n", __FUNCTION__, rnti_types[rnti_type]);
|
||||
@@ -446,11 +447,22 @@ int nr_ue_process_dci_indication_pdu(module_id_t module_id,int cc_id, int gNB_in
|
||||
|
||||
NR_UE_MAC_INST_t *mac = get_mac_inst(module_id);
|
||||
|
||||
LOG_D(MAC,"Received dci indication (rnti %x,dci format %d,n_CCE %d,payloadSize %d,payload %llx)\n",
|
||||
LOG_D(MAC,"Received dci indication (rnti %4x, dci format %d,n_CCE %d, payloadSize %d, payload %llx)\n\n\n\n",
|
||||
dci->rnti,dci->dci_format,dci->n_CCE,dci->payloadSize,*(unsigned long long*)dci->payloadBits);
|
||||
|
||||
uint32_t dci_format = nr_extract_dci_info(mac, dci->dci_format, dci->payloadSize, dci->rnti, (uint64_t *)dci->payloadBits, def_dci_pdu_rel15);
|
||||
return (nr_ue_process_dci(module_id, cc_id, gNB_index, frame, slot, def_dci_pdu_rel15, dci->rnti, dci_format));
|
||||
|
||||
if ((dci->rnti == mac->crnti) || (dci->rnti == mac->ra.ra_rnti))
|
||||
{
|
||||
LOG_D(MAC,"Received dci indication rnti %4x mac->crnti %4x frame slot %4d.%2d RA state %d\n",
|
||||
dci->rnti, mac->crnti, frame, slot, mac->ra.ra_state);
|
||||
uint32_t dci_format = nr_extract_dci_info(mac, dci->dci_format, dci->payloadSize, dci->rnti, (uint64_t *)dci->payloadBits, def_dci_pdu_rel15);
|
||||
return (nr_ue_process_dci(module_id, cc_id, gNB_index, frame, slot, def_dci_pdu_rel15, dci->rnti, dci_format));
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_D(MAC,"We skip for the received dci indication rnti %4x != mac->crnti %4x frame slot %4d.%2d\n",
|
||||
dci->rnti, mac->crnti, frame, slot);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, frame_t frame, int slot, dci_pdu_rel15_t *dci, uint16_t rnti, uint8_t dci_format){
|
||||
|
||||
@@ -520,6 +520,8 @@ void config_uldci(const NR_BWP_Uplink_t *ubwp,
|
||||
dci_pdu_rel15->ndi = pusch_pdu->pusch_data.new_data_indicator;
|
||||
dci_pdu_rel15->rv = pusch_pdu->pusch_data.rv_index;
|
||||
dci_pdu_rel15->harq_pid = pusch_pdu->pusch_data.harq_process_id;
|
||||
LOG_D(MAC,"config_uldci harq id check dci_pdu_rel15->harq_pid %d pusch_pdu->pusch_data.harq_process_id %d\n",
|
||||
dci_pdu_rel15->harq_pid, pusch_pdu->pusch_data.harq_process_id);
|
||||
dci_pdu_rel15->tpc = tpc;
|
||||
AssertFatal(ubwp->bwp_Dedicated->pusch_Config->choice.setup->resourceAllocation == NR_PUSCH_Config__resourceAllocation_resourceAllocationType1,
|
||||
"Only frequency resource allocation type 1 is currently supported\n");
|
||||
@@ -1249,10 +1251,12 @@ void fill_dci_pdu_rel15(const NR_ServingCellConfigCommon_t *scc,
|
||||
case NR_UL_DCI_FORMAT_0_1:
|
||||
switch (rnti_type) {
|
||||
case NR_RNTI_C:
|
||||
#if 0
|
||||
harq_pid_ul = (harq_pid_ul + 1) % 16;
|
||||
if (harq_pid_ul == 0)
|
||||
flag = !flag;
|
||||
dci_pdu_rel15->ndi = flag;
|
||||
#endif
|
||||
|
||||
// Indicating a DL DCI format 1bit
|
||||
pos = 1;
|
||||
@@ -1286,8 +1290,11 @@ void fill_dci_pdu_rel15(const NR_ServingCellConfigCommon_t *scc,
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->rv & 0x3) << (dci_size - pos);
|
||||
// HARQ process number 4bit
|
||||
pos += 4;
|
||||
dci_pdu_rel15->harq_pid = harq_pid_ul;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->harq_pid & 0xf) << (dci_size - pos);
|
||||
LOG_D(MAC,"fill_dci_pdu_rel15 dci_format %d shift %d hard_pid_ul %d\n",
|
||||
dci_format, dci_size - pos, dci_pdu_rel15->harq_pid );
|
||||
LOG_D(MAC,"fill_dci_pdu_rel15 dci_size, pos, shift, harq_id = %u %u %d %lu\n",
|
||||
dci_size, pos, dci_size - pos, (*dci_pdu >> (dci_size - pos)) & 0xf);
|
||||
// 1st Downlink assignment index
|
||||
pos += dci_pdu_rel15->dai[0].nbits;
|
||||
*dci_pdu |= ((uint64_t)dci_pdu_rel15->dai[0].val & ((1 << dci_pdu_rel15->dai[0].nbits) - 1)) << (dci_size - pos);
|
||||
|
||||
@@ -302,7 +302,7 @@ static void handle_dl_harq(module_id_t mod_id,
|
||||
add_tail_nr_list(&UE_info->UE_sched_ctrl[UE_id].available_dl_harq, harq_pid);
|
||||
harq->round = 0;
|
||||
harq->ndi ^= 1;
|
||||
} else if (harq->round == MAX_HARQ_ROUNDS) {
|
||||
} else if (harq->round >= MAX_HARQ_ROUNDS -1) {
|
||||
add_tail_nr_list(&UE_info->UE_sched_ctrl[UE_id].available_dl_harq, harq_pid);
|
||||
harq->round = 0;
|
||||
harq->ndi ^= 1;
|
||||
|
||||
@@ -338,10 +338,12 @@ void handle_nr_ul_harq(module_id_t mod_id,
|
||||
LOG_D(NR_MAC, "Comparing crc_pdu->harq_id vs feedback harq_pid = %d %d\n",crc_pdu->harq_id, harq_pid);
|
||||
while (crc_pdu->harq_id != harq_pid || harq_pid < 0) {
|
||||
LOG_W(MAC,
|
||||
"Unexpected ULSCH HARQ PID in crc pdu %d (feedback have %d) for RNTI %04x (ignore this warning for RA)\n",
|
||||
"Unexpected ULSCH HARQ PID in crc pdu %d (feedback have %d) for RNTI %04x SFN/SLOT %4d.%2d (ignore this warning for RA)\n",
|
||||
crc_pdu->harq_id,
|
||||
harq_pid,
|
||||
crc_pdu->rnti);
|
||||
crc_pdu->rnti,
|
||||
frame, slot
|
||||
);
|
||||
if (harq_pid < 0)
|
||||
return;
|
||||
|
||||
@@ -364,7 +366,7 @@ void handle_nr_ul_harq(module_id_t mod_id,
|
||||
harq->ndi ^= 1;
|
||||
harq->round = 0;
|
||||
LOG_D(MAC,
|
||||
"Ulharq id %d crc passed for RNTI %04x\n",
|
||||
"Ulharq id %d crc passed for RNTI %4x\n",
|
||||
harq_pid,
|
||||
crc_pdu->rnti);
|
||||
add_tail_nr_list(&sched_ctrl->available_ul_harq, harq_pid);
|
||||
@@ -980,7 +982,11 @@ void nr_schedule_ulsch(module_id_t module_id,
|
||||
* every TTI are pre-populated by the preprocessor and used below */
|
||||
NR_sched_pusch_t *sched_pusch = &sched_ctrl->sched_pusch;
|
||||
if (sched_pusch->rbSize <= 0)
|
||||
{
|
||||
LOG_D(NR_MAC, "UE id %d was skipped due to sched_pusch->rbSize <= 0\n", UE_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
struct timespec ts;
|
||||
if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1)
|
||||
@@ -1039,8 +1045,11 @@ void nr_schedule_ulsch(module_id_t module_id,
|
||||
}
|
||||
|
||||
uint16_t rnti = UE_info->rnti[UE_id];
|
||||
LOG_D(NR_MAC, "nr_schedule_ulsch UE_id_checking UE_id = %d, rnti = %x \n", UE_id, rnti);
|
||||
LOG_D(NR_MAC, "nr_schedule_ulsch UE_id_checking UE_id = %d, rnti = %x, sfn slot = %d.%d \n",
|
||||
UE_id, rnti, frame, slot);
|
||||
|
||||
LOG_D(NR_MAC, "Before consume harq id:");
|
||||
dump_nr_list(&sched_ctrl->available_ul_harq);
|
||||
int8_t harq_id = sched_pusch->ul_harq_pid;
|
||||
if (harq_id < 0) {
|
||||
/* PP has not selected a specific HARQ Process, get a new one */
|
||||
@@ -1049,21 +1058,32 @@ void nr_schedule_ulsch(module_id_t module_id,
|
||||
"no free HARQ process available for UE %d\n",
|
||||
UE_id);
|
||||
remove_front_nr_list(&sched_ctrl->available_ul_harq);
|
||||
LOG_D(NR_MAC, "Consumed harq id -------------------------> %d", harq_id);
|
||||
sched_pusch->ul_harq_pid = harq_id;
|
||||
} else {
|
||||
/* PP selected a specific HARQ process. Check whether it will be a new
|
||||
* transmission or a retransmission, and remove from the corresponding
|
||||
* list */
|
||||
if (sched_ctrl->ul_harq_processes[harq_id].round == 0)
|
||||
{
|
||||
remove_nr_list(&sched_ctrl->available_ul_harq, harq_id);
|
||||
LOG_D(NR_MAC, "Consumed harq id%d", harq_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
remove_nr_list(&sched_ctrl->retrans_ul_harq, harq_id);
|
||||
LOG_D(NR_MAC, "Retran harq id %d for round %d\n", harq_id, sched_ctrl->ul_harq_processes[harq_id].round);
|
||||
}
|
||||
}
|
||||
LOG_D(NR_MAC, "After consume harq id:");
|
||||
dump_nr_list(&sched_ctrl->available_ul_harq);
|
||||
NR_UE_ul_harq_t *cur_harq = &sched_ctrl->ul_harq_processes[harq_id];
|
||||
DevAssert(!cur_harq->is_waiting);
|
||||
add_tail_nr_list(&sched_ctrl->feedback_ul_harq, harq_id);
|
||||
cur_harq->feedback_slot = sched_pusch->slot;
|
||||
cur_harq->is_waiting = true;
|
||||
LOG_D(NR_MAC, "Updated Feedback ul harq id list:");
|
||||
dump_nr_list(&sched_ctrl->feedback_ul_harq);
|
||||
|
||||
int rnti_types[2] = { NR_RNTI_C, 0 };
|
||||
|
||||
@@ -1212,7 +1232,7 @@ void nr_schedule_ulsch(module_id_t module_id,
|
||||
pusch_pdu->pusch_data.new_data_indicator = cur_harq->ndi;
|
||||
pusch_pdu->pusch_data.tb_size = sched_pusch->tb_size;
|
||||
pusch_pdu->pusch_data.num_cb = 0; //CBG not supported
|
||||
LOG_D(NR_MAC,"Setting harq_id pusch_pdu->pusch_data.harq_process_id %d for UE_id(%d), rnti %x\n", harq_id, UE_id, rnti);
|
||||
LOG_D(NR_MAC,"Setting harq_id pusch_pdu->pusch_data.harq_process_id %2d for UE_id(%d) rnti %4x sfn slot %4d.%2d\n", harq_id, UE_id, rnti, frame, slot);
|
||||
|
||||
/* TRANSFORM PRECODING --------------------------------------------------------*/
|
||||
|
||||
@@ -1268,7 +1288,8 @@ void nr_schedule_ulsch(module_id_t module_id,
|
||||
pdcch_pdu_bwp_coreset[bwpid][coresetid] = pdcch_pdu;
|
||||
}
|
||||
|
||||
LOG_D(NR_MAC,"Configuring ULDCI/PDCCH in %d.%d\n", frame,slot);
|
||||
LOG_D(NR_MAC,"Configuring ULDCI/PDCCH in %d.%d rnti %x UE id %d pusch harq_id %d sched_pusch->ul_harq_pid %d\n",
|
||||
frame,slot, rnti, UE_id, pusch_pdu->pusch_data.harq_process_id, sched_pusch->ul_harq_pid);
|
||||
|
||||
/* Fill PDCCH DL DCI PDU */
|
||||
nfapi_nr_dl_dci_pdu_t *dci_pdu = &pdcch_pdu->dci_pdu[pdcch_pdu->numDlDci];
|
||||
@@ -1299,6 +1320,9 @@ void nr_schedule_ulsch(module_id_t module_id,
|
||||
UE_info->UE_sched_ctrl[UE_id].tpc0,
|
||||
n_ubwp,
|
||||
sched_ctrl->active_bwp->bwp_Id);
|
||||
|
||||
LOG_D(NR_MAC,"After config_uldci in %d.%d rnti %x UE id %d uldci payload harq_id %d pusch harq_id %d sched_pusch->ul_harq_pid %d\n",
|
||||
frame,slot, rnti, UE_id, uldci_payload.harq_pid, pusch_pdu->pusch_data.harq_process_id, sched_pusch->ul_harq_pid);
|
||||
fill_dci_pdu_rel15(scc,
|
||||
secondaryCellGroup,
|
||||
dci_pdu,
|
||||
|
||||
@@ -316,12 +316,13 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n
|
||||
abort();
|
||||
}
|
||||
|
||||
NR_UE_MAC_INST_t *mac = get_mac_inst(dl_info->module_id);
|
||||
for (int i = 0; i < num_pdus; i++)
|
||||
{
|
||||
nfapi_nr_ul_dci_request_pdus_t *pdu_list = &ul_dci_req->ul_dci_pdu_list[i];
|
||||
AssertFatal(pdu_list->PDUType == 0, "ul_dci_req pdu type != PUCCH");
|
||||
if (pdu_list->pdcch_pdu.pdcch_pdu_rel15.dci_pdu->RNTI != get_mac_inst(0)->crnti)
|
||||
continue;
|
||||
//if (pdu_list->pdcch_pdu.pdcch_pdu_rel15.dci_pdu->RNTI != get_mac_inst(0)->crnti)
|
||||
// continue;
|
||||
LOG_I(NR_PHY, "[%d %d] PUCCH PDU in ul_dci for rnti %x\n", ul_dci_req->SFN, ul_dci_req->Slot, pdu_list->pdcch_pdu.pdcch_pdu_rel15.dci_pdu->RNTI);
|
||||
uint16_t num_dci = pdu_list->pdcch_pdu.pdcch_pdu_rel15.numDlDci;
|
||||
if (num_dci > 0)
|
||||
@@ -334,9 +335,20 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n
|
||||
for (int j = 0; j < num_dci; j++)
|
||||
{
|
||||
nfapi_nr_dl_dci_pdu_t *dci_pdu_list = &pdu_list->pdcch_pdu.pdcch_pdu_rel15.dci_pdu[j];
|
||||
if (dci_pdu_list->RNTI != mac->crnti)
|
||||
{
|
||||
LOG_I(NR_MAC, "ul_dci_req Skip: dci_pdu_list->RNTI %x != mac->crnti %x\n", dci_pdu_list->RNTI, get_mac_inst(dl_info->module_id)->crnti);
|
||||
continue;
|
||||
}
|
||||
int num_bytes = (dci_pdu_list->PayloadSizeBits + 7) / 8;
|
||||
LOG_I(NR_PHY, "[%d, %d] ul_dci_req PDCCH DCI for rnti %x with PayloadSizeBits %d and num_bytes %d\n",
|
||||
ul_dci_req->SFN, ul_dci_req->Slot, dci_pdu_list->RNTI, dci_pdu_list->PayloadSizeBits, num_bytes);
|
||||
uint64_t *dci_pdu_payload = (uint64_t *)dci_pdu_list->Payload;
|
||||
int harq_pid = (*dci_pdu_payload >> 11) & 0xf;
|
||||
LOG_I(NR_PHY, "[%d, %d] ul_dci_req PDCCH DCI for rnti %x with PayloadSizeBits %d and num_bytes %d harq_id %lu\n",
|
||||
ul_dci_req->SFN, ul_dci_req->Slot,
|
||||
dci_pdu_list->RNTI,
|
||||
dci_pdu_list->PayloadSizeBits, num_bytes,
|
||||
harq_pid
|
||||
);
|
||||
for (int k = 0; k < num_bytes; k++)
|
||||
{
|
||||
LOG_I(NR_MAC, "PDCCH DCI PDU payload[%d] = %d\n", k, dci_pdu_list->Payload[k]);
|
||||
|
||||
Reference in New Issue
Block a user