diff --git a/ci-scripts/conf_files/gNB_SA_CU.conf b/ci-scripts/conf_files/gNB_SA_CU.conf index 253f4f180b8794576de0a1ae1198c0fa6dce1636..27b079d02694bb031456b3edcfaeaf380650c226 100644 --- a/ci-scripts/conf_files/gNB_SA_CU.conf +++ b/ci-scripts/conf_files/gNB_SA_CU.conf @@ -182,17 +182,6 @@ gNBs = } ); - E1_INTERFACE = - ( - { - type = "up"; - ipv4_cucp = "127.0.0.100"; - port_cucp = 25; - ipv4_cuup = "127.0.0.101"; - port_cuup = 25; - } - ) - NETWORK_INTERFACES : { diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c index d63fa6673726e8408875baa0c789c5dbe4a1a8a3..77caecc1fc6d58c6c5353e26f42f1b6b7de7bc85 100644 --- a/executables/nr-softmodem.c +++ b/executables/nr-softmodem.c @@ -316,7 +316,6 @@ int create_gNB_tasks(void) { for (int gnb_id = gnb_id_start; (gnb_id < gnb_id_end) ; gnb_id++) { RC.nrrrc[gnb_id] = (gNB_RRC_INST*)calloc(1,sizeof(gNB_RRC_INST)); 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]->node_type=set_node_type(); configure_nr_rrc(gnb_id); } diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index b66c5bfc337aeb44f37e021b9a24d53bedb7c61f..07d44e25e448f634186b8edd0be1c06ffc579b6c 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -1132,7 +1132,7 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { printf("NRRRC %d: Southbound Transport %s\n",i,*(GNBParamList.paramarray[i][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr)); - rrc->node_type = set_node_type(); + rrc->node_type = get_node_type(); if (NODE_IS_CU(rrc->node_type)) { paramdef_t SCTPParams[] = GNBSCTPPARAMS_DESC; char aprefix[MAX_OPTNAME_SIZE*2 + 8]; @@ -2291,9 +2291,9 @@ static ngran_node_t get_node_type(void) config_getlist( &MacRLC_ParamList,MacRLC_Params,sizeof(MacRLC_Params)/sizeof(paramdef_t), NULL); config_getlist( &GNBParamList,GNBParams,sizeof(GNBParams)/sizeof(paramdef_t),NULL); - config_getlist( &GNBE1ParamList, GNBE1Params, sizeof(GNBE1Params)/sizeof(paramdef_t), aprefix); char aprefix[MAX_OPTNAME_SIZE*2 + 8]; sprintf(aprefix, "%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, 0); + config_getlist( &GNBE1ParamList, GNBE1Params, sizeof(GNBE1Params)/sizeof(paramdef_t), aprefix); if ( MacRLC_ParamList.numelt > 0) { RC.nb_nr_macrlc_inst = MacRLC_ParamList.numelt; for (int j = 0; j < RC.nb_nr_macrlc_inst; j++) { @@ -2306,10 +2306,12 @@ static ngran_node_t get_node_type(void) if (strcmp(*(GNBParamList.paramarray[0][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "f1") == 0) { if ( GNBE1ParamList.paramarray == NULL || GNBE1ParamList.numelt == 0 ) return ngran_gNB_CU; - if (strcmp(*(GNBE1ParamList.paramarray[0][GNB_CONFIG_E1_CU_TYPE_IDX].strptr), "cp") == 0) + else if (strcmp(*(GNBE1ParamList.paramarray[0][GNB_CONFIG_E1_CU_TYPE_IDX].strptr), "cp") == 0) return ngran_gNB_CUCP; - if (strcmp(*(GNBE1ParamList.paramarray[0][GNB_CONFIG_E1_CU_TYPE_IDX].strptr), "up") == 0) + else if (strcmp(*(GNBE1ParamList.paramarray[0][GNB_CONFIG_E1_CU_TYPE_IDX].strptr), "up") == 0) return ngran_gNB_CUUP; + else + return ngran_gNB_CU; } else if (macrlc_has_f1 == 0) return ngran_gNB; else diff --git a/openair2/GNB_APP/gnb_config.h b/openair2/GNB_APP/gnb_config.h index a80ac4cfa93775ac8c746ecd6c112003ae446f3e..1457ccbc2ebcc0870e65c5af325651370fb4b7b7 100644 --- a/openair2/GNB_APP/gnb_config.h +++ b/openair2/GNB_APP/gnb_config.h @@ -108,7 +108,6 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i); int gNB_app_handle_f1ap_setup_resp(f1ap_setup_resp_t *resp); int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_update_t *gnb_cu_cfg_update); void nr_read_config_and_init(void); -ngran_node_t set_node_type(void); int RCconfig_NR_CU_E1(MessageDef *msg_p, uint32_t i); #endif /* GNB_CONFIG_H_ */ diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index dbf17a38100dbba696637bd17f6294a5d621426b..4d02ddb220436b6e719877951959d6783c160006 100755 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -203,6 +203,7 @@ static void rrc_gNB_mac_rrc_init(gNB_RRC_INST *rrc) { switch (rrc->node_type) { case ngran_gNB_CUCP: + mac_rrc_dl_f1ap_init(&rrc->mac_rrc); rrc->mac_rrc.nr_e1_bearer_cxt_msg_transfer = bearer_context_setup_e1ap; rrc->mac_rrc.nr_e1_ue_cxt_mod_msg_transfer = ue_cxt_mod_send_e1ap; break; @@ -210,11 +211,15 @@ static void rrc_gNB_mac_rrc_init(gNB_RRC_INST *rrc) // CUUP should not have a RRC instance but we let it for now break; case ngran_gNB_CU: - case ngran_gNB: mac_rrc_dl_f1ap_init(&rrc->mac_rrc); rrc->mac_rrc.nr_e1_bearer_cxt_msg_transfer = bearer_context_setup_direct; rrc->mac_rrc.nr_e1_ue_cxt_mod_msg_transfer = ue_cxt_mod_direct; break; + case ngran_gNB: + mac_rrc_dl_direct_init(&rrc->mac_rrc); + rrc->mac_rrc.nr_e1_bearer_cxt_msg_transfer = bearer_context_setup_direct; + rrc->mac_rrc.nr_e1_ue_cxt_mod_msg_transfer = ue_cxt_mod_direct; + break; case ngran_gNB_DU: /* silently drop this, as we currently still need the RRC at the DU. As * soon as this is not the case anymore, we can add the AssertFatal() */ @@ -369,7 +374,12 @@ rrc_gNB_generate_RRCSetup( ue_context_pP->ue_context.ue_release_timer_thres = 1000; /* TODO: this should go through the E1 interface */ - apply_pdcp_config(ue_context_pP,ctxt_pP); + nr_pdcp_add_srbs(ctxt_pP->enb_flag, + ctxt_pP->rnti, + ue_context_pP->ue_context.SRB_configList, + 0, + NULL, + NULL); f1ap_dl_rrc_message_t dl_rrc = { .old_gNB_DU_ue_id = 0xFFFFFF, @@ -3670,7 +3680,7 @@ static void rrc_CU_process_ue_context_modification_response(MessageDef *msg_p, c } // send the F1 response message up to update F1-U tunnel info - rrc->cu_if.nr_e1_ue_cxt_mod_msg_transfer(msg_e1, instance); + rrc->mac_rrc.nr_e1_ue_cxt_mod_msg_transfer(msg_e1, instance); NR_CellGroupConfig_t *cellGroupConfig = NULL; diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c index 49dfc84c597bb1688a5c0a97e423c2de3c84a253..f84d799b6706194e99dc9aafa58d640739ab428d 100644 --- a/openair2/RRC/NR/rrc_gNB_NGAP.c +++ b/openair2/RRC/NR/rrc_gNB_NGAP.c @@ -1067,7 +1067,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ( } } - rrc->cu_if.nr_e1_bearer_cxt_msg_transfer(bearer_req, instance); + rrc->mac_rrc.nr_e1_bearer_cxt_msg_transfer(bearer_req, instance); return; } diff --git a/openair2/SDAP/nr_sdap/nr_sdap_entity.c b/openair2/SDAP/nr_sdap/nr_sdap_entity.c index 63165bc768ea94727d06ead305d4c3973b11973f..e7916478cdf8e2457f36a8810010fe7aa6c52852 100644 --- a/openair2/SDAP/nr_sdap/nr_sdap_entity.c +++ b/openair2/SDAP/nr_sdap/nr_sdap_entity.c @@ -199,7 +199,7 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity, // Pushing SDAP SDU to GTP-U Layer MessageDef *message_p = itti_alloc_new_message_sized(TASK_PDCP_ENB, 0, - GTPV1U_GNB_TUNNEL_DATA_REQ, + GTPV1U_TUNNEL_DATA_REQ, sizeof(gtpv1u_tunnel_data_req_t) + size + GTPU_HEADER_OVERHEAD_MAX - offset); AssertFatal(message_p != NULL, "OUT OF MEMORY"); @@ -209,8 +209,8 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity, req->buffer = gtpu_buffer_p; req->length = size - offset; req->offset = GTPU_HEADER_OVERHEAD_MAX; - req->rnti = ue_id; - req->pdusession_id = pdusession_id; + req->ue_id = ue_id; + req->bearer_id = pdusession_id; LOG_D(SDAP, "%s() sending message to gtp size %d\n", __func__, size-offset); itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p); } else { //nrUE