Refactor F1 Setup Req: Move radio info into cell
This commit is contained in:
@@ -90,6 +90,30 @@ typedef struct f1ap_plmn_t {
|
|||||||
uint8_t mnc_digit_length;
|
uint8_t mnc_digit_length;
|
||||||
} f1ap_plmn_t;
|
} f1ap_plmn_t;
|
||||||
|
|
||||||
|
typedef enum f1ap_mode_t { F1AP_MODE_TDD = 0, F1AP_MODE_FDD = 1 } f1ap_mode_t;
|
||||||
|
|
||||||
|
typedef struct f1ap_nr_frequency_info_t {
|
||||||
|
uint32_t arfcn;
|
||||||
|
int band;
|
||||||
|
} f1ap_nr_frequency_info_t;
|
||||||
|
|
||||||
|
typedef struct f1ap_transmission_bandwidth_t {
|
||||||
|
uint8_t scs;
|
||||||
|
uint16_t nrb;
|
||||||
|
} f1ap_transmission_bandwidth_t;
|
||||||
|
|
||||||
|
typedef struct f1ap_fdd_info_t {
|
||||||
|
f1ap_nr_frequency_info_t ul_freqinfo;
|
||||||
|
f1ap_nr_frequency_info_t dl_freqinfo;
|
||||||
|
f1ap_transmission_bandwidth_t ul_tbw;
|
||||||
|
f1ap_transmission_bandwidth_t dl_tbw;
|
||||||
|
} f1ap_fdd_info_t;
|
||||||
|
|
||||||
|
typedef struct f1ap_tdd_info_t {
|
||||||
|
f1ap_nr_frequency_info_t freqinfo;
|
||||||
|
f1ap_transmission_bandwidth_t tbw;
|
||||||
|
} f1ap_tdd_info_t;
|
||||||
|
|
||||||
typedef struct f1ap_served_cell_info_t {
|
typedef struct f1ap_served_cell_info_t {
|
||||||
// NR CGI
|
// NR CGI
|
||||||
f1ap_plmn_t plmn;
|
f1ap_plmn_t plmn;
|
||||||
@@ -105,6 +129,12 @@ typedef struct f1ap_served_cell_info_t {
|
|||||||
uint16_t num_ssi;
|
uint16_t num_ssi;
|
||||||
uint8_t sst;
|
uint8_t sst;
|
||||||
uint8_t sd;
|
uint8_t sd;
|
||||||
|
|
||||||
|
f1ap_mode_t mode;
|
||||||
|
union {
|
||||||
|
f1ap_fdd_info_t fdd;
|
||||||
|
f1ap_tdd_info_t tdd;
|
||||||
|
};
|
||||||
} f1ap_served_cell_info_t;
|
} f1ap_served_cell_info_t;
|
||||||
|
|
||||||
typedef struct f1ap_setup_req_s {
|
typedef struct f1ap_setup_req_s {
|
||||||
@@ -119,52 +149,6 @@ typedef struct f1ap_setup_req_s {
|
|||||||
f1ap_served_cell_info_t info;
|
f1ap_served_cell_info_t info;
|
||||||
} cell[F1AP_MAX_NB_CELLS];
|
} cell[F1AP_MAX_NB_CELLS];
|
||||||
|
|
||||||
// fdd_flag = 1 means FDD, 0 means TDD
|
|
||||||
int fdd_flag;
|
|
||||||
|
|
||||||
union {
|
|
||||||
struct fdd_s {
|
|
||||||
uint32_t ul_nr_arfcn;
|
|
||||||
uint8_t ul_scs;
|
|
||||||
uint16_t ul_nrb;
|
|
||||||
|
|
||||||
uint32_t dl_nr_arfcn;
|
|
||||||
uint8_t dl_scs;
|
|
||||||
uint16_t dl_nrb;
|
|
||||||
|
|
||||||
uint32_t sul_active;
|
|
||||||
uint32_t sul_nr_arfcn;
|
|
||||||
uint8_t sul_scs;
|
|
||||||
uint16_t sul_nrb;
|
|
||||||
|
|
||||||
uint8_t ul_num_frequency_bands;
|
|
||||||
uint16_t ul_nr_band[32];
|
|
||||||
uint8_t ul_num_sul_frequency_bands;
|
|
||||||
uint16_t ul_nr_sul_band[32];
|
|
||||||
|
|
||||||
uint8_t dl_num_frequency_bands;
|
|
||||||
uint16_t dl_nr_band[32];
|
|
||||||
uint8_t dl_num_sul_frequency_bands;
|
|
||||||
uint16_t dl_nr_sul_band[32];
|
|
||||||
} fdd;
|
|
||||||
struct tdd_s {
|
|
||||||
|
|
||||||
uint32_t nr_arfcn;
|
|
||||||
uint8_t scs;
|
|
||||||
uint16_t nrb;
|
|
||||||
|
|
||||||
uint32_t sul_active;
|
|
||||||
uint32_t sul_nr_arfcn;
|
|
||||||
uint8_t sul_scs;
|
|
||||||
uint16_t sul_nrb;
|
|
||||||
|
|
||||||
uint8_t num_frequency_bands;
|
|
||||||
uint16_t nr_band[32];
|
|
||||||
uint8_t num_sul_frequency_bands;
|
|
||||||
uint16_t nr_sul_band[32];
|
|
||||||
|
|
||||||
} tdd;
|
|
||||||
} nr_mode_info[F1AP_MAX_NB_CELLS];
|
|
||||||
|
|
||||||
char *measurement_timing_information[F1AP_MAX_NB_CELLS];
|
char *measurement_timing_information[F1AP_MAX_NB_CELLS];
|
||||||
uint8_t ranac[F1AP_MAX_NB_CELLS];
|
uint8_t ranac[F1AP_MAX_NB_CELLS];
|
||||||
|
|||||||
@@ -146,53 +146,45 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
|
|||||||
|
|
||||||
// FDD Cells
|
// FDD Cells
|
||||||
if (servedCellInformation->nR_Mode_Info.present==F1AP_NR_Mode_Info_PR_fDD) {
|
if (servedCellInformation->nR_Mode_Info.present==F1AP_NR_Mode_Info_PR_fDD) {
|
||||||
struct fdd_s *FDDs=&req->nr_mode_info[i].fdd;
|
req->cell[i].info.mode = F1AP_MODE_FDD;
|
||||||
|
f1ap_fdd_info_t *FDDs = &req->cell[i].info.fdd;
|
||||||
F1AP_FDD_Info_t * fDD_Info=servedCellInformation->nR_Mode_Info.choice.fDD;
|
F1AP_FDD_Info_t * fDD_Info=servedCellInformation->nR_Mode_Info.choice.fDD;
|
||||||
FDDs->ul_nr_arfcn=fDD_Info->uL_NRFreqInfo.nRARFCN;
|
FDDs->ul_freqinfo.arfcn = fDD_Info->uL_NRFreqInfo.nRARFCN;
|
||||||
FDDs->ul_num_frequency_bands=fDD_Info->uL_NRFreqInfo.freqBandListNr.list.count;
|
AssertFatal(fDD_Info->uL_NRFreqInfo.freqBandListNr.list.count == 1, "cannot handle more than one frequency band\n");
|
||||||
for (int f=0; f < fDD_Info->uL_NRFreqInfo.freqBandListNr.list.count; f++) {
|
for (int f=0; f < fDD_Info->uL_NRFreqInfo.freqBandListNr.list.count; f++) {
|
||||||
F1AP_FreqBandNrItem_t * FreqItem=fDD_Info->uL_NRFreqInfo.freqBandListNr.list.array[f];
|
F1AP_FreqBandNrItem_t * FreqItem=fDD_Info->uL_NRFreqInfo.freqBandListNr.list.array[f];
|
||||||
FDDs->ul_nr_band[f]=FreqItem->freqBandIndicatorNr;
|
FDDs->ul_freqinfo.band = FreqItem->freqBandIndicatorNr;
|
||||||
int num_available_supported_SULBands=FreqItem->supportedSULBandList.list.count;
|
AssertFatal(FreqItem->supportedSULBandList.list.count == 0, "cannot handle SUL bands!\n");
|
||||||
for (int sul=0; sul < num_available_supported_SULBands; sul ++ ) {
|
|
||||||
F1AP_SupportedSULFreqBandItem_t * SulItem= FreqItem->supportedSULBandList.list.array[sul];
|
|
||||||
FDDs->ul_nr_sul_band[sul]=SulItem->freqBandIndicatorNr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
FDDs->dl_nr_arfcn=fDD_Info->dL_NRFreqInfo.nRARFCN;
|
FDDs->dl_freqinfo.arfcn = fDD_Info->dL_NRFreqInfo.nRARFCN;
|
||||||
int dlBands=fDD_Info->dL_NRFreqInfo.freqBandListNr.list.count;
|
int dlBands=fDD_Info->dL_NRFreqInfo.freqBandListNr.list.count;
|
||||||
|
AssertFatal(dlBands == 0, "cannot handled more than one frequency band\n");
|
||||||
for (int dlB=0; dlB < dlBands; dlB++) {
|
for (int dlB=0; dlB < dlBands; dlB++) {
|
||||||
F1AP_FreqBandNrItem_t * FreqItem=fDD_Info->dL_NRFreqInfo.freqBandListNr.list.array[dlB];
|
F1AP_FreqBandNrItem_t * FreqItem=fDD_Info->dL_NRFreqInfo.freqBandListNr.list.array[dlB];
|
||||||
FDDs->dl_nr_band[dlB]=FreqItem->freqBandIndicatorNr;
|
FDDs->dl_freqinfo.band = FreqItem->freqBandIndicatorNr;
|
||||||
int num_available_supported_SULBands = FreqItem->supportedSULBandList.list.count;
|
int num_available_supported_SULBands = FreqItem->supportedSULBandList.list.count;
|
||||||
for (int sul=0; sul < num_available_supported_SULBands; sul ++ ) {
|
AssertFatal(num_available_supported_SULBands == 0, "cannot handle SUL bands!\n");
|
||||||
F1AP_SupportedSULFreqBandItem_t * SulItem= FreqItem->supportedSULBandList.list.array[sul];
|
|
||||||
FDDs->ul_nr_sul_band[sul]=SulItem->freqBandIndicatorNr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
FDDs->ul_scs=fDD_Info->uL_Transmission_Bandwidth.nRSCS;
|
FDDs->ul_tbw.scs = fDD_Info->uL_Transmission_Bandwidth.nRSCS;
|
||||||
FDDs->ul_nrb=nrb_lut[fDD_Info->uL_Transmission_Bandwidth.nRNRB];
|
FDDs->ul_tbw.nrb = nrb_lut[fDD_Info->uL_Transmission_Bandwidth.nRNRB];
|
||||||
FDDs->dl_scs=fDD_Info->dL_Transmission_Bandwidth.nRSCS;
|
FDDs->dl_tbw.scs = fDD_Info->dL_Transmission_Bandwidth.nRSCS;
|
||||||
FDDs->dl_nrb=nrb_lut[fDD_Info->dL_Transmission_Bandwidth.nRNRB];
|
FDDs->dl_tbw.nrb = nrb_lut[fDD_Info->dL_Transmission_Bandwidth.nRNRB];
|
||||||
}
|
} else if (servedCellInformation->nR_Mode_Info.present==F1AP_NR_Mode_Info_PR_tDD) {
|
||||||
|
req->cell[i].info.mode = F1AP_MODE_TDD;
|
||||||
// TDD
|
f1ap_tdd_info_t *TDDs = &req->cell[i].info.tdd;
|
||||||
if (servedCellInformation->nR_Mode_Info.present==F1AP_NR_Mode_Info_PR_tDD) {
|
F1AP_TDD_Info_t *tDD_Info = servedCellInformation->nR_Mode_Info.choice.tDD;
|
||||||
struct tdd_s *TDDs=&req->nr_mode_info[i].tdd;
|
TDDs->freqinfo.arfcn = tDD_Info->nRFreqInfo.nRARFCN;
|
||||||
F1AP_TDD_Info_t * tDD_Info=servedCellInformation->nR_Mode_Info.choice.tDD;
|
AssertFatal(tDD_Info->nRFreqInfo.freqBandListNr.list.count == 1, "cannot handle more than one frequency band\n");
|
||||||
TDDs->nr_arfcn=tDD_Info->nRFreqInfo.nRARFCN;
|
|
||||||
TDDs->num_frequency_bands=tDD_Info->nRFreqInfo.freqBandListNr.list.count;
|
|
||||||
for (int f=0; f < tDD_Info->nRFreqInfo.freqBandListNr.list.count; f++) {
|
for (int f=0; f < tDD_Info->nRFreqInfo.freqBandListNr.list.count; f++) {
|
||||||
struct F1AP_FreqBandNrItem * FreqItem=tDD_Info->nRFreqInfo.freqBandListNr.list.array[f];
|
struct F1AP_FreqBandNrItem * FreqItem=tDD_Info->nRFreqInfo.freqBandListNr.list.array[f];
|
||||||
TDDs->nr_band[f]=FreqItem->freqBandIndicatorNr;
|
TDDs->freqinfo.band = FreqItem->freqBandIndicatorNr;
|
||||||
int num_available_supported_SULBands=FreqItem->supportedSULBandList.list.count;
|
int num_available_supported_SULBands = FreqItem->supportedSULBandList.list.count;
|
||||||
for (int sul=0; sul < num_available_supported_SULBands; sul ++ ) {
|
AssertFatal(num_available_supported_SULBands == 0, "cannot hanlde SUL bands!\n");
|
||||||
struct F1AP_SupportedSULFreqBandItem * SulItem= FreqItem->supportedSULBandList.list.array[sul];
|
|
||||||
TDDs->nr_sul_band[sul]=SulItem->freqBandIndicatorNr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
TDDs->scs=tDD_Info->transmission_Bandwidth.nRSCS;
|
TDDs->tbw.scs = tDD_Info->transmission_Bandwidth.nRSCS;
|
||||||
TDDs->nrb=nrb_lut[tDD_Info->transmission_Bandwidth.nRNRB];
|
TDDs->tbw.nrb = nrb_lut[tDD_Info->transmission_Bandwidth.nRNRB];
|
||||||
|
} else {
|
||||||
|
AssertFatal(false, "unknown NR Mode info %d\n", servedCellInformation->nR_Mode_Info.present);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct F1AP_GNB_DU_System_Information * DUsi=served_cells_item->gNB_DU_System_Information;
|
struct F1AP_GNB_DU_System_Information * DUsi=served_cells_item->gNB_DU_System_Information;
|
||||||
|
|||||||
@@ -206,115 +206,73 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance, f1ap_setup_req_t *setup_req)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setup_req->fdd_flag) { // FDD
|
if (setup_req->cell[i].info.mode == F1AP_MODE_FDD) { // FDD
|
||||||
|
const f1ap_fdd_info_t *fdd = &setup_req->cell[i].info.fdd;
|
||||||
nR_Mode_Info->present = F1AP_NR_Mode_Info_PR_fDD;
|
nR_Mode_Info->present = F1AP_NR_Mode_Info_PR_fDD;
|
||||||
asn1cCalloc(nR_Mode_Info->choice.fDD, fDD_Info);
|
asn1cCalloc(nR_Mode_Info->choice.fDD, fDD_Info);
|
||||||
/* FDD.1 UL NRFreqInfo */
|
/* FDD.1 UL NRFreqInfo */
|
||||||
/* FDD.1.1 UL NRFreqInfo ARFCN */
|
/* FDD.1.1 UL NRFreqInfo ARFCN */
|
||||||
fDD_Info->uL_NRFreqInfo.nRARFCN = setup_req->nr_mode_info[i].fdd.ul_nr_arfcn; // Integer
|
fDD_Info->uL_NRFreqInfo.nRARFCN = fdd->ul_freqinfo.arfcn; // Integer
|
||||||
|
|
||||||
/* FDD.1.2 F1AP_SUL_Information */
|
/* FDD.1.2 F1AP_SUL_Information */
|
||||||
if(0) { // Optional
|
|
||||||
asn1cCalloc(fDD_Info->uL_NRFreqInfo.sul_Information, fdd_sul_info);
|
|
||||||
fdd_sul_info->sUL_NRARFCN = 0;
|
|
||||||
fdd_sul_info->sUL_transmission_Bandwidth.nRSCS = 0;
|
|
||||||
fdd_sul_info->sUL_transmission_Bandwidth.nRNRB = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FDD.1.3 freqBandListNr */
|
/* FDD.1.3 freqBandListNr */
|
||||||
int fdd_ul_num_available_freq_Bands = setup_req->nr_mode_info[i].fdd.ul_num_frequency_bands;
|
int fdd_ul_num_available_freq_Bands = 1;
|
||||||
LOG_D(F1AP, "fdd_ul_num_available_freq_Bands = %d \n", fdd_ul_num_available_freq_Bands);
|
|
||||||
|
|
||||||
for (int fdd_ul_j=0; fdd_ul_j<fdd_ul_num_available_freq_Bands; fdd_ul_j++) {
|
for (int fdd_ul_j=0; fdd_ul_j<fdd_ul_num_available_freq_Bands; fdd_ul_j++) {
|
||||||
asn1cSequenceAdd(fDD_Info->uL_NRFreqInfo.freqBandListNr.list, F1AP_FreqBandNrItem_t, nr_freqBandNrItem);
|
asn1cSequenceAdd(fDD_Info->uL_NRFreqInfo.freqBandListNr.list, F1AP_FreqBandNrItem_t, nr_freqBandNrItem);
|
||||||
/* FDD.1.3.1 freqBandIndicatorNr*/
|
/* FDD.1.3.1 freqBandIndicatorNr*/
|
||||||
nr_freqBandNrItem->freqBandIndicatorNr = setup_req->nr_mode_info[i].fdd.ul_nr_band[fdd_ul_j]; //
|
nr_freqBandNrItem->freqBandIndicatorNr = fdd->ul_freqinfo.band;
|
||||||
/* FDD.1.3.2 supportedSULBandList*/
|
|
||||||
int num_available_supported_SULBands = setup_req->nr_mode_info[i].fdd.ul_num_sul_frequency_bands;
|
|
||||||
LOG_D(F1AP, "num_available_supported_SULBands = %d \n", num_available_supported_SULBands);
|
|
||||||
|
|
||||||
for (int fdd_ul_k=0; fdd_ul_k<num_available_supported_SULBands; fdd_ul_k++) {
|
/* FDD.1.3.2 supportedSULBandList*/
|
||||||
asn1cSequenceAdd(nr_freqBandNrItem->supportedSULBandList.list, F1AP_SupportedSULFreqBandItem_t, nr_supportedSULFreqBandItem);
|
|
||||||
/* FDD.1.3.2.1 freqBandIndicatorNr */
|
|
||||||
nr_supportedSULFreqBandItem->freqBandIndicatorNr = setup_req->nr_mode_info[i].fdd.ul_nr_sul_band[fdd_ul_k]; //
|
|
||||||
} // for FDD : UL supported_SULBands
|
|
||||||
} // for FDD : UL freq_Bands
|
} // for FDD : UL freq_Bands
|
||||||
|
|
||||||
/* FDD.2 DL NRFreqInfo */
|
/* FDD.2 DL NRFreqInfo */
|
||||||
/* FDD.2.1 DL NRFreqInfo ARFCN */
|
/* FDD.2.1 DL NRFreqInfo ARFCN */
|
||||||
fDD_Info->dL_NRFreqInfo.nRARFCN = setup_req->nr_mode_info[i].fdd.dl_nr_arfcn; // Integer
|
fDD_Info->dL_NRFreqInfo.nRARFCN = fdd->dl_freqinfo.arfcn; // Integer
|
||||||
|
|
||||||
/* FDD.2.2 F1AP_SUL_Information */
|
/* FDD.2.2 F1AP_SUL_Information */
|
||||||
if(0) { // Optional
|
|
||||||
F1AP_SUL_Information_t *fdd_sul_info=fDD_Info->dL_NRFreqInfo.sul_Information;
|
|
||||||
fdd_sul_info->sUL_NRARFCN = 0;
|
|
||||||
fdd_sul_info->sUL_transmission_Bandwidth.nRSCS = 0;
|
|
||||||
fdd_sul_info->sUL_transmission_Bandwidth.nRNRB = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FDD.2.3 freqBandListNr */
|
/* FDD.2.3 freqBandListNr */
|
||||||
int fdd_dl_num_available_freq_Bands = setup_req->nr_mode_info[i].fdd.dl_num_frequency_bands;
|
int fdd_dl_num_available_freq_Bands = 1;
|
||||||
LOG_D(F1AP, "fdd_dl_num_available_freq_Bands = %d \n", fdd_dl_num_available_freq_Bands);
|
|
||||||
|
|
||||||
for (int fdd_dl_j=0; fdd_dl_j<fdd_dl_num_available_freq_Bands; fdd_dl_j++) {
|
for (int fdd_dl_j=0; fdd_dl_j<fdd_dl_num_available_freq_Bands; fdd_dl_j++) {
|
||||||
asn1cSequenceAdd(fDD_Info->dL_NRFreqInfo.freqBandListNr.list, F1AP_FreqBandNrItem_t, nr_freqBandNrItem);
|
asn1cSequenceAdd(fDD_Info->dL_NRFreqInfo.freqBandListNr.list, F1AP_FreqBandNrItem_t, nr_freqBandNrItem);
|
||||||
/* FDD.2.3.1 freqBandIndicatorNr*/
|
/* FDD.2.3.1 freqBandIndicatorNr*/
|
||||||
nr_freqBandNrItem->freqBandIndicatorNr = setup_req->nr_mode_info[i].fdd.dl_nr_band[fdd_dl_j]; //
|
nr_freqBandNrItem->freqBandIndicatorNr = fdd->dl_freqinfo.band;
|
||||||
/* FDD.2.3.2 supportedSULBandList*/
|
|
||||||
int num_available_supported_SULBands = setup_req->nr_mode_info[i].fdd.dl_num_sul_frequency_bands;
|
|
||||||
LOG_D(F1AP, "num_available_supported_SULBands = %d \n", num_available_supported_SULBands);
|
|
||||||
|
|
||||||
for (int fdd_dl_k=0; fdd_dl_k<num_available_supported_SULBands; fdd_dl_k++) {
|
/* FDD.2.3.2 supportedSULBandList*/
|
||||||
asn1cSequenceAdd(nr_freqBandNrItem->supportedSULBandList.list, F1AP_SupportedSULFreqBandItem_t, nr_supportedSULFreqBandItem);
|
|
||||||
/* FDD.2.3.2.1 freqBandIndicatorNr */
|
|
||||||
nr_supportedSULFreqBandItem->freqBandIndicatorNr = setup_req->nr_mode_info[i].fdd.dl_nr_sul_band[fdd_dl_k]; //
|
|
||||||
} // for FDD : DL supported_SULBands
|
|
||||||
} // for FDD : DL freq_Bands
|
} // for FDD : DL freq_Bands
|
||||||
|
|
||||||
/* FDD.3 UL Transmission Bandwidth */
|
/* FDD.3 UL Transmission Bandwidth */
|
||||||
fDD_Info->uL_Transmission_Bandwidth.nRSCS = setup_req->nr_mode_info[i].fdd.ul_scs;
|
fDD_Info->uL_Transmission_Bandwidth.nRSCS = fdd->ul_tbw.scs;
|
||||||
fDD_Info->uL_Transmission_Bandwidth.nRNRB = to_NRNRB(setup_req->nr_mode_info[i].fdd.ul_nrb);
|
fDD_Info->uL_Transmission_Bandwidth.nRNRB = to_NRNRB(fdd->ul_tbw.nrb);
|
||||||
/* FDD.4 DL Transmission Bandwidth */
|
/* FDD.4 DL Transmission Bandwidth */
|
||||||
fDD_Info->dL_Transmission_Bandwidth.nRSCS = setup_req->nr_mode_info[i].fdd.dl_scs;
|
fDD_Info->dL_Transmission_Bandwidth.nRSCS = fdd->dl_tbw.scs;
|
||||||
fDD_Info->dL_Transmission_Bandwidth.nRNRB = to_NRNRB(setup_req->nr_mode_info[i].fdd.dl_nrb);
|
fDD_Info->dL_Transmission_Bandwidth.nRNRB = to_NRNRB(fdd->dl_tbw.nrb);
|
||||||
} else { // TDD
|
} else if (setup_req->cell[i].info.mode == F1AP_MODE_TDD) { // TDD
|
||||||
|
const f1ap_tdd_info_t *tdd = &setup_req->cell[i].info.tdd;
|
||||||
nR_Mode_Info->present = F1AP_NR_Mode_Info_PR_tDD;
|
nR_Mode_Info->present = F1AP_NR_Mode_Info_PR_tDD;
|
||||||
asn1cCalloc(nR_Mode_Info->choice.tDD, tDD_Info);
|
asn1cCalloc(nR_Mode_Info->choice.tDD, tDD_Info);
|
||||||
/* TDD.1 nRFreqInfo */
|
/* TDD.1 nRFreqInfo */
|
||||||
/* TDD.1.1 nRFreqInfo ARFCN */
|
/* TDD.1.1 nRFreqInfo ARFCN */
|
||||||
tDD_Info->nRFreqInfo.nRARFCN = setup_req->nr_mode_info[i].tdd.nr_arfcn; // Integer
|
tDD_Info->nRFreqInfo.nRARFCN = tdd->freqinfo.arfcn; // Integer
|
||||||
|
|
||||||
/* TDD.1.2 F1AP_SUL_Information */
|
/* TDD.1.2 F1AP_SUL_Information */
|
||||||
if(0) { // Optional
|
|
||||||
F1AP_SUL_Information_t *tdd_sul_info= tDD_Info->nRFreqInfo.sul_Information;
|
|
||||||
tdd_sul_info->sUL_NRARFCN = 0;
|
|
||||||
tdd_sul_info->sUL_transmission_Bandwidth.nRSCS = 0;
|
|
||||||
tdd_sul_info->sUL_transmission_Bandwidth.nRNRB = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TDD.1.3 freqBandListNr */
|
/* TDD.1.3 freqBandListNr */
|
||||||
int tdd_num_available_freq_Bands = setup_req->nr_mode_info[i].tdd.num_frequency_bands;
|
int tdd_num_available_freq_Bands = 1;
|
||||||
LOG_D(F1AP, "tdd_num_available_freq_Bands = %d \n", tdd_num_available_freq_Bands);
|
|
||||||
|
|
||||||
for (int j=0; j<tdd_num_available_freq_Bands; j++) {
|
for (int j=0; j<tdd_num_available_freq_Bands; j++) {
|
||||||
asn1cSequenceAdd(tDD_Info->nRFreqInfo.freqBandListNr.list, F1AP_FreqBandNrItem_t, nr_freqBandNrItem);
|
asn1cSequenceAdd(tDD_Info->nRFreqInfo.freqBandListNr.list, F1AP_FreqBandNrItem_t, nr_freqBandNrItem);
|
||||||
/* TDD.1.3.1 freqBandIndicatorNr*/
|
/* TDD.1.3.1 freqBandIndicatorNr*/
|
||||||
nr_freqBandNrItem->freqBandIndicatorNr = *setup_req->nr_mode_info[i].tdd.nr_band; //
|
nr_freqBandNrItem->freqBandIndicatorNr = tdd->freqinfo.band;
|
||||||
/* TDD.1.3.2 supportedSULBandList*/
|
/* TDD.1.3.2 supportedSULBandList*/
|
||||||
int num_available_supported_SULBands = setup_req->nr_mode_info[i].tdd.num_sul_frequency_bands;
|
|
||||||
LOG_D(F1AP, "num_available_supported_SULBands = %d \n", num_available_supported_SULBands);
|
|
||||||
|
|
||||||
for (int k=0; k<num_available_supported_SULBands; k++) {
|
|
||||||
asn1cSequenceAdd(nr_freqBandNrItem->supportedSULBandList.list,F1AP_SupportedSULFreqBandItem_t, nr_supportedSULFreqBandItem);
|
|
||||||
/* TDD.1.3.2.1 freqBandIndicatorNr */
|
|
||||||
nr_supportedSULFreqBandItem->freqBandIndicatorNr = *setup_req->nr_mode_info[i].tdd.nr_sul_band; //
|
|
||||||
} // for TDD : supported_SULBands
|
|
||||||
} // for TDD : freq_Bands
|
} // for TDD : freq_Bands
|
||||||
|
|
||||||
/* TDD.2 transmission_Bandwidth */
|
/* TDD.2 transmission_Bandwidth */
|
||||||
tDD_Info->transmission_Bandwidth.nRSCS = setup_req->nr_mode_info[i].tdd.scs;
|
tDD_Info->transmission_Bandwidth.nRSCS = tdd->tbw.scs;
|
||||||
tDD_Info->transmission_Bandwidth.nRNRB = to_NRNRB(setup_req->nr_mode_info[i].tdd.nrb);
|
tDD_Info->transmission_Bandwidth.nRNRB = to_NRNRB(tdd->tbw.nrb);
|
||||||
} // if nR_Mode_Info
|
} else {
|
||||||
|
AssertFatal(false, "unknown mode %d\n", setup_req->cell[i].info.mode);
|
||||||
|
}
|
||||||
|
|
||||||
/* - measurementTimingConfiguration */
|
/* - measurementTimingConfiguration */
|
||||||
char *measurementTimingConfiguration = setup_req->measurement_timing_information[i]; // sept. 2018
|
char *measurementTimingConfiguration = setup_req->measurement_timing_information[i]; // sept. 2018
|
||||||
@@ -617,7 +575,7 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
|
|||||||
F1AP_NR_Mode_Info_t *nR_Mode_Info=&served_cell_information->nR_Mode_Info;
|
F1AP_NR_Mode_Info_t *nR_Mode_Info=&served_cell_information->nR_Mode_Info;
|
||||||
LOG_E(F1AP,"Here hardcoded values instead of values from configuration file\n");
|
LOG_E(F1AP,"Here hardcoded values instead of values from configuration file\n");
|
||||||
|
|
||||||
if (f1ap_setup_req->fdd_flag) {
|
if (cell->mode == F1AP_MODE_FDD) {
|
||||||
nR_Mode_Info->present = F1AP_NR_Mode_Info_PR_fDD;
|
nR_Mode_Info->present = F1AP_NR_Mode_Info_PR_fDD;
|
||||||
/* > FDD >> FDD Info */
|
/* > FDD >> FDD Info */
|
||||||
asn1cCalloc(nR_Mode_Info->choice.fDD, fDD_Info);
|
asn1cCalloc(nR_Mode_Info->choice.fDD, fDD_Info);
|
||||||
@@ -639,7 +597,7 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
|
|||||||
/* >>> DL Transmission Bandwidth */
|
/* >>> DL Transmission Bandwidth */
|
||||||
fDD_Info->dL_Transmission_Bandwidth.nRSCS = F1AP_NRSCS_scs15;
|
fDD_Info->dL_Transmission_Bandwidth.nRSCS = F1AP_NRSCS_scs15;
|
||||||
fDD_Info->dL_Transmission_Bandwidth.nRNRB = F1AP_NRNRB_nrb11;
|
fDD_Info->dL_Transmission_Bandwidth.nRNRB = F1AP_NRNRB_nrb11;
|
||||||
} else { // TDD
|
} else if (cell->mode == F1AP_MODE_TDD) { // TDD
|
||||||
nR_Mode_Info->present = F1AP_NR_Mode_Info_PR_tDD;
|
nR_Mode_Info->present = F1AP_NR_Mode_Info_PR_tDD;
|
||||||
/* > TDD >> TDD Info */
|
/* > TDD >> TDD Info */
|
||||||
asn1cCalloc(nR_Mode_Info->choice.tDD, tDD_Info);
|
asn1cCalloc(nR_Mode_Info->choice.tDD, tDD_Info);
|
||||||
@@ -651,6 +609,8 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
|
|||||||
nr_supportedSULFreqBandItem->freqBandIndicatorNr = 444L;
|
nr_supportedSULFreqBandItem->freqBandIndicatorNr = 444L;
|
||||||
tDD_Info->transmission_Bandwidth.nRSCS= F1AP_NRSCS_scs15;
|
tDD_Info->transmission_Bandwidth.nRSCS= F1AP_NRSCS_scs15;
|
||||||
tDD_Info->transmission_Bandwidth.nRNRB= F1AP_NRNRB_nrb11;
|
tDD_Info->transmission_Bandwidth.nRNRB= F1AP_NRNRB_nrb11;
|
||||||
|
} else {
|
||||||
|
AssertFatal(false, "illegal mode %d\n", cell->mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* - measurementTimingConfiguration */
|
/* - measurementTimingConfiguration */
|
||||||
@@ -710,7 +670,7 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
|
|||||||
// // /* - CHOICE NR-MODE-Info */
|
// // /* - CHOICE NR-MODE-Info */
|
||||||
F1AP_NR_Mode_Info_t *nR_Mode_Info= &served_cell_information->nR_Mode_Info;
|
F1AP_NR_Mode_Info_t *nR_Mode_Info= &served_cell_information->nR_Mode_Info;
|
||||||
|
|
||||||
if (f1ap_setup_req->fdd_flag) {
|
if (cell->mode == F1AP_MODE_FDD) {
|
||||||
nR_Mode_Info->present = F1AP_NR_Mode_Info_PR_fDD;
|
nR_Mode_Info->present = F1AP_NR_Mode_Info_PR_fDD;
|
||||||
/* > FDD >> FDD Info */
|
/* > FDD >> FDD Info */
|
||||||
asn1cCalloc(nR_Mode_Info->choice.fDD, fDD_Info);
|
asn1cCalloc(nR_Mode_Info->choice.fDD, fDD_Info);
|
||||||
@@ -733,7 +693,7 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
|
|||||||
/* >>> DL Transmission Bandwidth */
|
/* >>> DL Transmission Bandwidth */
|
||||||
fDD_Info->dL_Transmission_Bandwidth.nRSCS = F1AP_NRSCS_scs15;
|
fDD_Info->dL_Transmission_Bandwidth.nRSCS = F1AP_NRSCS_scs15;
|
||||||
fDD_Info->dL_Transmission_Bandwidth.nRNRB = F1AP_NRNRB_nrb11;
|
fDD_Info->dL_Transmission_Bandwidth.nRNRB = F1AP_NRNRB_nrb11;
|
||||||
} else { // TDD
|
} else if (cell->mode == F1AP_MODE_TDD) { // TDD
|
||||||
nR_Mode_Info->present = F1AP_NR_Mode_Info_PR_tDD;
|
nR_Mode_Info->present = F1AP_NR_Mode_Info_PR_tDD;
|
||||||
/* > TDD >> TDD Info */
|
/* > TDD >> TDD Info */
|
||||||
asn1cCalloc(nR_Mode_Info->choice.tDD, tDD_Info);
|
asn1cCalloc(nR_Mode_Info->choice.tDD, tDD_Info);
|
||||||
@@ -745,6 +705,8 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
|
|||||||
nr_supportedSULFreqBandItem->freqBandIndicatorNr = 444L;
|
nr_supportedSULFreqBandItem->freqBandIndicatorNr = 444L;
|
||||||
tDD_Info->transmission_Bandwidth.nRSCS= F1AP_NRSCS_scs15;
|
tDD_Info->transmission_Bandwidth.nRSCS= F1AP_NRSCS_scs15;
|
||||||
tDD_Info->transmission_Bandwidth.nRNRB= F1AP_NRNRB_nrb11;
|
tDD_Info->transmission_Bandwidth.nRNRB= F1AP_NRNRB_nrb11;
|
||||||
|
} else {
|
||||||
|
AssertFatal(false, "unknown mode %d\n", cell->mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* - measurementTimingConfiguration */
|
/* - measurementTimingConfiguration */
|
||||||
|
|||||||
@@ -1987,35 +1987,25 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i) {
|
|||||||
|
|
||||||
if (rrc->configuration.scc->tdd_UL_DL_ConfigurationCommon) {
|
if (rrc->configuration.scc->tdd_UL_DL_ConfigurationCommon) {
|
||||||
LOG_I(GNB_APP,"ngran_DU: Configuring Cell %d for TDD\n",k);
|
LOG_I(GNB_APP,"ngran_DU: Configuring Cell %d for TDD\n",k);
|
||||||
f1Setup->fdd_flag = 0;
|
f1Setup->cell[k].info.mode = F1AP_MODE_TDD;
|
||||||
f1Setup->nr_mode_info[k].tdd.nr_arfcn = rrc->configuration.scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA;
|
f1ap_tdd_info_t *tdd = &f1Setup->cell[k].info.tdd;
|
||||||
f1Setup->nr_mode_info[k].tdd.scs = rrc->configuration.scc->downlinkConfigCommon->frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing;
|
tdd->freqinfo.arfcn = rrc->configuration.scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA;
|
||||||
f1Setup->nr_mode_info[k].tdd.nrb = rrc->configuration.scc->downlinkConfigCommon->frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth;
|
tdd->tbw.scs = rrc->configuration.scc->downlinkConfigCommon->frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing;
|
||||||
f1Setup->nr_mode_info[k].tdd.num_frequency_bands = 1;
|
tdd->tbw.nrb = rrc->configuration.scc->downlinkConfigCommon->frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth;
|
||||||
f1Setup->nr_mode_info[k].tdd.nr_band[0] = *rrc->configuration.scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0];
|
tdd->freqinfo.band = *rrc->configuration.scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0];
|
||||||
f1Setup->nr_mode_info[k].tdd.sul_active = 0;
|
|
||||||
} else {
|
} else {
|
||||||
/***************** for test *****************/
|
/***************** for test *****************/
|
||||||
LOG_I(GNB_APP,"ngran_DU: Configuring Cell %d for FDD\n",k);
|
LOG_I(GNB_APP,"ngran_DU: Configuring Cell %d for FDD\n",k);
|
||||||
f1Setup->fdd_flag = 1;
|
f1Setup->cell[k].info.mode = F1AP_MODE_FDD;
|
||||||
f1Setup->nr_mode_info[k].fdd.dl_nr_arfcn = 26200UL;
|
f1ap_fdd_info_t *fdd = &f1Setup->cell[k].info.fdd;
|
||||||
f1Setup->nr_mode_info[k].fdd.ul_nr_arfcn = 26200UL;
|
fdd->dl_freqinfo.arfcn = 26200UL;
|
||||||
// For LTE use scs field to carry prefix type and number of antennas
|
fdd->ul_freqinfo.arfcn = 26200UL;
|
||||||
f1Setup->nr_mode_info[k].fdd.dl_scs = 0;
|
fdd->dl_tbw.scs = 0;
|
||||||
f1Setup->nr_mode_info[k].fdd.ul_scs = 0;
|
fdd->ul_tbw.scs = 0;
|
||||||
// use nrb field to hold LTE N_RB_DL (0...5)
|
fdd->dl_tbw.nrb = 3;
|
||||||
f1Setup->nr_mode_info[k].fdd.ul_nrb = 3;
|
fdd->ul_tbw.nrb = 3;
|
||||||
f1Setup->nr_mode_info[k].fdd.ul_nrb = 3;
|
fdd->dl_freqinfo.band = 7;
|
||||||
// RK: we need to check there value for FDD's frequency_bands DL/UL
|
fdd->ul_freqinfo.band = 7;
|
||||||
f1Setup->nr_mode_info[k].fdd.ul_num_frequency_bands = 1;
|
|
||||||
f1Setup->nr_mode_info[k].fdd.ul_nr_band[0] = 7;
|
|
||||||
f1Setup->nr_mode_info[k].fdd.dl_num_frequency_bands = 1;
|
|
||||||
f1Setup->nr_mode_info[k].fdd.dl_nr_band[0] = 7;
|
|
||||||
f1Setup->nr_mode_info[k].fdd.ul_num_sul_frequency_bands = 0;
|
|
||||||
f1Setup->nr_mode_info[k].fdd.ul_nr_sul_band[0] = 7;
|
|
||||||
f1Setup->nr_mode_info[k].fdd.dl_num_sul_frequency_bands = 0;
|
|
||||||
f1Setup->nr_mode_info[k].fdd.dl_nr_sul_band[0] = 7;
|
|
||||||
f1Setup->nr_mode_info[k].fdd.sul_active = 0;
|
|
||||||
/***************** for test *****************/
|
/***************** for test *****************/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user