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
lizhongxiao
OpenXG-RAN
Commits
9ad2b40a
Commit
9ad2b40a
authored
Dec 02, 2022
by
Vijay C
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Multi cell support for SIB4 and SIB5
parent
399ad2ec
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
439 additions
and
21 deletions
+439
-21
openair2/COMMON/rrc_messages_types.h
openair2/COMMON/rrc_messages_types.h
+72
-0
openair2/ENB_APP/enb_config.c
openair2/ENB_APP/enb_config.c
+8
-2
openair2/RRC/LTE/L2_interface.c
openair2/RRC/LTE/L2_interface.c
+24
-1
openair2/RRC/LTE/MESSAGES/asn1_msg.c
openair2/RRC/LTE/MESSAGES/asn1_msg.c
+184
-12
openair2/RRC/LTE/MESSAGES/asn1_msg.h
openair2/RRC/LTE/MESSAGES/asn1_msg.h
+24
-0
openair2/RRC/LTE/rrc_defs.h
openair2/RRC/LTE/rrc_defs.h
+7
-0
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+30
-0
openair3/SS/ss_eNB_sys_task.c
openair3/SS/ss_eNB_sys_task.c
+90
-6
No files found.
openair2/COMMON/rrc_messages_types.h
View file @
9ad2b40a
...
@@ -46,6 +46,13 @@
...
@@ -46,6 +46,13 @@
#include "LTE_LogicalChannelConfig.h"
#include "LTE_LogicalChannelConfig.h"
#include "LTE_SecurityAlgorithmConfig.h"
#include "LTE_SecurityAlgorithmConfig.h"
#include "LTE_CipheringAlgorithm-r12.h"
#include "LTE_CipheringAlgorithm-r12.h"
#include "LTE_SIB-Type.h"
#include "LTE_Q-OffsetRange.h"
#include "LTE_SchedulingInfo.h"
#include "LTE_SpeedStateScaleFactors.h"
#include "LTE_InterFreqNeighCellInfo.h"
#include "LTE_PhysCellIdRange.h"
#include "LTE_NeighCellConfig.h"
#define MAX_RBS (LTE_maxDRB + 3)
#define MAX_RBS (LTE_maxDRB + 3)
...
@@ -296,6 +303,59 @@ typedef struct RadioResourceConfig_s {
...
@@ -296,6 +303,59 @@ typedef struct RadioResourceConfig_s {
BOOLEAN_t
mbms_dedicated_serving_cell
;
BOOLEAN_t
mbms_dedicated_serving_cell
;
}
RadioResourceConfig
;
}
RadioResourceConfig
;
typedef
struct
lte_sib_MappingInfo_s
{
e_LTE_SIB_Type
LTE_SIB_Type
[
5
];
}
lte_sib_MappingInfo_t
;
typedef
struct
lte_SchedulingInfo_s
{
e_LTE_SchedulingInfo__si_Periodicity
si_Periodicity
;
lte_sib_MappingInfo_t
sib_MappingInfo
;
}
lte_SchedulingInfo_t
;
typedef
struct
PhysCellIdRange_s
{
long
start
;
e_LTE_PhysCellIdRange__range
range
;
}
PhysCellIdRange_t
;
typedef
struct
threshX_Q_r9_s
{
long
threshX_HighQ_r9
;
long
threshX_LowQ_r9
;
}
threshX_Q_r9_t
;
typedef
struct
InterFreqCarrierFreqInfo_s
{
long
dl_CarrierFreq
[
MAX_NUM_CCs
];
long
q_RxLevMin
[
MAX_NUM_CCs
];
bool
p_Max_Present
[
MAX_NUM_CCs
];
long
p_Max
[
MAX_NUM_CCs
];
/* OPTIONAL */
long
t_ReselectionEUTRA
[
MAX_NUM_CCs
];
bool
t_ReselectionEUTRA_SF_Present
[
MAX_NUM_CCs
];
LTE_SpeedStateScaleFactors_t
*
t_ReselectionEUTRA_SF
[
MAX_NUM_CCs
];
/* OPTIONAL */
long
threshX_High
[
MAX_NUM_CCs
];
long
threshX_Low
[
MAX_NUM_CCs
];
long
allowedMeasBandwidth
[
MAX_NUM_CCs
];
bool
presenceAntennaPort1
[
MAX_NUM_CCs
];
bool
cellReselectionPriority_Present
[
MAX_NUM_CCs
];
long
*
cellReselectionPriority
[
MAX_NUM_CCs
];
/* OPTIONAL */
LTE_NeighCellConfig_t
neighCellConfig
[
MAX_NUM_CCs
];
bool
q_OffsetFreqPresent
[
MAX_NUM_CCs
];
e_LTE_Q_OffsetRange
*
q_OffsetFreq
[
MAX_NUM_CCs
];
/* OPTIONAL */
bool
interFreqNeighCellList_Present
[
MAX_NUM_CCs
];
LTE_InterFreqNeighCellInfo_t
*
interFreqNeighCellList
[
MAX_NUM_CCs
];
/* OPTIONAL */
bool
interFreqBlackCellList_Present
[
MAX_NUM_CCs
];
PhysCellIdRange_t
*
interFreqBlackCellList
[
MAX_NUM_CCs
];
/* OPTIONAL */
bool
q_QualMin_r9_Present
[
MAX_NUM_CCs
];
long
*
q_QualMin_r9
[
MAX_NUM_CCs
];
/* OPTIONAL */
bool
threshX_Q_r9_Present
[
MAX_NUM_CCs
];
threshX_Q_r9_t
threshX_Q_r9
[
MAX_NUM_CCs
];
/* OPTIONAL */
bool
q_QualMinWB_r11_Present
[
MAX_NUM_CCs
];
long
*
q_QualMinWB_r11
[
MAX_NUM_CCs
];
/* OPTIONAL */
}
InterFreqCarrierFreqInfo_t
;
typedef
struct
IntraFreqNeighCellInfo_s
{
long
physCellId
;
e_LTE_Q_OffsetRange
q_OffsetCell
;
}
IntraFreqNeighCellInfo_t
;
// eNB: ENB_APP -> RRC messages
// eNB: ENB_APP -> RRC messages
typedef
struct
RrcConfigurationReq_s
{
typedef
struct
RrcConfigurationReq_s
{
uint16_t
tac
[
MAX_NUM_CCs
];
uint16_t
tac
[
MAX_NUM_CCs
];
...
@@ -326,6 +386,8 @@ typedef struct RrcConfigurationReq_s {
...
@@ -326,6 +386,8 @@ typedef struct RrcConfigurationReq_s {
int
eMTC_configured
;
int
eMTC_configured
;
int
SL_configured
;
int
SL_configured
;
uint8_t
systemInfoValueTag
[
MAX_NUM_CCs
];
uint8_t
systemInfoValueTag
[
MAX_NUM_CCs
];
int
schedulingInfo_count
;
lte_SchedulingInfo_t
*
schedulingInfo
;
RadioResourceConfig
radioresourceconfig
[
MAX_NUM_CCs
];
RadioResourceConfig
radioresourceconfig
[
MAX_NUM_CCs
];
RadioResourceConfig
radioresourceconfig_BR
[
MAX_NUM_CCs
];
RadioResourceConfig
radioresourceconfig_BR
[
MAX_NUM_CCs
];
...
@@ -415,6 +477,16 @@ typedef struct RrcConfigurationReq_s {
...
@@ -415,6 +477,16 @@ typedef struct RrcConfigurationReq_s {
long
sib3_q_RxLevMin
[
MAX_NUM_CCs
];
long
sib3_q_RxLevMin
[
MAX_NUM_CCs
];
long
t_ReselectionEUTRA
[
MAX_NUM_CCs
];
long
t_ReselectionEUTRA
[
MAX_NUM_CCs
];
//SIB4
bool
sib4_Present
;
bool
intraFreqNeighCellListPresent
;
IntraFreqNeighCellInfo_t
*
intraFreqNeighCellList
;
//SIB5
bool
sib5_Present
;
int
InterFreqCarrierFreqInfoCount
;
InterFreqCarrierFreqInfo_t
*
InterFreqCarrierFreqInfo
;
//SIB18
//SIB18
e_LTE_SL_CP_Len_r12
rxPool_sc_CP_Len
[
MAX_NUM_CCs
];
e_LTE_SL_CP_Len_r12
rxPool_sc_CP_Len
[
MAX_NUM_CCs
];
e_LTE_SL_PeriodComm_r12
rxPool_sc_Period
[
MAX_NUM_CCs
];
e_LTE_SL_PeriodComm_r12
rxPool_sc_Period
[
MAX_NUM_CCs
];
...
...
openair2/ENB_APP/enb_config.c
View file @
9ad2b40a
...
@@ -422,6 +422,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) {
...
@@ -422,6 +422,7 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) {
paramlist_def_t
PLMNParamList
=
{
ENB_CONFIG_STRING_PLMN_LIST
,
NULL
,
0
};
paramlist_def_t
PLMNParamList
=
{
ENB_CONFIG_STRING_PLMN_LIST
,
NULL
,
0
};
/* map parameter checking array instances to parameter definition array instances */
/* map parameter checking array instances to parameter definition array instances */
checkedparam_t
config_check_PLMNParams
[]
=
PLMNPARAMS_CHECK
;
checkedparam_t
config_check_PLMNParams
[]
=
PLMNPARAMS_CHECK
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
=
CALLOC
(
1
,
sizeof
(
struct
InterFreqCarrierFreqInfo_s
));
for
(
int
I
=
0
;
I
<
sizeof
(
PLMNParams
)
/
sizeof
(
paramdef_t
);
++
I
)
for
(
int
I
=
0
;
I
<
sizeof
(
PLMNParams
)
/
sizeof
(
paramdef_t
);
++
I
)
PLMNParams
[
I
].
chkPptr
=
&
(
config_check_PLMNParams
[
I
]);
PLMNParams
[
I
].
chkPptr
=
&
(
config_check_PLMNParams
[
I
]);
...
@@ -433,6 +434,11 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) {
...
@@ -433,6 +434,11 @@ int RCconfig_RRC(uint32_t i, eNB_RRC_INST *rrc, int macrlc_has_f1) {
RRC_CONFIGURATION_REQ
(
msg_p
).
cellReselectionPriority
[
M
]
=
7
;
RRC_CONFIGURATION_REQ
(
msg_p
).
cellReselectionPriority
[
M
]
=
7
;
RRC_CONFIGURATION_REQ
(
msg_p
).
sib3_q_RxLevMin
[
M
]
=-
70
;
RRC_CONFIGURATION_REQ
(
msg_p
).
sib3_q_RxLevMin
[
M
]
=-
70
;
RRC_CONFIGURATION_REQ
(
msg_p
).
t_ReselectionEUTRA
[
M
]
=
1
;
RRC_CONFIGURATION_REQ
(
msg_p
).
t_ReselectionEUTRA
[
M
]
=
1
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
dl_CarrierFreq
[
M
]
=
300
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
q_RxLevMin
[
M
]
=-
53
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
threshX_High
[
M
]
=
10
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
threshX_Low
[
M
]
=
1
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
allowedMeasBandwidth
[
M
]
=
3
;
}
}
// In the configuration file it is in seconds. For RRC it has to be in milliseconds
// In the configuration file it is in seconds. For RRC it has to be in milliseconds
...
@@ -3060,12 +3066,12 @@ void extract_and_decode_SI(int inst,int si_ind,uint8_t *si_container,int si_cont
...
@@ -3060,12 +3066,12 @@ void extract_and_decode_SI(int inst,int si_ind,uint8_t *si_container,int si_cont
break
;
break
;
case
LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4
:
case
LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4
:
//
carrier->sib4 = &typeandinfo->choice.sib4;
carrier
->
sib4
=
&
typeandinfo
->
choice
.
sib4
;
LOG_I
(
ENB_APP
,
"[RRC %"
PRIu8
"] Found SIB4 in CU F1AP_SETUP_RESP message
\n
"
,
inst
);
LOG_I
(
ENB_APP
,
"[RRC %"
PRIu8
"] Found SIB4 in CU F1AP_SETUP_RESP message
\n
"
,
inst
);
break
;
break
;
case
LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib5
:
case
LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib5
:
//
carrier->sib5 = &typeandinfo->choice.sib5;
carrier
->
sib5
=
&
typeandinfo
->
choice
.
sib5
;
LOG_I
(
ENB_APP
,
"[RRC %"
PRIu8
"] Found SIB5 in CU F1AP_SETUP_RESP message
\n
"
,
inst
);
LOG_I
(
ENB_APP
,
"[RRC %"
PRIu8
"] Found SIB5 in CU F1AP_SETUP_RESP message
\n
"
,
inst
);
break
;
break
;
...
...
openair2/RRC/LTE/L2_interface.c
View file @
9ad2b40a
...
@@ -81,11 +81,16 @@ mac_rrc_data_req(
...
@@ -81,11 +81,16 @@ mac_rrc_data_req(
eNB_RRC_INST
*
rrc
;
eNB_RRC_INST
*
rrc
;
rrc_eNB_carrier_data_t
*
carrier
;
rrc_eNB_carrier_data_t
*
carrier
;
LTE_BCCH_BCH_Message_t
*
mib
;
LTE_BCCH_BCH_Message_t
*
mib
;
LTE_SystemInformationBlockType1_t
*
SIB1
;
LTE_SchedulingInfo_t
*
SchedulingInfo
;
LTE_SIB_Type_t
*
sib_type
;
LTE_BCCH_BCH_Message_MBMS_t
*
mib_fembms
;
LTE_BCCH_BCH_Message_MBMS_t
*
mib_fembms
;
rrc
=
RC
.
rrc
[
Mod_idP
];
rrc
=
RC
.
rrc
[
Mod_idP
];
carrier
=
&
rrc
->
carrier
[
CC_id
];
carrier
=
&
rrc
->
carrier
[
CC_id
];
mib
=
&
carrier
->
mib
;
mib
=
&
carrier
->
mib
;
mib_fembms
=
&
carrier
->
mib_fembms
;
mib_fembms
=
&
carrier
->
mib_fembms
;
SIB1
=
&
carrier
->
SIB1
;
SchedulingInfo
=
&
SIB1
->
schedulingInfoList
.
list
;
if
((
Srb_id
&
RAB_OFFSET
)
==
BCCH_SI_MBMS
){
if
((
Srb_id
&
RAB_OFFSET
)
==
BCCH_SI_MBMS
){
if
(
frameP
%
8
==
0
)
{
if
(
frameP
%
8
==
0
)
{
...
@@ -154,7 +159,25 @@ mac_rrc_data_req(
...
@@ -154,7 +159,25 @@ mac_rrc_data_req(
}
/* LOG_DEBUGFLAG(DEBUG_RRC) */
}
/* LOG_DEBUGFLAG(DEBUG_RRC) */
return
(
RC
.
rrc
[
Mod_idP
]
->
carrier
[
CC_id
].
sizeof_SIB23
);
return
(
RC
.
rrc
[
Mod_idP
]
->
carrier
[
CC_id
].
sizeof_SIB23
);
}
else
{
}
else
if
((
true
==
RC
.
rrc
[
Mod_idP
]
->
carrier
[
CC_id
].
sib5_Scheduled
)
&&
((
frameP
%
16
)
==
3
))
{
memcpy
(
&
buffer_pP
[
0
],
RC
.
rrc
[
Mod_idP
]
->
carrier
[
CC_id
].
SIB5
,
RC
.
rrc
[
Mod_idP
]
->
carrier
[
CC_id
].
sizeof_SIB5
);
if
(
LOG_DEBUGFLAG
(
DEBUG_RRC
))
{
LOG_T
(
RRC
,
"[eNB %d] Frame %d : BCCH request => SIB 5
\n
"
,
Mod_idP
,
frameP
);
for
(
int
i
=
0
;
i
<
RC
.
rrc
[
Mod_idP
]
->
carrier
[
CC_id
].
sizeof_SIB5
;
i
++
)
{
LOG_T
(
RRC
,
"%x."
,
buffer_pP
[
i
]);
}
LOG_T
(
RRC
,
"
\n
"
);
}
/* LOG_DEBUGFLAG(DEBUG_RRC) */
return
(
RC
.
rrc
[
Mod_idP
]
->
carrier
[
CC_id
].
sizeof_SIB5
);
}
else
{
return
(
0
);
return
(
0
);
}
}
}
}
...
...
openair2/RRC/LTE/MESSAGES/asn1_msg.c
View file @
9ad2b40a
...
@@ -894,8 +894,8 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
...
@@ -894,8 +894,8 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
LTE_MCC_MNC_Digit_t
*
dummy_mnc_1
;
LTE_MCC_MNC_Digit_t
*
dummy_mnc_1
;
LTE_MCC_MNC_Digit_t
*
dummy_mnc_2
;
LTE_MCC_MNC_Digit_t
*
dummy_mnc_2
;
asn_enc_rval_t
enc_rval
;
asn_enc_rval_t
enc_rval
;
LTE_SchedulingInfo_t
*
schedulingInfo
=
NULL
,
*
schedulingInfo2
=
NULL
;
LTE_SchedulingInfo_t
schedulingInfo
[
5
],
*
schedulingInfo2
;
LTE_SIB_Type_t
*
sib_type
=
NULL
,
*
sib_type2
=
NULL
;
LTE_SIB_Type_t
sib_type
[
5
],
*
sib_type2
;
uint8_t
*
buffer
;
uint8_t
*
buffer
;
LTE_BCCH_DL_SCH_Message_t
*
bcch_message
;
LTE_BCCH_DL_SCH_Message_t
*
bcch_message
;
LTE_SystemInformationBlockType1_t
**
sib1
;
LTE_SystemInformationBlockType1_t
**
sib1
;
...
@@ -915,15 +915,13 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
...
@@ -915,15 +915,13 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
bcch_message
->
message
.
choice
.
c1
.
present
=
LTE_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1
;
bcch_message
->
message
.
choice
.
c1
.
present
=
LTE_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1
;
// memcpy(&bcch_message.message.choice.c1.choice.systemInformationBlockType1,sib1,sizeof(SystemInformationBlockType1_t));
// memcpy(&bcch_message.message.choice.c1.choice.systemInformationBlockType1,sib1,sizeof(SystemInformationBlockType1_t));
*
sib1
=
&
bcch_message
->
message
.
choice
.
c1
.
choice
.
systemInformationBlockType1
;
*
sib1
=
&
bcch_message
->
message
.
choice
.
c1
.
choice
.
systemInformationBlockType1
;
sib_type
=
CALLOC
(
1
,
sizeof
(
LTE_SIB_Type_t
));
schedulingInfo
=
CALLOC
(
1
,
sizeof
(
LTE_SchedulingInfo_t
));
PLMN_identity_info
=
CALLOC
(
1
,
sizeof
(
LTE_PLMN_IdentityInfo_t
)
*
num_plmn
);
PLMN_identity_info
=
CALLOC
(
1
,
sizeof
(
LTE_PLMN_IdentityInfo_t
)
*
num_plmn
);
if
(
PLMN_identity_info
==
NULL
)
if
(
PLMN_identity_info
==
NULL
)
exit
(
1
);
exit
(
1
);
memset
(
PLMN_identity_info
,
0
,
num_plmn
*
sizeof
(
LTE_PLMN_IdentityInfo_t
));
memset
(
PLMN_identity_info
,
0
,
num_plmn
*
sizeof
(
LTE_PLMN_IdentityInfo_t
));
memset
(
schedulingInfo
,
0
,
sizeof
(
LTE_SchedulingInfo_t
));
memset
(
schedulingInfo
,
0
,
5
*
sizeof
(
LTE_SchedulingInfo_t
));
memset
(
sib_type
,
0
,
sizeof
(
LTE_SIB_Type_t
));
memset
(
sib_type
,
0
,
sizeof
(
LTE_SIB_Type_t
));
if
(
configuration
->
eMBMS_M2_configured
){
if
(
configuration
->
eMBMS_M2_configured
){
sib_type2
=
CALLOC
(
1
,
sizeof
(
LTE_SIB_Type_t
));
sib_type2
=
CALLOC
(
1
,
sizeof
(
LTE_SIB_Type_t
));
...
@@ -1037,16 +1035,28 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
...
@@ -1037,16 +1035,28 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
//(*sib1)->p_Max = CALLOC(1, sizeof(P_Max_t));
//(*sib1)->p_Max = CALLOC(1, sizeof(P_Max_t));
// *((*sib1)->p_Max) = 23;
// *((*sib1)->p_Max) = 23;
(
*
sib1
)
->
freqBandIndicator
=
configuration
->
eutra_band
[
CC_id
];
(
*
sib1
)
->
freqBandIndicator
=
configuration
->
eutra_band
[
CC_id
];
schedulingInfo
->
si_Periodicity
=
LTE_SchedulingInfo__si_Periodicity_rf8
;
if
(
RC
.
ss
.
mode
==
SS_SOFTMODEM
)
{
if
(
configuration
->
eMBMS_M2_configured
){
for
(
int
i
=
0
;
i
<
configuration
->
schedulingInfo_count
;
i
++
)
{
schedulingInfo2
->
si_Periodicity
=
LTE_SchedulingInfo__si_Periodicity_rf8
;
schedulingInfo
[
i
].
si_Periodicity
=
configuration
->
schedulingInfo
[
i
].
si_Periodicity
;
sib_type
[
i
]
=
configuration
->
schedulingInfo
[
i
].
sib_MappingInfo
.
LTE_SIB_Type
[
i
];
if
(
sib_type
[
i
]
==
2
)
{
RC
.
rrc
[
Mod_id
]
->
carrier
[
CC_id
].
sib5_Scheduled
=
true
;
}
ASN_SEQUENCE_ADD
(
&
schedulingInfo
[
i
].
sib_MappingInfo
.
list
,
&
sib_type
[
i
]);
ASN_SEQUENCE_ADD
(
&
(
*
sib1
)
->
schedulingInfoList
.
list
,
&
schedulingInfo
[
i
]);
}
}
}
else
{
// This is for SIB2/3
// This is for SIB2/3
(
*
sib1
)
->
schedulingInfoList
.
list
.
free
=
free_LTE_SchedulingInfo_t
;
(
*
sib1
)
->
schedulingInfoList
.
list
.
free
=
free_LTE_SchedulingInfo_t
;
asn_sequence_empty
(
&
(
*
sib1
)
->
schedulingInfoList
.
list
);
asn_sequence_empty
(
&
(
*
sib1
)
->
schedulingInfoList
.
list
);
*
sib_type
=
LTE_SIB_Type_sibType3
;
schedulingInfo
[
0
].
si_Periodicity
=
LTE_SchedulingInfo__si_Periodicity_rf8
;
ASN_SEQUENCE_ADD
(
&
schedulingInfo
->
sib_MappingInfo
.
list
,
sib_type
);
sib_type
[
0
]
=
LTE_SIB_Type_sibType3
;
ASN_SEQUENCE_ADD
(
&
(
*
sib1
)
->
schedulingInfoList
.
list
,
schedulingInfo
);
ASN_SEQUENCE_ADD
(
&
schedulingInfo
[
0
].
sib_MappingInfo
.
list
,
&
sib_type
[
0
]);
ASN_SEQUENCE_ADD
(
&
(
*
sib1
)
->
schedulingInfoList
.
list
,
&
schedulingInfo
);
}
if
(
configuration
->
eMBMS_M2_configured
){
schedulingInfo2
->
si_Periodicity
=
LTE_SchedulingInfo__si_Periodicity_rf8
;
}
if
(
configuration
->
eMBMS_M2_configured
){
if
(
configuration
->
eMBMS_M2_configured
){
*
sib_type2
=
LTE_SIB_Type_sibType13_v920
;
*
sib_type2
=
LTE_SIB_Type_sibType13_v920
;
ASN_SEQUENCE_ADD
(
&
schedulingInfo2
->
sib_MappingInfo
.
list
,
sib_type2
);
ASN_SEQUENCE_ADD
(
&
schedulingInfo2
->
sib_MappingInfo
.
list
,
sib_type2
);
...
@@ -1054,6 +1064,7 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
...
@@ -1054,6 +1064,7 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
}
}
// ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,NULL);
// ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,NULL);
if
(
configuration
->
frame_type
[
CC_id
]
==
TDD
)
if
(
configuration
->
frame_type
[
CC_id
]
==
TDD
)
{
{
if
(
NULL
==
(
*
sib1
)
->
tdd_Config
){(
*
sib1
)
->
tdd_Config
=
CALLOC
(
1
,
sizeof
(
struct
LTE_TDD_Config
));}
if
(
NULL
==
(
*
sib1
)
->
tdd_Config
){(
*
sib1
)
->
tdd_Config
=
CALLOC
(
1
,
sizeof
(
struct
LTE_TDD_Config
));}
...
@@ -2316,6 +2327,167 @@ uint8_t do_SIB23(uint8_t Mod_id,
...
@@ -2316,6 +2327,167 @@ uint8_t do_SIB23(uint8_t Mod_id,
return
((
enc_rval
.
encoded
+
7
)
/
8
);
return
((
enc_rval
.
encoded
+
7
)
/
8
);
}
}
uint8_t
do_SIB4
(
uint8_t
Mod_id
,
int
CC_id
,
BOOLEAN_t
brOption
,
RrcConfigurationReq
*
configuration
)
{
struct
LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member
*
sib4_part
;
LTE_SystemInformationBlockType4_t
**
sib4
=
&
RC
.
rrc
[
Mod_id
]
->
carrier
[
CC_id
].
sib4
;
LTE_BCCH_DL_SCH_Message_t
*
bcch_message
=
&
RC
.
rrc
[
Mod_id
]
->
carrier
[
CC_id
].
systemInformation
;
asn_enc_rval_t
enc_rval
;
uint8_t
*
buffer
;
buffer
=
RC
.
rrc
[
Mod_id
]
->
carrier
[
CC_id
].
SIB4
;
LOG_I
(
RRC
,
"[eNB %d] Configuration SIB4, intraFreqNeighCellListPresent: %d
\n
"
,
Mod_id
,
configuration
->
intraFreqNeighCellListPresent
);
sib4_part
=
CALLOC
(
1
,
sizeof
(
struct
LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member
));
memset
(
sib4_part
,
0
,
sizeof
(
struct
LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member
));
sib4_part
->
present
=
LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4
;
*
sib4
=
&
sib4_part
->
choice
.
sib4
;
/* TODO: Need to optimize the below code same as do_SIB5 and verify the SIB4 */
if
(
true
==
configuration
->
intraFreqNeighCellListPresent
)
{
ASN_SEQUENCE_ADD
(
&
(
*
sib4
)
->
intraFreqNeighCellList
->
list
,
configuration
->
InterFreqCarrierFreqInfo
);
}
bcch_message
->
message
.
present
=
LTE_BCCH_DL_SCH_MessageType_PR_c1
;
bcch_message
->
message
.
choice
.
c1
.
present
=
LTE_BCCH_DL_SCH_MessageType__c1_PR_systemInformation
;
bcch_message
->
message
.
choice
.
c1
.
choice
.
systemInformation
.
criticalExtensions
.
present
=
LTE_SystemInformation__criticalExtensions_PR_systemInformation_r8
;
bcch_message
->
message
.
choice
.
c1
.
choice
.
systemInformation
.
criticalExtensions
.
choice
.
systemInformation_r8
.
sib_TypeAndInfo
.
list
.
count
=
0
;
ASN_SEQUENCE_ADD
(
&
bcch_message
->
message
.
choice
.
c1
.
choice
.
systemInformation
.
criticalExtensions
.
choice
.
systemInformation_r8
.
sib_TypeAndInfo
.
list
,
sib4_part
);
xer_fprint
(
stdout
,
&
asn_DEF_LTE_BCCH_DL_SCH_Message
,
(
void
*
)
bcch_message
);
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_LTE_BCCH_DL_SCH_Message
,
NULL
,
(
void
*
)
bcch_message
,
buffer
,
900
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %lu)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
LOG_D
(
RRC
,
"[eNB] SystemInformation4 Encoded %zd bits (%zd bytes)
\n
"
,
enc_rval
.
encoded
,(
enc_rval
.
encoded
+
7
)
/
8
);
LOG_P
(
OAILOG_INFO
,
"BCCH_DL_SCH_Message"
,
(
uint8_t
*
)
buffer
,
900
);
if
(
enc_rval
.
encoded
==-
1
)
{
msg
(
"[RRC] ASN1 : SI encoding failed for SIB4
\n
"
);
return
(
-
1
);
}
return
((
enc_rval
.
encoded
+
7
)
/
8
);
}
uint8_t
do_SIB5
(
uint8_t
Mod_id
,
int
CC_id
,
BOOLEAN_t
brOption
,
RrcConfigurationReq
*
configuration
)
{
struct
LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member
*
sib5_part
;
LTE_SystemInformationBlockType5_t
**
sib5
=
&
RC
.
rrc
[
Mod_id
]
->
carrier
[
CC_id
].
sib5
;
LTE_BCCH_DL_SCH_Message_t
*
bcch_message
=
&
RC
.
rrc
[
Mod_id
]
->
carrier
[
CC_id
].
systemInformation
;
asn_enc_rval_t
enc_rval
;
uint8_t
*
buffer
;
buffer
=
RC
.
rrc
[
Mod_id
]
->
carrier
[
CC_id
].
SIB5
;
if
(
!
sib5
)
{
LOG_E
(
RRC
,
"[eNB %d] sib5 is null, exiting
\n
"
,
Mod_id
);
exit
(
-
1
);
}
if
(
bcch_message
)
{
memset
(
bcch_message
,
0
,
sizeof
(
LTE_BCCH_DL_SCH_Message_t
));
}
else
{
LOG_E
(
RRC
,
"[eNB %d] BCCH_MESSAGE is null, exiting
\n
"
,
Mod_id
);
exit
(
-
1
);
}
LOG_I
(
RRC
,
"[eNB %d] Configuration SIB5 for CC_id: %d
\n
"
,
Mod_id
,
CC_id
);
sib5_part
=
CALLOC
(
1
,
sizeof
(
struct
LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member
));
memset
(
sib5_part
,
0
,
sizeof
(
struct
LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member
));
sib5_part
->
present
=
LTE_SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib5
;
*
sib5
=
&
sib5_part
->
choice
.
sib5
;
LTE_InterFreqCarrierFreqInfo_t
*
InterFreqCarrierInfo
;
InterFreqCarrierInfo
=
CALLOC
(
1
,
sizeof
(
struct
LTE_InterFreqCarrierFreqInfo
));
for
(
int
i
=
0
;
i
<
configuration
->
InterFreqCarrierFreqInfoCount
;
i
++
)
{
InterFreqCarrierInfo
->
dl_CarrierFreq
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
dl_CarrierFreq
[
CC_id
];
InterFreqCarrierInfo
->
q_RxLevMin
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
q_RxLevMin
[
CC_id
];
if
(
true
==
configuration
->
InterFreqCarrierFreqInfo
[
i
].
p_Max_Present
[
CC_id
])
{
InterFreqCarrierInfo
->
p_Max
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
p_Max
[
CC_id
];
}
InterFreqCarrierInfo
->
t_ReselectionEUTRA
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
t_ReselectionEUTRA
[
CC_id
];
if
(
true
==
configuration
->
InterFreqCarrierFreqInfo
[
i
].
t_ReselectionEUTRA_SF_Present
[
CC_id
])
{
InterFreqCarrierInfo
->
t_ReselectionEUTRA_SF
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
t_ReselectionEUTRA_SF
[
CC_id
];
}
InterFreqCarrierInfo
->
threshX_High
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
threshX_High
[
CC_id
];
InterFreqCarrierInfo
->
threshX_Low
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
threshX_Low
[
CC_id
];
InterFreqCarrierInfo
->
allowedMeasBandwidth
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
allowedMeasBandwidth
[
CC_id
];
InterFreqCarrierInfo
->
presenceAntennaPort1
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
presenceAntennaPort1
[
CC_id
];
if
(
true
==
configuration
->
InterFreqCarrierFreqInfo
[
i
].
cellReselectionPriority_Present
[
CC_id
])
{
InterFreqCarrierInfo
->
cellReselectionPriority
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
cellReselectionPriority
[
CC_id
];
}
InterFreqCarrierInfo
->
neighCellConfig
.
size
=
0
;
//1;
//InterFreqCarrierInfo->neighCellConfig.buf = CALLOC(1,1);
InterFreqCarrierInfo
->
neighCellConfig
.
bits_unused
=
0
;
InterFreqCarrierInfo
->
neighCellConfig
.
buf
=
NULL
;
//[0] = 0x01<<4;
if
(
true
==
configuration
->
InterFreqCarrierFreqInfo
[
i
].
q_OffsetFreqPresent
[
CC_id
])
{
InterFreqCarrierInfo
->
q_OffsetFreq
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
q_OffsetFreq
[
CC_id
];
}
if
(
true
==
configuration
->
InterFreqCarrierFreqInfo
[
i
].
interFreqNeighCellList_Present
[
CC_id
])
{
ASN_SEQUENCE_ADD
(
&
InterFreqCarrierInfo
->
interFreqNeighCellList
,
configuration
->
InterFreqCarrierFreqInfo
[
i
].
interFreqNeighCellList
[
CC_id
]);
}
if
(
true
==
configuration
->
InterFreqCarrierFreqInfo
[
i
].
interFreqBlackCellList_Present
[
CC_id
])
{
ASN_SEQUENCE_ADD
(
&
InterFreqCarrierInfo
->
interFreqBlackCellList
,
configuration
->
InterFreqCarrierFreqInfo
[
i
].
interFreqBlackCellList
[
CC_id
]);
}
if
(
true
==
configuration
->
InterFreqCarrierFreqInfo
[
i
].
q_QualMin_r9_Present
[
CC_id
])
{
InterFreqCarrierInfo
->
ext1
->
q_QualMin_r9
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
q_QualMin_r9
[
CC_id
];
}
if
(
true
==
configuration
->
InterFreqCarrierFreqInfo
[
i
].
threshX_Q_r9_Present
[
CC_id
])
{
InterFreqCarrierInfo
->
ext1
->
threshX_Q_r9
->
threshX_HighQ_r9
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
threshX_Q_r9
[
CC_id
].
threshX_HighQ_r9
;
InterFreqCarrierInfo
->
ext1
->
threshX_Q_r9
->
threshX_LowQ_r9
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
threshX_Q_r9
[
CC_id
].
threshX_LowQ_r9
;
}
if
(
true
==
configuration
->
InterFreqCarrierFreqInfo
[
i
].
q_QualMinWB_r11_Present
[
CC_id
])
{
InterFreqCarrierInfo
->
ext2
->
q_QualMinWB_r11
=
configuration
->
InterFreqCarrierFreqInfo
[
i
].
q_QualMinWB_r11
[
CC_id
];
}
ASN_SEQUENCE_ADD
(
&
(
*
sib5
)
->
interFreqCarrierFreqList
.
list
,
InterFreqCarrierInfo
);
}
(
*
sib5
)
->
lateNonCriticalExtension
=
NULL
;
(
*
sib5
)
->
ext1
=
NULL
;
(
*
sib5
)
->
ext2
=
NULL
;
(
*
sib5
)
->
ext3
=
NULL
;
(
*
sib5
)
->
ext4
=
NULL
;
(
*
sib5
)
->
ext5
=
NULL
;
(
*
sib5
)
->
ext6
=
NULL
;
(
*
sib5
)
->
ext7
=
NULL
;
bcch_message
->
message
.
present
=
LTE_BCCH_DL_SCH_MessageType_PR_c1
;
bcch_message
->
message
.
choice
.
c1
.
present
=
LTE_BCCH_DL_SCH_MessageType__c1_PR_systemInformation
;
bcch_message
->
message
.
choice
.
c1
.
choice
.
systemInformation
.
criticalExtensions
.
present
=
LTE_SystemInformation__criticalExtensions_PR_systemInformation_r8
;
bcch_message
->
message
.
choice
.
c1
.
choice
.
systemInformation
.
criticalExtensions
.
choice
.
systemInformation_r8
.
sib_TypeAndInfo
.
list
.
count
=
0
;
ASN_SEQUENCE_ADD
(
&
bcch_message
->
message
.
choice
.
c1
.
choice
.
systemInformation
.
criticalExtensions
.
choice
.
systemInformation_r8
.
sib_TypeAndInfo
.
list
,
sib5_part
);
xer_fprint
(
stdout
,
&
asn_DEF_LTE_BCCH_DL_SCH_Message
,
(
void
*
)
bcch_message
);
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_LTE_BCCH_DL_SCH_Message
,
NULL
,
(
void
*
)
bcch_message
,
buffer
,
900
);
AssertFatal
(
enc_rval
.
encoded
>
0
,
"ASN1 message encoding failed (%s, %lu)!
\n
"
,
enc_rval
.
failed_type
->
name
,
enc_rval
.
encoded
);
LOG_D
(
RRC
,
"[eNB] SystemInformation5 Encoded %zd bits (%zd bytes)
\n
"
,
enc_rval
.
encoded
,(
enc_rval
.
encoded
+
7
)
/
8
);
LOG_P
(
OAILOG_INFO
,
"BCCH_DL_SCH_Message"
,
(
uint8_t
*
)
buffer
,
900
);
if
(
enc_rval
.
encoded
==-
1
)
{
msg
(
"[RRC] ASN1 : SI encoding failed for SIB5
\n
"
);
return
(
-
1
);
}
return
((
enc_rval
.
encoded
+
7
)
/
8
);
}
uint8_t
do_RRCConnectionRequest
(
uint8_t
Mod_id
,
uint8_t
*
buffer
,
size_t
buffer_size
,
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
;
...
...
openair2/RRC/LTE/MESSAGES/asn1_msg.h
View file @
9ad2b40a
...
@@ -131,6 +131,30 @@ uint8_t do_SIB23(uint8_t Mod_id,int CC_id, BOOLEAN_t brOption,
...
@@ -131,6 +131,30 @@ uint8_t do_SIB23(uint8_t Mod_id,int CC_id, BOOLEAN_t brOption,
RrcConfigurationReq
*
configuration
RrcConfigurationReq
*
configuration
);
);
/**
\brief Generate a default configuration for SIB4 in one System Information PDU (eNB).
@param Mod_id Index of eNB (used to derive some parameters)
@param buffer Pointer to PER-encoded ASN.1 description of SI PDU
@param systemInformation Pointer to asn1c C representation of SI PDU
@param sib4 Pointer (returned) to sib4 component withing SI PDU
@return size of encoded bit stream in bytes*/
uint8_t
do_SIB4
(
uint8_t
Mod_id
,
int
CC_id
,
BOOLEAN_t
brOption
,
RrcConfigurationReq
*
configuration
);
/**
\brief Generate a default configuration for SIB5 in one System Information PDU (eNB).
@param Mod_id Index of eNB (used to derive some parameters)
@param buffer Pointer to PER-encoded ASN.1 description of SI PDU
@param systemInformation Pointer to asn1c C representation of SI PDU
@param sib5 Pointer (returned) to sib5 component withing SI PDU
@return size of encoded bit stream in bytes*/
uint8_t
do_SIB5
(
uint8_t
Mod_id
,
int
CC_id
,
BOOLEAN_t
brOption
,
RrcConfigurationReq
*
configuration
);
/**
/**
\brief Generate an RRCConnectionRequest UL-CCCH-Message (UE) based on random string or S-TMSI. This
\brief Generate an RRCConnectionRequest UL-CCCH-Message (UE) based on random string or S-TMSI. This
routine only generates an mo-data establishment cause.
routine only generates an mo-data establishment cause.
...
...
openair2/RRC/LTE/rrc_defs.h
View file @
9ad2b40a
...
@@ -693,6 +693,10 @@ typedef struct {
...
@@ -693,6 +693,10 @@ typedef struct {
uint8_t
sizeof_SIB1
;
uint8_t
sizeof_SIB1
;
uint8_t
*
SIB23
;
uint8_t
*
SIB23
;
uint8_t
sizeof_SIB23
;
uint8_t
sizeof_SIB23
;
uint8_t
*
SIB4
;
uint8_t
sizeof_SIB4
;
uint8_t
*
SIB5
;
uint8_t
sizeof_SIB5
;
uint8_t
*
SIB1_BR
;
uint8_t
*
SIB1_BR
;
uint8_t
sizeof_SIB1_BR
;
uint8_t
sizeof_SIB1_BR
;
uint8_t
*
SIB23_BR
;
uint8_t
*
SIB23_BR
;
...
@@ -725,6 +729,8 @@ typedef struct {
...
@@ -725,6 +729,8 @@ typedef struct {
LTE_SystemInformationBlockType1_t
*
sib1
;
LTE_SystemInformationBlockType1_t
*
sib1
;
LTE_SystemInformationBlockType2_t
*
sib2
;
LTE_SystemInformationBlockType2_t
*
sib2
;
LTE_SystemInformationBlockType3_t
*
sib3
;
LTE_SystemInformationBlockType3_t
*
sib3
;
LTE_SystemInformationBlockType4_t
*
sib4
;
LTE_SystemInformationBlockType5_t
*
sib5
;
LTE_SystemInformationBlockType1_t
*
sib1_BR
;
LTE_SystemInformationBlockType1_t
*
sib1_BR
;
LTE_SystemInformationBlockType2_t
*
sib2_BR
;
LTE_SystemInformationBlockType2_t
*
sib2_BR
;
LTE_SystemInformationBlockType1_MBMS_r14_t
*
sib1_MBMS
;
LTE_SystemInformationBlockType1_MBMS_r14_t
*
sib1_MBMS
;
...
@@ -743,6 +749,7 @@ typedef struct {
...
@@ -743,6 +749,7 @@ typedef struct {
LTE_MCCH_Message_t
mcch_counting
;
LTE_MCCH_Message_t
mcch_counting
;
LTE_MBMSCountingRequest_r10_t
*
mcch_message_counting
;
LTE_MBMSCountingRequest_r10_t
*
mcch_message_counting
;
SRB_INFO
MCCH_MESS_COUNTING
[
8
];
// MAX_MBSFN_AREA
SRB_INFO
MCCH_MESS_COUNTING
[
8
];
// MAX_MBSFN_AREA
bool
sib5_Scheduled
;
//TTN - SIB 18,19,21 for D2D
//TTN - SIB 18,19,21 for D2D
LTE_SystemInformationBlockType18_r12_t
*
sib18
;
LTE_SystemInformationBlockType18_r12_t
*
sib18
;
...
...
openair2/RRC/LTE/rrc_eNB.c
View file @
9ad2b40a
...
@@ -247,6 +247,8 @@ init_SI(
...
@@ -247,6 +247,8 @@ init_SI(
if
(
NULL
==
carrier
->
MIB
)
{
carrier
->
MIB
=
(
uint8_t
*
)
malloc16
(
4
);}
if
(
NULL
==
carrier
->
MIB
)
{
carrier
->
MIB
=
(
uint8_t
*
)
malloc16
(
4
);}
carrier
->
sizeof_SIB1
=
0
;
carrier
->
sizeof_SIB1
=
0
;
carrier
->
sizeof_SIB23
=
0
;
carrier
->
sizeof_SIB23
=
0
;
carrier
->
sizeof_SIB4
=
0
;
carrier
->
sizeof_SIB5
=
0
;
if
(
NULL
==
carrier
->
SIB1
)
{
carrier
->
SIB1
=
(
uint8_t
*
)
malloc16
(
32
);}
if
(
NULL
==
carrier
->
SIB1
)
{
carrier
->
SIB1
=
(
uint8_t
*
)
malloc16
(
32
);}
AssertFatal
(
carrier
->
SIB1
!=
NULL
,
PROTOCOL_RRC_CTXT_FMT
" init_SI: FATAL, no memory for SIB1 allocated
\n
"
,
AssertFatal
(
carrier
->
SIB1
!=
NULL
,
PROTOCOL_RRC_CTXT_FMT
" init_SI: FATAL, no memory for SIB1 allocated
\n
"
,
...
@@ -337,6 +339,34 @@ init_SI(
...
@@ -337,6 +339,34 @@ init_SI(
PROTOCOL_RRC_CTXT_ARGS
(
ctxt_pP
),
PROTOCOL_RRC_CTXT_ARGS
(
ctxt_pP
),
carrier
->
sib2
->
radioResourceConfigCommon
.
pusch_ConfigCommon
.
ul_ReferenceSignalsPUSCH
.
cyclicShift
);
carrier
->
sib2
->
radioResourceConfigCommon
.
pusch_ConfigCommon
.
ul_ReferenceSignalsPUSCH
.
cyclicShift
);
if
(
true
==
configuration
->
sib4_Present
)
{
if
(
NULL
==
carrier
->
SIB4
)
{
carrier
->
SIB4
=
(
uint8_t
*
)
malloc16
(
64
);
}
AssertFatal
(
carrier
->
SIB4
!=
NULL
,
"cannot allocate memory for SIB4"
);
carrier
->
sizeof_SIB4
=
do_SIB4
(
ctxt_pP
->
module_id
,
CC_id
,
FALSE
,
configuration
);
LOG_I
(
RRC
,
"do_SIB4, size %d
\n
"
,
carrier
->
sizeof_SIB4
);
AssertFatal
(
carrier
->
sizeof_SIB4
!=
255
,
"FATAL, RC.rrc[mod].carrier[CC_id].sizeof_SIB4 == 255"
);
}
if
(
true
==
configuration
->
sib5_Present
)
{
if
(
NULL
==
carrier
->
SIB5
)
{
carrier
->
SIB5
=
(
uint8_t
*
)
malloc16
(
64
);
}
AssertFatal
(
carrier
->
SIB5
!=
NULL
,
"cannot allocate memory for SIB5"
);
carrier
->
sizeof_SIB5
=
do_SIB5
(
ctxt_pP
->
module_id
,
CC_id
,
FALSE
,
configuration
);
LOG_I
(
RRC
,
"do_SIB5, size %d
\n
"
,
carrier
->
sizeof_SIB5
);
AssertFatal
(
carrier
->
sizeof_SIB5
!=
255
,
"FATAL, RC.rrc[mod].carrier[CC_id].sizeof_SIB5 == 255"
);
}
if
(
carrier
->
MBMS_flag
>
0
)
{
if
(
carrier
->
MBMS_flag
>
0
)
{
for
(
i
=
0
;
i
<
carrier
->
sib2
->
mbsfn_SubframeConfigList
->
list
.
count
;
i
++
)
{
for
(
i
=
0
;
i
<
carrier
->
sib2
->
mbsfn_SubframeConfigList
->
list
.
count
;
i
++
)
{
// SIB 2
// SIB 2
...
...
openair3/SS/ss_eNB_sys_task.c
View file @
9ad2b40a
...
@@ -435,6 +435,16 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure)
...
@@ -435,6 +435,16 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure)
}
}
}
}
RRC_CONFIGURATION_REQ
(
msg_p
).
schedulingInfo_count
=
SIDL_SIB1_VAL
.
c1
.
v
.
systemInformationBlockType1
.
schedulingInfoList
.
d
;
RRC_CONFIGURATION_REQ
(
msg_p
).
schedulingInfo
=
CALLOC
(
RRC_CONFIGURATION_REQ
(
msg_p
).
schedulingInfo_count
,
sizeof
(
struct
lte_SchedulingInfo_s
));
for
(
int
k
=
0
;
k
<
SIDL_SIB1_VAL
.
c1
.
v
.
systemInformationBlockType1
.
schedulingInfoList
.
d
;
k
++
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
schedulingInfo
[
k
].
si_Periodicity
=
SIDL_SIB1_VAL
.
c1
.
v
.
systemInformationBlockType1
.
schedulingInfoList
.
v
[
k
].
si_Periodicity
;
for
(
int
j
=
0
;
j
<
SIDL_SIB1_VAL
.
c1
.
v
.
systemInformationBlockType1
.
schedulingInfoList
.
v
[
k
].
sib_MappingInfo
.
d
;
j
++
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
schedulingInfo
[
k
].
sib_MappingInfo
.
LTE_SIB_Type
[
k
]
=
SIDL_SIB1_VAL
.
c1
.
v
.
systemInformationBlockType1
.
schedulingInfoList
.
v
[
k
].
sib_MappingInfo
.
v
[
j
];
}
}
RRC_CONFIGURATION_REQ
(
msg_p
).
num_plmn
[
cell_index
]
=
SIB1_CELL_ACCESS_REL_INFO
.
plmn_IdentityList
.
d
;
RRC_CONFIGURATION_REQ
(
msg_p
).
num_plmn
[
cell_index
]
=
SIB1_CELL_ACCESS_REL_INFO
.
plmn_IdentityList
.
d
;
RRC_CONFIGURATION_REQ
(
msg_p
).
systemInfoValueTag
[
cell_index
]
=
SIDL_SIB1_VAL
.
c1
.
v
.
systemInformationBlockType1
.
systemInfoValueTag
;
RRC_CONFIGURATION_REQ
(
msg_p
).
systemInfoValueTag
[
cell_index
]
=
SIDL_SIB1_VAL
.
c1
.
v
.
systemInformationBlockType1
.
systemInfoValueTag
;
...
@@ -448,7 +458,7 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure)
...
@@ -448,7 +458,7 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure)
}
else
if
(
SIB1_CELL_ACCESS_REL_INFO
.
plmn_IdentityList
.
v
->
plmn_Identity
.
mnc
.
d
==
3
)
{
}
else
if
(
SIB1_CELL_ACCESS_REL_INFO
.
plmn_IdentityList
.
v
->
plmn_Identity
.
mnc
.
d
==
3
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
mnc
[
cell_index
][
i
]
=
(((
SIB1_CELL_ACCESS_REL_INFO
.
plmn_IdentityList
.
v
->
plmn_Identity
.
mnc
.
v
[
0
])
<<
16
)
|
((
SIB1_CELL_ACCESS_REL_INFO
.
plmn_IdentityList
.
v
->
plmn_Identity
.
mnc
.
v
[
1
])
<<
8
)
|
((
SIB1_CELL_ACCESS_REL_INFO
.
plmn_IdentityList
.
v
->
plmn_Identity
.
mnc
.
v
[
2
])
<<
0
));
RRC_CONFIGURATION_REQ
(
msg_p
).
mnc
[
cell_index
][
i
]
=
(((
SIB1_CELL_ACCESS_REL_INFO
.
plmn_IdentityList
.
v
->
plmn_Identity
.
mnc
.
v
[
0
])
<<
16
)
|
((
SIB1_CELL_ACCESS_REL_INFO
.
plmn_IdentityList
.
v
->
plmn_Identity
.
mnc
.
v
[
1
])
<<
8
)
|
((
SIB1_CELL_ACCESS_REL_INFO
.
plmn_IdentityList
.
v
->
plmn_Identity
.
mnc
.
v
[
2
])
<<
0
));
}
}
}
if
(
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
d
==
true
)
if
(
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
d
==
true
)
{
{
LOG_A
(
ENB_SS
,
"[SYS] [SIs] size=%ld"
,
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
d
);
LOG_A
(
ENB_SS
,
"[SYS] [SIs] size=%ld"
,
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
d
);
...
@@ -462,21 +472,95 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure)
...
@@ -462,21 +472,95 @@ int sys_add_reconfig_cell(struct CellConfigInfo_Type *AddOrReconfigure)
{
{
for
(
int
j
=
0
;
j
<
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
d
;
j
++
)
for
(
int
j
=
0
;
j
<
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
d
;
j
++
)
{
{
if
(
SQN_SystemInformation_r8_IEs_sib_TypeAndInfo_s_sib2
==
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
d
)
if
(
SQN_SystemInformation_r8_IEs_sib_TypeAndInfo_s_sib2
==
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
d
)
{
{
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig
[
cell_index
].
prach_config_index
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib2
.
radioResourceConfigCommon
.
prach_Config
.
prach_ConfigInfo
.
prach_ConfigIndex
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig
[
cell_index
].
prach_config_index
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib2
.
radioResourceConfigCommon
.
prach_Config
.
prach_ConfigInfo
.
prach_ConfigIndex
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig
[
cell_index
].
prach_high_speed
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib2
.
radioResourceConfigCommon
.
prach_Config
.
prach_ConfigInfo
.
highSpeedFlag
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig
[
cell_index
].
prach_high_speed
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib2
.
radioResourceConfigCommon
.
prach_Config
.
prach_ConfigInfo
.
highSpeedFlag
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig
[
cell_index
].
prach_zero_correlation
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib2
.
radioResourceConfigCommon
.
prach_Config
.
prach_ConfigInfo
.
zeroCorrelationZoneConfig
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig
[
cell_index
].
prach_zero_correlation
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib2
.
radioResourceConfigCommon
.
prach_Config
.
prach_ConfigInfo
.
zeroCorrelationZoneConfig
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig
[
cell_index
].
prach_freq_offset
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib2
.
radioResourceConfigCommon
.
prach_Config
.
prach_ConfigInfo
.
prach_FreqOffset
;
RRC_CONFIGURATION_REQ
(
msg_p
).
radioresourceconfig
[
cell_index
].
prach_freq_offset
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib2
.
radioResourceConfigCommon
.
prach_Config
.
prach_ConfigInfo
.
prach_FreqOffset
;
}
}
if
(
SQN_SystemInformation_r8_IEs_sib_TypeAndInfo_s_sib3
==
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
d
)
/* SIB3 */
{
if
(
SQN_SystemInformation_r8_IEs_sib_TypeAndInfo_s_sib3
==
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
q_Hyst
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib3
.
cellReselectionInfoCommon
.
q_Hyst
;
RRC_CONFIGURATION_REQ
(
msg_p
).
q_Hyst
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib3
.
cellReselectionInfoCommon
.
q_Hyst
;
RRC_CONFIGURATION_REQ
(
msg_p
).
threshServingLow
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib3
.
cellReselectionServingFreqInfo
.
threshServingLow
;
RRC_CONFIGURATION_REQ
(
msg_p
).
threshServingLow
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib3
.
cellReselectionServingFreqInfo
.
threshServingLow
;
RRC_CONFIGURATION_REQ
(
msg_p
).
cellReselectionPriority
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib3
.
cellReselectionServingFreqInfo
.
cellReselectionPriority
;
RRC_CONFIGURATION_REQ
(
msg_p
).
cellReselectionPriority
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib3
.
cellReselectionServingFreqInfo
.
cellReselectionPriority
;
RRC_CONFIGURATION_REQ
(
msg_p
).
sib3_q_RxLevMin
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib3
.
intraFreqCellReselectionInfo
.
q_RxLevMin
;
RRC_CONFIGURATION_REQ
(
msg_p
).
sib3_q_RxLevMin
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib3
.
intraFreqCellReselectionInfo
.
q_RxLevMin
;
RRC_CONFIGURATION_REQ
(
msg_p
).
t_ReselectionEUTRA
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib3
.
intraFreqCellReselectionInfo
.
t_ReselectionEUTRA
;
RRC_CONFIGURATION_REQ
(
msg_p
).
t_ReselectionEUTRA
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib3
.
intraFreqCellReselectionInfo
.
t_ReselectionEUTRA
;
}
}
/* SIB4 */
if
(
SQN_SystemInformation_r8_IEs_sib_TypeAndInfo_s_sib4
==
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
sib4_Present
=
true
;
if
(
true
==
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib4
.
intraFreqNeighCellList
.
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
intraFreqNeighCellListPresent
=
true
;
for
(
int
j
=
0
;
j
<
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib4
.
intraFreqNeighCellList
.
v
.
d
;
j
++
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
intraFreqNeighCellList
[
j
].
physCellId
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib4
.
intraFreqNeighCellList
.
v
.
v
[
j
].
physCellId
;
RRC_CONFIGURATION_REQ
(
msg_p
).
intraFreqNeighCellList
[
j
].
q_OffsetCell
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib4
.
intraFreqNeighCellList
.
v
.
v
[
j
].
q_OffsetCell
;
}
}
}
/* SIB5 */
if
(
SQN_SystemInformation_r8_IEs_sib_TypeAndInfo_s_sib5
==
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
sib5_Present
=
true
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfoCount
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
d
;
for
(
int
k
=
0
;
k
<
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
d
;
k
++
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
dl_CarrierFreq
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
dl_CarrierFreq
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
q_RxLevMin
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
q_RxLevMin
;
if
(
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
p_Max
.
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
p_Max_Present
[
cell_index
]
=
true
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
p_Max
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
p_Max
.
v
;
}
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
t_ReselectionEUTRA
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
t_ReselectionEUTRA
;
if
(
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
t_ReselectionEUTRA_SF
.
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
t_ReselectionEUTRA_SF_Present
[
cell_index
]
=
true
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
t_ReselectionEUTRA_SF
[
cell_index
]
->
sf_Medium
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
t_ReselectionEUTRA_SF
.
v
.
sf_Medium
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
t_ReselectionEUTRA_SF
[
cell_index
]
->
sf_High
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
t_ReselectionEUTRA_SF
.
v
.
sf_High
;
}
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
threshX_High
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
threshX_High
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
threshX_Low
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
threshX_Low
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
allowedMeasBandwidth
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
allowedMeasBandwidth
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
presenceAntennaPort1
[
cell_index
]
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
presenceAntennaPort1
;
if
(
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
cellReselectionPriority
.
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
cellReselectionPriority
[
cell_index
]
=
CALLOC
(
1
,
sizeof
(
long
));
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
cellReselectionPriority_Present
[
cell_index
]
=
true
;
*
(
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
cellReselectionPriority
[
cell_index
])
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
cellReselectionPriority
.
v
;
}
//RRC_CONFIGURATION_REQ(msg_p).InterFreqCarrierFreqInfo[k].neighCellConfig = AddOrReconfigure->Basic.v.BcchConfig.v.BcchInfo.v.SIs.v.v[i].message.v.c1.v.systemInformation.criticalExtensions.v.systemInformation_r8.sib_TypeAndInfo.v[j].v.sib5.interFreqCarrierFreqList.v[k].neighCellConfig;
if
(
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
q_OffsetFreq
.
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
q_OffsetFreqPresent
[
cell_index
]
=
true
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
q_OffsetFreq
[
cell_index
]
=
CALLOC
(
1
,
sizeof
(
enum
LTE_Q_OffsetRange
));
*
(
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
q_OffsetFreq
[
cell_index
])
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
q_OffsetFreq
.
v
;
}
if
(
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
interFreqNeighCellList
.
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
interFreqNeighCellList_Present
[
cell_index
]
=
true
;
for
(
int
l
=
0
;
l
<
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
interFreqNeighCellList
.
v
.
d
;
l
++
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
interFreqNeighCellList
[
cell_index
]
->
physCellId
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
interFreqNeighCellList
.
v
.
v
[
l
].
physCellId
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
interFreqNeighCellList
[
cell_index
]
->
q_OffsetCell
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
interFreqNeighCellList
.
v
.
v
[
l
].
q_OffsetCell
;
}
}
if
(
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
interFreqBlackCellList
.
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
interFreqBlackCellList_Present
[
cell_index
]
=
true
;
for
(
int
m
=
0
;
m
<
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
interFreqBlackCellList
.
v
.
d
;
m
++
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
interFreqBlackCellList
[
cell_index
]
->
start
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
interFreqBlackCellList
.
v
.
v
[
m
].
start
;
if
(
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
interFreqBlackCellList
.
v
.
v
[
m
].
range
.
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
interFreqBlackCellList
[
cell_index
]
->
range
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
interFreqBlackCellList
.
v
.
v
[
m
].
range
.
v
;
}
}
}
if
(
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
q_QualMin_r9
.
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
q_QualMin_r9_Present
[
cell_index
]
=
true
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
q_QualMin_r9
[
cell_index
]
=
CALLOC
(
1
,
sizeof
(
long
));
*
(
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
q_QualMin_r9
[
cell_index
])
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
q_QualMin_r9
.
v
;
}
if
(
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
threshX_Q_r9
.
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
threshX_Q_r9_Present
[
cell_index
]
=
true
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
threshX_Q_r9
[
cell_index
].
threshX_HighQ_r9
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
threshX_Q_r9
.
v
.
threshX_HighQ_r9
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
threshX_Q_r9
[
cell_index
].
threshX_LowQ_r9
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
threshX_Q_r9
.
v
.
threshX_LowQ_r9
;
}
if
(
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
q_QualMinWB_r11
.
d
)
{
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
q_QualMinWB_r11_Present
[
cell_index
]
=
true
;
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
q_QualMinWB_r11
[
cell_index
]
=
CALLOC
(
1
,
sizeof
(
long
));
*
(
RRC_CONFIGURATION_REQ
(
msg_p
).
InterFreqCarrierFreqInfo
[
k
].
q_QualMinWB_r11
[
cell_index
])
=
AddOrReconfigure
->
Basic
.
v
.
BcchConfig
.
v
.
BcchInfo
.
v
.
SIs
.
v
.
v
[
i
].
message
.
v
.
c1
.
v
.
systemInformation
.
criticalExtensions
.
v
.
systemInformation_r8
.
sib_TypeAndInfo
.
v
[
j
].
v
.
sib5
.
interFreqCarrierFreqList
.
v
[
k
].
q_QualMinWB_r11
.
v
;
}
}
}
}
}
}
}
}
...
...
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