Commit 84d8f6c2 authored by Robert Schmidt's avatar Robert Schmidt

Add stubs for F1 Setup Request/Response/Failure messages

parent 5315d696
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "f1ap_encoder.h" #include "f1ap_encoder.h"
#include "f1ap_itti_messaging.h" #include "f1ap_itti_messaging.h"
#include "f1ap_du_interface_management.h" #include "f1ap_du_interface_management.h"
#include "openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.h"
#include "assertions.h" #include "assertions.h"
#include "GNB_APP/gnb_paramdef.h" #include "GNB_APP/gnb_paramdef.h"
...@@ -309,10 +310,8 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance, f1ap_setup_req_t *setup_req) ...@@ -309,10 +310,8 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance, f1ap_setup_req_t *setup_req)
return 0; return 0;
} }
int DU_handle_F1_SETUP_RESPONSE(instance_t instance, int DU_handle_F1_SETUP_RESPONSE(instance_t instance, uint32_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu)
uint32_t assoc_id, {
uint32_t stream,
F1AP_F1AP_PDU_t *pdu) {
LOG_D(F1AP, "DU_handle_F1_SETUP_RESPONSE\n"); LOG_D(F1AP, "DU_handle_F1_SETUP_RESPONSE\n");
AssertFatal(pdu->present == F1AP_F1AP_PDU_PR_successfulOutcome, AssertFatal(pdu->present == F1AP_F1AP_PDU_PR_successfulOutcome,
"pdu->present != F1AP_F1AP_PDU_PR_successfulOutcome\n"); "pdu->present != F1AP_F1AP_PDU_PR_successfulOutcome\n");
...@@ -327,9 +326,7 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance, ...@@ -327,9 +326,7 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
int TransactionId = -1; int TransactionId = -1;
int num_cells_to_activate = 0; int num_cells_to_activate = 0;
F1AP_Cells_to_be_Activated_List_Item_t *cell; F1AP_Cells_to_be_Activated_List_Item_t *cell;
MessageDef *msg_p = itti_alloc_new_message (TASK_DU_F1, 0, F1AP_SETUP_RESP); f1ap_setup_resp_t resp = {0};
LOG_D(F1AP, "F1AP: F1Setup-Resp: protocolIEs.list.count %d\n",
in->protocolIEs.list.count);
for (int i=0; i < in->protocolIEs.list.count; i++) { for (int i=0; i < in->protocolIEs.list.count; i++) {
ie = in->protocolIEs.list.array[i]; ie = in->protocolIEs.list.array[i];
...@@ -350,11 +347,10 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance, ...@@ -350,11 +347,10 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
"ie->criticality != F1AP_Criticality_ignore\n"); "ie->criticality != F1AP_Criticality_ignore\n");
AssertFatal(ie->value.present == F1AP_F1SetupResponseIEs__value_PR_GNB_CU_Name, AssertFatal(ie->value.present == F1AP_F1SetupResponseIEs__value_PR_GNB_CU_Name,
"ie->value.present != F1AP_F1SetupResponseIEs__value_PR_TransactionID\n"); "ie->value.present != F1AP_F1SetupResponseIEs__value_PR_TransactionID\n");
F1AP_SETUP_RESP (msg_p).gNB_CU_name = malloc(ie->value.choice.GNB_CU_Name.size+1); resp.gNB_CU_name = malloc(ie->value.choice.GNB_CU_Name.size+1);
memcpy(F1AP_SETUP_RESP (msg_p).gNB_CU_name,ie->value.choice.GNB_CU_Name.buf,ie->value.choice.GNB_CU_Name.size); memcpy(resp.gNB_CU_name, ie->value.choice.GNB_CU_Name.buf, ie->value.choice.GNB_CU_Name.size);
F1AP_SETUP_RESP (msg_p).gNB_CU_name[ie->value.choice.GNB_CU_Name.size]='\0'; resp.gNB_CU_name[ie->value.choice.GNB_CU_Name.size] = '\0';
LOG_D(F1AP, "F1AP: F1Setup-Resp: gNB_CU_name %s\n", LOG_D(F1AP, "F1AP: F1Setup-Resp: gNB_CU_name %s\n", resp.gNB_CU_name);
F1AP_SETUP_RESP (msg_p).gNB_CU_name);
break; break;
case F1AP_ProtocolIE_ID_id_GNB_CU_RRC_Version: case F1AP_ProtocolIE_ID_id_GNB_CU_RRC_Version:
...@@ -379,17 +375,16 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance, ...@@ -379,17 +375,16 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
"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; cell = &cells_to_be_activated_list_item_ies->value.choice.Cells_to_be_Activated_List_Item;
TBCD_TO_MCC_MNC(&cell->nRCGI.pLMN_Identity, TBCD_TO_MCC_MNC(&cell->nRCGI.pLMN_Identity,
F1AP_SETUP_RESP(msg_p).cells_to_activate[i].plmn.mcc, resp.cells_to_activate[i].plmn.mcc,
F1AP_SETUP_RESP(msg_p).cells_to_activate[i].plmn.mnc, resp.cells_to_activate[i].plmn.mnc,
F1AP_SETUP_RESP(msg_p).cells_to_activate[i].plmn.mnc_digit_length); resp.cells_to_activate[i].plmn.mnc_digit_length);
LOG_D(F1AP, "nr_cellId : %x %x %x %x %x\n", LOG_D(F1AP, "nr_cellId : %x %x %x %x %x\n",
cell->nRCGI.nRCellIdentity.buf[0], cell->nRCGI.nRCellIdentity.buf[0],
cell->nRCGI.nRCellIdentity.buf[1], cell->nRCGI.nRCellIdentity.buf[1],
cell->nRCGI.nRCellIdentity.buf[2], cell->nRCGI.nRCellIdentity.buf[2],
cell->nRCGI.nRCellIdentity.buf[3], cell->nRCGI.nRCellIdentity.buf[3],
cell->nRCGI.nRCellIdentity.buf[4]); cell->nRCGI.nRCellIdentity.buf[4]);
BIT_STRING_TO_NR_CELL_IDENTITY(&cell->nRCGI.nRCellIdentity, BIT_STRING_TO_NR_CELL_IDENTITY(&cell->nRCGI.nRCellIdentity, resp.cells_to_activate[i].nr_cellid);
F1AP_SETUP_RESP (msg_p).cells_to_activate[i].nr_cellid);
F1AP_ProtocolExtensionContainer_10696P112_t *ext = (F1AP_ProtocolExtensionContainer_10696P112_t *)cell->iE_Extensions; F1AP_ProtocolExtensionContainer_10696P112_t *ext = (F1AP_ProtocolExtensionContainer_10696P112_t *)cell->iE_Extensions;
if (ext==NULL) if (ext==NULL)
...@@ -408,28 +403,26 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance, ...@@ -408,28 +403,26 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_AvailableSNPN_ID_List case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_AvailableSNPN_ID_List
*/ */
case F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation: { case F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation: {
F1AP_SETUP_RESP (msg_p).cells_to_activate[i].nrpci = (cell->nRPCI != NULL) ? *cell->nRPCI : 0; resp.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_CUSystemInformation_t *gNB_CUSystemInformation = (F1AP_GNB_CUSystemInformation_t *)&cells_to_be_activated_list_itemExtIEs->extensionValue.choice.GNB_CUSystemInformation;
F1AP_SETUP_RESP (msg_p).cells_to_activate[i].num_SI = gNB_CUSystemInformation->sibtypetobeupdatedlist.list.count; resp.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"); AssertFatal(ext->list.count==1,"At least one SI message should be there, and only 1 for now!\n");
LOG_D(F1AP, LOG_D(F1AP,
"F1AP: Cell %d MCC %d MNC %d NRCellid %lx num_si %d\n", "F1AP: Cell %d MCC %d MNC %d NRCellid %lx num_si %d\n",
i, i,
F1AP_SETUP_RESP(msg_p).cells_to_activate[i].plmn.mcc, resp.cells_to_activate[i].plmn.mcc,
F1AP_SETUP_RESP(msg_p).cells_to_activate[i].plmn.mnc, resp.cells_to_activate[i].plmn.mnc,
F1AP_SETUP_RESP(msg_p).cells_to_activate[i].nr_cellid, resp.cells_to_activate[i].nr_cellid,
F1AP_SETUP_RESP(msg_p).cells_to_activate[i].num_SI); resp.cells_to_activate[i].num_SI);
for (int si = 0; si < gNB_CUSystemInformation->sibtypetobeupdatedlist.list.count; si++) { for (int si = 0; si < gNB_CUSystemInformation->sibtypetobeupdatedlist.list.count; si++) {
F1AP_SibtypetobeupdatedListItem_t *sib_item = gNB_CUSystemInformation->sibtypetobeupdatedlist.list.array[si]; F1AP_SibtypetobeupdatedListItem_t *sib_item = gNB_CUSystemInformation->sibtypetobeupdatedlist.list.array[si];
size_t size = sib_item->sIBmessage.size; size_t size = sib_item->sIBmessage.size;
F1AP_SETUP_RESP (msg_p).cells_to_activate[i].SI_container_length[si] = size; resp.cells_to_activate[i].SI_container_length[si] = size;
LOG_D(F1AP, "F1AP: SI_container_length[%d][%ld] %ld bytes\n", i, sib_item->sIBtype, size); LOG_D(F1AP, "F1AP: SI_container_length[%d][%ld] %ld bytes\n", i, sib_item->sIBtype, size);
F1AP_SETUP_RESP (msg_p).cells_to_activate[i].SI_container[si] = malloc(F1AP_SETUP_RESP (msg_p).cells_to_activate[i].SI_container_length[si]); resp.cells_to_activate[i].SI_container[si] = malloc(resp.cells_to_activate[i].SI_container_length[si]);
memcpy((void *)F1AP_SETUP_RESP (msg_p).cells_to_activate[i].SI_container[si], memcpy(resp.cells_to_activate[i].SI_container[si], sib_item->sIBmessage.buf, size);
(void *)sib_item->sIBmessage.buf, resp.cells_to_activate[i].SI_type[si]=sib_item->sIBtype;
size);
F1AP_SETUP_RESP (msg_p).cells_to_activate[i].SI_type[si]=sib_item->sIBtype;
} }
break; break;
...@@ -469,30 +462,26 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance, ...@@ -469,30 +462,26 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
AssertFatal(TransactionId!=-1,"TransactionId was not sent\n"); AssertFatal(TransactionId!=-1,"TransactionId was not sent\n");
LOG_D(F1AP,"F1AP: num_cells_to_activate %d\n",num_cells_to_activate); LOG_D(F1AP,"F1AP: num_cells_to_activate %d\n",num_cells_to_activate);
F1AP_SETUP_RESP (msg_p).num_cells_to_activate = num_cells_to_activate; resp.num_cells_to_activate = num_cells_to_activate;
// tmp // tmp
// F1AP_SETUP_RESP (msg_p).num_SI[0] = 1;
for (int i=0; i<num_cells_to_activate; i++) for (int i=0; i<num_cells_to_activate; i++)
AssertFatal(F1AP_SETUP_RESP (msg_p).cells_to_activate[i].num_SI > 0, "System Information %d is missing",i); AssertFatal(resp.cells_to_activate[i].num_SI > 0, "System Information %d is missing", i);
LOG_D(F1AP, "Sending F1AP_SETUP_RESP ITTI message\n"); LOG_D(F1AP, "Sending F1AP_SETUP_RESP ITTI message\n");
itti_send_msg_to_task(TASK_GNB_APP, GNB_MODULE_ID_TO_INSTANCE(assoc_id), msg_p); f1_setup_response(&resp);
return 0; return 0;
} }
// SETUP FAILURE // SETUP FAILURE
int DU_handle_F1_SETUP_FAILURE(instance_t instance, int DU_handle_F1_SETUP_FAILURE(instance_t instance, uint32_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu)
uint32_t assoc_id, {
uint32_t stream,
F1AP_F1AP_PDU_t *pdu) {
LOG_E(F1AP, "DU_handle_F1_SETUP_FAILURE\n");
F1AP_F1SetupFailure_t *out; F1AP_F1SetupFailure_t *out;
F1AP_F1SetupFailureIEs_t *ie; F1AP_F1SetupFailureIEs_t *ie;
f1ap_setup_failure_t fail = {0};
out = &pdu->choice.unsuccessfulOutcome->value.choice.F1SetupFailure; out = &pdu->choice.unsuccessfulOutcome->value.choice.F1SetupFailure;
/* Transaction ID */ /* Transaction ID */
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_F1SetupFailureIEs_t, ie, out, F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_F1SetupFailureIEs_t, ie, out, F1AP_ProtocolIE_ID_id_TransactionID, true);
F1AP_ProtocolIE_ID_id_TransactionID, true);
/* Cause */ /* Cause */
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_F1SetupFailureIEs_t, ie, out, F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_F1SetupFailureIEs_t, ie, out,
F1AP_ProtocolIE_ID_id_Cause, true); F1AP_ProtocolIE_ID_id_Cause, true);
...@@ -503,10 +492,10 @@ int DU_handle_F1_SETUP_FAILURE(instance_t instance, ...@@ -503,10 +492,10 @@ int DU_handle_F1_SETUP_FAILURE(instance_t instance,
F1AP_ProtocolIE_ID_id_TimeToWait, true); F1AP_ProtocolIE_ID_id_TimeToWait, true);
} }
f1_setup_failure(&fail);
return 0; return 0;
} }
/* /*
gNB-DU Configuration Update gNB-DU Configuration Update
*/ */
......
...@@ -30,6 +30,17 @@ ...@@ -30,6 +30,17 @@
#include "uper_decoder.h" #include "uper_decoder.h"
#include "uper_encoder.h" #include "uper_encoder.h"
void f1_setup_response(const f1ap_setup_resp_t *resp)
{
AssertFatal(false, "not implemented\n");
}
void f1_setup_failure(const f1ap_setup_failure_t *failure)
{
LOG_E(MAC, "the CU reported F1AP Setup Failure, is there a configuration mismatch?\n");
exit(1);
}
static NR_RLC_BearerConfig_t *get_bearerconfig_from_srb(const f1ap_srb_to_be_setup_t *srb) static NR_RLC_BearerConfig_t *get_bearerconfig_from_srb(const f1ap_srb_to_be_setup_t *srb)
{ {
long priority = srb->srb_id; // high priority for SRB long priority = srb->srb_id; // high priority for SRB
......
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
#include "platform_types.h" #include "platform_types.h"
#include "f1ap_messages_types.h" #include "f1ap_messages_types.h"
void f1_setup_response(const f1ap_setup_resp_t *resp);
void f1_setup_failure(const f1ap_setup_failure_t *failure);
void ue_context_setup_request(const f1ap_ue_context_setup_t *req); void ue_context_setup_request(const f1ap_ue_context_setup_t *req);
void ue_context_modification_request(const f1ap_ue_context_modif_req_t *req); void ue_context_modification_request(const f1ap_ue_context_modif_req_t *req);
void ue_context_modification_confirm(const f1ap_ue_context_modif_confirm_t *confirm); void ue_context_modification_confirm(const f1ap_ue_context_modif_confirm_t *confirm);
......
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
#include "platform_types.h" #include "platform_types.h"
#include "f1ap_messages_types.h" #include "f1ap_messages_types.h"
typedef void (*f1_setup_request_func_t)(const f1ap_setup_req_t* req);
typedef void (*ue_context_setup_response_func_t)(const f1ap_ue_context_setup_t* req, const f1ap_ue_context_setup_t *resp); typedef void (*ue_context_setup_response_func_t)(const f1ap_ue_context_setup_t* req, const f1ap_ue_context_setup_t *resp);
typedef void (*ue_context_modification_response_func_t)(const f1ap_ue_context_modif_req_t *req, typedef void (*ue_context_modification_response_func_t)(const f1ap_ue_context_modif_req_t *req,
const f1ap_ue_context_modif_resp_t *resp); const f1ap_ue_context_modif_resp_t *resp);
......
...@@ -24,6 +24,11 @@ ...@@ -24,6 +24,11 @@
#include "mac_rrc_ul.h" #include "mac_rrc_ul.h"
static void f1_setup_request_direct(const f1ap_setup_req_t *req)
{
AssertFatal(false, "not implemented\n");
}
static void ue_context_setup_response_direct(const f1ap_ue_context_setup_t *req, const f1ap_ue_context_setup_t *resp) static void ue_context_setup_response_direct(const f1ap_ue_context_setup_t *req, const f1ap_ue_context_setup_t *resp)
{ {
DevAssert(req->drbs_to_be_setup_length == resp->drbs_to_be_setup_length); DevAssert(req->drbs_to_be_setup_length == resp->drbs_to_be_setup_length);
...@@ -172,6 +177,7 @@ static void initial_ul_rrc_message_transfer_direct(module_id_t module_id, const ...@@ -172,6 +177,7 @@ static void initial_ul_rrc_message_transfer_direct(module_id_t module_id, const
void mac_rrc_ul_direct_init(struct nr_mac_rrc_ul_if_s *mac_rrc) void mac_rrc_ul_direct_init(struct nr_mac_rrc_ul_if_s *mac_rrc)
{ {
mac_rrc->f1_setup_request = f1_setup_request_direct;
mac_rrc->ue_context_setup_response = ue_context_setup_response_direct; mac_rrc->ue_context_setup_response = ue_context_setup_response_direct;
mac_rrc->ue_context_modification_response = ue_context_modification_response_direct; mac_rrc->ue_context_modification_response = ue_context_modification_response_direct;
mac_rrc->ue_context_modification_required = ue_context_modification_required_direct; mac_rrc->ue_context_modification_required = ue_context_modification_required_direct;
......
...@@ -29,6 +29,11 @@ ...@@ -29,6 +29,11 @@
#include "mac_rrc_ul.h" #include "mac_rrc_ul.h"
static void f1_setup_request_f1ap(const f1ap_setup_req_t *req)
{
AssertFatal(false, "not implemented\n");
}
static void ue_context_setup_response_f1ap(const f1ap_ue_context_setup_t *req, const f1ap_ue_context_setup_t *resp) static void ue_context_setup_response_f1ap(const f1ap_ue_context_setup_t *req, const f1ap_ue_context_setup_t *resp)
{ {
DevAssert(req->drbs_to_be_setup_length == resp->drbs_to_be_setup_length); DevAssert(req->drbs_to_be_setup_length == resp->drbs_to_be_setup_length);
...@@ -161,6 +166,7 @@ static void initial_ul_rrc_message_transfer_f1ap(module_id_t module_id, const f1 ...@@ -161,6 +166,7 @@ static void initial_ul_rrc_message_transfer_f1ap(module_id_t module_id, const f1
void mac_rrc_ul_f1ap_init(struct nr_mac_rrc_ul_if_s *mac_rrc) void mac_rrc_ul_f1ap_init(struct nr_mac_rrc_ul_if_s *mac_rrc)
{ {
mac_rrc->f1_setup_request = f1_setup_request_f1ap;
mac_rrc->ue_context_setup_response = ue_context_setup_response_f1ap; mac_rrc->ue_context_setup_response = ue_context_setup_response_f1ap;
mac_rrc->ue_context_modification_response = ue_context_modification_response_f1ap; mac_rrc->ue_context_modification_response = ue_context_modification_response_f1ap;
mac_rrc->ue_context_modification_required = ue_context_modification_required_f1ap; mac_rrc->ue_context_modification_required = ue_context_modification_required_f1ap;
......
...@@ -656,6 +656,7 @@ typedef struct NR_bler_options { ...@@ -656,6 +656,7 @@ typedef struct NR_bler_options {
} NR_bler_options_t; } NR_bler_options_t;
typedef struct nr_mac_rrc_ul_if_s { typedef struct nr_mac_rrc_ul_if_s {
f1_setup_request_func_t f1_setup_request;
ue_context_setup_response_func_t ue_context_setup_response; ue_context_setup_response_func_t ue_context_setup_response;
ue_context_modification_response_func_t ue_context_modification_response; ue_context_modification_response_func_t ue_context_modification_response;
ue_context_modification_required_func_t ue_context_modification_required; ue_context_modification_required_func_t ue_context_modification_required;
......
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
#include "platform_types.h" #include "platform_types.h"
#include "f1ap_messages_types.h" #include "f1ap_messages_types.h"
typedef void (*f1_setup_response_func_t)(const f1ap_setup_resp_t *resp);
typedef void (*f1_setup_failure_func_t)(const f1ap_setup_failure_t *fail);
typedef void (*ue_context_setup_request_func_t)(const f1ap_ue_context_setup_t *req); typedef void (*ue_context_setup_request_func_t)(const f1ap_ue_context_setup_t *req);
typedef void (*ue_context_modification_request_func_t)(const f1ap_ue_context_modif_req_t *req); typedef void (*ue_context_modification_request_func_t)(const f1ap_ue_context_modif_req_t *req);
typedef void (*ue_context_modification_confirm_func_t)(const f1ap_ue_context_modif_confirm_t *confirm); typedef void (*ue_context_modification_confirm_func_t)(const f1ap_ue_context_modif_confirm_t *confirm);
......
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
void mac_rrc_dl_direct_init(nr_mac_rrc_dl_if_t *mac_rrc) void mac_rrc_dl_direct_init(nr_mac_rrc_dl_if_t *mac_rrc)
{ {
mac_rrc->f1_setup_response = f1_setup_response;
mac_rrc->f1_setup_failure = f1_setup_failure;
mac_rrc->ue_context_setup_request = ue_context_setup_request; mac_rrc->ue_context_setup_request = ue_context_setup_request;
mac_rrc->ue_context_modification_request = ue_context_modification_request; mac_rrc->ue_context_modification_request = ue_context_modification_request;
mac_rrc->ue_context_modification_confirm = ue_context_modification_confirm; mac_rrc->ue_context_modification_confirm = ue_context_modification_confirm;
......
...@@ -24,6 +24,16 @@ ...@@ -24,6 +24,16 @@
#include "mac_rrc_dl.h" #include "mac_rrc_dl.h"
#include "nr_rrc_defs.h" #include "nr_rrc_defs.h"
static void f1_setup_response_f1ap(const f1ap_setup_resp_t *resp)
{
AssertFatal(false, "not implemented\n");
}
static void f1_setup_failure_f1ap(const f1ap_setup_failure_t *fail)
{
AssertFatal(false, "not implemented\n");
}
static void ue_context_setup_request_f1ap(const f1ap_ue_context_setup_t *req) static void ue_context_setup_request_f1ap(const f1ap_ue_context_setup_t *req)
{ {
MessageDef *msg = itti_alloc_new_message(TASK_RRC_GNB, 0, F1AP_UE_CONTEXT_SETUP_REQ); MessageDef *msg = itti_alloc_new_message(TASK_RRC_GNB, 0, F1AP_UE_CONTEXT_SETUP_REQ);
...@@ -133,6 +143,8 @@ static void dl_rrc_message_transfer_f1ap(const f1ap_dl_rrc_message_t *dl_rrc) ...@@ -133,6 +143,8 @@ static void dl_rrc_message_transfer_f1ap(const f1ap_dl_rrc_message_t *dl_rrc)
void mac_rrc_dl_f1ap_init(nr_mac_rrc_dl_if_t *mac_rrc) void mac_rrc_dl_f1ap_init(nr_mac_rrc_dl_if_t *mac_rrc)
{ {
mac_rrc->f1_setup_response = f1_setup_response_f1ap;
mac_rrc->f1_setup_failure = f1_setup_failure_f1ap;
mac_rrc->ue_context_setup_request = ue_context_setup_request_f1ap; mac_rrc->ue_context_setup_request = ue_context_setup_request_f1ap;
mac_rrc->ue_context_modification_request = ue_context_modification_request_f1ap; mac_rrc->ue_context_modification_request = ue_context_modification_request_f1ap;
mac_rrc->ue_context_modification_confirm = ue_context_modification_confirm_f1ap; mac_rrc->ue_context_modification_confirm = ue_context_modification_confirm_f1ap;
......
...@@ -362,6 +362,8 @@ typedef struct { ...@@ -362,6 +362,8 @@ typedef struct {
} nr_security_configuration_t; } nr_security_configuration_t;
typedef struct nr_mac_rrc_dl_if_s { typedef struct nr_mac_rrc_dl_if_s {
f1_setup_response_func_t f1_setup_response;
f1_setup_failure_func_t f1_setup_failure;
ue_context_setup_request_func_t ue_context_setup_request; ue_context_setup_request_func_t ue_context_setup_request;
ue_context_modification_request_func_t ue_context_modification_request; ue_context_modification_request_func_t ue_context_modification_request;
ue_context_modification_confirm_func_t ue_context_modification_confirm; ue_context_modification_confirm_func_t ue_context_modification_confirm;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment