Add RA 2-Step configuration parameters to SIB1
This commit is contained in:
@@ -65,6 +65,7 @@ int oai_nfapi_ul_config_req(nfapi_ul_config_request_t *ul_config_req) { return(0
|
|||||||
void fill_scc_sim(NR_ServingCellConfigCommon_t *scc,uint64_t *ssb_bitmap,int N_RB_DL,int N_RB_UL,int mu_dl,int mu_ul);
|
void fill_scc_sim(NR_ServingCellConfigCommon_t *scc,uint64_t *ssb_bitmap,int N_RB_DL,int N_RB_UL,int mu_dl,int mu_ul);
|
||||||
void fix_scc(NR_ServingCellConfigCommon_t *scc,uint64_t ssbmap);
|
void fix_scc(NR_ServingCellConfigCommon_t *scc,uint64_t ssbmap);
|
||||||
void prepare_scc(NR_ServingCellConfigCommon_t *scc);
|
void prepare_scc(NR_ServingCellConfigCommon_t *scc);
|
||||||
|
void prepare_msgA_scc(NR_ServingCellConfigCommon_t *scc);
|
||||||
void prepare_scd(NR_ServingCellConfig_t *scd);
|
void prepare_scd(NR_ServingCellConfig_t *scd);
|
||||||
uint32_t ngap_generate_gNB_id(void) {return 0;}
|
uint32_t ngap_generate_gNB_id(void) {return 0;}
|
||||||
|
|
||||||
|
|||||||
@@ -145,6 +145,28 @@ void prepare_scc(NR_ServingCellConfigCommon_t *scc)
|
|||||||
scc->ext2->ntn_Config_r17->ephemerisInfo_r17->choice.positionVelocity_r17 =
|
scc->ext2->ntn_Config_r17->ephemerisInfo_r17->choice.positionVelocity_r17 =
|
||||||
calloc_or_fail(1, sizeof(*scc->ext2->ntn_Config_r17->ephemerisInfo_r17->choice.positionVelocity_r17));
|
calloc_or_fail(1, sizeof(*scc->ext2->ntn_Config_r17->ephemerisInfo_r17->choice.positionVelocity_r17));
|
||||||
}
|
}
|
||||||
|
void prepare_msgA_scc(NR_ServingCellConfigCommon_t *scc) {
|
||||||
|
NR_BWP_UplinkCommon_t *initialUplinkBWP = scc->uplinkConfigCommon->initialUplinkBWP;
|
||||||
|
// Add the struct ext1
|
||||||
|
initialUplinkBWP->ext1 = calloc(1, sizeof(*initialUplinkBWP->ext1));
|
||||||
|
initialUplinkBWP->ext1->msgA_ConfigCommon_r16 = calloc(1, sizeof(*initialUplinkBWP->ext1->msgA_ConfigCommon_r16));
|
||||||
|
initialUplinkBWP->ext1->msgA_ConfigCommon_r16->present = NR_SetupRelease_MsgA_ConfigCommon_r16_PR_setup;
|
||||||
|
initialUplinkBWP->ext1->msgA_ConfigCommon_r16->choice.setup =
|
||||||
|
calloc(1, sizeof(*initialUplinkBWP->ext1->msgA_ConfigCommon_r16->choice.setup));
|
||||||
|
NR_MsgA_ConfigCommon_r16_t *NR_MsgA_ConfigCommon_r16 = initialUplinkBWP->ext1->msgA_ConfigCommon_r16->choice.setup;
|
||||||
|
NR_MsgA_ConfigCommon_r16->rach_ConfigCommonTwoStepRA_r16.rach_ConfigGenericTwoStepRA_r16.msgB_ResponseWindow_r16 =
|
||||||
|
calloc(1, sizeof(long));
|
||||||
|
NR_MsgA_ConfigCommon_r16->rach_ConfigCommonTwoStepRA_r16.msgA_RSRP_Threshold_r16 = calloc(1, sizeof(NR_RSRP_Range_t));
|
||||||
|
|
||||||
|
NR_MsgA_ConfigCommon_r16->rach_ConfigCommonTwoStepRA_r16.msgA_CB_PreamblesPerSSB_PerSharedRO_r16 = calloc(1, sizeof(long));
|
||||||
|
|
||||||
|
NR_MsgA_ConfigCommon_r16->msgA_PUSCH_Config_r16 = calloc(1, sizeof(NR_MsgA_PUSCH_Config_r16_t));
|
||||||
|
NR_MsgA_PUSCH_Config_r16_t *msgA_PUSCH_Config_r16 = NR_MsgA_ConfigCommon_r16->msgA_PUSCH_Config_r16;
|
||||||
|
msgA_PUSCH_Config_r16->msgA_PUSCH_ResourceGroupA_r16 = calloc(1, sizeof(NR_MsgA_PUSCH_Resource_r16_t));
|
||||||
|
NR_MsgA_PUSCH_Resource_r16_t *msgA_PUSCH_Resource = msgA_PUSCH_Config_r16->msgA_PUSCH_ResourceGroupA_r16;
|
||||||
|
msgA_PUSCH_Resource->startSymbolAndLengthMsgA_PO_r16 = calloc(1, sizeof(long));
|
||||||
|
msgA_PUSCH_Config_r16->msgA_TransformPrecoder_r16 = calloc(1, sizeof(long));
|
||||||
|
}
|
||||||
|
|
||||||
// Section 4.1 in 38.213
|
// Section 4.1 in 38.213
|
||||||
NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR get_ssb_len(NR_ServingCellConfigCommon_t *scc)
|
NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR get_ssb_len(NR_ServingCellConfigCommon_t *scc)
|
||||||
@@ -384,6 +406,14 @@ void fix_scc(NR_ServingCellConfigCommon_t *scc, uint64_t ssbmap)
|
|||||||
scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg1_SubcarrierSpacing=NULL;
|
scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg1_SubcarrierSpacing=NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (scc->uplinkConfigCommon->initialUplinkBWP->ext1
|
||||||
|
&& (int)scc->uplinkConfigCommon->initialUplinkBWP->ext1->msgA_ConfigCommon_r16->choice.setup->msgA_PUSCH_Config_r16
|
||||||
|
->msgA_PUSCH_ResourceGroupA_r16->msgA_PUSCH_TimeDomainOffset_r16
|
||||||
|
== 0) {
|
||||||
|
free(scc->uplinkConfigCommon->initialUplinkBWP->ext1);
|
||||||
|
scc->uplinkConfigCommon->initialUplinkBWP->ext1 = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if ((int)*scc->n_TimingAdvanceOffset == -1) {
|
if ((int)*scc->n_TimingAdvanceOffset == -1) {
|
||||||
free(scc->n_TimingAdvanceOffset);
|
free(scc->n_TimingAdvanceOffset);
|
||||||
scc->n_TimingAdvanceOffset = NULL;
|
scc->n_TimingAdvanceOffset = NULL;
|
||||||
@@ -935,14 +965,20 @@ static NR_ServingCellConfigCommon_t *get_scc_config(configmodule_interface_t *cf
|
|||||||
uint64_t ssb_bitmap=0xff;
|
uint64_t ssb_bitmap=0xff;
|
||||||
prepare_scc(scc);
|
prepare_scc(scc);
|
||||||
paramdef_t SCCsParams[] = SCCPARAMS_DESC(scc);
|
paramdef_t SCCsParams[] = SCCPARAMS_DESC(scc);
|
||||||
|
prepare_msgA_scc(scc);
|
||||||
|
paramdef_t MsgASCCsParams[] = MSGASCCPARAMS_DESC(scc);
|
||||||
paramlist_def_t SCCsParamList = {GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON, NULL, 0};
|
paramlist_def_t SCCsParamList = {GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON, NULL, 0};
|
||||||
|
paramlist_def_t MsgASCCsParamList = {GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON, NULL, 0};
|
||||||
|
|
||||||
char aprefix[MAX_OPTNAME_SIZE*2 + 8];
|
char aprefix[MAX_OPTNAME_SIZE*2 + 8];
|
||||||
sprintf(aprefix, "%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, 0);
|
sprintf(aprefix, "%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, 0);
|
||||||
config_getlist(cfg, &SCCsParamList, NULL, 0, aprefix);
|
config_getlist(cfg, &SCCsParamList, NULL, 0, aprefix);
|
||||||
if (SCCsParamList.numelt > 0) {
|
config_getlist(cfg, &MsgASCCsParamList, NULL, 0, aprefix);
|
||||||
|
|
||||||
|
if (SCCsParamList.numelt > 0 || MsgASCCsParamList.numelt > 0) {
|
||||||
sprintf(aprefix, "%s.[%i].%s.[%i]", GNB_CONFIG_STRING_GNB_LIST,0,GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON, 0);
|
sprintf(aprefix, "%s.[%i].%s.[%i]", GNB_CONFIG_STRING_GNB_LIST,0,GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON, 0);
|
||||||
config_get(cfg, SCCsParams, sizeofArray(SCCsParams), aprefix);
|
config_get(cfg, SCCsParams, sizeofArray(SCCsParams), aprefix);
|
||||||
|
config_get(cfg, MsgASCCsParams, sizeofArray(MsgASCCsParams), aprefix);
|
||||||
struct NR_FrequencyInfoDL *frequencyInfoDL = scc->downlinkConfigCommon->frequencyInfoDL;
|
struct NR_FrequencyInfoDL *frequencyInfoDL = scc->downlinkConfigCommon->frequencyInfoDL;
|
||||||
LOG_I(RRC,
|
LOG_I(RRC,
|
||||||
"Read in ServingCellConfigCommon (PhysCellId %d, ABSFREQSSB %d, DLBand %d, ABSFREQPOINTA %d, DLBW "
|
"Read in ServingCellConfigCommon (PhysCellId %d, ABSFREQSSB %d, DLBand %d, ABSFREQPOINTA %d, DLBW "
|
||||||
|
|||||||
@@ -71,6 +71,25 @@ static NR_SetupRelease_RACH_ConfigCommon_t *clone_rach_configcommon(const NR_Set
|
|||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static NR_SetupRelease_MsgA_ConfigCommon_r16_t *clone_msga_configcommon(const NR_SetupRelease_MsgA_ConfigCommon_r16_t *mcc)
|
||||||
|
{
|
||||||
|
if (mcc == NULL || mcc->present == NR_SetupRelease_MsgA_ConfigCommon_r16_PR_NOTHING)
|
||||||
|
return NULL;
|
||||||
|
NR_SetupRelease_MsgA_ConfigCommon_r16_t *clone = calloc_or_fail(1, sizeof(*clone));
|
||||||
|
clone->present = mcc->present;
|
||||||
|
if (clone->present == NR_SetupRelease_MsgA_ConfigCommon_r16_PR_release)
|
||||||
|
return clone;
|
||||||
|
uint8_t buf[1024];
|
||||||
|
asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_MsgA_ConfigCommon_r16, NULL, mcc->choice.setup, buf, sizeof(buf));
|
||||||
|
AssertFatal(enc_rval.encoded > 0 && enc_rval.encoded < sizeof(buf),
|
||||||
|
"could not clone NR_MsgA_ConfigCommon_r16: problem while encoding\n");
|
||||||
|
asn_dec_rval_t dec_rval =
|
||||||
|
uper_decode(NULL, &asn_DEF_NR_MsgA_ConfigCommon_r16, (void **)&clone->choice.setup, buf, enc_rval.encoded, 0, 0);
|
||||||
|
AssertFatal(dec_rval.code == RC_OK && dec_rval.consumed == enc_rval.encoded,
|
||||||
|
"could not clone NR_MsgA_ConfigCommon_r16:: problem while decoding\n");
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
|
||||||
static NR_SetupRelease_PUSCH_ConfigCommon_t *clone_pusch_configcommon(const NR_SetupRelease_PUSCH_ConfigCommon_t *pcc)
|
static NR_SetupRelease_PUSCH_ConfigCommon_t *clone_pusch_configcommon(const NR_SetupRelease_PUSCH_ConfigCommon_t *pcc)
|
||||||
{
|
{
|
||||||
if (pcc == NULL || pcc->present == NR_SetupRelease_PUSCH_ConfigCommon_PR_NOTHING)
|
if (pcc == NULL || pcc->present == NR_SetupRelease_PUSCH_ConfigCommon_PR_NOTHING)
|
||||||
@@ -2351,6 +2370,17 @@ NR_BCCH_DL_SCH_Message_t *get_SIB1_NR(const NR_ServingCellConfigCommon_t *scc,
|
|||||||
|
|
||||||
UL->initialUplinkBWP.genericParameters = clone_generic_parameters(&scc->uplinkConfigCommon->initialUplinkBWP->genericParameters);
|
UL->initialUplinkBWP.genericParameters = clone_generic_parameters(&scc->uplinkConfigCommon->initialUplinkBWP->genericParameters);
|
||||||
UL->initialUplinkBWP.rach_ConfigCommon = clone_rach_configcommon(scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon);
|
UL->initialUplinkBWP.rach_ConfigCommon = clone_rach_configcommon(scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon);
|
||||||
|
|
||||||
|
if (scc->uplinkConfigCommon->initialUplinkBWP->ext1) {
|
||||||
|
NR_SetupRelease_MsgA_ConfigCommon_r16_t *msgA_configcommon =
|
||||||
|
clone_msga_configcommon(scc->uplinkConfigCommon->initialUplinkBWP->ext1->msgA_ConfigCommon_r16);
|
||||||
|
if (msgA_configcommon) {
|
||||||
|
// Add the struct ext1
|
||||||
|
UL->initialUplinkBWP.ext1 = calloc(1, sizeof(*UL->initialUplinkBWP.ext1));
|
||||||
|
UL->initialUplinkBWP.ext1->msgA_ConfigCommon_r16 = msgA_configcommon;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UL->initialUplinkBWP.pusch_ConfigCommon = clone_pusch_configcommon(scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon);
|
UL->initialUplinkBWP.pusch_ConfigCommon = clone_pusch_configcommon(scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon);
|
||||||
free(UL->initialUplinkBWP.pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding);
|
free(UL->initialUplinkBWP.pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding);
|
||||||
UL->initialUplinkBWP.pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding = NULL;
|
UL->initialUplinkBWP.pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding = NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user