open5gs/lib/s1ap/s1ap_free.c

237 lines
7.8 KiB
C
Raw Normal View History

2017-02-09 14:15:08 +00:00
#define TRACE_MODULE _s1free
#include "core_debug.h"
2017-02-15 11:16:50 +00:00
#include "s1ap_message.h"
2017-02-09 14:15:08 +00:00
2017-03-06 00:07:59 +00:00
static inline int s1ap_free_initiating_message(s1ap_message_t *message);
static inline int s1ap_free_successfull_outcome(s1ap_message_t *message);
static inline int s1ap_free_unsuccessfull_outcome(s1ap_message_t *message);
2017-02-09 14:15:08 +00:00
2017-03-06 00:07:59 +00:00
int s1ap_free_pdu(s1ap_message_t *message)
2017-02-09 14:15:08 +00:00
{
2017-03-05 02:46:42 +00:00
d_assert (message, return -1, "Null param");
2017-02-09 14:15:08 +00:00
2017-03-05 02:46:42 +00:00
switch (message->direction)
2017-02-09 14:15:08 +00:00
{
case S1AP_PDU_PR_initiatingMessage:
2017-03-05 02:46:42 +00:00
return s1ap_free_initiating_message(message);
2017-02-09 14:15:08 +00:00
case S1AP_PDU_PR_successfulOutcome:
2017-03-05 02:46:42 +00:00
return s1ap_free_successfull_outcome(message);
2017-02-09 14:15:08 +00:00
case S1AP_PDU_PR_unsuccessfulOutcome:
2017-03-05 02:46:42 +00:00
return s1ap_free_unsuccessfull_outcome(message);
2017-02-09 14:15:08 +00:00
default:
d_warn("Unknown message outcome (%d) or not implemented",
2017-03-05 02:46:42 +00:00
(int)message->direction);
2017-02-09 14:15:08 +00:00
break;
}
return -1;
}
2017-03-06 00:07:59 +00:00
static inline int s1ap_free_initiating_message(s1ap_message_t *message)
2017-02-09 14:15:08 +00:00
{
2017-03-05 02:46:42 +00:00
switch (message->procedureCode)
2017-02-09 14:15:08 +00:00
{
case S1ap_ProcedureCode_id_S1Setup:
2017-02-12 15:04:02 +00:00
s1ap_free_s1ap_s1setuprequesties(
2017-03-05 02:46:42 +00:00
&message->s1ap_S1SetupRequestIEs);
2017-02-09 14:15:08 +00:00
break;
case S1ap_ProcedureCode_id_initialUEMessage:
2017-02-12 15:04:02 +00:00
s1ap_free_s1ap_initialuemessage_ies(
2017-03-05 02:46:42 +00:00
&message->s1ap_InitialUEMessage_IEs);
2017-02-09 14:15:08 +00:00
break;
2017-09-07 14:41:05 +00:00
case S1ap_ProcedureCode_id_downlinkNASTransport:
s1ap_free_s1ap_downlinknastransport_ies(
&message->s1ap_DownlinkNASTransport_IEs);
break;
case S1ap_ProcedureCode_id_uplinkNASTransport:
s1ap_free_s1ap_uplinknastransport_ies(
&message->s1ap_UplinkNASTransport_IEs);
2017-02-09 14:15:08 +00:00
break;
case S1ap_ProcedureCode_id_InitialContextSetup:
2017-02-12 15:04:02 +00:00
s1ap_free_s1ap_initialcontextsetuprequesties(
2017-03-05 02:46:42 +00:00
&message->s1ap_InitialContextSetupRequestIEs);
2017-02-09 14:15:08 +00:00
break;
2017-09-07 14:41:05 +00:00
case S1ap_ProcedureCode_id_UECapabilityInfoIndication:
s1ap_free_s1ap_uecapabilityinfoindicationies(
&message->s1ap_UECapabilityInfoIndicationIEs);
break;
2017-09-04 15:04:05 +00:00
case S1ap_ProcedureCode_id_E_RABSetup:
s1ap_free_s1ap_e_rabsetuprequesties(
&message->s1ap_E_RABSetupRequestIEs);
break;
2017-09-07 14:41:05 +00:00
case S1ap_ProcedureCode_id_E_RABRelease:
s1ap_free_s1ap_e_rabreleasecommandies(
&message->s1ap_E_RABReleaseCommandIEs);
2017-02-09 14:15:08 +00:00
break;
case S1ap_ProcedureCode_id_UEContextRelease:
2017-02-12 15:04:02 +00:00
s1ap_free_s1ap_uecontextreleasecommand_ies(
2017-03-05 02:46:42 +00:00
&message->s1ap_UEContextReleaseCommand_IEs);
2017-02-09 14:15:08 +00:00
break;
case S1ap_ProcedureCode_id_UEContextReleaseRequest:
2017-02-12 15:04:02 +00:00
s1ap_free_s1ap_uecontextreleaserequest_ies(
2017-03-05 02:46:42 +00:00
&message->s1ap_UEContextReleaseRequest_IEs);
2017-02-09 14:15:08 +00:00
break;
case S1ap_ProcedureCode_id_Paging:
s1ap_free_s1ap_pagingies(
&message->s1ap_PagingIEs);
break;
case S1ap_ProcedureCode_id_PathSwitchRequest:
s1ap_free_s1ap_pathswitchrequesties(
&message->s1ap_PathSwitchRequestIEs);
break;
2017-09-12 04:54:55 +00:00
case S1ap_ProcedureCode_id_HandoverPreparation:
s1ap_free_s1ap_handoverrequiredies(
&message->s1ap_HandoverRequiredIEs);
break;
case S1ap_ProcedureCode_id_HandoverResourceAllocation:
s1ap_free_s1ap_handoverrequesties(
&message->s1ap_HandoverRequestIEs);
break;
2017-09-15 03:06:26 +00:00
case S1ap_ProcedureCode_id_HandoverCancel:
s1ap_free_s1ap_handovercancelies(
&message->s1ap_HandoverCancelIEs);
break;
2017-09-12 05:16:22 +00:00
case S1ap_ProcedureCode_id_eNBStatusTransfer:
s1ap_free_s1ap_enbstatustransferies(
&message->s1ap_ENBStatusTransferIEs);
break;
case S1ap_ProcedureCode_id_MMEStatusTransfer:
s1ap_free_s1ap_mmestatustransferies(
&message->s1ap_MMEStatusTransferIEs);
break;
case S1ap_ProcedureCode_id_HandoverNotification:
s1ap_free_s1ap_handovernotifyies(
&message->s1ap_HandoverNotifyIEs);
break;
case S1ap_ProcedureCode_id_NASNonDeliveryIndication:
s1ap_free_s1ap_nasnondeliveryindication_ies(
&message->s1ap_NASNonDeliveryIndication_IEs);
break;
2017-02-09 14:15:08 +00:00
default:
2017-03-05 02:46:42 +00:00
d_warn("Unknown procedure ID (%d) for initiating message\n",
(int)message->procedureCode);
2017-02-09 14:15:08 +00:00
return -1;
}
return 0;
}
2017-03-06 00:07:59 +00:00
static inline int s1ap_free_successfull_outcome(s1ap_message_t *message)
2017-02-09 14:15:08 +00:00
{
2017-03-05 02:46:42 +00:00
switch (message->procedureCode)
2017-02-09 14:15:08 +00:00
{
case S1ap_ProcedureCode_id_S1Setup:
2017-02-12 15:04:02 +00:00
s1ap_free_s1ap_s1setupresponseies(
2017-03-05 02:46:42 +00:00
&message->s1ap_S1SetupResponseIEs);
2017-02-09 14:15:08 +00:00
break;
case S1ap_ProcedureCode_id_InitialContextSetup:
2017-02-12 15:04:02 +00:00
s1ap_free_s1ap_initialcontextsetupresponseies(
2017-03-05 02:46:42 +00:00
&message->s1ap_InitialContextSetupResponseIEs);
2017-02-09 14:15:08 +00:00
break;
2017-09-04 16:17:24 +00:00
case S1ap_ProcedureCode_id_E_RABSetup:
s1ap_free_s1ap_e_rabsetupresponseies(
&message->s1ap_E_RABSetupResponseIEs);
break;
2017-09-07 14:41:05 +00:00
case S1ap_ProcedureCode_id_E_RABRelease:
s1ap_free_s1ap_e_rabmodifyresponseies(
&message->s1ap_E_RABModifyResponseIEs);
break;
2017-02-09 14:15:08 +00:00
case S1ap_ProcedureCode_id_UEContextRelease:
2017-02-12 15:04:02 +00:00
s1ap_free_s1ap_uecontextreleasecomplete_ies(
2017-03-05 02:46:42 +00:00
&message->s1ap_UEContextReleaseComplete_IEs);
2017-02-09 14:15:08 +00:00
break;
case S1ap_ProcedureCode_id_PathSwitchRequest:
s1ap_free_s1ap_pathswitchrequestacknowledgeies(
&message->s1ap_PathSwitchRequestAcknowledgeIEs);
break;
2017-09-12 04:54:55 +00:00
case S1ap_ProcedureCode_id_HandoverResourceAllocation:
s1ap_free_s1ap_handoverrequestacknowledgeies(
&message->s1ap_HandoverRequestAcknowledgeIEs);
break;
2017-09-15 03:06:26 +00:00
case S1ap_ProcedureCode_id_HandoverCancel:
s1ap_free_s1ap_handovercancelacknowledgeies(
&message->s1ap_HandoverCancelAcknowledgeIEs);
break;
2017-09-12 04:54:55 +00:00
case S1ap_ProcedureCode_id_HandoverPreparation:
s1ap_free_s1ap_handovercommandies(
&message->s1ap_HandoverCommandIEs);
break;
2017-02-09 14:15:08 +00:00
default:
d_warn("Unknown procedure ID (%d) for successfull "
2017-03-05 02:46:42 +00:00
"outcome message\n", (int)message->procedureCode);
2017-02-09 14:15:08 +00:00
return -1;
}
return 0;
}
2017-03-06 00:07:59 +00:00
static inline int s1ap_free_unsuccessfull_outcome(s1ap_message_t *message)
2017-02-09 14:15:08 +00:00
{
2017-03-05 02:46:42 +00:00
switch (message->procedureCode)
2017-02-09 14:15:08 +00:00
{
case S1ap_ProcedureCode_id_S1Setup:
2017-02-12 15:04:02 +00:00
s1ap_free_s1ap_s1setupfailureies(
2017-03-05 02:46:42 +00:00
&message->s1ap_S1SetupFailureIEs);
2017-02-09 14:15:08 +00:00
break;
case S1ap_ProcedureCode_id_InitialContextSetup:
2017-02-12 15:04:02 +00:00
s1ap_free_s1ap_initialcontextsetupfailureies(
2017-03-05 02:46:42 +00:00
&message->s1ap_InitialContextSetupFailureIEs);
2017-02-09 14:15:08 +00:00
break;
case S1ap_ProcedureCode_id_PathSwitchRequest:
s1ap_free_s1ap_pathswitchrequestfailureies(
&message->s1ap_PathSwitchRequestFailureIEs);
break;
2017-09-12 04:54:55 +00:00
case S1ap_ProcedureCode_id_HandoverPreparation:
s1ap_free_s1ap_handoverpreparationfailureies(
&message->s1ap_HandoverPreparationFailureIEs);
break;
case S1ap_ProcedureCode_id_HandoverResourceAllocation:
s1ap_free_s1ap_handoverfailureies(
&message->s1ap_HandoverFailureIEs);
break;
2017-02-09 14:15:08 +00:00
default:
d_warn("Unknown procedure ID (%d) for unsuccessfull "
2017-03-05 02:46:42 +00:00
"outcome message\n", (int)message->procedureCode);
2017-02-09 14:15:08 +00:00
return -1;
}
return 0;
}