Commit 7afede37 authored by General ABS's avatar General ABS Committed by rmagueta

Add a 2nd gNB in CU config file and fix the instance value for RRC/F1

parent cd050961
...@@ -79,7 +79,6 @@ MessageDef *RCconfig_NR_CU_E1(bool separate_CUUP_process) ...@@ -79,7 +79,6 @@ MessageDef *RCconfig_NR_CU_E1(bool separate_CUUP_process)
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);
int num_gnbs = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt; int num_gnbs = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt;
AssertFatal(num_gnbs == 1, "Support only one gNB per process\n");
if (num_gnbs > 0) { if (num_gnbs > 0) {
config_getlist(&GNBParamList, GNBParams, sizeofArray(GNBParams), NULL); config_getlist(&GNBParamList, GNBParams, sizeofArray(GNBParams), NULL);
......
...@@ -1447,6 +1447,7 @@ int RCconfig_NR_NG(MessageDef *msg_p, uint32_t i) { ...@@ -1447,6 +1447,7 @@ int RCconfig_NR_NG(MessageDef *msg_p, uint32_t i) {
else else
NGAP_REGISTER_GNB_REQ(msg_p).broadcast_plmn_num[l] = 0; 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, 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 " "List of broadcast PLMN to be sent to AMF can not be longer than actual "
......
...@@ -165,10 +165,12 @@ static int drb_config_gtpu_create(const protocol_ctxt_t *const ctxt_p, ...@@ -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) 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; gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
protocol_ctxt_t ctxt = {0}; 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); fill_DRB_configList(&ctxt, ue_context_p, xid);
e1ap_bearer_setup_resp_t resp = {0}; 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 ...@@ -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 // GTP tunnel for UL
int ret = drb_config_gtpu_create(&ctxt, ue_context_p, req, UE->DRB_configList, rrc->e1_inst); 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"); 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 // 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 // intentionally empty
} else { } else {
int remote_port = RC.nrrrc[ctxt.module_id]->eth_params_s.remote_portd; int remote_port = rrc->eth_params_s.remote_portd;
in_addr_t my_addr = inet_addr(RC.nrrrc[ctxt.module_id]->eth_params_s.my_addr); in_addr_t my_addr = inet_addr(rrc->eth_params_s.my_addr);
instance_t gtpInst = getCxt(CUtype, instance)->gtpInst; instance_t gtpInst = getCxt(CUtype, rrc->f1_instance)->gtpInst;
// GTP tunnel for DL // GTP tunnel for DL
fill_e1ap_bearer_setup_resp(&resp, req, gtpInst, UE->rnti, remote_port, my_addr); 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 ...@@ -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); 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 // 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; 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); CU_update_UP_DL_tunnel(req, gtpInst, req->rnti);
} }
......
...@@ -397,8 +397,9 @@ typedef struct gNB_RRC_INST_s { ...@@ -397,8 +397,9 @@ typedef struct gNB_RRC_INST_s {
ngran_node_t node_type; ngran_node_t node_type;
uint32_t node_id; uint32_t node_id;
char *node_name; char *node_name;
int module_id; int module_id;
instance_t f1_instance;
eth_params_t eth_params_s; eth_params_t eth_params_s;
rrc_gNB_carrier_data_t carrier; rrc_gNB_carrier_data_t carrier;
uid_allocator_t uid_allocator; uid_allocator_t uid_allocator;
......
...@@ -159,6 +159,26 @@ static void nr_rrc_addmod_drbs(int rnti, ...@@ -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) 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, ...@@ -384,7 +404,12 @@ static void rrc_gNB_generate_RRCSetup(instance_t instance,
.rnti = ue_p->rnti, .rnti = ue_p->rnti,
.srb_id = CCCH .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 ...@@ -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) 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) // first get RRC instance (note, no the ITTI instance)
module_id_t i = 0; module_id_t module_id = get_instance_by_NR_cellid(ul_rrc->nr_cellid);
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;
}
//AssertFatal(i != RC.nb_nr_inst, "Cell_id not found\n"); //AssertFatal(i != RC.nb_nr_inst, "Cell_id not found\n");
// TODO REMOVE_DU_RRC in monolithic mode, the MAC does not have the // 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 // nr_cellid. Thus, the above check would fail. For the time being, just put
// a warning, as we handle one DU only anyway // a warning, as we handle one DU only anyway
if (i == RC.nb_nr_inst) { if (module_id >= RC.nb_nr_inst) {
i = 0; 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); 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) if (ul_rrc->rrc_container)
free(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) ...@@ -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) 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); 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]; 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); 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; gNB_RRC_UE_t *UE = &ue_context_p->ue_context;
...@@ -2746,19 +2768,24 @@ void *rrc_gnb_task(void *args_p) { ...@@ -2746,19 +2768,24 @@ void *rrc_gnb_task(void *args_p) {
/* Messages from PDCP */ /* Messages from PDCP */
case F1AP_UL_RRC_MESSAGE: 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, PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt,
instance, instance,
GNB_FLAG_YES, GNB_FLAG_YES,
F1AP_UL_RRC_MESSAGE(msg_p).rnti, F1AP_UL_RRC_MESSAGE(msg_p).rnti,
0, 0,
0); 0);
LOG_D(NR_RRC, if (NODE_IS_CU(RC.nrrrc[ctxt.module_id]->node_type)) {
"Decoding DCCH %d: ue %04lx, inst %ld, ctxt %p, size %d\n", ctxt.instance = RC.nrrrc[ctxt.module_id]->f1_instance;
F1AP_UL_RRC_MESSAGE(msg_p).srb_id, }
ctxt.rntiMaybeUEid, LOG_D(NR_RRC,"Decoding DCCH %d: ue %04lx, inst %ld, ctxt %p, size %d\n",
instance, F1AP_UL_RRC_MESSAGE(msg_p).srb_id,
&ctxt, ctxt.rntiMaybeUEid,
F1AP_UL_RRC_MESSAGE(msg_p).rrc_container_length); instance,
&ctxt,
F1AP_UL_RRC_MESSAGE(msg_p).rrc_container_length);
rrc_gNB_decode_dcch(&ctxt, rrc_gNB_decode_dcch(&ctxt,
F1AP_UL_RRC_MESSAGE(msg_p).srb_id, F1AP_UL_RRC_MESSAGE(msg_p).srb_id,
F1AP_UL_RRC_MESSAGE(msg_p).rrc_container, F1AP_UL_RRC_MESSAGE(msg_p).rrc_container,
...@@ -2767,10 +2794,16 @@ void *rrc_gnb_task(void *args_p) { ...@@ -2767,10 +2794,16 @@ void *rrc_gnb_task(void *args_p) {
break; break;
case NGAP_DOWNLINK_NAS: 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); rrc_gNB_process_NGAP_DOWNLINK_NAS(msg_p, instance, &rrc_gNB_mui);
break; break;
case NGAP_PDUSESSION_SETUP_REQ: 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); rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(msg_p, instance);
break; break;
...@@ -2789,15 +2822,23 @@ void *rrc_gnb_task(void *args_p) { ...@@ -2789,15 +2822,23 @@ void *rrc_gnb_task(void *args_p) {
/* Messages from F1AP task */ /* Messages from F1AP task */
case F1AP_SETUP_REQ: 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"); 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; break;
case F1AP_UE_CONTEXT_SETUP_RESP: 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); rrc_CU_process_ue_context_setup_response(msg_p, instance);
break; break;
case F1AP_UE_CONTEXT_MODIFICATION_RESP: 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); rrc_CU_process_ue_context_modification_response(msg_p, instance);
break; break;
...@@ -2820,6 +2861,9 @@ void *rrc_gnb_task(void *args_p) { ...@@ -2820,6 +2861,9 @@ void *rrc_gnb_task(void *args_p) {
break; break;
case NGAP_INITIAL_CONTEXT_SETUP_REQ: 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); rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(msg_p, instance);
break; break;
......
Active_gNBs = ("gNB-CU"); Active_gNBs = ("gNB-CU-DU0", "gNB-CU-DU1");
# Asn1_verbosity, choice in: none, info, annoying # Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none"; Asn1_verbosity = "none";
Num_Threads_PUSCH = 8; Num_Threads_PUSCH = 8;
gNBs = ({ gNBs = (
########################### gNB-CU-DU0 ###########################
{
# Identification parameters: # Identification parameters:
gNB_CU_ID = 0xe00; gNB_CU_ID = 0xe00;
gNB_name = "gNB-CU"; gNB_name = "gNB-CU-DU0";
# Tracking area code, 0x0000 and 0xfffe are reserved values # Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1; tracking_area_code = 1;
plmn_list = ({ plmn_list = ({ mcc = 001; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1; }) });
mcc = 208;
mnc = 99;
mnc_length = 2;
snssaiList = ({
sst = 1;
sd = 0x1; # 0 false, else true
});
});
nr_cellid = 12345678L; nr_cellid = 12345678L;
...@@ -34,11 +29,7 @@ gNBs = ({ ...@@ -34,11 +29,7 @@ gNBs = ({
remote_s_portd = 2152; remote_s_portd = 2152;
min_rxtxtime = 6; min_rxtxtime = 6;
do_CSIRS = 1;
pdcch_ConfigSIB1 = ({
controlResourceSetZero = 12;
searchSpaceZero = 0;
});
servingCellConfigCommon = ({ servingCellConfigCommon = ({
...@@ -66,7 +57,183 @@ gNBs = ({ ...@@ -66,7 +57,183 @@ gNBs = ({
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1; initialDLBWPsubcarrierSpacing = 1;
# pdcch-ConfigCommon # 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 = 0xe00;
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 = 11111111L;
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; initialDLBWPsearchSpaceZero = 0;
# uplinkConfigCommon # uplinkConfigCommon
......
...@@ -10,26 +10,15 @@ gNBs = ({ ...@@ -10,26 +10,15 @@ gNBs = ({
# Tracking area code, 0x0000 and 0xfffe are reserved values # Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1; tracking_area_code = 1;
plmn_list = ({ plmn_list = ({ mcc = 001; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1; }) });
mcc = 208;
mnc = 99;
mnc_length = 2;
snssaiList = ({
sst = 1;
sd = 0x1; # 0 false, else true
});
});
nr_cellid = 12345678L; nr_cellid = 12345678L;
# Physical parameters: # Physical parameters:
min_rxtxtime = 6; min_rxtxtime = 6;
do_CSIRS = 1;
pdcch_ConfigSIB1 = ({
controlResourceSetZero = 12;
searchSpaceZero = 0;
});
servingCellConfigCommon = ({ servingCellConfigCommon = ({
...@@ -57,7 +46,7 @@ gNBs = ({ ...@@ -57,7 +46,7 @@ gNBs = ({
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1; initialDLBWPsubcarrierSpacing = 1;
# pdcch-ConfigCommon # pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 11; initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0; initialDLBWPsearchSpaceZero = 0;
# uplinkConfigCommon # uplinkConfigCommon
...@@ -125,7 +114,7 @@ gNBs = ({ ...@@ -125,7 +114,7 @@ gNBs = ({
# ssb_PositionsInBurs_BitmapPR # ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long # 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2; ssb_PositionsInBurst_PR = 2;
ssb_PositionsInBurst_Bitmap = 1; ssb_PositionsInBurst_Bitmap = 2;
# ssb_periodicityServingCell # ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1 # 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
...@@ -181,8 +170,7 @@ MACRLCs = ({ ...@@ -181,8 +170,7 @@ MACRLCs = ({
L1s = ({ L1s = ({
num_cc = 1; num_cc = 1;
tr_n_preference = "local_mac"; tr_n_preference = "local_mac";
thread_pool_size = 8; prach_dtx_threshold = 160;
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 150; pucch0_dtx_threshold = 150;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0 ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}); });
......
...@@ -10,26 +10,15 @@ gNBs = ({ ...@@ -10,26 +10,15 @@ gNBs = ({
# Tracking area code, 0x0000 and 0xfffe are reserved values # Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1; tracking_area_code = 1;
plmn_list = ({ plmn_list = ({ mcc = 001; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1; }) });
mcc = 208;
mnc = 99; nr_cellid = 11111111L;
mnc_length = 2;
snssaiList = ({
sst = 1;
sd = 0x1; # 0 false, else true
});
});
nr_cellid = 12345678L;
# Physical parameters: # Physical parameters:
min_rxtxtime = 6; min_rxtxtime = 6;
do_CSIRS = 1;
pdcch_ConfigSIB1 = ({
controlResourceSetZero = 12;
searchSpaceZero = 0;
});
servingCellConfigCommon = ({ servingCellConfigCommon = ({
...@@ -57,7 +46,7 @@ gNBs = ({ ...@@ -57,7 +46,7 @@ gNBs = ({
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1; initialDLBWPsubcarrierSpacing = 1;
# pdcch-ConfigCommon # pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 11; initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0; initialDLBWPsearchSpaceZero = 0;
# uplinkConfigCommon # uplinkConfigCommon
...@@ -181,8 +170,7 @@ MACRLCs = ({ ...@@ -181,8 +170,7 @@ MACRLCs = ({
L1s = ({ L1s = ({
num_cc = 1; num_cc = 1;
tr_n_preference = "local_mac"; tr_n_preference = "local_mac";
thread_pool_size = 8; prach_dtx_threshold = 160;
prach_dtx_threshold = 120;
pucch0_dtx_threshold = 150; pucch0_dtx_threshold = 150;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0 ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment