Use F1AP gNB-CU Configuration Update lib in stack
This commit is contained in:
@@ -189,99 +189,27 @@ int CU_send_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
gNB-CU Configuration Update
|
* @brief F1 gNB-CU Configuration Update message encoding and transfer
|
||||||
*/
|
*/
|
||||||
|
int CU_send_gNB_CU_CONFIGURATION_UPDATE(sctp_assoc_t assoc_id, f1ap_gnb_cu_configuration_update_t *msg)
|
||||||
int CU_send_gNB_CU_CONFIGURATION_UPDATE(sctp_assoc_t assoc_id, f1ap_gnb_cu_configuration_update_t *f1ap_gnb_cu_configuration_update)
|
|
||||||
{
|
{
|
||||||
F1AP_F1AP_PDU_t pdu= {0};
|
/* complete F1AP message */
|
||||||
|
msg->transaction_id = F1AP_get_next_transaction_identifier(0, 0); // note: has to be done in the caller
|
||||||
uint8_t *buffer;
|
uint8_t *buffer;
|
||||||
uint32_t len;
|
uint32_t len;
|
||||||
/* Create */
|
/* Encode F1 gNB-CU Configuration Update message */
|
||||||
/* 0. Message Type */
|
F1AP_F1AP_PDU_t *pdu = encode_f1ap_cu_configuration_update(msg);
|
||||||
pdu.present = F1AP_F1AP_PDU_PR_initiatingMessage;
|
/* Free after encoding */
|
||||||
asn1cCalloc(pdu.choice.initiatingMessage, initMsg);
|
free_f1ap_cu_configuration_update(msg);
|
||||||
initMsg->procedureCode = F1AP_ProcedureCode_id_gNBCUConfigurationUpdate;
|
/* Encode F1AP PDU */
|
||||||
initMsg->criticality = F1AP_Criticality_reject;
|
if (f1ap_encode_pdu(pdu, &buffer, &len) < 0) {
|
||||||
initMsg->value.present = F1AP_InitiatingMessage__value_PR_GNBCUConfigurationUpdate;
|
ASN_STRUCT_FREE(asn_DEF_F1AP_F1AP_PDU, pdu);
|
||||||
F1AP_GNBCUConfigurationUpdate_t *cfgUpdate = &pdu.choice.initiatingMessage->value.choice.GNBCUConfigurationUpdate;
|
LOG_E(F1AP, "Failed to encode F1 gNB-CU Configuration Update\n");
|
||||||
/* mandatory */
|
|
||||||
/* c1. Transaction ID (integer value) */
|
|
||||||
asn1cSequenceAdd(cfgUpdate->protocolIEs.list, F1AP_GNBCUConfigurationUpdateIEs_t, ieC1);
|
|
||||||
ieC1->id = F1AP_ProtocolIE_ID_id_TransactionID;
|
|
||||||
ieC1->criticality = F1AP_Criticality_reject;
|
|
||||||
ieC1->value.present = F1AP_GNBCUConfigurationUpdateIEs__value_PR_TransactionID;
|
|
||||||
ieC1->value.choice.TransactionID = F1AP_get_next_transaction_identifier(0, 0);
|
|
||||||
|
|
||||||
// mandatory
|
|
||||||
// c2. Cells_to_be_Activated_List
|
|
||||||
if (f1ap_gnb_cu_configuration_update->num_cells_to_activate > 0) {
|
|
||||||
asn1cSequenceAdd(cfgUpdate->protocolIEs.list, F1AP_GNBCUConfigurationUpdateIEs_t, ieC3);
|
|
||||||
ieC3->id = F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List;
|
|
||||||
ieC3->criticality = F1AP_Criticality_reject;
|
|
||||||
ieC3->value.present = F1AP_GNBCUConfigurationUpdateIEs__value_PR_Cells_to_be_Activated_List;
|
|
||||||
|
|
||||||
for (int i=0; i<f1ap_gnb_cu_configuration_update->num_cells_to_activate; i++) {
|
|
||||||
asn1cSequenceAdd(ieC3->value.choice.Cells_to_be_Activated_List.list,F1AP_Cells_to_be_Activated_List_ItemIEs_t,
|
|
||||||
cells_to_be_activated_ies);
|
|
||||||
cells_to_be_activated_ies->id = F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item;
|
|
||||||
cells_to_be_activated_ies->criticality = F1AP_Criticality_reject;
|
|
||||||
cells_to_be_activated_ies->value.present = F1AP_Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item;
|
|
||||||
// 2.1 cells to be Activated list item
|
|
||||||
F1AP_Cells_to_be_Activated_List_Item_t *cells_to_be_activated_list_item=
|
|
||||||
&cells_to_be_activated_ies->value.choice.Cells_to_be_Activated_List_Item;
|
|
||||||
// - nRCGI
|
|
||||||
addnRCGI(cells_to_be_activated_list_item->nRCGI, f1ap_gnb_cu_configuration_update->cells_to_activate+i);
|
|
||||||
// optional
|
|
||||||
// -nRPCI
|
|
||||||
asn1cCalloc(cells_to_be_activated_list_item->nRPCI, tmp);
|
|
||||||
*tmp = f1ap_gnb_cu_configuration_update->cells_to_activate[i].nrpci; // int 0..1007
|
|
||||||
// optional
|
|
||||||
// 3.1.2 gNB-CUSystem Information
|
|
||||||
F1AP_ProtocolExtensionContainer_10696P112_t *p = calloc(1,sizeof(*p));
|
|
||||||
cells_to_be_activated_list_item->iE_Extensions = (struct F1AP_ProtocolExtensionContainer *) p;
|
|
||||||
//F1AP_ProtocolExtensionContainer_154P112_t
|
|
||||||
asn1cSequenceAdd(p->list, F1AP_Cells_to_be_Activated_List_ItemExtIEs_t, cells_to_be_activated_itemExtIEs);
|
|
||||||
cells_to_be_activated_itemExtIEs->id = F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation;
|
|
||||||
cells_to_be_activated_itemExtIEs->criticality = F1AP_Criticality_reject;
|
|
||||||
cells_to_be_activated_itemExtIEs->extensionValue.present = F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_GNB_CUSystemInformation;
|
|
||||||
|
|
||||||
if (f1ap_gnb_cu_configuration_update->cells_to_activate[i].num_SI > 0) {
|
|
||||||
F1AP_GNB_CUSystemInformation_t *gNB_CUSystemInformation =
|
|
||||||
&cells_to_be_activated_itemExtIEs->extensionValue.choice.GNB_CUSystemInformation;
|
|
||||||
//LOG_I(F1AP, "%s() SI %d size %d: ", __func__, i, f1ap_setup_resp->SI_container_length[i][0]);
|
|
||||||
//for (int n = 0; n < f1ap_setup_resp->SI_container_length[i][0]; n++)
|
|
||||||
// printf("%02x ", f1ap_setup_resp->SI_container[i][0][n]);
|
|
||||||
//printf("\n");
|
|
||||||
|
|
||||||
// for (int sIBtype=2;sIBtype<33;sIBtype++) { //21 ? 33 ?
|
|
||||||
for (int j = 0; j < sizeofArray(f1ap_gnb_cu_configuration_update->cells_to_activate[i].SI_msg); j++) {
|
|
||||||
f1ap_sib_msg_t *SI_msg = &f1ap_gnb_cu_configuration_update->cells_to_activate[i].SI_msg[j];
|
|
||||||
if (SI_msg->SI_container != NULL) {
|
|
||||||
asn1cSequenceAdd(gNB_CUSystemInformation->sibtypetobeupdatedlist.list, F1AP_SibtypetobeupdatedListItem_t, sib_item);
|
|
||||||
sib_item->sIBtype = SI_msg->SI_type;
|
|
||||||
AssertFatal(sib_item->sIBtype < 6 || sib_item->sIBtype == 9, "Illegal SI type %ld\n", sib_item->sIBtype);
|
|
||||||
OCTET_STRING_fromBuf(&sib_item->sIBmessage, (const char *)SI_msg->SI_container, SI_msg->SI_container_length);
|
|
||||||
LOG_D(F1AP,
|
|
||||||
"f1ap_gnb_cu_configuration_update->SI_container_length[%d][sIBtype %ld] = %d \n",
|
|
||||||
i,
|
|
||||||
sib_item->sIBtype,
|
|
||||||
SI_msg->SI_container_length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* encode */
|
|
||||||
if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
|
||||||
LOG_E(F1AP, "Failed to encode F1 gNB-CU CONFIGURATION UPDATE\n");
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DUMPMSG(F1AP, LOG_DUMP_CHAR, buffer, len, "F1AP gNB-CU CONFIGURATION UPDATE : ");
|
LOG_DUMPMSG(F1AP, LOG_DUMP_CHAR, buffer, len, "F1AP gNB-CU CONFIGURATION UPDATE : ");
|
||||||
ASN_STRUCT_RESET(asn_DEF_F1AP_F1AP_PDU, &pdu);
|
ASN_STRUCT_FREE(asn_DEF_F1AP_F1AP_PDU, pdu);
|
||||||
f1ap_itti_send_sctp_data_req(assoc_id, buffer, len);
|
f1ap_itti_send_sctp_data_req(assoc_id, buffer, len);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -225,148 +225,21 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(sctp_assoc_t assoc_id, f1ap_gnb_du_confi
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief F1 gNB-CU Configuration Update decoding and message transfer
|
||||||
|
*/
|
||||||
int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu)
|
int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu)
|
||||||
{
|
{
|
||||||
LOG_D(F1AP, "DU_handle_gNB_CU_CONFIGURATION_UPDATE\n");
|
LOG_D(F1AP, "DU_handle_gNB_CU_CONFIGURATION_UPDATE\n");
|
||||||
AssertFatal(pdu->present == F1AP_F1AP_PDU_PR_initiatingMessage,
|
f1ap_gnb_cu_configuration_update_t in = {0};
|
||||||
"pdu->present != F1AP_F1AP_PDU_PR_initiatingMessage\n");
|
if (!decode_f1ap_cu_configuration_update(pdu, &in)) {
|
||||||
AssertFatal(pdu->choice.initiatingMessage->procedureCode == F1AP_ProcedureCode_id_gNBCUConfigurationUpdate,
|
LOG_E(F1AP, "Failed to decode F1AP Setup Failure\n");
|
||||||
"pdu->choice.initiatingMessage->procedureCode != F1AP_ProcedureCode_id_gNBCUConfigurationUpdate\n");
|
free_f1ap_cu_configuration_update(&in);
|
||||||
AssertFatal(pdu->choice.initiatingMessage->criticality == F1AP_Criticality_reject,
|
return -1;
|
||||||
"pdu->choice.initiatingMessage->criticality != F1AP_Criticality_reject\n");
|
}
|
||||||
AssertFatal(pdu->choice.initiatingMessage->value.present == F1AP_InitiatingMessage__value_PR_GNBCUConfigurationUpdate,
|
|
||||||
"pdu->choice.initiatingMessage->value.present != F1AP_InitiatingMessage__value_PR_GNBCUConfigurationUpdate\n");
|
|
||||||
F1AP_GNBCUConfigurationUpdate_t *in = &pdu->choice.initiatingMessage->value.choice.GNBCUConfigurationUpdate;
|
|
||||||
F1AP_GNBCUConfigurationUpdateIEs_t *ie;
|
|
||||||
int TransactionId = -1;
|
|
||||||
int num_cells_to_activate = 0;
|
|
||||||
F1AP_Cells_to_be_Activated_List_Item_t *cell;
|
|
||||||
MessageDef *msg_p = itti_alloc_new_message (TASK_DU_F1, 0, F1AP_GNB_CU_CONFIGURATION_UPDATE);
|
MessageDef *msg_p = itti_alloc_new_message (TASK_DU_F1, 0, F1AP_GNB_CU_CONFIGURATION_UPDATE);
|
||||||
LOG_D(F1AP, "F1AP: gNB_CU_Configuration_Update: protocolIEs.list.count %d\n",
|
f1ap_gnb_cu_configuration_update_t *msg = &F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p); // RRC thread will free it
|
||||||
in->protocolIEs.list.count);
|
*msg = in; // copy F1 message to ITTI
|
||||||
|
|
||||||
for (int i=0; i < in->protocolIEs.list.count; i++) {
|
|
||||||
ie = in->protocolIEs.list.array[i];
|
|
||||||
|
|
||||||
switch (ie->id) {
|
|
||||||
case F1AP_ProtocolIE_ID_id_TransactionID:
|
|
||||||
AssertFatal(ie->criticality == F1AP_Criticality_reject,
|
|
||||||
"ie->criticality != F1AP_Criticality_reject\n");
|
|
||||||
AssertFatal(ie->value.present == F1AP_GNBCUConfigurationUpdateIEs__value_PR_TransactionID,
|
|
||||||
"ie->value.present != F1AP_GNBCUConfigurationUpdateIEs__value_PR_TransactionID\n");
|
|
||||||
TransactionId=ie->value.choice.TransactionID;
|
|
||||||
LOG_D(F1AP, "F1AP: GNB-CU-ConfigurationUpdate: TransactionId %d\n",
|
|
||||||
TransactionId);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List: {
|
|
||||||
AssertFatal(ie->criticality == F1AP_Criticality_reject,
|
|
||||||
"ie->criticality != F1AP_Criticality_reject\n");
|
|
||||||
AssertFatal(ie->value.present == F1AP_GNBCUConfigurationUpdateIEs__value_PR_Cells_to_be_Activated_List,
|
|
||||||
"ie->value.present != F1AP_GNBCUConfigurationUpdateIEs__value_PR_Cells_to_be_Activated_List\n");
|
|
||||||
num_cells_to_activate = ie->value.choice.Cells_to_be_Activated_List.list.count;
|
|
||||||
LOG_D(F1AP, "F1AP: Activating %d cells\n",num_cells_to_activate);
|
|
||||||
|
|
||||||
for (int i=0; i<num_cells_to_activate; i++) {
|
|
||||||
F1AP_Cells_to_be_Activated_List_ItemIEs_t *cells_to_be_activated_list_item_ies = (F1AP_Cells_to_be_Activated_List_ItemIEs_t *) ie->value.choice.Cells_to_be_Activated_List.list.array[i];
|
|
||||||
AssertFatal(cells_to_be_activated_list_item_ies->id == F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item,
|
|
||||||
"cells_to_be_activated_list_item_ies->id != F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item");
|
|
||||||
AssertFatal(cells_to_be_activated_list_item_ies->criticality == F1AP_Criticality_reject,
|
|
||||||
"cells_to_be_activated_list_item_ies->criticality == F1AP_Criticality_reject");
|
|
||||||
AssertFatal(cells_to_be_activated_list_item_ies->value.present == F1AP_Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item,
|
|
||||||
"cells_to_be_activated_list_item_ies->value.present == F1AP_Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item");
|
|
||||||
cell = &cells_to_be_activated_list_item_ies->value.choice.Cells_to_be_Activated_List_Item;
|
|
||||||
TBCD_TO_MCC_MNC(&cell->nRCGI.pLMN_Identity,
|
|
||||||
F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p).cells_to_activate[i].plmn.mcc,
|
|
||||||
F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p).cells_to_activate[i].plmn.mnc,
|
|
||||||
F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p).cells_to_activate[i].plmn.mnc_digit_length);
|
|
||||||
LOG_D(F1AP, "nr_cellId : %x %x %x %x %x\n",
|
|
||||||
cell->nRCGI.nRCellIdentity.buf[0],
|
|
||||||
cell->nRCGI.nRCellIdentity.buf[1],
|
|
||||||
cell->nRCGI.nRCellIdentity.buf[2],
|
|
||||||
cell->nRCGI.nRCellIdentity.buf[3],
|
|
||||||
cell->nRCGI.nRCellIdentity.buf[4]);
|
|
||||||
BIT_STRING_TO_NR_CELL_IDENTITY(&cell->nRCGI.nRCellIdentity,
|
|
||||||
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p).cells_to_activate[i].nr_cellid);
|
|
||||||
F1AP_ProtocolExtensionContainer_10696P112_t *ext = (F1AP_ProtocolExtensionContainer_10696P112_t *)cell->iE_Extensions;
|
|
||||||
|
|
||||||
if (ext==NULL)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
for (int cnt=0; cnt<ext->list.count; cnt++) {
|
|
||||||
F1AP_Cells_to_be_Activated_List_ItemExtIEs_t *cells_to_be_activated_list_itemExtIEs=(F1AP_Cells_to_be_Activated_List_ItemExtIEs_t *)ext->list.array[cnt];
|
|
||||||
|
|
||||||
switch (cells_to_be_activated_list_itemExtIEs->id) {
|
|
||||||
/*
|
|
||||||
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_NOTHING:
|
|
||||||
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_GNB_CUSystemInformation,
|
|
||||||
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_AvailablePLMNList,
|
|
||||||
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_ExtendedAvailablePLMN_List,
|
|
||||||
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_IAB_Info_IAB_donor_CU,
|
|
||||||
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_AvailableSNPN_ID_List
|
|
||||||
*/
|
|
||||||
case F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation: {
|
|
||||||
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p).cells_to_activate[i].nrpci = (cell->nRPCI != NULL) ? *cell->nRPCI : 0;
|
|
||||||
F1AP_GNB_CUSystemInformation_t *gNB_CUSystemInformation = (F1AP_GNB_CUSystemInformation_t *)&cells_to_be_activated_list_itemExtIEs->extensionValue.choice.GNB_CUSystemInformation;
|
|
||||||
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p).cells_to_activate[i].num_SI = gNB_CUSystemInformation->sibtypetobeupdatedlist.list.count;
|
|
||||||
AssertFatal(ext->list.count==1,"At least one SI message should be there, and only 1 for now!\n");
|
|
||||||
LOG_D(F1AP,
|
|
||||||
"F1AP: Cell %d MCC %d MNC %d NRCellid %lx num_si %d\n",
|
|
||||||
i,
|
|
||||||
F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p).cells_to_activate[i].plmn.mcc,
|
|
||||||
F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p).cells_to_activate[i].plmn.mnc,
|
|
||||||
F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p).cells_to_activate[i].nr_cellid,
|
|
||||||
F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p).cells_to_activate[i].num_SI);
|
|
||||||
|
|
||||||
for (int si = 0; si < gNB_CUSystemInformation->sibtypetobeupdatedlist.list.count; si++) {
|
|
||||||
F1AP_SibtypetobeupdatedListItem_t *sib_item = gNB_CUSystemInformation->sibtypetobeupdatedlist.list.array[si];
|
|
||||||
size_t size = sib_item->sIBmessage.size;
|
|
||||||
f1ap_sib_msg_t *SI_msg = &F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p).cells_to_activate[i].SI_msg[si];
|
|
||||||
SI_msg->SI_container_length = size;
|
|
||||||
LOG_D(F1AP, "F1AP: SI_container_length[%d][%ld] %ld bytes\n", i, sib_item->sIBtype, size);
|
|
||||||
SI_msg->SI_container = malloc(SI_msg->SI_container_length);
|
|
||||||
memcpy((void *)SI_msg->SI_container, (void *)sib_item->sIBmessage.buf, size);
|
|
||||||
SI_msg->SI_type = sib_item->sIBtype;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case F1AP_ProtocolIE_ID_id_AvailablePLMNList:
|
|
||||||
AssertFatal(1==0,"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet\n");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case F1AP_ProtocolIE_ID_id_ExtendedAvailablePLMN_List:
|
|
||||||
AssertFatal(1==0,"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet\n");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case F1AP_ProtocolIE_ID_id_IAB_Info_IAB_donor_CU:
|
|
||||||
AssertFatal(1==0,"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet\n");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case F1AP_ProtocolIE_ID_id_AvailableSNPN_ID_List:
|
|
||||||
AssertFatal(1==0,"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet\n");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
AssertFatal(1==0,"F1AP_ProtocolIE_ID_id %d unknown\n",(int)cells_to_be_activated_list_itemExtIEs->id);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} // for (cnt=...
|
|
||||||
} // for (cells_to_activate...
|
|
||||||
|
|
||||||
break;
|
|
||||||
} // case F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List
|
|
||||||
|
|
||||||
default:
|
|
||||||
AssertFatal(1==0,"F1AP_ProtocolIE_ID_id %d unknown\n", (int)ie->id);
|
|
||||||
break;
|
|
||||||
} // switch ie
|
|
||||||
} // for IE
|
|
||||||
|
|
||||||
AssertFatal(TransactionId!=-1,"TransactionId was not sent\n");
|
|
||||||
LOG_D(F1AP,"F1AP: num_cells_to_activate %d\n",num_cells_to_activate);
|
|
||||||
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p).num_cells_to_activate = num_cells_to_activate;
|
|
||||||
LOG_D(F1AP, "Sending F1AP_GNB_CU_CONFIGURATION_UPDATE ITTI message \n");
|
LOG_D(F1AP, "Sending F1AP_GNB_CU_CONFIGURATION_UPDATE ITTI message \n");
|
||||||
itti_send_msg_to_task(TASK_GNB_APP, GNB_MODULE_ID_TO_INSTANCE(assoc_id), msg_p);
|
itti_send_msg_to_task(TASK_GNB_APP, GNB_MODULE_ID_TO_INSTANCE(assoc_id), msg_p);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -236,6 +236,10 @@ void *gNB_app_task(void *args_p)
|
|||||||
|
|
||||||
case F1AP_GNB_CU_CONFIGURATION_UPDATE:
|
case F1AP_GNB_CU_CONFIGURATION_UPDATE:
|
||||||
AssertFatal(NODE_IS_DU(node_type), "Should not have received F1AP_GNB_CU_CONFIGURATION_UPDATE in CU/gNB\n");
|
AssertFatal(NODE_IS_DU(node_type), "Should not have received F1AP_GNB_CU_CONFIGURATION_UPDATE in CU/gNB\n");
|
||||||
|
LOG_I(GNB_APP,
|
||||||
|
"Received %s: associated with %d cells to activate\n",
|
||||||
|
ITTI_MSG_NAME(msg_p),
|
||||||
|
F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p).num_cells_to_activate);
|
||||||
cell_to_activate += F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p).num_cells_to_activate;
|
cell_to_activate += F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p).num_cells_to_activate;
|
||||||
gNB_app_handle_f1ap_gnb_cu_configuration_update(&F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p));
|
gNB_app_handle_f1ap_gnb_cu_configuration_update(&F1AP_GNB_CU_CONFIGURATION_UPDATE(msg_p));
|
||||||
|
|
||||||
|
|||||||
@@ -94,6 +94,7 @@
|
|||||||
#ifdef ENABLE_AERIAL
|
#ifdef ENABLE_AERIAL
|
||||||
#include "nfapi/oai_integration/aerial/fapi_vnf_p5.h"
|
#include "nfapi/oai_integration/aerial/fapi_vnf_p5.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "lib/f1ap_interface_management.h"
|
||||||
|
|
||||||
extern uint16_t sf_ahead;
|
extern uint16_t sf_ahead;
|
||||||
|
|
||||||
@@ -2375,6 +2376,8 @@ int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_up
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
NR_SCHED_UNLOCK(&mac->sched_lock);
|
NR_SCHED_UNLOCK(&mac->sched_lock);
|
||||||
|
/* Free F1AP struct after use */
|
||||||
|
free_f1ap_cu_configuration_update(gnb_cu_cfg_update);
|
||||||
MessageDef *msg_ack_p = NULL;
|
MessageDef *msg_ack_p = NULL;
|
||||||
if (ret > 0) {
|
if (ret > 0) {
|
||||||
// generate gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE
|
// generate gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE
|
||||||
|
|||||||
Reference in New Issue
Block a user