Better management of cu/du ue ids
Fix for some variables
This commit is contained in:
@@ -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;
|
||||
|
||||
+153
-2
@@ -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 ;
|
||||
}
|
||||
@@ -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_ */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 :
|
||||
|
||||
Reference in New Issue
Block a user