bugfix: fix bug "Unknown UE_id for rnti"
This bug happens when we detect uplink failure for one UE. In this case, a DCI format 1A is sent to the UE to ask it to do random acces. The way this DCI is generated was not compatible with how the software is organized. It was expected that the DCI are added (with add_ue_spec_dci and add_common_dci) in a very specific order: first all DCIs in common space are added (with add_common_dci) then all DCIs in UE specific space are added (with add_ue_spec_dci). The problem was that the DCI format 1A DCI sent to the UE for it to do random access is added (with add_ue_spec_dci) before the DCIs in common space. That totally messed up the logic in add_common_dci and add_ue_spec_dci. The solution is to get rid of Num_common_dci and Num_ue_spec_dci, replace those two counters by only one (Num_dci) and add "search_space" in the dci_alloc structure to be used later by the function "allocate_CCEs" when calling "get_nCCE_offset". The software had to be adapted to the new variables, everywhere. I am not sure that the simulators work. It seems that some of them didn't use Num_common_dci and Num_ue_spec_dci to decide on what space (common or UE specific) to put the DCI, but relied on the rnti (comparing with SI_RNTI). To be tested properly. The modified simulators are: - openair1/SIMULATION/LTE_PHY/dlsim.c - openair1/SIMULATION/LTE_PHY/dlsim_tm4.c - openair1/SIMULATION/LTE_PHY/dlsim_tm7.c - openair1/SIMULATION/LTE_PHY/framegen.c - openair1/SIMULATION/LTE_PHY/pdcchsim.c - openair1/SIMULATION/LTE_PHY/syncsim.c
This commit is contained in:
@@ -390,10 +390,11 @@ void fill_DCI(PHY_VARS_eNB *eNB,
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[*num_dci].dci_length = dci_length;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[*num_dci].format = format1;
|
||||
dci_alloc[*num_dci].dci_length = dci_length;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[*num_dci].format = format1;
|
||||
dci_alloc[*num_dci].search_space = DCI_UE_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]);
|
||||
|
||||
// printf("Generating dlsch params for user %d\n",k);
|
||||
@@ -530,11 +531,12 @@ void fill_DCI(PHY_VARS_eNB *eNB,
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[*num_dci].dci_length = dci_length;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[*num_dci].format = format1A;
|
||||
dci_alloc[*num_dci].firstCCE = 0;
|
||||
dci_alloc[*num_dci].dci_length = dci_length;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[*num_dci].format = format1A;
|
||||
dci_alloc[*num_dci].firstCCE = 0;
|
||||
dci_alloc[*num_dci].search_space = DCI_COMMON_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]);
|
||||
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
@@ -699,10 +701,11 @@ void fill_DCI(PHY_VARS_eNB *eNB,
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[*num_dci].dci_length = dci_length;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[*num_dci].format = format2A;
|
||||
dci_alloc[*num_dci].dci_length = dci_length;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[*num_dci].format = format2A;
|
||||
dci_alloc[*num_dci].search_space = DCI_UE_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]);
|
||||
|
||||
//printf("Generating dlsch params for user %d / format 2A (%d)\n",k,format2A);
|
||||
@@ -839,11 +842,12 @@ void fill_DCI(PHY_VARS_eNB *eNB,
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[*num_dci].dci_length = dci_length;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[*num_dci].format = format1A;
|
||||
dci_alloc[*num_dci].firstCCE = 0;
|
||||
dci_alloc[*num_dci].dci_length = dci_length;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[*num_dci].format = format1A;
|
||||
dci_alloc[*num_dci].firstCCE = 0;
|
||||
dci_alloc[*num_dci].search_space = DCI_COMMON_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]);
|
||||
|
||||
//printf("Generating dlsch params for user %d\n",k);
|
||||
@@ -1009,10 +1013,11 @@ void fill_DCI(PHY_VARS_eNB *eNB,
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[*num_dci].dci_length = dci_length;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[*num_dci].format = format2;
|
||||
dci_alloc[*num_dci].dci_length = dci_length;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[*num_dci].format = format2;
|
||||
dci_alloc[*num_dci].search_space = DCI_UE_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]);
|
||||
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
@@ -1149,11 +1154,12 @@ void fill_DCI(PHY_VARS_eNB *eNB,
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[*num_dci].dci_length = dci_length;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[*num_dci].format = format1A;
|
||||
dci_alloc[*num_dci].firstCCE = 0;
|
||||
dci_alloc[*num_dci].dci_length = dci_length;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[*num_dci].format = format1A;
|
||||
dci_alloc[*num_dci].firstCCE = 0;
|
||||
dci_alloc[*num_dci].search_space = DCI_COMMON_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]);
|
||||
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
@@ -1181,11 +1187,12 @@ void fill_DCI(PHY_VARS_eNB *eNB,
|
||||
case 5:
|
||||
case 6:
|
||||
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu2_1E[k],sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
|
||||
dci_alloc[*num_dci].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[*num_dci].format = format1E_2A_M10PRB;
|
||||
dci_alloc[*num_dci].firstCCE = 4*k;
|
||||
dci_alloc[*num_dci].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
|
||||
dci_alloc[*num_dci].L = 1;
|
||||
dci_alloc[*num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[*num_dci].format = format1E_2A_M10PRB;
|
||||
dci_alloc[*num_dci].firstCCE = 4*k;
|
||||
dci_alloc[*num_dci].search_space = DCI_UE_SPACE;
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
generate_eNB_dlsch_params_from_dci(0,
|
||||
subframe,
|
||||
@@ -1224,12 +1231,10 @@ int num_common_dci=0,num_ue_spec_dci=0,num_dci=0,num_pdcch_symbols=1;
|
||||
DCI_PDU *get_dci_sdu(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_t subframeP) {
|
||||
|
||||
if (subframeP == subframe) {
|
||||
DCI_pdu.Num_ue_spec_dci = num_ue_spec_dci;
|
||||
DCI_pdu.Num_common_dci = num_common_dci;
|
||||
DCI_pdu.Num_dci = num_ue_spec_dci + num_common_dci;
|
||||
DCI_pdu.num_pdcch_symbols = num_pdcch_symbols;
|
||||
} else {
|
||||
DCI_pdu.Num_ue_spec_dci = 0;
|
||||
DCI_pdu.Num_common_dci = 0;
|
||||
DCI_pdu.Num_dci = 0;
|
||||
DCI_pdu.num_pdcch_symbols = num_pdcch_symbols;
|
||||
}
|
||||
|
||||
|
||||
@@ -1197,10 +1197,11 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format1;
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format1;
|
||||
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
|
||||
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
|
||||
|
||||
@@ -1334,11 +1335,12 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].firstCCE = 0;
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].firstCCE = 0;
|
||||
dci_alloc[num_dci].search_space = DCI_COMMON_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
generate_eNB_dlsch_params_from_dci(0,
|
||||
@@ -1496,10 +1498,11 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format2A;
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format2A;
|
||||
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
|
||||
|
||||
|
||||
@@ -1633,11 +1636,12 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].firstCCE = 0;
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].firstCCE = 0;
|
||||
dci_alloc[num_dci].search_space = DCI_COMMON_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
|
||||
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
@@ -1827,10 +1831,11 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format2;
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format2;
|
||||
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
|
||||
|
||||
|
||||
@@ -1964,11 +1969,12 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].firstCCE = 0;
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].firstCCE = 0;
|
||||
dci_alloc[num_dci].search_space = DCI_COMMON_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
|
||||
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
@@ -1995,11 +2001,12 @@ int main(int argc, char **argv)
|
||||
case 5:
|
||||
case 6:
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu2_1E[k],sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
|
||||
dci_alloc[num_dci].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format1E_2A_M10PRB;
|
||||
dci_alloc[num_dci].firstCCE = 4*k;
|
||||
dci_alloc[num_dci].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format1E_2A_M10PRB;
|
||||
dci_alloc[num_dci].firstCCE = 4*k;
|
||||
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
generate_eNB_dlsch_params_from_dci(0,
|
||||
subframe,
|
||||
@@ -3217,8 +3224,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
}
|
||||
num_pdcch_symbols_2 = generate_dci_top(num_ue_spec_dci,
|
||||
num_common_dci,
|
||||
num_pdcch_symbols_2 = generate_dci_top(num_ue_spec_dci + num_common_dci,
|
||||
dci_alloc,
|
||||
0,
|
||||
AMP,
|
||||
|
||||
@@ -1112,10 +1112,11 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format1;
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format1;
|
||||
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
|
||||
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
@@ -1255,11 +1256,12 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].firstCCE = 0;
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].firstCCE = 0;
|
||||
dci_alloc[num_dci].search_space = DCI_COMMON_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
|
||||
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
@@ -1424,10 +1426,11 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format2A;
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format2A;
|
||||
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
|
||||
|
||||
printf("Generating dlsch params for user %d / format 2A (%d)\n",k,format2A);
|
||||
@@ -1564,11 +1567,12 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].firstCCE = 0;
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].firstCCE = 0;
|
||||
dci_alloc[num_dci].search_space = DCI_COMMON_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
|
||||
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
@@ -1734,10 +1738,11 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format2;
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format2;
|
||||
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
|
||||
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
@@ -1874,11 +1879,12 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].firstCCE = 0;
|
||||
dci_alloc[num_dci].dci_length = dci_length;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = SI_RNTI;
|
||||
dci_alloc[num_dci].format = format1A;
|
||||
dci_alloc[num_dci].firstCCE = 0;
|
||||
dci_alloc[num_dci].search_space = DCI_COMMON_SPACE;
|
||||
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
|
||||
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
@@ -1906,11 +1912,12 @@ int main(int argc, char **argv)
|
||||
case 5:
|
||||
case 6:
|
||||
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu2_1E[k],sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
|
||||
dci_alloc[num_dci].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format1E_2A_M10PRB;
|
||||
dci_alloc[num_dci].firstCCE = 4*k;
|
||||
dci_alloc[num_dci].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
|
||||
dci_alloc[num_dci].L = 1;
|
||||
dci_alloc[num_dci].rnti = n_rnti+k;
|
||||
dci_alloc[num_dci].format = format1E_2A_M10PRB;
|
||||
dci_alloc[num_dci].firstCCE = 4*k;
|
||||
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
|
||||
printf("Generating dlsch params for user %d\n",k);
|
||||
generate_eNB_dlsch_params_from_dci(0,
|
||||
subframe,
|
||||
@@ -2556,8 +2563,7 @@ PMI_FEEDBACK:
|
||||
}
|
||||
}
|
||||
|
||||
num_pdcch_symbols_2 = generate_dci_top(num_ue_spec_dci,
|
||||
num_common_dci,
|
||||
num_pdcch_symbols_2 = generate_dci_top(num_ue_spec_dci + num_common_dci,
|
||||
dci_alloc,
|
||||
0,
|
||||
AMP,
|
||||
|
||||
@@ -66,8 +66,7 @@ DCI_PDU *get_dci(uint8_t Mod_id, uint8_t frame, uint8_t subframe)
|
||||
int dci_length_bytes,dci_length;
|
||||
int BCCH_pdu_size_bits, BCCH_pdu_size_bytes;
|
||||
|
||||
DCI_pdu.Num_ue_spec_dci = 0;
|
||||
DCI_pdu.Num_common_dci = 0;
|
||||
DCI_pdu.Num_dci = 0;
|
||||
|
||||
if (subframe_select(&PHY_vars_eNB_g[0]->lte_frame_parms, subframe) == SF_S) {
|
||||
return (&DCI_pdu);
|
||||
@@ -281,28 +280,30 @@ DCI_PDU *get_dci(uint8_t Mod_id, uint8_t frame, uint8_t subframe)
|
||||
}
|
||||
|
||||
// add common dci
|
||||
DCI_pdu.dci_alloc[0].dci_length = BCCH_pdu_size_bits;
|
||||
DCI_pdu.dci_alloc[0].L = 2;
|
||||
DCI_pdu.dci_alloc[0].rnti = SI_RNTI;
|
||||
DCI_pdu.dci_alloc[0].format = format1A;
|
||||
DCI_pdu.dci_alloc[0].ra_flag = 0;
|
||||
DCI_pdu.dci_alloc[0].dci_length = BCCH_pdu_size_bits;
|
||||
DCI_pdu.dci_alloc[0].L = 2;
|
||||
DCI_pdu.dci_alloc[0].rnti = SI_RNTI;
|
||||
DCI_pdu.dci_alloc[0].format = format1A;
|
||||
DCI_pdu.dci_alloc[0].ra_flag = 0;
|
||||
DCI_pdu.dci_alloc[0].search_space = DCI_COMMON_SPACE;
|
||||
memcpy((void*)&DCI_pdu.dci_alloc[0].dci_pdu[0], &BCCH_alloc_pdu[0], BCCH_pdu_size_bytes);
|
||||
DCI_pdu.Num_common_dci++;
|
||||
DCI_pdu.Num_dci++;
|
||||
|
||||
// add ue specific dci
|
||||
DCI_pdu.dci_alloc[k+DCI_pdu.Num_common_dci].dci_length = dci_length;
|
||||
DCI_pdu.dci_alloc[k+DCI_pdu.Num_common_dci].L = 0;
|
||||
DCI_pdu.dci_alloc[k+DCI_pdu.Num_common_dci].rnti = n_rnti+k;
|
||||
DCI_pdu.dci_alloc[k+DCI_pdu.Num_common_dci].format = format1;
|
||||
DCI_pdu.dci_alloc[k+DCI_pdu.Num_common_dci].ra_flag = 0;
|
||||
memcpy((void*)&DCI_pdu.dci_alloc[k+DCI_pdu.Num_common_dci].dci_pdu[0], &DLSCH_alloc_pdu_1[k], dci_length_bytes);
|
||||
DCI_pdu.Num_ue_spec_dci++;
|
||||
DCI_pdu.dci_alloc[DCI_pdu.Num_dci].dci_length = dci_length;
|
||||
DCI_pdu.dci_alloc[DCI_pdu.Num_dci].L = 0;
|
||||
DCI_pdu.dci_alloc[DCI_pdu.Num_dci].rnti = n_rnti+k;
|
||||
DCI_pdu.dci_alloc[DCI_pdu.Num_dci].format = format1;
|
||||
DCI_pdu.dci_alloc[DCI_pdu.Num_dci].ra_flag = 0;
|
||||
DCI_pdu.dci_alloc[DCI_pdu.Num_dci].search_space = DCI_UE_SPACE;
|
||||
memcpy((void*)&DCI_pdu.dci_alloc[DCI_pdu.Num_dci].dci_pdu[0], &DLSCH_alloc_pdu_1[k], dci_length_bytes);
|
||||
DCI_pdu.Num_dci++;
|
||||
|
||||
}
|
||||
|
||||
DCI_pdu.nCCE = 0;
|
||||
|
||||
for (i=0; i<DCI_pdu.Num_common_dci+DCI_pdu.Num_ue_spec_dci; i++) {
|
||||
for (i=0; i<DCI_pdu.Num_dci; i++) {
|
||||
DCI_pdu.nCCE += (1<<(DCI_pdu.dci_alloc[i].L));
|
||||
}
|
||||
|
||||
|
||||
@@ -570,7 +570,6 @@ int main(int argc, char **argv)
|
||||
|
||||
/*
|
||||
num_pdcch_symbols = generate_dci_top(1,
|
||||
0,
|
||||
dci_alloc,
|
||||
0,
|
||||
1024,
|
||||
|
||||
@@ -66,8 +66,7 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2
|
||||
int UL_pdu_size_bits=0, UL_pdu_size_bytes=0;
|
||||
int mcs = 3;
|
||||
|
||||
DCI_pdu.Num_ue_spec_dci = 0;
|
||||
DCI_pdu.Num_common_dci = 0;
|
||||
DCI_pdu.Num_dci = 0;
|
||||
|
||||
if (lte_frame_parms->frame_type == TDD) {
|
||||
switch (lte_frame_parms->N_RB_DL) {
|
||||
@@ -358,35 +357,38 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2
|
||||
for (ind = 0; ind<num_dci; ind++) {
|
||||
if (format_selector[ind]==format1A) {
|
||||
// add common dci
|
||||
DCI_pdu.dci_alloc[ind].dci_length = BCCH_pdu_size_bits;
|
||||
DCI_pdu.dci_alloc[ind].L = log2Lcommon;
|
||||
DCI_pdu.dci_alloc[ind].rnti = SI_RNTI;
|
||||
DCI_pdu.dci_alloc[ind].format = format1A;
|
||||
DCI_pdu.dci_alloc[ind].ra_flag = 0;
|
||||
memcpy((void*)&DCI_pdu.dci_alloc[0].dci_pdu[0], &BCCH_alloc_pdu[0], BCCH_pdu_size_bytes);
|
||||
DCI_pdu.Num_common_dci++;
|
||||
DCI_pdu.dci_alloc[ind].dci_length = BCCH_pdu_size_bits;
|
||||
DCI_pdu.dci_alloc[ind].L = log2Lcommon;
|
||||
DCI_pdu.dci_alloc[ind].rnti = SI_RNTI;
|
||||
DCI_pdu.dci_alloc[ind].format = format1A;
|
||||
DCI_pdu.dci_alloc[ind].ra_flag = 0;
|
||||
DCI_pdu.dci_alloc[ind].search_space = DCI_COMMON_SPACE;
|
||||
memcpy((void*)&DCI_pdu.dci_alloc[ind].dci_pdu[0], &BCCH_alloc_pdu[0], BCCH_pdu_size_bytes);
|
||||
DCI_pdu.Num_dci++;
|
||||
printf("Added common dci (%d) for rnti %x\n",ind,SI_RNTI);
|
||||
}
|
||||
|
||||
|
||||
if (format_selector[ind]==format1) {
|
||||
DCI_pdu.dci_alloc[ind].dci_length = dci_length;
|
||||
DCI_pdu.dci_alloc[ind].L = log2L;
|
||||
DCI_pdu.dci_alloc[ind].rnti = rnti;
|
||||
DCI_pdu.dci_alloc[ind].format = format1;
|
||||
DCI_pdu.dci_alloc[ind].ra_flag = 0;
|
||||
DCI_pdu.dci_alloc[ind].dci_length = dci_length;
|
||||
DCI_pdu.dci_alloc[ind].L = log2L;
|
||||
DCI_pdu.dci_alloc[ind].rnti = rnti;
|
||||
DCI_pdu.dci_alloc[ind].format = format1;
|
||||
DCI_pdu.dci_alloc[ind].ra_flag = 0;
|
||||
DCI_pdu.dci_alloc[ind].search_space = DCI_UE_SPACE;
|
||||
memcpy((void*)&DCI_pdu.dci_alloc[ind].dci_pdu[0], &DLSCH_alloc_pdu[0], dci_length_bytes);
|
||||
DCI_pdu.Num_ue_spec_dci++;
|
||||
DCI_pdu.Num_dci++;
|
||||
}
|
||||
|
||||
if (format_selector[ind]==format0) {
|
||||
DCI_pdu.dci_alloc[ind].dci_length = UL_pdu_size_bits;
|
||||
DCI_pdu.dci_alloc[ind].L = log2L;
|
||||
DCI_pdu.dci_alloc[ind].rnti = rnti;
|
||||
DCI_pdu.dci_alloc[ind].format = format0;
|
||||
DCI_pdu.dci_alloc[ind].ra_flag = 0;
|
||||
DCI_pdu.dci_alloc[ind].dci_length = UL_pdu_size_bits;
|
||||
DCI_pdu.dci_alloc[ind].L = log2L;
|
||||
DCI_pdu.dci_alloc[ind].rnti = rnti;
|
||||
DCI_pdu.dci_alloc[ind].format = format0;
|
||||
DCI_pdu.dci_alloc[ind].ra_flag = 0;
|
||||
DCI_pdu.dci_alloc[ind].search_space = DCI_UE_SPACE;
|
||||
memcpy((void*)&DCI_pdu.dci_alloc[ind].dci_pdu[0], &UL_alloc_pdu[0], UL_pdu_size_bytes);
|
||||
DCI_pdu.Num_ue_spec_dci++;
|
||||
DCI_pdu.Num_dci++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -849,20 +851,20 @@ int main(int argc, char **argv)
|
||||
n_trials_dl++;
|
||||
}
|
||||
}
|
||||
num_pdcch_symbols = get_num_pdcch_symbols(DCI_pdu.Num_common_dci+DCI_pdu.Num_ue_spec_dci,
|
||||
num_pdcch_symbols = get_num_pdcch_symbols(DCI_pdu.Num_dci,
|
||||
DCI_pdu.dci_alloc, frame_parms, subframe);
|
||||
numCCE = get_nCCE(num_pdcch_symbols,&eNB->frame_parms,get_mi(&eNB->frame_parms,subframe));
|
||||
|
||||
if (n_frames==1) {
|
||||
printf("num_dci %d, num_pddch_symbols %d, nCCE %d\n",
|
||||
DCI_pdu.Num_common_dci+DCI_pdu.Num_ue_spec_dci,
|
||||
DCI_pdu.Num_dci,
|
||||
num_pdcch_symbols,numCCE);
|
||||
}
|
||||
|
||||
// apply RNTI-based nCCE allocation
|
||||
memset(CCE_table,0,800*sizeof(int));
|
||||
|
||||
for (i = 0; i < DCI_pdu.Num_common_dci + DCI_pdu.Num_ue_spec_dci; i++) {
|
||||
for (i = 0; i < DCI_pdu.Num_dci; i++) {
|
||||
// SI RNTI
|
||||
if (DCI_pdu.dci_alloc[i].rnti == SI_RNTI) {
|
||||
DCI_pdu.dci_alloc[i].firstCCE = get_nCCE_offset_l1(CCE_table,
|
||||
@@ -899,8 +901,7 @@ int main(int argc, char **argv)
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
num_pdcch_symbols = generate_dci_top(DCI_pdu.Num_ue_spec_dci,
|
||||
DCI_pdu.Num_common_dci,
|
||||
num_pdcch_symbols = generate_dci_top(DCI_pdu.Num_dci,
|
||||
DCI_pdu.dci_alloc,
|
||||
0,
|
||||
AMP,
|
||||
|
||||
@@ -493,7 +493,6 @@ int main(int argc, char **argv)
|
||||
|
||||
|
||||
num_pdcch_symbols = generate_dci_top(1,
|
||||
0,
|
||||
dci_alloc,
|
||||
0,
|
||||
1024,
|
||||
|
||||
@@ -1101,11 +1101,12 @@ int main(int argc, char **argv)
|
||||
((DCI1_5MHz_FDD_t*)&DLSCH_alloc_pdu)->mcs = 0;
|
||||
((DCI1_5MHz_FDD_t*)&DLSCH_alloc_pdu)->ndi = 1;
|
||||
((DCI1_5MHz_FDD_t*)&DLSCH_alloc_pdu)->rv = 0;
|
||||
dci_alloc[0].dci_length = sizeof_DCI1_5MHz_FDD_t;
|
||||
dci_alloc[0].dci_length = sizeof_DCI1_5MHz_FDD_t;
|
||||
memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_FDD_t));
|
||||
dci_alloc[0].L = 2;
|
||||
dci_alloc[0].rnti = n_rnti;
|
||||
dci_alloc[0].format = format1;
|
||||
dci_alloc[0].L = 2;
|
||||
dci_alloc[0].rnti = n_rnti;
|
||||
dci_alloc[0].format = format1;
|
||||
dci_alloc[0].search_space = DCI_UE_SPACE;
|
||||
} else {
|
||||
((DCI1E_5MHz_2A_M10PRB_TDD_t*)&DLSCH_alloc_pdu)->rah = 0;
|
||||
((DCI1E_5MHz_2A_M10PRB_TDD_t*)&DLSCH_alloc_pdu)->rballoc = DLSCH_RB_ALLOC;
|
||||
@@ -1117,15 +1118,15 @@ int main(int argc, char **argv)
|
||||
((DCI1E_5MHz_2A_M10PRB_TDD_t*)&DLSCH_alloc_pdu)->rv = 0;
|
||||
((DCI1E_5MHz_2A_M10PRB_TDD_t*)&DLSCH_alloc_pdu)->tpmi = (transmission_mode>=5 ? 5 : 0); // precoding
|
||||
((DCI1E_5MHz_2A_M10PRB_TDD_t*)&DLSCH_alloc_pdu)->dl_power_off = (transmission_mode==5 ? 0 : 1);
|
||||
dci_alloc[0].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
|
||||
dci_alloc[0].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
|
||||
memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
|
||||
dci_alloc[0].L = 2;
|
||||
dci_alloc[0].rnti = n_rnti;
|
||||
dci_alloc[0].format = format1E_2A_M10PRB;
|
||||
dci_alloc[0].L = 2;
|
||||
dci_alloc[0].rnti = n_rnti;
|
||||
dci_alloc[0].format = format1E_2A_M10PRB;
|
||||
dci_alloc[0].search_space = DCI_UE_SPACE;
|
||||
}
|
||||
|
||||
num_pdcch_symbols = generate_dci_top(1,
|
||||
0,
|
||||
dci_alloc,
|
||||
0,
|
||||
AMP,
|
||||
@@ -1134,7 +1135,6 @@ int main(int argc, char **argv)
|
||||
subframe);
|
||||
/*
|
||||
num_pdcch_symbols = generate_dci_top(1,
|
||||
0,
|
||||
dci_alloc,
|
||||
0,
|
||||
AMP,
|
||||
|
||||
Reference in New Issue
Block a user