Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
canghaiwuhen
OpenXG-RAN
Commits
a07cfa3d
Commit
a07cfa3d
authored
May 05, 2020
by
s.rampalli
Committed by
Rigiel
Jun 09, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rrc changes
parent
69455512
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
187 additions
and
185 deletions
+187
-185
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+187
-185
No files found.
openair2/RRC/LTE/rrc_eNB.c
View file @
a07cfa3d
...
@@ -97,7 +97,7 @@
...
@@ -97,7 +97,7 @@
#include "SIMULATION/TOOLS/sim.h" // for taus
#include "SIMULATION/TOOLS/sim.h" // for taus
#define ASN_MAX_ENCODE_SIZE 1000
#define ASN_MAX_ENCODE_SIZE 1000
static
int
add_CG_ConfigInfo
(
char
*
enc_buf
,
rrc_eNB_ue_context_t
*
const
ue_context_pP
,
int
*
enc_size
);
static int
encode_CG_ConfigInfo(char *buffer,int buffer_size,rrc_eNB_ue_context_t *const ue_context_pP,int *
enc_size);
static int is_en_dc_supported(LTE_UE_EUTRA_Capability_t *c);
static int is_en_dc_supported(LTE_UE_EUTRA_Capability_t *c);
static void free_rb_config(struct NR_RadioBearerConfig *rb_config);
static void free_rb_config(struct NR_RadioBearerConfig *rb_config);
static void free_cg_configinfo(struct NR_CG_ConfigInfo *cg_configinfo);
static void free_cg_configinfo(struct NR_CG_ConfigInfo *cg_configinfo);
...
@@ -4324,6 +4324,190 @@ rrc_eNB_generate_RRCConnectionReconfiguration_SCell(
...
@@ -4324,6 +4324,190 @@ rrc_eNB_generate_RRCConnectionReconfiguration_SCell(
}
}
//-----------------------------------------------------------------------------
/**
* @fn :encode_CG_ConfigInfo
* @param :enc_buf to store the encoded bits
* @param :ue_context_pP ue context used to fill CG-ConfigInfo
* @param :enc_size to store thre size of encoded size
* this api is to fill and encode CG-ConfigInfo
*/
static int encode_CG_ConfigInfo(
char *buffer,
int buffer_size,
rrc_eNB_ue_context_t *const ue_context_pP,
int *enc_size
) {
struct NR_CG_ConfigInfo *cg_configinfo = NULL;
struct NR_RadioBearerConfig *rb_config = NULL;
asn_enc_rval_t enc_rval;
int RRC_OK = 1;
int index = 0;
rb_config = calloc(1,sizeof( struct NR_RadioBearerConfig));
AssertFatal(rb_config != NULL,"failed to allocate memory for rb_config");
if(ue_context_pP->ue_context.DRB_configList->list.count != 0) {
rb_config->drb_ToAddModList = calloc(1,sizeof(struct NR_DRB_ToAddModList ));
AssertFatal(rb_config->drb_ToAddModList != NULL,"failed to allocated memory for drbtoaddmodlist");
rb_config->drb_ToAddModList->list.count = ue_context_pP->ue_context.DRB_configList->list.count;
rb_config->drb_ToAddModList->list.array
= calloc(ue_context_pP->ue_context.DRB_configList->list.count, sizeof(struct NR_DRB_ToAddMod));
AssertFatal( rb_config->drb_ToAddModList->list.array != NULL,
"falied to allocate memory for list.array");
for(index = 0;index < ue_context_pP->ue_context.DRB_configList->list.count;index++) {
rb_config->drb_ToAddModList->list.array[index]
= calloc(1,sizeof(struct NR_DRB_ToAddMod));
AssertFatal(rb_config->drb_ToAddModList->list.array[index] != NULL,
"failed to allocate memory for drb_toaddmod");
rb_config->drb_ToAddModList->list.array[index]->drb_Identity
=ue_context_pP->ue_context.DRB_configList->list.array[index]->drb_Identity;
if(ue_context_pP->ue_context.DRB_configList->list.array[index]->eps_BearerIdentity) {
rb_config->drb_ToAddModList->list.array[index]->cnAssociation
=calloc(1,sizeof(struct NR_DRB_ToAddMod__cnAssociation));
AssertFatal(rb_config->drb_ToAddModList->list.array[index]->cnAssociation != NULL,
"failed to allocate memory cnAssociation");
rb_config->drb_ToAddModList->list.array[index]->cnAssociation->present
=NR_DRB_ToAddMod__cnAssociation_PR_eps_BearerIdentity;
rb_config->drb_ToAddModList->list.array[index]->cnAssociation->choice.eps_BearerIdentity
=*(ue_context_pP->ue_context.DRB_configList->list.array[index]->eps_BearerIdentity);
}
}
}
cg_configinfo = calloc(1,sizeof(struct NR_CG_ConfigInfo));
AssertFatal(cg_configinfo != NULL,"failed to allocate memory for cg_configinfo");
cg_configinfo->criticalExtensions.present = NR_CG_ConfigInfo__criticalExtensions_PR_c1;
cg_configinfo->criticalExtensions.choice.c1
= calloc(1, sizeof(struct NR_CG_ConfigInfo__criticalExtensions__c1));
AssertFatal(cg_configinfo->criticalExtensions.choice.c1 != NULL,
"failed to allocate memory for cg_configinfo->criticalExtensions.choice.c1");
cg_configinfo->criticalExtensions.choice.c1->present
= NR_CG_ConfigInfo__criticalExtensions__c1_PR_cg_ConfigInfo;
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo
= calloc(1,sizeof(struct NR_CG_ConfigInfo_IEs));
AssertFatal(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo != NULL,
"failed to allocate memory for cg_configinfo_IEs");
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo
= calloc(1,sizeof( OCTET_STRING_t));
AssertFatal(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->
ue_CapabilityInfo != NULL, "failed to allocate memory for ue_capabilityinfo");
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo->size
= ue_context_pP->ue_context.UE_Capability_size;
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo->buf
= calloc(1,ue_context_pP->ue_context.UE_Capability_size);
AssertFatal( cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->
ue_CapabilityInfo->buf != NULL, "failed to allocate memory for buf");
memcpy(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo->buf,
ue_context_pP->ue_context.UE_Capability,ue_context_pP->ue_context.UE_Capability_size);
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->mcg_RB_Config
= calloc(1,sizeof(OCTET_STRING_t));
AssertFatal(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->
mcg_RB_Config != NULL, "failed to allocate memory for mcg_rb_config");
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->mcg_RB_Config->size
= sizeof( struct NR_RadioBearerConfig);
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->mcg_RB_Config->buf
= calloc(1,sizeof(struct NR_RadioBearerConfig));
AssertFatal(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->
mcg_RB_Config->buf != NULL,"failed to allocate memory for buf");
memcpy(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->mcg_RB_Config->buf,
rb_config,sizeof(struct NR_RadioBearerConfig));
// this xer_fprint can be enabled for additional debugging messages
// xer_fprint(stdout,&asn_DEF_NR_CG_ConfigInfo,(void*)cg_configinfo);
enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CG_ConfigInfo,NULL,(void*)cg_configinfo,
buffer,buffer_size);
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded);
*enc_size = (enc_rval.encoded+7)/8;
free_rb_config(rb_config);
free_cg_configinfo(cg_configinfo);
return RRC_OK;
}
//-----------------------------------------------------------------------------
/**
* @fn :api to free the all the dynamically allocated memory
* @param :cg_configinfo contains cellgroup configuration
*/
static void free_cg_configinfo(
struct NR_CG_ConfigInfo *cg_configinfo
) {
if(cg_configinfo){
if(cg_configinfo->criticalExtensions.choice.c1){
if(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo){
if(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo){
if(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo->buf){
if(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->mcg_RB_Config){
if(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->mcg_RB_Config->buf){
free(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->mcg_RB_Config->buf);
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->mcg_RB_Config->buf =NULL;
free(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->mcg_RB_Config);
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->mcg_RB_Config =NULL;
free(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo->buf);
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo->buf = NULL;
free(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo);
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo =NULL;
free(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo);
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo =NULL;
free(cg_configinfo->criticalExtensions.choice.c1);
cg_configinfo->criticalExtensions.choice.c1 =NULL;
free(cg_configinfo);
cg_configinfo =NULL;
}
}
}
}
}
}
}
return;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
/**
* @fn :api to free the all the dynamically allocated memory
* @param :rb_config contains radiobearer configuration
*/
static void free_rb_config(
struct NR_RadioBearerConfig *rb_config
) {
int index = 0;
if(rb_config) {
if(rb_config->drb_ToAddModList) {
if(rb_config->drb_ToAddModList->list.array) {
for(index = 0; index < rb_config->drb_ToAddModList->list.count; index++) {
if(rb_config->drb_ToAddModList->list.array[index]->cnAssociation) {
free(rb_config->drb_ToAddModList->list.array[index]->cnAssociation);
rb_config->drb_ToAddModList->list.array[index]->cnAssociation = NULL;
}
if(rb_config->drb_ToAddModList->list.array[index]) {
free(rb_config->drb_ToAddModList->list.array[index]);
rb_config->drb_ToAddModList->list.array[index] = NULL;
}
}
free(rb_config->drb_ToAddModList->list.array);
rb_config->drb_ToAddModList->list.array = NULL;
free(rb_config->drb_ToAddModList);
rb_config->drb_ToAddModList = NULL;
free(rb_config);
rb_config = NULL;
}
}
}
return;
}
//------------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void
void
rrc_eNB_process_MeasurementReport(
rrc_eNB_process_MeasurementReport(
...
@@ -4339,7 +4523,7 @@ rrc_eNB_process_MeasurementReport(
...
@@ -4339,7 +4523,7 @@ rrc_eNB_process_MeasurementReport(
long ncell_max = -150;
long ncell_max = -150;
uint32_t earfcn_dl;
uint32_t earfcn_dl;
uint8_t KeNB_star[32] = { 0 };
uint8_t KeNB_star[32] = { 0 };
char
*
enc_buf
=
NULL
;
char
enc_buf[ASN_MAX_ENCODE_SIZE] = {0}
;
int enc_size = 0;
int enc_size = 0;
T(T_ENB_RRC_MEASUREMENT_REPORT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T(T_ENB_RRC_MEASUREMENT_REPORT, 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));
...
@@ -4405,8 +4589,7 @@ rrc_eNB_process_MeasurementReport(
...
@@ -4405,8 +4589,7 @@ rrc_eNB_process_MeasurementReport(
if(is_en_dc_supported(ue_context_pP->ue_context.UE_Capability)) {
if(is_en_dc_supported(ue_context_pP->ue_context.UE_Capability)) {
/** to add gNB as Secondary node CG-ConfigInfo to be added as per 36.423 r15 **/
/** to add gNB as Secondary node CG-ConfigInfo to be added as per 36.423 r15 **/
enc_buf
=
calloc
(
1
,
1000
);
if(encode_CG_ConfigInfo(enc_buf,sizeof(enc_buf),ue_context_pP,&enc_size) == RRC_OK)
if
(
add_CG_ConfigInfo
(
enc_buf
,
ue_context_pP
,
&
enc_size
)
==
RRC_OK
)
LOG_I(RRC,"CG-ConfigInfo encoded successfully\n");
LOG_I(RRC,"CG-ConfigInfo encoded successfully\n");
msg = itti_alloc_new_message(TASK_RRC_ENB, X2AP_ENDC_SGNB_ADDITION_REQ);
msg = itti_alloc_new_message(TASK_RRC_ENB, X2AP_ENDC_SGNB_ADDITION_REQ);
X2AP_ENDC_SGNB_ADDITION_REQ(msg).rnti = ctxt_pP->rnti;
X2AP_ENDC_SGNB_ADDITION_REQ(msg).rnti = ctxt_pP->rnti;
...
@@ -4549,187 +4732,6 @@ rrc_eNB_process_MeasurementReport(
...
@@ -4549,187 +4732,6 @@ rrc_eNB_process_MeasurementReport(
}
}
//-----------------------------------------------------------------------------
/**
* @fn :add_CG_ConfigInfo
* @param :enc_buf to store the encoded bits
* @param :ue_context_pP ue context used to fill CG-ConfigInfo
* @param :enc_size to store thre size of encoded size
* this api is to fill and encode CG-ConfigInfo
*/
int
add_CG_ConfigInfo
(
char
*
enc_buf
,
rrc_eNB_ue_context_t
*
const
ue_context_pP
,
int
*
enc_size
)
{
struct
NR_CG_ConfigInfo
*
cg_configinfo
=
NULL
;
struct
NR_RadioBearerConfig
*
rb_config
=
NULL
;
asn_enc_rval_t
enc_rval
;
int
RRC_OK
=
1
;
int
index
=
0
;
rb_config
=
calloc
(
1
,
sizeof
(
struct
NR_RadioBearerConfig
));
AssertFatal
(
rb_config
!=
NULL
,
"failed to allocate memory for rb_config"
);
if
(
ue_context_pP
->
ue_context
.
DRB_configList
->
list
.
count
!=
0
)
{
rb_config
->
drb_ToAddModList
=
calloc
(
1
,
sizeof
(
struct
NR_DRB_ToAddModList
));
AssertFatal
(
rb_config
->
drb_ToAddModList
!=
NULL
,
"failed to allocated memory for drbtoaddmodlist"
);
rb_config
->
drb_ToAddModList
->
list
.
count
=
ue_context_pP
->
ue_context
.
DRB_configList
->
list
.
count
;
rb_config
->
drb_ToAddModList
->
list
.
array
=
calloc
(
ue_context_pP
->
ue_context
.
DRB_configList
->
list
.
count
,
sizeof
(
struct
NR_DRB_ToAddMod
));
AssertFatal
(
rb_config
->
drb_ToAddModList
->
list
.
array
!=
NULL
,
"falied to allocate memory for list.array"
);
for
(
index
=
0
;
index
<
ue_context_pP
->
ue_context
.
DRB_configList
->
list
.
count
;
index
++
)
{
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
]
=
calloc
(
1
,
sizeof
(
struct
NR_DRB_ToAddMod
));
AssertFatal
(
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
]
!=
NULL
,
"failed to allocate memory for drb_toaddmod"
);
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
]
->
drb_Identity
=
ue_context_pP
->
ue_context
.
DRB_configList
->
list
.
array
[
index
]
->
drb_Identity
;
if
(
ue_context_pP
->
ue_context
.
DRB_configList
->
list
.
array
[
index
]
->
eps_BearerIdentity
)
{
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
]
->
cnAssociation
=
calloc
(
1
,
sizeof
(
struct
NR_DRB_ToAddMod__cnAssociation
));
AssertFatal
(
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
]
->
cnAssociation
!=
NULL
,
"failed to allocate memory cnAssociation"
);
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
]
->
cnAssociation
->
present
=
NR_DRB_ToAddMod__cnAssociation_PR_eps_BearerIdentity
;
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
]
->
cnAssociation
->
choice
.
eps_BearerIdentity
=*
(
ue_context_pP
->
ue_context
.
DRB_configList
->
list
.
array
[
index
]
->
eps_BearerIdentity
);
}
}
}
cg_configinfo
=
calloc
(
1
,
sizeof
(
struct
NR_CG_ConfigInfo
));
AssertFatal
(
cg_configinfo
!=
NULL
,
"failed to allocate memory for cg_configinfo"
);
cg_configinfo
->
criticalExtensions
.
present
=
NR_CG_ConfigInfo__criticalExtensions_PR_c1
;
cg_configinfo
->
criticalExtensions
.
choice
.
c1
=
calloc
(
1
,
sizeof
(
struct
NR_CG_ConfigInfo__criticalExtensions__c1
));
AssertFatal
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
!=
NULL
,
"failed to allocate memory for cg_configinfo->criticalExtensions.choice.c1"
);
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
present
=
NR_CG_ConfigInfo__criticalExtensions__c1_PR_cg_ConfigInfo
;
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
=
calloc
(
1
,
sizeof
(
struct
NR_CG_ConfigInfo_IEs
));
AssertFatal
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
!=
NULL
,
"failed to allocate memory for cg_configinfo_IEs"
);
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
ue_CapabilityInfo
=
calloc
(
1
,
sizeof
(
OCTET_STRING_t
));
AssertFatal
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
ue_CapabilityInfo
!=
NULL
,
"failed to allocate memory for ue_capabilityinfo"
);
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
ue_CapabilityInfo
->
size
=
ue_context_pP
->
ue_context
.
UE_Capability_size
;
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
ue_CapabilityInfo
->
buf
=
calloc
(
1
,
ue_context_pP
->
ue_context
.
UE_Capability_size
);
AssertFatal
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
ue_CapabilityInfo
->
buf
!=
NULL
,
"failed to allocate memory for buf"
);
memcpy
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
ue_CapabilityInfo
->
buf
,
ue_context_pP
->
ue_context
.
UE_Capability
,
ue_context_pP
->
ue_context
.
UE_Capability_size
);
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
mcg_RB_Config
=
calloc
(
1
,
sizeof
(
OCTET_STRING_t
));
AssertFatal
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
mcg_RB_Config
!=
NULL
,
"failed to allocate memory for mcg_rb_config"
);
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
mcg_RB_Config
->
size
=
sizeof
(
struct
NR_RadioBearerConfig
);
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
mcg_RB_Config
->
buf
=
calloc
(
1
,
sizeof
(
struct
NR_RadioBearerConfig
));
AssertFatal
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
mcg_RB_Config
->
buf
!=
NULL
,
"failed to allocate memory for buf"
);
memcpy
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
mcg_RB_Config
->
buf
,
rb_config
,
sizeof
(
struct
NR_RadioBearerConfig
));
// xer_fprint(stdout,&asn_DEF_NR_CG_ConfigInfo,(void*)cg_configinfo);
// this xer_fprint can be enabled for additional debugging messages
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_CG_ConfigInfo
,
NULL
,(
void
*
)
cg_configinfo
,
enc_buf
,
ASN_MAX_ENCODE_SIZE
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %lu)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
*
enc_size
=
(
enc_rval
.
encoded
+
7
)
/
8
;
free_rb_config
(
rb_config
);
free_cg_configinfo
(
cg_configinfo
);
return
RRC_OK
;
}
//-----------------------------------------------------------------------------
/**
* @fn :api to free the all the dynamically allocated memory
* @param :cg_configinfo contains cellgroup configuration
*/
void
free_cg_configinfo
(
struct
NR_CG_ConfigInfo
*
cg_configinfo
)
{
if
(
cg_configinfo
){
if
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
){
if
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
){
if
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
ue_CapabilityInfo
){
if
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
ue_CapabilityInfo
->
buf
){
if
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
mcg_RB_Config
){
if
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
mcg_RB_Config
->
buf
){
free
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
mcg_RB_Config
->
buf
);
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
mcg_RB_Config
->
buf
=
NULL
;
free
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
mcg_RB_Config
);
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
mcg_RB_Config
=
NULL
;
free
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
ue_CapabilityInfo
->
buf
);
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
ue_CapabilityInfo
->
buf
=
NULL
;
free
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
ue_CapabilityInfo
);
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
->
ue_CapabilityInfo
=
NULL
;
free
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
);
cg_configinfo
->
criticalExtensions
.
choice
.
c1
->
choice
.
cg_ConfigInfo
=
NULL
;
free
(
cg_configinfo
->
criticalExtensions
.
choice
.
c1
);
cg_configinfo
->
criticalExtensions
.
choice
.
c1
=
NULL
;
free
(
cg_configinfo
);
cg_configinfo
=
NULL
;
}
}
}
}
}
}
}
return
;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
/**
* @fn :api to free the all the dynamically allocated memory
* @param :rb_config contains radiobearer configuration
*/
void
free_rb_config
(
struct
NR_RadioBearerConfig
*
rb_config
)
{
int
index
=
0
;
if
(
rb_config
)
{
if
(
rb_config
->
drb_ToAddModList
)
{
if
(
rb_config
->
drb_ToAddModList
->
list
.
array
)
{
for
(
index
=
0
;
index
<
rb_config
->
drb_ToAddModList
->
list
.
count
;
index
++
)
{
if
(
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
]
->
cnAssociation
)
{
free
(
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
]
->
cnAssociation
);
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
]
->
cnAssociation
=
NULL
;
}
if
(
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
])
{
free
(
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
]);
rb_config
->
drb_ToAddModList
->
list
.
array
[
index
]
=
NULL
;
}
}
free
(
rb_config
->
drb_ToAddModList
->
list
.
array
);
rb_config
->
drb_ToAddModList
->
list
.
array
=
NULL
;
free
(
rb_config
->
drb_ToAddModList
);
rb_config
->
drb_ToAddModList
=
NULL
;
free
(
rb_config
);
rb_config
=
NULL
;
}
}
}
return
;
}
//------------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void
void
rrc_eNB_generate_HandoverPreparationInformation(
rrc_eNB_generate_HandoverPreparationInformation(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment