Handle DL\UL RRC MESSAGE TRANSFER at f1ap_handlers
This commit is contained in:
@@ -246,16 +246,7 @@ int CU_send_DL_RRC_MESSAGE_TRANSFER(instance_t instance) {
|
|||||||
printf("Failed to encode F1 setup request\n");
|
printf("Failed to encode F1 setup request\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
/* decode */
|
|
||||||
if (f1ap_decode_pdu(&pdu, buffer, len) > 0) {
|
|
||||||
printf("Failed to decode F1 setup request\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -266,5 +257,71 @@ int CU_handle_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
|||||||
uint32_t assoc_id,
|
uint32_t assoc_id,
|
||||||
uint32_t stream,
|
uint32_t stream,
|
||||||
F1AP_F1AP_PDU_t *pdu) {
|
F1AP_F1AP_PDU_t *pdu) {
|
||||||
AssertFatal(1==0,"Not implemented yet\n");
|
|
||||||
|
printf("CU_handle_UL_RRC_MESSAGE_TRANSFER \n");
|
||||||
|
|
||||||
|
MessageDef *message_p;
|
||||||
|
F1AP_ULRRCMessageTransfer_t *container;
|
||||||
|
F1AP_ULRRCMessageTransferIEs_t *ie;
|
||||||
|
|
||||||
|
uint8_t *buffer;
|
||||||
|
uint32_t len;
|
||||||
|
|
||||||
|
uint64_t cu_ue_f1ap_id;
|
||||||
|
uint64_t du_ue_f1ap_id;
|
||||||
|
uint64_t srb_id;
|
||||||
|
int executeDuplication;
|
||||||
|
sdu_size_t ccch_sdu_len;
|
||||||
|
uint64_t subscriberProfileIDforRFP;
|
||||||
|
uint64_t rAT_FrequencySelectionPriority;
|
||||||
|
|
||||||
|
DevAssert(pdu != NULL);
|
||||||
|
|
||||||
|
if (stream != 0) {
|
||||||
|
LOG_E(F1AP, "[SCTP %d] Received F1 on stream != 0 (%d)\n",
|
||||||
|
assoc_id, stream);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
container = &pdu->choice.initiatingMessage->value.choice.ULRRCMessageTransfer;
|
||||||
|
|
||||||
|
|
||||||
|
/* GNB_CU_UE_F1AP_ID */
|
||||||
|
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;
|
||||||
|
printf("cu_ue_f1ap_id %lu \n", 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;
|
||||||
|
printf("du_ue_f1ap_id %lu \n", du_ue_f1ap_id);
|
||||||
|
|
||||||
|
|
||||||
|
/* mandatory */
|
||||||
|
/* SRBID */
|
||||||
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_ULRRCMessageTransferIEs_t, ie, container,
|
||||||
|
F1AP_ProtocolIE_ID_id_SRBID, true);
|
||||||
|
srb_id = ie->value.choice.SRBID;
|
||||||
|
printf("srb_id %lu \n", srb_id);
|
||||||
|
|
||||||
|
|
||||||
|
// issue in here
|
||||||
|
/* mandatory */
|
||||||
|
/* RRC Container */
|
||||||
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_ULRRCMessageTransferIEs_t, ie, container,
|
||||||
|
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);
|
||||||
|
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,
|
||||||
|
ccch_sdu_len);
|
||||||
|
printf ("RRCContainer(CCCH) :");
|
||||||
|
for (int i=0;i<ie->value.choice.RRCContainer.size;i++) printf("%2x ",RRC_MAC_CCCH_DATA_IND (message_p).sdu[i]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,14 +42,25 @@ static int f1ap_decode_initiating_message(F1AP_F1AP_PDU_t *pdu)
|
|||||||
|
|
||||||
switch(pdu->choice.initiatingMessage->procedureCode) {
|
switch(pdu->choice.initiatingMessage->procedureCode) {
|
||||||
|
|
||||||
case F1AP_ProcedureCode_id_F1Setup:
|
case F1AP_ProcedureCode_id_F1Setup:
|
||||||
res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
|
res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
|
||||||
printf("f1ap_eNB_decode_initiating_message!\n");
|
printf("f1ap_eNB_decode_initiating_message!\n");
|
||||||
break;
|
break;
|
||||||
case F1AP_ProcedureCode_id_InitialULRRCMessageTransfer:
|
|
||||||
res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
|
case F1AP_ProcedureCode_id_InitialULRRCMessageTransfer:
|
||||||
printf("f1ap_eNB_decode_initiating_message!\n");
|
res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
|
||||||
break;
|
printf("f1ap_eNB_decode_initiating_message!\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case F1AP_ProcedureCode_id_DLRRCMessageTransfer:
|
||||||
|
res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
|
||||||
|
printf("f1ap_eNB_decode_initiating_message!\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case F1AP_ProcedureCode_id_ULRRCMessageTransfer:
|
||||||
|
res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
|
||||||
|
printf("f1ap_eNB_decode_initiating_message!\n");
|
||||||
|
break;
|
||||||
// case F1AP_ProcedureCode_id_InitialContextSetup:
|
// case F1AP_ProcedureCode_id_InitialContextSetup:
|
||||||
// res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
|
// res = asn_encode_to_new_buffer(NULL, ATS_CANONICAL_XER, &asn_DEF_F1AP_F1AP_PDU, pdu);
|
||||||
// message_id = F1AP_INITIAL_CONTEXT_SETUP_LOG;
|
// message_id = F1AP_INITIAL_CONTEXT_SETUP_LOG;
|
||||||
|
|||||||
@@ -48,7 +48,107 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
|||||||
uint32_t assoc_id,
|
uint32_t assoc_id,
|
||||||
uint32_t stream,
|
uint32_t stream,
|
||||||
F1AP_F1AP_PDU_t *pdu) {
|
F1AP_F1AP_PDU_t *pdu) {
|
||||||
AssertFatal(1==0,"Not implemented yet\n");
|
|
||||||
|
printf("DU_handle_DL_RRC_MESSAGE_TRANSFER \n");
|
||||||
|
|
||||||
|
MessageDef *message_p;
|
||||||
|
F1AP_DLRRCMessageTransfer_t *container;
|
||||||
|
F1AP_DLRRCMessageTransferIEs_t *ie;
|
||||||
|
|
||||||
|
uint8_t *buffer;
|
||||||
|
uint32_t len;
|
||||||
|
|
||||||
|
uint64_t cu_ue_f1ap_id;
|
||||||
|
uint64_t du_ue_f1ap_id;
|
||||||
|
uint64_t srb_id;
|
||||||
|
int executeDuplication;
|
||||||
|
sdu_size_t ccch_sdu_len;
|
||||||
|
uint64_t subscriberProfileIDforRFP;
|
||||||
|
uint64_t rAT_FrequencySelectionPriority;
|
||||||
|
|
||||||
|
DevAssert(pdu != NULL);
|
||||||
|
|
||||||
|
if (stream != 0) {
|
||||||
|
LOG_E(F1AP, "[SCTP %d] Received F1 on stream != 0 (%d)\n",
|
||||||
|
assoc_id, stream);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
container = &pdu->choice.initiatingMessage->value.choice.DLRRCMessageTransfer;
|
||||||
|
|
||||||
|
|
||||||
|
/* GNB_CU_UE_F1AP_ID */
|
||||||
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_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;
|
||||||
|
printf("cu_ue_f1ap_id %lu \n", cu_ue_f1ap_id);
|
||||||
|
|
||||||
|
|
||||||
|
/* GNB_DU_UE_F1AP_ID */
|
||||||
|
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;
|
||||||
|
printf("du_ue_f1ap_id %lu \n", du_ue_f1ap_id);
|
||||||
|
|
||||||
|
|
||||||
|
/* optional */
|
||||||
|
/* oldgNB_DU_UE_F1AP_ID */
|
||||||
|
if (0) {
|
||||||
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
|
||||||
|
F1AP_ProtocolIE_ID_id_oldgNB_DU_UE_F1AP_ID, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* mandatory */
|
||||||
|
/* SRBID */
|
||||||
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
|
||||||
|
F1AP_ProtocolIE_ID_id_SRBID, true);
|
||||||
|
srb_id = ie->value.choice.SRBID;
|
||||||
|
printf("srb_id %lu \n", srb_id);
|
||||||
|
|
||||||
|
|
||||||
|
/* optional */
|
||||||
|
/* ExecuteDuplication */
|
||||||
|
if (0) {
|
||||||
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
|
||||||
|
F1AP_ProtocolIE_ID_id_ExecuteDuplication, true);
|
||||||
|
executeDuplication = ie->value.choice.ExecuteDuplication;
|
||||||
|
printf("ExecuteDuplication %d \n", executeDuplication);
|
||||||
|
}
|
||||||
|
|
||||||
|
// issue in here
|
||||||
|
/* mandatory */
|
||||||
|
/* RRC Container */
|
||||||
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
|
||||||
|
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);
|
||||||
|
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,
|
||||||
|
ccch_sdu_len);
|
||||||
|
printf ("RRCContainer(CCCH) :");
|
||||||
|
for (int i=0;i<ie->value.choice.RRCContainer.size;i++) printf("%2x ",RRC_MAC_CCCH_DATA_IND (message_p).sdu[i]);
|
||||||
|
|
||||||
|
|
||||||
|
/* optional */
|
||||||
|
/* RAT_FrequencyPriorityInformation */
|
||||||
|
if (0) {
|
||||||
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
|
||||||
|
F1AP_ProtocolIE_ID_id_RAT_FrequencyPriorityInformation, true);
|
||||||
|
|
||||||
|
switch(ie->value.choice.RAT_FrequencyPriorityInformation.present) {
|
||||||
|
case F1AP_RAT_FrequencyPriorityInformation_PR_subscriberProfileIDforRFP:
|
||||||
|
subscriberProfileIDforRFP = ie->value.choice.RAT_FrequencyPriorityInformation.choice.subscriberProfileIDforRFP;
|
||||||
|
break;
|
||||||
|
case F1AP_RAT_FrequencyPriorityInformation_PR_rAT_FrequencySelectionPriority:
|
||||||
|
rAT_FrequencySelectionPriority = ie->value.choice.RAT_FrequencyPriorityInformation.choice.rAT_FrequencySelectionPriority;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//void DU_send_UL_RRC_MESSAGE_TRANSFER(F1AP_ULRRCMessageTransfer_t *ULRRCMessageTransfer) {
|
//void DU_send_UL_RRC_MESSAGE_TRANSFER(F1AP_ULRRCMessageTransfer_t *ULRRCMessageTransfer) {
|
||||||
@@ -207,20 +307,12 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(
|
|||||||
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* encode */
|
/* encode */
|
||||||
if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
||||||
printf("Failed to encode F1 setup request\n");
|
printf("Failed to encode F1 setup request\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
du_f1ap_itti_send_sctp_data_req(0, f1ap_du_data->assoc_id, buffer, len, 0);
|
du_f1ap_itti_send_sctp_data_req(0, f1ap_du_data->assoc_id, buffer, len, 0);
|
||||||
return 0;
|
return 0;
|
||||||
/* decode */
|
|
||||||
// if (f1ap_decode_pdu(&pdu, buffer, len) > 0) {
|
|
||||||
// printf("Failed to decode F1 setup request\n");
|
|
||||||
// }
|
|
||||||
//AssertFatal(1==0,"Not implemented yet\n");
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
#include "f1ap_cu_interface_management.h"
|
#include "f1ap_cu_interface_management.h"
|
||||||
#include "f1ap_du_interface_management.h"
|
#include "f1ap_du_interface_management.h"
|
||||||
#include "f1ap_cu_rrc_message_transfer.h"
|
#include "f1ap_cu_rrc_message_transfer.h"
|
||||||
|
#include "f1ap_du_rrc_message_transfer.h"
|
||||||
|
|
||||||
extern f1ap_setup_req_t *f1ap_du_data_from_du;
|
extern f1ap_setup_req_t *f1ap_du_data_from_du;
|
||||||
|
|
||||||
@@ -55,8 +56,8 @@ f1ap_message_decoded_callback f1ap_messages_callback[][3] = {
|
|||||||
{ 0, 0, 0 }, /* UEMobilityCommand */
|
{ 0, 0, 0 }, /* UEMobilityCommand */
|
||||||
{ 0, 0, 0 }, /* UEContextReleaseRequest */
|
{ 0, 0, 0 }, /* UEContextReleaseRequest */
|
||||||
{ CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER, 0, 0 }, /* InitialULRRCMessageTransfer */
|
{ CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER, 0, 0 }, /* InitialULRRCMessageTransfer */
|
||||||
{ 0, 0, 0 }, /* DLRRCMessageTransfer */
|
{ DU_handle_DL_RRC_MESSAGE_TRANSFER, 0, 0 }, /* DLRRCMessageTransfer */
|
||||||
{ 0, 0, 0 }, /* ULRRCMessageTransfer */
|
{ CU_handle_UL_RRC_MESSAGE_TRANSFER, 0, 0 }, /* ULRRCMessageTransfer */
|
||||||
{ 0, 0, 0 }, /* privateMessage */
|
{ 0, 0, 0 }, /* privateMessage */
|
||||||
{ 0, 0, 0 }, /* UEInactivityNotification */
|
{ 0, 0, 0 }, /* UEInactivityNotification */
|
||||||
{ 0, 0, 0 }, /* GNBDUResourceCoordination */
|
{ 0, 0, 0 }, /* GNBDUResourceCoordination */
|
||||||
|
|||||||
Reference in New Issue
Block a user