Merge remote-tracking branch 'origin/f1ap_uecontext_refactoring' into integration_2024_w18
This commit is contained in:
@@ -82,6 +82,7 @@
|
||||
#include "NR_RateMatchPatternLTE-CRS.h"
|
||||
#include "NR_SearchSpace.h"
|
||||
#include "NR_ControlResourceSet.h"
|
||||
#include "NR_MeasurementTimingConfiguration.h"
|
||||
#include "NR_EUTRA-MBSFN-SubframeConfig.h"
|
||||
#include "uper_decoder.h"
|
||||
#include "uper_encoder.h"
|
||||
@@ -1095,6 +1096,8 @@ static int read_du_cell_info(configmodule_interface_t *cfg,
|
||||
PLMNParams[I].chkPptr = &(config_check_PLMNParams[I]);
|
||||
paramlist_def_t PLMNParamList = {GNB_CONFIG_STRING_PLMN_LIST, NULL, 0};
|
||||
config_getlist(cfg, &PLMNParamList, PLMNParams, sizeof(PLMNParams) / sizeof(paramdef_t), aprefix);
|
||||
AssertFatal(PLMNParamList.numelt > 0, "need to have a PLMN in PLMN section\n");
|
||||
AssertFatal(PLMNParamList.numelt == 1, "cannot have more than one PLMN\n");
|
||||
|
||||
// if fronthaul is F1, require gNB_DU_ID, else use gNB_ID
|
||||
if (separate_du) {
|
||||
@@ -1119,12 +1122,53 @@ static int read_du_cell_info(configmodule_interface_t *cfg,
|
||||
info->plmn.mnc_digit_length);
|
||||
info->nr_cellid = (uint64_t) * (GNBParamList.paramarray[0][GNB_NRCELLID_IDX].u64ptr);
|
||||
|
||||
LOG_W(GNB_APP, "no slices transported via F1 Setup Request!\n");
|
||||
info->num_ssi = 0;
|
||||
paramdef_t SNSSAIParams[] = GNBSNSSAIPARAMS_DESC;
|
||||
paramlist_def_t SNSSAIParamList = {GNB_CONFIG_STRING_SNSSAI_LIST, NULL, 0};
|
||||
checkedparam_t config_check_SNSSAIParams[] = SNSSAIPARAMS_CHECK;
|
||||
for (int J = 0; J < sizeofArray(SNSSAIParams); ++J)
|
||||
SNSSAIParams[J].chkPptr = &(config_check_SNSSAIParams[J]);
|
||||
char snssaistr[MAX_OPTNAME_SIZE * 2 + 8];
|
||||
sprintf(snssaistr, "%s.[0].%s.[0]", GNB_CONFIG_STRING_GNB_LIST, GNB_CONFIG_STRING_PLMN_LIST);
|
||||
config_getlist(config_get_if(), &SNSSAIParamList, SNSSAIParams, sizeofArray(SNSSAIParams), snssaistr);
|
||||
info->num_ssi = SNSSAIParamList.numelt;
|
||||
for (int s = 0; s < info->num_ssi; ++s) {
|
||||
info->nssai[s].sst = *SNSSAIParamList.paramarray[s][GNB_SLICE_SERVICE_TYPE_IDX].uptr;
|
||||
info->nssai[s].sd = *SNSSAIParamList.paramarray[s][GNB_SLICE_DIFFERENTIATOR_IDX].uptr;
|
||||
AssertFatal(info->nssai[s].sd <= 0xffffff, "SD cannot be bigger than 0xffffff, but is %d\n", info->nssai[s].sd);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static f1ap_tdd_info_t read_tdd_config(const NR_ServingCellConfigCommon_t *scc)
|
||||
{
|
||||
const NR_FrequencyInfoDL_t *dl = scc->downlinkConfigCommon->frequencyInfoDL;
|
||||
f1ap_tdd_info_t tdd = {
|
||||
.freqinfo.arfcn = dl->absoluteFrequencyPointA,
|
||||
.freqinfo.band = *dl->frequencyBandList.list.array[0],
|
||||
.tbw.scs = dl->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing,
|
||||
.tbw.nrb = dl->scs_SpecificCarrierList.list.array[0]->carrierBandwidth,
|
||||
};
|
||||
return tdd;
|
||||
}
|
||||
|
||||
static f1ap_fdd_info_t read_fdd_config(const NR_ServingCellConfigCommon_t *scc)
|
||||
{
|
||||
const NR_FrequencyInfoDL_t *dl = scc->downlinkConfigCommon->frequencyInfoDL;
|
||||
const NR_FrequencyInfoUL_t *ul = scc->uplinkConfigCommon->frequencyInfoUL;
|
||||
f1ap_fdd_info_t fdd = {
|
||||
.dl_freqinfo.arfcn = dl->absoluteFrequencyPointA,
|
||||
.ul_freqinfo.arfcn = *ul->absoluteFrequencyPointA,
|
||||
.dl_tbw.scs = dl->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing,
|
||||
.ul_tbw.scs = ul->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing,
|
||||
.dl_tbw.nrb = dl->scs_SpecificCarrierList.list.array[0]->carrierBandwidth,
|
||||
.ul_tbw.nrb = ul->scs_SpecificCarrierList.list.array[0]->carrierBandwidth,
|
||||
.dl_freqinfo.band = *dl->frequencyBandList.list.array[0],
|
||||
.ul_freqinfo.band = *ul->frequencyBandList->list.array[0],
|
||||
};
|
||||
return fdd;
|
||||
}
|
||||
|
||||
static f1ap_setup_req_t *RC_read_F1Setup(uint64_t id,
|
||||
const char *name,
|
||||
const f1ap_served_cell_info_t *info,
|
||||
@@ -1150,30 +1194,26 @@ static f1ap_setup_req_t *RC_read_F1Setup(uint64_t id,
|
||||
req->cell[0].info.nr_cellid);
|
||||
|
||||
req->cell[0].info.nr_pci = *scc->physCellId;
|
||||
struct NR_FrequencyInfoDL *frequencyInfoDL = scc->downlinkConfigCommon->frequencyInfoDL;
|
||||
if (scc->tdd_UL_DL_ConfigurationCommon) {
|
||||
LOG_I(GNB_APP, "ngran_DU: Configuring Cell %d for TDD\n", 0);
|
||||
req->cell[0].info.mode = F1AP_MODE_TDD;
|
||||
f1ap_tdd_info_t *tdd = &req->cell[0].info.tdd;
|
||||
tdd->freqinfo.arfcn = frequencyInfoDL->absoluteFrequencyPointA;
|
||||
tdd->tbw.scs = frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing;
|
||||
tdd->tbw.nrb = frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth;
|
||||
tdd->freqinfo.band = *frequencyInfoDL->frequencyBandList.list.array[0];
|
||||
req->cell[0].info.tdd = read_tdd_config(scc);
|
||||
} else {
|
||||
LOG_I(GNB_APP, "ngran_DU: Configuring Cell %d for FDD\n", 0);
|
||||
req->cell[0].info.mode = F1AP_MODE_FDD;
|
||||
f1ap_fdd_info_t *fdd = &req->cell[0].info.fdd;
|
||||
fdd->dl_freqinfo.arfcn = frequencyInfoDL->absoluteFrequencyPointA;
|
||||
fdd->ul_freqinfo.arfcn = *scc->uplinkConfigCommon->frequencyInfoUL->absoluteFrequencyPointA;
|
||||
fdd->dl_tbw.scs = frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing;
|
||||
fdd->ul_tbw.scs = scc->uplinkConfigCommon->frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing;
|
||||
fdd->dl_tbw.nrb = frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth;
|
||||
fdd->ul_tbw.nrb = scc->uplinkConfigCommon->frequencyInfoUL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth;
|
||||
fdd->dl_freqinfo.band = *frequencyInfoDL->frequencyBandList.list.array[0];
|
||||
fdd->ul_freqinfo.band = *scc->uplinkConfigCommon->frequencyInfoUL->frequencyBandList->list.array[0];
|
||||
req->cell[0].info.fdd = read_fdd_config(scc);
|
||||
}
|
||||
|
||||
req->cell[0].info.measurement_timing_information = "0";
|
||||
NR_MeasurementTimingConfiguration_t *mtc = get_new_MeasurementTimingConfiguration(scc);
|
||||
uint8_t buf[1024];
|
||||
int len = encode_MeasurementTimingConfiguration(mtc, buf, sizeof(buf));
|
||||
DevAssert(len <= sizeof(buf));
|
||||
free_MeasurementTimingConfiguration(mtc);
|
||||
uint8_t *mtc_buf = calloc(len, sizeof(*mtc_buf));
|
||||
AssertFatal(mtc_buf != NULL, "out of memory\n");
|
||||
memcpy(mtc_buf, buf, len);
|
||||
req->cell[0].info.measurement_timing_config = mtc_buf;
|
||||
req->cell[0].info.measurement_timing_config_len = len;
|
||||
|
||||
if (get_softmodem_params()->sa) {
|
||||
// in NSA we don't transmit SIB1, so cannot fill DU system information
|
||||
@@ -1186,7 +1226,8 @@ static f1ap_setup_req_t *RC_read_F1Setup(uint64_t id,
|
||||
sys_info->mib = calloc(buf_len, sizeof(*sys_info->mib));
|
||||
DevAssert(sys_info->mib != NULL);
|
||||
DevAssert(mib != NULL);
|
||||
sys_info->mib_length = encode_MIB_NR(mib, 0, sys_info->mib, buf_len);
|
||||
// encode only the mib message itself
|
||||
sys_info->mib_length = encode_MIB_NR_setup(mib->message.choice.mib, 0, sys_info->mib, buf_len);
|
||||
DevAssert(sys_info->mib_length == buf_len);
|
||||
|
||||
DevAssert(sib1 != NULL);
|
||||
|
||||
Reference in New Issue
Block a user