Expose F1 primitives for next commits
Need to proper forward declaration, as we otherwise need to make telnet_o1 module dependent on F1. Make functions publicly accessible, as the F1 functions are used in an upcoming commit to start the L1.
This commit is contained in:
@@ -34,9 +34,10 @@
|
|||||||
#ifndef F1AP_DU_RRC_MESSAGE_TRANSFER_H_
|
#ifndef F1AP_DU_RRC_MESSAGE_TRANSFER_H_
|
||||||
#define F1AP_DU_RRC_MESSAGE_TRANSFER_H_
|
#define F1AP_DU_RRC_MESSAGE_TRANSFER_H_
|
||||||
|
|
||||||
#include "f1ap_common.h"
|
#include <openair2/RRC/NR/MESSAGES/asn1_msg.h>
|
||||||
|
|
||||||
int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu);
|
struct F1AP_F1AP_PDU;
|
||||||
|
int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, struct F1AP_F1AP_PDU *pdu);
|
||||||
|
|
||||||
int DU_send_UL_NR_RRC_MESSAGE_TRANSFER(sctp_assoc_t assoc_id, const f1ap_ul_rrc_message_t *msg);
|
int DU_send_UL_NR_RRC_MESSAGE_TRANSFER(sctp_assoc_t assoc_id, const f1ap_ul_rrc_message_t *msg);
|
||||||
|
|
||||||
|
|||||||
@@ -1166,7 +1166,7 @@ static int read_du_cell_info(configmodule_interface_t *cfg,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static f1ap_tdd_info_t read_tdd_config(const NR_ServingCellConfigCommon_t *scc)
|
f1ap_tdd_info_t read_tdd_config(const NR_ServingCellConfigCommon_t *scc)
|
||||||
{
|
{
|
||||||
const NR_FrequencyInfoDL_t *dl = scc->downlinkConfigCommon->frequencyInfoDL;
|
const NR_FrequencyInfoDL_t *dl = scc->downlinkConfigCommon->frequencyInfoDL;
|
||||||
f1ap_tdd_info_t tdd = {
|
f1ap_tdd_info_t tdd = {
|
||||||
@@ -1195,7 +1195,27 @@ static f1ap_fdd_info_t read_fdd_config(const NR_ServingCellConfigCommon_t *scc)
|
|||||||
return fdd;
|
return fdd;
|
||||||
}
|
}
|
||||||
|
|
||||||
static f1ap_setup_req_t *RC_read_F1Setup(uint64_t id,
|
f1ap_gnb_du_system_info_t *get_sys_info(NR_BCCH_BCH_Message_t *mib, const NR_BCCH_DL_SCH_Message_t *sib1)
|
||||||
|
{
|
||||||
|
int buf_len = 3;
|
||||||
|
f1ap_gnb_du_system_info_t *sys_info = calloc_or_fail(1, sizeof(*sys_info));
|
||||||
|
|
||||||
|
sys_info->mib = calloc_or_fail(buf_len, sizeof(*sys_info->mib));
|
||||||
|
DevAssert(mib != NULL);
|
||||||
|
sys_info->mib_length = encode_MIB_NR(mib, 0, sys_info->mib, buf_len);
|
||||||
|
DevAssert(sys_info->mib_length == buf_len);
|
||||||
|
|
||||||
|
DevAssert(sib1 != NULL);
|
||||||
|
NR_SIB1_t *bcch_SIB1 = sib1->message.choice.c1->choice.systemInformationBlockType1;
|
||||||
|
sys_info->sib1 = calloc_or_fail(NR_MAX_SIB_LENGTH / 8, sizeof(*sys_info->sib1));
|
||||||
|
asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_SIB1, NULL, (void *)bcch_SIB1, sys_info->sib1, NR_MAX_SIB_LENGTH / 8);
|
||||||
|
AssertFatal(enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded);
|
||||||
|
sys_info->sib1_length = (enc_rval.encoded + 7) / 8;
|
||||||
|
|
||||||
|
return sys_info;
|
||||||
|
}
|
||||||
|
|
||||||
|
f1ap_setup_req_t *RC_read_F1Setup(uint64_t id,
|
||||||
const char *name,
|
const char *name,
|
||||||
const f1ap_served_cell_info_t *info,
|
const f1ap_served_cell_info_t *info,
|
||||||
const NR_ServingCellConfigCommon_t *scc,
|
const NR_ServingCellConfigCommon_t *scc,
|
||||||
@@ -1244,24 +1264,7 @@ static f1ap_setup_req_t *RC_read_F1Setup(uint64_t id,
|
|||||||
if (IS_SA_MODE(get_softmodem_params())) {
|
if (IS_SA_MODE(get_softmodem_params())) {
|
||||||
// in NSA we don't transmit SIB1, so cannot fill DU system information
|
// in NSA we don't transmit SIB1, so cannot fill DU system information
|
||||||
// so cannot send MIB either
|
// so cannot send MIB either
|
||||||
|
req->cell[0].sys_info = get_sys_info(mib, sib1);
|
||||||
int buf_len = 3; // this is what we assume in monolithic
|
|
||||||
req->cell[0].sys_info = calloc(1, sizeof(*req->cell[0].sys_info));
|
|
||||||
AssertFatal(req->cell[0].sys_info != NULL, "out of memory\n");
|
|
||||||
f1ap_gnb_du_system_info_t *sys_info = req->cell[0].sys_info;
|
|
||||||
sys_info->mib = calloc(buf_len, sizeof(*sys_info->mib));
|
|
||||||
DevAssert(sys_info->mib != NULL);
|
|
||||||
DevAssert(mib != NULL);
|
|
||||||
// encode only the mib message itself
|
|
||||||
sys_info->mib_length = encode_MIB_NR_setup(mib->message.choice.mib, 0, sys_info->mib, buf_len);
|
|
||||||
DevAssert(sys_info->mib_length == buf_len);
|
|
||||||
|
|
||||||
DevAssert(sib1 != NULL);
|
|
||||||
NR_SIB1_t *bcch_SIB1 = sib1->message.choice.c1->choice.systemInformationBlockType1;
|
|
||||||
sys_info->sib1 = calloc(NR_MAX_SIB_LENGTH / 8, sizeof(*sys_info->sib1));
|
|
||||||
asn_enc_rval_t enc_rval = uper_encode_to_buffer(&asn_DEF_NR_SIB1, NULL, (void *)bcch_SIB1, sys_info->sib1, NR_MAX_SIB_LENGTH / 8);
|
|
||||||
AssertFatal(enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded);
|
|
||||||
sys_info->sib1_length = (enc_rval.encoded + 7) / 8;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int num = read_version(TO_STRING(NR_RRC_VERSION), &req->rrc_ver[0], &req->rrc_ver[1], &req->rrc_ver[2]);
|
int num = read_version(TO_STRING(NR_RRC_VERSION), &req->rrc_ver[0], &req->rrc_ver[1], &req->rrc_ver[2]);
|
||||||
|
|||||||
@@ -95,6 +95,14 @@ gNB_RRC_INST *RCconfig_NRRRC();
|
|||||||
int RCconfig_NR_NG(MessageDef *msg_p, uint32_t i);
|
int RCconfig_NR_NG(MessageDef *msg_p, uint32_t i);
|
||||||
int RCconfig_NR_X2(MessageDef *msg_p, uint32_t i);
|
int RCconfig_NR_X2(MessageDef *msg_p, uint32_t i);
|
||||||
void wait_f1_setup_response(void);
|
void wait_f1_setup_response(void);
|
||||||
|
f1ap_setup_req_t *RC_read_F1Setup(uint64_t id,
|
||||||
|
const char *name,
|
||||||
|
const f1ap_served_cell_info_t *info,
|
||||||
|
const NR_ServingCellConfigCommon_t *scc,
|
||||||
|
NR_BCCH_BCH_Message_t *mib,
|
||||||
|
const NR_BCCH_DL_SCH_Message_t *sib1);
|
||||||
|
f1ap_tdd_info_t read_tdd_config(const NR_ServingCellConfigCommon_t *scc);
|
||||||
|
f1ap_gnb_du_system_info_t *get_sys_info(NR_BCCH_BCH_Message_t *mib, const NR_BCCH_DL_SCH_Message_t *sib1);
|
||||||
int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_update_t *gnb_cu_cfg_update);
|
int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_update_t *gnb_cu_cfg_update);
|
||||||
MessageDef *RCconfig_NR_CU_E1(const E1_t *entity);
|
MessageDef *RCconfig_NR_CU_E1(const E1_t *entity);
|
||||||
ngran_node_t get_node_type(void);
|
ngran_node_t get_node_type(void);
|
||||||
|
|||||||
Reference in New Issue
Block a user