Be more careful about buffer sizes
This commit is contained in:
@@ -2129,7 +2129,7 @@ uint8_t do_SIB23(uint8_t Mod_id,
|
|||||||
return((enc_rval.encoded+7)/8);
|
return((enc_rval.encoded+7)/8);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv) {
|
uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size, uint8_t *rv) {
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
uint8_t buf[5],buf2=0;
|
uint8_t buf[5],buf2=0;
|
||||||
LTE_UL_CCCH_Message_t ul_ccch_msg;
|
LTE_UL_CCCH_Message_t ul_ccch_msg;
|
||||||
@@ -2178,7 +2178,7 @@ uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv) {
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&ul_ccch_msg,
|
(void *)&ul_ccch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
buffer_size);
|
||||||
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded);
|
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
LOG_D(RRC,"[UE] RRCConnectionRequest Encoded %zd bits (%zd bytes)\n", enc_rval.encoded, (enc_rval.encoded+7)/8);
|
LOG_D(RRC,"[UE] RRCConnectionRequest Encoded %zd bits (%zd bytes)\n", enc_rval.encoded, (enc_rval.encoded+7)/8);
|
||||||
return((enc_rval.encoded+7)/8);
|
return((enc_rval.encoded+7)/8);
|
||||||
@@ -3176,6 +3176,7 @@ uint8_t do_RRCConnectionSetup_BR(
|
|||||||
uint8_t do_SecurityModeCommand(
|
uint8_t do_SecurityModeCommand(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *const buffer,
|
uint8_t *const buffer,
|
||||||
|
size_t buffer_size,
|
||||||
const uint8_t Transaction_id,
|
const uint8_t Transaction_id,
|
||||||
const uint8_t cipheringAlgorithm,
|
const uint8_t cipheringAlgorithm,
|
||||||
const uint8_t integrityProtAlgorithm
|
const uint8_t integrityProtAlgorithm
|
||||||
@@ -3205,7 +3206,7 @@ uint8_t do_SecurityModeCommand(
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&dl_dcch_msg,
|
(void *)&dl_dcch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
buffer_size);
|
||||||
|
|
||||||
if(enc_rval.encoded == -1) {
|
if(enc_rval.encoded == -1) {
|
||||||
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
@@ -3234,6 +3235,7 @@ uint8_t do_SecurityModeCommand(
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
uint8_t do_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
uint8_t do_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *const buffer,
|
uint8_t *const buffer,
|
||||||
|
size_t buffer_size,
|
||||||
const uint8_t Transaction_id,
|
const uint8_t Transaction_id,
|
||||||
int16_t eutra_band,
|
int16_t eutra_band,
|
||||||
uint32_t nr_band)
|
uint32_t nr_band)
|
||||||
@@ -3331,7 +3333,7 @@ uint8_t do_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&dl_dcch_msg,
|
(void *)&dl_dcch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
buffer_size);
|
||||||
|
|
||||||
if(enc_rval.encoded == -1) {
|
if(enc_rval.encoded == -1) {
|
||||||
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
@@ -3358,6 +3360,7 @@ uint8_t do_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
uint8_t do_NR_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
uint8_t do_NR_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *const buffer,
|
uint8_t *const buffer,
|
||||||
|
size_t buffer_size,
|
||||||
const uint8_t Transaction_id,
|
const uint8_t Transaction_id,
|
||||||
int16_t eutra_band,
|
int16_t eutra_band,
|
||||||
uint32_t nr_band)
|
uint32_t nr_band)
|
||||||
@@ -3451,7 +3454,7 @@ uint8_t do_NR_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&dl_dcch_msg,
|
(void *)&dl_dcch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
buffer_size);
|
||||||
|
|
||||||
if(enc_rval.encoded == -1) {
|
if(enc_rval.encoded == -1) {
|
||||||
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
@@ -3478,6 +3481,7 @@ uint8_t do_NR_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
|||||||
|
|
||||||
uint16_t do_RRCConnectionReconfiguration_BR(const protocol_ctxt_t *const ctxt_pP,
|
uint16_t do_RRCConnectionReconfiguration_BR(const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
uint8_t Transaction_id,
|
uint8_t Transaction_id,
|
||||||
LTE_SRB_ToAddModList_t *SRB_list,
|
LTE_SRB_ToAddModList_t *SRB_list,
|
||||||
LTE_DRB_ToAddModList_t *DRB_list,
|
LTE_DRB_ToAddModList_t *DRB_list,
|
||||||
@@ -3579,7 +3583,7 @@ uint16_t do_RRCConnectionReconfiguration_BR(const protocol_ctxt_t *const
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&dl_dcch_msg,
|
(void *)&dl_dcch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
RRC_BUF_SIZE);
|
buffer_size);
|
||||||
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed %s, %lu!\n",
|
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed %s, %lu!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||||
@@ -3596,6 +3600,7 @@ uint16_t do_RRCConnectionReconfiguration_BR(const protocol_ctxt_t *const
|
|||||||
*/
|
*/
|
||||||
uint16_t do_RRCConnectionReconfiguration(const protocol_ctxt_t *const ctxt_pP,
|
uint16_t do_RRCConnectionReconfiguration(const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
uint8_t Transaction_id,
|
uint8_t Transaction_id,
|
||||||
LTE_SRB_ToAddModList_t *SRB_list,
|
LTE_SRB_ToAddModList_t *SRB_list,
|
||||||
LTE_DRB_ToAddModList_t *DRB_list,
|
LTE_DRB_ToAddModList_t *DRB_list,
|
||||||
@@ -3756,7 +3761,7 @@ uint16_t do_RRCConnectionReconfiguration(const protocol_ctxt_t *const ctxt_pP,
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&dl_dcch_msg,
|
(void *)&dl_dcch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
RRC_BUF_SIZE);
|
buffer_size);
|
||||||
|
|
||||||
if(enc_rval.encoded == -1) {
|
if(enc_rval.encoded == -1) {
|
||||||
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
@@ -4011,6 +4016,7 @@ uint8_t do_RRCConnectionReject(uint8_t Mod_id,
|
|||||||
|
|
||||||
uint8_t do_RRCConnectionRelease(uint8_t Mod_id,
|
uint8_t do_RRCConnectionRelease(uint8_t Mod_id,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
uint8_t Transaction_id) {
|
uint8_t Transaction_id) {
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
LTE_DL_DCCH_Message_t dl_dcch_msg;
|
LTE_DL_DCCH_Message_t dl_dcch_msg;
|
||||||
@@ -4032,7 +4038,7 @@ uint8_t do_RRCConnectionRelease(uint8_t Mod_id,
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&dl_dcch_msg,
|
(void *)&dl_dcch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
RRC_BUF_SIZE);
|
buffer_size);
|
||||||
return((enc_rval.encoded+7)/8);
|
return((enc_rval.encoded+7)/8);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4042,6 +4048,7 @@ uint8_t TMGI[5] = {4,3,2,1,0};//TMGI is a string of octet, ref. TS 24.008 fig. 1
|
|||||||
uint8_t do_MBSFNAreaConfig(uint8_t Mod_id,
|
uint8_t do_MBSFNAreaConfig(uint8_t Mod_id,
|
||||||
uint8_t sync_area,
|
uint8_t sync_area,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
LTE_MCCH_Message_t *mcch_message,
|
LTE_MCCH_Message_t *mcch_message,
|
||||||
LTE_MBSFNAreaConfiguration_r9_t **mbsfnAreaConfiguration) {
|
LTE_MBSFNAreaConfiguration_r9_t **mbsfnAreaConfiguration) {
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
@@ -4148,7 +4155,7 @@ uint8_t do_MBSFNAreaConfig(uint8_t Mod_id,
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)mcch_message,
|
(void *)mcch_message,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
buffer_size);
|
||||||
|
|
||||||
if(enc_rval.encoded == -1) {
|
if(enc_rval.encoded == -1) {
|
||||||
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
@@ -4167,7 +4174,9 @@ uint8_t do_MBSFNAreaConfig(uint8_t Mod_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint8_t do_MeasurementReport(uint8_t Mod_id, uint8_t *buffer,int measid,int phy_id,long rsrp_s,long rsrq_s,long rsrp_t,long rsrq_t) {
|
uint8_t do_MeasurementReport(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size,
|
||||||
|
int measid, int phy_id, long rsrp_s, long rsrq_s,
|
||||||
|
long rsrp_t, long rsrq_t) {
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
LTE_UL_DCCH_Message_t ul_dcch_msg;
|
LTE_UL_DCCH_Message_t ul_dcch_msg;
|
||||||
LTE_MeasurementReport_t *measurementReport;
|
LTE_MeasurementReport_t *measurementReport;
|
||||||
@@ -4239,7 +4248,7 @@ uint8_t do_MeasurementReport(uint8_t Mod_id, uint8_t *buffer,int measid,int phy_
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&ul_dcch_msg,
|
(void *)&ul_dcch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
buffer_size);
|
||||||
|
|
||||||
if(enc_rval.encoded == -1) {
|
if(enc_rval.encoded == -1) {
|
||||||
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
@@ -4422,7 +4431,8 @@ uint8_t do_DLInformationTransfer(uint8_t Mod_id, uint8_t **buffer, uint8_t trans
|
|||||||
return encoded;
|
return encoded;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t do_Paging(uint8_t Mod_id, uint8_t *buffer, ue_paging_identity_t ue_paging_identity, cn_domain_t cn_domain) {
|
uint8_t do_Paging(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size,
|
||||||
|
ue_paging_identity_t ue_paging_identity, cn_domain_t cn_domain) {
|
||||||
LOG_D(RRC, "[eNB %d] do_Paging start\n", Mod_id);
|
LOG_D(RRC, "[eNB %d] do_Paging start\n", Mod_id);
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
LTE_PCCH_Message_t pcch_msg;
|
LTE_PCCH_Message_t pcch_msg;
|
||||||
@@ -4474,7 +4484,8 @@ uint8_t do_Paging(uint8_t Mod_id, uint8_t *buffer, ue_paging_identity_t ue_pagin
|
|||||||
ASN_SEQUENCE_ADD(&pcch_msg.message.choice.c1.choice.paging.pagingRecordList->list, paging_record_p);
|
ASN_SEQUENCE_ADD(&pcch_msg.message.choice.c1.choice.paging.pagingRecordList->list, paging_record_p);
|
||||||
LOG_D(RRC, "[eNB %d] do_Paging paging_record: cn_Domain %ld, ue_paging_identity.presenceMask %d, PagingRecordList.count %d\n",
|
LOG_D(RRC, "[eNB %d] do_Paging paging_record: cn_Domain %ld, ue_paging_identity.presenceMask %d, PagingRecordList.count %d\n",
|
||||||
Mod_id, paging_record_p->cn_Domain, ue_paging_identity.presenceMask, pcch_msg.message.choice.c1.choice.paging.pagingRecordList->list.count);
|
Mod_id, paging_record_p->cn_Domain, ue_paging_identity.presenceMask, pcch_msg.message.choice.c1.choice.paging.pagingRecordList->list.count);
|
||||||
enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_PCCH_Message, NULL, (void *)&pcch_msg, buffer, RRC_BUF_SIZE);
|
enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_PCCH_Message, NULL, (void *)&pcch_msg,
|
||||||
|
buffer, buffer_size);
|
||||||
|
|
||||||
if(enc_rval.encoded == -1) {
|
if(enc_rval.encoded == -1) {
|
||||||
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_I(RRC, "[eNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ routine only generates an mo-data establishment cause.
|
|||||||
@param rv 5 byte random string or S-TMSI
|
@param rv 5 byte random string or S-TMSI
|
||||||
@returns Size of encoded bit stream in bytes*/
|
@returns Size of encoded bit stream in bytes*/
|
||||||
|
|
||||||
uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv);
|
uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size, uint8_t *rv);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief Generate an SidelinkUEInformation UL-DCCH-Message (UE).
|
\brief Generate an SidelinkUEInformation UL-DCCH-Message (UE).
|
||||||
@@ -207,6 +207,7 @@ uint16_t
|
|||||||
do_RRCConnectionReconfiguration_BR(
|
do_RRCConnectionReconfiguration_BR(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
uint8_t Transaction_id,
|
uint8_t Transaction_id,
|
||||||
LTE_SRB_ToAddModList_t *SRB_list,
|
LTE_SRB_ToAddModList_t *SRB_list,
|
||||||
LTE_DRB_ToAddModList_t *DRB_list,
|
LTE_DRB_ToAddModList_t *DRB_list,
|
||||||
@@ -252,6 +253,7 @@ uint16_t
|
|||||||
do_RRCConnectionReconfiguration(
|
do_RRCConnectionReconfiguration(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
uint8_t Transaction_id,
|
uint8_t Transaction_id,
|
||||||
LTE_SRB_ToAddModList_t *SRB_list,
|
LTE_SRB_ToAddModList_t *SRB_list,
|
||||||
LTE_DRB_ToAddModList_t *DRB_list,
|
LTE_DRB_ToAddModList_t *DRB_list,
|
||||||
@@ -325,14 +327,8 @@ routine only generates an mo-data establishment cause.
|
|||||||
@param transaction_id Transaction index
|
@param transaction_id Transaction index
|
||||||
@returns Size of encoded bit stream in bytes*/
|
@returns Size of encoded bit stream in bytes*/
|
||||||
|
|
||||||
uint8_t do_RRCConnectionRelease(uint8_t Mod_id, uint8_t *buffer,int Transaction_id);
|
uint8_t do_RRCConnectionRelease(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size, int Transaction_id);
|
||||||
|
|
||||||
/***
|
|
||||||
* \brief Generate an MCCH-Message (eNB). This routine configures MBSFNAreaConfiguration (PMCH-InfoList and Subframe Allocation for MBMS data)
|
|
||||||
* @param buffer Pointer to PER-encoded ASN.1 description of MCCH-Message PDU
|
|
||||||
* @returns Size of encoded bit stream in bytes
|
|
||||||
*/
|
|
||||||
uint8_t do_MCCHMessage(uint8_t *buffer);
|
|
||||||
/***
|
/***
|
||||||
* \brief Generate an MCCH-Message (eNB). This routine configures MBSFNAreaConfiguration (PMCH-InfoList and Subframe Allocation for MBMS data)
|
* \brief Generate an MCCH-Message (eNB). This routine configures MBSFNAreaConfiguration (PMCH-InfoList and Subframe Allocation for MBMS data)
|
||||||
* @param buffer Pointer to PER-encoded ASN.1 description of MCCH-Message PDU
|
* @param buffer Pointer to PER-encoded ASN.1 description of MCCH-Message PDU
|
||||||
@@ -341,10 +337,14 @@ uint8_t do_MCCHMessage(uint8_t *buffer);
|
|||||||
uint8_t do_MBSFNAreaConfig(uint8_t Mod_id,
|
uint8_t do_MBSFNAreaConfig(uint8_t Mod_id,
|
||||||
uint8_t sync_area,
|
uint8_t sync_area,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
LTE_MCCH_Message_t *mcch_message,
|
LTE_MCCH_Message_t *mcch_message,
|
||||||
LTE_MBSFNAreaConfiguration_r9_t **mbsfnAreaConfiguration);
|
LTE_MBSFNAreaConfiguration_r9_t **mbsfnAreaConfiguration);
|
||||||
|
|
||||||
ssize_t do_MeasurementReport(uint8_t Mod_id, uint8_t *buffer,int measid,int phy_id,long rsrp_s,long rsrq_s,long rsrp_t,long rsrq_t);
|
ssize_t do_MeasurementReport(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size,
|
||||||
|
int measid, int phy_id,
|
||||||
|
long rsrp_s, long rsrq_s,
|
||||||
|
long rsrp_t, long rsrq_t);
|
||||||
|
|
||||||
ssize_t do_nrMeasurementReport(uint8_t *buffer,
|
ssize_t do_nrMeasurementReport(uint8_t *buffer,
|
||||||
size_t bufsize,
|
size_t bufsize,
|
||||||
@@ -357,7 +357,8 @@ ssize_t do_nrMeasurementReport(uint8_t *buffer,
|
|||||||
|
|
||||||
uint8_t do_DLInformationTransfer(uint8_t Mod_id, uint8_t **buffer, uint8_t transaction_id, uint32_t pdu_length, uint8_t *pdu_buffer);
|
uint8_t do_DLInformationTransfer(uint8_t Mod_id, uint8_t **buffer, uint8_t transaction_id, uint32_t pdu_length, uint8_t *pdu_buffer);
|
||||||
|
|
||||||
uint8_t do_Paging(uint8_t Mod_id, uint8_t *buffer, ue_paging_identity_t ue_paging_identity, cn_domain_t cn_domain);
|
uint8_t do_Paging(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size,
|
||||||
|
ue_paging_identity_t ue_paging_identity, cn_domain_t cn_domain);
|
||||||
|
|
||||||
uint8_t do_ULInformationTransfer(uint8_t **buffer, uint32_t pdu_length, uint8_t *pdu_buffer);
|
uint8_t do_ULInformationTransfer(uint8_t **buffer, uint32_t pdu_length, uint8_t *pdu_buffer);
|
||||||
|
|
||||||
@@ -375,6 +376,7 @@ uint8_t
|
|||||||
do_UECapabilityEnquiry(
|
do_UECapabilityEnquiry(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *const buffer,
|
uint8_t *const buffer,
|
||||||
|
size_t buffer_size,
|
||||||
const uint8_t Transaction_id,
|
const uint8_t Transaction_id,
|
||||||
int16_t eutra_band,
|
int16_t eutra_band,
|
||||||
uint32_t nr_band);
|
uint32_t nr_band);
|
||||||
@@ -383,6 +385,7 @@ uint8_t
|
|||||||
do_NR_UECapabilityEnquiry(
|
do_NR_UECapabilityEnquiry(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *const buffer,
|
uint8_t *const buffer,
|
||||||
|
size_t buffer_size,
|
||||||
const uint8_t Transaction_id,
|
const uint8_t Transaction_id,
|
||||||
int16_t eutra_band,
|
int16_t eutra_band,
|
||||||
uint32_t nr_band);
|
uint32_t nr_band);
|
||||||
@@ -390,6 +393,7 @@ do_NR_UECapabilityEnquiry(
|
|||||||
uint8_t do_SecurityModeCommand(
|
uint8_t do_SecurityModeCommand(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *const buffer,
|
uint8_t *const buffer,
|
||||||
|
size_t buffer_size,
|
||||||
const uint8_t Transaction_id,
|
const uint8_t Transaction_id,
|
||||||
const uint8_t cipheringAlgorithm,
|
const uint8_t cipheringAlgorithm,
|
||||||
const uint8_t integrityProtAlgorithm);
|
const uint8_t integrityProtAlgorithm);
|
||||||
|
|||||||
@@ -834,6 +834,7 @@ uint8_t do_UECapabilityEnquiry_NB_IoT(
|
|||||||
uint16_t do_RRCConnectionReconfiguration_NB_IoT(
|
uint16_t do_RRCConnectionReconfiguration_NB_IoT(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
uint8_t Transaction_id,
|
uint8_t Transaction_id,
|
||||||
LTE_SRB_ToAddModList_NB_r13_t *SRB1_list_NB, //SRB_ConfigList2 (default)--> only SRB1
|
LTE_SRB_ToAddModList_NB_r13_t *SRB1_list_NB, //SRB_ConfigList2 (default)--> only SRB1
|
||||||
LTE_DRB_ToAddModList_NB_r13_t *DRB_list_NB_IoT, //DRB_ConfigList (default)
|
LTE_DRB_ToAddModList_NB_r13_t *DRB_list_NB_IoT, //DRB_ConfigList (default)
|
||||||
@@ -886,7 +887,7 @@ uint16_t do_RRCConnectionReconfiguration_NB_IoT(
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&dl_dcch_msg_NB_IoT,
|
(void *)&dl_dcch_msg_NB_IoT,
|
||||||
buffer,
|
buffer,
|
||||||
RRC_BUF_SIZE);
|
buffer_size);
|
||||||
|
|
||||||
if (enc_rval.encoded <= 0) {
|
if (enc_rval.encoded <= 0) {
|
||||||
LOG_E(RRC, "ASN1 message encoding failed %s, %li\n",
|
LOG_E(RRC, "ASN1 message encoding failed %s, %li\n",
|
||||||
@@ -1020,7 +1021,8 @@ uint8_t do_DLInformationTransfer_NB_IoT(
|
|||||||
/*do_RRCConnectionReestablishment_NB-->used to re-establish SRB1*/ //which parameter to use?
|
/*do_RRCConnectionReestablishment_NB-->used to re-establish SRB1*/ //which parameter to use?
|
||||||
uint8_t do_RRCConnectionReestablishment_NB_IoT(
|
uint8_t do_RRCConnectionReestablishment_NB_IoT(
|
||||||
uint8_t Mod_id,
|
uint8_t Mod_id,
|
||||||
uint8_t *const buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
const uint8_t Transaction_id,
|
const uint8_t Transaction_id,
|
||||||
const NB_IoT_DL_FRAME_PARMS *const frame_parms, //to be changed
|
const NB_IoT_DL_FRAME_PARMS *const frame_parms, //to be changed
|
||||||
LTE_SRB_ToAddModList_NB_r13_t *SRB_list_NB_IoT) { //should contain SRB1 already configured?
|
LTE_SRB_ToAddModList_NB_r13_t *SRB_list_NB_IoT) { //should contain SRB1 already configured?
|
||||||
@@ -1046,7 +1048,7 @@ uint8_t do_RRCConnectionReestablishment_NB_IoT(
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&dl_ccch_msg_NB_IoT,
|
(void *)&dl_ccch_msg_NB_IoT,
|
||||||
buffer,
|
buffer,
|
||||||
RRC_BUF_SIZE);
|
buffer_size);
|
||||||
|
|
||||||
if (enc_rval.encoded <= 0) {
|
if (enc_rval.encoded <= 0) {
|
||||||
LOG_E(RRC, "ASN1 message encoding failed (%s, %li)!\n",
|
LOG_E(RRC, "ASN1 message encoding failed (%s, %li)!\n",
|
||||||
@@ -1065,6 +1067,7 @@ uint8_t do_RRCConnectionReestablishment_NB_IoT(
|
|||||||
uint8_t do_RRCConnectionRelease_NB_IoT(
|
uint8_t do_RRCConnectionRelease_NB_IoT(
|
||||||
uint8_t Mod_id,
|
uint8_t Mod_id,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
const uint8_t Transaction_id) {
|
const uint8_t Transaction_id) {
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
LTE_DL_DCCH_Message_NB_t dl_dcch_msg_NB_IoT;
|
LTE_DL_DCCH_Message_NB_t dl_dcch_msg_NB_IoT;
|
||||||
@@ -1087,7 +1090,7 @@ uint8_t do_RRCConnectionRelease_NB_IoT(
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&dl_dcch_msg_NB_IoT,
|
(void *)&dl_dcch_msg_NB_IoT,
|
||||||
buffer,
|
buffer,
|
||||||
RRC_BUF_SIZE);//check
|
buffer_size);
|
||||||
return((enc_rval.encoded+7)/8);
|
return((enc_rval.encoded+7)/8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -184,6 +184,7 @@ uint16_t
|
|||||||
do_RRCConnectionReconfiguration_NB_IoT(
|
do_RRCConnectionReconfiguration_NB_IoT(
|
||||||
const protocol_ctxt_t* const ctxt_pP,
|
const protocol_ctxt_t* const ctxt_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
uint8_t Transaction_id,
|
uint8_t Transaction_id,
|
||||||
SRB_ToAddModList_NB_r13_t *SRB_list_NB_IoT,
|
SRB_ToAddModList_NB_r13_t *SRB_list_NB_IoT,
|
||||||
DRB_ToAddModList_NB_r13_t *DRB_list_NB_IoT,
|
DRB_ToAddModList_NB_r13_t *DRB_list_NB_IoT,
|
||||||
@@ -255,8 +256,8 @@ do_RRCConnectionReject_NB_IoT(
|
|||||||
@param transaction_id Transaction index
|
@param transaction_id Transaction index
|
||||||
@returns Size of encoded bit stream in bytes*/
|
@returns Size of encoded bit stream in bytes*/
|
||||||
|
|
||||||
uint8_t do_RRCConnectionRelease_NB_IoT(uint8_t Mod_id, uint8_t *buffer,int Transaction_id);
|
uint8_t do_RRCConnectionRelease_NB_IoT(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size,
|
||||||
|
int Transaction_id);
|
||||||
|
|
||||||
uint8_t do_DLInformationTransfer_NB_IoT(
|
uint8_t do_DLInformationTransfer_NB_IoT(
|
||||||
uint8_t Mod_id,
|
uint8_t Mod_id,
|
||||||
@@ -279,7 +280,8 @@ uint8_t do_DLInformationTransfer_NB_IoT(
|
|||||||
|
|
||||||
uint8_t do_RRCConnectionReestablishment_NB_IoT(
|
uint8_t do_RRCConnectionReestablishment_NB_IoT(
|
||||||
uint8_t Mod_id,
|
uint8_t Mod_id,
|
||||||
uint8_t* const buffer,
|
uint8_t* buffer,
|
||||||
|
size_t buffer_size,
|
||||||
const uint8_t Transaction_id,
|
const uint8_t Transaction_id,
|
||||||
const NB_IoT_DL_FRAME_PARMS* const frame_parms, //to be changed
|
const NB_IoT_DL_FRAME_PARMS* const frame_parms, //to be changed
|
||||||
SRB_ToAddModList_NB_r13_t** SRB_configList_NB_IoT
|
SRB_ToAddModList_NB_r13_t** SRB_configList_NB_IoT
|
||||||
|
|||||||
@@ -147,7 +147,6 @@ typedef struct UE_RRC_INFO_NB_IoT_s {
|
|||||||
|
|
||||||
//Measurement Report not supported in NB-IoT
|
//Measurement Report not supported in NB-IoT
|
||||||
|
|
||||||
#define PAYLOAD_SIZE_MAX 1024
|
|
||||||
#define RRC_BUF_SIZE 8192
|
#define RRC_BUF_SIZE 8192
|
||||||
#define UNDEF_SECURITY_MODE 0xff
|
#define UNDEF_SECURITY_MODE 0xff
|
||||||
#define NO_SECURITY_MODE 0x20
|
#define NO_SECURITY_MODE 0x20
|
||||||
|
|||||||
@@ -456,6 +456,7 @@ void rrc_ue_generate_RRCConnectionRequest( const protocol_ctxt_t *const ctxt_pP,
|
|||||||
do_RRCConnectionRequest(
|
do_RRCConnectionRequest(
|
||||||
ctxt_pP->module_id,
|
ctxt_pP->module_id,
|
||||||
(uint8_t *)UE_rrc_inst[ctxt_pP->module_id].Srb0[eNB_index].Tx_buffer.Payload,
|
(uint8_t *)UE_rrc_inst[ctxt_pP->module_id].Srb0[eNB_index].Tx_buffer.Payload,
|
||||||
|
sizeof(UE_rrc_inst[ctxt_pP->module_id].Srb0[eNB_index].Tx_buffer.Payload),
|
||||||
rv);
|
rv);
|
||||||
LOG_I(RRC,"[UE %d] : Frame %d, Logical Channel UL-CCCH (SRB0), Generating RRCConnectionRequest (bytes %d, eNB %d)\n",
|
LOG_I(RRC,"[UE %d] : Frame %d, Logical Channel UL-CCCH (SRB0), Generating RRCConnectionRequest (bytes %d, eNB %d)\n",
|
||||||
ctxt_pP->module_id, ctxt_pP->frame, UE_rrc_inst[ctxt_pP->module_id].Srb0[eNB_index].Tx_buffer.payload_size, eNB_index);
|
ctxt_pP->module_id, ctxt_pP->frame, UE_rrc_inst[ctxt_pP->module_id].Srb0[eNB_index].Tx_buffer.payload_size, eNB_index);
|
||||||
@@ -4450,7 +4451,8 @@ void rrc_ue_generate_MeasurementReport(protocol_ctxt_t *const ctxt_pP, uint8_t e
|
|||||||
(long int)rsrq_s,
|
(long int)rsrq_s,
|
||||||
(long int)rsrp_t,
|
(long int)rsrp_t,
|
||||||
(long int)rsrq_t);
|
(long int)rsrq_t);
|
||||||
ssize_t size = do_MeasurementReport(ctxt_pP->module_id, buffer,measId,targetCellId,rsrp_s,rsrq_s,rsrp_t,rsrq_t);
|
ssize_t size = do_MeasurementReport(ctxt_pP->module_id, buffer, sizeof(buffer),
|
||||||
|
measId, targetCellId, rsrp_s, rsrq_s, rsrp_t, rsrq_t);
|
||||||
AssertFatal(size >= 0, "do_MeasurementReport failed \n");
|
AssertFatal(size >= 0, "do_MeasurementReport failed \n");
|
||||||
LOG_I(RRC, "[UE %d] Frame %d : Generating Measurement Report for eNB %d. Size is %zu\n",
|
LOG_I(RRC, "[UE %d] Frame %d : Generating Measurement Report for eNB %d. Size is %zu\n",
|
||||||
ctxt_pP->module_id, ctxt_pP->frame, eNB_index, size);
|
ctxt_pP->module_id, ctxt_pP->frame, eNB_index, size);
|
||||||
|
|||||||
@@ -328,7 +328,6 @@ typedef enum SL_TRIGGER_e {
|
|||||||
#define MAX_MEAS_CONFIG 7
|
#define MAX_MEAS_CONFIG 7
|
||||||
#define MAX_MEAS_ID 7
|
#define MAX_MEAS_ID 7
|
||||||
|
|
||||||
#define PAYLOAD_SIZE_MAX 1024
|
|
||||||
#define RRC_BUF_SIZE 8192
|
#define RRC_BUF_SIZE 8192
|
||||||
#define UNDEF_SECURITY_MODE 0xff
|
#define UNDEF_SECURITY_MODE 0xff
|
||||||
#define NO_SECURITY_MODE 0x20
|
#define NO_SECURITY_MODE 0x20
|
||||||
|
|||||||
+30
-13
@@ -537,6 +537,7 @@ init_MCCH(
|
|||||||
RC.rrc[enb_mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[sync_area] = do_MBSFNAreaConfig(enb_mod_idP,
|
RC.rrc[enb_mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[sync_area] = do_MBSFNAreaConfig(enb_mod_idP,
|
||||||
sync_area,
|
sync_area,
|
||||||
(uint8_t *)RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESSAGE[sync_area],
|
(uint8_t *)RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESSAGE[sync_area],
|
||||||
|
100, /* TODO: what is the actual size of .MCCH_MESSAGE[sync_area]? */
|
||||||
&RC.rrc[enb_mod_idP]->carrier[CC_id].mcch,
|
&RC.rrc[enb_mod_idP]->carrier[CC_id].mcch,
|
||||||
&RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message);
|
&RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message);
|
||||||
LOG_I(RRC, "mcch message pointer %p for sync area %d \n",
|
LOG_I(RRC, "mcch message pointer %p for sync area %d \n",
|
||||||
@@ -1230,6 +1231,7 @@ rrc_eNB_generate_SecurityModeCommand(
|
|||||||
size = do_SecurityModeCommand(
|
size = do_SecurityModeCommand(
|
||||||
ctxt_pP,
|
ctxt_pP,
|
||||||
buffer,
|
buffer,
|
||||||
|
sizeof(buffer),
|
||||||
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
|
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
|
||||||
ue_context_pP->ue_context.ciphering_algorithm,
|
ue_context_pP->ue_context.ciphering_algorithm,
|
||||||
ue_context_pP->ue_context.integrity_algorithm);
|
ue_context_pP->ue_context.integrity_algorithm);
|
||||||
@@ -1284,6 +1286,7 @@ rrc_eNB_generate_UECapabilityEnquiry(
|
|||||||
size = do_UECapabilityEnquiry(
|
size = do_UECapabilityEnquiry(
|
||||||
ctxt_pP,
|
ctxt_pP,
|
||||||
buffer,
|
buffer,
|
||||||
|
sizeof(buffer),
|
||||||
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
|
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
|
||||||
eutra_band,
|
eutra_band,
|
||||||
nr_band);
|
nr_band);
|
||||||
@@ -1334,6 +1337,7 @@ rrc_eNB_generate_NR_UECapabilityEnquiry(
|
|||||||
size = do_NR_UECapabilityEnquiry(
|
size = do_NR_UECapabilityEnquiry(
|
||||||
ctxt_pP,
|
ctxt_pP,
|
||||||
buffer,
|
buffer,
|
||||||
|
sizeof(buffer),
|
||||||
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
|
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
|
||||||
eutra_band,
|
eutra_band,
|
||||||
nr_band);
|
nr_band);
|
||||||
@@ -2000,9 +2004,10 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
|
|||||||
measurements_enabled = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2 ||
|
measurements_enabled = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2 ||
|
||||||
RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_measurement_reports;
|
RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_measurement_reports;
|
||||||
// send LTE_RRCConnectionReconfiguration
|
// send LTE_RRCConnectionReconfiguration
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, sizeof(buffer));
|
||||||
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
||||||
buffer,
|
buffer,
|
||||||
|
sizeof(buffer),
|
||||||
next_xid, //Transaction_id,
|
next_xid, //Transaction_id,
|
||||||
(LTE_SRB_ToAddModList_t *)*SRB_configList2, // SRB_configList
|
(LTE_SRB_ToAddModList_t *)*SRB_configList2, // SRB_configList
|
||||||
(LTE_DRB_ToAddModList_t *)DRB_configList,
|
(LTE_DRB_ToAddModList_t *)DRB_configList,
|
||||||
@@ -2198,7 +2203,7 @@ rrc_eNB_generate_RRCConnectionRelease(
|
|||||||
uint8_t buffer[RRC_BUF_SIZE];
|
uint8_t buffer[RRC_BUF_SIZE];
|
||||||
uint16_t size = 0;
|
uint16_t size = 0;
|
||||||
int release_num;
|
int release_num;
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, sizeof(buffer));
|
||||||
T(T_ENB_RRC_CONNECTION_RELEASE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
T(T_ENB_RRC_CONNECTION_RELEASE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
|
||||||
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
|
||||||
#if 0
|
#if 0
|
||||||
@@ -2210,7 +2215,8 @@ rrc_eNB_generate_RRCConnectionRelease(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
size = do_RRCConnectionRelease(ctxt_pP->module_id, buffer,rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id));
|
size = do_RRCConnectionRelease(ctxt_pP->module_id, buffer, sizeof(buffer),
|
||||||
|
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id));
|
||||||
ue_context_pP->ue_context.ue_reestablishment_timer = 0;
|
ue_context_pP->ue_context.ue_reestablishment_timer = 0;
|
||||||
ue_context_pP->ue_context.ue_release_timer = 0;
|
ue_context_pP->ue_context.ue_release_timer = 0;
|
||||||
ue_context_pP->ue_context.ue_rrc_inactivity_timer = 0;
|
ue_context_pP->ue_context.ue_rrc_inactivity_timer = 0;
|
||||||
@@ -2486,9 +2492,10 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t *co
|
|||||||
LOG_W(RRC,"dedlicated NAS list is empty\n");
|
LOG_W(RRC,"dedlicated NAS list is empty\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, sizeof(buffer));
|
||||||
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
||||||
buffer,
|
buffer,
|
||||||
|
sizeof(buffer),
|
||||||
xid,
|
xid,
|
||||||
(LTE_SRB_ToAddModList_t *)NULL,
|
(LTE_SRB_ToAddModList_t *)NULL,
|
||||||
(LTE_DRB_ToAddModList_t *)*DRB_configList2,
|
(LTE_DRB_ToAddModList_t *)*DRB_configList2,
|
||||||
@@ -2733,9 +2740,9 @@ rrc_eNB_modify_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t *cons
|
|||||||
LOG_W(RRC,"dedlicated NAS list is empty\n");
|
LOG_W(RRC,"dedlicated NAS list is empty\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, sizeof(buffer));
|
||||||
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
||||||
buffer,
|
buffer, sizeof(buffer),
|
||||||
xid,
|
xid,
|
||||||
(LTE_SRB_ToAddModList_t *)NULL,
|
(LTE_SRB_ToAddModList_t *)NULL,
|
||||||
(LTE_DRB_ToAddModList_t *)DRB_configList2,
|
(LTE_DRB_ToAddModList_t *)DRB_configList2,
|
||||||
@@ -2834,9 +2841,10 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration_release( const protocol_
|
|||||||
LOG_W(RRC,"dedlicated NAS list is empty\n");
|
LOG_W(RRC,"dedlicated NAS list is empty\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, sizeof(buffer));
|
||||||
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
||||||
buffer,
|
buffer,
|
||||||
|
sizeof(buffer),
|
||||||
xid,
|
xid,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
@@ -3544,9 +3552,10 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
|
|||||||
|
|
||||||
measurements_enabled = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2 ||
|
measurements_enabled = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2 ||
|
||||||
RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_measurement_reports;
|
RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_measurement_reports;
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, sizeof(buffer));
|
||||||
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
||||||
buffer,
|
buffer,
|
||||||
|
sizeof(buffer),
|
||||||
xid, // Transaction_id,
|
xid, // Transaction_id,
|
||||||
(LTE_SRB_ToAddModList_t *) *SRB_configList2, // SRB_configList
|
(LTE_SRB_ToAddModList_t *) *SRB_configList2, // SRB_configList
|
||||||
(LTE_DRB_ToAddModList_t *) *DRB_configList,
|
(LTE_DRB_ToAddModList_t *) *DRB_configList,
|
||||||
@@ -4260,9 +4269,10 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
|
|||||||
|
|
||||||
measurements_enabled = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2 ||
|
measurements_enabled = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2 ||
|
||||||
RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_measurement_reports;
|
RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_measurement_reports;
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, sizeof(buffer));
|
||||||
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
||||||
buffer,
|
buffer,
|
||||||
|
sizeof(buffer),
|
||||||
xid, // Transaction_id,
|
xid, // Transaction_id,
|
||||||
(LTE_SRB_ToAddModList_t *) *SRB_configList2, // SRB_configList
|
(LTE_SRB_ToAddModList_t *) *SRB_configList2, // SRB_configList
|
||||||
(LTE_DRB_ToAddModList_t *) *DRB_configList,
|
(LTE_DRB_ToAddModList_t *) *DRB_configList,
|
||||||
@@ -4360,6 +4370,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_SCell(
|
|||||||
|
|
||||||
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
||||||
buffer,
|
buffer,
|
||||||
|
sizeof(buffer),
|
||||||
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),//Transaction_id,
|
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),//Transaction_id,
|
||||||
(LTE_SRB_ToAddModList_t *)NULL,
|
(LTE_SRB_ToAddModList_t *)NULL,
|
||||||
(LTE_DRB_ToAddModList_t *)NULL,
|
(LTE_DRB_ToAddModList_t *)NULL,
|
||||||
@@ -5155,7 +5166,9 @@ check_handovers(
|
|||||||
// Configure target
|
// Configure target
|
||||||
ue_context_p->ue_context.handover_info->state = HO_FORWARDING;
|
ue_context_p->ue_context.handover_info->state = HO_FORWARDING;
|
||||||
msg = itti_alloc_new_message(TASK_RRC_ENB, 0, X2AP_HANDOVER_REQ_ACK);
|
msg = itti_alloc_new_message(TASK_RRC_ENB, 0, X2AP_HANDOVER_REQ_ACK);
|
||||||
rrc_eNB_generate_HO_RRCConnectionReconfiguration(ctxt_pP, ue_context_p, X2AP_HANDOVER_REQ_ACK(msg).rrc_buffer,
|
rrc_eNB_generate_HO_RRCConnectionReconfiguration(ctxt_pP, ue_context_p,
|
||||||
|
X2AP_HANDOVER_REQ_ACK(msg).rrc_buffer,
|
||||||
|
RRC_BUF_SIZE, // TODO: supposed to be size of the .rrc_buffer. Is this right?
|
||||||
&X2AP_HANDOVER_REQ_ACK(msg).rrc_buffer_size);
|
&X2AP_HANDOVER_REQ_ACK(msg).rrc_buffer_size);
|
||||||
rrc_eNB_configure_rbs_handover(ue_context_p,ctxt_pP);
|
rrc_eNB_configure_rbs_handover(ue_context_p,ctxt_pP);
|
||||||
X2AP_HANDOVER_REQ_ACK(msg).rnti = ue_context_p->ue_context.rnti;
|
X2AP_HANDOVER_REQ_ACK(msg).rnti = ue_context_p->ue_context.rnti;
|
||||||
@@ -5317,6 +5330,7 @@ void
|
|||||||
rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ctxt_pP,
|
rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ctxt_pP,
|
||||||
rrc_eNB_ue_context_t *const ue_context_pP,
|
rrc_eNB_ue_context_t *const ue_context_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
int *_size
|
int *_size
|
||||||
//const uint8_t ho_state
|
//const uint8_t ho_state
|
||||||
)
|
)
|
||||||
@@ -6258,11 +6272,12 @@ rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ct
|
|||||||
|
|
||||||
measurements_enabled = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2 ||
|
measurements_enabled = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_x2 ||
|
||||||
RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_measurement_reports;
|
RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]->configuration.enable_measurement_reports;
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, buffer_size);
|
||||||
char rrc_buf[1000 /* arbitrary, should be big enough, has to be less than size of return buf by a few bits/bytes */];
|
char rrc_buf[1000 /* arbitrary, should be big enough, has to be less than size of return buf by a few bits/bytes */];
|
||||||
int rrc_size;
|
int rrc_size;
|
||||||
rrc_size = do_RRCConnectionReconfiguration(ctxt_pP,
|
rrc_size = do_RRCConnectionReconfiguration(ctxt_pP,
|
||||||
(unsigned char *)rrc_buf,
|
(unsigned char *)rrc_buf,
|
||||||
|
sizeof(rrc_buf),
|
||||||
xid, //Transaction_id,
|
xid, //Transaction_id,
|
||||||
NULL, // SRB_configList
|
NULL, // SRB_configList
|
||||||
NULL,
|
NULL,
|
||||||
@@ -6298,7 +6313,7 @@ rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ct
|
|||||||
char *ho_buf = (char *)buffer;
|
char *ho_buf = (char *)buffer;
|
||||||
int ho_size;
|
int ho_size;
|
||||||
ho_size = do_HandoverCommand(
|
ho_size = do_HandoverCommand(
|
||||||
ho_buf, 1024 /* TODO: this is the value found in struct x2ap_handover_req_ack_s for array rrc_buffer */,
|
ho_buf, buffer_size,
|
||||||
rrc_buf,
|
rrc_buf,
|
||||||
rrc_size);
|
rrc_size);
|
||||||
*_size = size = ho_size;
|
*_size = size = ho_size;
|
||||||
@@ -10042,7 +10057,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(
|
|||||||
{
|
{
|
||||||
uint8_t buffer[RRC_BUF_SIZE];
|
uint8_t buffer[RRC_BUF_SIZE];
|
||||||
uint16_t size = 0;
|
uint16_t size = 0;
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, sizeof(buffer));
|
||||||
|
|
||||||
// allocate dedicated pools for UE -sl-CommConfig/sl-DiscConfig (sl-V2X-ConfigDedicated)
|
// allocate dedicated pools for UE -sl-CommConfig/sl-DiscConfig (sl-V2X-ConfigDedicated)
|
||||||
//populate dedicated resources for SL communication (sl-CommConfig)
|
//populate dedicated resources for SL communication (sl-CommConfig)
|
||||||
@@ -10055,6 +10070,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(
|
|||||||
sl_CommConfig[0] = rrc_eNB_get_sidelink_commTXPool(ctxt_pP, ue_context_pP, destinationInfoList);
|
sl_CommConfig[0] = rrc_eNB_get_sidelink_commTXPool(ctxt_pP, ue_context_pP, destinationInfoList);
|
||||||
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
||||||
buffer,
|
buffer,
|
||||||
|
sizeof(buffer),
|
||||||
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), //Transaction_id
|
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), //Transaction_id
|
||||||
(LTE_SRB_ToAddModList_t *)NULL,
|
(LTE_SRB_ToAddModList_t *)NULL,
|
||||||
(LTE_DRB_ToAddModList_t *)NULL,
|
(LTE_DRB_ToAddModList_t *)NULL,
|
||||||
@@ -10077,6 +10093,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(
|
|||||||
sl_DiscConfig[0] = rrc_eNB_get_sidelink_discTXPool(ctxt_pP, ue_context_pP, n_discoveryMessages );
|
sl_DiscConfig[0] = rrc_eNB_get_sidelink_discTXPool(ctxt_pP, ue_context_pP, n_discoveryMessages );
|
||||||
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
||||||
buffer,
|
buffer,
|
||||||
|
sizeof(buffer),
|
||||||
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), //Transaction_id
|
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), //Transaction_id
|
||||||
(LTE_SRB_ToAddModList_t *)NULL,
|
(LTE_SRB_ToAddModList_t *)NULL,
|
||||||
(LTE_DRB_ToAddModList_t *)NULL,
|
(LTE_DRB_ToAddModList_t *)NULL,
|
||||||
|
|||||||
@@ -1970,7 +1970,7 @@ int rrc_eNB_process_PAGING_IND(MessageDef *msg_p, const char *msg_name, instance
|
|||||||
message_p = itti_alloc_new_message (TASK_RRC_ENB, 0, RRC_PCCH_DATA_REQ);
|
message_p = itti_alloc_new_message (TASK_RRC_ENB, 0, RRC_PCCH_DATA_REQ);
|
||||||
/* Create message for PDCP (DLInformationTransfer_t) */
|
/* Create message for PDCP (DLInformationTransfer_t) */
|
||||||
length = do_Paging (instance,
|
length = do_Paging (instance,
|
||||||
buffer,
|
buffer, sizeof(buffer),
|
||||||
S1AP_PAGING_IND(msg_p).ue_paging_identity,
|
S1AP_PAGING_IND(msg_p).ue_paging_identity,
|
||||||
S1AP_PAGING_IND(msg_p).cn_domain);
|
S1AP_PAGING_IND(msg_p).cn_domain);
|
||||||
|
|
||||||
|
|||||||
@@ -313,6 +313,7 @@ void
|
|||||||
rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ctxt_pP,
|
rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ctxt_pP,
|
||||||
rrc_eNB_ue_context_t *const ue_context_pP,
|
rrc_eNB_ue_context_t *const ue_context_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
int *_size
|
int *_size
|
||||||
//const uint8_t ho_state
|
//const uint8_t ho_state
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1538,6 +1538,7 @@ uint8_t do_NR_SA_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
|||||||
|
|
||||||
|
|
||||||
uint8_t do_NR_RRCRelease(uint8_t *buffer,
|
uint8_t do_NR_RRCRelease(uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
uint8_t Transaction_id) {
|
uint8_t Transaction_id) {
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
NR_DL_DCCH_Message_t dl_dcch_msg;
|
NR_DL_DCCH_Message_t dl_dcch_msg;
|
||||||
@@ -1563,7 +1564,7 @@ uint8_t do_NR_RRCRelease(uint8_t *buffer,
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&dl_dcch_msg,
|
(void *)&dl_dcch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
RRC_BUF_SIZE);
|
buffer_size);
|
||||||
if(enc_rval.encoded == -1) {
|
if(enc_rval.encoded == -1) {
|
||||||
LOG_I(NR_RRC, "[gNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_I(NR_RRC, "[gNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
@@ -1576,6 +1577,7 @@ uint8_t do_NR_RRCRelease(uint8_t *buffer,
|
|||||||
int16_t do_RRCReconfiguration(
|
int16_t do_RRCReconfiguration(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
uint8_t Transaction_id,
|
uint8_t Transaction_id,
|
||||||
NR_SRB_ToAddModList_t *SRB_configList,
|
NR_SRB_ToAddModList_t *SRB_configList,
|
||||||
NR_DRB_ToAddModList_t *DRB_configList,
|
NR_DRB_ToAddModList_t *DRB_configList,
|
||||||
@@ -1671,7 +1673,7 @@ int16_t do_RRCReconfiguration(
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&dl_dcch_msg,
|
(void *)&dl_dcch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
1000);
|
buffer_size);
|
||||||
|
|
||||||
if(enc_rval.encoded == -1) {
|
if(enc_rval.encoded == -1) {
|
||||||
LOG_I(NR_RRC, "[gNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
LOG_I(NR_RRC, "[gNB AssertFatal]ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
@@ -1696,7 +1698,7 @@ int16_t do_RRCReconfiguration(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint8_t do_RRCSetupRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv) {
|
uint8_t do_RRCSetupRequest(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size, uint8_t *rv) {
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
uint8_t buf[5],buf2=0;
|
uint8_t buf[5],buf2=0;
|
||||||
NR_UL_CCCH_Message_t ul_ccch_msg;
|
NR_UL_CCCH_Message_t ul_ccch_msg;
|
||||||
@@ -1740,7 +1742,7 @@ uint8_t do_RRCSetupRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv) {
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&ul_ccch_msg,
|
(void *)&ul_ccch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
buffer_size);
|
||||||
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded);
|
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
LOG_D(NR_RRC,"[UE] RRCSetupRequest Encoded %zd bits (%zd bytes)\n", enc_rval.encoded, (enc_rval.encoded+7)/8);
|
LOG_D(NR_RRC,"[UE] RRCSetupRequest Encoded %zd bits (%zd bytes)\n", enc_rval.encoded, (enc_rval.encoded+7)/8);
|
||||||
return((enc_rval.encoded+7)/8);
|
return((enc_rval.encoded+7)/8);
|
||||||
@@ -1784,6 +1786,7 @@ uint8_t
|
|||||||
do_NR_RRCReconfigurationComplete(
|
do_NR_RRCReconfigurationComplete(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
const uint8_t Transaction_id
|
const uint8_t Transaction_id
|
||||||
)
|
)
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
@@ -1811,14 +1814,15 @@ do_NR_RRCReconfigurationComplete(
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&ul_dcch_msg,
|
(void *)&ul_dcch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
buffer_size);
|
||||||
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
|
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
enc_rval.failed_type->name, enc_rval.encoded);
|
enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
LOG_I(NR_RRC,"rrcReconfigurationComplete Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
|
LOG_I(NR_RRC,"rrcReconfigurationComplete Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
|
||||||
return((enc_rval.encoded+7)/8);
|
return((enc_rval.encoded+7)/8);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t do_RRCSetupComplete(uint8_t Mod_id, uint8_t *buffer, const uint8_t Transaction_id, uint8_t sel_plmn_id, const int dedicatedInfoNASLength, const char *dedicatedInfoNAS){
|
uint8_t do_RRCSetupComplete(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size,
|
||||||
|
const uint8_t Transaction_id, uint8_t sel_plmn_id, const int dedicatedInfoNASLength, const char *dedicatedInfoNAS){
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
|
|
||||||
NR_UL_DCCH_Message_t ul_dcch_msg;
|
NR_UL_DCCH_Message_t ul_dcch_msg;
|
||||||
@@ -1861,7 +1865,7 @@ enc_rval = uper_encode_to_buffer(&asn_DEF_NR_UL_DCCH_Message,
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&ul_dcch_msg,
|
(void *)&ul_dcch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
buffer_size);
|
||||||
AssertFatal(enc_rval.encoded > 0,"ASN1 message encoding failed (%s, %lu)!\n",
|
AssertFatal(enc_rval.encoded > 0,"ASN1 message encoding failed (%s, %lu)!\n",
|
||||||
enc_rval.failed_type->name,enc_rval.encoded);
|
enc_rval.failed_type->name,enc_rval.encoded);
|
||||||
LOG_D(NR_RRC,"RRCSetupComplete Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
|
LOG_D(NR_RRC,"RRCSetupComplete Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8);
|
||||||
@@ -1976,6 +1980,7 @@ const protocol_ctxt_t *const ctxt_pP,
|
|||||||
rrc_gNB_ue_context_t *const ue_context_pP,
|
rrc_gNB_ue_context_t *const ue_context_pP,
|
||||||
int CC_id,
|
int CC_id,
|
||||||
uint8_t *const buffer,
|
uint8_t *const buffer,
|
||||||
|
size_t buffer_size,
|
||||||
//const uint8_t transmission_mode,
|
//const uint8_t transmission_mode,
|
||||||
const uint8_t Transaction_id,
|
const uint8_t Transaction_id,
|
||||||
NR_SRB_ToAddModList_t **SRB_configList
|
NR_SRB_ToAddModList_t **SRB_configList
|
||||||
@@ -2098,7 +2103,7 @@ NR_SRB_ToAddModList_t **SRB_configList
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint8_t
|
uint8_t
|
||||||
do_RRCReestablishmentComplete(uint8_t *buffer, int64_t rrc_TransactionIdentifier) {
|
do_RRCReestablishmentComplete(uint8_t *buffer, size_t buffer_size, int64_t rrc_TransactionIdentifier) {
|
||||||
asn_enc_rval_t enc_rval;
|
asn_enc_rval_t enc_rval;
|
||||||
NR_UL_DCCH_Message_t ul_dcch_msg;
|
NR_UL_DCCH_Message_t ul_dcch_msg;
|
||||||
NR_RRCReestablishmentComplete_t *rrcReestablishmentComplete;
|
NR_RRCReestablishmentComplete_t *rrcReestablishmentComplete;
|
||||||
@@ -2124,7 +2129,7 @@ do_RRCReestablishmentComplete(uint8_t *buffer, int64_t rrc_TransactionIdentifier
|
|||||||
NULL,
|
NULL,
|
||||||
(void *)&ul_dcch_msg,
|
(void *)&ul_dcch_msg,
|
||||||
buffer,
|
buffer,
|
||||||
100);
|
buffer_size);
|
||||||
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded);
|
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
LOG_D(NR_RRC,"[UE] RRCReestablishmentComplete Encoded %zd bits (%zd bytes)\n", enc_rval.encoded, (enc_rval.encoded+7)/8);
|
LOG_D(NR_RRC,"[UE] RRCReestablishmentComplete Encoded %zd bits (%zd bytes)\n", enc_rval.encoded, (enc_rval.encoded+7)/8);
|
||||||
return((enc_rval.encoded+7)/8);
|
return((enc_rval.encoded+7)/8);
|
||||||
|
|||||||
@@ -28,6 +28,8 @@
|
|||||||
* \email: raymond.knopp@eurecom.fr and navid.nikaein@eurecom.fr, kroempa@gmail.com
|
* \email: raymond.knopp@eurecom.fr and navid.nikaein@eurecom.fr, kroempa@gmail.com
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <stdlib.h> /* for atoi(3) */
|
#include <stdlib.h> /* for atoi(3) */
|
||||||
@@ -116,12 +118,13 @@ uint8_t do_NR_SA_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
|||||||
uint8_t *const buffer,
|
uint8_t *const buffer,
|
||||||
const uint8_t Transaction_id);
|
const uint8_t Transaction_id);
|
||||||
|
|
||||||
uint8_t do_NR_RRCRelease(uint8_t *buffer,
|
uint8_t do_NR_RRCRelease(uint8_t *buffer, size_t buffer_size,
|
||||||
uint8_t Transaction_id);
|
uint8_t Transaction_id);
|
||||||
|
|
||||||
int16_t do_RRCReconfiguration(
|
int16_t do_RRCReconfiguration(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
uint8_t Transaction_id,
|
uint8_t Transaction_id,
|
||||||
NR_SRB_ToAddModList_t *SRB_configList,
|
NR_SRB_ToAddModList_t *SRB_configList,
|
||||||
NR_DRB_ToAddModList_t *DRB_configList,
|
NR_DRB_ToAddModList_t *DRB_configList,
|
||||||
@@ -132,21 +135,23 @@ int16_t do_RRCReconfiguration(
|
|||||||
struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList *dedicatedNAS_MessageList,
|
struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList *dedicatedNAS_MessageList,
|
||||||
NR_MAC_CellGroupConfig_t *mac_CellGroupConfig,
|
NR_MAC_CellGroupConfig_t *mac_CellGroupConfig,
|
||||||
NR_CellGroupConfig_t *cellGroupConfig);
|
NR_CellGroupConfig_t *cellGroupConfig);
|
||||||
|
|
||||||
uint8_t do_RRCSetupComplete(uint8_t Mod_id,
|
uint8_t do_RRCSetupComplete(uint8_t Mod_id,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
const uint8_t Transaction_id,
|
size_t buffer_size,
|
||||||
uint8_t sel_plmn_id,
|
const uint8_t Transaction_id,
|
||||||
const int dedicatedInfoNASLength,
|
uint8_t sel_plmn_id,
|
||||||
|
const int dedicatedInfoNASLength,
|
||||||
const char *dedicatedInfoNAS);
|
const char *dedicatedInfoNAS);
|
||||||
|
|
||||||
uint8_t do_RRCSetupRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv);
|
uint8_t do_RRCSetupRequest(uint8_t Mod_id, uint8_t *buffer, size_t buffer_size, uint8_t *rv);
|
||||||
|
|
||||||
uint8_t do_NR_RRCReconfigurationComplete_for_nsa(uint8_t *buffer, size_t buffer_size, NR_RRC_TransactionIdentifier_t Transaction_id);
|
uint8_t do_NR_RRCReconfigurationComplete_for_nsa(uint8_t *buffer, size_t buffer_size, NR_RRC_TransactionIdentifier_t Transaction_id);
|
||||||
|
|
||||||
uint8_t do_NR_RRCReconfigurationComplete(
|
uint8_t do_NR_RRCReconfigurationComplete(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
const uint8_t Transaction_id
|
const uint8_t Transaction_id
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -171,6 +176,7 @@ do_RRCReestablishment(
|
|||||||
rrc_gNB_ue_context_t *const ue_context_pP,
|
rrc_gNB_ue_context_t *const ue_context_pP,
|
||||||
int CC_id,
|
int CC_id,
|
||||||
uint8_t *const buffer,
|
uint8_t *const buffer,
|
||||||
|
size_t buffer_size,
|
||||||
//const uint8_t transmission_mode,
|
//const uint8_t transmission_mode,
|
||||||
const uint8_t Transaction_id,
|
const uint8_t Transaction_id,
|
||||||
NR_SRB_ToAddModList_t **SRB_configList
|
NR_SRB_ToAddModList_t **SRB_configList
|
||||||
@@ -178,6 +184,6 @@ do_RRCReestablishment(
|
|||||||
|
|
||||||
uint8_t
|
uint8_t
|
||||||
do_RRCReestablishmentComplete(
|
do_RRCReestablishmentComplete(
|
||||||
uint8_t *buffer,
|
uint8_t *buffer, size_t buffer_size,
|
||||||
int64_t rrc_TransactionIdentifier);
|
int64_t rrc_TransactionIdentifier);
|
||||||
|
|
||||||
|
|||||||
@@ -127,7 +127,6 @@ typedef enum UE_STATE_NR_e {
|
|||||||
#define MAX_MEAS_CONFIG 7
|
#define MAX_MEAS_CONFIG 7
|
||||||
#define MAX_MEAS_ID 7
|
#define MAX_MEAS_ID 7
|
||||||
|
|
||||||
#define PAYLOAD_SIZE_MAX 1024
|
|
||||||
#define RRC_BUF_SIZE 8192
|
#define RRC_BUF_SIZE 8192
|
||||||
#define UNDEF_SECURITY_MODE 0xff
|
#define UNDEF_SECURITY_MODE 0xff
|
||||||
#define NO_SECURITY_MODE 0x20
|
#define NO_SECURITY_MODE 0x20
|
||||||
|
|||||||
+12
-10
@@ -833,8 +833,8 @@ rrc_gNB_generate_defaultRRCReconfiguration(
|
|||||||
dedicatedNAS_MessageList = NULL;
|
dedicatedNAS_MessageList = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, sizeof(buffer));
|
||||||
size = do_RRCReconfiguration(ctxt_pP, buffer,
|
size = do_RRCReconfiguration(ctxt_pP, buffer, sizeof(buffer),
|
||||||
xid,
|
xid,
|
||||||
NULL, //*SRB_configList2,
|
NULL, //*SRB_configList2,
|
||||||
NULL, //*DRB_configList,
|
NULL, //*DRB_configList,
|
||||||
@@ -1089,10 +1089,10 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
|
|||||||
dedicatedNAS_MessageList = NULL;
|
dedicatedNAS_MessageList = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, sizeof(buffer));
|
||||||
cellGroupConfig = calloc(1, sizeof(NR_CellGroupConfig_t));
|
cellGroupConfig = calloc(1, sizeof(NR_CellGroupConfig_t));
|
||||||
fill_mastercellGroupConfig(cellGroupConfig, ue_context_pP->ue_context.masterCellGroup);
|
fill_mastercellGroupConfig(cellGroupConfig, ue_context_pP->ue_context.masterCellGroup);
|
||||||
size = do_RRCReconfiguration(ctxt_pP, buffer,
|
size = do_RRCReconfiguration(ctxt_pP, buffer, sizeof(buffer),
|
||||||
xid,
|
xid,
|
||||||
*SRB_configList2,
|
*SRB_configList2,
|
||||||
*DRB_configList,
|
*DRB_configList,
|
||||||
@@ -1200,8 +1200,8 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
|
|||||||
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, sizeof(buffer));
|
||||||
size = do_RRCReconfiguration(ctxt_pP, buffer, xid,
|
size = do_RRCReconfiguration(ctxt_pP, buffer, sizeof(buffer), xid,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
*DRB_Release_configList2,
|
*DRB_Release_configList2,
|
||||||
@@ -1462,6 +1462,7 @@ rrc_gNB_generate_RRCReestablishment(
|
|||||||
ue_context_pP,
|
ue_context_pP,
|
||||||
CC_id,
|
CC_id,
|
||||||
(uint8_t *) ue_context->Srb0.Tx_buffer.Payload,
|
(uint8_t *) ue_context->Srb0.Tx_buffer.Payload,
|
||||||
|
sizeof(ue_context->Srb0.Tx_buffer.Payload),
|
||||||
//(uint8_t) carrier->p_gNB, // at this point we do not have the UE capability information, so it can only be TM1 or TM2
|
//(uint8_t) carrier->p_gNB, // at this point we do not have the UE capability information, so it can only be TM1 or TM2
|
||||||
rrc_gNB_get_next_transaction_identifier(module_id),
|
rrc_gNB_get_next_transaction_identifier(module_id),
|
||||||
SRB_configList
|
SRB_configList
|
||||||
@@ -1717,9 +1718,9 @@ rrc_gNB_process_RRCConnectionReestablishmentComplete(
|
|||||||
i, ue_context_pP->ue_context.pduSession[i].status, "PDU_SESSION_STATUS_DONE");
|
i, ue_context_pP->ue_context.pduSession[i].status, "PDU_SESSION_STATUS_DONE");
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, sizeof(buffer));
|
||||||
|
|
||||||
size = do_RRCReconfiguration(ctxt_pP, buffer,
|
size = do_RRCReconfiguration(ctxt_pP, buffer, sizeof(buffer),
|
||||||
xid,
|
xid,
|
||||||
*SRB_configList2,
|
*SRB_configList2,
|
||||||
DRB_configList,
|
DRB_configList,
|
||||||
@@ -3546,9 +3547,10 @@ rrc_gNB_generate_RRCRelease(
|
|||||||
uint8_t buffer[RRC_BUF_SIZE];
|
uint8_t buffer[RRC_BUF_SIZE];
|
||||||
uint16_t size = 0;
|
uint16_t size = 0;
|
||||||
|
|
||||||
memset(buffer, 0, RRC_BUF_SIZE);
|
memset(buffer, 0, sizeof(buffer));
|
||||||
|
|
||||||
size = do_NR_RRCRelease(buffer,rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id));
|
size = do_NR_RRCRelease(buffer, sizeof(buffer),
|
||||||
|
rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id));
|
||||||
ue_context_pP->ue_context.ue_reestablishment_timer = 0;
|
ue_context_pP->ue_context.ue_reestablishment_timer = 0;
|
||||||
ue_context_pP->ue_context.ue_release_timer = 0;
|
ue_context_pP->ue_context.ue_release_timer = 0;
|
||||||
ue_context_pP->ue_context.ul_failure_timer = 0;
|
ue_context_pP->ue_context.ul_failure_timer = 0;
|
||||||
|
|||||||
@@ -116,6 +116,7 @@ nr_sa_rrc_ue_process_radioBearerConfig(
|
|||||||
uint8_t do_NR_RRCReconfigurationComplete(
|
uint8_t do_NR_RRCReconfigurationComplete(
|
||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
uint8_t *buffer,
|
uint8_t *buffer,
|
||||||
|
size_t buffer_size,
|
||||||
const uint8_t Transaction_id
|
const uint8_t Transaction_id
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -1375,7 +1376,8 @@ static void rrc_ue_generate_RRCSetupComplete(
|
|||||||
nas_msg = nr_nas_attach_req_imsi;
|
nas_msg = nr_nas_attach_req_imsi;
|
||||||
nas_msg_length = sizeof(nr_nas_attach_req_imsi);
|
nas_msg_length = sizeof(nr_nas_attach_req_imsi);
|
||||||
}
|
}
|
||||||
size = do_RRCSetupComplete(ctxt_pP->module_id,buffer,Transaction_id,sel_plmn_id,nas_msg_length,nas_msg);
|
size = do_RRCSetupComplete(ctxt_pP->module_id, buffer, sizeof(buffer),
|
||||||
|
Transaction_id, sel_plmn_id, nas_msg_length, nas_msg);
|
||||||
LOG_I(NR_RRC,"[UE %d][RAPROC] Frame %d : Logical Channel UL-DCCH (SRB1), Generating RRCSetupComplete (bytes%d, gNB %d)\n",
|
LOG_I(NR_RRC,"[UE %d][RAPROC] Frame %d : Logical Channel UL-DCCH (SRB1), Generating RRCSetupComplete (bytes%d, gNB %d)\n",
|
||||||
ctxt_pP->module_id,ctxt_pP->frame, size, gNB_index);
|
ctxt_pP->module_id,ctxt_pP->frame, size, gNB_index);
|
||||||
LOG_D(NR_RRC,
|
LOG_D(NR_RRC,
|
||||||
@@ -1780,6 +1782,7 @@ int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB
|
|||||||
do_RRCSetupRequest(
|
do_RRCSetupRequest(
|
||||||
module_id,
|
module_id,
|
||||||
(uint8_t *)NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.Payload,
|
(uint8_t *)NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.Payload,
|
||||||
|
sizeof(NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.Payload),
|
||||||
rv);
|
rv);
|
||||||
LOG_I(NR_RRC,"[UE %d] : Logical Channel UL-CCCH (SRB0), Generating RRCSetupRequest (bytes %d, gNB %d)\n",
|
LOG_I(NR_RRC,"[UE %d] : Logical Channel UL-CCCH (SRB0), Generating RRCSetupRequest (bytes %d, gNB %d)\n",
|
||||||
module_id, NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.payload_size, gNB_index);
|
module_id, NR_UE_rrc_inst[module_id].Srb0[gNB_index].Tx_buffer.payload_size, gNB_index);
|
||||||
@@ -2246,7 +2249,7 @@ nr_rrc_ue_establish_srb2(
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void nr_rrc_ue_generate_RRCReconfigurationComplete( const protocol_ctxt_t *const ctxt_pP, const uint8_t gNB_index, const uint8_t Transaction_id ) {
|
void nr_rrc_ue_generate_RRCReconfigurationComplete( const protocol_ctxt_t *const ctxt_pP, const uint8_t gNB_index, const uint8_t Transaction_id ) {
|
||||||
uint8_t buffer[32], size;
|
uint8_t buffer[32], size;
|
||||||
size = do_NR_RRCReconfigurationComplete(ctxt_pP, buffer, Transaction_id);
|
size = do_NR_RRCReconfigurationComplete(ctxt_pP, buffer, sizeof(buffer), Transaction_id);
|
||||||
LOG_I(NR_RRC,PROTOCOL_RRC_CTXT_UE_FMT" Logical Channel UL-DCCH (SRB1), Generating RRCReconfigurationComplete (bytes %d, gNB_index %d)\n",
|
LOG_I(NR_RRC,PROTOCOL_RRC_CTXT_UE_FMT" Logical Channel UL-DCCH (SRB1), Generating RRCReconfigurationComplete (bytes %d, gNB_index %d)\n",
|
||||||
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), size, gNB_index);
|
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), size, gNB_index);
|
||||||
LOG_D(RLC,
|
LOG_D(RLC,
|
||||||
@@ -2290,6 +2293,7 @@ nr_rrc_ue_establish_srb2(
|
|||||||
const protocol_ctxt_t *const ctxt_pP,
|
const protocol_ctxt_t *const ctxt_pP,
|
||||||
const srb_id_t Srb_id,
|
const srb_id_t Srb_id,
|
||||||
const uint8_t *const Buffer,
|
const uint8_t *const Buffer,
|
||||||
|
size_t Buffer_size,
|
||||||
const uint8_t gNB_indexP
|
const uint8_t gNB_indexP
|
||||||
)
|
)
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -2310,7 +2314,7 @@ nr_rrc_ue_establish_srb2(
|
|||||||
&asn_DEF_NR_DL_DCCH_Message,
|
&asn_DEF_NR_DL_DCCH_Message,
|
||||||
(void **)&dl_dcch_msg,
|
(void **)&dl_dcch_msg,
|
||||||
Buffer,
|
Buffer,
|
||||||
RRC_BUF_SIZE,
|
Buffer_size,
|
||||||
0,
|
0,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
@@ -2492,6 +2496,7 @@ nr_rrc_ue_establish_srb2(
|
|||||||
&ctxt,
|
&ctxt,
|
||||||
NR_RRC_DCCH_DATA_IND (msg_p).dcch_index,
|
NR_RRC_DCCH_DATA_IND (msg_p).dcch_index,
|
||||||
NR_RRC_DCCH_DATA_IND (msg_p).sdu_p,
|
NR_RRC_DCCH_DATA_IND (msg_p).sdu_p,
|
||||||
|
NR_RRC_DCCH_DATA_IND (msg_p).sdu_size,
|
||||||
NR_RRC_DCCH_DATA_IND (msg_p).gNB_index);
|
NR_RRC_DCCH_DATA_IND (msg_p).gNB_index);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2725,7 +2730,8 @@ nr_rrc_ue_generate_rrcReestablishmentComplete(
|
|||||||
{
|
{
|
||||||
uint32_t length;
|
uint32_t length;
|
||||||
uint8_t buffer[100];
|
uint8_t buffer[100];
|
||||||
length = do_RRCReestablishmentComplete(buffer, rrcReestablishment->rrc_TransactionIdentifier);
|
length = do_RRCReestablishmentComplete(buffer, sizeof(buffer),
|
||||||
|
rrcReestablishment->rrc_TransactionIdentifier);
|
||||||
LOG_I(NR_RRC,"[UE %d][RAPROC] Frame %d : Logical Channel UL-DCCH (SRB1), Generating RRCReestablishmentComplete (bytes%d, gNB %d)\n",
|
LOG_I(NR_RRC,"[UE %d][RAPROC] Frame %d : Logical Channel UL-DCCH (SRB1), Generating RRCReestablishmentComplete (bytes%d, gNB %d)\n",
|
||||||
ctxt_pP->module_id,ctxt_pP->frame, length, gNB_index);
|
ctxt_pP->module_id,ctxt_pP->frame, length, gNB_index);
|
||||||
#ifdef ITTI_SIM
|
#ifdef ITTI_SIM
|
||||||
|
|||||||
Reference in New Issue
Block a user