diff --git a/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c b/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c index 7e00b0ee8d..c9bbc6cd05 100644 --- a/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c +++ b/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c @@ -134,11 +134,15 @@ static instance_t get_f1_gtp_instance(void) void e1_bearer_context_setup(const e1ap_bearer_setup_req_t *req) { + bool need_ue_id_mgmt = e1_used(); + /* mirror the CU-CP UE ID for CU-UP */ uint32_t cu_up_ue_id = req->gNB_cu_cp_ue_id; f1_ue_data_t ued = {.secondary_ue = req->gNB_cu_cp_ue_id}; - cu_add_f1_ue_data(cu_up_ue_id, &ued); - LOG_I(E1AP, "adding UE with CU-CP UE ID %d and CU-UP UE ID %d\n", req->gNB_cu_cp_ue_id, cu_up_ue_id); + if (need_ue_id_mgmt) { + cu_add_f1_ue_data(cu_up_ue_id, &ued); + LOG_I(E1AP, "adding UE with CU-CP UE ID %d and CU-UP UE ID %d\n", req->gNB_cu_cp_ue_id, cu_up_ue_id); + } instance_t n3inst = get_n3_gtp_instance(); instance_t f1inst = get_f1_gtp_instance(); @@ -260,6 +264,8 @@ void e1_bearer_context_modif(const e1ap_bearer_setup_req_t *req) void e1_bearer_release_cmd(const e1ap_bearer_release_cmd_t *cmd) { + bool need_ue_id_mgmt = e1_used(); + instance_t n3inst = get_n3_gtp_instance(); instance_t f1inst = get_f1_gtp_instance(); @@ -269,7 +275,9 @@ void e1_bearer_release_cmd(const e1ap_bearer_release_cmd_t *cmd) if (f1inst >= 0) // is there F1-U? newGtpuDeleteAllTunnels(f1inst, cmd->gNB_cu_up_ue_id); nr_pdcp_remove_UE(cmd->gNB_cu_up_ue_id); - cu_remove_f1_ue_data(cmd->gNB_cu_up_ue_id); + if (need_ue_id_mgmt) { + cu_remove_f1_ue_data(cmd->gNB_cu_up_ue_id); + } e1ap_bearer_release_cplt_t cplt = { .gNB_cu_cp_ue_id = cmd->gNB_cu_cp_ue_id, diff --git a/openair2/LAYER2/nr_pdcp/cuup_cucp_if.c b/openair2/LAYER2/nr_pdcp/cuup_cucp_if.c index ddeb59205e..d55424b3c8 100644 --- a/openair2/LAYER2/nr_pdcp/cuup_cucp_if.c +++ b/openair2/LAYER2/nr_pdcp/cuup_cucp_if.c @@ -22,14 +22,22 @@ #include "cuup_cucp_if.h" static e1_if_t e1_if; +static bool g_uses_e1; e1_if_t *get_e1_if(void) { return &e1_if; } +bool e1_used(void) +{ + return g_uses_e1; +} + void nr_pdcp_e1_if_init(bool uses_e1) { + g_uses_e1 = uses_e1; + if (uses_e1) cuup_cucp_init_e1ap(&e1_if); else diff --git a/openair2/LAYER2/nr_pdcp/cuup_cucp_if.h b/openair2/LAYER2/nr_pdcp/cuup_cucp_if.h index c33694dac3..2484604254 100644 --- a/openair2/LAYER2/nr_pdcp/cuup_cucp_if.h +++ b/openair2/LAYER2/nr_pdcp/cuup_cucp_if.h @@ -38,6 +38,7 @@ typedef struct e1_if_t { } e1_if_t; e1_if_t *get_e1_if(void); +bool e1_used(void); void nr_pdcp_e1_if_init(bool uses_e1); void cuup_cucp_init_direct(e1_if_t *iface);