From 460acd840dd58fd46a995219cb9da8fda103668e Mon Sep 17 00:00:00 2001 From: laurent <laurent Thomas> Date: Tue, 5 Jul 2022 21:19:13 +0200 Subject: [PATCH] build, run in F1 mode until UE connect but pdu session still fails --- cmake_targets/build_oai | 2 +- common/ngran_types.h | 6 ++- openair2/ENB_APP/flexran_agent_ran_api.c | 4 ++ openair2/F1AP/f1ap_cu_interface_management.c | 4 +- openair2/F1AP/f1ap_cu_task.c | 4 +- openair2/GNB_APP/gnb_app.c | 53 ++++++++++---------- openair2/GNB_APP/gnb_config.c | 11 ++-- openair2/LAYER2/RLC/rlc.c | 2 +- openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c | 2 +- openair2/LAYER2/rlc_v2/rlc_oai_api.c | 2 +- openair2/RRC/LTE/rrc_eNB.c | 1 + openair2/RRC/LTE/rrc_eNB_S1AP.c | 4 +- openair2/RRC/NR/nr_rrc_defs.h | 1 - openair2/RRC/NR/rrc_gNB.c | 52 +++++++++++++++++++ openair2/RRC/NR/rrc_gNB_NGAP.c | 19 +++---- openair2/RRC/NR/rrc_gNB_NGAP.h | 2 +- openair3/NGAP/ngap_gNB_handlers.c | 9 +++- 17 files changed, 124 insertions(+), 54 deletions(-) diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 379c9b5cfb6..2b214e4619f 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -616,7 +616,7 @@ function main() { if [[ ${#CMAKE_CXX_FLAGS[@]} > 0 ]]; then CMAKE_CMD="$CMAKE_CMD -DCMAKE_CXX_FLAGS=\"${CMAKE_CXX_FLAGS[*]}\""; fi CMAKE_CMD="$CMAKE_CMD -DNOAVX512=\"${NOAVX512[*]}\"" echo_info "running $CMAKE_CMD" - eval $CMAKE_CMD + eval $CMAKE_CMD ../../.. for f in $execlist ; do echo_info "Compiling $f..." diff --git a/common/ngran_types.h b/common/ngran_types.h index 3dfa7aa01af..d61e3c50bd6 100644 --- a/common/ngran_types.h +++ b/common/ngran_types.h @@ -42,11 +42,13 @@ typedef enum { ngran_gNB_CU = 5, ngran_eNB_DU = 6, ngran_gNB_DU = 7, - ngran_eNB_MBMS_STA = 8 + ngran_eNB_MBMS_STA = 8, + ngran_gNB_CUCP, + ngran_gNB_CUUP } ngran_node_t; #define NODE_IS_MONOLITHIC(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB || (nOdE_TyPe) == ngran_ng_eNB || (nOdE_TyPe) == ngran_gNB) -#define NODE_IS_CU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_CU || (nOdE_TyPe) == ngran_ng_eNB_CU || (nOdE_TyPe) == ngran_gNB_CU) +#define NODE_IS_CU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_CU || (nOdE_TyPe) == ngran_ng_eNB_CU || (nOdE_TyPe) == ngran_gNB_CU || (nOdE_TyPe) == ngran_gNB_CUCP ||(nOdE_TyPe) == ngran_gNB_CUUP ) #define NODE_IS_DU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_DU || (nOdE_TyPe) == ngran_gNB_DU) #define NODE_IS_MBMS(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_MBMS_STA) diff --git a/openair2/ENB_APP/flexran_agent_ran_api.c b/openair2/ENB_APP/flexran_agent_ran_api.c index 3113c077981..7825d7faea2 100644 --- a/openair2/ENB_APP/flexran_agent_ran_api.c +++ b/openair2/ENB_APP/flexran_agent_ran_api.c @@ -3677,6 +3677,8 @@ size_t flexran_get_capabilities(mid_t mod_id, Protocol__FlexBsCapability **caps) case ngran_eNB_CU: case ngran_ng_eNB_CU: case ngran_gNB_CU: + case ngran_gNB_CUCP: + case ngran_gNB_CUUP: n_caps = 4; *caps = calloc(n_caps, sizeof(Protocol__FlexBsCapability)); AssertFatal(*caps, "could not allocate %zu bytes for Protocol__FlexBsCapability array\n", @@ -3730,6 +3732,8 @@ uint32_t flexran_get_capabilities_mask(mid_t mod_id) { case ngran_eNB_CU: case ngran_ng_eNB_CU: case ngran_gNB_CU: + case ngran_gNB_CUCP: + case ngran_gNB_CUUP: mask = (1 << PROTOCOL__FLEX_BS_CAPABILITY__PDCP) | (1 << PROTOCOL__FLEX_BS_CAPABILITY__SDAP) | (1 << PROTOCOL__FLEX_BS_CAPABILITY__RRC) diff --git a/openair2/F1AP/f1ap_cu_interface_management.c b/openair2/F1AP/f1ap_cu_interface_management.c index fdd5f3ea3e7..a7874e3f4ff 100644 --- a/openair2/F1AP/f1ap_cu_interface_management.c +++ b/openair2/F1AP/f1ap_cu_interface_management.c @@ -144,7 +144,9 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance, // LTS: FIXME data model failure: we don't KNOW if we receive a 4G or a 5G cell // Furthermore, cell_type is not a attribute of a cell in the data structure !!!!!!!!!! - if (RC.nrrrc && RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instance)]->node_type == ngran_gNB_CU) + if (RC.nrrrc && + ( RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instance)]->node_type == ngran_gNB_CU || + RC.nrrrc[GNB_INSTANCE_TO_MODULE_ID(instance)]->node_type == ngran_gNB_CUCP) ) f1ap_req(true, instance)->cell_type=CELL_MACRO_GNB; else f1ap_req(true, instance)->cell_type=CELL_MACRO_ENB; diff --git a/openair2/F1AP/f1ap_cu_task.c b/openair2/F1AP/f1ap_cu_task.c index b521d0c83dc..df48d7ba428 100644 --- a/openair2/F1AP/f1ap_cu_task.c +++ b/openair2/F1AP/f1ap_cu_task.c @@ -121,7 +121,9 @@ void *F1AP_CU_task(void *arg) { eth_params_t *IPaddrs; // Hardcoded instance id! - if (RC.nrrrc && RC.nrrrc[0]->node_type == ngran_gNB_CU) + if (RC.nrrrc && + (RC.nrrrc[0]->node_type == ngran_gNB_CU || + RC.nrrrc[0]->node_type == ngran_gNB_CUCP ) ) IPaddrs=&RC.nrrrc[0]->eth_params_s; else IPaddrs=&RC.rrc[0]->eth_params_s; diff --git a/openair2/GNB_APP/gnb_app.c b/openair2/GNB_APP/gnb_app.c index e49a4f4f557..d504e912919 100644 --- a/openair2/GNB_APP/gnb_app.c +++ b/openair2/GNB_APP/gnb_app.c @@ -196,40 +196,41 @@ void *gNB_app_task(void *args_p) } if (RC.nb_nr_inst > 0) { + if (NODE_IS_CU(RC.nrrrc[0]->node_type)) { - if (itti_create_task(TASK_CU_F1, F1AP_CU_task, NULL) < 0) { - LOG_E(F1AP, "Create task for F1AP CU failed\n"); - AssertFatal(1==0,"exiting"); + LOG_E(F1AP, "Create task for F1AP CU failed\n"); + AssertFatal(1==0,"exiting"); + } + } + + if (RC.nrrrc[0]->node_type == ngran_gNB_CUCP) { + + if (itti_create_task(TASK_CUCP_E1, E1AP_CUCP_task, NULL) < 0) { + LOG_E(E1AP, "Create task for E1AP CP failed\n"); + AssertFatal(1==0, "exiting"); } - - if (RC.nrrrc[0]->cu_type == CPtype) { - if (itti_create_task(TASK_CUCP_E1, E1AP_CUCP_task, NULL) < 0) { - LOG_E(E1AP, "Create task for E1AP CP failed\n"); - AssertFatal(1==0, "exiting"); - } // To initialize SCTP listener - msg_p = itti_alloc_new_message(TASK_GNB_APP, 0, E1AP_SETUP_REQ); - RCconfig_NR_CU_E1(msg_p, 0); - - itti_send_msg_to_task(TASK_CUCP_E1, GNB_MODULE_ID_TO_INSTANCE(0), msg_p); - } else if (RC.nrrrc[0]->cu_type == UPtype) { - if (itti_create_task(TASK_CUUP_E1, E1AP_CUUP_task, NULL) < 0) { - LOG_E(E1AP, "Create task for E1AP UP failed\n"); - AssertFatal(1==0, "exiting"); - } - // configure E1AP here - LOG_I(GNB_APP, "ngran_gNB_CU: Allocating ITTI message for E1AP_SETUP_REQ\n"); - msg_p = itti_alloc_new_message(TASK_GNB_APP, 0, E1AP_SETUP_REQ); - RCconfig_NR_CU_E1(msg_p, 0); - - itti_send_msg_to_task(TASK_CUUP_E1, GNB_MODULE_ID_TO_INSTANCE(0), msg_p); + msg_p = itti_alloc_new_message(TASK_GNB_APP, 0, E1AP_SETUP_REQ); + RCconfig_NR_CU_E1(msg_p, 0); + + itti_send_msg_to_task(TASK_CUCP_E1, GNB_MODULE_ID_TO_INSTANCE(0), msg_p); + + } else if (RC.nrrrc[0]->node_type == ngran_gNB_CUUP) { + if (itti_create_task(TASK_CUUP_E1, E1AP_CUUP_task, NULL) < 0) { + LOG_E(E1AP, "Create task for E1AP UP failed\n"); + AssertFatal(1==0, "exiting"); } - + // configure E1AP here + LOG_I(GNB_APP, "ngran_gNB_CU: Allocating ITTI message for E1AP_SETUP_REQ\n"); + msg_p = itti_alloc_new_message(TASK_GNB_APP, 0, E1AP_SETUP_REQ); + RCconfig_NR_CU_E1(msg_p, 0); + + itti_send_msg_to_task(TASK_CUUP_E1, GNB_MODULE_ID_TO_INSTANCE(0), msg_p); } if (NODE_IS_DU(RC.nrrrc[0]->node_type)) { - + if (itti_create_task(TASK_DU_F1, F1AP_DU_task, NULL) < 0) { LOG_E(F1AP, "Create task for F1AP DU failed\n"); AssertFatal(1==0,"exiting"); diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index 4d5b2ad6566..5bf81a7fc3c 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -1171,7 +1171,6 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } rrc->node_type = node_type; - rrc->cu_type = cu_type; rrc->nr_cellid = (uint64_t)*(GNBParamList.paramarray[i][GNB_NRCELLID_IDX].u64ptr); @@ -2319,10 +2318,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++) { @@ -2333,7 +2331,12 @@ static ngran_node_t get_node_type(void) } if ((strcmp(*(GNBParamList.paramarray[0][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "f1") == 0) && - (strcmp(*(GNBE1ParamList.paramarray[0][GNB_CONFIG_E1_CU_TYPE_IDX].strptr), "cu") == 0)) + (strcmp(*(GNBE1ParamList.paramarray[0][GNB_CONFIG_E1_CU_TYPE_IDX].strptr), "cp") == 0)) + return ngran_gNB_CUCP; + else if ((strcmp(*(GNBParamList.paramarray[0][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "f1") == 0) && + (strcmp(*(GNBE1ParamList.paramarray[0][GNB_CONFIG_E1_CU_TYPE_IDX].strptr), "up") == 0)) + return ngran_gNB_CUUP; + else if (strcmp(*(GNBParamList.paramarray[0][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "f1") == 0) return ngran_gNB_CU; else if (macrlc_has_f1 == 0) return ngran_gNB; diff --git a/openair2/LAYER2/RLC/rlc.c b/openair2/LAYER2/RLC/rlc.c index ec90817500d..1e2266adb17 100644 --- a/openair2/LAYER2/RLC/rlc.c +++ b/openair2/LAYER2/RLC/rlc.c @@ -590,7 +590,7 @@ void rlc_data_ind ( T(T_ENB_RLC_UL, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->rnti), T_INT(rb_idP), T_INT(sdu_sizeP)); #endif const ngran_node_t type = RC.rrc[ctxt_pP->module_id]->node_type; - AssertFatal(type != ngran_eNB_CU && type != ngran_ng_eNB_CU && type != ngran_gNB_CU, + AssertFatal(!NODE_IS_CU(type), "Can't be CU, bad node type %d\n", type); if (NODE_IS_DU(type) && srb_flagP == 1) { diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c index 6ac5c93f2a6..71b7c3b3c45 100644 --- a/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c +++ b/openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c @@ -514,7 +514,7 @@ rb_found: T_INT(ue->rnti), T_INT(rb_id), T_INT(size)); const ngran_node_t type = RC.nrrrc[0 /*ctxt_pP->module_id*/]->node_type; - AssertFatal(type != ngran_eNB_CU && type != ngran_ng_eNB_CU && type != ngran_gNB_CU, + AssertFatal(!NODE_IS_CU(type), "Can't be CU, bad node type %d\n", type); // if (NODE_IS_DU(type) && is_srb == 0) { diff --git a/openair2/LAYER2/rlc_v2/rlc_oai_api.c b/openair2/LAYER2/rlc_v2/rlc_oai_api.c index 11ae770e3ec..914484c1b61 100644 --- a/openair2/LAYER2/rlc_v2/rlc_oai_api.c +++ b/openair2/LAYER2/rlc_v2/rlc_oai_api.c @@ -415,7 +415,7 @@ rb_found: T_INT(ue->rnti), T_INT(rb_id), T_INT(size)); const ngran_node_t type = RC.rrc[0 /*ctxt_pP->module_id*/]->node_type; - AssertFatal(type != ngran_eNB_CU && type != ngran_ng_eNB_CU && type != ngran_gNB_CU, + AssertFatal(!NODE_IS_CU(type), "Can't be CU, bad node type %d\n", type); if (NODE_IS_DU(type)) { diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index 8be30175e11..e9b225d30d5 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -6610,6 +6610,7 @@ rrc_eNB_generate_RRCConnectionSetup( case ngran_eNB_CU : case ngran_ng_eNB_CU : case ngran_gNB_CU : + case ngran_gNB_CUCP : // create an ITTI message /* TODO: F1 IDs ar missing in RRC */ message_p = itti_alloc_new_message (TASK_RRC_ENB, 0, F1AP_DL_RRC_MESSAGE); diff --git a/openair2/RRC/LTE/rrc_eNB_S1AP.c b/openair2/RRC/LTE/rrc_eNB_S1AP.c index aefbc018315..7154b34962e 100644 --- a/openair2/RRC/LTE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LTE/rrc_eNB_S1AP.c @@ -1004,9 +1004,7 @@ int rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, const char } - if ((RC.rrc[ctxt.module_id]->node_type == ngran_eNB_CU) || - (RC.rrc[ctxt.module_id]->node_type == ngran_ng_eNB_CU) || - (RC.rrc[ctxt.module_id]->node_type == ngran_gNB_CU) ){ + if (NODE_IS_CU(RC.rrc[ctxt.module_id]->node_type)) { struct eNB_RRC_INST_s *rrc= RC.rrc[0]; MessageDef *message_p = itti_alloc_new_message (TASK_RRC_ENB, 0, F1AP_UE_CONTEXT_SETUP_REQ); f1ap_ue_context_setup_t *req=&F1AP_UE_CONTEXT_SETUP_REQ (message_p); diff --git a/openair2/RRC/NR/nr_rrc_defs.h b/openair2/RRC/NR/nr_rrc_defs.h index c8b0bdd2e1e..e9d9766f41b 100644 --- a/openair2/RRC/NR/nr_rrc_defs.h +++ b/openair2/RRC/NR/nr_rrc_defs.h @@ -476,7 +476,6 @@ typedef struct nr_mac_rrc_dl_if_s { typedef struct gNB_RRC_INST_s { ngran_node_t node_type; - int cu_type; uint32_t node_id; char *node_name; int module_id; diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 6687fb06b37..bee2c39935d 100755 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -369,10 +369,54 @@ rrc_gNB_generate_RRCSetup( ue_p->Srb0.Tx_buffer.payload_size, "[MSG] RRC Setup\n"); +<<<<<<< HEAD // activate release timer, if RRCSetupComplete not received after 100 frames, remove UE ue_context_pP->ue_context.ue_release_timer = 1; // remove UE after 10 frames after RRCConnectionRelease is triggered ue_context_pP->ue_context.ue_release_timer_thres = 1000; +======= + switch (rrc->node_type) { + case ngran_gNB_CU: + // create an ITTI message + /* TODO: F1 IDs ar missing in RRC */ + nr_rrc_pdcp_config_asn1_req(ctxt_pP, + ue_context_pP->ue_context.SRB_configList, + NULL, + NULL, + 0, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL); + message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, F1AP_DL_RRC_MESSAGE); + F1AP_DL_RRC_MESSAGE (message_p).rrc_container = (uint8_t *)ue_p->Srb0.Tx_buffer.Payload; + F1AP_DL_RRC_MESSAGE (message_p).rrc_container_length = ue_p->Srb0.Tx_buffer.payload_size; + F1AP_DL_RRC_MESSAGE (message_p).gNB_CU_ue_id = 0; + F1AP_DL_RRC_MESSAGE (message_p).gNB_DU_ue_id = 0; + F1AP_DL_RRC_MESSAGE (message_p).old_gNB_DU_ue_id = 0xFFFFFFFF; // unknown + F1AP_DL_RRC_MESSAGE (message_p).rnti = ue_p->rnti; + F1AP_DL_RRC_MESSAGE (message_p).srb_id = CCCH; + F1AP_DL_RRC_MESSAGE (message_p).execute_duplication = 1; + F1AP_DL_RRC_MESSAGE (message_p).RAT_frequency_priority_information.en_dc = 0; + itti_send_msg_to_task (TASK_CU_F1, ctxt_pP->module_id, message_p); + LOG_D(NR_RRC, "Send F1AP_DL_RRC_MESSAGE with ITTI\n"); + + break; + + case ngran_gNB_DU: + case ngran_gNB_CUCP: + case ngran_gNB_CUUP: + // nothing to do for DU + AssertFatal(1==0,"nothing to do for DU\n"); + break; + + case ngran_gNB: + { + // rrc_mac_config_req_gNB +>>>>>>> build, run in F1 mode until UE connect but pdu session still fails /* TODO: this should go through the E1 interface */ apply_pdcp_config(ue_context_pP,ctxt_pP); @@ -473,6 +517,7 @@ rrc_gNB_generate_RRCReject( switch (RC.nrrrc[ctxt_pP->module_id]->node_type) { case ngran_gNB_CU: + case ngran_gNB_CUCP: // create an ITTI message message_p = itti_alloc_new_message (TASK_RRC_GNB, 0, F1AP_DL_RRC_MESSAGE); F1AP_DL_RRC_MESSAGE (message_p).rrc_container = (uint8_t *)ue_p->Srb0.Tx_buffer.Payload; @@ -489,6 +534,7 @@ rrc_gNB_generate_RRCReject( break; case ngran_gNB_DU: + case ngran_gNB_CUUP: // nothing to do for DU AssertFatal(1==0,"nothing to do for DU\n"); break; @@ -686,6 +732,7 @@ rrc_gNB_generate_defaultRRCReconfiguration( ue_context_pP->ue_context.rnti); switch (RC.nrrrc[ctxt_pP->module_id]->node_type) { case ngran_gNB_CU: + case ngran_gNB_CUCP: nr_rrc_data_req(ctxt_pP, DCCH, rrc_gNB_mui++, @@ -698,6 +745,7 @@ rrc_gNB_generate_defaultRRCReconfiguration( break; case ngran_gNB_DU: + case ngran_gNB_CUUP: // nothing to do for DU AssertFatal(1==0,"nothing to do for DU\n"); break; @@ -4101,6 +4149,7 @@ rrc_gNB_generate_SecurityModeCommand( switch (RC.nrrrc[ctxt_pP->module_id]->node_type) { case ngran_gNB_CU: + case ngran_gNB_CUCP: // create an ITTI message memcpy(ue_context_pP->ue_context.Srb1.Srb_info.Tx_buffer.Payload, buffer, size); ue_context_pP->ue_context.Srb1.Srb_info.Tx_buffer.payload_size = size; @@ -4116,6 +4165,7 @@ rrc_gNB_generate_SecurityModeCommand( break; case ngran_gNB_DU: + case ngran_gNB_CUUP: // nothing to do for DU AssertFatal(1==0,"nothing to do for DU\n"); break; @@ -4164,6 +4214,7 @@ rrc_gNB_generate_UECapabilityEnquiry( size); switch (RC.nrrrc[ctxt_pP->module_id]->node_type) { case ngran_gNB_CU: + case ngran_gNB_CUCP: nr_rrc_data_req( ctxt_pP, DCCH, @@ -4175,6 +4226,7 @@ rrc_gNB_generate_UECapabilityEnquiry( break; case ngran_gNB_DU: + case ngran_gNB_CUUP: // nothing to do for DU AssertFatal(1==0,"nothing to do for DU\n"); break; diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c index 3c4e2dc269c..329da1e272f 100644 --- a/openair2/RRC/NR/rrc_gNB_NGAP.c +++ b/openair2/RRC/NR/rrc_gNB_NGAP.c @@ -554,7 +554,7 @@ rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ( &ctxt, &create_tunnel_resp, &inde_list[0]); - ue_context_p->ue_context.setup_pdu_sessions += nb_pdusessions_tosetup; + ue_context_p->ue_context.setup_pdu_sessions += NGAP_INITIAL_CONTEXT_SETUP_REQ (msg_p).nb_of_pdusessions; ue_context_p->ue_context.established_pdu_sessions_flag = 1; } @@ -807,6 +807,7 @@ rrc_gNB_process_NGAP_DOWNLINK_NAS( */ switch (RC.nrrrc[ctxt.module_id]->node_type) { case ngran_gNB_CU: + case ngran_gNB_CUCP: /* Transfer data to PDCP */ nr_rrc_data_req ( &ctxt, @@ -948,7 +949,7 @@ rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP( } //------------------------------------------------------------------------------ -int +void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ( MessageDef *msg_p, const char *msg_name, @@ -975,7 +976,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ( LOG_I(NR_RRC, "[gNB %ld] Received %s: ue_initial_id %d, gNB_ue_ngap_id %u \n", instance, msg_name, ue_initial_id, gNB_ue_ngap_id); - if (RC.nrrrc[ctxt.module_id]->cu_type == CPtype) { // E1 split CU-CP node + if (RC.nrrrc[ctxt.module_id]->node_type == ngran_gNB_CUCP) { // E1 split CU-CP node /* Configurations are referred from rrc_gNB_generate_dedicatedRRCReconfiguration() and rrc_gNB_process_RRCReconfigurationComplete() @@ -1048,7 +1049,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ( NGAP_PDUSESSION_SETUP_REQ(msg_fail_p).gNB_ue_ngap_id = gNB_ue_ngap_id; // TODO add failure cause when defined! itti_send_msg_to_task (TASK_NGAP, instance, msg_fail_p); - return (-1); + return ; } else { memset(&create_tunnel_req, 0, sizeof(gtpv1u_gnb_create_tunnel_req_t)); uint8_t nb_pdusessions_tosetup = NGAP_PDUSESSION_SETUP_REQ(msg_p).nb_pdusessions_tosetup; @@ -1098,7 +1099,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ( ue_context_p->ue_context.ul_failure_timer = 20000; // set ul_failure to 20000 for triggering rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ // rrc_gNB_free_UE(ctxt.module_id,ue_context_p); ue_context_p->ue_context.ul_failure_timer = 0; - return (0); + return ; } nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP( &ctxt, @@ -1109,14 +1110,14 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ( // TEST // ue_context_p->ue_context.pdusession[0].status = PDU_SESSION_STATUS_DONE; // rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(&ctxt, ue_context_p, 0); - rrc_gNB_generate_dedicatedRRCReconfiguration(&ctxt, ue_context_p); - return(0); + rrc_gNB_generate_dedicatedRRCReconfiguration(&ctxt, ue_context_p, NULL); + return; } nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP( &ctxt, &create_tunnel_resp, &inde_list[0]); - ue_context_p->ue_context.setup_pdu_sessions += nb_pdusessions_tosetup; + ue_context_p->ue_context.setup_pdu_sessions += NGAP_PDUSESSION_SETUP_REQ(msg_p).nb_pdusessions_tosetup; // TEST // ue_context_p->ue_context.pdusession[0].status = PDU_SESSION_STATUS_DONE; @@ -1161,7 +1162,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ( itti_send_msg_to_task (TASK_CU_F1, ctxt.module_id, message_p); } - return(0); + return; } } diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.h b/openair2/RRC/NR/rrc_gNB_NGAP.h index 5833c8aac21..0cde3ff38c1 100644 --- a/openair2/RRC/NR/rrc_gNB_NGAP.h +++ b/openair2/RRC/NR/rrc_gNB_NGAP.h @@ -101,7 +101,7 @@ rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP( uint8_t xid ); -int +void rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ( MessageDef *msg_p, const char *msg_name, diff --git a/openair3/NGAP/ngap_gNB_handlers.c b/openair3/NGAP/ngap_gNB_handlers.c index ebe86afe2a7..43a2a1ed573 100644 --- a/openair3/NGAP/ngap_gNB_handlers.c +++ b/openair3/NGAP/ngap_gNB_handlers.c @@ -1347,8 +1347,13 @@ int ngap_gNB_handle_pdusession_setup_request(uint32_t assoc_id, NGAP_PDUSESSION_SETUP_REQ(message_p).pdusession_setup_params[i].pdusession_id = item_p->pDUSessionID; // S-NSSAI - OCTET_STRING_TO_INT32(&item_p->s_NSSAI.sST, NGAP_PDUSESSION_SETUP_REQ(message_p).allowed_nssai[i].sST); - OCTET_STRING_TO_INT32(item_p->s_NSSAI.sD, *NGAP_PDUSESSION_SETUP_REQ(message_p).allowed_nssai[i].sD); + OCTET_STRING_TO_INT8(&item_p->s_NSSAI.sST, NGAP_PDUSESSION_SETUP_REQ(message_p).allowed_nssai[i].sST); + if(item_p->s_NSSAI.sD != NULL) { + NGAP_PDUSESSION_SETUP_REQ(message_p).allowed_nssai[i].sD_flag = 1; + NGAP_PDUSESSION_SETUP_REQ(message_p).allowed_nssai[i].sD[0] = item_p->s_NSSAI.sD->buf[0]; + NGAP_PDUSESSION_SETUP_REQ(message_p).allowed_nssai[i].sD[1] = item_p->s_NSSAI.sD->buf[1]; + NGAP_PDUSESSION_SETUP_REQ(message_p).allowed_nssai[i].sD[2] = item_p->s_NSSAI.sD->buf[2]; + } // check for the NAS PDU if (item_p->pDUSessionNAS_PDU->size > 0 ) { -- GitLab