open5gs/test/s1ap_enb_build.c

58 lines
1.6 KiB
C

#define TRACE_MODULE _s1enbmsg
#include "core_debug.h"
#include "core_pkbuf.h"
#include "context.h"
#include "s1ap_build.h"
#include "s1ap_conv.h"
status_t s1ap_build_setup_req(pkbuf_t **pkbuf, c_uint32_t enb_id)
{
int erval = -1;
s1ap_message message;
S1ap_S1SetupRequestIEs_t *ies;
S1ap_PLMNidentity_t *plmnIdentity;
S1ap_SupportedTAs_Item_t *supportedTA;
memset(&message, 0, sizeof(s1ap_message));
ies = &message.msg.s1ap_S1SetupRequestIEs;
ies->global_ENB_ID.eNB_ID.present = S1ap_ENB_ID_PR_macroENB_ID;
s1ap_conv_macro_enb_id_to_bit_string(enb_id,
&ies->global_ENB_ID.eNB_ID.choice.macroENB_ID);
s1ap_conv_plmn_id_to_tbcd_string(
&mme_self()->plmn_id, &ies->global_ENB_ID.pLMNidentity);
supportedTA = (S1ap_SupportedTAs_Item_t *)
core_calloc(1, sizeof(S1ap_SupportedTAs_Item_t));
s1ap_conv_uint16_to_octet_string(
mme_self()->tracking_area_code, &supportedTA->tAC);
plmnIdentity = (S1ap_PLMNidentity_t *)
core_calloc(1, sizeof(S1ap_PLMNidentity_t));
s1ap_conv_plmn_id_to_tbcd_string(
&mme_self()->plmn_id, plmnIdentity);
ASN_SEQUENCE_ADD(&supportedTA->broadcastPLMNs, plmnIdentity);
ASN_SEQUENCE_ADD(&ies->supportedTAs, supportedTA);
ies->defaultPagingDRX = mme_self()->default_paging_drx;
message.direction = S1AP_PDU_PR_initiatingMessage;
message.procedureCode = S1ap_ProcedureCode_id_S1Setup;
erval = s1ap_encode_pdu(pkbuf, &message);
s1ap_free_pdu(&message);
if (erval < 0)
{
d_error("s1ap_encode_error : (%d)", erval);
return CORE_ERROR;
}
return CORE_OK;
}