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
Michael Black
OpenXG-RAN
Commits
cd050961
Commit
cd050961
authored
Jul 25, 2022
by
General ABS
Committed by
rmagueta
Jun 06, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improvements for 1 CU + 2 DUs scenario
parent
234bd0b9
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
799 additions
and
133 deletions
+799
-133
common/openairinterface5g_limits.h
common/openairinterface5g_limits.h
+4
-2
executables/nr-softmodem.c
executables/nr-softmodem.c
+11
-10
openair2/F1AP/f1ap_common.c
openair2/F1AP/f1ap_common.c
+1
-1
openair2/F1AP/f1ap_cu_interface_management.c
openair2/F1AP/f1ap_cu_interface_management.c
+2
-2
openair2/F1AP/f1ap_itti_messaging.c
openair2/F1AP/f1ap_itti_messaging.c
+1
-1
openair2/GNB_APP/gnb_app.c
openair2/GNB_APP/gnb_app.c
+1
-1
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+11
-10
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+2
-20
openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.h
openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.h
+1
-0
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+63
-64
openair3/SCTP/sctp_eNB_itti_messaging.c
openair3/SCTP/sctp_eNB_itti_messaging.c
+1
-1
openair3/SCTP/sctp_eNB_task.c
openair3/SCTP/sctp_eNB_task.c
+17
-21
targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb_2multDUs.conf
targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb_2multDUs.conf
+222
-0
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci0.conf
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci0.conf
+231
-0
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci1.conf
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci1.conf
+231
-0
No files found.
common/openairinterface5g_limits.h
View file @
cd050961
...
@@ -2,8 +2,8 @@
...
@@ -2,8 +2,8 @@
#define OPENAIRINTERFACE5G_LIMITS_H_
#define OPENAIRINTERFACE5G_LIMITS_H_
# define MAX_MOBILES_PER_GNB 16
# define MAX_MOBILES_PER_GNB 16
# define NUMBER_OF_eNB_MAX
1
# define NUMBER_OF_eNB_MAX
2
# define NUMBER_OF_gNB_MAX
1
# define NUMBER_OF_gNB_MAX
2
# define NUMBER_OF_RU_MAX 2
# define NUMBER_OF_RU_MAX 2
# define NUMBER_OF_NR_RU_MAX 2
# define NUMBER_OF_NR_RU_MAX 2
# define NUMBER_OF_UCI_MAX 16
# define NUMBER_OF_UCI_MAX 16
...
@@ -14,6 +14,8 @@
...
@@ -14,6 +14,8 @@
#define NUMBER_FRAMES_PHY_UE_INACTIVE 10
#define NUMBER_FRAMES_PHY_UE_INACTIVE 10
#define NUMBER_OF_DU_PER_CU_MAX 2
#define MAX_MANAGED_ENB_PER_MOBILE 2
#define MAX_MANAGED_ENB_PER_MOBILE 2
#define MAX_MANAGED_GNB_PER_MOBILE 2
#define MAX_MANAGED_GNB_PER_MOBILE 2
...
...
executables/nr-softmodem.c
View file @
cd050961
...
@@ -314,18 +314,19 @@ static int create_gNB_tasks(void) {
...
@@ -314,18 +314,19 @@ static int create_gNB_tasks(void) {
LOG_I
(
GNB_APP
,
"Allocating gNB_RRC_INST for %d instances
\n
"
,
RC
.
nb_nr_inst
);
LOG_I
(
GNB_APP
,
"Allocating gNB_RRC_INST for %d instances
\n
"
,
RC
.
nb_nr_inst
);
RC
.
nrrrc
=
(
gNB_RRC_INST
**
)
malloc
(
RC
.
nb_nr_inst
*
sizeof
(
gNB_RRC_INST
*
));
RC
.
nrrrc
=
(
gNB_RRC_INST
**
)
malloc
(
NUMBER_OF_DU_PER_CU_MAX
*
sizeof
(
gNB_RRC_INST
*
));
LOG_I
(
PHY
,
"%s() RC.nb_nr_inst:%d RC.nrrrc:%p
\n
"
,
__FUNCTION__
,
RC
.
nb_nr_inst
,
RC
.
nrrrc
);
LOG_I
(
PHY
,
"%s() RC.nb_nr_inst:%d RC.nrrrc: %p
\n
"
,
__FUNCTION__
,
RC
.
nb_nr_inst
,
RC
.
nrrrc
);
ngran_node_t
node_type
=
get_node_type
();
for
(
int
gnb_id
=
gnb_id_start
;
(
gnb_id
<
gnb_id_end
)
;
gnb_id
++
)
{
int
gnb_id
=
gnb_id_start
;
RC
.
nrrrc
[
gnb_id
]
=
(
gNB_RRC_INST
*
)
calloc
(
1
,
sizeof
(
gNB_RRC_INST
));
do
{
LOG_I
(
PHY
,
"%s() Creating RRC instance RC.nrrrc[%d]:%p (%d of %d)
\n
"
,
__FUNCTION__
,
gnb_id
,
RC
.
nrrrc
[
gnb_id
],
gnb_id
+
1
,
gnb_id_end
);
RC
.
nrrrc
[
gnb_id
]
=
(
gNB_RRC_INST
*
)
calloc
(
1
,
sizeof
(
gNB_RRC_INST
));
LOG_I
(
PHY
,
"%s() Creating RRC instance RC.nrrrc[%d]: %p
\n
"
,
__FUNCTION__
,
gnb_id
,
RC
.
nrrrc
[
gnb_id
]);
configure_nr_rrc
(
gnb_id
);
configure_nr_rrc
(
gnb_id
);
}
gnb_id
++
;
}
while
(
gnb_id
<
NUMBER_OF_DU_PER_CU_MAX
&&
NODE_IS_CU
(
RC
.
nrrrc
[
0
]
->
node_type
));
if
(
RC
.
nb_nr_inst
>
0
&&
ngran_node_t
node_type
=
get_node_type
();
!
get_softmodem_params
()
->
nsa
&&
if
(
RC
.
nb_nr_inst
>
0
&&
!
get_softmodem_params
()
->
nsa
&&
!
(
node_type
==
ngran_gNB_DU
))
{
!
(
node_type
==
ngran_gNB_DU
))
{
// we start pdcp in both cuup (for drb) and cucp (for srb)
// we start pdcp in both cuup (for drb) and cucp (for srb)
init_pdcp
();
init_pdcp
();
}
}
...
...
openair2/F1AP/f1ap_common.c
View file @
cd050961
...
@@ -33,7 +33,7 @@
...
@@ -33,7 +33,7 @@
#include "f1ap_common.h"
#include "f1ap_common.h"
static
f1ap_cudu_inst_t
*
f1_du_inst
[
NUMBER_OF_gNB_MAX
]
=
{
0
};
static
f1ap_cudu_inst_t
*
f1_du_inst
[
NUMBER_OF_gNB_MAX
]
=
{
0
};
static
f1ap_cudu_inst_t
*
f1_cu_inst
[
NUMBER_OF_
gNB
_MAX
]
=
{
0
};
static
f1ap_cudu_inst_t
*
f1_cu_inst
[
NUMBER_OF_
DU_PER_CU
_MAX
]
=
{
0
};
uint8_t
F1AP_get_next_transaction_identifier
(
instance_t
mod_idP
,
instance_t
cu_mod_idP
)
{
uint8_t
F1AP_get_next_transaction_identifier
(
instance_t
mod_idP
,
instance_t
cu_mod_idP
)
{
static
uint8_t
transaction_identifier
[
NUMBER_OF_gNB_MAX
];
static
uint8_t
transaction_identifier
[
NUMBER_OF_gNB_MAX
];
...
...
openair2/F1AP/f1ap_cu_interface_management.c
View file @
cd050961
...
@@ -80,7 +80,7 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
...
@@ -80,7 +80,7 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
uint32_t
assoc_id
,
uint32_t
assoc_id
,
uint32_t
stream
,
uint32_t
stream
,
F1AP_F1AP_PDU_t
*
pdu
)
{
F1AP_F1AP_PDU_t
*
pdu
)
{
LOG_
D
(
F1AP
,
"CU_handle_F1_SETUP_REQUEST
\n
"
);
LOG_
I
(
F1AP
,
"(instance %li) CU_handle_F1_SETUP_REQUEST
\n
"
,
instance
);
MessageDef
*
message_p
;
MessageDef
*
message_p
;
F1AP_F1SetupRequest_t
*
container
;
F1AP_F1SetupRequest_t
*
container
;
F1AP_F1SetupRequestIEs_t
*
ie
;
F1AP_F1SetupRequestIEs_t
*
ie
;
...
@@ -571,7 +571,7 @@ int CU_handle_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance,
...
@@ -571,7 +571,7 @@ int CU_handle_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance,
uint32_t
assoc_id
,
uint32_t
assoc_id
,
uint32_t
stream
,
uint32_t
stream
,
F1AP_F1AP_PDU_t
*
pdu
)
{
F1AP_F1AP_PDU_t
*
pdu
)
{
LOG_I
(
F1AP
,
"Cell Configuration ok (
assoc_id %d)
\n
"
,
assoc_id
);
LOG_I
(
F1AP
,
"Cell Configuration ok (
instance %li, assoc_id %d)
\n
"
,
instance
,
assoc_id
);
return
(
0
);
return
(
0
);
}
}
...
...
openair2/F1AP/f1ap_itti_messaging.c
View file @
cd050961
...
@@ -32,7 +32,7 @@ void f1ap_itti_send_sctp_data_req(bool isCu, instance_t instance, uint8_t *buffe
...
@@ -32,7 +32,7 @@ void f1ap_itti_send_sctp_data_req(bool isCu, instance_t instance, uint8_t *buffe
sctp_data_req
->
buffer
=
buffer
;
sctp_data_req
->
buffer
=
buffer
;
sctp_data_req
->
buffer_length
=
buffer_length
;
sctp_data_req
->
buffer_length
=
buffer_length
;
sctp_data_req
->
stream
=
stream
;
sctp_data_req
->
stream
=
stream
;
LOG_D
(
F1AP
,
"
Sending ITTI message to SCTP Task
\n
"
);
LOG_D
(
F1AP
,
"
(instance %li) Sending ITTI message to SCTP Task
\n
"
,
instance
);
itti_send_msg_to_task
(
TASK_SCTP
,
instance
,
message_p
);
itti_send_msg_to_task
(
TASK_SCTP
,
instance
,
message_p
);
}
}
...
...
openair2/GNB_APP/gnb_app.c
View file @
cd050961
...
@@ -67,7 +67,7 @@ void configure_nr_rrc(uint32_t gnb_id)
...
@@ -67,7 +67,7 @@ void configure_nr_rrc(uint32_t gnb_id)
msg_p
=
itti_alloc_new_message
(
TASK_GNB_APP
,
0
,
NRRRC_CONFIGURATION_REQ
);
msg_p
=
itti_alloc_new_message
(
TASK_GNB_APP
,
0
,
NRRRC_CONFIGURATION_REQ
);
if
(
RC
.
nrrrc
[
gnb_id
])
{
if
(
RC
.
nrrrc
[
gnb_id
])
{
RCconfig_NRRRC
(
msg_p
,
gnb_id
,
RC
.
nrrrc
[
gnb_id
]);
RCconfig_NRRRC
(
msg_p
,
gnb_id
,
RC
.
nrrrc
[
gnb_id
]);
LOG_I
(
GNB_APP
,
"RRC starting with node type %d
\n
"
,
RC
.
nrrrc
[
gnb_id
]
->
node_type
);
LOG_I
(
GNB_APP
,
"RRC starting with node type %d
\n
"
,
RC
.
nrrrc
[
gnb_id
]
->
node_type
);
LOG_I
(
GNB_APP
,
"Sending configuration message to NR_RRC task
\n
"
);
LOG_I
(
GNB_APP
,
"Sending configuration message to NR_RRC task
\n
"
);
...
...
openair2/GNB_APP/gnb_config.c
View file @
cd050961
...
@@ -1127,9 +1127,9 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
...
@@ -1127,9 +1127,9 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
sprintf
(
aprefix
,
"%s.[%i]"
,
GNB_CONFIG_STRING_GNB_LIST
,
0
);
sprintf
(
aprefix
,
"%s.[%i]"
,
GNB_CONFIG_STRING_GNB_LIST
,
0
);
config_getlist
(
&
SCCsParamList
,
NULL
,
0
,
aprefix
);
config_getlist
(
&
SCCsParamList
,
NULL
,
0
,
aprefix
);
if
(
SCCsParamList
.
numelt
>
0
)
{
if
(
SCCsParamList
.
numelt
>
0
)
{
sprintf
(
aprefix
,
"%s.[%i].%s.[%i]"
,
GNB_CONFIG_STRING_GNB_LIST
,
0
,
GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON
,
0
);
sprintf
(
aprefix
,
"%s.[%i].%s.[%i]"
,
GNB_CONFIG_STRING_GNB_LIST
,
i
,
GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON
,
0
);
config_get
(
SCCsParams
,
sizeof
(
SCCsParams
)
/
sizeof
(
paramdef_t
),
aprefix
);
config_get
(
SCCsParams
,
sizeof
(
SCCsParams
)
/
sizeof
(
paramdef_t
),
aprefix
);
LOG_I
(
RRC
,
"Read in ServingCellConfigCommon (PhysCellId %d, ABSFREQSSB %d, DLBand %d, ABSFREQPOINTA %d, DLBW %d,RACH_TargetReceivedPower %d
\n
"
,
LOG_I
(
RRC
,
"Read in ServingCellConfigCommon (PhysCellId %d, ABSFREQSSB %d, DLBand %d, ABSFREQPOINTA %d, DLBW %d,RACH_TargetReceivedPower %d
\n
"
,
(
int
)
*
scc
->
physCellId
,
(
int
)
*
scc
->
physCellId
,
(
int
)
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
,
(
int
)
*
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
,
...
@@ -1184,9 +1184,10 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
...
@@ -1184,9 +1184,10 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
rrc
->
sctp_out_streams
=
(
uint16_t
)
*
(
SCTPParams
[
GNB_SCTP_OUTSTREAMS_IDX
].
uptr
);
rrc
->
sctp_out_streams
=
(
uint16_t
)
*
(
SCTPParams
[
GNB_SCTP_OUTSTREAMS_IDX
].
uptr
);
}
}
rrc
->
nr_cellid
=
(
uint64_t
)
*
(
GNBParamList
.
paramarray
[
i
][
GNB_NRCELLID_IDX
].
u64ptr
);
rrc
->
f1_instance
=
-
1
;
rrc
->
nr_cellid
=
(
uint64_t
)
*
(
GNBParamList
.
paramarray
[
i
][
GNB_NRCELLID_IDX
].
u64ptr
);
rrc
->
carrier
.
physCellId
=
*
scc
->
physCellId
;
rrc
->
carrier
.
physCellId
=
*
scc
->
physCellId
;
rrc
->
um_on_default_drb
=
*
(
GNBParamList
.
paramarray
[
i
][
GNB_UMONDEFAULTDRB_IDX
].
uptr
);
rrc
->
um_on_default_drb
=
*
(
GNBParamList
.
paramarray
[
i
][
GNB_UMONDEFAULTDRB_IDX
].
uptr
);
...
@@ -1843,8 +1844,8 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i) {
...
@@ -1843,8 +1844,8 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i) {
f1Setup
->
DU_f1_ip_address
.
ipv4
=
1
;
f1Setup
->
DU_f1_ip_address
.
ipv4
=
1
;
//strcpy(f1Setup->DU_f1_ip_address.ipv6_address, "");
//strcpy(f1Setup->DU_f1_ip_address.ipv6_address, "");
strcpy
(
f1Setup
->
DU_f1_ip_address
.
ipv4_address
,
RC
.
nrmac
[
k
]
->
eth_params_n
.
my_addr
);
strcpy
(
f1Setup
->
DU_f1_ip_address
.
ipv4_address
,
RC
.
nrmac
[
k
]
->
eth_params_n
.
my_addr
);
f1Setup
->
DUport
=
RC
.
nrmac
[
k
]
->
eth_params_n
.
my_portd
;
f1Setup
->
DUport
=
RC
.
nrmac
[
k
]
->
eth_params_n
.
my_portd
;
f1Setup
->
CUport
=
RC
.
nrmac
[
k
]
->
eth_params_n
.
remote_portd
;
f1Setup
->
CUport
=
RC
.
nrmac
[
k
]
->
eth_params_n
.
remote_portd
;
//strcpy(f1Setup->CU_ip_address[l].ipv6_address,*(F1ParamList.paramarray[l][ENB_CU_IPV6_ADDRESS_IDX].strptr));
//strcpy(f1Setup->CU_ip_address[l].ipv6_address,*(F1ParamList.paramarray[l][ENB_CU_IPV6_ADDRESS_IDX].strptr));
sprintf
(
aprefix
,
"%s.[%i].%s"
,
GNB_CONFIG_STRING_GNB_LIST
,
k
,
GNB_CONFIG_STRING_SCTP_CONFIG
);
sprintf
(
aprefix
,
"%s.[%i].%s"
,
GNB_CONFIG_STRING_GNB_LIST
,
k
,
GNB_CONFIG_STRING_SCTP_CONFIG
);
config_get
(
SCTPParams
,
sizeof
(
SCTPParams
)
/
sizeof
(
paramdef_t
),
aprefix
);
config_get
(
SCTPParams
,
sizeof
(
SCTPParams
)
/
sizeof
(
paramdef_t
),
aprefix
);
...
@@ -2195,10 +2196,10 @@ ngran_node_t get_node_type(void)
...
@@ -2195,10 +2196,10 @@ ngran_node_t get_node_type(void)
config_getlist
(
&
GNBParamList
,
GNBParams
,
sizeof
(
GNBParams
)
/
sizeof
(
paramdef_t
),
NULL
);
config_getlist
(
&
GNBParamList
,
GNBParams
,
sizeof
(
GNBParams
)
/
sizeof
(
paramdef_t
),
NULL
);
if
(
GNBParamList
.
numelt
==
0
)
// We have no valid configuration, let's return a default
if
(
GNBParamList
.
numelt
==
0
)
// We have no valid configuration, let's return a default
return
ngran_gNB
;
return
ngran_gNB
;
config_getlist
(
&
MacRLC_ParamList
,
MacRLC_Params
,
sizeof
(
MacRLC_Params
)
/
sizeof
(
paramdef_t
),
NULL
);
config_getlist
(
&
MacRLC_ParamList
,
MacRLC_Params
,
sizeof
(
MacRLC_Params
)
/
sizeof
(
paramdef_t
),
NULL
);
char
aprefix
[
MAX_OPTNAME_SIZE
*
2
+
8
];
char
aprefix
[
MAX_OPTNAME_SIZE
*
2
+
8
];
sprintf
(
aprefix
,
"%s.[%i]"
,
GNB_CONFIG_STRING_GNB_LIST
,
0
);
sprintf
(
aprefix
,
"%s.[%i]"
,
GNB_CONFIG_STRING_GNB_LIST
,
0
);
config_getlist
(
&
GNBE1ParamList
,
GNBE1Params
,
sizeof
(
GNBE1Params
)
/
sizeof
(
paramdef_t
),
aprefix
);
config_getlist
(
&
GNBE1ParamList
,
GNBE1Params
,
sizeof
(
GNBE1Params
)
/
sizeof
(
paramdef_t
),
aprefix
);
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
View file @
cd050961
...
@@ -248,20 +248,12 @@ static void do_pdcp_data_ind(
...
@@ -248,20 +248,12 @@ static void do_pdcp_data_ind(
nr_pdcp_entity_t
*
rb
;
nr_pdcp_entity_t
*
rb
;
ue_id_t
rntiMaybeUEid
=
ctxt_pP
->
rntiMaybeUEid
;
ue_id_t
rntiMaybeUEid
=
ctxt_pP
->
rntiMaybeUEid
;
if
(
ctxt_pP
->
module_id
!=
0
||
//ctxt_pP->enb_flag != 1 ||
ctxt_pP
->
instance
!=
0
||
ctxt_pP
->
eNB_index
!=
0
||
ctxt_pP
->
brOption
!=
0
)
{
LOG_E
(
PDCP
,
"%s:%d:%s: fatal
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
}
if
(
ctxt_pP
->
enb_flag
)
if
(
ctxt_pP
->
enb_flag
)
T
(
T_ENB_PDCP_UL
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
rntiMaybeUEid
),
T_INT
(
rb_id
),
T_INT
(
sdu_buffer_size
));
T
(
T_ENB_PDCP_UL
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
rntiMaybeUEid
),
T_INT
(
rb_id
),
T_INT
(
sdu_buffer_size
));
nr_pdcp_manager_lock
(
nr_pdcp_ue_manager
);
nr_pdcp_manager_lock
(
nr_pdcp_ue_manager
);
ue
=
nr_pdcp_manager_get_ue
(
nr_pdcp_ue_manager
,
rntiMaybeUEid
);
ue
=
nr_pdcp_manager_get_ue
(
nr_pdcp_ue_manager
,
rntiMaybeUEid
);
ue
->
du_destination
=
ctxt_pP
->
instance
;
if
(
srb_flagP
==
1
)
{
if
(
srb_flagP
==
1
)
{
if
(
rb_id
<
1
||
rb_id
>
2
)
if
(
rb_id
<
1
||
rb_id
>
2
)
...
@@ -716,7 +708,7 @@ srb_found:
...
@@ -716,7 +708,7 @@ srb_found:
AssertFatal
(
ul_rrc
->
rrc_container
!=
NULL
,
"OUT OF MEMORY
\n
"
);
AssertFatal
(
ul_rrc
->
rrc_container
!=
NULL
,
"OUT OF MEMORY
\n
"
);
memcpy
(
ul_rrc
->
rrc_container
,
buf
,
size
);
memcpy
(
ul_rrc
->
rrc_container
,
buf
,
size
);
ul_rrc
->
rrc_container_length
=
size
;
ul_rrc
->
rrc_container_length
=
size
;
itti_send_msg_to_task
(
TASK_RRC_GNB
,
0
,
message_p
);
itti_send_msg_to_task
(
TASK_RRC_GNB
,
ue
->
du_destination
,
message_p
);
}
else
{
}
else
{
uint8_t
*
rrc_buffer_p
=
itti_malloc
(
TASK_PDCP_UE
,
TASK_RRC_NRUE
,
size
);
uint8_t
*
rrc_buffer_p
=
itti_malloc
(
TASK_PDCP_UE
,
TASK_RRC_NRUE
,
size
);
AssertFatal
(
rrc_buffer_p
!=
NULL
,
"OUT OF MEMORY
\n
"
);
AssertFatal
(
rrc_buffer_p
!=
NULL
,
"OUT OF MEMORY
\n
"
);
...
@@ -1083,16 +1075,6 @@ bool nr_pdcp_data_req_drb(protocol_ctxt_t *ctxt_pP,
...
@@ -1083,16 +1075,6 @@ bool nr_pdcp_data_req_drb(protocol_ctxt_t *ctxt_pP,
nr_pdcp_entity_t
*
rb
;
nr_pdcp_entity_t
*
rb
;
ue_id_t
ue_id
=
ctxt_pP
->
rntiMaybeUEid
;
ue_id_t
ue_id
=
ctxt_pP
->
rntiMaybeUEid
;
if
(
ctxt_pP
->
module_id
!=
0
||
//ctxt_pP->enb_flag != 1 ||
ctxt_pP
->
instance
!=
0
||
ctxt_pP
->
eNB_index
!=
0
/*||
ctxt_pP->configured != 1 ||
ctxt_pP->brOption != 0*/
)
{
LOG_E
(
PDCP
,
"%s:%d:%s: fatal
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
}
nr_pdcp_manager_lock
(
nr_pdcp_ue_manager
);
nr_pdcp_manager_lock
(
nr_pdcp_ue_manager
);
ue
=
nr_pdcp_manager_get_ue
(
nr_pdcp_ue_manager
,
ue_id
);
ue
=
nr_pdcp_manager_get_ue
(
nr_pdcp_ue_manager
,
ue_id
);
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.h
View file @
cd050961
...
@@ -30,6 +30,7 @@ typedef void nr_pdcp_ue_manager_t;
...
@@ -30,6 +30,7 @@ typedef void nr_pdcp_ue_manager_t;
typedef
struct
nr_pdcp_ue_t
{
typedef
struct
nr_pdcp_ue_t
{
ue_id_t
rntiMaybeUEid
;
ue_id_t
rntiMaybeUEid
;
instance_t
du_destination
;
nr_pdcp_entity_t
*
srb
[
3
];
nr_pdcp_entity_t
*
srb
[
3
];
nr_pdcp_entity_t
*
drb
[
MAX_DRBS_PER_UE
];
nr_pdcp_entity_t
*
drb
[
MAX_DRBS_PER_UE
];
}
nr_pdcp_ue_t
;
}
nr_pdcp_ue_t
;
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
cd050961
...
@@ -2152,89 +2152,88 @@ int rrc_gNB_decode_dcch(const protocol_ctxt_t *const ctxt_pP,
...
@@ -2152,89 +2152,88 @@ int rrc_gNB_decode_dcch(const protocol_ctxt_t *const ctxt_pP,
return
0
;
return
0
;
}
}
void
rrc_gNB_process_f1_setup_req
(
f1ap_setup_req_t
*
f1_setup_req
)
{
void
rrc_gNB_process_f1_setup_req
(
f1ap_setup_req_t
*
f1_setup_req
,
instance_t
instance
)
{
LOG_I
(
NR_RRC
,
"Received F1 Setup Request from gNB_DU %llu (%s)
\n
"
,(
unsigned
long
long
int
)
f1_setup_req
->
gNB_DU_id
,
f1_setup_req
->
gNB_DU_name
);
LOG_I
(
NR_RRC
,
"Received F1 Setup Request from gNB_DU %llu (%s)
\n
"
,(
unsigned
long
long
int
)
f1_setup_req
->
gNB_DU_id
,
f1_setup_req
->
gNB_DU_name
);
int
cu_cell_ind
=
0
;
int
cu_cell_ind
=
0
;
MessageDef
*
msg_p
=
itti_alloc_new_message
(
TASK_RRC_GNB
,
0
,
F1AP_SETUP_RESP
);
MessageDef
*
msg_p
=
itti_alloc_new_message
(
TASK_RRC_GNB
,
0
,
F1AP_SETUP_RESP
);
F1AP_SETUP_RESP
(
msg_p
).
num_cells_to_activate
=
0
;
F1AP_SETUP_RESP
(
msg_p
).
num_cells_to_activate
=
0
;
MessageDef
*
msg_p2
=
itti_alloc_new_message
(
TASK_RRC_GNB
,
0
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
);
MessageDef
*
msg_p2
=
itti_alloc_new_message
(
TASK_RRC_GNB
,
0
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
);
for
(
int
i
=
0
;
i
<
f1_setup_req
->
num_cells_available
;
i
++
)
{
for
(
int
i
=
0
;
i
<
f1_setup_req
->
num_cells_available
;
i
++
)
{
for
(
int
j
=
0
;
j
<
RC
.
nb_nr_inst
;
j
++
)
{
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
j
];
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
instance
];
if
(
rrc
->
configuration
.
mcc
[
0
]
==
f1_setup_req
->
cell
[
i
].
mcc
&&
if
(
rrc
->
configuration
.
mcc
[
0
]
==
f1_setup_req
->
cell
[
i
].
mcc
&&
rrc
->
configuration
.
mnc
[
0
]
==
f1_setup_req
->
cell
[
i
].
mnc
&&
rrc
->
configuration
.
mnc
[
0
]
==
f1_setup_req
->
cell
[
i
].
mnc
&&
rrc
->
nr_cellid
==
f1_setup_req
->
cell
[
i
].
nr_cellid
)
{
rrc
->
nr_cellid
==
f1_setup_req
->
cell
[
i
].
nr_cellid
)
{
//fixme: multi instance is not consistent here
//fixme: multi instance is not consistent here
F1AP_SETUP_RESP
(
msg_p
).
gNB_CU_name
=
rrc
->
node_name
;
F1AP_SETUP_RESP
(
msg_p
).
gNB_CU_name
=
rrc
->
node_name
;
// check that CU rrc instance corresponds to mcc/mnc/cgi (normally cgi should be enough, but just in case)
// check that CU rrc instance corresponds to mcc/mnc/cgi (normally cgi should be enough, but just in case)
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
]);
AssertFatal
(
rrc
->
carrier
.
mib
==
NULL
,
"CU MIB is already initialized: double F1 setup request?
\n
"
);
AssertFatal
(
rrc
->
carrier
.
mib
==
NULL
,
"CU MIB is already initialized: double F1 setup request?
\n
"
);
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
,
(
void
**
)
&
rrc
->
carrier
.
mib
,
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_CU %"
PRIu8
"] Failed to decode NR_BCCH_BCH_MESSAGE (%zu bits)
\n
"
,
"[gNB_CU %"
PRIu8
"] Failed to decode NR_BCCH_BCH_MESSAGE (%zu bits)
\n
"
,
j
,
(
uint8_t
)
instance
,
dec_rval
.
consumed
);
dec_rval
.
consumed
);
dec_rval
=
uper_decode_complete
(
NULL
,
dec_rval
=
uper_decode_complete
(
NULL
,
&
asn_DEF_NR_SIB1
,
//&asn_DEF_NR_BCCH_DL_SCH_Message,
&
asn_DEF_NR_SIB1
,
(
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
,
"[gNB_DU %"
PRIu8
"] Failed to decode NR_BCCH_DLSCH_MESSAGE (%zu bits)
\n
"
,
AssertFatal
(
dec_rval
.
code
==
RC_OK
,
j
,
"[gNB_DU %"
PRIu8
"] Failed to decode NR_BCCH_DLSCH_MESSAGE (%zu bits)
\n
"
,
dec_rval
.
consumed
);
(
uint8_t
)
instance
,
dec_rval
.
consumed
);
// Parse message and extract SystemInformationBlockType1 field
rrc
->
carrier
.
sib1
=
rrc
->
carrier
.
siblock1_DU
;
// Parse message and extract SystemInformationBlockType1 field
if
(
LOG_DEBUGFLAG
(
DEBUG_ASN1
)){
rrc
->
carrier
.
sib1
=
rrc
->
carrier
.
siblock1_DU
;
LOG_I
(
NR_RRC
,
"Printing received SIB1 container inside F1 setup request message:
\n
"
);
if
(
LOG_DEBUGFLAG
(
DEBUG_ASN1
)){
xer_fprint
(
stdout
,
&
asn_DEF_NR_SIB1
,(
void
*
)
rrc
->
carrier
.
sib1
);
LOG_I
(
NR_RRC
,
"Printing received SIB1 container inside F1 setup request message:
\n
"
);
}
xer_fprint
(
stdout
,
&
asn_DEF_NR_SIB1
,(
void
*
)
rrc
->
carrier
.
sib1
);
}
rrc
->
carrier
.
physCellId
=
f1_setup_req
->
cell
[
i
].
nr_pci
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
gNB_CU_name
=
rrc
->
node_name
;
rrc
->
carrier
.
physCellId
=
f1_setup_req
->
cell
[
i
].
nr_pci
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
mcc
=
rrc
->
configuration
.
mcc
[
0
];
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
mnc
=
rrc
->
configuration
.
mnc
[
0
];
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
mnc_digit_length
=
rrc
->
configuration
.
mnc_digit_length
[
0
];
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
nr_cellid
=
rrc
->
nr_cellid
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
nrpci
=
f1_setup_req
->
cell
[
i
].
nr_pci
;
int
num_SI
=
0
;
if
(
rrc
->
carrier
.
SIB23
)
{
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
gNB_CU_name
=
rrc
->
node_name
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
SI_container
[
2
]
=
rrc
->
carrier
.
SIB23
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
mcc
=
rrc
->
configuration
.
mcc
[
0
];
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
SI_container_length
[
2
]
=
rrc
->
carrier
.
sizeof_SIB23
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
mnc
=
rrc
->
configuration
.
mnc
[
0
];
num_SI
++
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
mnc_digit_length
=
rrc
->
configuration
.
mnc_digit_length
[
0
];
}
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
nr_cellid
=
rrc
->
nr_cellid
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
nrpci
=
f1_setup_req
->
cell
[
i
].
nr_pci
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
num_SI
=
num_SI
;
int
num_SI
=
0
;
cu_cell_ind
++
;
if
(
rrc
->
carrier
.
SIB23
)
{
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
num_cells_to_activate
=
cu_cell_ind
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
SI_container
[
2
]
=
rrc
->
carrier
.
SIB23
;
// send
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
SI_container_length
[
2
]
=
rrc
->
carrier
.
sizeof_SIB23
;
break
;
num_SI
++
;
}
else
{
// setup_req mcc/mnc match rrc internal list element
LOG_W
(
NR_RRC
,
"[Inst %d] No matching MCC/MNC: rrc->mcc/f1_setup_req->mcc %d/%d rrc->mnc/f1_setup_req->mnc %d/%d rrc->nr_cellid/f1_setup_req->nr_cellid %ld/%ld
\n
"
,
j
,
rrc
->
configuration
.
mcc
[
0
],
f1_setup_req
->
cell
[
i
].
mcc
,
rrc
->
configuration
.
mnc
[
0
],
f1_setup_req
->
cell
[
i
].
mnc
,
rrc
->
nr_cellid
,
f1_setup_req
->
cell
[
i
].
nr_cellid
);
}
}
}
// for (int j=0;j<RC.nb_inst;j++)
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
cells_to_activate
[
cu_cell_ind
].
num_SI
=
num_SI
;
cu_cell_ind
++
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p2
).
num_cells_to_activate
=
cu_cell_ind
;
}
else
{
// setup_req mcc/mnc match rrc internal list element
LOG_W
(
NR_RRC
,
"[Inst %d] No matching MCC/MNC: rrc->mcc/f1_setup_req->mcc %d/%d rrc->mnc/f1_setup_req->mnc %d/%d rrc->nr_cellid/f1_setup_req->nr_cellid %ld/%ld
\n
"
,
(
uint8_t
)
instance
,
rrc
->
configuration
.
mcc
[
0
],
f1_setup_req
->
cell
[
i
].
mcc
,
rrc
->
configuration
.
mnc
[
0
],
f1_setup_req
->
cell
[
i
].
mnc
,
rrc
->
nr_cellid
,
f1_setup_req
->
cell
[
i
].
nr_cellid
);
}
if
(
cu_cell_ind
==
0
)
{
if
(
cu_cell_ind
==
0
)
{
AssertFatal
(
1
==
0
,
"No cell found
\n
"
);
AssertFatal
(
1
==
0
,
"No cell found
\n
"
);
}
else
{
}
else
{
// send ITTI message to F1AP-CU task
// send ITTI message to F1AP-CU task
itti_send_msg_to_task
(
TASK_CU_F1
,
0
,
msg_p
);
itti_send_msg_to_task
(
TASK_CU_F1
,
rrc
->
f1_instance
,
msg_p
);
itti_send_msg_to_task
(
TASK_CU_F1
,
rrc
->
f1_instance
,
msg_p2
);
itti_send_msg_to_task
(
TASK_CU_F1
,
0
,
msg_p2
);
}
}
// handle other failure cases
// handle other failure cases
...
...
openair3/SCTP/sctp_eNB_itti_messaging.c
View file @
cd050961
...
@@ -89,7 +89,7 @@ int sctp_itti_send_association_ind(task_id_t task_id, instance_t instance,
...
@@ -89,7 +89,7 @@ int sctp_itti_send_association_ind(task_id_t task_id, instance_t instance,
MessageDef
*
message_p
;
MessageDef
*
message_p
;
sctp_new_association_ind_t
*
sctp_new_association_ind_p
;
sctp_new_association_ind_t
*
sctp_new_association_ind_p
;
message_p
=
itti_alloc_new_message
(
TASK_SCTP
,
0
,
SCTP_NEW_ASSOCIATION_IND
);
message_p
=
itti_alloc_new_message
(
TASK_SCTP
,
instance
,
SCTP_NEW_ASSOCIATION_IND
);
sctp_new_association_ind_p
=
&
message_p
->
ittiMsg
.
sctp_new_association_ind
;
sctp_new_association_ind_p
=
&
message_p
->
ittiMsg
.
sctp_new_association_ind
;
...
...
openair3/SCTP/sctp_eNB_task.c
View file @
cd050961
...
@@ -91,6 +91,7 @@ typedef struct sctp_cnx_list_elm_s {
...
@@ -91,6 +91,7 @@ typedef struct sctp_cnx_list_elm_s {
static
STAILQ_HEAD
(
sctp_cnx_list_head
,
sctp_cnx_list_elm_s
)
sctp_cnx_list
;
static
STAILQ_HEAD
(
sctp_cnx_list_head
,
sctp_cnx_list_elm_s
)
sctp_cnx_list
;
static
uint16_t
sctp_nb_cnx
=
0
;
static
uint16_t
sctp_nb_cnx
=
0
;
static
uint16_t
sctp_nb_accepted_associations
=
0
;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
struct
sctp_cnx_list_elm_s
*
sctp_get_cnx
(
int32_t
assoc_id
,
int
sd
)
struct
sctp_cnx_list_elm_s
*
sctp_get_cnx
(
int32_t
assoc_id
,
int
sd
)
...
@@ -1051,32 +1052,27 @@ sctp_eNB_read_from_socket(
...
@@ -1051,32 +1052,27 @@ sctp_eNB_read_from_socket(
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void
static
void
sctp_eNB_flush_sockets
(
struct
epoll_event
*
events
,
int
nb_events
)
static
sctp_eNB_flush_sockets
(
struct
epoll_event
*
events
,
int
nb_events
)
{
{
int
i
;
for
(
int
i
=
0
;
i
<
nb_events
;
i
++
)
{
struct
sctp_cnx_list_elm_s
*
sctp_cnx
=
NULL
;
struct
sctp_cnx_list_elm_s
*
sctp_cnx
=
sctp_get_cnx
(
-
1
,
events
[
i
].
data
.
fd
);
for
(
i
=
0
;
i
<
nb_events
;
i
++
)
{
sctp_cnx
=
sctp_get_cnx
(
-
1
,
events
[
i
].
data
.
fd
);
if
(
sctp_cnx
==
NULL
)
{
if
(
sctp_cnx
==
NULL
)
{
continue
;
continue
;
}
}
SCTP_DEBUG
(
"Found data for descriptor %d
\n
"
,
events
[
i
].
data
.
fd
);
SCTP_DEBUG
(
"Found data for descriptor %d
\n
"
,
events
[
i
].
data
.
fd
);
if
(
sctp_cnx
->
connection_type
==
SCTP_TYPE_CLIENT
)
{
if
(
sctp_cnx
->
connection_type
==
SCTP_TYPE_CLIENT
)
{
sctp_eNB_read_from_socket
(
sctp_cnx
);
sctp_eNB_read_from_socket
(
sctp_cnx
);
}
}
else
if
(
sctp_cnx
->
connection_type
==
SCTP_TYPE_MULTI_SERVER
)
{
else
if
(
sctp_cnx
->
connection_type
==
SCTP_TYPE_MULTI_SERVER
)
{
sctp_eNB_accept_associations_multi
(
sctp_cnx
);
sctp_eNB_accept_associations_multi
(
sctp_cnx
);
}
else
{
}
sctp_cnx
->
instance
=
sctp_nb_accepted_associations
;
else
{
sctp_eNB_accept_associations
(
sctp_cnx
);
sctp_eNB_accept_associations
(
sctp_cnx
);
sctp_nb_accepted_associations
++
;
}
}
}
}
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb_2multDUs.conf
0 → 100644
View file @
cd050961
Active_gNBs
= (
"gNB-CU"
);
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity
=
"none"
;
Num_Threads_PUSCH
=
8
;
gNBs
= ({
# Identification parameters:
gNB_CU_ID
=
0
xe00
;
gNB_name
=
"gNB-CU"
;
# Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code
=
1
;
plmn_list
= ({
mcc
=
208
;
mnc
=
99
;
mnc_length
=
2
;
snssaiList
= ({
sst
=
1
;
sd
=
0
x1
;
# 0 false, else true
});
});
nr_cellid
=
12345678
L
;
tr_s_preference
=
"f1"
;
local_s_if_name
=
"lo"
;
local_s_address
=
"127.0.0.4"
;
remote_s_address
=
"127.0.0.3"
;
local_s_portc
=
501
;
local_s_portd
=
2152
;
remote_s_portc
=
500
;
remote_s_portd
=
2152
;
min_rxtxtime
=
6
;
pdcch_ConfigSIB1
= ({
controlResourceSetZero
=
12
;
searchSpaceZero
=
0
;
});
servingCellConfigCommon
= ({
# spCellConfigCommon
physCellId
=
0
;
# downlinkConfigCommon
# frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB
=
641280
;
dl_frequencyBand
=
78
;
# this is 3600 MHz
dl_absoluteFrequencyPointA
=
640008
;
# scs-SpecificCarrierList
dl_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing
=
1
;
dl_carrierBandwidth
=
106
;
# initialDownlinkBWP
# genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth
=
28875
;
# 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing
=
1
;
# pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero
=
11
;
initialDLBWPsearchSpaceZero
=
0
;
# uplinkConfigCommon
# frequencyInfoUL
ul_frequencyBand
=
78
;
# scs-SpecificCarrierList
ul_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing
=
1
;
ul_carrierBandwidth
=
106
;
pMax
=
20
;
# initialUplinkBWP
# genericParameters
initialULBWPlocationAndBandwidth
=
28875
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing
=
1
;
# rach-ConfigCommon
# rach-ConfigGeneric
prach_ConfigurationIndex
=
98
;
# prach_msg1_FDM
# 0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM
=
0
;
prach_msg1_FrequencyStart
=
0
;
zeroCorrelationZoneConfig
=
13
;
preambleReceivedTargetPower
= -
96
;
# preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax
=
6
;
# powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep
=
1
;
# ra_ReponseWindow
# 1,2,4,8,10,20,40,80
ra_ResponseWindow
=
4
;
# ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
# 1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
=
4
;
# oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
=
14
;
# ra_ContentionResolutionTimer
# (0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer
=
7
;
rsrp_ThresholdSSB
=
19
;
# prach-RootSequenceIndex_PR
# 1 = 839, 2 = 139
prach_RootSequenceIndex_PR
=
2
;
prach_RootSequenceIndex
=
1
;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
msg1_SubcarrierSpacing
=
1
,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig
=
0
,
msg3_DeltaPreamble
=
1
;
p0_NominalWithGrant
= -
90
;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping
=
0
;
hoppingId
=
40
;
p0_nominal
= -
90
;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR
=
2
;
ssb_PositionsInBurst_Bitmap
=
1
;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell
=
2
;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing
=
1
;
# tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing
=
1
;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity
=
6
;
nrofDownlinkSlots
=
7
;
nrofDownlinkSymbols
=
6
;
nrofUplinkSlots
=
2
;
nrofUplinkSymbols
=
4
;
ssPBCH_BlockPower
= -
25
;
});
# SCTP definitions
SCTP
:
{
# Number of streams to use in input/output
SCTP_INSTREAMS
=
2
;
SCTP_OUTSTREAMS
=
2
;
}
# AMF parameters:
amf_ip_address
= ({
ipv4
=
"192.168.70.132"
;
ipv6
=
"192:168:30::17"
;
active
=
"yes"
;
preference
=
"ipv4"
;
});
NETWORK_INTERFACES
:
{
GNB_INTERFACE_NAME_FOR_NG_AMF
=
"demo-oai"
;
GNB_IPV4_ADDRESS_FOR_NG_AMF
=
"192.168.70.129/24"
;
GNB_INTERFACE_NAME_FOR_NGU
=
"demo-oai"
;
GNB_IPV4_ADDRESS_FOR_NGU
=
"192.168.70.129/24"
;
GNB_PORT_FOR_S1U
=
2152
;
# Spec 2152
}
});
security
= {
# preferred ciphering algorithms
# the first one of the list that an UE supports in chosen
# valid values: nea0, nea1, nea2, nea3
ciphering_algorithms
= (
"nea0"
);
# preferred integrity algorithms
# the first one of the list that an UE supports in chosen
# valid values: nia0, nia1, nia2, nia3
integrity_algorithms
= (
"nia2"
,
"nia0"
);
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
drb_ciphering
=
"yes"
;
drb_integrity
=
"no"
;
}
log_config
:
{
global_log_level
=
"info"
;
hw_log_level
=
"info"
;
phy_log_level
=
"info"
;
mac_log_level
=
"info"
;
rlc_log_level
=
"info"
;
pdcp_log_level
=
"info"
;
rrc_log_level
=
"info"
;
f1ap_log_level
=
"debug"
;
ngap_log_level
=
"debug"
;
}
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci0.conf
0 → 100644
View file @
cd050961
Active_gNBs
= (
"gNB-DU-PCI0"
);
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity
=
"none"
;
gNBs
= ({
# Identification parameters:
gNB_CU_ID
=
0
xe00
;
gNB_name
=
"gNB-DU-PCI0"
;
# Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code
=
1
;
plmn_list
= ({
mcc
=
208
;
mnc
=
99
;
mnc_length
=
2
;
snssaiList
= ({
sst
=
1
;
sd
=
0
x1
;
# 0 false, else true
});
});
nr_cellid
=
12345678
L
;
# Physical parameters:
min_rxtxtime
=
6
;
pdcch_ConfigSIB1
= ({
controlResourceSetZero
=
12
;
searchSpaceZero
=
0
;
});
servingCellConfigCommon
= ({
# spCellConfigCommon
physCellId
=
0
;
# downlinkConfigCommon
# frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB
=
641280
;
dl_frequencyBand
=
78
;
# this is 3600 MHz
dl_absoluteFrequencyPointA
=
640008
;
# scs-SpecificCarrierList
dl_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing
=
1
;
dl_carrierBandwidth
=
106
;
# initialDownlinkBWP
# genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth
=
28875
;
# 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing
=
1
;
# pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero
=
11
;
initialDLBWPsearchSpaceZero
=
0
;
# uplinkConfigCommon
# frequencyInfoUL
ul_frequencyBand
=
78
;
# scs-SpecificCarrierList
ul_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing
=
1
;
ul_carrierBandwidth
=
106
;
pMax
=
20
;
# initialUplinkBWP
# genericParameters
initialULBWPlocationAndBandwidth
=
28875
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing
=
1
;
# rach-ConfigCommon
# rach-ConfigGeneric
prach_ConfigurationIndex
=
98
;
# prach_msg1_FDM
# 0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM
=
0
;
prach_msg1_FrequencyStart
=
0
;
zeroCorrelationZoneConfig
=
13
;
preambleReceivedTargetPower
= -
96
;
# preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax
=
6
;
# powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep
=
1
;
# ra_ReponseWindow
# 1,2,4,8,10,20,40,80
ra_ResponseWindow
=
4
;
# ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
# 1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
=
4
;
# oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
=
14
;
# ra_ContentionResolutionTimer
# (0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer
=
7
;
rsrp_ThresholdSSB
=
19
;
# prach-RootSequenceIndex_PR
# 1 = 839, 2 = 139
prach_RootSequenceIndex_PR
=
2
;
prach_RootSequenceIndex
=
1
;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
msg1_SubcarrierSpacing
=
1
,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig
=
0
,
msg3_DeltaPreamble
=
1
;
p0_NominalWithGrant
=-
90
;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping
=
0
;
hoppingId
=
40
;
p0_nominal
= -
90
;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR
=
2
;
ssb_PositionsInBurst_Bitmap
=
1
;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell
=
2
;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing
=
1
;
# tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing
=
1
;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity
=
6
;
nrofDownlinkSlots
=
7
;
nrofDownlinkSymbols
=
6
;
nrofUplinkSlots
=
2
;
nrofUplinkSymbols
=
4
;
ssPBCH_BlockPower
= -
25
;
});
# SCTP definitions
SCTP
:
{
# Number of streams to use in input/output
SCTP_INSTREAMS
=
2
;
SCTP_OUTSTREAMS
=
2
;
}
});
MACRLCs
= ({
num_cc
=
1
;
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"f1"
;
local_n_if_name
=
"lo"
;
local_n_address
=
"127.0.0.3"
;
remote_n_address
=
"127.0.0.4"
;
local_n_portc
=
500
;
local_n_portd
=
2152
;
remote_n_portc
=
501
;
remote_n_portd
=
2152
;
});
L1s
= ({
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
thread_pool_size
=
8
;
prach_dtx_threshold
=
120
;
pucch0_dtx_threshold
=
150
;
ofdm_offset_divisor
=
8
;
#set this to UINT_MAX for offset 0
});
RUs
= ({
local_rf
=
"yes"
nb_tx
=
1
nb_rx
=
1
att_tx
=
0
att_rx
=
0
;
bands
= [
78
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
114
;
eNB_instances
= [
0
];
#beamforming 1x4 matrix:
bf_weights
= [
0
x00007fff
,
0
x0000
,
0
x0000
,
0
x0000
];
clock_src
=
"internal"
;
});
THREAD_STRUCT
= ({
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_SINGLE_THREAD"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
});
rfsimulator
: {
serveraddr
=
"server"
;
serverport
=
"4043"
;
options
= ();
#("saviq"); or/and "chanmod"
modelname
=
"AWGN"
;
IQfile
=
"/tmp/rfsimulator.iqs"
;
}
log_config
:
{
global_log_level
=
"info"
;
hw_log_level
=
"info"
;
phy_log_level
=
"info"
;
mac_log_level
=
"info"
;
rlc_log_level
=
"info"
;
pdcp_log_level
=
"info"
;
rrc_log_level
=
"info"
;
f1ap_log_level
=
"debug"
;
ngap_log_level
=
"debug"
;
}
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci1.conf
0 → 100644
View file @
cd050961
Active_gNBs
= (
"gNB-DU-PCI1"
);
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity
=
"none"
;
gNBs
= ({
# Identification parameters:
gNB_CU_ID
=
0
xe00
;
gNB_name
=
"gNB-DU-PCI1"
;
# Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code
=
1
;
plmn_list
= ({
mcc
=
208
;
mnc
=
99
;
mnc_length
=
2
;
snssaiList
= ({
sst
=
1
;
sd
=
0
x1
;
# 0 false, else true
});
});
nr_cellid
=
12345678
L
;
# Physical parameters:
min_rxtxtime
=
6
;
pdcch_ConfigSIB1
= ({
controlResourceSetZero
=
12
;
searchSpaceZero
=
0
;
});
servingCellConfigCommon
= ({
# spCellConfigCommon
physCellId
=
1
;
# downlinkConfigCommon
# frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB
=
641280
;
dl_frequencyBand
=
78
;
# this is 3600 MHz
dl_absoluteFrequencyPointA
=
640008
;
# scs-SpecificCarrierList
dl_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing
=
1
;
dl_carrierBandwidth
=
106
;
# initialDownlinkBWP
# genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth
=
28875
;
# 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing
=
1
;
# pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero
=
11
;
initialDLBWPsearchSpaceZero
=
0
;
# uplinkConfigCommon
# frequencyInfoUL
ul_frequencyBand
=
78
;
# scs-SpecificCarrierList
ul_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing
=
1
;
ul_carrierBandwidth
=
106
;
pMax
=
20
;
# initialUplinkBWP
# genericParameters
initialULBWPlocationAndBandwidth
=
28875
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing
=
1
;
# rach-ConfigCommon
# rach-ConfigGeneric
prach_ConfigurationIndex
=
98
;
# prach_msg1_FDM
# 0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM
=
0
;
prach_msg1_FrequencyStart
=
0
;
zeroCorrelationZoneConfig
=
13
;
preambleReceivedTargetPower
= -
96
;
# preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax
=
6
;
# powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep
=
1
;
# ra_ReponseWindow
# 1,2,4,8,10,20,40,80
ra_ResponseWindow
=
4
;
# ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
# 1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
=
4
;
# oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
=
14
;
# ra_ContentionResolutionTimer
# (0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer
=
7
;
rsrp_ThresholdSSB
=
19
;
# prach-RootSequenceIndex_PR
# 1 = 839, 2 = 139
prach_RootSequenceIndex_PR
=
2
;
prach_RootSequenceIndex
=
1
;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
msg1_SubcarrierSpacing
=
1
,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig
=
0
,
msg3_DeltaPreamble
=
1
;
p0_NominalWithGrant
=-
90
;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping
=
0
;
hoppingId
=
40
;
p0_nominal
= -
90
;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR
=
2
;
ssb_PositionsInBurst_Bitmap
=
1
;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell
=
2
;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing
=
1
;
# tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing
=
1
;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity
=
6
;
nrofDownlinkSlots
=
7
;
nrofDownlinkSymbols
=
6
;
nrofUplinkSlots
=
2
;
nrofUplinkSymbols
=
4
;
ssPBCH_BlockPower
= -
25
;
});
# SCTP definitions
SCTP
:
{
# Number of streams to use in input/output
SCTP_INSTREAMS
=
2
;
SCTP_OUTSTREAMS
=
2
;
}
});
MACRLCs
= ({
num_cc
=
1
;
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"f1"
;
local_n_if_name
=
"lo"
;
local_n_address
=
"127.0.0.3"
;
remote_n_address
=
"127.0.0.4"
;
local_n_portc
=
500
;
local_n_portd
=
2152
;
remote_n_portc
=
501
;
remote_n_portd
=
2152
;
});
L1s
= ({
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
thread_pool_size
=
8
;
prach_dtx_threshold
=
120
;
pucch0_dtx_threshold
=
150
;
ofdm_offset_divisor
=
8
;
#set this to UINT_MAX for offset 0
});
RUs
= ({
local_rf
=
"yes"
nb_tx
=
1
nb_rx
=
1
att_tx
=
0
att_rx
=
0
;
bands
= [
78
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
114
;
eNB_instances
= [
0
];
#beamforming 1x4 matrix:
bf_weights
= [
0
x00007fff
,
0
x0000
,
0
x0000
,
0
x0000
];
clock_src
=
"internal"
;
});
THREAD_STRUCT
= ({
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_SINGLE_THREAD"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
});
rfsimulator
: {
serveraddr
=
"server"
;
serverport
=
"4043"
;
options
= ();
#("saviq"); or/and "chanmod"
modelname
=
"AWGN"
;
IQfile
=
"/tmp/rfsimulator.iqs"
;
}
log_config
:
{
global_log_level
=
"info"
;
hw_log_level
=
"info"
;
phy_log_level
=
"info"
;
mac_log_level
=
"info"
;
rlc_log_level
=
"info"
;
pdcp_log_level
=
"info"
;
rrc_log_level
=
"info"
;
f1ap_log_level
=
"debug"
;
ngap_log_level
=
"debug"
;
}
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