Modify RRCReconfiguration message
This commit is contained in:
@@ -960,26 +960,25 @@ uint8_t do_NR_RRCRelease(uint8_t *buffer,
|
|||||||
return((enc_rval.encoded+7)/8);
|
return((enc_rval.encoded+7)/8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
uint16_t do_RRCReconfiguration(
|
uint16_t do_RRCReconfiguration(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
rrc_gNB_ue_context_t *const ue_context_pP,
|
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
uint8_t Transaction_id,
|
uint8_t Transaction_id,
|
||||||
gNB_RRC_INST *gnb_rrc_inst
|
NR_SRB_ToAddModList_t *SRB_configList,
|
||||||
)
|
NR_DRB_ToAddModList_t *DRB_configList,
|
||||||
|
NR_DRB_ToReleaseList_t *DRB_releaseList,
|
||||||
|
NR_SecurityConfig_t *security_config,
|
||||||
|
NR_SDAP_Config_t *sdap_config,
|
||||||
|
NR_MeasConfig_t *meas_config,
|
||||||
|
struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList
|
||||||
|
*dedicatedNAS_MessageList,
|
||||||
|
NR_MAC_CellGroupConfig_t *mac_CellGroupConfig)
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
{
|
{
|
||||||
NR_DL_DCCH_Message_t dl_dcch_msg;
|
NR_DL_DCCH_Message_t dl_dcch_msg;
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
NR_RRCReconfiguration_IEs_t *ie;
|
NR_RRCReconfiguration_IEs_t *ie;
|
||||||
NR_SRB_ToAddModList_t *SRB_configList = NULL;
|
|
||||||
NR_SRB_ToAddModList_t *SRB_configList2 = NULL;
|
|
||||||
NR_SRB_ToAddMod_t *SRB2_config = NULL;
|
|
||||||
NR_DRB_ToAddModList_t *DRB_configList = NULL;
|
|
||||||
NR_DRB_ToAddModList_t *DRB_configList2 = NULL;
|
|
||||||
NR_DRB_ToAddMod_t *DRB_config = NULL;
|
|
||||||
NR_SDAP_Config_t *sdap_config = NULL;
|
|
||||||
NR_SecurityConfig_t *security_config = NULL;
|
|
||||||
NR_DedicatedNAS_Message_t *dedicatedNAS_Message = NULL;
|
|
||||||
|
|
||||||
memset(&dl_dcch_msg, 0, sizeof(NR_DL_DCCH_Message_t));
|
memset(&dl_dcch_msg, 0, sizeof(NR_DL_DCCH_Message_t));
|
||||||
dl_dcch_msg.message.present = NR_DL_DCCH_MessageType_PR_c1;
|
dl_dcch_msg.message.present = NR_DL_DCCH_MessageType_PR_c1;
|
||||||
@@ -991,73 +990,6 @@ uint16_t do_RRCReconfiguration(
|
|||||||
dl_dcch_msg.message.choice.c1->choice.rrcReconfiguration->criticalExtensions.present = NR_RRCReconfiguration__criticalExtensions_PR_rrcReconfiguration;
|
dl_dcch_msg.message.choice.c1->choice.rrcReconfiguration->criticalExtensions.present = NR_RRCReconfiguration__criticalExtensions_PR_rrcReconfiguration;
|
||||||
|
|
||||||
/******************** Radio Bearer Config ********************/
|
/******************** Radio Bearer Config ********************/
|
||||||
/* Configure SRB2 */
|
|
||||||
SRB_configList2 = ue_context_pP->ue_context.SRB_configList2[Transaction_id];
|
|
||||||
SRB_configList = ue_context_pP->ue_context.SRB_configList;
|
|
||||||
SRB_configList = CALLOC(1, sizeof(*SRB_configList));
|
|
||||||
memset(SRB_configList, 0, sizeof(*SRB_configList));
|
|
||||||
|
|
||||||
if (SRB_configList2) {
|
|
||||||
free(SRB_configList2);
|
|
||||||
}
|
|
||||||
|
|
||||||
SRB_configList2 = CALLOC(1, sizeof(*SRB_configList2));
|
|
||||||
memset(SRB_configList2, 0, sizeof(*SRB_configList2));
|
|
||||||
SRB2_config = CALLOC(1, sizeof(*SRB2_config));
|
|
||||||
SRB2_config->srb_Identity = 2;
|
|
||||||
ASN_SEQUENCE_ADD(&SRB_configList->list, SRB2_config);
|
|
||||||
ASN_SEQUENCE_ADD(&SRB_configList2->list, SRB2_config);
|
|
||||||
|
|
||||||
/* Configure DRB */
|
|
||||||
DRB_configList = ue_context_pP->ue_context.DRB_configList;
|
|
||||||
if (DRB_configList) {
|
|
||||||
free(DRB_configList);
|
|
||||||
}
|
|
||||||
|
|
||||||
DRB_configList = CALLOC(1, sizeof(*DRB_configList));
|
|
||||||
memset(DRB_configList, 0, sizeof(*DRB_configList));
|
|
||||||
|
|
||||||
DRB_configList2 = ue_context_pP->ue_context.DRB_configList2[Transaction_id];
|
|
||||||
if (DRB_configList2) {
|
|
||||||
free(DRB_configList2);
|
|
||||||
}
|
|
||||||
DRB_configList2 = CALLOC(1, sizeof(*DRB_configList2));
|
|
||||||
memset(DRB_configList2, 0, sizeof(*DRB_configList2));
|
|
||||||
|
|
||||||
DRB_config = CALLOC(1, sizeof(*DRB_config));
|
|
||||||
DRB_config->drb_Identity = 1;
|
|
||||||
DRB_config->cnAssociation = CALLOC(1, sizeof(*DRB_config->cnAssociation));
|
|
||||||
DRB_config->cnAssociation->present = NR_DRB_ToAddMod__cnAssociation_PR_sdap_Config;
|
|
||||||
// TODO sdap_Config
|
|
||||||
sdap_config = CALLOC(1, sizeof(NR_SDAP_Config_t));
|
|
||||||
memset(sdap_config, 0, sizeof(NR_SDAP_Config_t));
|
|
||||||
DRB_config->cnAssociation->choice.sdap_Config = sdap_config;
|
|
||||||
// TODO pdcp_Config
|
|
||||||
DRB_config->reestablishPDCP = NULL;
|
|
||||||
DRB_config->recoverPDCP = NULL;
|
|
||||||
DRB_config->pdcp_Config = calloc(1, sizeof(*DRB_config->pdcp_Config));
|
|
||||||
DRB_config->pdcp_Config->drb = calloc(1,sizeof(*DRB_config->pdcp_Config->drb));
|
|
||||||
DRB_config->pdcp_Config->drb->discardTimer = calloc(1, sizeof(*DRB_config->pdcp_Config->drb->discardTimer));
|
|
||||||
*DRB_config->pdcp_Config->drb->discardTimer = NR_PDCP_Config__drb__discardTimer_ms30;
|
|
||||||
DRB_config->pdcp_Config->drb->pdcp_SN_SizeUL = calloc(1, sizeof(*DRB_config->pdcp_Config->drb->pdcp_SN_SizeUL));
|
|
||||||
*DRB_config->pdcp_Config->drb->pdcp_SN_SizeUL = NR_PDCP_Config__drb__pdcp_SN_SizeUL_len18bits;
|
|
||||||
DRB_config->pdcp_Config->drb->pdcp_SN_SizeDL = calloc(1, sizeof(*DRB_config->pdcp_Config->drb->pdcp_SN_SizeDL));
|
|
||||||
*DRB_config->pdcp_Config->drb->pdcp_SN_SizeDL = NR_PDCP_Config__drb__pdcp_SN_SizeDL_len18bits;
|
|
||||||
DRB_config->pdcp_Config->drb->headerCompression.present = NR_PDCP_Config__drb__headerCompression_PR_notUsed;
|
|
||||||
DRB_config->pdcp_Config->drb->headerCompression.choice.notUsed = 0;
|
|
||||||
|
|
||||||
DRB_config->pdcp_Config->drb->integrityProtection = NULL;
|
|
||||||
DRB_config->pdcp_Config->drb->statusReportRequired = NULL;
|
|
||||||
DRB_config->pdcp_Config->drb->outOfOrderDelivery = NULL;
|
|
||||||
DRB_config->pdcp_Config->moreThanOneRLC = NULL;
|
|
||||||
|
|
||||||
DRB_config->pdcp_Config->t_Reordering = calloc(1, sizeof(*DRB_config->pdcp_Config->t_Reordering));
|
|
||||||
*DRB_config->pdcp_Config->t_Reordering = NR_PDCP_Config__t_Reordering_ms0;
|
|
||||||
DRB_config->pdcp_Config->ext1 = NULL;
|
|
||||||
|
|
||||||
ASN_SEQUENCE_ADD(&DRB_configList->list, DRB_config);
|
|
||||||
ASN_SEQUENCE_ADD(&DRB_configList2->list, DRB_config);
|
|
||||||
|
|
||||||
/* Configure Security */
|
/* Configure Security */
|
||||||
// security_config = CALLOC(1, sizeof(NR_SecurityConfig_t));
|
// security_config = CALLOC(1, sizeof(NR_SecurityConfig_t));
|
||||||
// security_config->securityAlgorithmConfig = CALLOC(1, sizeof(*ie->radioBearerConfig->securityConfig->securityAlgorithmConfig));
|
// security_config->securityAlgorithmConfig = CALLOC(1, sizeof(*ie->radioBearerConfig->securityConfig->securityAlgorithmConfig));
|
||||||
@@ -1072,7 +1004,7 @@ uint16_t do_RRCReconfiguration(
|
|||||||
ie->radioBearerConfig->drb_ToAddModList = DRB_configList;
|
ie->radioBearerConfig->drb_ToAddModList = DRB_configList;
|
||||||
ie->radioBearerConfig->securityConfig = security_config;
|
ie->radioBearerConfig->securityConfig = security_config;
|
||||||
ie->radioBearerConfig->srb3_ToRelease = NULL;
|
ie->radioBearerConfig->srb3_ToRelease = NULL;
|
||||||
ie->radioBearerConfig->drb_ToReleaseList = NULL;
|
ie->radioBearerConfig->drb_ToReleaseList = DRB_releaseList;
|
||||||
|
|
||||||
/******************** Secondary Cell Group ********************/
|
/******************** Secondary Cell Group ********************/
|
||||||
// rrc_gNB_carrier_data_t *carrier = &(gnb_rrc_inst->carrier);
|
// rrc_gNB_carrier_data_t *carrier = &(gnb_rrc_inst->carrier);
|
||||||
@@ -1085,16 +1017,12 @@ uint16_t do_RRCReconfiguration(
|
|||||||
|
|
||||||
/******************** Meas Config ********************/
|
/******************** Meas Config ********************/
|
||||||
// measConfig
|
// measConfig
|
||||||
ie->measConfig = NULL;
|
ie->measConfig = meas_config;
|
||||||
// lateNonCriticalExtension
|
// lateNonCriticalExtension
|
||||||
ie->lateNonCriticalExtension = NULL;
|
ie->lateNonCriticalExtension = NULL;
|
||||||
// nonCriticalExtension
|
// nonCriticalExtension
|
||||||
ie->nonCriticalExtension = calloc(1, sizeof(NR_RRCReconfiguration_v1530_IEs_t));
|
ie->nonCriticalExtension = calloc(1, sizeof(NR_RRCReconfiguration_v1530_IEs_t));
|
||||||
dedicatedNAS_Message = calloc(1, sizeof(NR_DedicatedNAS_Message_t));
|
ie->nonCriticalExtension->dedicatedNAS_MessageList = dedicatedNAS_MessageList;
|
||||||
dedicatedNAS_Message->buf = ue_context_pP->ue_context.nas_pdu.buffer;
|
|
||||||
dedicatedNAS_Message->size = ue_context_pP->ue_context.nas_pdu.length;
|
|
||||||
ie->nonCriticalExtension->dedicatedNAS_MessageList = calloc(1, sizeof(struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList));
|
|
||||||
ASN_SEQUENCE_ADD(&ie->nonCriticalExtension->dedicatedNAS_MessageList->list, dedicatedNAS_Message);
|
|
||||||
|
|
||||||
dl_dcch_msg.message.choice.c1->choice.rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration = ie;
|
dl_dcch_msg.message.choice.c1->choice.rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration = ie;
|
||||||
|
|
||||||
|
|||||||
@@ -107,10 +107,17 @@ uint8_t do_NR_RRCRelease(uint8_t *buffer,
|
|||||||
uint8_t Transaction_id);
|
uint8_t Transaction_id);
|
||||||
uint16_t do_RRCReconfiguration(
|
uint16_t do_RRCReconfiguration(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
rrc_gNB_ue_context_t *const ue_context_pP,
|
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
uint8_t Transaction_id,
|
uint8_t Transaction_id,
|
||||||
gNB_RRC_INST *gnb_rrc_inst);
|
NR_SRB_ToAddModList_t *SRB_configList,
|
||||||
|
NR_DRB_ToAddModList_t *DRB_configList,
|
||||||
|
NR_DRB_ToReleaseList_t *DRB_releaseList,
|
||||||
|
NR_SecurityConfig_t *security_config,
|
||||||
|
NR_SDAP_Config_t *sdap_config,
|
||||||
|
NR_MeasConfig_t *meas_config,
|
||||||
|
struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList
|
||||||
|
*dedicatedNAS_MessageList,
|
||||||
|
NR_MAC_CellGroupConfig_t *mac_CellGroupConfig);
|
||||||
|
|
||||||
uint8_t do_RRCSetupComplete(uint8_t Mod_id,
|
uint8_t do_RRCSetupComplete(uint8_t Mod_id,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
|||||||
+121
-15
@@ -489,18 +489,113 @@ rrc_gNB_generate_defaultRRCReconfiguration(
|
|||||||
)
|
)
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
{
|
{
|
||||||
// gNB_RRC_UE_t *ue_p = &ue_context_pP->ue_context;
|
|
||||||
uint8_t buffer[RRC_BUF_SIZE];
|
uint8_t buffer[RRC_BUF_SIZE];
|
||||||
uint16_t size;
|
uint16_t size;
|
||||||
gNB_RRC_INST *gnb_rrc_inst = RC.nrrrc[ctxt_pP->module_id];
|
NR_SRB_ToAddModList_t *SRB_configList2 = NULL;
|
||||||
|
NR_SRB_ToAddModList_t *SRB_configList = ue_context_pP->ue_context.SRB_configList;
|
||||||
|
NR_DRB_ToAddModList_t *DRB_configList = NULL;
|
||||||
|
NR_DRB_ToAddModList_t *DRB_configList2 = NULL;
|
||||||
|
NR_SRB_ToAddMod_t *SRB2_config = NULL;
|
||||||
|
NR_DRB_ToAddMod_t *DRB_config = NULL;
|
||||||
|
NR_SDAP_Config_t *sdap_config = NULL;
|
||||||
|
struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList
|
||||||
|
*dedicatedNAS_MessageList = NULL;
|
||||||
|
NR_DedicatedNAS_Message_t *dedicatedNAS_Message = NULL;
|
||||||
|
|
||||||
size = do_RRCReconfiguration(ctxt_pP, ue_context_pP, buffer,
|
uint8_t xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id);
|
||||||
rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id),
|
|
||||||
gnb_rrc_inst);
|
/******************** Radio Bearer Config ********************/
|
||||||
LOG_DUMPMSG(NR_RRC, DEBUG_RRC,(char *)buffer, size, "[MSG] RRC Reconfiguration\n");
|
/* Configure SRB2 */
|
||||||
|
SRB_configList2 = ue_context_pP->ue_context.SRB_configList2[xid];
|
||||||
|
if (SRB_configList2) {
|
||||||
|
free(SRB_configList2);
|
||||||
|
}
|
||||||
|
SRB_configList2 = CALLOC(1, sizeof(*SRB_configList2));
|
||||||
|
memset(SRB_configList2, 0, sizeof(*SRB_configList2));
|
||||||
|
SRB2_config = CALLOC(1, sizeof(*SRB2_config));
|
||||||
|
SRB2_config->srb_Identity = 2;
|
||||||
|
ASN_SEQUENCE_ADD(&SRB_configList2->list, SRB2_config);
|
||||||
|
ASN_SEQUENCE_ADD(&SRB_configList->list, SRB2_config);
|
||||||
|
|
||||||
|
/* Configure DRB */
|
||||||
|
DRB_configList = ue_context_pP->ue_context.DRB_configList;
|
||||||
|
if (DRB_configList) {
|
||||||
|
free(DRB_configList);
|
||||||
|
}
|
||||||
|
DRB_configList = CALLOC(1, sizeof(*DRB_configList));
|
||||||
|
memset(DRB_configList, 0, sizeof(*DRB_configList));
|
||||||
|
|
||||||
|
DRB_configList2 = ue_context_pP->ue_context.DRB_configList2[xid];
|
||||||
|
if (DRB_configList2) {
|
||||||
|
free(DRB_configList2);
|
||||||
|
}
|
||||||
|
DRB_configList2 = CALLOC(1, sizeof(*DRB_configList2));
|
||||||
|
memset(DRB_configList2, 0, sizeof(*DRB_configList2));
|
||||||
|
|
||||||
|
DRB_config = CALLOC(1, sizeof(*DRB_config));
|
||||||
|
DRB_config->drb_Identity = 1;
|
||||||
|
DRB_config->cnAssociation = CALLOC(1, sizeof(*DRB_config->cnAssociation));
|
||||||
|
DRB_config->cnAssociation->present = NR_DRB_ToAddMod__cnAssociation_PR_sdap_Config;
|
||||||
|
// TODO sdap_Config
|
||||||
|
sdap_config = CALLOC(1, sizeof(NR_SDAP_Config_t));
|
||||||
|
memset(sdap_config, 0, sizeof(NR_SDAP_Config_t));
|
||||||
|
DRB_config->cnAssociation->choice.sdap_Config = sdap_config;
|
||||||
|
// TODO pdcp_Config
|
||||||
|
DRB_config->reestablishPDCP = NULL;
|
||||||
|
DRB_config->recoverPDCP = NULL;
|
||||||
|
DRB_config->pdcp_Config = calloc(1, sizeof(*DRB_config->pdcp_Config));
|
||||||
|
DRB_config->pdcp_Config->drb = calloc(1,sizeof(*DRB_config->pdcp_Config->drb));
|
||||||
|
DRB_config->pdcp_Config->drb->discardTimer = calloc(1, sizeof(*DRB_config->pdcp_Config->drb->discardTimer));
|
||||||
|
*DRB_config->pdcp_Config->drb->discardTimer = NR_PDCP_Config__drb__discardTimer_ms30;
|
||||||
|
DRB_config->pdcp_Config->drb->pdcp_SN_SizeUL = calloc(1, sizeof(*DRB_config->pdcp_Config->drb->pdcp_SN_SizeUL));
|
||||||
|
*DRB_config->pdcp_Config->drb->pdcp_SN_SizeUL = NR_PDCP_Config__drb__pdcp_SN_SizeUL_len18bits;
|
||||||
|
DRB_config->pdcp_Config->drb->pdcp_SN_SizeDL = calloc(1, sizeof(*DRB_config->pdcp_Config->drb->pdcp_SN_SizeDL));
|
||||||
|
*DRB_config->pdcp_Config->drb->pdcp_SN_SizeDL = NR_PDCP_Config__drb__pdcp_SN_SizeDL_len18bits;
|
||||||
|
DRB_config->pdcp_Config->drb->headerCompression.present = NR_PDCP_Config__drb__headerCompression_PR_notUsed;
|
||||||
|
DRB_config->pdcp_Config->drb->headerCompression.choice.notUsed = 0;
|
||||||
|
|
||||||
|
DRB_config->pdcp_Config->drb->integrityProtection = NULL;
|
||||||
|
DRB_config->pdcp_Config->drb->statusReportRequired = NULL;
|
||||||
|
DRB_config->pdcp_Config->drb->outOfOrderDelivery = NULL;
|
||||||
|
DRB_config->pdcp_Config->moreThanOneRLC = NULL;
|
||||||
|
|
||||||
|
DRB_config->pdcp_Config->t_Reordering = calloc(1, sizeof(*DRB_config->pdcp_Config->t_Reordering));
|
||||||
|
*DRB_config->pdcp_Config->t_Reordering = NR_PDCP_Config__t_Reordering_ms0;
|
||||||
|
DRB_config->pdcp_Config->ext1 = NULL;
|
||||||
|
|
||||||
|
ASN_SEQUENCE_ADD(&DRB_configList->list, DRB_config);
|
||||||
|
ASN_SEQUENCE_ADD(&DRB_configList2->list, DRB_config);
|
||||||
|
|
||||||
|
if (ue_context_pP->ue_context.nas_pdu_flag == 1) {
|
||||||
|
dedicatedNAS_Message = CALLOC(1, sizeof(NR_DedicatedNAS_Message_t));
|
||||||
|
memset(dedicatedNAS_Message, 0, sizeof(OCTET_STRING_t));
|
||||||
|
OCTET_STRING_fromBuf(dedicatedNAS_Message,
|
||||||
|
(char *)ue_context_pP->ue_context.nas_pdu.buffer,
|
||||||
|
ue_context_pP->ue_context.nas_pdu.length);
|
||||||
|
ASN_SEQUENCE_ADD(&dedicatedNAS_MessageList->list, dedicatedNAS_Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If list is empty free the list and reset the address */
|
||||||
|
if (dedicatedNAS_MessageList->list.count == 0) {
|
||||||
|
free(dedicatedNAS_MessageList);
|
||||||
|
dedicatedNAS_MessageList = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(buffer, 0, RRC_BUF_SIZE);
|
||||||
|
size = do_RRCReconfiguration(ctxt_pP, buffer,
|
||||||
|
xid,
|
||||||
|
SRB_configList,
|
||||||
|
DRB_configList,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
dedicatedNAS_MessageList,
|
||||||
|
NULL);
|
||||||
|
|
||||||
free(ue_context_pP->ue_context.nas_pdu.buffer);
|
free(ue_context_pP->ue_context.nas_pdu.buffer);
|
||||||
|
|
||||||
|
LOG_DUMPMSG(NR_RRC, DEBUG_RRC,(char *)buffer, size, "[MSG] RRC Reconfiguration\n");
|
||||||
LOG_I(NR_RRC, "[gNB %d] Frame %d, Logical Channel DL-DCCH, Generate NR_RRCReconfiguration (bytes %d, UE id %x)\n",
|
LOG_I(NR_RRC, "[gNB %d] Frame %d, Logical Channel DL-DCCH, Generate NR_RRCReconfiguration (bytes %d, UE id %x)\n",
|
||||||
ctxt_pP->module_id,
|
ctxt_pP->module_id,
|
||||||
ctxt_pP->frame,
|
ctxt_pP->frame,
|
||||||
@@ -561,14 +656,16 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
|
|||||||
uint16_t size = 0;
|
uint16_t size = 0;
|
||||||
NR_DRB_ToReleaseList_t *DRB_Release_configList2 = NULL;
|
NR_DRB_ToReleaseList_t *DRB_Release_configList2 = NULL;
|
||||||
NR_DRB_Identity_t *DRB_release;
|
NR_DRB_Identity_t *DRB_release;
|
||||||
DRB_Release_configList2 = ue_context_pP->ue_context.DRB_Release_configList2[xid];
|
struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList
|
||||||
|
*dedicatedNAS_MessageList = NULL;
|
||||||
|
NR_DedicatedNAS_Message_t *dedicatedNAS_Message = NULL;
|
||||||
|
|
||||||
|
DRB_Release_configList2 = ue_context_pP->ue_context.DRB_Release_configList2[xid];
|
||||||
if (DRB_Release_configList2) {
|
if (DRB_Release_configList2) {
|
||||||
free(DRB_Release_configList2);
|
free(DRB_Release_configList2);
|
||||||
}
|
}
|
||||||
|
|
||||||
DRB_Release_configList2 = CALLOC(1, sizeof(*DRB_Release_configList2));
|
DRB_Release_configList2 = CALLOC(1, sizeof(*DRB_Release_configList2));
|
||||||
|
|
||||||
for(i = 0; i < NB_RB_MAX; i++) {
|
for(i = 0; i < NB_RB_MAX; i++) {
|
||||||
if((ue_context_pP->ue_context.pdusession[i].status == PDU_SESSION_STATUS_TORELEASE) && ue_context_pP->ue_context.pdusession[i].xid == xid) {
|
if((ue_context_pP->ue_context.pdusession[i].status == PDU_SESSION_STATUS_TORELEASE) && ue_context_pP->ue_context.pdusession[i].xid == xid) {
|
||||||
DRB_release = CALLOC(1, sizeof(NR_DRB_Identity_t));
|
DRB_release = CALLOC(1, sizeof(NR_DRB_Identity_t));
|
||||||
@@ -579,19 +676,29 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
|
|||||||
|
|
||||||
/* If list is empty free the list and reset the address */
|
/* If list is empty free the list and reset the address */
|
||||||
if (nas_length > 0) {
|
if (nas_length > 0) {
|
||||||
memcpy(ue_context_pP->ue_context.nas_pdu.buffer, nas_buffer, nas_length);
|
dedicatedNAS_MessageList = CALLOC(1, sizeof(struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList));
|
||||||
ue_context_pP->ue_context.nas_pdu.length = nas_length;
|
dedicatedNAS_Message = CALLOC(1, sizeof(NR_DedicatedNAS_Message_t));
|
||||||
|
memset(dedicatedNAS_Message, 0, sizeof(OCTET_STRING_t));
|
||||||
|
OCTET_STRING_fromBuf(dedicatedNAS_Message,
|
||||||
|
(char *)nas_buffer,
|
||||||
|
nas_length);
|
||||||
|
ASN_SEQUENCE_ADD(&dedicatedNAS_MessageList->list, dedicatedNAS_Message);
|
||||||
LOG_I(NR_RRC,"add NAS info with size %d\n", nas_length);
|
LOG_I(NR_RRC,"add NAS info with size %d\n", nas_length);
|
||||||
} else {
|
} else {
|
||||||
LOG_W(NR_RRC,"dedlicated NAS list is empty\n");
|
LOG_W(NR_RRC,"dedlicated NAS list is empty\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, RRC_BUF_SIZE);
|
||||||
size = do_RRCReconfiguration(ctxt_pP,
|
size = do_RRCReconfiguration(ctxt_pP, buffer, xid,
|
||||||
ue_context_pP,
|
NULL,
|
||||||
buffer,
|
NULL,
|
||||||
xid,
|
DRB_Release_configList2,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
dedicatedNAS_MessageList,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
ue_context_pP->ue_context.pdu_session_release_command_flag = 1;
|
ue_context_pP->ue_context.pdu_session_release_command_flag = 1;
|
||||||
LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size,
|
LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size,
|
||||||
"[MSG] RRC Reconfiguration\n");
|
"[MSG] RRC Reconfiguration\n");
|
||||||
@@ -1412,7 +1519,6 @@ rrc_gNB_decode_dcch(
|
|||||||
ue_context_p,
|
ue_context_p,
|
||||||
ul_dcch_msg);
|
ul_dcch_msg);
|
||||||
}
|
}
|
||||||
sleep(1);
|
|
||||||
rrc_gNB_generate_defaultRRCReconfiguration(ctxt_pP, ue_context_p);
|
rrc_gNB_generate_defaultRRCReconfiguration(ctxt_pP, ue_context_p);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user