Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
Michael Black
OpenXG UE
Commits
9b76c583
Commit
9b76c583
authored
Jan 28, 2021
by
Xue Song
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
modify the f1 establishment process
parent
4657aecf
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
328 additions
and
161 deletions
+328
-161
executables/nr-softmodem.c
executables/nr-softmodem.c
+12
-12
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+1
-1
openair2/F1AP/f1ap_du_interface_management.c
openair2/F1AP/f1ap_du_interface_management.c
+82
-76
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+162
-24
openair2/RRC/NR/MESSAGES/asn1_msg.c
openair2/RRC/NR/MESSAGES/asn1_msg.c
+13
-6
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+5
-0
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+53
-42
No files found.
executables/nr-softmodem.c
View file @
9b76c583
...
@@ -460,24 +460,24 @@ int create_gNB_tasks(uint32_t gnb_nb) {
...
@@ -460,24 +460,24 @@ int create_gNB_tasks(uint32_t gnb_nb) {
LOG_E
(
GNB_APP
,
"Create task for gNB APP failed
\n
"
);
LOG_E
(
GNB_APP
,
"Create task for gNB APP failed
\n
"
);
return
-
1
;
return
-
1
;
}
}
LOG_I
(
NR_RRC
,
"Creating NR RRC gNB Task
\n
"
);
if
(
itti_create_task
(
TASK_RRC_GNB
,
rrc_gnb_task
,
NULL
)
<
0
)
{
LOG_E
(
NR_RRC
,
"Create task for NR RRC gNB failed
\n
"
);
return
-
1
;
}
}
}
if
(
gnb_nb
>
0
)
{
if
(
gnb_nb
>
0
)
{
if
(
!
NODE_IS_D
U
(
RC
.
nrrrc
[
0
]
->
node_type
))
{
if
(
NODE_IS_C
U
(
RC
.
nrrrc
[
0
]
->
node_type
))
{
LOG_I
(
NR_RRC
,
"Creating NR RRC gNB Task
\n
"
);
printf
(
"####### node is CU
\n
"
);
if
(
itti_create_task
(
TASK_RRC_GNB
,
rrc_gnb
_task
,
NULL
)
<
0
)
{
if
(
itti_create_task
(
TASK_CU_F1
,
F1AP_CU
_task
,
NULL
)
<
0
)
{
LOG_E
(
NR_RRC
,
"Create task for NR RRC gNB
failed
\n
"
);
LOG_E
(
F1AP
,
"Create task for F1AP CU
failed
\n
"
);
return
-
1
;
return
-
1
;
}
}
}
if
(
NODE_IS_CU
(
RC
.
nrrrc
[
0
]
->
node_type
))
{
if
(
NODE_IS_DU
(
RC
.
nrrrc
[
0
]
->
node_type
))
{
printf
(
"####### node is CU
\n
"
);
if
(
itti_create_task
(
TASK_CU_F1
,
F1AP_CU_task
,
NULL
)
<
0
)
{
LOG_E
(
F1AP
,
"Create task for F1AP CU failed
\n
"
);
return
-
1
;
}
}
}
else
{
printf
(
"####### node is DU
\n
"
);
printf
(
"####### node is DU
\n
"
);
if
(
itti_create_task
(
TASK_DU_F1
,
F1AP_DU_task
,
NULL
)
<
0
)
{
if
(
itti_create_task
(
TASK_DU_F1
,
F1AP_DU_task
,
NULL
)
<
0
)
{
LOG_E
(
F1AP
,
"Create task for F1AP DU failed
\n
"
);
LOG_E
(
F1AP
,
"Create task for F1AP DU failed
\n
"
);
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
9b76c583
...
@@ -265,7 +265,7 @@ void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req) {
...
@@ -265,7 +265,7 @@ void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req) {
LOG_D
(
PHY
,
"ULSCH received ok
\n
"
);
LOG_D
(
PHY
,
"ULSCH received ok
\n
"
);
nr_fill_indication
(
gNB
,
ulsch_harq
->
frame
,
ulsch_harq
->
slot
,
rdata
->
ulsch_id
,
rdata
->
harq_pid
,
0
);
nr_fill_indication
(
gNB
,
ulsch_harq
->
frame
,
ulsch_harq
->
slot
,
rdata
->
ulsch_id
,
rdata
->
harq_pid
,
0
);
log_dump
(
PHY
,
ulsch_harq
->
b
,
16
,
LOG_DUMP_CHAR
,
"gnb pusch rx frame %d %d: "
,
ulsch_harq
->
frame
,
ulsch_harq
->
slot
);
//
log_dump(PHY, ulsch_harq->b, 16, LOG_DUMP_CHAR,"gnb pusch rx frame %d %d: ", ulsch_harq->frame, ulsch_harq->slot);
}
else
{
}
else
{
LOG_I
(
PHY
,
"[gNB %d] ULSCH: Setting NAK for SFN/SF %d/%d (pid %d, status %d, round %d, TBS %d) r %d
\n
"
,
LOG_I
(
PHY
,
"[gNB %d] ULSCH: Setting NAK for SFN/SF %d/%d (pid %d, status %d, round %d, TBS %d) r %d
\n
"
,
gNB
->
Mod_id
,
ulsch_harq
->
frame
,
ulsch_harq
->
slot
,
gNB
->
Mod_id
,
ulsch_harq
->
frame
,
ulsch_harq
->
slot
,
...
...
openair2/F1AP/f1ap_du_interface_management.c
View file @
9b76c583
This diff is collapsed.
Click to expand it.
openair2/GNB_APP/gnb_config.c
View file @
9b76c583
This diff is collapsed.
Click to expand it.
openair2/RRC/NR/MESSAGES/asn1_msg.c
View file @
9b76c583
...
@@ -301,9 +301,9 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
...
@@ -301,9 +301,9 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
// TODO : Add support for more than one PLMN
// TODO : Add support for more than one PLMN
//int num_plmn = configuration->num_plmn;
//int num_plmn = configuration->num_plmn;
int
num_plmn
=
1
;
int
num_plmn
=
1
;
struct
NR_PLMN_Identity
nr_plmn
[
num_plmn
]
;
struct
NR_PLMN_Identity
*
nr_plmn
=
CALLOC
(
1
,
sizeof
(
struct
NR_PLMN_Identity
)
*
num_plmn
)
;
NR_MCC_MNC_Digit_t
nr_mcc_digit
[
num_plmn
][
3
]
;
NR_MCC_MNC_Digit_t
(
*
nr_mcc_digit
)[
3
]
=
(
NR_MCC_MNC_Digit_t
(
*
)[
3
])
CALLOC
(
1
,
sizeof
(
NR_MCC_MNC_Digit_t
)
*
num_plmn
*
3
)
;
NR_MCC_MNC_Digit_t
nr_mnc_digit
[
num_plmn
][
3
]
;
NR_MCC_MNC_Digit_t
(
*
nr_mnc_digit
)[
3
]
=
(
NR_MCC_MNC_Digit_t
(
*
)[
3
])
CALLOC
(
1
,
sizeof
(
NR_MCC_MNC_Digit_t
)
*
num_plmn
*
3
);
;
memset
(
nr_plmn
,
0
,
sizeof
(
nr_plmn
));
memset
(
nr_plmn
,
0
,
sizeof
(
nr_plmn
));
memset
(
nr_mcc_digit
,
0
,
sizeof
(
nr_mcc_digit
));
memset
(
nr_mcc_digit
,
0
,
sizeof
(
nr_mcc_digit
));
memset
(
nr_mnc_digit
,
0
,
sizeof
(
nr_mnc_digit
));
memset
(
nr_mnc_digit
,
0
,
sizeof
(
nr_mnc_digit
));
...
@@ -336,9 +336,14 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
...
@@ -336,9 +336,14 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
nr_mnc_digit
[
i
][
2
]
=
(
configuration
->
mnc
[
i
])
%
10
;
nr_mnc_digit
[
i
][
2
]
=
(
configuration
->
mnc
[
i
])
%
10
;
nr_plmn
[
i
].
mnc
.
list
.
size
=
0
;
nr_plmn
[
i
].
mnc
.
list
.
size
=
0
;
nr_plmn
[
i
].
mnc
.
list
.
count
=
0
;
nr_plmn
[
i
].
mnc
.
list
.
count
=
0
;
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
0
]);
if
(
nr_mnc_digit
[
i
][
0
]
==
0
)
{
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
1
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
1
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
2
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
2
]);
}
else
{
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
0
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
1
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn
[
i
].
mnc
.
list
,
&
nr_mnc_digit
[
i
][
2
]);
}
ASN_SEQUENCE_ADD
(
&
nr_plmn_info
->
plmn_IdentityList
.
list
,
&
nr_plmn
[
i
]);
ASN_SEQUENCE_ADD
(
&
nr_plmn_info
->
plmn_IdentityList
.
list
,
&
nr_plmn
[
i
]);
}
//end plmn loop
}
//end plmn loop
...
@@ -362,6 +367,8 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
...
@@ -362,6 +367,8 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
nr_uac_BarringInfoSet.uac_BarringForAccessIdentity.bits_unused = 1;
nr_uac_BarringInfoSet.uac_BarringForAccessIdentity.bits_unused = 1;
ASN_SEQUENCE_ADD(&sib1->uac_BarringInfo->uac_BarringInfoSetList, &nr_uac_BarringInfoSet);
ASN_SEQUENCE_ADD(&sib1->uac_BarringInfo->uac_BarringInfoSetList, &nr_uac_BarringInfoSet);
#endif
#endif
xer_fprint
(
stdout
,
&
asn_DEF_NR_BCCH_DL_SCH_Message
,
(
void
*
)
sib1_message
);
//encode SIB1 to data
//encode SIB1 to data
carrier
->
SIB1
=
(
uint8_t
*
)
malloc16
(
128
);
carrier
->
SIB1
=
(
uint8_t
*
)
malloc16
(
128
);
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_BCCH_DL_SCH_Message
,
enc_rval
=
uper_encode_to_buffer
(
&
asn_DEF_NR_BCCH_DL_SCH_Message
,
...
...
openair2/RRC/NR/nr_rrc_defs.h
View file @
9b76c583
...
@@ -438,6 +438,9 @@ typedef struct {
...
@@ -438,6 +438,9 @@ typedef struct {
NR_BCCH_BCH_Message_t
*
mib_DU
;
NR_BCCH_BCH_Message_t
*
mib_DU
;
NR_BCCH_DL_SCH_Message_t
*
siblock1_DU
;
NR_BCCH_DL_SCH_Message_t
*
siblock1_DU
;
NR_SIB1_t
*
sib1
;
NR_SIB1_t
*
sib1
;
NR_SIB2_t
*
sib2
;
NR_SIB3_t
*
sib3
;
NR_BCCH_DL_SCH_Message_t
systemInformation
;
// SIB23
int
ssb_SubcarrierOffset
;
int
ssb_SubcarrierOffset
;
int
pdsch_AntennaPorts
;
int
pdsch_AntennaPorts
;
int
pusch_TargetSNRx10
;
int
pusch_TargetSNRx10
;
...
@@ -496,6 +499,8 @@ typedef struct gNB_RRC_INST_s {
...
@@ -496,6 +499,8 @@ typedef struct gNB_RRC_INST_s {
int
srs_enable
[
MAX_NUM_CCs
];
int
srs_enable
[
MAX_NUM_CCs
];
uint16_t
sctp_in_streams
;
uint16_t
sctp_in_streams
;
uint16_t
sctp_out_streams
;
uint16_t
sctp_out_streams
;
int
cell_info_configured
;
pthread_mutex_t
cell_info_mutex
;
}
gNB_RRC_INST
;
}
gNB_RRC_INST
;
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
9b76c583
...
@@ -213,9 +213,13 @@ void rrc_gNB_generate_SgNBAdditionRequestAcknowledge(
...
@@ -213,9 +213,13 @@ void rrc_gNB_generate_SgNBAdditionRequestAcknowledge(
static
void
init_NR_SI
(
gNB_RRC_INST
*
rrc
,
gNB_RrcConfigurationReq
*
configuration
)
{
static
void
init_NR_SI
(
gNB_RRC_INST
*
rrc
,
gNB_RrcConfigurationReq
*
configuration
)
{
LOG_D
(
RRC
,
"%s()
\n\n\n\n
"
,
__FUNCTION__
);
LOG_D
(
RRC
,
"%s()
\n\n\n\n
"
,
__FUNCTION__
);
rrc
->
carrier
.
MIB
=
(
uint8_t
*
)
malloc16
(
4
);
if
(
NODE_IS_DU
(
rrc
->
node_type
)
||
NODE_IS_MONOLITHIC
(
rrc
->
node_type
))
{
rrc
->
carrier
.
sizeof_MIB
=
do_MIB_NR
(
rrc
,
0
);
rrc
->
carrier
.
MIB
=
(
uint8_t
*
)
malloc16
(
4
);
rrc
->
carrier
.
sizeof_SIB1
=
do_SIB1_NR
(
&
rrc
->
carrier
,
configuration
);
rrc
->
carrier
.
sizeof_MIB
=
do_MIB_NR
(
rrc
,
0
);
rrc
->
carrier
.
sizeof_SIB1
=
do_SIB1_NR
(
&
rrc
->
carrier
,
configuration
);
}
if
(
!
NODE_IS_DU
(
rrc
->
node_type
))
{
if
(
!
NODE_IS_DU
(
rrc
->
node_type
))
{
rrc
->
carrier
.
SIB23
=
(
uint8_t
*
)
malloc16
(
100
);
rrc
->
carrier
.
SIB23
=
(
uint8_t
*
)
malloc16
(
100
);
AssertFatal
(
rrc
->
carrier
.
SIB23
!=
NULL
,
"cannot allocate memory for SIB"
);
AssertFatal
(
rrc
->
carrier
.
SIB23
!=
NULL
,
"cannot allocate memory for SIB"
);
...
@@ -224,7 +228,7 @@ static void init_NR_SI(gNB_RRC_INST *rrc, gNB_RrcConfigurationReq *configuration
...
@@ -224,7 +228,7 @@ static void init_NR_SI(gNB_RRC_INST *rrc, gNB_RrcConfigurationReq *configuration
AssertFatal
(
rrc
->
carrier
.
sizeof_SIB23
!=
255
,
"FATAL, RC.nrrrc[mod].carrier[CC_id].sizeof_SIB23 == 255"
);
AssertFatal
(
rrc
->
carrier
.
sizeof_SIB23
!=
255
,
"FATAL, RC.nrrrc[mod].carrier[CC_id].sizeof_SIB23 == 255"
);
}
}
LOG_I
(
NR_RRC
,
"Done init_NR_SI
\n
"
);
LOG_I
(
NR_RRC
,
"Done init_NR_SI
\n
"
);
if
(
!
NODE_IS_CU
(
RC
.
nrrrc
[
0
]
->
node_type
)){
if
(
NODE_IS_MONOLITHIC
(
rrc
->
node_type
)){
rrc_mac_config_req_gNB
(
rrc
->
module_id
,
rrc_mac_config_req_gNB
(
rrc
->
module_id
,
rrc
->
carrier
.
ssb_SubcarrierOffset
,
rrc
->
carrier
.
ssb_SubcarrierOffset
,
rrc
->
carrier
.
pdsch_AntennaPorts
,
rrc
->
carrier
.
pdsch_AntennaPorts
,
...
@@ -237,6 +241,12 @@ static void init_NR_SI(gNB_RRC_INST *rrc, gNB_RrcConfigurationReq *configuration
...
@@ -237,6 +241,12 @@ static void init_NR_SI(gNB_RRC_INST *rrc, gNB_RrcConfigurationReq *configuration
);
);
}
}
/* set flag to indicate that cell information is configured. This is required
* in DU to trigger F1AP_SETUP procedure */
pthread_mutex_lock
(
&
rrc
->
cell_info_mutex
);
rrc
->
cell_info_configured
=
1
;
pthread_mutex_unlock
(
&
rrc
->
cell_info_mutex
);
if
(
get_softmodem_params
()
->
phy_test
>
0
||
get_softmodem_params
()
->
do_ra
>
0
)
{
if
(
get_softmodem_params
()
->
phy_test
>
0
||
get_softmodem_params
()
->
do_ra
>
0
)
{
// This is for phytest only, emulate first X2 message if uecap.raw file is present
// This is for phytest only, emulate first X2 message if uecap.raw file is present
FILE
*
fd
;
FILE
*
fd
;
...
@@ -316,6 +326,8 @@ char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigu
...
@@ -316,6 +326,8 @@ char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigu
rrc
->
carrier
.
pusch_TargetSNRx10
=
configuration
->
pusch_TargetSNRx10
;
rrc
->
carrier
.
pusch_TargetSNRx10
=
configuration
->
pusch_TargetSNRx10
;
rrc
->
carrier
.
pucch_TargetSNRx10
=
configuration
->
pucch_TargetSNRx10
;
rrc
->
carrier
.
pucch_TargetSNRx10
=
configuration
->
pucch_TargetSNRx10
;
/// System Information INIT
/// System Information INIT
pthread_mutex_init
(
&
rrc
->
cell_info_mutex
,
NULL
);
rrc
->
cell_info_configured
=
0
;
LOG_I
(
NR_RRC
,
PROTOCOL_NR_RRC_CTXT_FMT
" Checking release
\n
"
,
PROTOCOL_NR_RRC_CTXT_ARGS
(
&
ctxt
));
LOG_I
(
NR_RRC
,
PROTOCOL_NR_RRC_CTXT_FMT
" Checking release
\n
"
,
PROTOCOL_NR_RRC_CTXT_ARGS
(
&
ctxt
));
init_NR_SI
(
rrc
,
configuration
);
init_NR_SI
(
rrc
,
configuration
);
rrc_init_nr_global_param
();
rrc_init_nr_global_param
();
...
@@ -2380,44 +2392,43 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *f1_setup_req) {
...
@@ -2380,44 +2392,43 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *f1_setup_req) {
LOG_W
(
NR_RRC
,
"instance %d mib length %d
\n
"
,
i
,
f1_setup_req
->
mib_length
[
i
]);
LOG_W
(
NR_RRC
,
"instance %d mib length %d
\n
"
,
i
,
f1_setup_req
->
mib_length
[
i
]);
LOG_W
(
NR_RRC
,
"instance %d sib1 length %d
\n
"
,
i
,
f1_setup_req
->
sib1_length
[
i
]);
LOG_W
(
NR_RRC
,
"instance %d sib1 length %d
\n
"
,
i
,
f1_setup_req
->
sib1_length
[
i
]);
memcpy
((
void
*
)
rrc
->
carrier
.
MIB
,
f1_setup_req
->
mib
[
i
],
f1_setup_req
->
mib_length
[
i
]);
memcpy
((
void
*
)
rrc
->
carrier
.
MIB
,
f1_setup_req
->
mib
[
i
],
f1_setup_req
->
mib_length
[
i
]);
if
(
0
)
{
asn_dec_rval_t
dec_rval
=
uper_decode_complete
(
NULL
,
asn_dec_rval_t
dec_rval
=
uper_decode_complete
(
NULL
,
&
asn_DEF_NR_BCCH_BCH_Message
,
&
asn_DEF_NR_BCCH_BCH_Message
,
(
void
**
)
&
rrc
->
carrier
.
mib_DU
,
(
void
**
)
&
rrc
->
carrier
.
mib_DU
,
f1_setup_req
->
mib
[
i
],
f1_setup_req
->
mib
[
i
],
f1_setup_req
->
mib_length
[
i
]);
f1_setup_req
->
mib_length
[
i
]);
AssertFatal
(
dec_rval
.
code
==
RC_OK
,
AssertFatal
(
dec_rval
.
code
==
RC_OK
,
"[gNB_DU %"
PRIu8
"] Failed to decode NR_BCCH_BCH_MESSAGE (%zu bits)
\n
"
,
"[gNB_DU %"
PRIu8
"] Failed to decode NR_BCCH_BCH_MESSAGE (%zu bits)
\n
"
,
j
,
j
,
dec_rval
.
consumed
);
dec_rval
.
consumed
);
NR_BCCH_BCH_Message_t
*
mib
=
&
rrc
->
carrier
.
mib
;
NR_BCCH_BCH_Message_t
*
mib
=
&
rrc
->
carrier
.
mib
;
NR_BCCH_BCH_Message_t
*
mib_DU
=
rrc
->
carrier
.
mib_DU
;
NR_BCCH_BCH_Message_t
*
mib_DU
=
rrc
->
carrier
.
mib_DU
;
mib
->
message
.
present
=
NR_BCCH_BCH_MessageType_PR_mib
;
mib
->
message
.
present
=
NR_BCCH_BCH_MessageType_PR_mib
;
mib
->
message
.
choice
.
mib
=
CALLOC
(
1
,
sizeof
(
struct
NR_MIB
));
// mib->message.choice.mib = calloc(1, sizeof(NR_MIB_t));
memset
(
mib
->
message
.
choice
.
mib
,
0
,
sizeof
(
struct
NR_MIB
));
mib
->
message
.
choice
.
mib
=
mib_DU
->
message
.
choice
.
mib
;
memcpy
(
mib
->
message
.
choice
.
mib
,
mib_DU
->
message
.
choice
.
mib
,
sizeof
(
struct
NR_MIB
));
rrc
->
carrier
.
SIB1
=
malloc
(
f1_setup_req
->
sib1_length
[
i
]);
rrc
->
carrier
.
SIB1
=
malloc
(
f1_setup_req
->
sib1_length
[
i
]);
rrc
->
carrier
.
sizeof_SIB1
=
f1_setup_req
->
sib1_length
[
i
];
rrc
->
carrier
.
sizeof_SIB1
=
f1_setup_req
->
sib1_length
[
i
];
memcpy
((
void
*
)
rrc
->
carrier
.
SIB1
,
f1_setup_req
->
sib1
[
i
],
f1_setup_req
->
sib1_length
[
i
]);
memcpy
((
void
*
)
rrc
->
carrier
.
SIB1
,
f1_setup_req
->
sib1
[
i
],
f1_setup_req
->
sib1_length
[
i
]);
dec_rval
=
uper_decode_complete
(
NULL
,
dec_rval
=
uper_decode_complete
(
NULL
,
&
asn_DEF_NR_BCCH_DL_SCH_Message
,
&
asn_DEF_NR_BCCH_DL_SCH_Message
,
(
void
**
)
&
rrc
->
carrier
.
siblock1_DU
,
(
void
**
)
&
rrc
->
carrier
.
siblock1_DU
,
f1_setup_req
->
sib1
[
i
],
f1_setup_req
->
sib1
[
i
],
f1_setup_req
->
sib1_length
[
i
]);
f1_setup_req
->
sib1_length
[
i
]);
AssertFatal
(
dec_rval
.
code
==
RC_OK
,
AssertFatal
(
dec_rval
.
code
==
RC_OK
,
"[gNB_DU %"
PRIu8
"] Failed to decode NR_BCCH_DLSCH_MESSAGE (%zu bits)
\n
"
,
"[gNB_DU %"
PRIu8
"] Failed to decode NR_BCCH_DLSCH_MESSAGE (%zu bits)
\n
"
,
j
,
j
,
dec_rval
.
consumed
);
dec_rval
.
consumed
);
// Parse message and extract SystemInformationBlockType1 field
// Parse message and extract SystemInformationBlockType1 field
NR_BCCH_DL_SCH_Message_t
*
bcch_message
=
rrc
->
carrier
.
siblock1_DU
;
NR_BCCH_DL_SCH_Message_t
*
bcch_message
=
rrc
->
carrier
.
siblock1_DU
;
AssertFatal
(
bcch_message
->
message
.
present
==
NR_BCCH_DL_SCH_MessageType_PR_c1
,
AssertFatal
(
bcch_message
->
message
.
present
==
NR_BCCH_DL_SCH_MessageType_PR_c1
,
"bcch_message->message.present != NR_BCCH_DL_SCH_MessageType_PR_c1
\n
"
);
"bcch_message->message.present != NR_BCCH_DL_SCH_MessageType_PR_c1
\n
"
);
AssertFatal
(
bcch_message
->
message
.
choice
.
c1
->
present
==
NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1
,
AssertFatal
(
bcch_message
->
message
.
choice
.
c1
->
present
==
NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1
,
"bcch_message->message.choice.c1->present != NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1
\n
"
);
"bcch_message->message.choice.c1->present != NR_BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1
\n
"
);
rrc
->
carrier
.
sib1
=
bcch_message
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
;
rrc
->
carrier
.
sib1
=
bcch_message
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
;
rrc
->
carrier
.
physCellId
=
f1_setup_req
->
nr_pci
[
i
];
rrc
->
carrier
.
physCellId
=
f1_setup_req
->
nr_pci
[
i
];
}
// prepare F1_SETUP_RESPONSE
// prepare F1_SETUP_RESPONSE
if
(
msg_p
==
NULL
)
{
if
(
msg_p
==
NULL
)
{
...
...
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