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
常顺宇
OpenXG-RAN
Commits
de8e2257
Commit
de8e2257
authored
Aug 13, 2019
by
Cedric Roux
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bugfix: do not use memory on the stack in do_SIB1_MBMS, allocate it with malloc
parent
283207cd
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
61 additions
and
42 deletions
+61
-42
openair2/RRC/LTE/MESSAGES/asn1_msg.c
openair2/RRC/LTE/MESSAGES/asn1_msg.c
+61
-42
No files found.
openair2/RRC/LTE/MESSAGES/asn1_msg.c
View file @
de8e2257
...
...
@@ -419,78 +419,97 @@ uint8_t do_SIB1_MBMS(rrc_eNB_carrier_data_t *carrier,
#else
int
num_plmn
=
1
;
#endif
LTE_PLMN_IdentityInfo_t PLMN_identity_info[num_plmn];
LTE_MCC_MNC_Digit_t dummy_mcc[num_plmn][3], dummy_mnc[num_plmn][3];
LTE_PLMN_IdentityInfo_t
*
PLMN_identity_info
;
LTE_MCC_MNC_Digit_t
*
dummy_mcc_0
;
LTE_MCC_MNC_Digit_t
*
dummy_mcc_1
;
LTE_MCC_MNC_Digit_t
*
dummy_mcc_2
;
LTE_MCC_MNC_Digit_t
*
dummy_mnc_0
;
LTE_MCC_MNC_Digit_t
*
dummy_mnc_1
;
LTE_MCC_MNC_Digit_t
*
dummy_mnc_2
;
asn_enc_rval_t
enc_rval
;
LTE_SchedulingInfo_MBMS_r14_t schedulingInfo;
LTE_SIB_Type_t sib_type;
LTE_SchedulingInfo_MBMS_r14_t
*
schedulingInfo
;
LTE_SIB_Type_t
*
sib_type
;
uint8_t
*
buffer
=
carrier
->
SIB1_MBMS
;
LTE_BCCH_DL_SCH_Message_MBMS_t
*
bcch_message
=
&
carrier
->
siblock1_MBMS
;
LTE_SystemInformationBlockType1_MBMS_r14_t
**
sib1_MBMS
=
&
carrier
->
sib1_MBMS
;
int
i
;
//LTE_NonMBSFN_SubframeConfig_r14 nonMBSFN_SubframeConfig_r14;
struct
LTE_MBSFN_AreaInfo_r9
*
MBSFN_Area1
/*, *MBSFN_Area2*/
;
struct LTE_NonMBSFN_SubframeConfig_r14 nonMBSFN_SubframeConfig_r14;
memset
(
bcch_message
,
0
,
sizeof
(
LTE_BCCH_DL_SCH_Message_MBMS_t
));
bcch_message
->
message
.
present
=
LTE_BCCH_DL_SCH_MessageType_MBMS_r14_PR_c1
;
bcch_message
->
message
.
choice
.
c1
.
present
=
LTE_BCCH_DL_SCH_MessageType_MBMS_r14__c1_PR_systemInformationBlockType1_MBMS_r14
;
// memcpy(&bcch_message.message.choice.c1.choice.systemInformationBlockType1,sib1,sizeof(SystemInformationBlockType1_t));
*
sib1_MBMS
=
&
bcch_message
->
message
.
choice
.
c1
.
choice
.
systemInformationBlockType1_MBMS_r14
;
memset(PLMN_identity_info,0,num_plmn * sizeof(LTE_PLMN_IdentityInfo_t));
memset(&schedulingInfo,0,sizeof(LTE_SchedulingInfo_MBMS_r14_t));
memset(&sib_type,0,sizeof(LTE_SIB_Type_t));
memset(&nonMBSFN_SubframeConfig_r14,0,sizeof(struct LTE_NonMBSFN_SubframeConfig_r14));
PLMN_identity_info
=
CALLOC
(
1
,
sizeof
(
LTE_PLMN_IdentityInfo_t
)
*
num_plmn
);
if
(
PLMN_identity_info
==
NULL
)
exit
(
1
);
schedulingInfo
=
CALLOC
(
1
,
sizeof
(
LTE_SchedulingInfo_MBMS_r14_t
));
if
(
schedulingInfo
==
NULL
)
exit
(
1
);
sib_type
=
CALLOC
(
1
,
sizeof
(
LTE_SIB_Type_t
));
if
(
sib_type
==
NULL
)
exit
(
1
);
/* as per TS 36.311, up to 6 PLMN_identity_info are allowed in list -> add one by one */
for (i = 0; i <
configuration->
num_plmn; ++i) {
for
(
i
=
0
;
i
<
num_plmn
;
++
i
)
{
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
=
CALLOC
(
1
,
sizeof
(
*
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
));
memset
(
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
,
0
,
sizeof
(
*
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
));
asn_set_empty
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
->
list
);
//.size=0;
dummy_mcc_0
=
CALLOC
(
1
,
sizeof
(
LTE_MCC_MNC_Digit_t
));
dummy_mcc_1
=
CALLOC
(
1
,
sizeof
(
LTE_MCC_MNC_Digit_t
));
dummy_mcc_2
=
CALLOC
(
1
,
sizeof
(
LTE_MCC_MNC_Digit_t
));
if
(
dummy_mcc_0
==
NULL
||
dummy_mcc_1
==
NULL
||
dummy_mcc_2
==
NULL
)
exit
(
1
);
#if defined(ENABLE_ITTI)
dummy_mcc[i][0]
= (configuration->mcc[i] / 100) % 10;
dummy_mcc[i][1]
= (configuration->mcc[i] / 10) % 10;
dummy_mcc[i][2]
= (configuration->mcc[i] / 1) % 10;
*
dummy_mcc_0
=
(
configuration
->
mcc
[
i
]
/
100
)
%
10
;
*
dummy_mcc_1
=
(
configuration
->
mcc
[
i
]
/
10
)
%
10
;
*
dummy_mcc_2
=
(
configuration
->
mcc
[
i
]
/
1
)
%
10
;
#else
dummy_mcc[i][0]
= 0;
dummy_mcc[i][1]
= 0;
dummy_mcc[i][2]
= 1;
*
dummy_mcc_0
=
0
;
*
dummy_mcc_1
=
0
;
*
dummy_mcc_2
=
1
;
#endif
ASN_SEQUENCE_ADD(&PLMN_identity_info[i].plmn_Identity.mcc->list,
&dummy_mcc[i][0]
);
ASN_SEQUENCE_ADD(&PLMN_identity_info[i].plmn_Identity.mcc->list,
&dummy_mcc[i][1]
);
ASN_SEQUENCE_ADD(&PLMN_identity_info[i].plmn_Identity.mcc->list,
&dummy_mcc[i][2]
);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
->
list
,
dummy_mcc_0
);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
->
list
,
dummy_mcc_1
);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mcc
->
list
,
dummy_mcc_2
);
PLMN_identity_info
[
i
].
plmn_Identity
.
mnc
.
list
.
size
=
0
;
PLMN_identity_info
[
i
].
plmn_Identity
.
mnc
.
list
.
count
=
0
;
#if defined(ENABLE_ITTI)
dummy_mnc_0
=
CALLOC
(
1
,
sizeof
(
LTE_MCC_MNC_Digit_t
));
dummy_mnc_1
=
CALLOC
(
1
,
sizeof
(
LTE_MCC_MNC_Digit_t
));
dummy_mnc_2
=
CALLOC
(
1
,
sizeof
(
LTE_MCC_MNC_Digit_t
));
if
(
dummy_mnc_0
==
NULL
||
dummy_mnc_1
==
NULL
||
dummy_mnc_2
==
NULL
)
exit
(
1
);
#if defined(ENABLE_ITTI)
if
(
configuration
->
mnc
[
i
]
>=
100
)
{
dummy_mnc[i][0]
= (configuration->mnc[i] / 100) % 10;
dummy_mnc[i][1]
= (configuration->mnc[i] / 10) % 10;
dummy_mnc[i][2]
= (configuration->mnc[i] / 1) % 10;
*
dummy_mnc_0
=
(
configuration
->
mnc
[
i
]
/
100
)
%
10
;
*
dummy_mnc_1
=
(
configuration
->
mnc
[
i
]
/
10
)
%
10
;
*
dummy_mnc_2
=
(
configuration
->
mnc
[
i
]
/
1
)
%
10
;
}
else
{
if
(
configuration
->
mnc_digit_length
[
i
]
==
2
)
{
dummy_mnc[i][0]
= (configuration->mnc[i] / 10) % 10;
dummy_mnc[i][1]
= (configuration->mnc[i] / 1) % 10;
dummy_mnc[i][2]
= 0xf;
*
dummy_mnc_0
=
(
configuration
->
mnc
[
i
]
/
10
)
%
10
;
*
dummy_mnc_1
=
(
configuration
->
mnc
[
i
]
/
1
)
%
10
;
*
dummy_mnc_2
=
0xf
;
}
else
{
dummy_mnc[i][0]
= (configuration->mnc[i] / 100) % 100;
dummy_mnc[i][1]
= (configuration->mnc[i] / 10) % 10;
dummy_mnc[i][2]
= (configuration->mnc[i] / 1) % 10;
*
dummy_mnc_0
=
(
configuration
->
mnc
[
i
]
/
100
)
%
100
;
*
dummy_mnc_1
=
(
configuration
->
mnc
[
i
]
/
10
)
%
10
;
*
dummy_mnc_2
=
(
configuration
->
mnc
[
i
]
/
1
)
%
10
;
}
}
#else
dummy_mnc[i][0] = 0;
dummy_mnc[i][1] = 1;
dummy_mnc[i][2] = 0xf;
*
dummy_mnc
[
i
][
0
]
=
0
;
*
dummy_mnc
[
i
][
1
]
=
1
;
*
dummy_mnc
[
i
][
2
]
=
0xf
;
#endif
ASN_SEQUENCE_ADD(&PLMN_identity_info[i].plmn_Identity.mnc.list,
&dummy_mnc[i][0]
);
ASN_SEQUENCE_ADD(&PLMN_identity_info[i].plmn_Identity.mnc.list,
&dummy_mnc[i][1]
);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mnc
.
list
,
dummy_mnc_0
);
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mnc
.
list
,
dummy_mnc_1
);
if (dummy_mnc[i][2] != 0xf) {
ASN_SEQUENCE_ADD(&PLMN_identity_info[i].plmn_Identity.mnc.list,&dummy_mnc[i][2]);
if
(
*
dummy_mnc_2
!=
0xf
)
{
ASN_SEQUENCE_ADD
(
&
PLMN_identity_info
[
i
].
plmn_Identity
.
mnc
.
list
,
dummy_mnc_2
);
}
else
{
free
(
dummy_mnc_2
);
}
//assign_enum(&PLMN_identity_info.cellReservedForOperatorUse,PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved);
...
...
@@ -530,10 +549,10 @@ uint8_t do_SIB1_MBMS(rrc_eNB_carrier_data_t *carrier,
#else
7
;
#endif
schedulingInfo
.
si_Periodicity_r14=LTE_SchedulingInfo__si_Periodicity_rf16;
sib_type=
LTE_SIB_Type_MBMS_r14_sibType13_v920;
ASN_SEQUENCE_ADD(&schedulingInfo
.sib_MappingInfo_r14.list,&
sib_type);
ASN_SEQUENCE_ADD(&(*sib1_MBMS)->schedulingInfoList_MBMS_r14.list,
&
schedulingInfo);
schedulingInfo
->
si_Periodicity_r14
=
LTE_SchedulingInfo__si_Periodicity_rf16
;
*
sib_type
=
LTE_SIB_Type_MBMS_r14_sibType13_v920
;
ASN_SEQUENCE_ADD
(
&
schedulingInfo
->
sib_MappingInfo_r14
.
list
,
sib_type
);
ASN_SEQUENCE_ADD
(
&
(
*
sib1_MBMS
)
->
schedulingInfoList_MBMS_r14
.
list
,
schedulingInfo
);
(
*
sib1_MBMS
)
->
si_WindowLength_r14
=
LTE_SystemInformationBlockType1_MBMS_r14__si_WindowLength_r14_ms20
;
(
*
sib1_MBMS
)
->
systemInfoValueTag_r14
=
0
;
...
...
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