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
7afede37
Commit
7afede37
authored
Jul 25, 2022
by
General ABS
Committed by
rmagueta
Jun 06, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add a 2nd gNB in CU config file and fix the instance value for RRC/F1
parent
cd050961
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
274 additions
and
84 deletions
+274
-84
openair2/E1AP/e1ap_setup.c
openair2/E1AP/e1ap_setup.c
+0
-1
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+1
-0
openair2/RRC/NR/cucp_cuup_direct.c
openair2/RRC/NR/cucp_cuup_direct.c
+12
-10
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+2
-1
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+63
-19
targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb_2multDUs.conf
targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb_2multDUs.conf
+185
-18
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci0.conf
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci0.conf
+5
-17
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci1.conf
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci1.conf
+6
-18
No files found.
openair2/E1AP/e1ap_setup.c
View file @
7afede37
...
...
@@ -79,7 +79,6 @@ MessageDef *RCconfig_NR_CU_E1(bool separate_CUUP_process)
char
aprefix
[
MAX_OPTNAME_SIZE
*
2
+
8
];
sprintf
(
aprefix
,
"%s.[%i]"
,
GNB_CONFIG_STRING_GNB_LIST
,
0
);
int
num_gnbs
=
GNBSParams
[
GNB_ACTIVE_GNBS_IDX
].
numelt
;
AssertFatal
(
num_gnbs
==
1
,
"Support only one gNB per process
\n
"
);
if
(
num_gnbs
>
0
)
{
config_getlist
(
&
GNBParamList
,
GNBParams
,
sizeofArray
(
GNBParams
),
NULL
);
...
...
openair2/GNB_APP/gnb_config.c
View file @
7afede37
...
...
@@ -1447,6 +1447,7 @@ int RCconfig_NR_NG(MessageDef *msg_p, uint32_t i) {
else
NGAP_REGISTER_GNB_REQ(msg_p).broadcast_plmn_num[l] = 0;
*/
NGAP_REGISTER_GNB_REQ
(
msg_p
).
broadcast_plmn_num
[
l
]
=
0
;
AssertFatal
(
NGAP_REGISTER_GNB_REQ
(
msg_p
).
broadcast_plmn_num
[
l
]
<=
NGAP_REGISTER_GNB_REQ
(
msg_p
).
num_plmn
,
"List of broadcast PLMN to be sent to AMF can not be longer than actual "
...
...
openair2/RRC/NR/cucp_cuup_direct.c
View file @
7afede37
...
...
@@ -165,10 +165,12 @@ static int drb_config_gtpu_create(const protocol_ctxt_t *const ctxt_p,
static
void
cucp_cuup_bearer_context_setup_direct
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
,
uint8_t
xid
)
{
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context_by_rnti
(
RC
.
nrrrc
[
instance
],
req
->
rnti
);
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
instance
];
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context_by_rnti
(
rrc
,
req
->
rnti
);
gNB_RRC_UE_t
*
UE
=
&
ue_context_p
->
ue_context
;
protocol_ctxt_t
ctxt
=
{
0
};
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
0
,
GNB_FLAG_YES
,
UE
->
rnti
,
0
,
0
,
0
);
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
UE
->
rnti
,
0
,
0
,
0
);
fill_DRB_configList
(
&
ctxt
,
ue_context_p
,
xid
);
e1ap_bearer_setup_resp_t
resp
=
{
0
};
...
...
@@ -185,18 +187,17 @@ static void cucp_cuup_bearer_context_setup_direct(e1ap_bearer_setup_req_t *const
}
}
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
ctxt
.
module_id
];
// GTP tunnel for UL
int
ret
=
drb_config_gtpu_create
(
&
ctxt
,
ue_context_p
,
req
,
UE
->
DRB_configList
,
rrc
->
e1_inst
);
if
(
ret
<
0
)
AssertFatal
(
false
,
"Unable to configure DRB or to create GTP Tunnel
\n
"
);
// Used to store teids: if monolithic, will simply be NULL
if
(
!
NODE_IS_CU
(
RC
.
nrrrc
[
ctxt
.
module_id
]
->
node_type
))
{
if
(
!
NODE_IS_CU
(
rrc
->
node_type
))
{
// intentionally empty
}
else
{
int
remote_port
=
RC
.
nrrrc
[
ctxt
.
module_id
]
->
eth_params_s
.
remote_portd
;
in_addr_t
my_addr
=
inet_addr
(
RC
.
nrrrc
[
ctxt
.
module_id
]
->
eth_params_s
.
my_addr
);
instance_t
gtpInst
=
getCxt
(
CUtype
,
instance
)
->
gtpInst
;
int
remote_port
=
rrc
->
eth_params_s
.
remote_portd
;
in_addr_t
my_addr
=
inet_addr
(
rrc
->
eth_params_s
.
my_addr
);
instance_t
gtpInst
=
getCxt
(
CUtype
,
rrc
->
f1_
instance
)
->
gtpInst
;
// GTP tunnel for DL
fill_e1ap_bearer_setup_resp
(
&
resp
,
req
,
gtpInst
,
UE
->
rnti
,
remote_port
,
my_addr
);
}
...
...
@@ -206,11 +207,12 @@ static void cucp_cuup_bearer_context_setup_direct(e1ap_bearer_setup_req_t *const
prepare_and_send_ue_context_modification_f1
(
ue_context_p
,
&
resp
);
}
static
void
cucp_cuup_bearer_context_mod_direct
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
,
uint8_t
xid
)
{
static
void
cucp_cuup_bearer_context_mod_direct
(
e1ap_bearer_setup_req_t
*
const
req
,
instance_t
instance
,
uint8_t
xid
)
{
// only update GTP tunnels if it is really a CU
if
(
!
NODE_IS_CU
(
RC
.
nrrrc
[
0
]
->
node_type
))
if
(
!
NODE_IS_CU
(
RC
.
nrrrc
[
instance
]
->
node_type
))
return
;
instance_t
gtpInst
=
getCxt
(
CUtype
,
instance
)
->
gtpInst
;
instance_t
gtpInst
=
getCxt
(
CUtype
,
RC
.
nrrrc
[
instance
]
->
f1_
instance
)
->
gtpInst
;
CU_update_UP_DL_tunnel
(
req
,
gtpInst
,
req
->
rnti
);
}
...
...
openair2/RRC/NR/nr_rrc_defs.h
View file @
7afede37
...
...
@@ -397,8 +397,9 @@ typedef struct gNB_RRC_INST_s {
ngran_node_t
node_type
;
uint32_t
node_id
;
char
*
node_name
;
char
*
node_name
;
int
module_id
;
instance_t
f1_instance
;
eth_params_t
eth_params_s
;
rrc_gNB_carrier_data_t
carrier
;
uid_allocator_t
uid_allocator
;
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
7afede37
...
...
@@ -159,6 +159,26 @@ static void nr_rrc_addmod_drbs(int rnti,
///---------------------------------------------------------------------------------------------------------------///
///---------------------------------------------------------------------------------------------------------------///
static
instance_t
get_instance_by_NR_cellid
(
uint64_t
nr_cellid
)
{
for
(
int
i
=
0
;
i
<
RC
.
nb_nr_inst
;
i
++
)
{
if
(
RC
.
nrrrc
[
i
]
&&
RC
.
nrrrc
[
i
]
->
nr_cellid
==
nr_cellid
)
{
return
i
;
}
}
return
-
1
;
}
static
instance_t
get_instance_by_F1_instance
(
instance_t
f1_instance
)
{
for
(
int
i
=
0
;
i
<
RC
.
nb_nr_inst
;
i
++
)
{
if
(
RC
.
nrrrc
[
i
]
&&
RC
.
nrrrc
[
i
]
->
f1_instance
==
f1_instance
)
{
return
i
;
}
}
return
-
1
;
}
static
void
init_NR_SI
(
gNB_RRC_INST
*
rrc
,
gNB_RrcConfigurationReq
*
configuration
)
{
...
...
@@ -384,7 +404,12 @@ static void rrc_gNB_generate_RRCSetup(instance_t instance,
.
rnti
=
ue_p
->
rnti
,
.
srb_id
=
CCCH
};
rrc
->
mac_rrc
.
dl_rrc_message_transfer
(
instance
,
&
dl_rrc
);
int
i
=
instance
;
if
(
NODE_IS_CU
(
RC
.
nrrrc
[
instance
]
->
node_type
))
{
i
=
RC
.
nrrrc
[
instance
]
->
f1_instance
;
}
rrc
->
mac_rrc
.
dl_rrc_message_transfer
(
i
,
&
dl_rrc
);
}
//-----------------------------------------------------------------------------
...
...
@@ -2243,21 +2268,18 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *f1_setup_req, instance_t ins
void
rrc_gNB_process_initial_ul_rrc_message
(
const
f1ap_initial_ul_rrc_message_t
*
ul_rrc
)
{
// first get RRC instance (note, no the ITTI instance)
module_id_t
i
=
0
;
for
(
i
=
0
;
i
<
RC
.
nb_nr_inst
;
i
++
)
{
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
i
];
if
(
rrc
->
nr_cellid
==
ul_rrc
->
nr_cellid
)
break
;
}
module_id_t
module_id
=
get_instance_by_NR_cellid
(
ul_rrc
->
nr_cellid
);
//AssertFatal(i != RC.nb_nr_inst, "Cell_id not found\n");
// TODO REMOVE_DU_RRC in monolithic mode, the MAC does not have the
// nr_cellid. Thus, the above check would fail. For the time being, just put
// a warning, as we handle one DU only anyway
if
(
i
=
=
RC
.
nb_nr_inst
)
{
i
=
0
;
if
(
module_id
>
=
RC
.
nb_nr_inst
)
{
module_id
=
0
;
LOG_W
(
RRC
,
"initial UL RRC message nr_cellid %ld does not match RRC's %ld
\n
"
,
ul_rrc
->
nr_cellid
,
RC
.
nrrrc
[
0
]
->
nr_cellid
);
}
nr_rrc_gNB_decode_ccch
(
i
,
ul_rrc
->
crnti
,
ul_rrc
->
rrc_container
,
ul_rrc
->
rrc_container_length
,
ul_rrc
->
du2cu_rrc_container
,
ul_rrc
->
du2cu_rrc_container_length
);
nr_rrc_gNB_decode_ccch
(
module_id
,
ul_rrc
->
crnti
,
ul_rrc
->
rrc_container
,
ul_rrc
->
rrc_container_length
,
ul_rrc
->
du2cu_rrc_container
,
ul_rrc
->
du2cu_rrc_container_length
);
if
(
ul_rrc
->
rrc_container
)
free
(
ul_rrc
->
rrc_container
);
...
...
@@ -2338,7 +2360,7 @@ static void rrc_CU_process_ue_context_release_complete(MessageDef *msg_p)
static
void
rrc_CU_process_ue_context_modification_response
(
MessageDef
*
msg_p
,
instance_t
instance
)
{
f1ap_ue_context_modif_resp_t
*
resp
=
&
F1AP_UE_CONTEXT_MODIFICATION_RESP
(
msg_p
);
protocol_ctxt_t
ctxt
=
{.
rntiMaybeUEid
=
resp
->
rnti
,
.
module_id
=
instance
,
.
instance
=
instance
,
.
enb_flag
=
1
,
.
eNB_index
=
instance
};
protocol_ctxt_t
ctxt
=
{.
rntiMaybeUEid
=
resp
->
rnti
,
.
module_id
=
instance
,
.
instance
=
RC
.
nrrrc
[
instance
]
->
f1_
instance
,
.
enb_flag
=
1
,
.
eNB_index
=
instance
};
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
ctxt
.
module_id
];
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context_by_rnti
(
rrc
,
resp
->
rnti
);
gNB_RRC_UE_t
*
UE
=
&
ue_context_p
->
ue_context
;
...
...
@@ -2746,19 +2768,24 @@ void *rrc_gnb_task(void *args_p) {
/* Messages from PDCP */
case
F1AP_UL_RRC_MESSAGE
:
if
(
NODE_IS_CU
(
RC
.
nrrrc
[
instance
]
->
node_type
))
{
instance
=
get_instance_by_F1_instance
(
instance
);
}
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
F1AP_UL_RRC_MESSAGE
(
msg_p
).
rnti
,
0
,
0
);
LOG_D
(
NR_RRC
,
"Decoding DCCH %d: ue %04lx, inst %ld, ctxt %p, size %d
\n
"
,
F1AP_UL_RRC_MESSAGE
(
msg_p
).
srb_id
,
ctxt
.
rntiMaybeUEid
,
instance
,
&
ctxt
,
F1AP_UL_RRC_MESSAGE
(
msg_p
).
rrc_container_length
);
if
(
NODE_IS_CU
(
RC
.
nrrrc
[
ctxt
.
module_id
]
->
node_type
))
{
ctxt
.
instance
=
RC
.
nrrrc
[
ctxt
.
module_id
]
->
f1_instance
;
}
LOG_D
(
NR_RRC
,
"Decoding DCCH %d: ue %04lx, inst %ld, ctxt %p, size %d
\n
"
,
F1AP_UL_RRC_MESSAGE
(
msg_p
).
srb_id
,
ctxt
.
rntiMaybeUEid
,
instance
,
&
ctxt
,
F1AP_UL_RRC_MESSAGE
(
msg_p
).
rrc_container_length
);
rrc_gNB_decode_dcch
(
&
ctxt
,
F1AP_UL_RRC_MESSAGE
(
msg_p
).
srb_id
,
F1AP_UL_RRC_MESSAGE
(
msg_p
).
rrc_container
,
...
...
@@ -2767,10 +2794,16 @@ void *rrc_gnb_task(void *args_p) {
break
;
case
NGAP_DOWNLINK_NAS
:
if
(
NODE_IS_CU
(
RC
.
nrrrc
[
instance
]
->
node_type
))
{
instance
=
get_instance_by_F1_instance
(
instance
);
}
rrc_gNB_process_NGAP_DOWNLINK_NAS
(
msg_p
,
instance
,
&
rrc_gNB_mui
);
break
;
case
NGAP_PDUSESSION_SETUP_REQ
:
if
(
NODE_IS_CU
(
RC
.
nrrrc
[
instance
]
->
node_type
))
{
instance
=
get_instance_by_F1_instance
(
instance
);
}
rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ
(
msg_p
,
instance
);
break
;
...
...
@@ -2789,15 +2822,23 @@ void *rrc_gnb_task(void *args_p) {
/* Messages from F1AP task */
case
F1AP_SETUP_REQ
:
ctxt
.
module_id
=
get_instance_by_NR_cellid
(
F1AP_SETUP_REQ
(
msg_p
).
cell
[
0
].
nr_cellid
);
RC
.
nrrrc
[
ctxt
.
module_id
]
->
f1_instance
=
instance
;
AssertFatal
(
NODE_IS_CU
(
RC
.
nrrrc
[
instance
]
->
node_type
),
"should not receive F1AP_SETUP_REQUEST, need call by CU!
\n
"
);
rrc_gNB_process_f1_setup_req
(
&
F1AP_SETUP_REQ
(
msg_p
));
rrc_gNB_process_f1_setup_req
(
&
F1AP_SETUP_REQ
(
msg_p
)
,
ctxt
.
module_id
);
break
;
case
F1AP_UE_CONTEXT_SETUP_RESP
:
if
(
NODE_IS_CU
(
RC
.
nrrrc
[
instance
]
->
node_type
))
{
instance
=
get_instance_by_F1_instance
(
instance
);
}
rrc_CU_process_ue_context_setup_response
(
msg_p
,
instance
);
break
;
case
F1AP_UE_CONTEXT_MODIFICATION_RESP
:
if
(
NODE_IS_CU
(
RC
.
nrrrc
[
instance
]
->
node_type
))
{
instance
=
get_instance_by_F1_instance
(
instance
);
}
rrc_CU_process_ue_context_modification_response
(
msg_p
,
instance
);
break
;
...
...
@@ -2820,6 +2861,9 @@ void *rrc_gnb_task(void *args_p) {
break
;
case
NGAP_INITIAL_CONTEXT_SETUP_REQ
:
if
(
NODE_IS_CU
(
RC
.
nrrrc
[
instance
]
->
node_type
))
{
instance
=
get_instance_by_F1_instance
(
instance
);
}
rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ
(
msg_p
,
instance
);
break
;
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb_2multDUs.conf
View file @
7afede37
Active_gNBs
= (
"gNB-CU"
);
Active_gNBs
= (
"gNB-CU-DU0"
,
"gNB-CU-DU1"
);
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity
=
"none"
;
Num_Threads_PUSCH
=
8
;
gNBs
= (
{
gNBs
= (
########################### gNB-CU-DU0 ###########################
{
# Identification parameters:
gNB_CU_ID
=
0
xe00
;
gNB_name
=
"gNB-CU"
;
gNB_name
=
"gNB-CU
-DU0
"
;
# 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
});
});
plmn_list
= ({
mcc
=
001
;
mnc
=
01
;
mnc_length
=
2
;
snssaiList
= ({
sst
=
1
; }) });
nr_cellid
=
12345678
L
;
...
...
@@ -34,11 +29,7 @@ gNBs = ({
remote_s_portd
=
2152
;
min_rxtxtime
=
6
;
pdcch_ConfigSIB1
= ({
controlResourceSetZero
=
12
;
searchSpaceZero
=
0
;
});
do_CSIRS
=
1
;
servingCellConfigCommon
= ({
...
...
@@ -66,7 +57,183 @@ gNBs = ({
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing
=
1
;
# pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero
=
11
;
initialDLBWPcontrolResourceSetZero
=
12
;
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
=
2
;
# 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
}
},
########################### gNB-CU-DU1 ###########################
{
# Identification parameters:
gNB_CU_ID
=
0
xe00
;
gNB_name
=
"gNB-CU-DU1"
;
# Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code
=
1
;
plmn_list
= ({
mcc
=
001
;
mnc
=
01
;
mnc_length
=
2
;
snssaiList
= ({
sst
=
1
; }) });
nr_cellid
=
11111111
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
;
do_CSIRS
=
1
;
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
=
12
;
initialDLBWPsearchSpaceZero
=
0
;
# uplinkConfigCommon
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci0.conf
View file @
7afede37
...
...
@@ -10,26 +10,15 @@ gNBs = ({
# 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
});
});
plmn_list
= ({
mcc
=
001
;
mnc
=
01
;
mnc_length
=
2
;
snssaiList
= ({
sst
=
1
; }) });
nr_cellid
=
12345678
L
;
# Physical parameters:
min_rxtxtime
=
6
;
do_CSIRS
=
1
;
pdcch_ConfigSIB1
= ({
controlResourceSetZero
=
12
;
searchSpaceZero
=
0
;
});
servingCellConfigCommon
= ({
...
...
@@ -57,7 +46,7 @@ gNBs = ({
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing
=
1
;
# pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero
=
1
1
;
initialDLBWPcontrolResourceSetZero
=
1
2
;
initialDLBWPsearchSpaceZero
=
0
;
# uplinkConfigCommon
...
...
@@ -125,7 +114,7 @@ gNBs = ({
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR
=
2
;
ssb_PositionsInBurst_Bitmap
=
1
;
ssb_PositionsInBurst_Bitmap
=
2
;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
...
...
@@ -181,8 +170,7 @@ MACRLCs = ({
L1s
= ({
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
thread_pool_size
=
8
;
prach_dtx_threshold
=
120
;
prach_dtx_threshold
=
160
;
pucch0_dtx_threshold
=
150
;
ofdm_offset_divisor
=
8
;
#set this to UINT_MAX for offset 0
});
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci1.conf
View file @
7afede37
...
...
@@ -10,26 +10,15 @@ gNBs = ({
# 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
;
plmn_list
= ({
mcc
=
001
;
mnc
=
01
;
mnc_length
=
2
;
snssaiList
= ({
sst
=
1
; }) });
nr_cellid
=
11111111
L
;
# Physical parameters:
min_rxtxtime
=
6
;
do_CSIRS
=
1
;
pdcch_ConfigSIB1
= ({
controlResourceSetZero
=
12
;
searchSpaceZero
=
0
;
});
servingCellConfigCommon
= ({
...
...
@@ -57,7 +46,7 @@ gNBs = ({
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing
=
1
;
# pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero
=
1
1
;
initialDLBWPcontrolResourceSetZero
=
1
2
;
initialDLBWPsearchSpaceZero
=
0
;
# uplinkConfigCommon
...
...
@@ -181,8 +170,7 @@ MACRLCs = ({
L1s
= ({
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
thread_pool_size
=
8
;
prach_dtx_threshold
=
120
;
prach_dtx_threshold
=
160
;
pucch0_dtx_threshold
=
150
;
ofdm_offset_divisor
=
8
;
#set this to UINT_MAX for offset 0
});
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment