From d9661177fa9ef01394bff749c39e832c2b18488c Mon Sep 17 00:00:00 2001 From: Navid Nikaein <navid.nikaein@eurecom.fr> Date: Wed, 19 Sep 2018 02:01:08 +0200 Subject: [PATCH] Better management of cu/du ue ids Fix for some variables --- openair2/COMMON/f1ap_messages_types.h | 1 + openair2/F1AP/f1ap_common.c | 155 ++++++++++++++++++- openair2/F1AP/f1ap_common.h | 61 +++++++- openair2/F1AP/f1ap_cu_rrc_message_transfer.c | 51 +++--- openair2/F1AP/f1ap_du_rrc_message_transfer.c | 47 ++++-- openair2/F1AP/f1ap_du_rrc_message_transfer.h | 6 +- openair2/LAYER2/PDCP_v10.1.0/pdcp.c | 2 +- openair2/LAYER2/RLC/rlc.c | 2 +- openair2/RRC/LTE/rrc_eNB.c | 3 +- 9 files changed, 277 insertions(+), 51 deletions(-) diff --git a/openair2/COMMON/f1ap_messages_types.h b/openair2/COMMON/f1ap_messages_types.h index 1c1fe6ed42..9725431906 100644 --- a/openair2/COMMON/f1ap_messages_types.h +++ b/openair2/COMMON/f1ap_messages_types.h @@ -211,6 +211,7 @@ typedef struct f1ap_dl_rrc_message_s { uint32_t gNB_CU_ue_id; uint32_t gNB_DU_ue_id; uint32_t old_gNB_DU_ue_id; + uint16_t rnti; uint8_t srb_id; uint8_t execute_duplication; uint8_t *rrc_container; diff --git a/openair2/F1AP/f1ap_common.c b/openair2/F1AP/f1ap_common.c index a5ad507901..f00b159e12 100644 --- a/openair2/F1AP/f1ap_common.c +++ b/openair2/F1AP/f1ap_common.c @@ -209,9 +209,160 @@ uint8_t F1AP_get_next_transaction_identifier(module_id_t enb_mod_idP, module_id_ return transaction_identifier[enb_mod_idP+cu_mod_idP]; } -uint8_t F1AP_get_UE_identifier(module_id_t enb_mod_idP, int CC_idP, int UE_id) { - static uint8_t UE_identifier[NUMBER_OF_eNB_MAX]; +module_id_t F1AP_get_UE_identifier(module_id_t enb_mod_idP, int CC_idP, int UE_id) { + static module_id_t UE_identifier[NUMBER_OF_eNB_MAX]; UE_identifier[enb_mod_idP+CC_idP+UE_id] = (UE_identifier[enb_mod_idP+CC_idP+UE_id] + 1) % F1AP_UE_IDENTIFIER_NUMBER; //LOG_T(F1AP,"generated xid is %d\n",transaction_identifier[enb_mod_idP+du_mod_idP]); return UE_identifier[enb_mod_idP+CC_idP+UE_id]; +} + +int f1ap_add_ue(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t module_idP, + int CC_idP, + int UE_id, + rnti_t rntiP){ + + int i; + for (i=0; i < MAX_MOBILES_PER_ENB; i++){ + if (f1_ue_inst->rnti[i] == rntiP) { + f1_ue_inst->f1ap_uid[i] = i; + f1_ue_inst->mac_uid[i] = UE_id; + LOG_I(F1AP, "Updating the index of UE with RNTI %x and du_ue_f1ap_id %d\n", f1_ue_inst->rnti[i], f1_ue_inst->du_ue_f1ap_id[i]); + return i; + } + } + for (i=0; i < MAX_MOBILES_PER_ENB ; i++){ + if (f1_ue_inst->rnti[i] == 0 ){ + f1_ue_inst->rnti[i]=rntiP; + f1_ue_inst->f1ap_uid[i]=i; + f1_ue_inst->mac_uid[i]=UE_id; + f1_ue_inst->du_ue_f1ap_id[i] = F1AP_get_UE_identifier(module_idP, CC_idP, i); + f1_ue_inst->cu_ue_f1ap_id[i] = F1AP_get_UE_identifier(module_idP, CC_idP, i); + f1_ue_inst->num_ues++; + LOG_I(F1AP, "Adding a new UE with RNTI %x and cu/du ue_f1ap_id %d\n", f1_ue_inst->rnti[i], f1_ue_inst->du_ue_f1ap_id[i]); + return i; + } + } + return -1; +} + + +int f1ap_remove_ue(f1ap_cudu_ue_inst_t *f1_ue_inst, + rnti_t rntiP){ + + int i; + for (i=0; i < MAX_MOBILES_PER_ENB; i++){ + if (f1_ue_inst->rnti[i] == rntiP) { + f1_ue_inst->rnti[i] = 0; + break; + } + } + return 0 ; +} + +int f1ap_get_du_ue_f1ap_id (f1ap_cudu_ue_inst_t *f1_ue_inst, + rnti_t rntiP){ + + int i; + for (i=0; i < MAX_MOBILES_PER_ENB; i++){ + if (f1_ue_inst->rnti[i] == rntiP) { + return f1_ue_inst->du_ue_f1ap_id[i]; + } + } + return -1; +} + +int f1ap_get_cu_ue_f1ap_id (f1ap_cudu_ue_inst_t *f1_ue_inst, + rnti_t rntiP){ + + int i; + for (i=0; i < MAX_MOBILES_PER_ENB; i++){ + if (f1_ue_inst->rnti[i] == rntiP) { + return f1_ue_inst->cu_ue_f1ap_id[i]; + } + } + return -1; +} + +int f1ap_get_rnti_by_du_id(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t du_ue_f1ap_id ){ + + int i; + for (i=0; i < MAX_MOBILES_PER_ENB; i++){ + if (f1_ue_inst->du_ue_f1ap_id[i] == du_ue_f1ap_id) { + return f1_ue_inst->rnti[i]; + } + } + return -1; +} + +int f1ap_get_rnti_by_cu_id(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t cu_ue_f1ap_id ){ + + int i; + for (i=0; i < MAX_MOBILES_PER_ENB; i++){ + if (f1_ue_inst->cu_ue_f1ap_id[i] == cu_ue_f1ap_id) { + return f1_ue_inst->rnti[i]; + } + } + return -1; +} + +int f1ap_get_du_uid(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t du_ue_f1ap_id ){ + + int i; + for (i=0; i < MAX_MOBILES_PER_ENB; i++){ + if (f1_ue_inst->du_ue_f1ap_id[i] == du_ue_f1ap_id) { + return i; + } + } + return -1; +} + + +int f1ap_get_cu_uid(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t cu_ue_f1ap_id ){ + + int i; + for (i=0; i < MAX_MOBILES_PER_ENB; i++){ + if (f1_ue_inst->cu_ue_f1ap_id[i] == cu_ue_f1ap_id) { + return i; + } + } + return -1; +} + +int f1ap_get_uid_by_rnti(f1ap_cudu_ue_inst_t *f1_ue_inst, + rnti_t rntiP ){ + + int i; + for (i=0; i < MAX_MOBILES_PER_ENB; i++){ + if (f1_ue_inst->rnti[i] == rntiP) { + return i; + } + } + return -1; +} + +int f1ap_du_add_cu_ue_id(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t du_ue_f1ap_id, + module_id_t cu_ue_f1ap_id){ + module_id_t f1ap_uid = f1ap_get_du_uid(f1_ue_inst,du_ue_f1ap_id); + if (f1ap_uid < 0 ) + return -1 ; + f1_ue_inst->cu_ue_f1ap_id[f1ap_uid]=cu_ue_f1ap_id; + LOG_I(F1AP, "Adding cu_ue_f1ap_id %d for UE with RNTI %x \n", cu_ue_f1ap_id, f1_ue_inst->rnti[f1ap_uid]); + return 0 ; +} + +int f1ap_cu_add_du_ue_id(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t cu_ue_f1ap_id, + module_id_t du_ue_f1ap_id){ + module_id_t f1ap_uid = f1ap_get_cu_uid(f1_ue_inst,cu_ue_f1ap_id); + if (f1ap_uid < 0 ) + return -1 ; + f1_ue_inst->du_ue_f1ap_id[f1ap_uid]=du_ue_f1ap_id; + LOG_I(F1AP, "Adding du_ue_f1ap_id %d for UE with RNTI %x \n", du_ue_f1ap_id, f1_ue_inst->rnti[f1ap_uid]); + return 0 ; } \ No newline at end of file diff --git a/openair2/F1AP/f1ap_common.h b/openair2/F1AP/f1ap_common.h index 384f261de2..8cd53fbef6 100644 --- a/openair2/F1AP/f1ap_common.h +++ b/openair2/F1AP/f1ap_common.h @@ -425,8 +425,67 @@ typedef int (*f1ap_message_decoded_callback)( F1AP_F1AP_PDU_t *message_p ); +// instance and module_id are assumed to be the same +typedef struct f1ap_cudu_ue_inst_s { + // used for eNB stats generation + rnti_t rnti[MAX_MOBILES_PER_ENB]; + module_id_t f1ap_uid[MAX_MOBILES_PER_ENB]; + module_id_t mac_uid[MAX_MOBILES_PER_ENB]; + module_id_t du_ue_f1ap_id[MAX_MOBILES_PER_ENB]; + module_id_t cu_ue_f1ap_id[MAX_MOBILES_PER_ENB]; + + + uint16_t num_ues; + +} f1ap_cudu_ue_inst_t; + + uint8_t F1AP_get_next_transaction_identifier(module_id_t enb_mod_idP, module_id_t cu_mod_idP); -uint8_t F1AP_get_UE_identifier(module_id_t enb_mod_idP, int CC_idP, int UE_id); +module_id_t F1AP_get_UE_identifier(module_id_t enb_mod_idP, int CC_idP, int UE_id); + + + +int f1ap_add_ue(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t module_idP, + int CC_idP, + int UE_id, + rnti_t rntiP); + +int f1ap_remove_ue(f1ap_cudu_ue_inst_t *f1_ue_inst, + rnti_t rntiP); + +int f1ap_get_du_ue_f1ap_id (f1ap_cudu_ue_inst_t *f1_ue_inst, + rnti_t rntiP); + +int f1ap_get_cu_ue_f1ap_id (f1ap_cudu_ue_inst_t *f1_ue_inst, + rnti_t rntiP); + + + +int f1ap_get_rnti_by_du_id(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t du_ue_f1ap_id ); + + +int f1ap_get_rnti_by_cu_id(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t cu_ue_f1ap_id ); + + +int f1ap_get_du_uid(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t du_ue_f1ap_id ); + +int f1ap_get_cu_uid(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t cu_ue_f1ap_id ); + +int f1ap_get_uid_by_rnti(f1ap_cudu_ue_inst_t *f1_ue_inst, + rnti_t rntiP ); + +int f1ap_du_add_cu_ue_id(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t du_ue_f1ap_id, + module_id_t cu_ue_f1ap_id); + +int f1ap_cu_add_du_ue_id(f1ap_cudu_ue_inst_t *f1_ue_inst, + module_id_t cu_ue_f1ap_id, + module_id_t du_ue_f1ap_id); #endif /* F1AP_COMMON_H_ */ diff --git a/openair2/F1AP/f1ap_cu_rrc_message_transfer.c b/openair2/F1AP/f1ap_cu_rrc_message_transfer.c index fad0ffc06e..802cd167a2 100644 --- a/openair2/F1AP/f1ap_cu_rrc_message_transfer.c +++ b/openair2/F1AP/f1ap_cu_rrc_message_transfer.c @@ -44,10 +44,15 @@ // a compile error #undef C_RNTI + // Bing Kai: create CU and DU context, and put all the information there. uint64_t du_ue_f1ap_id = 0; uint32_t f1ap_assoc_id = 0; uint32_t f1ap_stream = 0; + + +f1ap_cudu_ue_inst_t f1ap_cu_ue[MAX_eNB]; + /* Initial UL RRC Message Transfer */ @@ -132,6 +137,14 @@ int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance, } AssertFatal(rrc_inst>=0,"couldn't find an RRC instance for nr_cell %ll\n",nr_cellid); + int f1ap_uid = f1ap_add_ue(&f1ap_cu_ue[rrc_inst], rrc_inst, CC_id, 0, rnti); + if (f1ap_uid < 0 ) { + LOG_E(CU_F1AP, "Failed to add UE \n"); + return -1; + } + f1ap_cu_ue[rrc_inst].du_ue_f1ap_id[f1ap_uid] = du_ue_f1ap_id; + + RRC_MAC_CCCH_DATA_IND (message_p).frame = 0; RRC_MAC_CCCH_DATA_IND (message_p).sub_frame = 0; RRC_MAC_CCCH_DATA_IND (message_p).sdu_size = ccch_sdu_len; @@ -141,32 +154,6 @@ int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance, itti_send_msg_to_task (TASK_RRC_ENB, instance, message_p); - // OR creat the ctxt and srb_info struct required by rrc_eNB_decode_ccch -/* - PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, - instance, // to fix - ENB_FLAG_YES, - rnti, - 0, // frame - 0); // slot - - CC_id = RRC_MAC_CCCH_DATA_IND(msg_p).CC_id; - srb_info_p = &RC.rrc[instance]->carrier[CC_id].Srb0; - - if (ccch_sdu_len >= RRC_BUFFER_SIZE_MAX) { - LOG_E(RRC, "CCCH message has size %d > %d\n",ccch_sdu_len,RRC_BUFFER_SIZE_MAX); - break; - } - memcpy(srb_info_p->Rx_buffer.Payload, - ccch_sdu, - ccch_sdu_len); - srb_info->Rx_buffer.payload_size = ccch_sdu_len; - - rrc_eNB_decode_ccch(&ctxt, srb_info, CC_id); - */ - // if size > 0 - // CU_send_DL_RRC_MESSAGE_TRANSFER(C.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload, RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size) - return 0; } @@ -204,8 +191,11 @@ int CU_send_DL_RRC_MESSAGE_TRANSFER(instance_t instance, ie->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; ie->criticality = F1AP_Criticality_reject; ie->value.present = F1AP_DLRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID; - ie->value.choice.GNB_CU_UE_F1AP_ID = f1ap_dl_rrc->gNB_CU_ue_id; + ie->value.choice.GNB_CU_UE_F1AP_ID = f1ap_get_cu_ue_f1ap_id(&f1ap_cu_ue[instance],f1ap_dl_rrc->rnti); ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + LOG_I(CU_F1AP, "Setting GNB_CU_UE_F1AP_ID %d associated with UE RNTI %x (instance %d)\n", + ie->value.choice.GNB_CU_UE_F1AP_ID, f1ap_dl_rrc->rnti, instance); + /* mandatory */ /* c2. GNB_DU_UE_F1AP_ID */ @@ -213,8 +203,9 @@ int CU_send_DL_RRC_MESSAGE_TRANSFER(instance_t instance, ie->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; ie->criticality = F1AP_Criticality_reject; ie->value.present = F1AP_DLRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID; - ie->value.choice.GNB_DU_UE_F1AP_ID = f1ap_dl_rrc->gNB_DU_ue_id; // TODO: f1ap_dl_rrc->gNB_DU_ue_id + ie->value.choice.GNB_DU_UE_F1AP_ID = f1ap_get_du_ue_f1ap_id(&f1ap_cu_ue[instance],f1ap_dl_rrc->rnti); //f1ap_dl_rrc->gNB_DU_ue_id; // TODO: f1ap_dl_rrc->gNB_DU_ue_id ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); + LOG_I(CU_F1AP, "GNB_DU_UE_F1AP_ID %d associated with UE RNTI %x \n", ie->value.choice.GNB_DU_UE_F1AP_ID, f1ap_dl_rrc->rnti); /* optional */ /* c3. oldgNB_DU_UE_F1AP_ID */ @@ -326,14 +317,14 @@ int CU_handle_UL_RRC_MESSAGE_TRANSFER(instance_t instance, F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_ULRRCMessageTransferIEs_t, ie, container, F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, true); cu_ue_f1ap_id = ie->value.choice.GNB_CU_UE_F1AP_ID; - LOG_D(CU_F1AP, "cu_ue_f1ap_id %lu \n", cu_ue_f1ap_id); + LOG_D(CU_F1AP, "cu_ue_f1ap_id %lu associated with RNTI %x \n", cu_ue_f1ap_id, f1ap_get_rnti_by_cu_id(&f1ap_cu_ue[instance],cu_ue_f1ap_id)); /* GNB_DU_UE_F1AP_ID */ F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_ULRRCMessageTransferIEs_t, ie, container, F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true); du_ue_f1ap_id = ie->value.choice.GNB_DU_UE_F1AP_ID; - LOG_D(CU_F1AP, "du_ue_f1ap_id %lu \n", du_ue_f1ap_id); + LOG_D(CU_F1AP, "du_ue_f1ap_id %lu associated with RNTI %x \n", du_ue_f1ap_id, f1ap_get_rnti_by_cu_id(&f1ap_cu_ue[instance],du_ue_f1ap_id)); /* mandatory */ diff --git a/openair2/F1AP/f1ap_du_rrc_message_transfer.c b/openair2/F1AP/f1ap_du_rrc_message_transfer.c index 4a6f28e3dc..9149607e96 100644 --- a/openair2/F1AP/f1ap_du_rrc_message_transfer.c +++ b/openair2/F1AP/f1ap_du_rrc_message_transfer.c @@ -35,6 +35,7 @@ #include "f1ap_decoder.h" #include "f1ap_itti_messaging.h" #include "f1ap_du_rrc_message_transfer.h" + // undefine C_RNTI from // openair1/PHY/LTE_TRANSPORT/transport_common.h which // replaces in ie->value.choice.C_RNTI, causing @@ -43,6 +44,11 @@ extern f1ap_setup_req_t *f1ap_du_data; + +f1ap_cudu_ue_inst_t f1ap_du_ue[MAX_eNB]; + + + /* DL RRC Message Transfer */ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, uint32_t assoc_id, @@ -88,9 +94,13 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container, F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true); du_ue_f1ap_id = ie->value.choice.GNB_DU_UE_F1AP_ID; - LOG_D(DU_F1AP, "du_ue_f1ap_id %lu \n", du_ue_f1ap_id); - + LOG_D(DU_F1AP, "du_ue_f1ap_id %lu \n", du_ue_f1ap_id); // this should be the one transmitted via initial ul rrc message transfer + if (f1ap_du_add_cu_ue_id(&f1ap_du_ue[instance],du_ue_f1ap_id,cu_ue_f1ap_id) < 0 ) { + LOG_E(DU_F1AP, "Failed to find the F1AP UID \n"); + //return -1; + } + /* optional */ /* oldgNB_DU_UE_F1AP_ID */ if (0) { @@ -105,7 +115,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, srb_id = ie->value.choice.SRBID; LOG_D(DU_F1AP, "srb_id %lu \n", srb_id); - /* optional */ /* ExecuteDuplication */ if (0) { @@ -122,7 +131,7 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, F1AP_ProtocolIE_ID_id_RRCContainer, true); // BK: need check // create an ITTI message and copy SDU - message_p = itti_alloc_new_message (TASK_CU_F1, RRC_MAC_CCCH_DATA_IND); + message_p = itti_alloc_new_message (TASK_DU_F1, RRC_MAC_CCCH_DATA_IND); memset (RRC_MAC_CCCH_DATA_IND (message_p).sdu, 0, CCCH_SDU_SIZE); ccch_sdu_len = ie->value.choice.RRCContainer.size; memcpy(RRC_MAC_CCCH_DATA_IND (message_p).sdu, ie->value.choice.RRCContainer.buf, @@ -152,10 +161,10 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, } //void DU_send_UL_RRC_MESSAGE_TRANSFER(F1AP_ULRRCMessageTransfer_t *ULRRCMessageTransfer) { -int DU_send_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP, - int CC_idP, - uint8_t *sduP, - sdu_size_t sdu_lenP) { +int DU_send_UL_RRC_MESSAGE_TRANSFER(protocol_ctxt_t* ctxt_pP, + rb_id_t srb_idP, + uint8_t *sduP, + sdu_size_t sdu_lenP) { LOG_D(DU_F1AP, "DU_send_UL_RRC_MESSAGE_TRANSFER \n"); @@ -182,7 +191,7 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP, ie->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID; ie->criticality = F1AP_Criticality_reject; ie->value.present = F1AP_ULRRCMessageTransferIEs__value_PR_GNB_CU_UE_F1AP_ID; - ie->value.choice.GNB_CU_UE_F1AP_ID = 126L; + ie->value.choice.GNB_CU_UE_F1AP_ID = f1ap_du_ue[ctxt_pP->module_id].cu_ue_f1ap_id[f1ap_get_uid_by_rnti(&f1ap_du_ue[ctxt_pP->module_id], ctxt_pP->rnti)]; ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); /* mandatory */ @@ -191,7 +200,7 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP, ie->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; ie->criticality = F1AP_Criticality_reject; ie->value.present = F1AP_ULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID; - ie->value.choice.GNB_DU_UE_F1AP_ID = F1AP_get_UE_identifier(module_idP, CC_idP, 0); + ie->value.choice.GNB_DU_UE_F1AP_ID = f1ap_du_ue[ctxt_pP->module_id].du_ue_f1ap_id[f1ap_get_uid_by_rnti(&f1ap_du_ue[ctxt_pP->module_id], ctxt_pP->rnti)]; ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); /* mandatory */ @@ -200,7 +209,7 @@ int DU_send_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP, ie->id = F1AP_ProtocolIE_ID_id_SRBID; ie->criticality = F1AP_Criticality_reject; ie->value.present = F1AP_ULRRCMessageTransferIEs__value_PR_SRBID; - ie->value.choice.SRBID = 1; + ie->value.choice.SRBID = srb_idP; ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); // issue in here @@ -236,6 +245,12 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP, uint8_t *buffer; uint32_t len; + int f1ap_uid = f1ap_add_ue (&f1ap_du_ue[module_idP], module_idP, CC_idP,UE_id, rntiP); + + if (f1ap_uid < 0 ) { + LOG_E(DU_F1AP, "Failed to add UE \n"); + return -1; + } /* Create */ /* 0. Message Type */ @@ -254,7 +269,7 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP, ie->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID; ie->criticality = F1AP_Criticality_reject; ie->value.present = F1AP_InitialULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID; - ie->value.choice.GNB_DU_UE_F1AP_ID = F1AP_get_UE_identifier(module_idP, CC_idP, UE_id); + ie->value.choice.GNB_DU_UE_F1AP_ID = f1ap_du_ue[module_idP].du_ue_f1ap_id[f1ap_uid]; ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie); /* mandatory */ @@ -311,3 +326,11 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP, du_f1ap_itti_send_sctp_data_req(0, f1ap_du_data->assoc_id, buffer, len, 0); return 0; } + + +void init_f1ap_du_ue_inst (void) { + + memset(f1ap_du_ue, 0, sizeof(f1ap_du_ue)); +} + + diff --git a/openair2/F1AP/f1ap_du_rrc_message_transfer.h b/openair2/F1AP/f1ap_du_rrc_message_transfer.h index 87a94f651e..e0f2f8f71f 100644 --- a/openair2/F1AP/f1ap_du_rrc_message_transfer.h +++ b/openair2/F1AP/f1ap_du_rrc_message_transfer.h @@ -39,9 +39,9 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, uint32_t stream, F1AP_F1AP_PDU_t *pdu); -int DU_send_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP, - int CC_idP, - uint8_t *sduP, +int DU_send_UL_RRC_MESSAGE_TRANSFER(protocol_ctxt_t* ctxt_pP, + rb_id_t srb_idP, + uint8_t *sduP, sdu_size_t sdu_lenP); int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP, diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c index f07419d3ca..4f1b7f3d00 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c @@ -1135,7 +1135,7 @@ void pdcp_add_UE(const protocol_ctxt_t* const ctxt_pP){ pdcp_enb[ctxt_pP->module_id].rnti[i]=ctxt_pP->rnti; pdcp_enb[ctxt_pP->module_id].uid[i]=i; pdcp_enb[ctxt_pP->module_id].num_ues++; - printf("add new uid is %d %x\n\n", i, ctxt_pP->rnti); + LOG_I(PDCP,"add new uid is %d %x\n\n", i, ctxt_pP->rnti); // ret=1; break; } diff --git a/openair2/LAYER2/RLC/rlc.c b/openair2/LAYER2/RLC/rlc.c index 10a3e77aa0..d40fc99e13 100644 --- a/openair2/LAYER2/RLC/rlc.c +++ b/openair2/LAYER2/RLC/rlc.c @@ -707,7 +707,7 @@ void rlc_data_ind ( case ngran_eNB_DU : case ngran_gNB_DU : DU_send_UL_RRC_MESSAGE_TRANSFER( - ctxt_pP->module_id, + ctxt_pP, rb_idP, sdu_pP, sdu_sizeP diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index 8056177123..720c23ce9d 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -5771,10 +5771,11 @@ rrc_eNB_generate_RRCConnectionSetup( 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, UE_MODULE_ID_TO_INSTANCE(ctxt_pP->module_id), message_p); + itti_send_msg_to_task (TASK_CU_F1, ctxt_pP->module_id, message_p); LOG_D(RRC, "Send F1AP_DL_RRC_MESSAGE with ITTI\n"); break; case ngran_eNB_DU : -- GitLab