/*
 * Copyright 2013-2019 Software Radio Systems Limited
 *
 * This file is part of srsLTE.
 *
 * srsLTE is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * srsLTE is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * A copy of the GNU Affero General Public License can be found in
 * the LICENSE file in the top-level directory of this distribution
 * and at http://www.gnu.org/licenses/.
 *
 */

#ifndef SRSLTE_LIBLTE_S1AP_H
#define SRSLTE_LIBLTE_S1AP_H

/*******************************************************************************
/* Warnings/Todos
********************************************************************************/
// Extensions are not yet handled correctly
// Dynamic Sequence Of types have max 32 elements to reduce memory footprint
// Container Lists are not yet handled correctly e.g. E-RAB-IE-ContainerList

/*******************************************************************************
/* INCLUDES
********************************************************************************/

#include "liblte_common.h"

/*******************************************************************************
                              LOGGING
*******************************************************************************/

typedef void (*log_handler_t)(void *ctx, char *str);

void liblte_log_register_handler(void *ctx, log_handler_t handler);


/*******************************************************************************
/* MAX defines
********************************************************************************/
#define LIBLTE_S1AP_MAXPRIVATEIES                                      65535
#define LIBLTE_S1AP_MAXPROTOCOLIES                                     65535
#define LIBLTE_S1AP_MAXNOOFE_RABS                                      256
#define LIBLTE_S1AP_MAXNOOFTACS                                        256
#define LIBLTE_S1AP_MAXNOOFBPLMNS                                      6
#define LIBLTE_S1AP_MAXNOOFEPLMNS                                      15
#define LIBLTE_S1AP_MAXNOOFFORBLACS                                    4096
#define LIBLTE_S1AP_MAXNOOFINDIVIDUALS1CONNECTIONSTORESET              256
#define LIBLTE_S1AP_MAXNOOFTAIFORWARNING                               65535
#define LIBLTE_S1AP_MAXNOOFEMERGENCYAREAID                             65535
#define LIBLTE_S1AP_MAXNOOFCELLINEAI                                   65535
#define LIBLTE_S1AP_MAXNOOFENBX2EXTTLAS                                16
#define LIBLTE_S1AP_MAXNOOFRATS                                        8
#define LIBLTE_S1AP_MAXNOOFMMECS                                       256
#define LIBLTE_S1AP_MAXNOOFTAFORMDT                                    8
#define LIBLTE_S1AP_MAXNOOFCELLSFORRESTART                             256
#define LIBLTE_S1AP_MAXNOOFRESTARTEMERGENCYAREAIDS                     256
#define LIBLTE_S1AP_MAXNOOFCSGS                                        256
#define LIBLTE_S1AP_MAXNOOFERRORS                                      256
#define LIBLTE_S1AP_MAXNOOFEPLMNSPLUSONE                               16
#define LIBLTE_S1AP_MAXNOOFCELLS                                       16
#define LIBLTE_S1AP_MAXNOOFCELLINTAI                                   65535
#define LIBLTE_S1AP_MAXNOOFENBX2GTPTLAS                                16
#define LIBLTE_S1AP_MAXNOOFCELLIDFORMDT                                32
#define LIBLTE_S1AP_MAXNOOFRESTARTTAIS                                 2048
#define LIBLTE_S1AP_MAXPROTOCOLEXTENSIONS                              65535
#define LIBLTE_S1AP_MAXNOOFPLMNSPERMME                                 32
#define LIBLTE_S1AP_MAXNOOFCELLID                                      65535
#define LIBLTE_S1AP_MAXNOOFGROUPIDS                                    65535
#define LIBLTE_S1AP_MAXNOOFTAIS                                        256
#define LIBLTE_S1AP_MAXNOOFENBX2TLAS                                   2
#define LIBLTE_S1AP_MAXNOOFMDTPLMNS                                    16
#define LIBLTE_S1AP_MAXNOOFFORBTACS                                    4096

/*******************************************************************************
/* Elementary Procedures
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_PROC_ID_HANDOVERPREPARATION                             = 0,
  LIBLTE_S1AP_PROC_ID_HANDOVERRESOURCEALLOCATION                      = 1,
  LIBLTE_S1AP_PROC_ID_HANDOVERNOTIFICATION                            = 2,
  LIBLTE_S1AP_PROC_ID_PATHSWITCHREQUEST                               = 3,
  LIBLTE_S1AP_PROC_ID_HANDOVERCANCEL                                  = 4,
  LIBLTE_S1AP_PROC_ID_E_RABSETUP                                      = 5,
  LIBLTE_S1AP_PROC_ID_E_RABMODIFY                                     = 6,
  LIBLTE_S1AP_PROC_ID_E_RABRELEASE                                    = 7,
  LIBLTE_S1AP_PROC_ID_E_RABRELEASEINDICATION                          = 8,
  LIBLTE_S1AP_PROC_ID_INITIALCONTEXTSETUP                             = 9,
  LIBLTE_S1AP_PROC_ID_PAGING                                          = 10,
  LIBLTE_S1AP_PROC_ID_DOWNLINKNASTRANSPORT                            = 11,
  LIBLTE_S1AP_PROC_ID_INITIALUEMESSAGE                                = 12,
  LIBLTE_S1AP_PROC_ID_UPLINKNASTRANSPORT                              = 13,
  LIBLTE_S1AP_PROC_ID_RESET                                           = 14,
  LIBLTE_S1AP_PROC_ID_ERRORINDICATION                                 = 15,
  LIBLTE_S1AP_PROC_ID_NASNONDELIVERYINDICATION                        = 16,
  LIBLTE_S1AP_PROC_ID_S1SETUP                                         = 17,
  LIBLTE_S1AP_PROC_ID_UECONTEXTRELEASEREQUEST                         = 18,
  LIBLTE_S1AP_PROC_ID_DOWNLINKS1CDMA2000TUNNELING                     = 19,
  LIBLTE_S1AP_PROC_ID_UPLINKS1CDMA2000TUNNELING                       = 20,
  LIBLTE_S1AP_PROC_ID_UECONTEXTMODIFICATION                           = 21,
  LIBLTE_S1AP_PROC_ID_UECAPABILITYINFOINDICATION                      = 22,
  LIBLTE_S1AP_PROC_ID_UECONTEXTRELEASE                                = 23,
  LIBLTE_S1AP_PROC_ID_ENBSTATUSTRANSFER                               = 24,
  LIBLTE_S1AP_PROC_ID_MMESTATUSTRANSFER                               = 25,
  LIBLTE_S1AP_PROC_ID_DEACTIVATETRACE                                 = 26,
  LIBLTE_S1AP_PROC_ID_TRACESTART                                      = 27,
  LIBLTE_S1AP_PROC_ID_TRACEFAILUREINDICATION                          = 28,
  LIBLTE_S1AP_PROC_ID_ENBCONFIGURATIONUPDATE                          = 29,
  LIBLTE_S1AP_PROC_ID_MMECONFIGURATIONUPDATE                          = 30,
  LIBLTE_S1AP_PROC_ID_LOCATIONREPORTINGCONTROL                        = 31,
  LIBLTE_S1AP_PROC_ID_LOCATIONREPORTINGFAILUREINDICATION              = 32,
  LIBLTE_S1AP_PROC_ID_LOCATIONREPORT                                  = 33,
  LIBLTE_S1AP_PROC_ID_OVERLOADSTART                                   = 34,
  LIBLTE_S1AP_PROC_ID_OVERLOADSTOP                                    = 35,
  LIBLTE_S1AP_PROC_ID_WRITEREPLACEWARNING                             = 36,
  LIBLTE_S1AP_PROC_ID_ENBDIRECTINFORMATIONTRANSFER                    = 37,
  LIBLTE_S1AP_PROC_ID_MMEDIRECTINFORMATIONTRANSFER                    = 38,
  LIBLTE_S1AP_PROC_ID_PRIVATEMESSAGE                                  = 39,
  LIBLTE_S1AP_PROC_ID_ENBCONFIGURATIONTRANSFER                        = 40,
  LIBLTE_S1AP_PROC_ID_MMECONFIGURATIONTRANSFER                        = 41,
  LIBLTE_S1AP_PROC_ID_CELLTRAFFICTRACE                                = 42,
  LIBLTE_S1AP_PROC_ID_KILL                                            = 43,
  LIBLTE_S1AP_PROC_ID_DOWNLINKUEASSOCIATEDLPPATRANSPORT               = 44,
  LIBLTE_S1AP_PROC_ID_UPLINKUEASSOCIATEDLPPATRANSPORT                 = 45,
  LIBLTE_S1AP_PROC_ID_DOWNLINKNONUEASSOCIATEDLPPATRANSPORT            = 46,
  LIBLTE_S1AP_PROC_ID_UPLINKNONUEASSOCIATEDLPPATRANSPORT              = 47,
  LIBLTE_S1AP_PROC_ID_UERADIOCAPABILITYMATCH                          = 48,
  LIBLTE_S1AP_PROC_ID_PWSRESTARTINDICATION                            = 49,
  LIBLTE_S1AP_PROC_N_ITEMS,
}LIBLTE_S1AP_PROC_ENUM;
static const char liblte_s1ap_proc_text[LIBLTE_S1AP_PROC_N_ITEMS][64] = { 
  "id-HandoverPreparation",
  "id-HandoverResourceAllocation",
  "id-HandoverNotification",
  "id-PathSwitchRequest",
  "id-HandoverCancel",
  "id-E-RABSetup",
  "id-E-RABModify",
  "id-E-RABRelease",
  "id-E-RABReleaseIndication",
  "id-InitialContextSetup",
  "id-Paging",
  "id-downlinkNASTransport",
  "id-initialUEMessage",
  "id-uplinkNASTransport",
  "id-Reset",
  "id-ErrorIndication",
  "id-NASNonDeliveryIndication",
  "id-S1Setup",
  "id-UEContextReleaseRequest",
  "id-DownlinkS1cdma2000tunneling",
  "id-UplinkS1cdma2000tunneling",
  "id-UEContextModification",
  "id-UECapabilityInfoIndication",
  "id-UEContextRelease",
  "id-eNBStatusTransfer",
  "id-MMEStatusTransfer",
  "id-DeactivateTrace",
  "id-TraceStart",
  "id-TraceFailureIndication",
  "id-ENBConfigurationUpdate",
  "id-MMEConfigurationUpdate",
  "id-LocationReportingControl",
  "id-LocationReportingFailureIndication",
  "id-LocationReport",
  "id-OverloadStart",
  "id-OverloadStop",
  "id-WriteReplaceWarning",
  "id-eNBDirectInformationTransfer",
  "id-MMEDirectInformationTransfer",
  "id-PrivateMessage",
  "id-eNBConfigurationTransfer",
  "id-MMEConfigurationTransfer",
  "id-CellTrafficTrace",
  "id-Kill",
  "id-downlinkUEAssociatedLPPaTransport",
  "id-uplinkUEAssociatedLPPaTransport",
  "id-downlinkNonUEAssociatedLPPaTransport",
  "id-uplinkNonUEAssociatedLPPaTransport",
  "id-UERadioCapabilityMatch",
  "id-PWSRestartIndication",
};



/*******************************************************************************
/* ProtocolIE Ids
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_IE_ID_MME_UE_S1AP_ID                                  = 0,
  LIBLTE_S1AP_IE_ID_HANDOVERTYPE                                    = 1,
  LIBLTE_S1AP_IE_ID_CAUSE                                           = 2,
  LIBLTE_S1AP_IE_ID_SOURCEID                                        = 3,
  LIBLTE_S1AP_IE_ID_TARGETID                                        = 4,
  LIBLTE_S1AP_IE_ID_SPARE5                                          = 5,
  LIBLTE_S1AP_IE_ID_SPARE6                                          = 6,
  LIBLTE_S1AP_IE_ID_SPARE7                                          = 7,
  LIBLTE_S1AP_IE_ID_ENB_UE_S1AP_ID                                  = 8,
  LIBLTE_S1AP_IE_ID_SPARE9                                          = 9,
  LIBLTE_S1AP_IE_ID_SPARE10                                         = 10,
  LIBLTE_S1AP_IE_ID_SPARE11                                         = 11,
  LIBLTE_S1AP_IE_ID_E_RABSUBJECTTODATAFORWARDINGLIST                = 12,
  LIBLTE_S1AP_IE_ID_E_RABTORELEASELISTHOCMD                         = 13,
  LIBLTE_S1AP_IE_ID_E_RABDATAFORWARDINGITEM                         = 14,
  LIBLTE_S1AP_IE_ID_E_RABRELEASEITEMBEARERRELCOMP                   = 15,
  LIBLTE_S1AP_IE_ID_E_RABTOBESETUPLISTBEARERSUREQ                   = 16,
  LIBLTE_S1AP_IE_ID_E_RABTOBESETUPITEMBEARERSUREQ                   = 17,
  LIBLTE_S1AP_IE_ID_E_RABADMITTEDLIST                               = 18,
  LIBLTE_S1AP_IE_ID_E_RABFAILEDTOSETUPLISTHOREQACK                  = 19,
  LIBLTE_S1AP_IE_ID_E_RABADMITTEDITEM                               = 20,
  LIBLTE_S1AP_IE_ID_E_RABFAILEDTOSETUPITEMHOREQACK                  = 21,
  LIBLTE_S1AP_IE_ID_E_RABTOBESWITCHEDDLLIST                         = 22,
  LIBLTE_S1AP_IE_ID_E_RABTOBESWITCHEDDLITEM                         = 23,
  LIBLTE_S1AP_IE_ID_E_RABTOBESETUPLISTCTXTSUREQ                     = 24,
  LIBLTE_S1AP_IE_ID_TRACEACTIVATION                                 = 25,
  LIBLTE_S1AP_IE_ID_NAS_PDU                                         = 26,
  LIBLTE_S1AP_IE_ID_E_RABTOBESETUPITEMHOREQ                         = 27,
  LIBLTE_S1AP_IE_ID_E_RABSETUPLISTBEARERSURES                       = 28,
  LIBLTE_S1AP_IE_ID_E_RABFAILEDTOSETUPLISTBEARERSURES               = 29,
  LIBLTE_S1AP_IE_ID_E_RABTOBEMODIFIEDLISTBEARERMODREQ               = 30,
  LIBLTE_S1AP_IE_ID_E_RABMODIFYLISTBEARERMODRES                     = 31,
  LIBLTE_S1AP_IE_ID_E_RABFAILEDTOMODIFYLIST                         = 32,
  LIBLTE_S1AP_IE_ID_E_RABTOBERELEASEDLIST                           = 33,
  LIBLTE_S1AP_IE_ID_E_RABFAILEDTORELEASELIST                        = 34,
  LIBLTE_S1AP_IE_ID_E_RABITEM                                       = 35,
  LIBLTE_S1AP_IE_ID_E_RABTOBEMODIFIEDITEMBEARERMODREQ               = 36,
  LIBLTE_S1AP_IE_ID_E_RABMODIFYITEMBEARERMODRES                     = 37,
  LIBLTE_S1AP_IE_ID_E_RABRELEASEITEM                                = 38,
  LIBLTE_S1AP_IE_ID_E_RABSETUPITEMBEARERSURES                       = 39,
  LIBLTE_S1AP_IE_ID_SECURITYCONTEXT                                 = 40,
  LIBLTE_S1AP_IE_ID_HANDOVERRESTRICTIONLIST                         = 41,
  LIBLTE_S1AP_IE_ID_SPARE42                                         = 42,
  LIBLTE_S1AP_IE_ID_UEPAGINGID                                      = 43,
  LIBLTE_S1AP_IE_ID_PAGINGDRX                                       = 44,
  LIBLTE_S1AP_IE_ID_SPARE45                                         = 45,
  LIBLTE_S1AP_IE_ID_TAILIST                                         = 46,
  LIBLTE_S1AP_IE_ID_TAIITEM                                         = 47,
  LIBLTE_S1AP_IE_ID_E_RABFAILEDTOSETUPLISTCTXTSURES                 = 48,
  LIBLTE_S1AP_IE_ID_E_RABRELEASEITEMHOCMD                           = 49,
  LIBLTE_S1AP_IE_ID_E_RABSETUPITEMCTXTSURES                         = 50,
  LIBLTE_S1AP_IE_ID_E_RABSETUPLISTCTXTSURES                         = 51,
  LIBLTE_S1AP_IE_ID_E_RABTOBESETUPITEMCTXTSUREQ                     = 52,
  LIBLTE_S1AP_IE_ID_E_RABTOBESETUPLISTHOREQ                         = 53,
  LIBLTE_S1AP_IE_ID_SPARE54                                         = 54,
  LIBLTE_S1AP_IE_ID_GERANTOLTEHOINFORMATIONRES                      = 55,
  LIBLTE_S1AP_IE_ID_SPARE56                                         = 56,
  LIBLTE_S1AP_IE_ID_UTRANTOLTEHOINFORMATIONRES                      = 57,
  LIBLTE_S1AP_IE_ID_CRITICALITYDIAGNOSTICS                          = 58,
  LIBLTE_S1AP_IE_ID_GLOBAL_ENB_ID                                   = 59,
  LIBLTE_S1AP_IE_ID_ENBNAME                                         = 60,
  LIBLTE_S1AP_IE_ID_MMENAME                                         = 61,
  LIBLTE_S1AP_IE_ID_SPARE62                                         = 62,
  LIBLTE_S1AP_IE_ID_SERVEDPLMNS                                     = 63,
  LIBLTE_S1AP_IE_ID_SUPPORTEDTAS                                    = 64,
  LIBLTE_S1AP_IE_ID_TIMETOWAIT                                      = 65,
  LIBLTE_S1AP_IE_ID_UEAGGREGATEMAXIMUMBITRATE                       = 66,
  LIBLTE_S1AP_IE_ID_TAI                                             = 67,
  LIBLTE_S1AP_IE_ID_SPARE68                                         = 68,
  LIBLTE_S1AP_IE_ID_E_RABRELEASELISTBEARERRELCOMP                   = 69,
  LIBLTE_S1AP_IE_ID_CDMA2000PDU                                     = 70,
  LIBLTE_S1AP_IE_ID_CDMA2000RATTYPE                                 = 71,
  LIBLTE_S1AP_IE_ID_CDMA2000SECTORID                                = 72,
  LIBLTE_S1AP_IE_ID_SECURITYKEY                                     = 73,
  LIBLTE_S1AP_IE_ID_UERADIOCAPABILITY                               = 74,
  LIBLTE_S1AP_IE_ID_GUMMEI_ID                                       = 75,
  LIBLTE_S1AP_IE_ID_SPARE76                                         = 76,
  LIBLTE_S1AP_IE_ID_SPARE77                                         = 77,
  LIBLTE_S1AP_IE_ID_E_RABINFORMATIONLISTITEM                        = 78,
  LIBLTE_S1AP_IE_ID_DIRECT_FORWARDING_PATH_AVAILABILITY             = 79,
  LIBLTE_S1AP_IE_ID_UEIDENTITYINDEXVALUE                            = 80,
  LIBLTE_S1AP_IE_ID_SPARE81                                         = 81,
  LIBLTE_S1AP_IE_ID_SPARE82                                         = 82,
  LIBLTE_S1AP_IE_ID_CDMA2000HOSTATUS                                = 83,
  LIBLTE_S1AP_IE_ID_CDMA2000HOREQUIREDINDICATION                    = 84,
  LIBLTE_S1AP_IE_ID_SPARE85                                         = 85,
  LIBLTE_S1AP_IE_ID_E_UTRAN_TRACE_ID                                = 86,
  LIBLTE_S1AP_IE_ID_RELATIVEMMECAPACITY                             = 87,
  LIBLTE_S1AP_IE_ID_SOURCEMME_UE_S1AP_ID                            = 88,
  LIBLTE_S1AP_IE_ID_BEARERS_SUBJECTTOSTATUSTRANSFER_ITEM            = 89,
  LIBLTE_S1AP_IE_ID_ENB_STATUSTRANSFER_TRANSPARENTCONTAINER         = 90,
  LIBLTE_S1AP_IE_ID_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEM           = 91,
  LIBLTE_S1AP_IE_ID_RESETTYPE                                       = 92,
  LIBLTE_S1AP_IE_ID_UE_ASSOCIATEDLOGICALS1_CONNECTIONLISTRESACK     = 93,
  LIBLTE_S1AP_IE_ID_E_RABTOBESWITCHEDULITEM                         = 94,
  LIBLTE_S1AP_IE_ID_E_RABTOBESWITCHEDULLIST                         = 95,
  LIBLTE_S1AP_IE_ID_S_TMSI                                          = 96,
  LIBLTE_S1AP_IE_ID_CDMA2000ONEXRAND                                = 97,
  LIBLTE_S1AP_IE_ID_REQUESTTYPE                                     = 98,
  LIBLTE_S1AP_IE_ID_UE_S1AP_IDS                                     = 99,
  LIBLTE_S1AP_IE_ID_EUTRAN_CGI                                      = 100,
  LIBLTE_S1AP_IE_ID_OVERLOADRESPONSE                                = 101,
  LIBLTE_S1AP_IE_ID_CDMA2000ONEXSRVCCINFO                           = 102,
  LIBLTE_S1AP_IE_ID_E_RABFAILEDTOBERELEASEDLIST                     = 103,
  LIBLTE_S1AP_IE_ID_SOURCE_TOTARGET_TRANSPARENTCONTAINER            = 104,
  LIBLTE_S1AP_IE_ID_SERVEDGUMMEIS                                   = 105,
  LIBLTE_S1AP_IE_ID_SUBSCRIBERPROFILEIDFORRFP                       = 106,
  LIBLTE_S1AP_IE_ID_UESECURITYCAPABILITIES                          = 107,
  LIBLTE_S1AP_IE_ID_CSFALLBACKINDICATOR                             = 108,
  LIBLTE_S1AP_IE_ID_CNDOMAIN                                        = 109,
  LIBLTE_S1AP_IE_ID_E_RABRELEASEDLIST                               = 110,
  LIBLTE_S1AP_IE_ID_MESSAGEIDENTIFIER                               = 111,
  LIBLTE_S1AP_IE_ID_SERIALNUMBER                                    = 112,
  LIBLTE_S1AP_IE_ID_WARNINGAREALIST                                 = 113,
  LIBLTE_S1AP_IE_ID_REPETITIONPERIOD                                = 114,
  LIBLTE_S1AP_IE_ID_NUMBEROFBROADCASTREQUEST                        = 115,
  LIBLTE_S1AP_IE_ID_WARNINGTYPE                                     = 116,
  LIBLTE_S1AP_IE_ID_WARNINGSECURITYINFO                             = 117,
  LIBLTE_S1AP_IE_ID_DATACODINGSCHEME                                = 118,
  LIBLTE_S1AP_IE_ID_WARNINGMESSAGECONTENTS                          = 119,
  LIBLTE_S1AP_IE_ID_BROADCASTCOMPLETEDAREALIST                      = 120,
  LIBLTE_S1AP_IE_ID_INTER_SYSTEMINFORMATIONTRANSFERTYPEEDT          = 121,
  LIBLTE_S1AP_IE_ID_INTER_SYSTEMINFORMATIONTRANSFERTYPEMDT          = 122,
  LIBLTE_S1AP_IE_ID_TARGET_TOSOURCE_TRANSPARENTCONTAINER            = 123,
  LIBLTE_S1AP_IE_ID_SRVCCOPERATIONPOSSIBLE                          = 124,
  LIBLTE_S1AP_IE_ID_SRVCCHOINDICATION                               = 125,
  LIBLTE_S1AP_IE_ID_NAS_DOWNLINKCOUNT                               = 126,
  LIBLTE_S1AP_IE_ID_CSG_ID                                          = 127,
  LIBLTE_S1AP_IE_ID_CSG_IDLIST                                      = 128,
  LIBLTE_S1AP_IE_ID_SONCONFIGURATIONTRANSFERECT                     = 129,
  LIBLTE_S1AP_IE_ID_SONCONFIGURATIONTRANSFERMCT                     = 130,
  LIBLTE_S1AP_IE_ID_TRACECOLLECTIONENTITYIPADDRESS                  = 131,
  LIBLTE_S1AP_IE_ID_MSCLASSMARK2                                    = 132,
  LIBLTE_S1AP_IE_ID_MSCLASSMARK3                                    = 133,
  LIBLTE_S1AP_IE_ID_RRC_ESTABLISHMENT_CAUSE                         = 134,
  LIBLTE_S1AP_IE_ID_NASSECURITYPARAMETERSFROME_UTRAN                = 135,
  LIBLTE_S1AP_IE_ID_NASSECURITYPARAMETERSTOE_UTRAN                  = 136,
  LIBLTE_S1AP_IE_ID_DEFAULTPAGINGDRX                                = 137,
  LIBLTE_S1AP_IE_ID_SOURCE_TOTARGET_TRANSPARENTCONTAINER_SECONDARY  = 138,
  LIBLTE_S1AP_IE_ID_TARGET_TOSOURCE_TRANSPARENTCONTAINER_SECONDARY  = 139,
  LIBLTE_S1AP_IE_ID_EUTRANROUNDTRIPDELAYESTIMATIONINFO              = 140,
  LIBLTE_S1AP_IE_ID_BROADCASTCANCELLEDAREALIST                      = 141,
  LIBLTE_S1AP_IE_ID_CONCURRENTWARNINGMESSAGEINDICATOR               = 142,
  LIBLTE_S1AP_IE_ID_DATA_FORWARDING_NOT_POSSIBLE                    = 143,
  LIBLTE_S1AP_IE_ID_EXTENDEDREPETITIONPERIOD                        = 144,
  LIBLTE_S1AP_IE_ID_CELLACCESSMODE                                  = 145,
  LIBLTE_S1AP_IE_ID_CSGMEMBERSHIPSTATUS                             = 146,
  LIBLTE_S1AP_IE_ID_LPPA_PDU                                        = 147,
  LIBLTE_S1AP_IE_ID_ROUTING_ID                                      = 148,
  LIBLTE_S1AP_IE_ID_TIME_SYNCHRONIZATION_INFO                       = 149,
  LIBLTE_S1AP_IE_ID_PS_SERVICENOTAVAILABLE                          = 150,
  LIBLTE_S1AP_IE_ID_PAGINGPRIORITY                                  = 151,
  LIBLTE_S1AP_IE_ID_X2TNLCONFIGURATIONINFO                          = 152,
  LIBLTE_S1AP_IE_ID_ENBX2EXTENDEDTRANSPORTLAYERADDRESSES            = 153,
  LIBLTE_S1AP_IE_ID_GUMMEILIST                                      = 154,
  LIBLTE_S1AP_IE_ID_GW_TRANSPORTLAYERADDRESS                        = 155,
  LIBLTE_S1AP_IE_ID_CORRELATION_ID                                  = 156,
  LIBLTE_S1AP_IE_ID_SOURCEMME_GUMMEI                                = 157,
  LIBLTE_S1AP_IE_ID_MME_UE_S1AP_ID_2                                = 158,
  LIBLTE_S1AP_IE_ID_REGISTEREDLAI                                   = 159,
  LIBLTE_S1AP_IE_ID_RELAYNODE_INDICATOR                             = 160,
  LIBLTE_S1AP_IE_ID_TRAFFICLOADREDUCTIONINDICATION                  = 161,
  LIBLTE_S1AP_IE_ID_MDTCONFIGURATION                                = 162,
  LIBLTE_S1AP_IE_ID_MMERELAYSUPPORTINDICATOR                        = 163,
  LIBLTE_S1AP_IE_ID_GWCONTEXTRELEASEINDICATION                      = 164,
  LIBLTE_S1AP_IE_ID_MANAGEMENTBASEDMDTALLOWED                       = 165,
  LIBLTE_S1AP_IE_ID_PRIVACYINDICATOR                                = 166,
  LIBLTE_S1AP_IE_ID_TIME_UE_STAYEDINCELL_ENHANCEDGRANULARITY        = 167,
  LIBLTE_S1AP_IE_ID_HO_CAUSE                                        = 168,
  LIBLTE_S1AP_IE_ID_VOICESUPPORTMATCHINDICATOR                      = 169,
  LIBLTE_S1AP_IE_ID_GUMMEITYPE                                      = 170,
  LIBLTE_S1AP_IE_ID_M3CONFIGURATION                                 = 171,
  LIBLTE_S1AP_IE_ID_M4CONFIGURATION                                 = 172,
  LIBLTE_S1AP_IE_ID_M5CONFIGURATION                                 = 173,
  LIBLTE_S1AP_IE_ID_MDT_LOCATION_INFO                               = 174,
  LIBLTE_S1AP_IE_ID_MOBILITYINFORMATION                             = 175,
  LIBLTE_S1AP_IE_ID_TUNNEL_INFORMATION_FOR_BBF                      = 176,
  LIBLTE_S1AP_IE_ID_MANAGEMENTBASEDMDTPLMNLIST                      = 177,
  LIBLTE_S1AP_IE_ID_SIGNALLINGBASEDMDTPLMNLIST                      = 178,
  LIBLTE_S1AP_IE_ID_ULCOUNTVALUEEXTENDED                            = 179,
  LIBLTE_S1AP_IE_ID_DLCOUNTVALUEEXTENDED                            = 180,
  LIBLTE_S1AP_IE_ID_RECEIVESTATUSOFULPDCPSDUSEXTENDED               = 181,
  LIBLTE_S1AP_IE_ID_ECGILISTFORRESTART                              = 182,
  LIBLTE_S1AP_IE_ID_SIPTO_CORRELATION_ID                            = 183,
  LIBLTE_S1AP_IE_ID_SIPTO_L_GW_TRANSPORTLAYERADDRESS                = 184,
  LIBLTE_S1AP_IE_ID_TRANSPORTINFORMATION                            = 185,
  LIBLTE_S1AP_IE_ID_LHN_ID                                          = 186,
  LIBLTE_S1AP_IE_ID_ADDITIONALCSFALLBACKINDICATOR                   = 187,
  LIBLTE_S1AP_IE_ID_TAILISTFORRESTART                               = 188,
  LIBLTE_S1AP_IE_ID_USERLOCATIONINFORMATION                         = 189,
  LIBLTE_S1AP_IE_ID_EMERGENCYAREAIDLISTFORRESTART                   = 190,
  LIBLTE_S1AP_IE_ID_KILLALLWARNINGMESSAGES                          = 191,
  LIBLTE_S1AP_IE_N_ITEMS,
}LIBLTE_S1AP_IE_ENUM;
static const char liblte_s1ap_ie_text[LIBLTE_S1AP_IE_N_ITEMS][64] = { 
  "id-MME-UE-S1AP-ID",
  "id-HandoverType",
  "id-Cause",
  "id-SourceID",
  "id-TargetID",
  "id-spare5",
  "id-spare6",
  "id-spare7",
  "id-eNB-UE-S1AP-ID",
  "id-spare9",
  "id-spare10",
  "id-spare11",
  "id-E-RABSubjecttoDataForwardingList",
  "id-E-RABtoReleaseListHOCmd",
  "id-E-RABDataForwardingItem",
  "id-E-RABReleaseItemBearerRelComp",
  "id-E-RABToBeSetupListBearerSUReq",
  "id-E-RABToBeSetupItemBearerSUReq",
  "id-E-RABAdmittedList",
  "id-E-RABFailedToSetupListHOReqAck",
  "id-E-RABAdmittedItem",
  "id-E-RABFailedtoSetupItemHOReqAck",
  "id-E-RABToBeSwitchedDLList",
  "id-E-RABToBeSwitchedDLItem",
  "id-E-RABToBeSetupListCtxtSUReq",
  "id-TraceActivation",
  "id-NAS-PDU",
  "id-E-RABToBeSetupItemHOReq",
  "id-E-RABSetupListBearerSURes",
  "id-E-RABFailedToSetupListBearerSURes",
  "id-E-RABToBeModifiedListBearerModReq",
  "id-E-RABModifyListBearerModRes",
  "id-E-RABFailedToModifyList",
  "id-E-RABToBeReleasedList",
  "id-E-RABFailedToReleaseList",
  "id-E-RABItem",
  "id-E-RABToBeModifiedItemBearerModReq",
  "id-E-RABModifyItemBearerModRes",
  "id-E-RABReleaseItem",
  "id-E-RABSetupItemBearerSURes",
  "id-SecurityContext",
  "id-HandoverRestrictionList",
  "id-spare42",
  "id-UEPagingID",
  "id-pagingDRX",
  "id-spare45",
  "id-TAIList",
  "id-TAIItem",
  "id-E-RABFailedToSetupListCtxtSURes",
  "id-E-RABReleaseItemHOCmd",
  "id-E-RABSetupItemCtxtSURes",
  "id-E-RABSetupListCtxtSURes",
  "id-E-RABToBeSetupItemCtxtSUReq",
  "id-E-RABToBeSetupListHOReq",
  "id-spare54",
  "id-GERANtoLTEHOInformationRes",
  "id-spare56",
  "id-UTRANtoLTEHOInformationRes",
  "id-CriticalityDiagnostics",
  "id-Global-ENB-ID",
  "id-eNBname",
  "id-MMEname",
  "id-spare62",
  "id-ServedPLMNs",
  "id-SupportedTAs",
  "id-TimeToWait",
  "id-uEaggregateMaximumBitrate",
  "id-TAI",
  "id-spare68",
  "id-E-RABReleaseListBearerRelComp",
  "id-cdma2000PDU",
  "id-cdma2000RATType",
  "id-cdma2000SectorID",
  "id-SecurityKey",
  "id-UERadioCapability",
  "id-GUMMEI-ID",
  "id-spare76",
  "id-spare77",
  "id-E-RABInformationListItem",
  "id-Direct-Forwarding-Path-Availability",
  "id-UEIdentityIndexValue",
  "id-spare81",
  "id-spare82",
  "id-cdma2000HOStatus",
  "id-cdma2000HORequiredIndication",
  "id-spare85",
  "id-E-UTRAN-Trace-ID",
  "id-RelativeMMECapacity",
  "id-SourceMME-UE-S1AP-ID",
  "id-Bearers-SubjectToStatusTransfer-Item",
  "id-eNB-StatusTransfer-TransparentContainer",
  "id-UE-associatedLogicalS1-ConnectionItem",
  "id-ResetType",
  "id-UE-associatedLogicalS1-ConnectionListResAck",
  "id-E-RABToBeSwitchedULItem",
  "id-E-RABToBeSwitchedULList",
  "id-S-TMSI",
  "id-cdma2000OneXRAND",
  "id-RequestType",
  "id-UE-S1AP-IDs",
  "id-EUTRAN-CGI",
  "id-OverloadResponse",
  "id-cdma2000OneXSRVCCInfo",
  "id-E-RABFailedToBeReleasedList",
  "id-Source-ToTarget-TransparentContainer",
  "id-ServedGUMMEIs",
  "id-SubscriberProfileIDforRFP",
  "id-UESecurityCapabilities",
  "id-CSFallbackIndicator",
  "id-CNDomain",
  "id-E-RABReleasedList",
  "id-MessageIdentifier",
  "id-SerialNumber",
  "id-WarningAreaList",
  "id-RepetitionPeriod",
  "id-NumberofBroadcastRequest",
  "id-WarningType",
  "id-WarningSecurityInfo",
  "id-DataCodingScheme",
  "id-WarningMessageContents",
  "id-BroadcastCompletedAreaList",
  "id-Inter-SystemInformationTransferTypeEDT",
  "id-Inter-SystemInformationTransferTypeMDT",
  "id-Target-ToSource-TransparentContainer",
  "id-SRVCCOperationPossible",
  "id-SRVCCHOIndication",
  "id-NAS-DownlinkCount",
  "id-CSG-Id",
  "id-CSG-IdList",
  "id-SONConfigurationTransferECT",
  "id-SONConfigurationTransferMCT",
  "id-TraceCollectionEntityIPAddress",
  "id-MSClassmark2",
  "id-MSClassmark3",
  "id-RRC-Establishment-Cause",
  "id-NASSecurityParametersfromE-UTRAN",
  "id-NASSecurityParameterstoE-UTRAN",
  "id-DefaultPagingDRX",
  "id-Source-ToTarget-TransparentContainer-Secondary",
  "id-Target-ToSource-TransparentContainer-Secondary",
  "id-EUTRANRoundTripDelayEstimationInfo",
  "id-BroadcastCancelledAreaList",
  "id-ConcurrentWarningMessageIndicator",
  "id-Data-Forwarding-Not-Possible",
  "id-ExtendedRepetitionPeriod",
  "id-CellAccessMode",
  "id-CSGMembershipStatus",
  "id-LPPa-PDU",
  "id-Routing-ID",
  "id-Time-Synchronization-Info",
  "id-PS-ServiceNotAvailable",
  "id-PagingPriority",
  "id-x2TNLConfigurationInfo",
  "id-eNBX2ExtendedTransportLayerAddresses",
  "id-GUMMEIList",
  "id-GW-TransportLayerAddress",
  "id-Correlation-ID",
  "id-SourceMME-GUMMEI",
  "id-MME-UE-S1AP-ID-2",
  "id-RegisteredLAI",
  "id-RelayNode-Indicator",
  "id-TrafficLoadReductionIndication",
  "id-MDTConfiguration",
  "id-MMERelaySupportIndicator",
  "id-GWContextReleaseIndication",
  "id-ManagementBasedMDTAllowed",
  "id-PrivacyIndicator",
  "id-Time-UE-StayedInCell-EnhancedGranularity",
  "id-HO-Cause",
  "id-VoiceSupportMatchIndicator",
  "id-GUMMEIType",
  "id-M3Configuration",
  "id-M4Configuration",
  "id-M5Configuration",
  "id-MDT-Location-Info",
  "id-MobilityInformation",
  "id-Tunnel-Information-for-BBF",
  "id-ManagementBasedMDTPLMNList",
  "id-SignallingBasedMDTPLMNList",
  "id-ULCOUNTValueExtended",
  "id-DLCOUNTValueExtended",
  "id-ReceiveStatusOfULPDCPSDUsExtended",
  "id-ECGIListForRestart",
  "id-SIPTO-Correlation-ID",
  "id-SIPTO-L-GW-TransportLayerAddress",
  "id-TransportInformation",
  "id-LHN-ID",
  "id-AdditionalCSFallbackIndicator",
  "id-TAIListForRestart",
  "id-UserLocationInformation",
  "id-EmergencyAreaIDListForRestart",
  "id-KillAllWarningMessages",
};


/*******************************************************************************
/* ProtocolIE Criticality ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_NOTIFY,
  LIBLTE_S1AP_CRITICALITY_N_ITEMS,
}LIBLTE_S1AP_CRITICALITY_ENUM;
static const char liblte_s1ap_criticality_text[LIBLTE_S1AP_CRITICALITY_N_ITEMS][80] = {
  "reject",
  "ignore",
  "notify",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_criticality(
  LIBLTE_S1AP_CRITICALITY_ENUM                                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_criticality(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CRITICALITY_ENUM                                 *ie);

/*******************************************************************************
/* ProtocolIE local INTEGER
********************************************************************************/
typedef struct{
uint16_t local;
}LIBLTE_S1AP_LOCAL_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_local(
  LIBLTE_S1AP_LOCAL_STRUCT                                     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_local(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LOCAL_STRUCT                                     *ie);

/*******************************************************************************
/* ProtocolIE PrivateIE_ID CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_PRIVATEIE_ID_CHOICE_LOCAL,
  LIBLTE_S1AP_PRIVATEIE_ID_CHOICE_GLOBAL,
  LIBLTE_S1AP_PRIVATEIE_ID_CHOICE_N_ITEMS,
}LIBLTE_S1AP_PRIVATEIE_ID_CHOICE_ENUM;
static const char liblte_s1ap_privateie_id_choice_text[LIBLTE_S1AP_PRIVATEIE_ID_CHOICE_N_ITEMS][50] = {
  "local",
  "global",
};

typedef union{
  LIBLTE_S1AP_LOCAL_STRUCT                                     local;
  LIBLTE_ASN1_OID_STRUCT                                       global;
}LIBLTE_S1AP_PRIVATEIE_ID_CHOICE_UNION;

typedef struct{
  LIBLTE_S1AP_PRIVATEIE_ID_CHOICE_UNION choice;
  LIBLTE_S1AP_PRIVATEIE_ID_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_PRIVATEIE_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_privateie_id(
  LIBLTE_S1AP_PRIVATEIE_ID_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_privateie_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PRIVATEIE_ID_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE ProtocolExtensionID INTEGER
********************************************************************************/
typedef struct{
uint16_t ProtocolExtensionID;
}LIBLTE_S1AP_PROTOCOLEXTENSIONID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_protocolextensionid(
  LIBLTE_S1AP_PROTOCOLEXTENSIONID_STRUCT                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_protocolextensionid(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PROTOCOLEXTENSIONID_STRUCT                       *ie);

/*******************************************************************************
/* ProtocolIE TriggeringMessage ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_TRIGGERINGMESSAGE_INITIATING_MESSAGE,
  LIBLTE_S1AP_TRIGGERINGMESSAGE_SUCCESSFUL_OUTCOME,
  LIBLTE_S1AP_TRIGGERINGMESSAGE_UNSUCCESSFULL_OUTCOME,
  LIBLTE_S1AP_TRIGGERINGMESSAGE_N_ITEMS,
}LIBLTE_S1AP_TRIGGERINGMESSAGE_ENUM;
static const char liblte_s1ap_triggeringmessage_text[LIBLTE_S1AP_TRIGGERINGMESSAGE_N_ITEMS][80] = {
  "initiating-message",
  "successful-outcome",
  "unsuccessfull-outcome",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_triggeringmessage(
  LIBLTE_S1AP_TRIGGERINGMESSAGE_ENUM                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_triggeringmessage(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TRIGGERINGMESSAGE_ENUM                           *ie);

/*******************************************************************************
/* ProtocolIE Presence ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_PRESENCE_OPTIONAL,
  LIBLTE_S1AP_PRESENCE_CONDITIONAL,
  LIBLTE_S1AP_PRESENCE_MANDATORY,
  LIBLTE_S1AP_PRESENCE_N_ITEMS,
}LIBLTE_S1AP_PRESENCE_ENUM;
static const char liblte_s1ap_presence_text[LIBLTE_S1AP_PRESENCE_N_ITEMS][80] = {
  "optional",
  "conditional",
  "mandatory",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_presence(
  LIBLTE_S1AP_PRESENCE_ENUM                                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_presence(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PRESENCE_ENUM                                    *ie);

/*******************************************************************************
/* ProtocolIE ProtocolIE_ID INTEGER
********************************************************************************/
typedef struct{
uint16_t ProtocolIE_ID;
}LIBLTE_S1AP_PROTOCOLIE_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_protocolie_id(
  LIBLTE_S1AP_PROTOCOLIE_ID_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_protocolie_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PROTOCOLIE_ID_STRUCT                             *ie);

/*******************************************************************************
/* ProtocolIE ProcedureCode INTEGER
********************************************************************************/
typedef struct{
uint8_t ProcedureCode;
}LIBLTE_S1AP_PROCEDURECODE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_procedurecode(
  LIBLTE_S1AP_PROCEDURECODE_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_procedurecode(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PROCEDURECODE_STRUCT                             *ie);

/*******************************************************************************
/* ProtocolIE ProtocolIE_Field SEQUENCE
********************************************************************************/
typedef struct{
  LIBLTE_S1AP_PROTOCOLIE_ID_STRUCT                             id;
  LIBLTE_S1AP_CRITICALITY_ENUM                                 criticality;
  LIBLTE_ASN1_OPEN_TYPE_STRUCT                                 value;
}LIBLTE_S1AP_PROTOCOLIE_FIELD_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_protocolie_field(
  LIBLTE_S1AP_PROTOCOLIE_FIELD_STRUCT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_protocolie_field(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PROTOCOLIE_FIELD_STRUCT                          *ie);

/*******************************************************************************
/* ProtocolIE ProtocolExtensionField SEQUENCE
********************************************************************************/
typedef struct{
  LIBLTE_S1AP_PROTOCOLEXTENSIONID_STRUCT                       id;
  LIBLTE_S1AP_CRITICALITY_ENUM                                 criticality;
  LIBLTE_ASN1_OPEN_TYPE_STRUCT                                 extensionValue;
}LIBLTE_S1AP_PROTOCOLEXTENSIONFIELD_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_protocolextensionfield(
  LIBLTE_S1AP_PROTOCOLEXTENSIONFIELD_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_protocolextensionfield(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PROTOCOLEXTENSIONFIELD_STRUCT                    *ie);

/*******************************************************************************
/* ProtocolIE ProtocolIE_FieldPair SEQUENCE
********************************************************************************/
typedef struct{
  LIBLTE_S1AP_PROTOCOLIE_ID_STRUCT                             id;
  LIBLTE_S1AP_CRITICALITY_ENUM                                 firstCriticality;
  LIBLTE_ASN1_OPEN_TYPE_STRUCT                                 firstValue;
  LIBLTE_S1AP_CRITICALITY_ENUM                                 secondCriticality;
  LIBLTE_ASN1_OPEN_TYPE_STRUCT                                 secondValue;
}LIBLTE_S1AP_PROTOCOLIE_FIELDPAIR_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_protocolie_fieldpair(
  LIBLTE_S1AP_PROTOCOLIE_FIELDPAIR_STRUCT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_protocolie_fieldpair(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PROTOCOLIE_FIELDPAIR_STRUCT                      *ie);

/*******************************************************************************
/* ProtocolIE ProtocolExtensionContainer DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_PROTOCOLEXTENSIONFIELD_STRUCT                    buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_protocolextensioncontainer(
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_protocolextensioncontainer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                *ie);

/*******************************************************************************
/* ProtocolIE ProtocolIE_ContainerPair DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:0, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_PROTOCOLIE_FIELDPAIR_STRUCT                      buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_PROTOCOLIE_CONTAINERPAIR_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_protocolie_containerpair(
  LIBLTE_S1AP_PROTOCOLIE_CONTAINERPAIR_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_protocolie_containerpair(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PROTOCOLIE_CONTAINERPAIR_STRUCT                  *ie);

/*******************************************************************************
/* ProtocolIE ProtocolIE_ContainerPairList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:None, ub:None
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_PROTOCOLIE_CONTAINERPAIR_STRUCT                  buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_PROTOCOLIE_CONTAINERPAIRLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_protocolie_containerpairlist(
  LIBLTE_S1AP_PROTOCOLIE_CONTAINERPAIRLIST_STRUCT              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_protocolie_containerpairlist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PROTOCOLIE_CONTAINERPAIRLIST_STRUCT              *ie);

/*******************************************************************************
/* ProtocolIE PrivateIE_Field SEQUENCE
********************************************************************************/
typedef struct{
  LIBLTE_S1AP_PRIVATEIE_ID_STRUCT                              id;
  LIBLTE_S1AP_CRITICALITY_ENUM                                 criticality;
  LIBLTE_ASN1_OPEN_TYPE_STRUCT                                 value;
}LIBLTE_S1AP_PRIVATEIE_FIELD_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_privateie_field(
  LIBLTE_S1AP_PRIVATEIE_FIELD_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_privateie_field(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PRIVATEIE_FIELD_STRUCT                           *ie);

/*******************************************************************************
/* ProtocolIE ProtocolIE_SingleContainer SEQUENCE
********************************************************************************/
typedef struct{
  LIBLTE_S1AP_PROTOCOLIE_ID_STRUCT                             id;
  LIBLTE_S1AP_CRITICALITY_ENUM                                 criticality;
  LIBLTE_ASN1_OPEN_TYPE_STRUCT                                 value;
}LIBLTE_S1AP_PROTOCOLIE_SINGLECONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_protocolie_singlecontainer(
  LIBLTE_S1AP_PROTOCOLIE_SINGLECONTAINER_STRUCT                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_protocolie_singlecontainer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PROTOCOLIE_SINGLECONTAINER_STRUCT                *ie);

/*******************************************************************************
/* ProtocolIE PrivateIE_Container DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_PRIVATEIE_FIELD_STRUCT                           buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_PRIVATEIE_CONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_privateie_container(
  LIBLTE_S1AP_PRIVATEIE_CONTAINER_STRUCT                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_privateie_container(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PRIVATEIE_CONTAINER_STRUCT                       *ie);

/*******************************************************************************
/* ProtocolIE BitRate INTEGER
********************************************************************************/
typedef struct{
uint32_t BitRate;
}LIBLTE_S1AP_BITRATE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_bitrate(
  LIBLTE_S1AP_BITRATE_STRUCT                                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_bitrate(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_BITRATE_STRUCT                                   *ie);

/*******************************************************************************
/* ProtocolIE CauseMisc ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CAUSEMISC_CONTROL_PROCESSING_OVERLOAD,
  LIBLTE_S1AP_CAUSEMISC_NOT_ENOUGH_USER_PLANE_PROCESSING_RESOURCES,
  LIBLTE_S1AP_CAUSEMISC_HARDWARE_FAILURE,
  LIBLTE_S1AP_CAUSEMISC_OM_INTERVENTION,
  LIBLTE_S1AP_CAUSEMISC_UNSPECIFIED,
  LIBLTE_S1AP_CAUSEMISC_UNKNOWN_PLMN,
  LIBLTE_S1AP_CAUSEMISC_N_ITEMS,
}LIBLTE_S1AP_CAUSEMISC_ENUM;
static const char liblte_s1ap_causemisc_text[LIBLTE_S1AP_CAUSEMISC_N_ITEMS][80] = {
  "control-processing-overload",
  "not-enough-user-plane-processing-resources",
  "hardware-failure",
  "om-intervention",
  "unspecified",
  "unknown-PLMN",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CAUSEMISC_ENUM e;
}LIBLTE_S1AP_CAUSEMISC_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_causemisc(
  LIBLTE_S1AP_CAUSEMISC_ENUM_EXT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_causemisc(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CAUSEMISC_ENUM_EXT                               *ie);

/*******************************************************************************
/* ProtocolIE CauseRadioNetwork ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CAUSERADIONETWORK_UNSPECIFIED,
  LIBLTE_S1AP_CAUSERADIONETWORK_TX2RELOCOVERALL_EXPIRY,
  LIBLTE_S1AP_CAUSERADIONETWORK_SUCCESSFUL_HANDOVER,
  LIBLTE_S1AP_CAUSERADIONETWORK_RELEASE_DUE_TO_EUTRAN_GENERATED_REASON,
  LIBLTE_S1AP_CAUSERADIONETWORK_HANDOVER_CANCELLED,
  LIBLTE_S1AP_CAUSERADIONETWORK_PARTIAL_HANDOVER,
  LIBLTE_S1AP_CAUSERADIONETWORK_HO_FAILURE_IN_TARGET_EPC_ENB_OR_TARGET_SYSTEM,
  LIBLTE_S1AP_CAUSERADIONETWORK_HO_TARGET_NOT_ALLOWED,
  LIBLTE_S1AP_CAUSERADIONETWORK_TS1RELOCOVERALL_EXPIRY,
  LIBLTE_S1AP_CAUSERADIONETWORK_TS1RELOCPREP_EXPIRY,
  LIBLTE_S1AP_CAUSERADIONETWORK_CELL_NOT_AVAILABLE,
  LIBLTE_S1AP_CAUSERADIONETWORK_UNKNOWN_TARGETID,
  LIBLTE_S1AP_CAUSERADIONETWORK_NO_RADIO_RESOURCES_AVAILABLE_IN_TARGET_CELL,
  LIBLTE_S1AP_CAUSERADIONETWORK_UNKNOWN_MME_UE_S1AP_ID,
  LIBLTE_S1AP_CAUSERADIONETWORK_UNKNOWN_ENB_UE_S1AP_ID,
  LIBLTE_S1AP_CAUSERADIONETWORK_UNKNOWN_PAIR_UE_S1AP_ID,
  LIBLTE_S1AP_CAUSERADIONETWORK_HANDOVER_DESIRABLE_FOR_RADIO_REASON,
  LIBLTE_S1AP_CAUSERADIONETWORK_TIME_CRITICAL_HANDOVER,
  LIBLTE_S1AP_CAUSERADIONETWORK_RESOURCE_OPTIMISATION_HANDOVER,
  LIBLTE_S1AP_CAUSERADIONETWORK_REDUCE_LOAD_IN_SERVING_CELL,
  LIBLTE_S1AP_CAUSERADIONETWORK_USER_INACTIVITY,
  LIBLTE_S1AP_CAUSERADIONETWORK_RADIO_CONNECTION_WITH_UE_LOST,
  LIBLTE_S1AP_CAUSERADIONETWORK_LOAD_BALANCING_TAU_REQUIRED,
  LIBLTE_S1AP_CAUSERADIONETWORK_CS_FALLBACK_TRIGGERED,
  LIBLTE_S1AP_CAUSERADIONETWORK_UE_NOT_AVAILABLE_FOR_PS_SERVICE,
  LIBLTE_S1AP_CAUSERADIONETWORK_RADIO_RESOURCES_NOT_AVAILABLE,
  LIBLTE_S1AP_CAUSERADIONETWORK_FAILURE_IN_RADIO_INTERFACE_PROCEDURE,
  LIBLTE_S1AP_CAUSERADIONETWORK_INVALID_QOS_COMBINATION,
  LIBLTE_S1AP_CAUSERADIONETWORK_INTERRAT_REDIRECTION,
  LIBLTE_S1AP_CAUSERADIONETWORK_INTERACTION_WITH_OTHER_PROCEDURE,
  LIBLTE_S1AP_CAUSERADIONETWORK_UNKNOWN_E_RAB_ID,
  LIBLTE_S1AP_CAUSERADIONETWORK_MULTIPLE_E_RAB_ID_INSTANCES,
  LIBLTE_S1AP_CAUSERADIONETWORK_ENCRYPTION_AND_OR_INTEGRITY_PROTECTION_ALGORITHMS_NOT_SUPPORTED,
  LIBLTE_S1AP_CAUSERADIONETWORK_S1_INTRA_SYSTEM_HANDOVER_TRIGGERED,
  LIBLTE_S1AP_CAUSERADIONETWORK_S1_INTER_SYSTEM_HANDOVER_TRIGGERED,
  LIBLTE_S1AP_CAUSERADIONETWORK_X2_HANDOVER_TRIGGERED,
  LIBLTE_S1AP_CAUSERADIONETWORK_REDIRECTION_TOWARDS_1XRTT,
  LIBLTE_S1AP_CAUSERADIONETWORK_NOT_SUPPORTED_QCI_VALUE,
  LIBLTE_S1AP_CAUSERADIONETWORK_INVALID_CSG_ID,
  LIBLTE_S1AP_CAUSERADIONETWORK_N_ITEMS,
}LIBLTE_S1AP_CAUSERADIONETWORK_ENUM;
static const char liblte_s1ap_causeradionetwork_text[LIBLTE_S1AP_CAUSERADIONETWORK_N_ITEMS][80] = {
  "unspecified",
  "tx2relocoverall-expiry",
  "successful-handover",
  "release-due-to-eutran-generated-reason",
  "handover-cancelled",
  "partial-handover",
  "ho-failure-in-target-EPC-eNB-or-target-system",
  "ho-target-not-allowed",
  "tS1relocoverall-expiry",
  "tS1relocprep-expiry",
  "cell-not-available",
  "unknown-targetID",
  "no-radio-resources-available-in-target-cell",
  "unknown-mme-ue-s1ap-id",
  "unknown-enb-ue-s1ap-id",
  "unknown-pair-ue-s1ap-id",
  "handover-desirable-for-radio-reason",
  "time-critical-handover",
  "resource-optimisation-handover",
  "reduce-load-in-serving-cell",
  "user-inactivity",
  "radio-connection-with-ue-lost",
  "load-balancing-tau-required",
  "cs-fallback-triggered",
  "ue-not-available-for-ps-service",
  "radio-resources-not-available",
  "failure-in-radio-interface-procedure",
  "invalid-qos-combination",
  "interrat-redirection",
  "interaction-with-other-procedure",
  "unknown-E-RAB-ID",
  "multiple-E-RAB-ID-instances",
  "encryption-and-or-integrity-protection-algorithms-not-supported",
  "s1-intra-system-handover-triggered",
  "s1-inter-system-handover-triggered",
  "x2-handover-triggered",
  "redirection-towards-1xRTT",
  "not-supported-QCI-value",
  "invalid-CSG-Id",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CAUSERADIONETWORK_ENUM e;
}LIBLTE_S1AP_CAUSERADIONETWORK_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_causeradionetwork(
  LIBLTE_S1AP_CAUSERADIONETWORK_ENUM_EXT                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_causeradionetwork(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CAUSERADIONETWORK_ENUM_EXT                       *ie);

/*******************************************************************************
/* ProtocolIE CauseNas ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CAUSENAS_NORMAL_RELEASE,
  LIBLTE_S1AP_CAUSENAS_AUTHENTICATION_FAILURE,
  LIBLTE_S1AP_CAUSENAS_DETACH,
  LIBLTE_S1AP_CAUSENAS_UNSPECIFIED,
  LIBLTE_S1AP_CAUSENAS_CSG_SUBSCRIPTION_EXPIRY,
  LIBLTE_S1AP_CAUSENAS_N_ITEMS,
}LIBLTE_S1AP_CAUSENAS_ENUM;
static const char liblte_s1ap_causenas_text[LIBLTE_S1AP_CAUSENAS_N_ITEMS][80] = {
  "normal-release",
  "authentication-failure",
  "detach",
  "unspecified",
  "csg-subscription-expiry",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CAUSENAS_ENUM e;
}LIBLTE_S1AP_CAUSENAS_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_causenas(
  LIBLTE_S1AP_CAUSENAS_ENUM_EXT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_causenas(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CAUSENAS_ENUM_EXT                                *ie);

/*******************************************************************************
/* ProtocolIE CellIdentity STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_CELLIDENTITY_BIT_STRING_LEN 28
typedef struct{
  uint8_t  buffer[28];
}LIBLTE_S1AP_CELLIDENTITY_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cellidentity(
  LIBLTE_S1AP_CELLIDENTITY_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cellidentity(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CELLIDENTITY_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE Cdma2000PDU DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_CDMA2000PDU_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cdma2000pdu(
  LIBLTE_S1AP_CDMA2000PDU_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cdma2000pdu(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CDMA2000PDU_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE Cdma2000SectorID DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_CDMA2000SECTORID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cdma2000sectorid(
  LIBLTE_S1AP_CDMA2000SECTORID_STRUCT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cdma2000sectorid(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CDMA2000SECTORID_STRUCT                          *ie);

/*******************************************************************************
/* ProtocolIE Cdma2000HORequiredIndication ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CDMA2000HOREQUIREDINDICATION_TRUE,
  LIBLTE_S1AP_CDMA2000HOREQUIREDINDICATION_N_ITEMS,
}LIBLTE_S1AP_CDMA2000HOREQUIREDINDICATION_ENUM;
static const char liblte_s1ap_cdma2000horequiredindication_text[LIBLTE_S1AP_CDMA2000HOREQUIREDINDICATION_N_ITEMS][80] = {
  "true",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CDMA2000HOREQUIREDINDICATION_ENUM e;
}LIBLTE_S1AP_CDMA2000HOREQUIREDINDICATION_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cdma2000horequiredindication(
  LIBLTE_S1AP_CDMA2000HOREQUIREDINDICATION_ENUM_EXT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cdma2000horequiredindication(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CDMA2000HOREQUIREDINDICATION_ENUM_EXT            *ie);

/*******************************************************************************
/* ProtocolIE Cdma2000OneXMSI DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_CDMA2000ONEXMSI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cdma2000onexmsi(
  LIBLTE_S1AP_CDMA2000ONEXMSI_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cdma2000onexmsi(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CDMA2000ONEXMSI_STRUCT                           *ie);

/*******************************************************************************
/* ProtocolIE Cdma2000OneXRAND DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_CDMA2000ONEXRAND_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cdma2000onexrand(
  LIBLTE_S1AP_CDMA2000ONEXRAND_STRUCT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cdma2000onexrand(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CDMA2000ONEXRAND_STRUCT                          *ie);

/*******************************************************************************
/* ProtocolIE CNDomain ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CNDOMAIN_PS,
  LIBLTE_S1AP_CNDOMAIN_CS,
  LIBLTE_S1AP_CNDOMAIN_N_ITEMS,
}LIBLTE_S1AP_CNDOMAIN_ENUM;
static const char liblte_s1ap_cndomain_text[LIBLTE_S1AP_CNDOMAIN_N_ITEMS][80] = {
  "ps",
  "cs",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cndomain(
  LIBLTE_S1AP_CNDOMAIN_ENUM                                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cndomain(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CNDOMAIN_ENUM                                    *ie);

/*******************************************************************************
/* ProtocolIE Correlation_ID STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_CORRELATION_ID_OCTET_STRING_LEN 4
typedef struct{
  uint8_t  buffer[4];
}LIBLTE_S1AP_CORRELATION_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_correlation_id(
  LIBLTE_S1AP_CORRELATION_ID_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_correlation_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CORRELATION_ID_STRUCT                            *ie);

/*******************************************************************************
/* ProtocolIE AdditionalCSFallbackIndicator ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_ADDITIONALCSFALLBACKINDICATOR_NO_RESTRICTION,
  LIBLTE_S1AP_ADDITIONALCSFALLBACKINDICATOR_RESTRICTION,
  LIBLTE_S1AP_ADDITIONALCSFALLBACKINDICATOR_N_ITEMS,
}LIBLTE_S1AP_ADDITIONALCSFALLBACKINDICATOR_ENUM;
static const char liblte_s1ap_additionalcsfallbackindicator_text[LIBLTE_S1AP_ADDITIONALCSFALLBACKINDICATOR_N_ITEMS][80] = {
  "no-restriction",
  "restriction",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_ADDITIONALCSFALLBACKINDICATOR_ENUM e;
}LIBLTE_S1AP_ADDITIONALCSFALLBACKINDICATOR_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_additionalcsfallbackindicator(
  LIBLTE_S1AP_ADDITIONALCSFALLBACKINDICATOR_ENUM_EXT           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_additionalcsfallbackindicator(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ADDITIONALCSFALLBACKINDICATOR_ENUM_EXT           *ie);

/*******************************************************************************
/* ProtocolIE DL_Forwarding ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_DL_FORWARDING_DL_FORWARDING_PROPOSED,
  LIBLTE_S1AP_DL_FORWARDING_N_ITEMS,
}LIBLTE_S1AP_DL_FORWARDING_ENUM;
static const char liblte_s1ap_dl_forwarding_text[LIBLTE_S1AP_DL_FORWARDING_N_ITEMS][80] = {
  "dL-Forwarding-proposed",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_DL_FORWARDING_ENUM e;
}LIBLTE_S1AP_DL_FORWARDING_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_dl_forwarding(
  LIBLTE_S1AP_DL_FORWARDING_ENUM_EXT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_dl_forwarding(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_DL_FORWARDING_ENUM_EXT                           *ie);

/*******************************************************************************
/* ProtocolIE Data_Forwarding_Not_Possible ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_DATA_FORWARDING_NOT_POSSIBLE_DATA_FORWARDING_NOT_POSSIBLE,
  LIBLTE_S1AP_DATA_FORWARDING_NOT_POSSIBLE_N_ITEMS,
}LIBLTE_S1AP_DATA_FORWARDING_NOT_POSSIBLE_ENUM;
static const char liblte_s1ap_data_forwarding_not_possible_text[LIBLTE_S1AP_DATA_FORWARDING_NOT_POSSIBLE_N_ITEMS][80] = {
  "data-Forwarding-not-Possible",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_DATA_FORWARDING_NOT_POSSIBLE_ENUM e;
}LIBLTE_S1AP_DATA_FORWARDING_NOT_POSSIBLE_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_data_forwarding_not_possible(
  LIBLTE_S1AP_DATA_FORWARDING_NOT_POSSIBLE_ENUM_EXT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_data_forwarding_not_possible(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_DATA_FORWARDING_NOT_POSSIBLE_ENUM_EXT            *ie);

/*******************************************************************************
/* ProtocolIE EmergencyAreaID STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_EMERGENCYAREAID_OCTET_STRING_LEN 3
typedef struct{
  uint8_t  buffer[3];
}LIBLTE_S1AP_EMERGENCYAREAID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_emergencyareaid(
  LIBLTE_S1AP_EMERGENCYAREAID_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_emergencyareaid(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EMERGENCYAREAID_STRUCT                           *ie);

/*******************************************************************************
/* ProtocolIE macroENB_ID STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_MACROENB_ID_BIT_STRING_LEN 20
typedef struct{
  uint8_t  buffer[20];
}LIBLTE_S1AP_MACROENB_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_macroenb_id(
  LIBLTE_S1AP_MACROENB_ID_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_macroenb_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MACROENB_ID_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE homeENB_ID STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_HOMEENB_ID_BIT_STRING_LEN 28
typedef struct{
  uint8_t  buffer[28];
}LIBLTE_S1AP_HOMEENB_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_homeenb_id(
  LIBLTE_S1AP_HOMEENB_ID_STRUCT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_homeenb_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_HOMEENB_ID_STRUCT                                *ie);

/*******************************************************************************
/* ProtocolIE ENB_ID CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_ENB_ID_CHOICE_MACROENB_ID,
  LIBLTE_S1AP_ENB_ID_CHOICE_HOMEENB_ID,
  LIBLTE_S1AP_ENB_ID_CHOICE_N_ITEMS,
}LIBLTE_S1AP_ENB_ID_CHOICE_ENUM;
static const char liblte_s1ap_enb_id_choice_text[LIBLTE_S1AP_ENB_ID_CHOICE_N_ITEMS][50] = {
  "macroENB_ID",
  "homeENB_ID",
};

typedef union{
  LIBLTE_S1AP_MACROENB_ID_STRUCT                               macroENB_ID;
  LIBLTE_S1AP_HOMEENB_ID_STRUCT                                homeENB_ID;
}LIBLTE_S1AP_ENB_ID_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_ENB_ID_CHOICE_UNION choice;
  LIBLTE_S1AP_ENB_ID_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_ENB_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enb_id(
  LIBLTE_S1AP_ENB_ID_STRUCT                                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enb_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ENB_ID_STRUCT                                    *ie);

/*******************************************************************************
/* ProtocolIE ENBname PrintableString
********************************************************************************/
typedef struct{
  bool     ext;
  uint32_t n_octets;
  uint8_t  buffer[150];
}LIBLTE_S1AP_ENBNAME_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enbname(
  LIBLTE_S1AP_ENBNAME_STRUCT                                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enbname(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ENBNAME_STRUCT                                   *ie);

/*******************************************************************************
/* ProtocolIE EncryptionAlgorithms STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_ENCRYPTIONALGORITHMS_BIT_STRING_LEN 16
typedef struct{
  bool     ext;
  uint8_t  buffer[16];
}LIBLTE_S1AP_ENCRYPTIONALGORITHMS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_encryptionalgorithms(
  LIBLTE_S1AP_ENCRYPTIONALGORITHMS_STRUCT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_encryptionalgorithms(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ENCRYPTIONALGORITHMS_STRUCT                      *ie);

/*******************************************************************************
/* ProtocolIE EventType ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_EVENTTYPE_DIRECT,
  LIBLTE_S1AP_EVENTTYPE_CHANGE_OF_SERVE_CELL,
  LIBLTE_S1AP_EVENTTYPE_STOP_CHANGE_OF_SERVE_CELL,
  LIBLTE_S1AP_EVENTTYPE_N_ITEMS,
}LIBLTE_S1AP_EVENTTYPE_ENUM;
static const char liblte_s1ap_eventtype_text[LIBLTE_S1AP_EVENTTYPE_N_ITEMS][80] = {
  "direct",
  "change-of-serve-cell",
  "stop-change-of-serve-cell",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_EVENTTYPE_ENUM e;
}LIBLTE_S1AP_EVENTTYPE_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_eventtype(
  LIBLTE_S1AP_EVENTTYPE_ENUM_EXT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_eventtype(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EVENTTYPE_ENUM_EXT                               *ie);

/*******************************************************************************
/* ProtocolIE ExtendedRNC_ID INTEGER
********************************************************************************/
typedef struct{
uint16_t ExtendedRNC_ID;
}LIBLTE_S1AP_EXTENDEDRNC_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_extendedrnc_id(
  LIBLTE_S1AP_EXTENDEDRNC_ID_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_extendedrnc_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EXTENDEDRNC_ID_STRUCT                            *ie);

/*******************************************************************************
/* ProtocolIE ForbiddenInterRATs ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_FORBIDDENINTERRATS_ALL,
  LIBLTE_S1AP_FORBIDDENINTERRATS_GERAN,
  LIBLTE_S1AP_FORBIDDENINTERRATS_UTRAN,
  LIBLTE_S1AP_FORBIDDENINTERRATS_CDMA2000,
  LIBLTE_S1AP_FORBIDDENINTERRATS_GERANANDUTRAN,
  LIBLTE_S1AP_FORBIDDENINTERRATS_CDMA2000ANDUTRAN,
  LIBLTE_S1AP_FORBIDDENINTERRATS_N_ITEMS,
}LIBLTE_S1AP_FORBIDDENINTERRATS_ENUM;
static const char liblte_s1ap_forbiddeninterrats_text[LIBLTE_S1AP_FORBIDDENINTERRATS_N_ITEMS][80] = {
  "all",
  "geran",
  "utran",
  "cdma2000",
  "geranandutran",
  "cdma2000andutran",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_FORBIDDENINTERRATS_ENUM e;
}LIBLTE_S1AP_FORBIDDENINTERRATS_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_forbiddeninterrats(
  LIBLTE_S1AP_FORBIDDENINTERRATS_ENUM_EXT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_forbiddeninterrats(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_FORBIDDENINTERRATS_ENUM_EXT                      *ie);

/*******************************************************************************
/* ProtocolIE GWContextReleaseIndication ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_GWCONTEXTRELEASEINDICATION_TRUE,
  LIBLTE_S1AP_GWCONTEXTRELEASEINDICATION_N_ITEMS,
}LIBLTE_S1AP_GWCONTEXTRELEASEINDICATION_ENUM;
static const char liblte_s1ap_gwcontextreleaseindication_text[LIBLTE_S1AP_GWCONTEXTRELEASEINDICATION_N_ITEMS][80] = {
  "true",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_GWCONTEXTRELEASEINDICATION_ENUM e;
}LIBLTE_S1AP_GWCONTEXTRELEASEINDICATION_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_gwcontextreleaseindication(
  LIBLTE_S1AP_GWCONTEXTRELEASEINDICATION_ENUM_EXT              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_gwcontextreleaseindication(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_GWCONTEXTRELEASEINDICATION_ENUM_EXT              *ie);

/*******************************************************************************
/* ProtocolIE HFN INTEGER
********************************************************************************/
typedef struct{
uint32_t HFN;
}LIBLTE_S1AP_HFN_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_hfn(
  LIBLTE_S1AP_HFN_STRUCT                                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_hfn(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_HFN_STRUCT                                       *ie);

/*******************************************************************************
/* ProtocolIE IMSI DYNAMIC OCTET STRING
********************************************************************************/
// lb:3, ub:8
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[8];
}LIBLTE_S1AP_IMSI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_imsi(
  LIBLTE_S1AP_IMSI_STRUCT                                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_imsi(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_IMSI_STRUCT                                      *ie);

/*******************************************************************************
/* ProtocolIE InterfacesToTrace STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_INTERFACESTOTRACE_BIT_STRING_LEN 8
typedef struct{
  uint8_t  buffer[8];
}LIBLTE_S1AP_INTERFACESTOTRACE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_interfacestotrace(
  LIBLTE_S1AP_INTERFACESTOTRACE_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_interfacestotrace(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_INTERFACESTOTRACE_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE LAC STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_LAC_OCTET_STRING_LEN 2
typedef struct{
  uint8_t  buffer[2];
}LIBLTE_S1AP_LAC_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_lac(
  LIBLTE_S1AP_LAC_STRUCT                                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_lac(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LAC_STRUCT                                       *ie);

/*******************************************************************************
/* ProtocolIE LastVisitedUTRANCellInformation DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_LASTVISITEDUTRANCELLINFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_lastvisitedutrancellinformation(
  LIBLTE_S1AP_LASTVISITEDUTRANCELLINFORMATION_STRUCT           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_lastvisitedutrancellinformation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LASTVISITEDUTRANCELLINFORMATION_STRUCT           *ie);

/*******************************************************************************
/* ProtocolIE L3_Information DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_L3_INFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_l3_information(
  LIBLTE_S1AP_L3_INFORMATION_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_l3_information(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_L3_INFORMATION_STRUCT                            *ie);

/*******************************************************************************
/* ProtocolIE LHN_ID DYNAMIC OCTET STRING
********************************************************************************/
// lb:32, ub:256
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[256];
}LIBLTE_S1AP_LHN_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_lhn_id(
  LIBLTE_S1AP_LHN_ID_STRUCT                                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_lhn_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LHN_ID_STRUCT                                    *ie);

/*******************************************************************************
/* ProtocolIE LoggingDuration ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_LOGGINGDURATION_M10,
  LIBLTE_S1AP_LOGGINGDURATION_M20,
  LIBLTE_S1AP_LOGGINGDURATION_M40,
  LIBLTE_S1AP_LOGGINGDURATION_M60,
  LIBLTE_S1AP_LOGGINGDURATION_M90,
  LIBLTE_S1AP_LOGGINGDURATION_M120,
  LIBLTE_S1AP_LOGGINGDURATION_N_ITEMS,
}LIBLTE_S1AP_LOGGINGDURATION_ENUM;
static const char liblte_s1ap_loggingduration_text[LIBLTE_S1AP_LOGGINGDURATION_N_ITEMS][80] = {
  "m10",
  "m20",
  "m40",
  "m60",
  "m90",
  "m120",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_loggingduration(
  LIBLTE_S1AP_LOGGINGDURATION_ENUM                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_loggingduration(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LOGGINGDURATION_ENUM                             *ie);

/*******************************************************************************
/* ProtocolIE MDT_Activation ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_MDT_ACTIVATION_IMMEDIATE_MDT_ONLY,
  LIBLTE_S1AP_MDT_ACTIVATION_IMMEDIATE_MDT_AND_TRACE,
  LIBLTE_S1AP_MDT_ACTIVATION_LOGGED_MDT_ONLY,
  LIBLTE_S1AP_MDT_ACTIVATION_N_ITEMS,
}LIBLTE_S1AP_MDT_ACTIVATION_ENUM;
static const char liblte_s1ap_mdt_activation_text[LIBLTE_S1AP_MDT_ACTIVATION_N_ITEMS][80] = {
  "immediate-MDT-only",
  "immediate-MDT-and-Trace",
  "logged-MDT-only",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MDT_ACTIVATION_ENUM e;
}LIBLTE_S1AP_MDT_ACTIVATION_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mdt_activation(
  LIBLTE_S1AP_MDT_ACTIVATION_ENUM_EXT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mdt_activation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MDT_ACTIVATION_ENUM_EXT                          *ie);

/*******************************************************************************
/* ProtocolIE ManagementBasedMDTAllowed ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_MANAGEMENTBASEDMDTALLOWED_ALLOWED,
  LIBLTE_S1AP_MANAGEMENTBASEDMDTALLOWED_N_ITEMS,
}LIBLTE_S1AP_MANAGEMENTBASEDMDTALLOWED_ENUM;
static const char liblte_s1ap_managementbasedmdtallowed_text[LIBLTE_S1AP_MANAGEMENTBASEDMDTALLOWED_N_ITEMS][80] = {
  "allowed",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MANAGEMENTBASEDMDTALLOWED_ENUM e;
}LIBLTE_S1AP_MANAGEMENTBASEDMDTALLOWED_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_managementbasedmdtallowed(
  LIBLTE_S1AP_MANAGEMENTBASEDMDTALLOWED_ENUM_EXT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_managementbasedmdtallowed(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MANAGEMENTBASEDMDTALLOWED_ENUM_EXT               *ie);

/*******************************************************************************
/* ProtocolIE PrivacyIndicator ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_PRIVACYINDICATOR_IMMEDIATE_MDT,
  LIBLTE_S1AP_PRIVACYINDICATOR_LOGGED_MDT,
  LIBLTE_S1AP_PRIVACYINDICATOR_N_ITEMS,
}LIBLTE_S1AP_PRIVACYINDICATOR_ENUM;
static const char liblte_s1ap_privacyindicator_text[LIBLTE_S1AP_PRIVACYINDICATOR_N_ITEMS][80] = {
  "immediate-MDT",
  "logged-MDT",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_PRIVACYINDICATOR_ENUM e;
}LIBLTE_S1AP_PRIVACYINDICATOR_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_privacyindicator(
  LIBLTE_S1AP_PRIVACYINDICATOR_ENUM_EXT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_privacyindicator(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PRIVACYINDICATOR_ENUM_EXT                        *ie);

/*******************************************************************************
/* ProtocolIE MeasurementsToActivate STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_MEASUREMENTSTOACTIVATE_BIT_STRING_LEN 8
typedef struct{
  uint8_t  buffer[8];
}LIBLTE_S1AP_MEASUREMENTSTOACTIVATE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_measurementstoactivate(
  LIBLTE_S1AP_MEASUREMENTSTOACTIVATE_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_measurementstoactivate(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MEASUREMENTSTOACTIVATE_STRUCT                    *ie);

/*******************************************************************************
/* ProtocolIE MessageIdentifier STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_MESSAGEIDENTIFIER_BIT_STRING_LEN 16
typedef struct{
  uint8_t  buffer[16];
}LIBLTE_S1AP_MESSAGEIDENTIFIER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_messageidentifier(
  LIBLTE_S1AP_MESSAGEIDENTIFIER_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_messageidentifier(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGEIDENTIFIER_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE MMEname PrintableString
********************************************************************************/
typedef struct{
  bool     ext;
  uint32_t n_octets;
  uint8_t  buffer[150];
}LIBLTE_S1AP_MMENAME_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mmename(
  LIBLTE_S1AP_MMENAME_STRUCT                                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mmename(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MMENAME_STRUCT                                   *ie);

/*******************************************************************************
/* ProtocolIE MME_Group_ID STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_MME_GROUP_ID_OCTET_STRING_LEN 2
typedef struct{
  uint8_t  buffer[2];
}LIBLTE_S1AP_MME_GROUP_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mme_group_id(
  LIBLTE_S1AP_MME_GROUP_ID_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mme_group_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MME_GROUP_ID_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE MME_UE_S1AP_ID INTEGER
********************************************************************************/
typedef struct{
uint32_t MME_UE_S1AP_ID;
}LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mme_ue_s1ap_id(
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mme_ue_s1ap_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            *ie);

/*******************************************************************************
/* ProtocolIE MSClassmark2 DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_MSCLASSMARK2_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_msclassmark2(
  LIBLTE_S1AP_MSCLASSMARK2_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_msclassmark2(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MSCLASSMARK2_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE NAS_PDU DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_NAS_PDU_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_nas_pdu(
  LIBLTE_S1AP_NAS_PDU_STRUCT                                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_nas_pdu(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_NAS_PDU_STRUCT                                   *ie);

/*******************************************************************************
/* ProtocolIE NASSecurityParameterstoE_UTRAN DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_NASSECURITYPARAMETERSTOE_UTRAN_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_nassecurityparameterstoe_utran(
  LIBLTE_S1AP_NASSECURITYPARAMETERSTOE_UTRAN_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_nassecurityparameterstoe_utran(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_NASSECURITYPARAMETERSTOE_UTRAN_STRUCT            *ie);

/*******************************************************************************
/* ProtocolIE NumberOfBroadcasts INTEGER
********************************************************************************/
typedef struct{
uint16_t NumberOfBroadcasts;
}LIBLTE_S1AP_NUMBEROFBROADCASTS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_numberofbroadcasts(
  LIBLTE_S1AP_NUMBEROFBROADCASTS_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_numberofbroadcasts(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_NUMBEROFBROADCASTS_STRUCT                        *ie);

/*******************************************************************************
/* ProtocolIE OverloadAction ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_OVERLOADACTION_REJECT_NON_EMERGENCY_MO_DT,
  LIBLTE_S1AP_OVERLOADACTION_REJECT_RRC_CR_SIGNALLING,
  LIBLTE_S1AP_OVERLOADACTION_PERMIT_EMERGENCY_SESSIONS_AND_MOBILE_TERMINATED_SERVICES_ONLY,
  LIBLTE_S1AP_OVERLOADACTION_PERMIT_HIGH_PRIORITY_SESSIONS_AND_MOBILE_TERMINATED_SERVICES_ONLY,
  LIBLTE_S1AP_OVERLOADACTION_REJECT_DELAY_TOLERANT_ACCESS,
  LIBLTE_S1AP_OVERLOADACTION_N_ITEMS,
}LIBLTE_S1AP_OVERLOADACTION_ENUM;
static const char liblte_s1ap_overloadaction_text[LIBLTE_S1AP_OVERLOADACTION_N_ITEMS][80] = {
  "reject-non-emergency-mo-dt",
  "reject-rrc-cr-signalling",
  "permit-emergency-sessions-and-mobile-terminated-services-only",
  "permit-high-priority-sessions-and-mobile-terminated-services-only",
  "reject-delay-tolerant-access",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_OVERLOADACTION_ENUM e;
}LIBLTE_S1AP_OVERLOADACTION_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_overloadaction(
  LIBLTE_S1AP_OVERLOADACTION_ENUM_EXT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_overloadaction(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_OVERLOADACTION_ENUM_EXT                          *ie);

/*******************************************************************************
/* ProtocolIE PagingDRX ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_PAGINGDRX_V32,
  LIBLTE_S1AP_PAGINGDRX_V64,
  LIBLTE_S1AP_PAGINGDRX_V128,
  LIBLTE_S1AP_PAGINGDRX_V256,
  LIBLTE_S1AP_PAGINGDRX_N_ITEMS,
}LIBLTE_S1AP_PAGINGDRX_ENUM;
static const char liblte_s1ap_pagingdrx_text[LIBLTE_S1AP_PAGINGDRX_N_ITEMS][80] = {
  "v32",
  "v64",
  "v128",
  "v256",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_PAGINGDRX_ENUM e;
}LIBLTE_S1AP_PAGINGDRX_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_pagingdrx(
  LIBLTE_S1AP_PAGINGDRX_ENUM_EXT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_pagingdrx(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PAGINGDRX_ENUM_EXT                               *ie);

/*******************************************************************************
/* ProtocolIE PDCP_SN INTEGER
********************************************************************************/
typedef struct{
uint16_t PDCP_SN;
}LIBLTE_S1AP_PDCP_SN_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_pdcp_sn(
  LIBLTE_S1AP_PDCP_SN_STRUCT                                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_pdcp_sn(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PDCP_SN_STRUCT                                   *ie);

/*******************************************************************************
/* ProtocolIE Port_Number STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_PORT_NUMBER_OCTET_STRING_LEN 2
typedef struct{
  uint8_t  buffer[2];
}LIBLTE_S1AP_PORT_NUMBER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_port_number(
  LIBLTE_S1AP_PORT_NUMBER_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_port_number(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PORT_NUMBER_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE Pre_emptionVulnerability ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_PRE_EMPTIONVULNERABILITY_NOT_PRE_EMPTABLE,
  LIBLTE_S1AP_PRE_EMPTIONVULNERABILITY_PRE_EMPTABLE,
  LIBLTE_S1AP_PRE_EMPTIONVULNERABILITY_N_ITEMS,
}LIBLTE_S1AP_PRE_EMPTIONVULNERABILITY_ENUM;
static const char liblte_s1ap_pre_emptionvulnerability_text[LIBLTE_S1AP_PRE_EMPTIONVULNERABILITY_N_ITEMS][80] = {
  "not-pre-emptable",
  "pre-emptable",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_pre_emptionvulnerability(
  LIBLTE_S1AP_PRE_EMPTIONVULNERABILITY_ENUM                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_pre_emptionvulnerability(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PRE_EMPTIONVULNERABILITY_ENUM                    *ie);

/*******************************************************************************
/* ProtocolIE PS_ServiceNotAvailable ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_PS_SERVICENOTAVAILABLE_PS_SERVICE_NOT_AVAILABLE,
  LIBLTE_S1AP_PS_SERVICENOTAVAILABLE_N_ITEMS,
}LIBLTE_S1AP_PS_SERVICENOTAVAILABLE_ENUM;
static const char liblte_s1ap_ps_servicenotavailable_text[LIBLTE_S1AP_PS_SERVICENOTAVAILABLE_N_ITEMS][80] = {
  "ps-service-not-available",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_PS_SERVICENOTAVAILABLE_ENUM e;
}LIBLTE_S1AP_PS_SERVICENOTAVAILABLE_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ps_servicenotavailable(
  LIBLTE_S1AP_PS_SERVICENOTAVAILABLE_ENUM_EXT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ps_servicenotavailable(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PS_SERVICENOTAVAILABLE_ENUM_EXT                  *ie);

/*******************************************************************************
/* ProtocolIE ReceiveStatusofULPDCPSDUs STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_RECEIVESTATUSOFULPDCPSDUS_BIT_STRING_LEN 4096
typedef struct{
  uint8_t  buffer[4096];
}LIBLTE_S1AP_RECEIVESTATUSOFULPDCPSDUS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_receivestatusofulpdcpsdus(
  LIBLTE_S1AP_RECEIVESTATUSOFULPDCPSDUS_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_receivestatusofulpdcpsdus(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RECEIVESTATUSOFULPDCPSDUS_STRUCT                 *ie);

/*******************************************************************************
/* ProtocolIE RelativeMMECapacity INTEGER
********************************************************************************/
typedef struct{
uint8_t RelativeMMECapacity;
}LIBLTE_S1AP_RELATIVEMMECAPACITY_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_relativemmecapacity(
  LIBLTE_S1AP_RELATIVEMMECAPACITY_STRUCT                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_relativemmecapacity(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RELATIVEMMECAPACITY_STRUCT                       *ie);

/*******************************************************************************
/* ProtocolIE RAC STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_RAC_OCTET_STRING_LEN 1
typedef struct{
  uint8_t  buffer[1];
}LIBLTE_S1AP_RAC_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_rac(
  LIBLTE_S1AP_RAC_STRUCT                                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_rac(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RAC_STRUCT                                       *ie);

/*******************************************************************************
/* ProtocolIE ReportIntervalMDT ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_REPORTINTERVALMDT_MS120,
  LIBLTE_S1AP_REPORTINTERVALMDT_MS240,
  LIBLTE_S1AP_REPORTINTERVALMDT_MS480,
  LIBLTE_S1AP_REPORTINTERVALMDT_MS640,
  LIBLTE_S1AP_REPORTINTERVALMDT_MS1024,
  LIBLTE_S1AP_REPORTINTERVALMDT_MS2048,
  LIBLTE_S1AP_REPORTINTERVALMDT_MS5120,
  LIBLTE_S1AP_REPORTINTERVALMDT_MS10240,
  LIBLTE_S1AP_REPORTINTERVALMDT_MIN1,
  LIBLTE_S1AP_REPORTINTERVALMDT_MIN6,
  LIBLTE_S1AP_REPORTINTERVALMDT_MIN12,
  LIBLTE_S1AP_REPORTINTERVALMDT_MIN30,
  LIBLTE_S1AP_REPORTINTERVALMDT_MIN60,
  LIBLTE_S1AP_REPORTINTERVALMDT_N_ITEMS,
}LIBLTE_S1AP_REPORTINTERVALMDT_ENUM;
static const char liblte_s1ap_reportintervalmdt_text[LIBLTE_S1AP_REPORTINTERVALMDT_N_ITEMS][80] = {
  "ms120",
  "ms240",
  "ms480",
  "ms640",
  "ms1024",
  "ms2048",
  "ms5120",
  "ms10240",
  "min1",
  "min6",
  "min12",
  "min30",
  "min60",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_reportintervalmdt(
  LIBLTE_S1AP_REPORTINTERVALMDT_ENUM                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_reportintervalmdt(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_REPORTINTERVALMDT_ENUM                           *ie);

/*******************************************************************************
/* ProtocolIE ReportArea ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_REPORTAREA_ECGI,
  LIBLTE_S1AP_REPORTAREA_N_ITEMS,
}LIBLTE_S1AP_REPORTAREA_ENUM;
static const char liblte_s1ap_reportarea_text[LIBLTE_S1AP_REPORTAREA_N_ITEMS][80] = {
  "ecgi",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_REPORTAREA_ENUM e;
}LIBLTE_S1AP_REPORTAREA_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_reportarea(
  LIBLTE_S1AP_REPORTAREA_ENUM_EXT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_reportarea(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_REPORTAREA_ENUM_EXT                              *ie);

/*******************************************************************************
/* ProtocolIE RNC_ID INTEGER
********************************************************************************/
typedef struct{
uint16_t RNC_ID;
}LIBLTE_S1AP_RNC_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_rnc_id(
  LIBLTE_S1AP_RNC_ID_STRUCT                                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_rnc_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RNC_ID_STRUCT                                    *ie);

/*******************************************************************************
/* ProtocolIE RRC_Establishment_Cause ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_EMERGENCY,
  LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_HIGHPRIORITYACCESS,
  LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_MT_ACCESS,
  LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_MO_SIGNALLING,
  LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_MO_DATA,
  LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_DELAY_TOLERANTACCESS,
  LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_N_ITEMS,
}LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM;
static const char liblte_s1ap_rrc_establishment_cause_text[LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_N_ITEMS][80] = {
  "emergency",
  "highPriorityAccess",
  "mt-Access",
  "mo-Signalling",
  "mo-Data",
  "delay-TolerantAccess",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM e;
}LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_rrc_establishment_cause(
  LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM_EXT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_rrc_establishment_cause(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM_EXT                 *ie);

/*******************************************************************************
/* ProtocolIE Routing_ID INTEGER
********************************************************************************/
typedef struct{
uint8_t Routing_ID;
}LIBLTE_S1AP_ROUTING_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_routing_id(
  LIBLTE_S1AP_ROUTING_ID_STRUCT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_routing_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ROUTING_ID_STRUCT                                *ie);

/*******************************************************************************
/* ProtocolIE SONInformationRequest ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_SONINFORMATIONREQUEST_X2TNL_CONFIGURATION_INFO,
  LIBLTE_S1AP_SONINFORMATIONREQUEST_TIME_SYNCHRONIZATION_INFO,
  LIBLTE_S1AP_SONINFORMATIONREQUEST_N_ITEMS,
}LIBLTE_S1AP_SONINFORMATIONREQUEST_ENUM;
static const char liblte_s1ap_soninformationrequest_text[LIBLTE_S1AP_SONINFORMATIONREQUEST_N_ITEMS][80] = {
  "x2TNL-Configuration-Info",
  "time-Synchronization-Info",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_SONINFORMATIONREQUEST_ENUM e;
}LIBLTE_S1AP_SONINFORMATIONREQUEST_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_soninformationrequest(
  LIBLTE_S1AP_SONINFORMATIONREQUEST_ENUM_EXT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_soninformationrequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SONINFORMATIONREQUEST_ENUM_EXT                   *ie);

/*******************************************************************************
/* ProtocolIE Source_ToTarget_TransparentContainer DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_SOURCE_TOTARGET_TRANSPARENTCONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_source_totarget_transparentcontainer(
  LIBLTE_S1AP_SOURCE_TOTARGET_TRANSPARENTCONTAINER_STRUCT      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_source_totarget_transparentcontainer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SOURCE_TOTARGET_TRANSPARENTCONTAINER_STRUCT      *ie);

/*******************************************************************************
/* ProtocolIE SRVCCHOIndication ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_SRVCCHOINDICATION_PSANDCS,
  LIBLTE_S1AP_SRVCCHOINDICATION_CSONLY,
  LIBLTE_S1AP_SRVCCHOINDICATION_N_ITEMS,
}LIBLTE_S1AP_SRVCCHOINDICATION_ENUM;
static const char liblte_s1ap_srvcchoindication_text[LIBLTE_S1AP_SRVCCHOINDICATION_N_ITEMS][80] = {
  "pSandCS",
  "cSonly",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_SRVCCHOINDICATION_ENUM e;
}LIBLTE_S1AP_SRVCCHOINDICATION_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_srvcchoindication(
  LIBLTE_S1AP_SRVCCHOINDICATION_ENUM_EXT                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_srvcchoindication(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SRVCCHOINDICATION_ENUM_EXT                       *ie);

/*******************************************************************************
/* ProtocolIE SourceRNC_ToTargetRNC_TransparentContainer DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_SOURCERNC_TOTARGETRNC_TRANSPARENTCONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_sourcernc_totargetrnc_transparentcontainer(
  LIBLTE_S1AP_SOURCERNC_TOTARGETRNC_TRANSPARENTCONTAINER_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_sourcernc_totargetrnc_transparentcontainer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SOURCERNC_TOTARGETRNC_TRANSPARENTCONTAINER_STRUCT *ie);

/*******************************************************************************
/* ProtocolIE SubscriberProfileIDforRFP INTEGER
********************************************************************************/
typedef struct{
uint8_t SubscriberProfileIDforRFP;
}LIBLTE_S1AP_SUBSCRIBERPROFILEIDFORRFP_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_subscriberprofileidforrfp(
  LIBLTE_S1AP_SUBSCRIBERPROFILEIDFORRFP_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_subscriberprofileidforrfp(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SUBSCRIBERPROFILEIDFORRFP_STRUCT                 *ie);

/*******************************************************************************
/* ProtocolIE SynchronizationStatus ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_SYNCHRONIZATIONSTATUS_SYNCHRONOUS,
  LIBLTE_S1AP_SYNCHRONIZATIONSTATUS_ASYNCHRONOUS,
  LIBLTE_S1AP_SYNCHRONIZATIONSTATUS_N_ITEMS,
}LIBLTE_S1AP_SYNCHRONIZATIONSTATUS_ENUM;
static const char liblte_s1ap_synchronizationstatus_text[LIBLTE_S1AP_SYNCHRONIZATIONSTATUS_N_ITEMS][80] = {
  "synchronous",
  "asynchronous",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_SYNCHRONIZATIONSTATUS_ENUM e;
}LIBLTE_S1AP_SYNCHRONIZATIONSTATUS_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_synchronizationstatus(
  LIBLTE_S1AP_SYNCHRONIZATIONSTATUS_ENUM_EXT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_synchronizationstatus(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SYNCHRONIZATIONSTATUS_ENUM_EXT                   *ie);

/*******************************************************************************
/* ProtocolIE TargetRNC_ToSourceRNC_TransparentContainer DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_TARGETRNC_TOSOURCERNC_TRANSPARENTCONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_targetrnc_tosourcernc_transparentcontainer(
  LIBLTE_S1AP_TARGETRNC_TOSOURCERNC_TRANSPARENTCONTAINER_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_targetrnc_tosourcernc_transparentcontainer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TARGETRNC_TOSOURCERNC_TRANSPARENTCONTAINER_STRUCT *ie);

/*******************************************************************************
/* ProtocolIE Threshold_RSRQ INTEGER
********************************************************************************/
typedef struct{
uint8_t Threshold_RSRQ;
}LIBLTE_S1AP_THRESHOLD_RSRQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_threshold_rsrq(
  LIBLTE_S1AP_THRESHOLD_RSRQ_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_threshold_rsrq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_THRESHOLD_RSRQ_STRUCT                            *ie);

/*******************************************************************************
/* ProtocolIE Time_UE_StayedInCell INTEGER
********************************************************************************/
typedef struct{
uint16_t Time_UE_StayedInCell;
}LIBLTE_S1AP_TIME_UE_STAYEDINCELL_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_time_ue_stayedincell(
  LIBLTE_S1AP_TIME_UE_STAYEDINCELL_STRUCT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_time_ue_stayedincell(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TIME_UE_STAYEDINCELL_STRUCT                      *ie);

/*******************************************************************************
/* ProtocolIE TransportLayerAddress DYNAMIC BIT STRING
********************************************************************************/
// lb:1, ub:160
typedef struct{
  bool     ext;
  uint32_t n_bits;
  uint8_t  buffer[160];
}LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_transportlayeraddress(
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_transportlayeraddress(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     *ie);

/*******************************************************************************
/* ProtocolIE TraceDepth ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_TRACEDEPTH_MINIMUM,
  LIBLTE_S1AP_TRACEDEPTH_MEDIUM,
  LIBLTE_S1AP_TRACEDEPTH_MAXIMUM,
  LIBLTE_S1AP_TRACEDEPTH_MINIMUMWITHOUTVENDORSPECIFICEXTENSION,
  LIBLTE_S1AP_TRACEDEPTH_MEDIUMWITHOUTVENDORSPECIFICEXTENSION,
  LIBLTE_S1AP_TRACEDEPTH_MAXIMUMWITHOUTVENDORSPECIFICEXTENSION,
  LIBLTE_S1AP_TRACEDEPTH_N_ITEMS,
}LIBLTE_S1AP_TRACEDEPTH_ENUM;
static const char liblte_s1ap_tracedepth_text[LIBLTE_S1AP_TRACEDEPTH_N_ITEMS][80] = {
  "minimum",
  "medium",
  "maximum",
  "minimumWithoutVendorSpecificExtension",
  "mediumWithoutVendorSpecificExtension",
  "maximumWithoutVendorSpecificExtension",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TRACEDEPTH_ENUM e;
}LIBLTE_S1AP_TRACEDEPTH_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tracedepth(
  LIBLTE_S1AP_TRACEDEPTH_ENUM_EXT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tracedepth(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TRACEDEPTH_ENUM_EXT                              *ie);

/*******************************************************************************
/* ProtocolIE TrafficLoadReductionIndication INTEGER
********************************************************************************/
typedef struct{
uint8_t TrafficLoadReductionIndication;
}LIBLTE_S1AP_TRAFFICLOADREDUCTIONINDICATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_trafficloadreductionindication(
  LIBLTE_S1AP_TRAFFICLOADREDUCTIONINDICATION_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_trafficloadreductionindication(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TRAFFICLOADREDUCTIONINDICATION_STRUCT            *ie);

/*******************************************************************************
/* ProtocolIE UERadioCapability DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_UERADIOCAPABILITY_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ueradiocapability(
  LIBLTE_S1AP_UERADIOCAPABILITY_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ueradiocapability(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_UERADIOCAPABILITY_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE WarningType STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_WARNINGTYPE_OCTET_STRING_LEN 2
typedef struct{
  uint8_t  buffer[2];
}LIBLTE_S1AP_WARNINGTYPE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_warningtype(
  LIBLTE_S1AP_WARNINGTYPE_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_warningtype(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_WARNINGTYPE_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE WarningMessageContents DYNAMIC OCTET STRING
********************************************************************************/
// lb:1, ub:9600
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[9600];
}LIBLTE_S1AP_WARNINGMESSAGECONTENTS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_warningmessagecontents(
  LIBLTE_S1AP_WARNINGMESSAGECONTENTS_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_warningmessagecontents(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_WARNINGMESSAGECONTENTS_STRUCT                    *ie);

/*******************************************************************************
/* ProtocolIE CauseProtocol ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CAUSEPROTOCOL_TRANSFER_SYNTAX_ERROR,
  LIBLTE_S1AP_CAUSEPROTOCOL_ABSTRACT_SYNTAX_ERROR_REJECT,
  LIBLTE_S1AP_CAUSEPROTOCOL_ABSTRACT_SYNTAX_ERROR_IGNORE_AND_NOTIFY,
  LIBLTE_S1AP_CAUSEPROTOCOL_MESSAGE_NOT_COMPATIBLE_WITH_RECEIVER_STATE,
  LIBLTE_S1AP_CAUSEPROTOCOL_SEMANTIC_ERROR,
  LIBLTE_S1AP_CAUSEPROTOCOL_ABSTRACT_SYNTAX_ERROR_FALSELY_CONSTRUCTED_MESSAGE,
  LIBLTE_S1AP_CAUSEPROTOCOL_UNSPECIFIED,
  LIBLTE_S1AP_CAUSEPROTOCOL_N_ITEMS,
}LIBLTE_S1AP_CAUSEPROTOCOL_ENUM;
static const char liblte_s1ap_causeprotocol_text[LIBLTE_S1AP_CAUSEPROTOCOL_N_ITEMS][80] = {
  "transfer-syntax-error",
  "abstract-syntax-error-reject",
  "abstract-syntax-error-ignore-and-notify",
  "message-not-compatible-with-receiver-state",
  "semantic-error",
  "abstract-syntax-error-falsely-constructed-message",
  "unspecified",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CAUSEPROTOCOL_ENUM e;
}LIBLTE_S1AP_CAUSEPROTOCOL_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_causeprotocol(
  LIBLTE_S1AP_CAUSEPROTOCOL_ENUM_EXT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_causeprotocol(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CAUSEPROTOCOL_ENUM_EXT                           *ie);

/*******************************************************************************
/* ProtocolIE CellAccessMode ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CELLACCESSMODE_HYBRID,
  LIBLTE_S1AP_CELLACCESSMODE_N_ITEMS,
}LIBLTE_S1AP_CELLACCESSMODE_ENUM;
static const char liblte_s1ap_cellaccessmode_text[LIBLTE_S1AP_CELLACCESSMODE_N_ITEMS][80] = {
  "hybrid",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CELLACCESSMODE_ENUM e;
}LIBLTE_S1AP_CELLACCESSMODE_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cellaccessmode(
  LIBLTE_S1AP_CELLACCESSMODE_ENUM_EXT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cellaccessmode(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CELLACCESSMODE_ENUM_EXT                          *ie);

/*******************************************************************************
/* ProtocolIE Cdma2000RATType ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CDMA2000RATTYPE_HRPD,
  LIBLTE_S1AP_CDMA2000RATTYPE_ONEXRTT,
  LIBLTE_S1AP_CDMA2000RATTYPE_N_ITEMS,
}LIBLTE_S1AP_CDMA2000RATTYPE_ENUM;
static const char liblte_s1ap_cdma2000rattype_text[LIBLTE_S1AP_CDMA2000RATTYPE_N_ITEMS][80] = {
  "hRPD",
  "onexRTT",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CDMA2000RATTYPE_ENUM e;
}LIBLTE_S1AP_CDMA2000RATTYPE_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cdma2000rattype(
  LIBLTE_S1AP_CDMA2000RATTYPE_ENUM_EXT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cdma2000rattype(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CDMA2000RATTYPE_ENUM_EXT                         *ie);

/*******************************************************************************
/* ProtocolIE Cdma2000OneXMEID DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_CDMA2000ONEXMEID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cdma2000onexmeid(
  LIBLTE_S1AP_CDMA2000ONEXMEID_STRUCT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cdma2000onexmeid(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CDMA2000ONEXMEID_STRUCT                          *ie);

/*******************************************************************************
/* ProtocolIE Cell_Size ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CELL_SIZE_VERYSMALL,
  LIBLTE_S1AP_CELL_SIZE_SMALL,
  LIBLTE_S1AP_CELL_SIZE_MEDIUM,
  LIBLTE_S1AP_CELL_SIZE_LARGE,
  LIBLTE_S1AP_CELL_SIZE_N_ITEMS,
}LIBLTE_S1AP_CELL_SIZE_ENUM;
static const char liblte_s1ap_cell_size_text[LIBLTE_S1AP_CELL_SIZE_N_ITEMS][80] = {
  "verysmall",
  "small",
  "medium",
  "large",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CELL_SIZE_ENUM e;
}LIBLTE_S1AP_CELL_SIZE_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cell_size(
  LIBLTE_S1AP_CELL_SIZE_ENUM_EXT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cell_size(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CELL_SIZE_ENUM_EXT                               *ie);

/*******************************************************************************
/* ProtocolIE CI STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_CI_OCTET_STRING_LEN 2
typedef struct{
  uint8_t  buffer[2];
}LIBLTE_S1AP_CI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ci(
  LIBLTE_S1AP_CI_STRUCT                                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ci(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CI_STRUCT                                        *ie);

/*******************************************************************************
/* ProtocolIE CSFallbackIndicator ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CSFALLBACKINDICATOR_CS_FALLBACK_REQUIRED,
  LIBLTE_S1AP_CSFALLBACKINDICATOR_CS_FALLBACK_HIGH_PRIORITY,
  LIBLTE_S1AP_CSFALLBACKINDICATOR_N_ITEMS,
}LIBLTE_S1AP_CSFALLBACKINDICATOR_ENUM;
static const char liblte_s1ap_csfallbackindicator_text[LIBLTE_S1AP_CSFALLBACKINDICATOR_N_ITEMS][80] = {
  "cs-fallback-required",
  "cs-fallback-high-priority",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CSFALLBACKINDICATOR_ENUM e;
}LIBLTE_S1AP_CSFALLBACKINDICATOR_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_csfallbackindicator(
  LIBLTE_S1AP_CSFALLBACKINDICATOR_ENUM_EXT                     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_csfallbackindicator(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CSFALLBACKINDICATOR_ENUM_EXT                     *ie);

/*******************************************************************************
/* ProtocolIE CSGMembershipStatus ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_MEMBER,
  LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_NOT_MEMBER,
  LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_N_ITEMS,
}LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_ENUM;
static const char liblte_s1ap_csgmembershipstatus_text[LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_N_ITEMS][80] = {
  "member",
  "not-member",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_csgmembershipstatus(
  LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_ENUM                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_csgmembershipstatus(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_ENUM                         *ie);

/*******************************************************************************
/* ProtocolIE DataCodingScheme STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_DATACODINGSCHEME_BIT_STRING_LEN 8
typedef struct{
  uint8_t  buffer[8];
}LIBLTE_S1AP_DATACODINGSCHEME_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_datacodingscheme(
  LIBLTE_S1AP_DATACODINGSCHEME_STRUCT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_datacodingscheme(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_DATACODINGSCHEME_STRUCT                          *ie);

/*******************************************************************************
/* ProtocolIE EmergencyAreaIDList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_EMERGENCYAREAID_STRUCT                           buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_EMERGENCYAREAIDLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_emergencyareaidlist(
  LIBLTE_S1AP_EMERGENCYAREAIDLIST_STRUCT                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_emergencyareaidlist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EMERGENCYAREAIDLIST_STRUCT                       *ie);

/*******************************************************************************
/* ProtocolIE EmergencyAreaIDListForRestart DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_EMERGENCYAREAID_STRUCT                           buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_EMERGENCYAREAIDLISTFORRESTART_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_emergencyareaidlistforrestart(
  LIBLTE_S1AP_EMERGENCYAREAIDLISTFORRESTART_STRUCT             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_emergencyareaidlistforrestart(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EMERGENCYAREAIDLISTFORRESTART_STRUCT             *ie);

/*******************************************************************************
/* ProtocolIE ENB_UE_S1AP_ID INTEGER
********************************************************************************/
typedef struct{
uint32_t ENB_UE_S1AP_ID;
}LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enb_ue_s1ap_id(
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enb_ue_s1ap_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            *ie);

/*******************************************************************************
/* ProtocolIE E_RAB_ID INTEGER
********************************************************************************/
typedef struct{
  bool     ext;
uint8_t E_RAB_ID;
}LIBLTE_S1AP_E_RAB_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rab_id(
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rab_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  *ie);

/*******************************************************************************
/* ProtocolIE E_RABInformationListItem SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_DL_FORWARDING_ENUM_EXT                           dL_Forwarding;
  bool                                                         dL_Forwarding_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABINFORMATIONLISTITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabinformationlistitem(
  LIBLTE_S1AP_E_RABINFORMATIONLISTITEM_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabinformationlistitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABINFORMATIONLISTITEM_STRUCT                  *ie);

/*******************************************************************************
/* ProtocolIE EUTRANRoundTripDelayEstimationInfo INTEGER
********************************************************************************/
typedef struct{
uint16_t EUTRANRoundTripDelayEstimationInfo;
}LIBLTE_S1AP_EUTRANROUNDTRIPDELAYESTIMATIONINFO_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_eutranroundtripdelayestimationinfo(
  LIBLTE_S1AP_EUTRANROUNDTRIPDELAYESTIMATIONINFO_STRUCT        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_eutranroundtripdelayestimationinfo(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EUTRANROUNDTRIPDELAYESTIMATIONINFO_STRUCT        *ie);

/*******************************************************************************
/* ProtocolIE ForbiddenLACs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:4096
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_LAC_STRUCT                                       buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_FORBIDDENLACS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_forbiddenlacs(
  LIBLTE_S1AP_FORBIDDENLACS_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_forbiddenlacs(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_FORBIDDENLACS_STRUCT                             *ie);

/*******************************************************************************
/* ProtocolIE GTP_TEID STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_GTP_TEID_OCTET_STRING_LEN 4
typedef struct{
  uint8_t  buffer[4];
}LIBLTE_S1AP_GTP_TEID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_gtp_teid(
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_gtp_teid(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  *ie);

/*******************************************************************************
/* ProtocolIE GUMMEIType ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_GUMMEITYPE_NATIVE,
  LIBLTE_S1AP_GUMMEITYPE_MAPPED,
  LIBLTE_S1AP_GUMMEITYPE_N_ITEMS,
}LIBLTE_S1AP_GUMMEITYPE_ENUM;
static const char liblte_s1ap_gummeitype_text[LIBLTE_S1AP_GUMMEITYPE_N_ITEMS][80] = {
  "native",
  "mapped",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_GUMMEITYPE_ENUM e;
}LIBLTE_S1AP_GUMMEITYPE_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_gummeitype(
  LIBLTE_S1AP_GUMMEITYPE_ENUM_EXT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_gummeitype(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_GUMMEITYPE_ENUM_EXT                              *ie);

/*******************************************************************************
/* ProtocolIE HandoverType ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_HANDOVERTYPE_INTRALTE,
  LIBLTE_S1AP_HANDOVERTYPE_LTETOUTRAN,
  LIBLTE_S1AP_HANDOVERTYPE_LTETOGERAN,
  LIBLTE_S1AP_HANDOVERTYPE_UTRANTOLTE,
  LIBLTE_S1AP_HANDOVERTYPE_GERANTOLTE,
  LIBLTE_S1AP_HANDOVERTYPE_N_ITEMS,
}LIBLTE_S1AP_HANDOVERTYPE_ENUM;
static const char liblte_s1ap_handovertype_text[LIBLTE_S1AP_HANDOVERTYPE_N_ITEMS][80] = {
  "intralte",
  "ltetoutran",
  "ltetogeran",
  "utrantolte",
  "gerantolte",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_HANDOVERTYPE_ENUM e;
}LIBLTE_S1AP_HANDOVERTYPE_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_handovertype(
  LIBLTE_S1AP_HANDOVERTYPE_ENUM_EXT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_handovertype(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_HANDOVERTYPE_ENUM_EXT                            *ie);

/*******************************************************************************
/* ProtocolIE IntegrityProtectionAlgorithms STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_INTEGRITYPROTECTIONALGORITHMS_BIT_STRING_LEN 16
typedef struct{
  bool     ext;
  uint8_t  buffer[16];
}LIBLTE_S1AP_INTEGRITYPROTECTIONALGORITHMS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_integrityprotectionalgorithms(
  LIBLTE_S1AP_INTEGRITYPROTECTIONALGORITHMS_STRUCT             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_integrityprotectionalgorithms(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_INTEGRITYPROTECTIONALGORITHMS_STRUCT             *ie);

//TODO: Type undefined NULL

/*******************************************************************************
/* ProtocolIE LastVisitedGERANCellInformation CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_LASTVISITEDGERANCELLINFORMATION_CHOICE_UNDEFINED,
  LIBLTE_S1AP_LASTVISITEDGERANCELLINFORMATION_CHOICE_N_ITEMS,
}LIBLTE_S1AP_LASTVISITEDGERANCELLINFORMATION_CHOICE_ENUM;
static const char liblte_s1ap_lastvisitedgerancellinformation_choice_text[LIBLTE_S1AP_LASTVISITEDGERANCELLINFORMATION_CHOICE_N_ITEMS][50] = {
  "undefined",
};

typedef union{
  //TODO: NULL                                                 undefined;
}LIBLTE_S1AP_LASTVISITEDGERANCELLINFORMATION_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_LASTVISITEDGERANCELLINFORMATION_CHOICE_UNION choice;
  LIBLTE_S1AP_LASTVISITEDGERANCELLINFORMATION_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_LASTVISITEDGERANCELLINFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_lastvisitedgerancellinformation(
  LIBLTE_S1AP_LASTVISITEDGERANCELLINFORMATION_STRUCT           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_lastvisitedgerancellinformation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LASTVISITEDGERANCELLINFORMATION_STRUCT           *ie);

/*******************************************************************************
/* ProtocolIE Links_to_log ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_LINKS_TO_LOG_UPLINK,
  LIBLTE_S1AP_LINKS_TO_LOG_DOWNLINK,
  LIBLTE_S1AP_LINKS_TO_LOG_BOTH_UPLINK_AND_DOWNLINK,
  LIBLTE_S1AP_LINKS_TO_LOG_N_ITEMS,
}LIBLTE_S1AP_LINKS_TO_LOG_ENUM;
static const char liblte_s1ap_links_to_log_text[LIBLTE_S1AP_LINKS_TO_LOG_N_ITEMS][80] = {
  "uplink",
  "downlink",
  "both-uplink-and-downlink",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_LINKS_TO_LOG_ENUM e;
}LIBLTE_S1AP_LINKS_TO_LOG_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_links_to_log(
  LIBLTE_S1AP_LINKS_TO_LOG_ENUM_EXT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_links_to_log(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LINKS_TO_LOG_ENUM_EXT                            *ie);

/*******************************************************************************
/* ProtocolIE LoggingInterval ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_LOGGINGINTERVAL_MS128,
  LIBLTE_S1AP_LOGGINGINTERVAL_MS256,
  LIBLTE_S1AP_LOGGINGINTERVAL_MS512,
  LIBLTE_S1AP_LOGGINGINTERVAL_MS1024,
  LIBLTE_S1AP_LOGGINGINTERVAL_MS2048,
  LIBLTE_S1AP_LOGGINGINTERVAL_MS3072,
  LIBLTE_S1AP_LOGGINGINTERVAL_MS4096,
  LIBLTE_S1AP_LOGGINGINTERVAL_MS6144,
  LIBLTE_S1AP_LOGGINGINTERVAL_N_ITEMS,
}LIBLTE_S1AP_LOGGINGINTERVAL_ENUM;
static const char liblte_s1ap_logginginterval_text[LIBLTE_S1AP_LOGGINGINTERVAL_N_ITEMS][80] = {
  "ms128",
  "ms256",
  "ms512",
  "ms1024",
  "ms2048",
  "ms3072",
  "ms4096",
  "ms6144",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_logginginterval(
  LIBLTE_S1AP_LOGGINGINTERVAL_ENUM                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_logginginterval(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LOGGINGINTERVAL_ENUM                             *ie);

/*******************************************************************************
/* ProtocolIE M3period ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_M3PERIOD_MS100,
  LIBLTE_S1AP_M3PERIOD_MS1000,
  LIBLTE_S1AP_M3PERIOD_MS10000,
  LIBLTE_S1AP_M3PERIOD_N_ITEMS,
}LIBLTE_S1AP_M3PERIOD_ENUM;
static const char liblte_s1ap_m3period_text[LIBLTE_S1AP_M3PERIOD_N_ITEMS][80] = {
  "ms100",
  "ms1000",
  "ms10000",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_M3PERIOD_ENUM e;
}LIBLTE_S1AP_M3PERIOD_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m3period(
  LIBLTE_S1AP_M3PERIOD_ENUM_EXT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m3period(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_M3PERIOD_ENUM_EXT                                *ie);

/*******************************************************************************
/* ProtocolIE M4period ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_M4PERIOD_MS1024,
  LIBLTE_S1AP_M4PERIOD_MS2048,
  LIBLTE_S1AP_M4PERIOD_MS5120,
  LIBLTE_S1AP_M4PERIOD_MS10240,
  LIBLTE_S1AP_M4PERIOD_MIN1,
  LIBLTE_S1AP_M4PERIOD_N_ITEMS,
}LIBLTE_S1AP_M4PERIOD_ENUM;
static const char liblte_s1ap_m4period_text[LIBLTE_S1AP_M4PERIOD_N_ITEMS][80] = {
  "ms1024",
  "ms2048",
  "ms5120",
  "ms10240",
  "min1",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_M4PERIOD_ENUM e;
}LIBLTE_S1AP_M4PERIOD_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m4period(
  LIBLTE_S1AP_M4PERIOD_ENUM_EXT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m4period(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_M4PERIOD_ENUM_EXT                                *ie);

/*******************************************************************************
/* ProtocolIE M5period ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_M5PERIOD_MS1024,
  LIBLTE_S1AP_M5PERIOD_MS2048,
  LIBLTE_S1AP_M5PERIOD_MS5120,
  LIBLTE_S1AP_M5PERIOD_MS10240,
  LIBLTE_S1AP_M5PERIOD_MIN1,
  LIBLTE_S1AP_M5PERIOD_N_ITEMS,
}LIBLTE_S1AP_M5PERIOD_ENUM;
static const char liblte_s1ap_m5period_text[LIBLTE_S1AP_M5PERIOD_N_ITEMS][80] = {
  "ms1024",
  "ms2048",
  "ms5120",
  "ms10240",
  "min1",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_M5PERIOD_ENUM e;
}LIBLTE_S1AP_M5PERIOD_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m5period(
  LIBLTE_S1AP_M5PERIOD_ENUM_EXT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m5period(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_M5PERIOD_ENUM_EXT                                *ie);

/*******************************************************************************
/* ProtocolIE MobilityInformation STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_MOBILITYINFORMATION_BIT_STRING_LEN 32
typedef struct{
  uint8_t  buffer[32];
}LIBLTE_S1AP_MOBILITYINFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mobilityinformation(
  LIBLTE_S1AP_MOBILITYINFORMATION_STRUCT                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mobilityinformation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MOBILITYINFORMATION_STRUCT                       *ie);

/*******************************************************************************
/* ProtocolIE MME_Code STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_MME_CODE_OCTET_STRING_LEN 1
typedef struct{
  uint8_t  buffer[1];
}LIBLTE_S1AP_MME_CODE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mme_code(
  LIBLTE_S1AP_MME_CODE_STRUCT                                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mme_code(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MME_CODE_STRUCT                                  *ie);

/*******************************************************************************
/* ProtocolIE MSClassmark3 DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_MSCLASSMARK3_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_msclassmark3(
  LIBLTE_S1AP_MSCLASSMARK3_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_msclassmark3(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MSCLASSMARK3_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE NumberofBroadcastRequest INTEGER
********************************************************************************/
typedef struct{
uint16_t NumberofBroadcastRequest;
}LIBLTE_S1AP_NUMBEROFBROADCASTREQUEST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_numberofbroadcastrequest(
  LIBLTE_S1AP_NUMBEROFBROADCASTREQUEST_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_numberofbroadcastrequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_NUMBEROFBROADCASTREQUEST_STRUCT                  *ie);

/*******************************************************************************
/* ProtocolIE OverloadResponse CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_OVERLOADRESPONSE_CHOICE_OVERLOADACTION,
  LIBLTE_S1AP_OVERLOADRESPONSE_CHOICE_N_ITEMS,
}LIBLTE_S1AP_OVERLOADRESPONSE_CHOICE_ENUM;
static const char liblte_s1ap_overloadresponse_choice_text[LIBLTE_S1AP_OVERLOADRESPONSE_CHOICE_N_ITEMS][50] = {
  "overloadAction",
};

typedef union{
  LIBLTE_S1AP_OVERLOADACTION_ENUM_EXT                          overloadAction;
}LIBLTE_S1AP_OVERLOADRESPONSE_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_OVERLOADRESPONSE_CHOICE_UNION choice;
  LIBLTE_S1AP_OVERLOADRESPONSE_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_OVERLOADRESPONSE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_overloadresponse(
  LIBLTE_S1AP_OVERLOADRESPONSE_STRUCT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_overloadresponse(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_OVERLOADRESPONSE_STRUCT                          *ie);

/*******************************************************************************
/* ProtocolIE PDCP_SNExtended INTEGER
********************************************************************************/
typedef struct{
uint16_t PDCP_SNExtended;
}LIBLTE_S1AP_PDCP_SNEXTENDED_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_pdcp_snextended(
  LIBLTE_S1AP_PDCP_SNEXTENDED_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_pdcp_snextended(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PDCP_SNEXTENDED_STRUCT                           *ie);

/*******************************************************************************
/* ProtocolIE Pre_emptionCapability ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_PRE_EMPTIONCAPABILITY_SHALL_NOT_TRIGGER_PRE_EMPTION,
  LIBLTE_S1AP_PRE_EMPTIONCAPABILITY_MAY_TRIGGER_PRE_EMPTION,
  LIBLTE_S1AP_PRE_EMPTIONCAPABILITY_N_ITEMS,
}LIBLTE_S1AP_PRE_EMPTIONCAPABILITY_ENUM;
static const char liblte_s1ap_pre_emptioncapability_text[LIBLTE_S1AP_PRE_EMPTIONCAPABILITY_N_ITEMS][80] = {
  "shall-not-trigger-pre-emption",
  "may-trigger-pre-emption",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_pre_emptioncapability(
  LIBLTE_S1AP_PRE_EMPTIONCAPABILITY_ENUM                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_pre_emptioncapability(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PRE_EMPTIONCAPABILITY_ENUM                       *ie);

/*******************************************************************************
/* ProtocolIE QCI INTEGER
********************************************************************************/
typedef struct{
uint8_t QCI;
}LIBLTE_S1AP_QCI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_qci(
  LIBLTE_S1AP_QCI_STRUCT                                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_qci(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_QCI_STRUCT                                       *ie);

/*******************************************************************************
/* ProtocolIE RelayNode_Indicator ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_RELAYNODE_INDICATOR_TRUE,
  LIBLTE_S1AP_RELAYNODE_INDICATOR_N_ITEMS,
}LIBLTE_S1AP_RELAYNODE_INDICATOR_ENUM;
static const char liblte_s1ap_relaynode_indicator_text[LIBLTE_S1AP_RELAYNODE_INDICATOR_N_ITEMS][80] = {
  "true",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_RELAYNODE_INDICATOR_ENUM e;
}LIBLTE_S1AP_RELAYNODE_INDICATOR_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_relaynode_indicator(
  LIBLTE_S1AP_RELAYNODE_INDICATOR_ENUM_EXT                     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_relaynode_indicator(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RELAYNODE_INDICATOR_ENUM_EXT                     *ie);

/*******************************************************************************
/* ProtocolIE M1ReportingTrigger ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_M1REPORTINGTRIGGER_PERIODIC,
  LIBLTE_S1AP_M1REPORTINGTRIGGER_A2EVENTTRIGGERED,
  LIBLTE_S1AP_M1REPORTINGTRIGGER_A2EVENTTRIGGERED_PERIODIC,
  LIBLTE_S1AP_M1REPORTINGTRIGGER_N_ITEMS,
}LIBLTE_S1AP_M1REPORTINGTRIGGER_ENUM;
static const char liblte_s1ap_m1reportingtrigger_text[LIBLTE_S1AP_M1REPORTINGTRIGGER_N_ITEMS][80] = {
  "periodic",
  "a2eventtriggered",
  "a2eventtriggered-periodic",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_M1REPORTINGTRIGGER_ENUM e;
}LIBLTE_S1AP_M1REPORTINGTRIGGER_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m1reportingtrigger(
  LIBLTE_S1AP_M1REPORTINGTRIGGER_ENUM_EXT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m1reportingtrigger(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_M1REPORTINGTRIGGER_ENUM_EXT                      *ie);

/*******************************************************************************
/* ProtocolIE RIMInformation DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_RIMINFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_riminformation(
  LIBLTE_S1AP_RIMINFORMATION_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_riminformation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RIMINFORMATION_STRUCT                            *ie);

/*******************************************************************************
/* ProtocolIE RepetitionPeriod INTEGER
********************************************************************************/
typedef struct{
uint16_t RepetitionPeriod;
}LIBLTE_S1AP_REPETITIONPERIOD_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_repetitionperiod(
  LIBLTE_S1AP_REPETITIONPERIOD_STRUCT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_repetitionperiod(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_REPETITIONPERIOD_STRUCT                          *ie);

/*******************************************************************************
/* ProtocolIE SecurityKey STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_SECURITYKEY_BIT_STRING_LEN 256
typedef struct{
  uint8_t  buffer[256];
}LIBLTE_S1AP_SECURITYKEY_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_securitykey(
  LIBLTE_S1AP_SECURITYKEY_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_securitykey(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SECURITYKEY_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE SerialNumber STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_SERIALNUMBER_BIT_STRING_LEN 16
typedef struct{
  uint8_t  buffer[16];
}LIBLTE_S1AP_SERIALNUMBER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_serialnumber(
  LIBLTE_S1AP_SERIALNUMBER_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_serialnumber(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SERIALNUMBER_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE SourceBSS_ToTargetBSS_TransparentContainer DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_SOURCEBSS_TOTARGETBSS_TRANSPARENTCONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_sourcebss_totargetbss_transparentcontainer(
  LIBLTE_S1AP_SOURCEBSS_TOTARGETBSS_TRANSPARENTCONTAINER_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_sourcebss_totargetbss_transparentcontainer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SOURCEBSS_TOTARGETBSS_TRANSPARENTCONTAINER_STRUCT *ie);

/*******************************************************************************
/* ProtocolIE SRVCCOperationPossible ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_SRVCCOPERATIONPOSSIBLE_POSSIBLE,
  LIBLTE_S1AP_SRVCCOPERATIONPOSSIBLE_N_ITEMS,
}LIBLTE_S1AP_SRVCCOPERATIONPOSSIBLE_ENUM;
static const char liblte_s1ap_srvccoperationpossible_text[LIBLTE_S1AP_SRVCCOPERATIONPOSSIBLE_N_ITEMS][80] = {
  "possible",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_SRVCCOPERATIONPOSSIBLE_ENUM e;
}LIBLTE_S1AP_SRVCCOPERATIONPOSSIBLE_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_srvccoperationpossible(
  LIBLTE_S1AP_SRVCCOPERATIONPOSSIBLE_ENUM_EXT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_srvccoperationpossible(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SRVCCOPERATIONPOSSIBLE_ENUM_EXT                  *ie);

/*******************************************************************************
/* ProtocolIE ServedGroupIDs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_MME_GROUP_ID_STRUCT                              buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_SERVEDGROUPIDS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_servedgroupids(
  LIBLTE_S1AP_SERVEDGROUPIDS_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_servedgroupids(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SERVEDGROUPIDS_STRUCT                            *ie);

/*******************************************************************************
/* ProtocolIE StratumLevel INTEGER
********************************************************************************/
typedef struct{
  bool     ext;
uint8_t StratumLevel;
}LIBLTE_S1AP_STRATUMLEVEL_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_stratumlevel(
  LIBLTE_S1AP_STRATUMLEVEL_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_stratumlevel(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_STRATUMLEVEL_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE TAC STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_TAC_OCTET_STRING_LEN 2
typedef struct{
  uint8_t  buffer[2];
}LIBLTE_S1AP_TAC_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tac(
  LIBLTE_S1AP_TAC_STRUCT                                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tac(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TAC_STRUCT                                       *ie);

/*******************************************************************************
/* ProtocolIE TAListforMDT DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:8
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TAC_STRUCT                                       buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_TALISTFORMDT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_talistformdt(
  LIBLTE_S1AP_TALISTFORMDT_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_talistformdt(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TALISTFORMDT_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE TBCD_STRING STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_TBCD_STRING_OCTET_STRING_LEN 3
typedef struct{
  uint8_t  buffer[3];
}LIBLTE_S1AP_TBCD_STRING_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tbcd_string(
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tbcd_string(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE Target_ToSource_TransparentContainer DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_TARGET_TOSOURCE_TRANSPARENTCONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_target_tosource_transparentcontainer(
  LIBLTE_S1AP_TARGET_TOSOURCE_TRANSPARENTCONTAINER_STRUCT      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_target_tosource_transparentcontainer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TARGET_TOSOURCE_TRANSPARENTCONTAINER_STRUCT      *ie);

/*******************************************************************************
/* ProtocolIE Threshold_RSRP INTEGER
********************************************************************************/
typedef struct{
uint8_t Threshold_RSRP;
}LIBLTE_S1AP_THRESHOLD_RSRP_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_threshold_rsrp(
  LIBLTE_S1AP_THRESHOLD_RSRP_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_threshold_rsrp(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_THRESHOLD_RSRP_STRUCT                            *ie);

/*******************************************************************************
/* ProtocolIE Time_UE_StayedInCell_EnhancedGranularity INTEGER
********************************************************************************/
typedef struct{
uint16_t Time_UE_StayedInCell_EnhancedGranularity;
}LIBLTE_S1AP_TIME_UE_STAYEDINCELL_ENHANCEDGRANULARITY_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_time_ue_stayedincell_enhancedgranularity(
  LIBLTE_S1AP_TIME_UE_STAYEDINCELL_ENHANCEDGRANULARITY_STRUCT  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_time_ue_stayedincell_enhancedgranularity(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TIME_UE_STAYEDINCELL_ENHANCEDGRANULARITY_STRUCT  *ie);

/*******************************************************************************
/* ProtocolIE E_UTRAN_Trace_ID STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_E_UTRAN_TRACE_ID_OCTET_STRING_LEN 8
typedef struct{
  uint8_t  buffer[8];
}LIBLTE_S1AP_E_UTRAN_TRACE_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_utran_trace_id(
  LIBLTE_S1AP_E_UTRAN_TRACE_ID_STRUCT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_utran_trace_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_UTRAN_TRACE_ID_STRUCT                          *ie);

/*******************************************************************************
/* ProtocolIE TypeOfError ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_TYPEOFERROR_NOT_UNDERSTOOD,
  LIBLTE_S1AP_TYPEOFERROR_MISSING,
  LIBLTE_S1AP_TYPEOFERROR_N_ITEMS,
}LIBLTE_S1AP_TYPEOFERROR_ENUM;
static const char liblte_s1ap_typeoferror_text[LIBLTE_S1AP_TYPEOFERROR_N_ITEMS][80] = {
  "not-understood",
  "missing",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TYPEOFERROR_ENUM e;
}LIBLTE_S1AP_TYPEOFERROR_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_typeoferror(
  LIBLTE_S1AP_TYPEOFERROR_ENUM_EXT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_typeoferror(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TYPEOFERROR_ENUM_EXT                             *ie);

/*******************************************************************************
/* ProtocolIE UEAggregateMaximumBitrate SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_BITRATE_STRUCT                                   uEaggregateMaximumBitRateDL;
  LIBLTE_S1AP_BITRATE_STRUCT                                   uEaggregateMaximumBitRateUL;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_UEAGGREGATEMAXIMUMBITRATE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ueaggregatemaximumbitrate(
  LIBLTE_S1AP_UEAGGREGATEMAXIMUMBITRATE_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ueaggregatemaximumbitrate(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_UEAGGREGATEMAXIMUMBITRATE_STRUCT                 *ie);

/*******************************************************************************
/* ProtocolIE UE_S1AP_ID_pair SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            mME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_UE_S1AP_ID_PAIR_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ue_s1ap_id_pair(
  LIBLTE_S1AP_UE_S1AP_ID_PAIR_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ue_s1ap_id_pair(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_UE_S1AP_ID_PAIR_STRUCT                           *ie);

/*******************************************************************************
/* ProtocolIE UEIdentityIndexValue STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_UEIDENTITYINDEXVALUE_BIT_STRING_LEN 10
typedef struct{
  uint8_t  buffer[10];
}LIBLTE_S1AP_UEIDENTITYINDEXVALUE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ueidentityindexvalue(
  LIBLTE_S1AP_UEIDENTITYINDEXVALUE_STRUCT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ueidentityindexvalue(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_UEIDENTITYINDEXVALUE_STRUCT                      *ie);

/*******************************************************************************
/* ProtocolIE UESecurityCapabilities SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_ENCRYPTIONALGORITHMS_STRUCT                      encryptionAlgorithms;
  LIBLTE_S1AP_INTEGRITYPROTECTIONALGORITHMS_STRUCT             integrityProtectionAlgorithms;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_UESECURITYCAPABILITIES_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uesecuritycapabilities(
  LIBLTE_S1AP_UESECURITYCAPABILITIES_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uesecuritycapabilities(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_UESECURITYCAPABILITIES_STRUCT                    *ie);

/*******************************************************************************
/* ProtocolIE VoiceSupportMatchIndicator ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_VOICESUPPORTMATCHINDICATOR_SUPPORTED,
  LIBLTE_S1AP_VOICESUPPORTMATCHINDICATOR_NOT_SUPPORTED,
  LIBLTE_S1AP_VOICESUPPORTMATCHINDICATOR_N_ITEMS,
}LIBLTE_S1AP_VOICESUPPORTMATCHINDICATOR_ENUM;
static const char liblte_s1ap_voicesupportmatchindicator_text[LIBLTE_S1AP_VOICESUPPORTMATCHINDICATOR_N_ITEMS][80] = {
  "supported",
  "not-supported",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_VOICESUPPORTMATCHINDICATOR_ENUM e;
}LIBLTE_S1AP_VOICESUPPORTMATCHINDICATOR_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_voicesupportmatchindicator(
  LIBLTE_S1AP_VOICESUPPORTMATCHINDICATOR_ENUM_EXT              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_voicesupportmatchindicator(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_VOICESUPPORTMATCHINDICATOR_ENUM_EXT              *ie);

/*******************************************************************************
/* ProtocolIE WarningSecurityInfo STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_WARNINGSECURITYINFO_OCTET_STRING_LEN 50
typedef struct{
  uint8_t  buffer[50];
}LIBLTE_S1AP_WARNINGSECURITYINFO_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_warningsecurityinfo(
  LIBLTE_S1AP_WARNINGSECURITYINFO_STRUCT                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_warningsecurityinfo(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_WARNINGSECURITYINFO_STRUCT                       *ie);

/*******************************************************************************
/* ProtocolIE ENBX2GTPTLAs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:16
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_ENBX2GTPTLAS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enbx2gtptlas(
  LIBLTE_S1AP_ENBX2GTPTLAS_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enbx2gtptlas(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ENBX2GTPTLAS_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE CauseTransport ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CAUSETRANSPORT_TRANSPORT_RESOURCE_UNAVAILABLE,
  LIBLTE_S1AP_CAUSETRANSPORT_UNSPECIFIED,
  LIBLTE_S1AP_CAUSETRANSPORT_N_ITEMS,
}LIBLTE_S1AP_CAUSETRANSPORT_ENUM;
static const char liblte_s1ap_causetransport_text[LIBLTE_S1AP_CAUSETRANSPORT_N_ITEMS][80] = {
  "transport-resource-unavailable",
  "unspecified",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CAUSETRANSPORT_ENUM e;
}LIBLTE_S1AP_CAUSETRANSPORT_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_causetransport(
  LIBLTE_S1AP_CAUSETRANSPORT_ENUM_EXT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_causetransport(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CAUSETRANSPORT_ENUM_EXT                          *ie);

/*******************************************************************************
/* ProtocolIE Cdma2000HOStatus ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CDMA2000HOSTATUS_HOSUCCESS,
  LIBLTE_S1AP_CDMA2000HOSTATUS_HOFAILURE,
  LIBLTE_S1AP_CDMA2000HOSTATUS_N_ITEMS,
}LIBLTE_S1AP_CDMA2000HOSTATUS_ENUM;
static const char liblte_s1ap_cdma2000hostatus_text[LIBLTE_S1AP_CDMA2000HOSTATUS_N_ITEMS][80] = {
  "hOSuccess",
  "hOFailure",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CDMA2000HOSTATUS_ENUM e;
}LIBLTE_S1AP_CDMA2000HOSTATUS_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cdma2000hostatus(
  LIBLTE_S1AP_CDMA2000HOSTATUS_ENUM_EXT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cdma2000hostatus(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CDMA2000HOSTATUS_ENUM_EXT                        *ie);

/*******************************************************************************
/* ProtocolIE Cdma2000OneXPilot DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_CDMA2000ONEXPILOT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cdma2000onexpilot(
  LIBLTE_S1AP_CDMA2000ONEXPILOT_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cdma2000onexpilot(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CDMA2000ONEXPILOT_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE ConcurrentWarningMessageIndicator ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CONCURRENTWARNINGMESSAGEINDICATOR_TRUE,
  LIBLTE_S1AP_CONCURRENTWARNINGMESSAGEINDICATOR_N_ITEMS,
}LIBLTE_S1AP_CONCURRENTWARNINGMESSAGEINDICATOR_ENUM;
static const char liblte_s1ap_concurrentwarningmessageindicator_text[LIBLTE_S1AP_CONCURRENTWARNINGMESSAGEINDICATOR_N_ITEMS][80] = {
  "true",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_concurrentwarningmessageindicator(
  LIBLTE_S1AP_CONCURRENTWARNINGMESSAGEINDICATOR_ENUM           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_concurrentwarningmessageindicator(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CONCURRENTWARNINGMESSAGEINDICATOR_ENUM           *ie);

/*******************************************************************************
/* ProtocolIE COUNTvalue SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_PDCP_SN_STRUCT                                   pDCP_SN;
  LIBLTE_S1AP_HFN_STRUCT                                       hFN;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_COUNTVALUE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_countvalue(
  LIBLTE_S1AP_COUNTVALUE_STRUCT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_countvalue(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_COUNTVALUE_STRUCT                                *ie);

/*******************************************************************************
/* ProtocolIE CriticalityDiagnostics_IE_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CRITICALITY_ENUM                                 iECriticality;
  LIBLTE_S1AP_PROTOCOLIE_ID_STRUCT                             iE_ID;
  LIBLTE_S1AP_TYPEOFERROR_ENUM_EXT                             typeOfError;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_IE_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_criticalitydiagnostics_ie_item(
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_IE_ITEM_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_criticalitydiagnostics_ie_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_IE_ITEM_STRUCT            *ie);

/*******************************************************************************
/* ProtocolIE ENBX2TLAs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:2
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_ENBX2TLAS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enbx2tlas(
  LIBLTE_S1AP_ENBX2TLAS_STRUCT                                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enbx2tlas(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ENBX2TLAS_STRUCT                                 *ie);

/*******************************************************************************
/* ProtocolIE ExtendedRepetitionPeriod INTEGER
********************************************************************************/
typedef struct{
uint32_t ExtendedRepetitionPeriod;
}LIBLTE_S1AP_EXTENDEDREPETITIONPERIOD_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_extendedrepetitionperiod(
  LIBLTE_S1AP_EXTENDEDREPETITIONPERIOD_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_extendedrepetitionperiod(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EXTENDEDREPETITIONPERIOD_STRUCT                  *ie);

/*******************************************************************************
/* ProtocolIE ForbiddenTACs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:4096
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TAC_STRUCT                                       buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_FORBIDDENTACS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_forbiddentacs(
  LIBLTE_S1AP_FORBIDDENTACS_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_forbiddentacs(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_FORBIDDENTACS_STRUCT                             *ie);

/*******************************************************************************
/* ProtocolIE GBR_QosInformation SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_BITRATE_STRUCT                                   e_RAB_MaximumBitrateDL;
  LIBLTE_S1AP_BITRATE_STRUCT                                   e_RAB_MaximumBitrateUL;
  LIBLTE_S1AP_BITRATE_STRUCT                                   e_RAB_GuaranteedBitrateDL;
  LIBLTE_S1AP_BITRATE_STRUCT                                   e_RAB_GuaranteedBitrateUL;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_GBR_QOSINFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_gbr_qosinformation(
  LIBLTE_S1AP_GBR_QOSINFORMATION_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_gbr_qosinformation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_GBR_QOSINFORMATION_STRUCT                        *ie);

/*******************************************************************************
/* ProtocolIE HFNModified INTEGER
********************************************************************************/
typedef struct{
uint32_t HFNModified;
}LIBLTE_S1AP_HFNMODIFIED_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_hfnmodified(
  LIBLTE_S1AP_HFNMODIFIED_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_hfnmodified(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_HFNMODIFIED_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE KillAllWarningMessages ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_KILLALLWARNINGMESSAGES_TRUE,
  LIBLTE_S1AP_KILLALLWARNINGMESSAGES_N_ITEMS,
}LIBLTE_S1AP_KILLALLWARNINGMESSAGES_ENUM;
static const char liblte_s1ap_killallwarningmessages_text[LIBLTE_S1AP_KILLALLWARNINGMESSAGES_N_ITEMS][80] = {
  "true",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_killallwarningmessages(
  LIBLTE_S1AP_KILLALLWARNINGMESSAGES_ENUM                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_killallwarningmessages(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_KILLALLWARNINGMESSAGES_ENUM                      *ie);

/*******************************************************************************
/* ProtocolIE LPPa_PDU DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_LPPA_PDU_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_lppa_pdu(
  LIBLTE_S1AP_LPPA_PDU_STRUCT                                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_lppa_pdu(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LPPA_PDU_STRUCT                                  *ie);

/*******************************************************************************
/* ProtocolIE M3Configuration SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_M3PERIOD_ENUM_EXT                                m3period;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_M3CONFIGURATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m3configuration(
  LIBLTE_S1AP_M3CONFIGURATION_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m3configuration(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_M3CONFIGURATION_STRUCT                           *ie);

/*******************************************************************************
/* ProtocolIE M5Configuration SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_M5PERIOD_ENUM_EXT                                m5period;
  LIBLTE_S1AP_LINKS_TO_LOG_ENUM_EXT                            m5_links_to_log;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_M5CONFIGURATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m5configuration(
  LIBLTE_S1AP_M5CONFIGURATION_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m5configuration(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_M5CONFIGURATION_STRUCT                           *ie);

/*******************************************************************************
/* ProtocolIE MeasurementThresholdA2 CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_MEASUREMENTTHRESHOLDA2_CHOICE_THRESHOLD_RSRP,
  LIBLTE_S1AP_MEASUREMENTTHRESHOLDA2_CHOICE_THRESHOLD_RSRQ,
  LIBLTE_S1AP_MEASUREMENTTHRESHOLDA2_CHOICE_N_ITEMS,
}LIBLTE_S1AP_MEASUREMENTTHRESHOLDA2_CHOICE_ENUM;
static const char liblte_s1ap_measurementthresholda2_choice_text[LIBLTE_S1AP_MEASUREMENTTHRESHOLDA2_CHOICE_N_ITEMS][50] = {
  "threshold_RSRP",
  "threshold_RSRQ",
};

typedef union{
  LIBLTE_S1AP_THRESHOLD_RSRP_STRUCT                            threshold_RSRP;
  LIBLTE_S1AP_THRESHOLD_RSRQ_STRUCT                            threshold_RSRQ;
}LIBLTE_S1AP_MEASUREMENTTHRESHOLDA2_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_MEASUREMENTTHRESHOLDA2_CHOICE_UNION choice;
  LIBLTE_S1AP_MEASUREMENTTHRESHOLDA2_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_MEASUREMENTTHRESHOLDA2_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_measurementthresholda2(
  LIBLTE_S1AP_MEASUREMENTTHRESHOLDA2_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_measurementthresholda2(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MEASUREMENTTHRESHOLDA2_STRUCT                    *ie);

/*******************************************************************************
/* ProtocolIE M_TMSI STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_M_TMSI_OCTET_STRING_LEN 4
typedef struct{
  uint8_t  buffer[4];
}LIBLTE_S1AP_M_TMSI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m_tmsi(
  LIBLTE_S1AP_M_TMSI_STRUCT                                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m_tmsi(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_M_TMSI_STRUCT                                    *ie);

/*******************************************************************************
/* ProtocolIE OldBSS_ToNewBSS_Information DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_OLDBSS_TONEWBSS_INFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_oldbss_tonewbss_information(
  LIBLTE_S1AP_OLDBSS_TONEWBSS_INFORMATION_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_oldbss_tonewbss_information(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_OLDBSS_TONEWBSS_INFORMATION_STRUCT               *ie);

/*******************************************************************************
/* ProtocolIE PLMNidentity STATIC OCTET STRING
********************************************************************************/
#define LIBLTE_S1AP_PLMNIDENTITY_OCTET_STRING_LEN 3
typedef struct{
  uint8_t  buffer[3];
}LIBLTE_S1AP_PLMNIDENTITY_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_plmnidentity(
  LIBLTE_S1AP_PLMNIDENTITY_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_plmnidentity(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PLMNIDENTITY_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE ReceiveStatusOfULPDCPSDUsExtended DYNAMIC BIT STRING
********************************************************************************/
// lb:1, ub:16384
typedef struct{
  uint32_t n_bits;
  uint8_t  buffer[16384];
}LIBLTE_S1AP_RECEIVESTATUSOFULPDCPSDUSEXTENDED_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_receivestatusofulpdcpsdusextended(
  LIBLTE_S1AP_RECEIVESTATUSOFULPDCPSDUSEXTENDED_STRUCT         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_receivestatusofulpdcpsdusextended(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RECEIVESTATUSOFULPDCPSDUSEXTENDED_STRUCT         *ie);

/*******************************************************************************
/* ProtocolIE RequestType SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_EVENTTYPE_ENUM_EXT                               eventType;
  LIBLTE_S1AP_REPORTAREA_ENUM_EXT                              reportArea;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_REQUESTTYPE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_requesttype(
  LIBLTE_S1AP_REQUESTTYPE_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_requesttype(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_REQUESTTYPE_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE RRC_Container DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_RRC_CONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_rrc_container(
  LIBLTE_S1AP_RRC_CONTAINER_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_rrc_container(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RRC_CONTAINER_STRUCT                             *ie);

/*******************************************************************************
/* ProtocolIE nextHopChainingCount INTEGER
********************************************************************************/
typedef struct{
uint8_t nextHopChainingCount;
}LIBLTE_S1AP_NEXTHOPCHAININGCOUNT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_nexthopchainingcount(
  LIBLTE_S1AP_NEXTHOPCHAININGCOUNT_STRUCT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_nexthopchainingcount(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_NEXTHOPCHAININGCOUNT_STRUCT                      *ie);

/*******************************************************************************
/* ProtocolIE SecurityContext SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_NEXTHOPCHAININGCOUNT_STRUCT                      nextHopChainingCount;
  LIBLTE_S1AP_SECURITYKEY_STRUCT                               nextHopParameter;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_SECURITYCONTEXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_securitycontext(
  LIBLTE_S1AP_SECURITYCONTEXT_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_securitycontext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SECURITYCONTEXT_STRUCT                           *ie);

/*******************************************************************************
/* ProtocolIE ServedMMECs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_MME_CODE_STRUCT                                  buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_SERVEDMMECS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_servedmmecs(
  LIBLTE_S1AP_SERVEDMMECS_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_servedmmecs(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SERVEDMMECS_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE TimeSynchronizationInfo SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_STRATUMLEVEL_STRUCT                              stratumLevel;
  LIBLTE_S1AP_SYNCHRONIZATIONSTATUS_ENUM_EXT                   synchronizationStatus;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_TIMESYNCHRONIZATIONINFO_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_timesynchronizationinfo(
  LIBLTE_S1AP_TIMESYNCHRONIZATIONINFO_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_timesynchronizationinfo(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TIMESYNCHRONIZATIONINFO_STRUCT                   *ie);

/*******************************************************************************
/* ProtocolIE TAI SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               pLMNidentity;
  LIBLTE_S1AP_TAC_STRUCT                                       tAC;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_TAI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tai(
  LIBLTE_S1AP_TAI_STRUCT                                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tai(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TAI_STRUCT                                       *ie);

/*******************************************************************************
/* ProtocolIE TABasedMDT SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TALISTFORMDT_STRUCT                              tAListforMDT;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_TABASEDMDT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tabasedmdt(
  LIBLTE_S1AP_TABASEDMDT_STRUCT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tabasedmdt(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TABASEDMDT_STRUCT                                *ie);

/*******************************************************************************
/* ProtocolIE TargeteNB_ToSourceeNB_TransparentContainer SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_RRC_CONTAINER_STRUCT                             rRC_Container;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_TARGETENB_TOSOURCEENB_TRANSPARENTCONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_targetenb_tosourceenb_transparentcontainer(
  LIBLTE_S1AP_TARGETENB_TOSOURCEENB_TRANSPARENTCONTAINER_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_targetenb_tosourceenb_transparentcontainer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TARGETENB_TOSOURCEENB_TRANSPARENTCONTAINER_STRUCT *ie);

/*******************************************************************************
/* ProtocolIE M1ThresholdEventA2 SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MEASUREMENTTHRESHOLDA2_STRUCT                    measurementThreshold;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_M1THRESHOLDEVENTA2_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m1thresholdeventa2(
  LIBLTE_S1AP_M1THRESHOLDEVENTA2_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m1thresholdeventa2(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_M1THRESHOLDEVENTA2_STRUCT                        *ie);

/*******************************************************************************
/* ProtocolIE TransportInformation SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     transportLayerAddress;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  uL_GTP_TEID;
}LIBLTE_S1AP_TRANSPORTINFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_transportinformation(
  LIBLTE_S1AP_TRANSPORTINFORMATION_STRUCT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_transportinformation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TRANSPORTINFORMATION_STRUCT                      *ie);

/*******************************************************************************
/* ProtocolIE TunnelInformation SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     transportLayerAddress;
  LIBLTE_S1AP_PORT_NUMBER_STRUCT                               uDP_Port_Number;
  bool                                                         uDP_Port_Number_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_TUNNELINFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tunnelinformation(
  LIBLTE_S1AP_TUNNELINFORMATION_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tunnelinformation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TUNNELINFORMATION_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE UE_S1AP_IDs CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_UE_S1AP_IDS_CHOICE_UE_S1AP_ID_PAIR,
  LIBLTE_S1AP_UE_S1AP_IDS_CHOICE_MME_UE_S1AP_ID,
  LIBLTE_S1AP_UE_S1AP_IDS_CHOICE_N_ITEMS,
}LIBLTE_S1AP_UE_S1AP_IDS_CHOICE_ENUM;
static const char liblte_s1ap_ue_s1ap_ids_choice_text[LIBLTE_S1AP_UE_S1AP_IDS_CHOICE_N_ITEMS][50] = {
  "uE_S1AP_ID_pair",
  "mME_UE_S1AP_ID",
};

typedef union{
  LIBLTE_S1AP_UE_S1AP_ID_PAIR_STRUCT                           uE_S1AP_ID_pair;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            mME_UE_S1AP_ID;
}LIBLTE_S1AP_UE_S1AP_IDS_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_UE_S1AP_IDS_CHOICE_UNION choice;
  LIBLTE_S1AP_UE_S1AP_IDS_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_UE_S1AP_IDS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ue_s1ap_ids(
  LIBLTE_S1AP_UE_S1AP_IDS_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ue_s1ap_ids(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_UE_S1AP_IDS_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE ENBX2ExtTLA SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     iPsecTLA;
  bool                                                         iPsecTLA_present;
  LIBLTE_S1AP_ENBX2GTPTLAS_STRUCT                              gTPTLAa;
  bool                                                         gTPTLAa_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_ENBX2EXTTLA_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enbx2exttla(
  LIBLTE_S1AP_ENBX2EXTTLA_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enbx2exttla(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ENBX2EXTTLA_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE BPLMNs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:6
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_BPLMNS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_bplmns(
  LIBLTE_S1AP_BPLMNS_STRUCT                                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_bplmns(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_BPLMNS_STRUCT                                    *ie);

/*******************************************************************************
/* ProtocolIE Cause CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_CAUSE_CHOICE_RADIONETWORK,
  LIBLTE_S1AP_CAUSE_CHOICE_TRANSPORT,
  LIBLTE_S1AP_CAUSE_CHOICE_NAS,
  LIBLTE_S1AP_CAUSE_CHOICE_PROTOCOL,
  LIBLTE_S1AP_CAUSE_CHOICE_MISC,
  LIBLTE_S1AP_CAUSE_CHOICE_N_ITEMS,
}LIBLTE_S1AP_CAUSE_CHOICE_ENUM;
static const char liblte_s1ap_cause_choice_text[LIBLTE_S1AP_CAUSE_CHOICE_N_ITEMS][50] = {
  "radioNetwork",
  "transport",
  "nas",
  "protocol",
  "misc",
};

typedef union{
  LIBLTE_S1AP_CAUSERADIONETWORK_ENUM_EXT                       radioNetwork;
  LIBLTE_S1AP_CAUSETRANSPORT_ENUM_EXT                          transport;
  LIBLTE_S1AP_CAUSENAS_ENUM_EXT                                nas;
  LIBLTE_S1AP_CAUSEPROTOCOL_ENUM_EXT                           protocol;
  LIBLTE_S1AP_CAUSEMISC_ENUM_EXT                               misc;
}LIBLTE_S1AP_CAUSE_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_CAUSE_CHOICE_UNION choice;
  LIBLTE_S1AP_CAUSE_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_CAUSE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cause(
  LIBLTE_S1AP_CAUSE_STRUCT                                     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cause(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CAUSE_STRUCT                                     *ie);

/*******************************************************************************
/* ProtocolIE Cdma2000OneXSRVCCInfo SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CDMA2000ONEXMEID_STRUCT                          cdma2000OneXMEID;
  LIBLTE_S1AP_CDMA2000ONEXMSI_STRUCT                           cdma2000OneXMSI;
  LIBLTE_S1AP_CDMA2000ONEXPILOT_STRUCT                         cdma2000OneXPilot;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_CDMA2000ONEXSRVCCINFO_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cdma2000onexsrvccinfo(
  LIBLTE_S1AP_CDMA2000ONEXSRVCCINFO_STRUCT                     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cdma2000onexsrvccinfo(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CDMA2000ONEXSRVCCINFO_STRUCT                     *ie);

/*******************************************************************************
/* ProtocolIE CGI SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               pLMNidentity;
  LIBLTE_S1AP_LAC_STRUCT                                       lAC;
  LIBLTE_S1AP_CI_STRUCT                                        cI;
  LIBLTE_S1AP_RAC_STRUCT                                       rAC;
  bool                                                         rAC_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_CGI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cgi(
  LIBLTE_S1AP_CGI_STRUCT                                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cgi(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CGI_STRUCT                                       *ie);

/*******************************************************************************
/* ProtocolIE COUNTValueExtended SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_PDCP_SNEXTENDED_STRUCT                           pDCP_SNExtended;
  LIBLTE_S1AP_HFNMODIFIED_STRUCT                               hFNModified;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_COUNTVALUEEXTENDED_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_countvalueextended(
  LIBLTE_S1AP_COUNTVALUEEXTENDED_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_countvalueextended(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_COUNTVALUEEXTENDED_STRUCT                        *ie);

/*******************************************************************************
/* ProtocolIE CriticalityDiagnostics_IE_List DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_IE_ITEM_STRUCT            buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_IE_LIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_criticalitydiagnostics_ie_list(
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_IE_LIST_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_criticalitydiagnostics_ie_list(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_IE_LIST_STRUCT            *ie);

/*******************************************************************************
/* ProtocolIE Global_ENB_ID SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               pLMNidentity;
  LIBLTE_S1AP_ENB_ID_STRUCT                                    eNB_ID;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_GLOBAL_ENB_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_global_enb_id(
  LIBLTE_S1AP_GLOBAL_ENB_ID_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_global_enb_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_GLOBAL_ENB_ID_STRUCT                             *ie);

/*******************************************************************************
/* ProtocolIE EPLMNs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:15
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_EPLMNS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_eplmns(
  LIBLTE_S1AP_EPLMNS_STRUCT                                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_eplmns(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EPLMNS_STRUCT                                    *ie);

/*******************************************************************************
/* ProtocolIE E_RABItem SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_CAUSE_STRUCT                                     cause;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabitem(
  LIBLTE_S1AP_E_RABITEM_STRUCT                                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABITEM_STRUCT                                 *ie);

/*******************************************************************************
/* ProtocolIE EUTRAN_CGI SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               pLMNidentity;
  LIBLTE_S1AP_CELLIDENTITY_STRUCT                              cell_ID;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_EUTRAN_CGI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_eutran_cgi(
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_eutran_cgi(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                *ie);

/*******************************************************************************
/* ProtocolIE ForbiddenTAs_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               pLMN_Identity;
  LIBLTE_S1AP_FORBIDDENTACS_STRUCT                             forbiddenTACs;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_FORBIDDENTAS_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_forbiddentas_item(
  LIBLTE_S1AP_FORBIDDENTAS_ITEM_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_forbiddentas_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_FORBIDDENTAS_ITEM_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE ForbiddenLAs_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               pLMN_Identity;
  LIBLTE_S1AP_FORBIDDENLACS_STRUCT                             forbiddenLACs;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_FORBIDDENLAS_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_forbiddenlas_item(
  LIBLTE_S1AP_FORBIDDENLAS_ITEM_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_forbiddenlas_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_FORBIDDENLAS_ITEM_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE LAI SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               pLMNidentity;
  LIBLTE_S1AP_LAC_STRUCT                                       lAC;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_LAI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_lai(
  LIBLTE_S1AP_LAI_STRUCT                                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_lai(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LAI_STRUCT                                       *ie);

/*******************************************************************************
/* ProtocolIE M4Configuration SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_M4PERIOD_ENUM_EXT                                m4period;
  LIBLTE_S1AP_LINKS_TO_LOG_ENUM_EXT                            m4_links_to_log;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_M4CONFIGURATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m4configuration(
  LIBLTE_S1AP_M4CONFIGURATION_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m4configuration(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_M4CONFIGURATION_STRUCT                           *ie);

/*******************************************************************************
/* ProtocolIE MDTPLMNList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:16
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_MDTPLMNLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mdtplmnlist(
  LIBLTE_S1AP_MDTPLMNLIST_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mdtplmnlist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MDTPLMNLIST_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE MMERelaySupportIndicator ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_MMERELAYSUPPORTINDICATOR_TRUE,
  LIBLTE_S1AP_MMERELAYSUPPORTINDICATOR_N_ITEMS,
}LIBLTE_S1AP_MMERELAYSUPPORTINDICATOR_ENUM;
static const char liblte_s1ap_mmerelaysupportindicator_text[LIBLTE_S1AP_MMERELAYSUPPORTINDICATOR_N_ITEMS][80] = {
  "true",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MMERELAYSUPPORTINDICATOR_ENUM e;
}LIBLTE_S1AP_MMERELAYSUPPORTINDICATOR_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mmerelaysupportindicator(
  LIBLTE_S1AP_MMERELAYSUPPORTINDICATOR_ENUM_EXT                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mmerelaysupportindicator(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MMERELAYSUPPORTINDICATOR_ENUM_EXT                *ie);

/*******************************************************************************
/* ProtocolIE PagingPriority ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_PAGINGPRIORITY_PRIOLEVEL1,
  LIBLTE_S1AP_PAGINGPRIORITY_PRIOLEVEL2,
  LIBLTE_S1AP_PAGINGPRIORITY_PRIOLEVEL3,
  LIBLTE_S1AP_PAGINGPRIORITY_PRIOLEVEL4,
  LIBLTE_S1AP_PAGINGPRIORITY_PRIOLEVEL5,
  LIBLTE_S1AP_PAGINGPRIORITY_PRIOLEVEL6,
  LIBLTE_S1AP_PAGINGPRIORITY_PRIOLEVEL7,
  LIBLTE_S1AP_PAGINGPRIORITY_PRIOLEVEL8,
  LIBLTE_S1AP_PAGINGPRIORITY_N_ITEMS,
}LIBLTE_S1AP_PAGINGPRIORITY_ENUM;
static const char liblte_s1ap_pagingpriority_text[LIBLTE_S1AP_PAGINGPRIORITY_N_ITEMS][80] = {
  "priolevel1",
  "priolevel2",
  "priolevel3",
  "priolevel4",
  "priolevel5",
  "priolevel6",
  "priolevel7",
  "priolevel8",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_PAGINGPRIORITY_ENUM e;
}LIBLTE_S1AP_PAGINGPRIORITY_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_pagingpriority(
  LIBLTE_S1AP_PAGINGPRIORITY_ENUM_EXT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_pagingpriority(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PAGINGPRIORITY_ENUM_EXT                          *ie);

/*******************************************************************************
/* ProtocolIE PriorityLevel INTEGER
********************************************************************************/
typedef struct{
uint8_t PriorityLevel;
}LIBLTE_S1AP_PRIORITYLEVEL_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_prioritylevel(
  LIBLTE_S1AP_PRIORITYLEVEL_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_prioritylevel(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PRIORITYLEVEL_STRUCT                             *ie);

/*******************************************************************************
/* ProtocolIE ECGIListForRestart DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_ECGILISTFORRESTART_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ecgilistforrestart(
  LIBLTE_S1AP_ECGILISTFORRESTART_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ecgilistforrestart(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ECGILISTFORRESTART_STRUCT                        *ie);

/*******************************************************************************
/* ProtocolIE SourceeNB_ID SEQUENCE
********************************************************************************/
typedef struct{
  LIBLTE_S1AP_GLOBAL_ENB_ID_STRUCT                             global_ENB_ID;
  LIBLTE_S1AP_TAI_STRUCT                                       selected_TAI;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_SOURCEENB_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_sourceenb_id(
  LIBLTE_S1AP_SOURCEENB_ID_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_sourceenb_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SOURCEENB_ID_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE ServedPLMNs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:32
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_SERVEDPLMNS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_servedplmns(
  LIBLTE_S1AP_SERVEDPLMNS_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_servedplmns(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SERVEDPLMNS_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE SupportedTAs_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TAC_STRUCT                                       tAC;
  LIBLTE_S1AP_BPLMNS_STRUCT                                    broadcastPLMNs;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_SUPPORTEDTAS_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_supportedtas_item(
  LIBLTE_S1AP_SUPPORTEDTAS_ITEM_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_supportedtas_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SUPPORTEDTAS_ITEM_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE TAIListforMDT DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:8
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TAI_STRUCT                                       buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_TAILISTFORMDT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tailistformdt(
  LIBLTE_S1AP_TAILISTFORMDT_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tailistformdt(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TAILISTFORMDT_STRUCT                             *ie);

/*******************************************************************************
/* ProtocolIE CompletedCellinTAI_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                eCGI;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_COMPLETEDCELLINTAI_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_completedcellintai_item(
  LIBLTE_S1AP_COMPLETEDCELLINTAI_ITEM_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_completedcellintai_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_COMPLETEDCELLINTAI_ITEM_STRUCT                   *ie);

/*******************************************************************************
/* ProtocolIE TargeteNB_ID SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_GLOBAL_ENB_ID_STRUCT                             global_ENB_ID;
  LIBLTE_S1AP_TAI_STRUCT                                       selected_TAI;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_TARGETENB_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_targetenb_id(
  LIBLTE_S1AP_TARGETENB_ID_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_targetenb_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TARGETENB_ID_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE TargetBSS_ToSourceBSS_TransparentContainer DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_TARGETBSS_TOSOURCEBSS_TRANSPARENTCONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_targetbss_tosourcebss_transparentcontainer(
  LIBLTE_S1AP_TARGETBSS_TOSOURCEBSS_TRANSPARENTCONTAINER_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_targetbss_tosourcebss_transparentcontainer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TARGETBSS_TOSOURCEBSS_TRANSPARENTCONTAINER_STRUCT *ie);

/*******************************************************************************
/* ProtocolIE TAIListForRestart DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:2048
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TAI_STRUCT                                       buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_TAILISTFORRESTART_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tailistforrestart(
  LIBLTE_S1AP_TAILISTFORRESTART_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tailistforrestart(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TAILISTFORRESTART_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE UserLocationInformation SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                eutran_cgi;
  LIBLTE_S1AP_TAI_STRUCT                                       tai;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_USERLOCATIONINFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_userlocationinformation(
  LIBLTE_S1AP_USERLOCATIONINFORMATION_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_userlocationinformation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_USERLOCATIONINFORMATION_STRUCT                   *ie);

/*******************************************************************************
/* ProtocolIE ENBX2ExtTLAs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:16
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_ENBX2EXTTLA_STRUCT                               buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_ENBX2EXTTLAS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enbx2exttlas(
  LIBLTE_S1AP_ENBX2EXTTLAS_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enbx2exttlas(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ENBX2EXTTLAS_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE AllocationAndRetentionPriority SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_PRIORITYLEVEL_STRUCT                             priorityLevel;
  LIBLTE_S1AP_PRE_EMPTIONCAPABILITY_ENUM                       pre_emptionCapability;
  LIBLTE_S1AP_PRE_EMPTIONVULNERABILITY_ENUM                    pre_emptionVulnerability;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_ALLOCATIONANDRETENTIONPRIORITY_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_allocationandretentionpriority(
  LIBLTE_S1AP_ALLOCATIONANDRETENTIONPRIORITY_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_allocationandretentionpriority(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ALLOCATIONANDRETENTIONPRIORITY_STRUCT            *ie);

/*******************************************************************************
/* ProtocolIE CancelledCellinEAI_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                eCGI;
  LIBLTE_S1AP_NUMBEROFBROADCASTS_STRUCT                        numberOfBroadcasts;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_CANCELLEDCELLINEAI_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cancelledcellineai_item(
  LIBLTE_S1AP_CANCELLEDCELLINEAI_ITEM_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cancelledcellineai_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CANCELLEDCELLINEAI_ITEM_STRUCT                   *ie);

/*******************************************************************************
/* ProtocolIE CancelledCellinTAI_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                eCGI;
  LIBLTE_S1AP_NUMBEROFBROADCASTS_STRUCT                        numberOfBroadcasts;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_CANCELLEDCELLINTAI_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cancelledcellintai_item(
  LIBLTE_S1AP_CANCELLEDCELLINTAI_ITEM_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cancelledcellintai_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CANCELLEDCELLINTAI_ITEM_STRUCT                   *ie);

/*******************************************************************************
/* ProtocolIE CellID_Broadcast_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                eCGI;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_CELLID_BROADCAST_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cellid_broadcast_item(
  LIBLTE_S1AP_CELLID_BROADCAST_ITEM_STRUCT                     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cellid_broadcast_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CELLID_BROADCAST_ITEM_STRUCT                     *ie);

/*******************************************************************************
/* ProtocolIE CellID_Cancelled_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                eCGI;
  LIBLTE_S1AP_NUMBEROFBROADCASTS_STRUCT                        numberOfBroadcasts;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_CELLID_CANCELLED_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cellid_cancelled_item(
  LIBLTE_S1AP_CELLID_CANCELLED_ITEM_STRUCT                     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cellid_cancelled_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CELLID_CANCELLED_ITEM_STRUCT                     *ie);

/*******************************************************************************
/* ProtocolIE CellIdListforMDT DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:32
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_CELLIDLISTFORMDT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cellidlistformdt(
  LIBLTE_S1AP_CELLIDLISTFORMDT_STRUCT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cellidlistformdt(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CELLIDLISTFORMDT_STRUCT                          *ie);

/*******************************************************************************
/* ProtocolIE CSG_Id STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_CSG_ID_BIT_STRING_LEN 27
typedef struct{
  uint8_t  buffer[27];
}LIBLTE_S1AP_CSG_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_csg_id(
  LIBLTE_S1AP_CSG_ID_STRUCT                                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_csg_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CSG_ID_STRUCT                                    *ie);

/*******************************************************************************
/* ProtocolIE CSG_IdList_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CSG_ID_STRUCT                                    cSG_Id;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_CSG_IDLIST_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_csg_idlist_item(
  LIBLTE_S1AP_CSG_IDLIST_ITEM_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_csg_idlist_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CSG_IDLIST_ITEM_STRUCT                           *ie);

/*******************************************************************************
/* ProtocolIE Direct_Forwarding_Path_Availability ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_DIRECT_FORWARDING_PATH_AVAILABILITY_DIRECTPATHAVAILABLE,
  LIBLTE_S1AP_DIRECT_FORWARDING_PATH_AVAILABILITY_N_ITEMS,
}LIBLTE_S1AP_DIRECT_FORWARDING_PATH_AVAILABILITY_ENUM;
static const char liblte_s1ap_direct_forwarding_path_availability_text[LIBLTE_S1AP_DIRECT_FORWARDING_PATH_AVAILABILITY_N_ITEMS][80] = {
  "directPathAvailable",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_DIRECT_FORWARDING_PATH_AVAILABILITY_ENUM e;
}LIBLTE_S1AP_DIRECT_FORWARDING_PATH_AVAILABILITY_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_direct_forwarding_path_availability(
  LIBLTE_S1AP_DIRECT_FORWARDING_PATH_AVAILABILITY_ENUM_EXT     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_direct_forwarding_path_availability(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_DIRECT_FORWARDING_PATH_AVAILABILITY_ENUM_EXT     *ie);

/*******************************************************************************
/* ProtocolIE CompletedCellinEAI_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                eCGI;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_COMPLETEDCELLINEAI_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_completedcellineai_item(
  LIBLTE_S1AP_COMPLETEDCELLINEAI_ITEM_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_completedcellineai_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_COMPLETEDCELLINEAI_ITEM_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Container List E_RABInformationList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABINFORMATIONLISTITEM_STRUCT                  buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABINFORMATIONLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabinformationlist(
  LIBLTE_S1AP_E_RABINFORMATIONLIST_STRUCT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabinformationlist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABINFORMATIONLIST_STRUCT                      *ie);

/*******************************************************************************
/* ProtocolIE ForbiddenTAs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:16
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_FORBIDDENTAS_ITEM_STRUCT                         buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_FORBIDDENTAS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_forbiddentas(
  LIBLTE_S1AP_FORBIDDENTAS_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_forbiddentas(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_FORBIDDENTAS_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE GUMMEI SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               pLMN_Identity;
  LIBLTE_S1AP_MME_GROUP_ID_STRUCT                              mME_Group_ID;
  LIBLTE_S1AP_MME_CODE_STRUCT                                  mME_Code;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_GUMMEI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_gummei(
  LIBLTE_S1AP_GUMMEI_STRUCT                                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_gummei(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_GUMMEI_STRUCT                                    *ie);

/*******************************************************************************
/* ProtocolIE LoggedMDT SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_LOGGINGINTERVAL_ENUM                             loggingInterval;
  LIBLTE_S1AP_LOGGINGDURATION_ENUM                             loggingDuration;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_LOGGEDMDT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_loggedmdt(
  LIBLTE_S1AP_LOGGEDMDT_STRUCT                                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_loggedmdt(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LOGGEDMDT_STRUCT                                 *ie);

/*******************************************************************************
/* ProtocolIE NASSecurityParametersfromE_UTRAN DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_NASSECURITYPARAMETERSFROME_UTRAN_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_nassecurityparametersfrome_utran(
  LIBLTE_S1AP_NASSECURITYPARAMETERSFROME_UTRAN_STRUCT          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_nassecurityparametersfrome_utran(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_NASSECURITYPARAMETERSFROME_UTRAN_STRUCT          *ie);

/*******************************************************************************
/* ProtocolIE ReportAmountMDT ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_REPORTAMOUNTMDT_R1,
  LIBLTE_S1AP_REPORTAMOUNTMDT_R2,
  LIBLTE_S1AP_REPORTAMOUNTMDT_R4,
  LIBLTE_S1AP_REPORTAMOUNTMDT_R8,
  LIBLTE_S1AP_REPORTAMOUNTMDT_R16,
  LIBLTE_S1AP_REPORTAMOUNTMDT_R32,
  LIBLTE_S1AP_REPORTAMOUNTMDT_R64,
  LIBLTE_S1AP_REPORTAMOUNTMDT_RINFINITY,
  LIBLTE_S1AP_REPORTAMOUNTMDT_N_ITEMS,
}LIBLTE_S1AP_REPORTAMOUNTMDT_ENUM;
static const char liblte_s1ap_reportamountmdt_text[LIBLTE_S1AP_REPORTAMOUNTMDT_N_ITEMS][80] = {
  "r1",
  "r2",
  "r4",
  "r8",
  "r16",
  "r32",
  "r64",
  "rinfinity",
};

LIBLTE_ERROR_ENUM liblte_s1ap_pack_reportamountmdt(
  LIBLTE_S1AP_REPORTAMOUNTMDT_ENUM                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_reportamountmdt(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_REPORTAMOUNTMDT_ENUM                             *ie);

/*******************************************************************************
/* ProtocolIE ServedGUMMEIsItem SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_SERVEDPLMNS_STRUCT                               servedPLMNs;
  LIBLTE_S1AP_SERVEDGROUPIDS_STRUCT                            servedGroupIDs;
  LIBLTE_S1AP_SERVEDMMECS_STRUCT                               servedMMECs;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_SERVEDGUMMEISITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_servedgummeisitem(
  LIBLTE_S1AP_SERVEDGUMMEISITEM_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_servedgummeisitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SERVEDGUMMEISITEM_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE S_TMSI SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_CODE_STRUCT                                  mMEC;
  LIBLTE_S1AP_M_TMSI_STRUCT                                    m_TMSI;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_S_TMSI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_s_tmsi(
  LIBLTE_S1AP_S_TMSI_STRUCT                                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_s_tmsi(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_S_TMSI_STRUCT                                    *ie);

/*******************************************************************************
/* ProtocolIE TAIListforWarning DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TAI_STRUCT                                       buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_TAILISTFORWARNING_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tailistforwarning(
  LIBLTE_S1AP_TAILISTFORWARNING_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tailistforwarning(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TAILISTFORWARNING_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE CompletedCellinTAI DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_COMPLETEDCELLINTAI_ITEM_STRUCT                   buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_COMPLETEDCELLINTAI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_completedcellintai(
  LIBLTE_S1AP_COMPLETEDCELLINTAI_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_completedcellintai(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_COMPLETEDCELLINTAI_STRUCT                        *ie);

/*******************************************************************************
/* ProtocolIE TargetRNC_ID SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_LAI_STRUCT                                       lAI;
  LIBLTE_S1AP_RAC_STRUCT                                       rAC;
  bool                                                         rAC_present;
  LIBLTE_S1AP_RNC_ID_STRUCT                                    rNC_ID;
  LIBLTE_S1AP_EXTENDEDRNC_ID_STRUCT                            extendedRNC_ID;
  bool                                                         extendedRNC_ID_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_TARGETRNC_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_targetrnc_id(
  LIBLTE_S1AP_TARGETRNC_ID_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_targetrnc_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TARGETRNC_ID_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE UE_associatedLogicalS1_ConnectionItem SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            mME_UE_S1AP_ID;
  bool                                                         mME_UE_S1AP_ID_present;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  bool                                                         eNB_UE_S1AP_ID_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ue_associatedlogicals1_connectionitem(
  LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEM_STRUCT     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ue_associatedlogicals1_connectionitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEM_STRUCT     *ie);

/*******************************************************************************
/* ProtocolIE UEPagingID CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_UEPAGINGID_CHOICE_S_TMSI,
  LIBLTE_S1AP_UEPAGINGID_CHOICE_IMSI,
  LIBLTE_S1AP_UEPAGINGID_CHOICE_N_ITEMS,
}LIBLTE_S1AP_UEPAGINGID_CHOICE_ENUM;
static const char liblte_s1ap_uepagingid_choice_text[LIBLTE_S1AP_UEPAGINGID_CHOICE_N_ITEMS][50] = {
  "s_TMSI",
  "iMSI",
};

typedef union{
  LIBLTE_S1AP_S_TMSI_STRUCT                                    s_TMSI;
  LIBLTE_S1AP_IMSI_STRUCT                                      iMSI;
}LIBLTE_S1AP_UEPAGINGID_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_UEPAGINGID_CHOICE_UNION choice;
  LIBLTE_S1AP_UEPAGINGID_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_UEPAGINGID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uepagingid(
  LIBLTE_S1AP_UEPAGINGID_STRUCT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uepagingid(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_UEPAGINGID_STRUCT                                *ie);

/*******************************************************************************
/* ProtocolIE Bearers_SubjectToStatusTransfer_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_COUNTVALUE_STRUCT                                uL_COUNTvalue;
  LIBLTE_S1AP_COUNTVALUE_STRUCT                                dL_COUNTvalue;
  LIBLTE_S1AP_RECEIVESTATUSOFULPDCPSDUS_STRUCT                 receiveStatusofULPDCPSDUs;
  bool                                                         receiveStatusofULPDCPSDUs_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_BEARERS_SUBJECTTOSTATUSTRANSFER_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_bearers_subjecttostatustransfer_item(
  LIBLTE_S1AP_BEARERS_SUBJECTTOSTATUSTRANSFER_ITEM_STRUCT      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_bearers_subjecttostatustransfer_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_BEARERS_SUBJECTTOSTATUSTRANSFER_ITEM_STRUCT      *ie);

/*******************************************************************************
/* ProtocolIE CancelledCellinEAI DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_CANCELLEDCELLINEAI_ITEM_STRUCT                   buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_CANCELLEDCELLINEAI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cancelledcellineai(
  LIBLTE_S1AP_CANCELLEDCELLINEAI_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cancelledcellineai(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CANCELLEDCELLINEAI_STRUCT                        *ie);

/*******************************************************************************
/* ProtocolIE CellID_Broadcast DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_CELLID_BROADCAST_ITEM_STRUCT                     buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_CELLID_BROADCAST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cellid_broadcast(
  LIBLTE_S1AP_CELLID_BROADCAST_STRUCT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cellid_broadcast(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CELLID_BROADCAST_STRUCT                          *ie);

/*******************************************************************************
/* ProtocolIE CellBasedMDT SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CELLIDLISTFORMDT_STRUCT                          cellIdListforMDT;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_CELLBASEDMDT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cellbasedmdt(
  LIBLTE_S1AP_CELLBASEDMDT_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cellbasedmdt(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CELLBASEDMDT_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE CSG_IdList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_CSG_IDLIST_ITEM_STRUCT                           buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_CSG_IDLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_csg_idlist(
  LIBLTE_S1AP_CSG_IDLIST_STRUCT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_csg_idlist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CSG_IDLIST_STRUCT                                *ie);

/*******************************************************************************
/* ProtocolIE ECGIList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_ECGILIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ecgilist(
  LIBLTE_S1AP_ECGILIST_STRUCT                                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ecgilist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ECGILIST_STRUCT                                  *ie);

/*******************************************************************************
/* ProtocolIE EmergencyAreaID_Cancelled_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_EMERGENCYAREAID_STRUCT                           emergencyAreaID;
  LIBLTE_S1AP_CANCELLEDCELLINEAI_STRUCT                        cancelledCellinEAI;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_EMERGENCYAREAID_CANCELLED_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_emergencyareaid_cancelled_item(
  LIBLTE_S1AP_EMERGENCYAREAID_CANCELLED_ITEM_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_emergencyareaid_cancelled_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EMERGENCYAREAID_CANCELLED_ITEM_STRUCT            *ie);

/*******************************************************************************
/* ProtocolIE GERAN_Cell_ID SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_LAI_STRUCT                                       lAI;
  LIBLTE_S1AP_RAC_STRUCT                                       rAC;
  LIBLTE_S1AP_CI_STRUCT                                        cI;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_GERAN_CELL_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_geran_cell_id(
  LIBLTE_S1AP_GERAN_CELL_ID_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_geran_cell_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_GERAN_CELL_ID_STRUCT                             *ie);

/*******************************************************************************
/* Protocol Container List E_RABList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABITEM_STRUCT                                 buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rablist(
  LIBLTE_S1AP_E_RABLIST_STRUCT                                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rablist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABLIST_STRUCT                                 *ie);

/*******************************************************************************
/* ProtocolIE ForbiddenLAs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:16
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_FORBIDDENLAS_ITEM_STRUCT                         buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_FORBIDDENLAS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_forbiddenlas(
  LIBLTE_S1AP_FORBIDDENLAS_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_forbiddenlas(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_FORBIDDENLAS_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE MDT_Location_Info STATIC BIT STRING
********************************************************************************/
#define LIBLTE_S1AP_MDT_LOCATION_INFO_BIT_STRING_LEN 8
typedef struct{
  uint8_t  buffer[8];
}LIBLTE_S1AP_MDT_LOCATION_INFO_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mdt_location_info(
  LIBLTE_S1AP_MDT_LOCATION_INFO_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mdt_location_info(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MDT_LOCATION_INFO_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE M1PeriodicReporting SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_REPORTINTERVALMDT_ENUM                           reportInterval;
  LIBLTE_S1AP_REPORTAMOUNTMDT_ENUM                             reportAmount;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_M1PERIODICREPORTING_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m1periodicreporting(
  LIBLTE_S1AP_M1PERIODICREPORTING_STRUCT                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m1periodicreporting(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_M1PERIODICREPORTING_STRUCT                       *ie);

/*******************************************************************************
/* ProtocolIE eHRPD_Sector_ID DYNAMIC OCTET STRING
********************************************************************************/
// lb:0, ub:16318
typedef struct{
  uint32_t n_octets;
  uint8_t  buffer[16318];
}LIBLTE_S1AP_EHRPD_SECTOR_ID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ehrpd_sector_id(
  LIBLTE_S1AP_EHRPD_SECTOR_ID_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ehrpd_sector_id(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EHRPD_SECTOR_ID_STRUCT                           *ie);

/*******************************************************************************
/* ProtocolIE RIMRoutingAddress CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_RIMROUTINGADDRESS_CHOICE_GERAN_CELL_ID,
  LIBLTE_S1AP_RIMROUTINGADDRESS_CHOICE_TARGETRNC_ID,
  LIBLTE_S1AP_RIMROUTINGADDRESS_CHOICE_EHRPD_SECTOR_ID,
  LIBLTE_S1AP_RIMROUTINGADDRESS_CHOICE_N_ITEMS,
}LIBLTE_S1AP_RIMROUTINGADDRESS_CHOICE_ENUM;
static const char liblte_s1ap_rimroutingaddress_choice_text[LIBLTE_S1AP_RIMROUTINGADDRESS_CHOICE_N_ITEMS][50] = {
  "gERAN_Cell_ID",
  "targetRNC_ID",
  "eHRPD_Sector_ID",
};

typedef union{
  LIBLTE_S1AP_GERAN_CELL_ID_STRUCT                             gERAN_Cell_ID;
  LIBLTE_S1AP_TARGETRNC_ID_STRUCT                              targetRNC_ID;
  LIBLTE_S1AP_EHRPD_SECTOR_ID_STRUCT                           eHRPD_Sector_ID;
}LIBLTE_S1AP_RIMROUTINGADDRESS_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_RIMROUTINGADDRESS_CHOICE_UNION choice;
  LIBLTE_S1AP_RIMROUTINGADDRESS_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_RIMROUTINGADDRESS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_rimroutingaddress(
  LIBLTE_S1AP_RIMROUTINGADDRESS_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_rimroutingaddress(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RIMROUTINGADDRESS_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE ServedGUMMEIs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:8
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_SERVEDGUMMEISITEM_STRUCT                         buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_SERVEDGUMMEIS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_servedgummeis(
  LIBLTE_S1AP_SERVEDGUMMEIS_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_servedgummeis(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SERVEDGUMMEIS_STRUCT                             *ie);

/*******************************************************************************
/* ProtocolIE TAIBasedMDT SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TAILISTFORMDT_STRUCT                             tAIListforMDT;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_TAIBASEDMDT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_taibasedmdt(
  LIBLTE_S1AP_TAIBASEDMDT_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_taibasedmdt(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TAIBASEDMDT_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE TAI_Broadcast_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TAI_STRUCT                                       tAI;
  LIBLTE_S1AP_COMPLETEDCELLINTAI_STRUCT                        completedCellinTAI;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_TAI_BROADCAST_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tai_broadcast_item(
  LIBLTE_S1AP_TAI_BROADCAST_ITEM_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tai_broadcast_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TAI_BROADCAST_ITEM_STRUCT                        *ie);

/*******************************************************************************
/* ProtocolIE TargetID CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_TARGETID_CHOICE_TARGETENB_ID,
  LIBLTE_S1AP_TARGETID_CHOICE_TARGETRNC_ID,
  LIBLTE_S1AP_TARGETID_CHOICE_CGI,
  LIBLTE_S1AP_TARGETID_CHOICE_N_ITEMS,
}LIBLTE_S1AP_TARGETID_CHOICE_ENUM;
static const char liblte_s1ap_targetid_choice_text[LIBLTE_S1AP_TARGETID_CHOICE_N_ITEMS][50] = {
  "targeteNB_ID",
  "targetRNC_ID",
  "cGI",
};

typedef union{
  LIBLTE_S1AP_TARGETENB_ID_STRUCT                              targeteNB_ID;
  LIBLTE_S1AP_TARGETRNC_ID_STRUCT                              targetRNC_ID;
  LIBLTE_S1AP_CGI_STRUCT                                       cGI;
}LIBLTE_S1AP_TARGETID_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_TARGETID_CHOICE_UNION choice;
  LIBLTE_S1AP_TARGETID_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_TARGETID_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_targetid(
  LIBLTE_S1AP_TARGETID_STRUCT                                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_targetid(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TARGETID_STRUCT                                  *ie);

/*******************************************************************************
/* ProtocolIE WarningAreaList CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_WARNINGAREALIST_CHOICE_CELLIDLIST,
  LIBLTE_S1AP_WARNINGAREALIST_CHOICE_TRACKINGAREALISTFORWARNING,
  LIBLTE_S1AP_WARNINGAREALIST_CHOICE_EMERGENCYAREAIDLIST,
  LIBLTE_S1AP_WARNINGAREALIST_CHOICE_N_ITEMS,
}LIBLTE_S1AP_WARNINGAREALIST_CHOICE_ENUM;
static const char liblte_s1ap_warningarealist_choice_text[LIBLTE_S1AP_WARNINGAREALIST_CHOICE_N_ITEMS][50] = {
  "cellIDList",
  "trackingAreaListforWarning",
  "emergencyAreaIDList",
};

typedef union{
  LIBLTE_S1AP_ECGILIST_STRUCT                                  cellIDList;
  LIBLTE_S1AP_TAILISTFORWARNING_STRUCT                         trackingAreaListforWarning;
  LIBLTE_S1AP_EMERGENCYAREAIDLIST_STRUCT                       emergencyAreaIDList;
}LIBLTE_S1AP_WARNINGAREALIST_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_WARNINGAREALIST_CHOICE_UNION choice;
  LIBLTE_S1AP_WARNINGAREALIST_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_WARNINGAREALIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_warningarealist(
  LIBLTE_S1AP_WARNINGAREALIST_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_warningarealist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_WARNINGAREALIST_STRUCT                           *ie);

//TODO: Type pLMNWide NULL

/*******************************************************************************
/* ProtocolIE AreaScopeOfMDT CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_AREASCOPEOFMDT_CHOICE_CELLBASED,
  LIBLTE_S1AP_AREASCOPEOFMDT_CHOICE_TABASED,
  LIBLTE_S1AP_AREASCOPEOFMDT_CHOICE_PLMNWIDE,
  LIBLTE_S1AP_AREASCOPEOFMDT_CHOICE_TAIBASED,
  LIBLTE_S1AP_AREASCOPEOFMDT_CHOICE_N_ITEMS,
}LIBLTE_S1AP_AREASCOPEOFMDT_CHOICE_ENUM;
static const char liblte_s1ap_areascopeofmdt_choice_text[LIBLTE_S1AP_AREASCOPEOFMDT_CHOICE_N_ITEMS][50] = {
  "cellBased",
  "tABased",
  "pLMNWide",
  "tAIBased",
};

typedef union{
  LIBLTE_S1AP_CELLBASEDMDT_STRUCT                              cellBased;
  LIBLTE_S1AP_TABASEDMDT_STRUCT                                tABased;
  //TODO: NULL                                                 pLMNWide;
  LIBLTE_S1AP_TAIBASEDMDT_STRUCT                               tAIBased;
}LIBLTE_S1AP_AREASCOPEOFMDT_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_AREASCOPEOFMDT_CHOICE_UNION choice;
  LIBLTE_S1AP_AREASCOPEOFMDT_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_AREASCOPEOFMDT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_areascopeofmdt(
  LIBLTE_S1AP_AREASCOPEOFMDT_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_areascopeofmdt(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_AREASCOPEOFMDT_STRUCT                            *ie);

/*******************************************************************************
/* ProtocolIE CancelledCellinTAI DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_CANCELLEDCELLINTAI_ITEM_STRUCT                   buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_CANCELLEDCELLINTAI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cancelledcellintai(
  LIBLTE_S1AP_CANCELLEDCELLINTAI_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cancelledcellintai(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CANCELLEDCELLINTAI_STRUCT                        *ie);

/*******************************************************************************
/* ProtocolIE CellType SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CELL_SIZE_ENUM_EXT                               cell_Size;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_CELLTYPE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_celltype(
  LIBLTE_S1AP_CELLTYPE_STRUCT                                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_celltype(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CELLTYPE_STRUCT                                  *ie);

/*******************************************************************************
/* ProtocolIE EmergencyAreaID_Cancelled DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_EMERGENCYAREAID_CANCELLED_ITEM_STRUCT            buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_EMERGENCYAREAID_CANCELLED_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_emergencyareaid_cancelled(
  LIBLTE_S1AP_EMERGENCYAREAID_CANCELLED_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_emergencyareaid_cancelled(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EMERGENCYAREAID_CANCELLED_STRUCT                 *ie);

/*******************************************************************************
/* ProtocolIE GUMMEIList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_GUMMEI_STRUCT                                    buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_GUMMEILIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_gummeilist(
  LIBLTE_S1AP_GUMMEILIST_STRUCT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_gummeilist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_GUMMEILIST_STRUCT                                *ie);

/*******************************************************************************
/* ProtocolIE E_RABLevelQoSParameters SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_QCI_STRUCT                                       qCI;
  LIBLTE_S1AP_ALLOCATIONANDRETENTIONPRIORITY_STRUCT            allocationRetentionPriority;
  LIBLTE_S1AP_GBR_QOSINFORMATION_STRUCT                        gbrQosInformation;
  bool                                                         gbrQosInformation_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABLEVELQOSPARAMETERS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rablevelqosparameters(
  LIBLTE_S1AP_E_RABLEVELQOSPARAMETERS_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rablevelqosparameters(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABLEVELQOSPARAMETERS_STRUCT                   *ie);

/*******************************************************************************
/* ProtocolIE LastVisitedEUTRANCellInformation SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                global_Cell_ID;
  LIBLTE_S1AP_CELLTYPE_STRUCT                                  cellType;
  LIBLTE_S1AP_TIME_UE_STAYEDINCELL_STRUCT                      time_UE_StayedInCell;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_LASTVISITEDEUTRANCELLINFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_lastvisitedeutrancellinformation(
  LIBLTE_S1AP_LASTVISITEDEUTRANCELLINFORMATION_STRUCT          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_lastvisitedeutrancellinformation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LASTVISITEDEUTRANCELLINFORMATION_STRUCT          *ie);

/*******************************************************************************
/* ProtocolIE RIMTransfer SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_RIMINFORMATION_STRUCT                            rIMInformation;
  LIBLTE_S1AP_RIMROUTINGADDRESS_STRUCT                         rIMRoutingAddress;
  bool                                                         rIMRoutingAddress_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_RIMTRANSFER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_rimtransfer(
  LIBLTE_S1AP_RIMTRANSFER_STRUCT                               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_rimtransfer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RIMTRANSFER_STRUCT                               *ie);

/*******************************************************************************
/* ProtocolIE SupportedTAs DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_SUPPORTEDTAS_ITEM_STRUCT                         buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_SUPPORTEDTAS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_supportedtas(
  LIBLTE_S1AP_SUPPORTEDTAS_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_supportedtas(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SUPPORTEDTAS_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE TAI_Cancelled_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TAI_STRUCT                                       tAI;
  LIBLTE_S1AP_CANCELLEDCELLINTAI_STRUCT                        cancelledCellinTAI;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_TAI_CANCELLED_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tai_cancelled_item(
  LIBLTE_S1AP_TAI_CANCELLED_ITEM_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tai_cancelled_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TAI_CANCELLED_ITEM_STRUCT                        *ie);

/*******************************************************************************
/* ProtocolIE X2TNLConfigurationInfo SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_ENBX2TLAS_STRUCT                                 eNBX2TransportLayerAddresses;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_X2TNLCONFIGURATIONINFO_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_x2tnlconfigurationinfo(
  LIBLTE_S1AP_X2TNLCONFIGURATIONINFO_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_x2tnlconfigurationinfo(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_X2TNLCONFIGURATIONINFO_STRUCT                    *ie);

/*******************************************************************************
/* Protocol Container List Bearers_SubjectToStatusTransferList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_BEARERS_SUBJECTTOSTATUSTRANSFER_ITEM_STRUCT      buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_BEARERS_SUBJECTTOSTATUSTRANSFERLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_bearers_subjecttostatustransferlist(
  LIBLTE_S1AP_BEARERS_SUBJECTTOSTATUSTRANSFERLIST_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_bearers_subjecttostatustransferlist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_BEARERS_SUBJECTTOSTATUSTRANSFERLIST_STRUCT       *ie);

/*******************************************************************************
/* ProtocolIE CellID_Cancelled DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_CELLID_CANCELLED_ITEM_STRUCT                     buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_CELLID_CANCELLED_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cellid_cancelled(
  LIBLTE_S1AP_CELLID_CANCELLED_STRUCT                          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cellid_cancelled(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CELLID_CANCELLED_STRUCT                          *ie);

/*******************************************************************************
/* ProtocolIE CompletedCellinEAI DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_COMPLETEDCELLINEAI_ITEM_STRUCT                   buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_COMPLETEDCELLINEAI_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_completedcellineai(
  LIBLTE_S1AP_COMPLETEDCELLINEAI_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_completedcellineai(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_COMPLETEDCELLINEAI_STRUCT                        *ie);

/*******************************************************************************
/* ProtocolIE HandoverRestrictionList SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TBCD_STRING_STRUCT                               servingPLMN;
  LIBLTE_S1AP_EPLMNS_STRUCT                                    equivalentPLMNs;
  bool                                                         equivalentPLMNs_present;
  LIBLTE_S1AP_FORBIDDENTAS_STRUCT                              forbiddenTAs;
  bool                                                         forbiddenTAs_present;
  LIBLTE_S1AP_FORBIDDENLAS_STRUCT                              forbiddenLAs;
  bool                                                         forbiddenLAs_present;
  LIBLTE_S1AP_FORBIDDENINTERRATS_ENUM_EXT                      forbiddenInterRATs;
  bool                                                         forbiddenInterRATs_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_HANDOVERRESTRICTIONLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_handoverrestrictionlist(
  LIBLTE_S1AP_HANDOVERRESTRICTIONLIST_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_handoverrestrictionlist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_HANDOVERRESTRICTIONLIST_STRUCT                   *ie);

/*******************************************************************************
/* ProtocolIE LastVisitedCell_Item CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_LASTVISITEDCELL_ITEM_CHOICE_E_UTRAN_CELL,
  LIBLTE_S1AP_LASTVISITEDCELL_ITEM_CHOICE_UTRAN_CELL,
  LIBLTE_S1AP_LASTVISITEDCELL_ITEM_CHOICE_GERAN_CELL,
  LIBLTE_S1AP_LASTVISITEDCELL_ITEM_CHOICE_N_ITEMS,
}LIBLTE_S1AP_LASTVISITEDCELL_ITEM_CHOICE_ENUM;
static const char liblte_s1ap_lastvisitedcell_item_choice_text[LIBLTE_S1AP_LASTVISITEDCELL_ITEM_CHOICE_N_ITEMS][50] = {
  "e_UTRAN_Cell",
  "uTRAN_Cell",
  "gERAN_Cell",
};

typedef union{
  LIBLTE_S1AP_LASTVISITEDEUTRANCELLINFORMATION_STRUCT          e_UTRAN_Cell;
  LIBLTE_S1AP_LASTVISITEDUTRANCELLINFORMATION_STRUCT           uTRAN_Cell;
  LIBLTE_S1AP_LASTVISITEDGERANCELLINFORMATION_STRUCT           gERAN_Cell;
}LIBLTE_S1AP_LASTVISITEDCELL_ITEM_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_LASTVISITEDCELL_ITEM_CHOICE_UNION choice;
  LIBLTE_S1AP_LASTVISITEDCELL_ITEM_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_LASTVISITEDCELL_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_lastvisitedcell_item(
  LIBLTE_S1AP_LASTVISITEDCELL_ITEM_STRUCT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_lastvisitedcell_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_LASTVISITEDCELL_ITEM_STRUCT                      *ie);

/*******************************************************************************
/* ProtocolIE SONInformationReply SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_X2TNLCONFIGURATIONINFO_STRUCT                    x2TNLConfigurationInfo;
  bool                                                         x2TNLConfigurationInfo_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_SONINFORMATIONREPLY_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_soninformationreply(
  LIBLTE_S1AP_SONINFORMATIONREPLY_STRUCT                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_soninformationreply(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SONINFORMATIONREPLY_STRUCT                       *ie);

/*******************************************************************************
/* ProtocolIE TAI_Broadcast DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TAI_BROADCAST_ITEM_STRUCT                        buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_TAI_BROADCAST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tai_broadcast(
  LIBLTE_S1AP_TAI_BROADCAST_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tai_broadcast(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TAI_BROADCAST_STRUCT                             *ie);

/*******************************************************************************
/* ProtocolIE TimeToWait ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_TIMETOWAIT_V1S,
  LIBLTE_S1AP_TIMETOWAIT_V2S,
  LIBLTE_S1AP_TIMETOWAIT_V5S,
  LIBLTE_S1AP_TIMETOWAIT_V10S,
  LIBLTE_S1AP_TIMETOWAIT_V20S,
  LIBLTE_S1AP_TIMETOWAIT_V60S,
  LIBLTE_S1AP_TIMETOWAIT_N_ITEMS,
}LIBLTE_S1AP_TIMETOWAIT_ENUM;
static const char liblte_s1ap_timetowait_text[LIBLTE_S1AP_TIMETOWAIT_N_ITEMS][80] = {
  "v1s",
  "v2s",
  "v5s",
  "v10s",
  "v20s",
  "v60s",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TIMETOWAIT_ENUM e;
}LIBLTE_S1AP_TIMETOWAIT_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_timetowait(
  LIBLTE_S1AP_TIMETOWAIT_ENUM_EXT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_timetowait(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TIMETOWAIT_ENUM_EXT                              *ie);

/*******************************************************************************
/* ProtocolIE UE_HistoryInformation DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:16
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_LASTVISITEDCELL_ITEM_STRUCT                      buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_UE_HISTORYINFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ue_historyinformation(
  LIBLTE_S1AP_UE_HISTORYINFORMATION_STRUCT                     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ue_historyinformation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_UE_HISTORYINFORMATION_STRUCT                     *ie);

/*******************************************************************************
/* ProtocolIE CriticalityDiagnostics SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_PROCEDURECODE_STRUCT                             procedureCode;
  bool                                                         procedureCode_present;
  LIBLTE_S1AP_TRIGGERINGMESSAGE_ENUM                           triggeringMessage;
  bool                                                         triggeringMessage_present;
  LIBLTE_S1AP_CRITICALITY_ENUM                                 procedureCriticality;
  bool                                                         procedureCriticality_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_IE_LIST_STRUCT            iEsCriticalityDiagnostics;
  bool                                                         iEsCriticalityDiagnostics_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_criticalitydiagnostics(
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_criticalitydiagnostics(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    *ie);

/*******************************************************************************
/* ProtocolIE EmergencyAreaID_Broadcast_Item SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_EMERGENCYAREAID_STRUCT                           emergencyAreaID;
  LIBLTE_S1AP_COMPLETEDCELLINEAI_STRUCT                        completedCellinEAI;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_EMERGENCYAREAID_BROADCAST_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_emergencyareaid_broadcast_item(
  LIBLTE_S1AP_EMERGENCYAREAID_BROADCAST_ITEM_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_emergencyareaid_broadcast_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EMERGENCYAREAID_BROADCAST_ITEM_STRUCT            *ie);

/*******************************************************************************
/* ProtocolIE ImmediateMDT SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MEASUREMENTSTOACTIVATE_STRUCT                    measurementsToActivate;
  LIBLTE_S1AP_M1REPORTINGTRIGGER_ENUM_EXT                      m1reportingTrigger;
  LIBLTE_S1AP_M1THRESHOLDEVENTA2_STRUCT                        m1thresholdeventA2;
  bool                                                         m1thresholdeventA2_present;
  LIBLTE_S1AP_M1PERIODICREPORTING_STRUCT                       m1periodicReporting;
  bool                                                         m1periodicReporting_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_IMMEDIATEMDT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_immediatemdt(
  LIBLTE_S1AP_IMMEDIATEMDT_STRUCT                              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_immediatemdt(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_IMMEDIATEMDT_STRUCT                              *ie);

/*******************************************************************************
/* ProtocolIE MDTMode CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_MDTMODE_CHOICE_IMMEDIATEMDT,
  LIBLTE_S1AP_MDTMODE_CHOICE_LOGGEDMDT,
  LIBLTE_S1AP_MDTMODE_CHOICE_N_ITEMS,
}LIBLTE_S1AP_MDTMODE_CHOICE_ENUM;
static const char liblte_s1ap_mdtmode_choice_text[LIBLTE_S1AP_MDTMODE_CHOICE_N_ITEMS][50] = {
  "immediateMDT",
  "loggedMDT",
};

typedef union{
  LIBLTE_S1AP_IMMEDIATEMDT_STRUCT                              immediateMDT;
  LIBLTE_S1AP_LOGGEDMDT_STRUCT                                 loggedMDT;
}LIBLTE_S1AP_MDTMODE_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_MDTMODE_CHOICE_UNION choice;
  LIBLTE_S1AP_MDTMODE_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_MDTMODE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mdtmode(
  LIBLTE_S1AP_MDTMODE_STRUCT                                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mdtmode(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MDTMODE_STRUCT                                   *ie);

/*******************************************************************************
/* ProtocolIE SourceeNB_ToTargeteNB_TransparentContainer SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_RRC_CONTAINER_STRUCT                             rRC_Container;
  LIBLTE_S1AP_E_RABINFORMATIONLIST_STRUCT                      e_RABInformationList;
  bool                                                         e_RABInformationList_present;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                targetCell_ID;
  LIBLTE_S1AP_SUBSCRIBERPROFILEIDFORRFP_STRUCT                 subscriberProfileIDforRFP;
  bool                                                         subscriberProfileIDforRFP_present;
  LIBLTE_S1AP_UE_HISTORYINFORMATION_STRUCT                     uE_HistoryInformation;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_SOURCEENB_TOTARGETENB_TRANSPARENTCONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_sourceenb_totargetenb_transparentcontainer(
  LIBLTE_S1AP_SOURCEENB_TOTARGETENB_TRANSPARENTCONTAINER_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_sourceenb_totargetenb_transparentcontainer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SOURCEENB_TOTARGETENB_TRANSPARENTCONTAINER_STRUCT *ie);

/*******************************************************************************
/* ProtocolIE EmergencyAreaID_Broadcast DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_EMERGENCYAREAID_BROADCAST_ITEM_STRUCT            buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_EMERGENCYAREAID_BROADCAST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_emergencyareaid_broadcast(
  LIBLTE_S1AP_EMERGENCYAREAID_BROADCAST_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_emergencyareaid_broadcast(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_EMERGENCYAREAID_BROADCAST_STRUCT                 *ie);

/*******************************************************************************
/* ProtocolIE MDT_Configuration SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MDT_ACTIVATION_ENUM_EXT                          mdt_Activation;
  LIBLTE_S1AP_AREASCOPEOFMDT_STRUCT                            areaScopeOfMDT;
  LIBLTE_S1AP_MDTMODE_STRUCT                                   mDTMode;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_MDT_CONFIGURATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mdt_configuration(
  LIBLTE_S1AP_MDT_CONFIGURATION_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mdt_configuration(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MDT_CONFIGURATION_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE TAI_Cancelled DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:65535
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TAI_CANCELLED_ITEM_STRUCT                        buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_TAI_CANCELLED_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tai_cancelled(
  LIBLTE_S1AP_TAI_CANCELLED_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tai_cancelled(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TAI_CANCELLED_STRUCT                             *ie);

/*******************************************************************************
/* ProtocolIE BroadcastCancelledAreaList CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_CHOICE_CELLID_CANCELLED,
  LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_CHOICE_TAI_CANCELLED,
  LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_CHOICE_EMERGENCYAREAID_CANCELLED,
  LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_CHOICE_N_ITEMS,
}LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_CHOICE_ENUM;
static const char liblte_s1ap_broadcastcancelledarealist_choice_text[LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_CHOICE_N_ITEMS][50] = {
  "cellID_Cancelled",
  "tAI_Cancelled",
  "emergencyAreaID_Cancelled",
};

typedef union{
  LIBLTE_S1AP_CELLID_CANCELLED_STRUCT                          cellID_Cancelled;
  LIBLTE_S1AP_TAI_CANCELLED_STRUCT                             tAI_Cancelled;
  LIBLTE_S1AP_EMERGENCYAREAID_CANCELLED_STRUCT                 emergencyAreaID_Cancelled;
}LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_CHOICE_UNION choice;
  LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_broadcastcancelledarealist(
  LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_STRUCT                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_broadcastcancelledarealist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_STRUCT                *ie);

/*******************************************************************************
/* ProtocolIE ENB_StatusTransfer_TransparentContainer SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_BEARERS_SUBJECTTOSTATUSTRANSFERLIST_STRUCT       bearers_SubjectToStatusTransferList;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_ENB_STATUSTRANSFER_TRANSPARENTCONTAINER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enb_statustransfer_transparentcontainer(
  LIBLTE_S1AP_ENB_STATUSTRANSFER_TRANSPARENTCONTAINER_STRUCT   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enb_statustransfer_transparentcontainer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_ENB_STATUSTRANSFER_TRANSPARENTCONTAINER_STRUCT   *ie);

/*******************************************************************************
/* ProtocolIE TraceActivation SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_UTRAN_TRACE_ID_STRUCT                          e_UTRAN_Trace_ID;
  LIBLTE_S1AP_INTERFACESTOTRACE_STRUCT                         interfacesToTrace;
  LIBLTE_S1AP_TRACEDEPTH_ENUM_EXT                              traceDepth;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     traceCollectionEntityIPAddress;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_TRACEACTIVATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_traceactivation(
  LIBLTE_S1AP_TRACEACTIVATION_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_traceactivation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TRACEACTIVATION_STRUCT                           *ie);

/*******************************************************************************
/* ProtocolIE BroadcastCompletedAreaList CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_CHOICE_CELLID_BROADCAST,
  LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_CHOICE_TAI_BROADCAST,
  LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_CHOICE_EMERGENCYAREAID_BROADCAST,
  LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_CHOICE_N_ITEMS,
}LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_CHOICE_ENUM;
static const char liblte_s1ap_broadcastcompletedarealist_choice_text[LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_CHOICE_N_ITEMS][50] = {
  "cellID_Broadcast",
  "tAI_Broadcast",
  "emergencyAreaID_Broadcast",
};

typedef union{
  LIBLTE_S1AP_CELLID_BROADCAST_STRUCT                          cellID_Broadcast;
  LIBLTE_S1AP_TAI_BROADCAST_STRUCT                             tAI_Broadcast;
  LIBLTE_S1AP_EMERGENCYAREAID_BROADCAST_STRUCT                 emergencyAreaID_Broadcast;
}LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_CHOICE_UNION choice;
  LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_broadcastcompletedarealist(
  LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_STRUCT                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_broadcastcompletedarealist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_STRUCT                *ie);

/*******************************************************************************
/* ProtocolIE SONInformation CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_SONINFORMATION_CHOICE_SONINFORMATIONREQUEST,
  LIBLTE_S1AP_SONINFORMATION_CHOICE_SONINFORMATIONREPLY,
  LIBLTE_S1AP_SONINFORMATION_CHOICE_N_ITEMS,
}LIBLTE_S1AP_SONINFORMATION_CHOICE_ENUM;
static const char liblte_s1ap_soninformation_choice_text[LIBLTE_S1AP_SONINFORMATION_CHOICE_N_ITEMS][50] = {
  "sONInformationRequest",
  "sONInformationReply",
};

typedef union{
  LIBLTE_S1AP_SONINFORMATIONREQUEST_ENUM_EXT                   sONInformationRequest;
  LIBLTE_S1AP_SONINFORMATIONREPLY_STRUCT                       sONInformationReply;
}LIBLTE_S1AP_SONINFORMATION_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_SONINFORMATION_CHOICE_UNION choice;
  LIBLTE_S1AP_SONINFORMATION_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_SONINFORMATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_soninformation(
  LIBLTE_S1AP_SONINFORMATION_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_soninformation(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SONINFORMATION_STRUCT                            *ie);

/*******************************************************************************
/* ProtocolIE SONConfigurationTransfer SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TARGETENB_ID_STRUCT                              targeteNB_ID;
  LIBLTE_S1AP_SOURCEENB_ID_STRUCT                              sourceeNB_ID;
  LIBLTE_S1AP_SONINFORMATION_STRUCT                            sONInformation;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_SONCONFIGURATIONTRANSFER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_sonconfigurationtransfer(
  LIBLTE_S1AP_SONCONFIGURATIONTRANSFER_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_sonconfigurationtransfer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_SONCONFIGURATIONTRANSFER_STRUCT                  *ie);

/*******************************************************************************
/* ProtocolIE ResetAll ENUMERATED
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_RESETALL_RESET_ALL,
  LIBLTE_S1AP_RESETALL_N_ITEMS,
}LIBLTE_S1AP_RESETALL_ENUM;
static const char liblte_s1ap_resetall_text[LIBLTE_S1AP_RESETALL_N_ITEMS][80] = {
  "reset-all",
};

typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_RESETALL_ENUM e;
}LIBLTE_S1AP_RESETALL_ENUM_EXT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_resetall(
  LIBLTE_S1AP_RESETALL_ENUM_EXT                                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_resetall(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RESETALL_ENUM_EXT                                *ie);

/*******************************************************************************
/* ProtocolIE Inter_SystemInformationTransferType CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_INTER_SYSTEMINFORMATIONTRANSFERTYPE_CHOICE_RIMTRANSFER,
  LIBLTE_S1AP_INTER_SYSTEMINFORMATIONTRANSFERTYPE_CHOICE_N_ITEMS,
}LIBLTE_S1AP_INTER_SYSTEMINFORMATIONTRANSFERTYPE_CHOICE_ENUM;
static const char liblte_s1ap_inter_systeminformationtransfertype_choice_text[LIBLTE_S1AP_INTER_SYSTEMINFORMATIONTRANSFERTYPE_CHOICE_N_ITEMS][50] = {
  "rIMTransfer",
};

typedef union{
  LIBLTE_S1AP_RIMTRANSFER_STRUCT                               rIMTransfer;
}LIBLTE_S1AP_INTER_SYSTEMINFORMATIONTRANSFERTYPE_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_INTER_SYSTEMINFORMATIONTRANSFERTYPE_CHOICE_UNION choice;
  LIBLTE_S1AP_INTER_SYSTEMINFORMATIONTRANSFERTYPE_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_INTER_SYSTEMINFORMATIONTRANSFERTYPE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_inter_systeminformationtransfertype(
  LIBLTE_S1AP_INTER_SYSTEMINFORMATIONTRANSFERTYPE_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_inter_systeminformationtransfertype(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_INTER_SYSTEMINFORMATIONTRANSFERTYPE_STRUCT       *ie);

/*******************************************************************************
/* ProtocolIE E_RAB_IE_ContainerPairList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_PROTOCOLIE_CONTAINERPAIR_STRUCT                  buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RAB_IE_CONTAINERPAIRLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rab_ie_containerpairlist(
  LIBLTE_S1AP_E_RAB_IE_CONTAINERPAIRLIST_STRUCT                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rab_ie_containerpairlist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RAB_IE_CONTAINERPAIRLIST_STRUCT                *ie);

/*******************************************************************************
/* ProtocolIE E_RABDataForwardingItem SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     dL_transportLayerAddress;
  bool                                                         dL_transportLayerAddress_present;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  dL_gTP_TEID;
  bool                                                         dL_gTP_TEID_present;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     uL_TransportLayerAddress;
  bool                                                         uL_TransportLayerAddress_present;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  uL_GTP_TEID;
  bool                                                         uL_GTP_TEID_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABDATAFORWARDINGITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabdataforwardingitem(
  LIBLTE_S1AP_E_RABDATAFORWARDINGITEM_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabdataforwardingitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABDATAFORWARDINGITEM_STRUCT                   *ie);

/*******************************************************************************
/* ProtocolIE E_RABToBeSetupItemHOReq SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     transportLayerAddress;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  gTP_TEID;
  LIBLTE_S1AP_E_RABLEVELQOSPARAMETERS_STRUCT                   e_RABlevelQosParameters;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABTOBESETUPITEMHOREQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobesetupitemhoreq(
  LIBLTE_S1AP_E_RABTOBESETUPITEMHOREQ_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobesetupitemhoreq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABTOBESETUPITEMHOREQ_STRUCT                   *ie);

/*******************************************************************************
/* ProtocolIE E_RABAdmittedItem SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     transportLayerAddress;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  gTP_TEID;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     dL_transportLayerAddress;
  bool                                                         dL_transportLayerAddress_present;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  dL_gTP_TEID;
  bool                                                         dL_gTP_TEID_present;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     uL_TransportLayerAddress;
  bool                                                         uL_TransportLayerAddress_present;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  uL_GTP_TEID;
  bool                                                         uL_GTP_TEID_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABADMITTEDITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabadmitteditem(
  LIBLTE_S1AP_E_RABADMITTEDITEM_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabadmitteditem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABADMITTEDITEM_STRUCT                         *ie);

/*******************************************************************************
/* ProtocolIE E_RABFailedToSetupItemHOReqAck SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_CAUSE_STRUCT                                     cause;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABFAILEDTOSETUPITEMHOREQACK_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabfailedtosetupitemhoreqack(
  LIBLTE_S1AP_E_RABFAILEDTOSETUPITEMHOREQACK_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabfailedtosetupitemhoreqack(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABFAILEDTOSETUPITEMHOREQACK_STRUCT            *ie);

/*******************************************************************************
/* ProtocolIE E_RABToBeSwitchedDLItem SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     transportLayerAddress;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  gTP_TEID;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABTOBESWITCHEDDLITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobeswitcheddlitem(
  LIBLTE_S1AP_E_RABTOBESWITCHEDDLITEM_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobeswitcheddlitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABTOBESWITCHEDDLITEM_STRUCT                   *ie);

/*******************************************************************************
/* ProtocolIE E_RABToBeSwitchedULItem SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     transportLayerAddress;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  gTP_TEID;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABTOBESWITCHEDULITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobeswitchedulitem(
  LIBLTE_S1AP_E_RABTOBESWITCHEDULITEM_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobeswitchedulitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABTOBESWITCHEDULITEM_STRUCT                   *ie);

/*******************************************************************************
/* ProtocolIE E_RABToBeSetupItemBearerSUReq SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_E_RABLEVELQOSPARAMETERS_STRUCT                   e_RABlevelQoSParameters;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     transportLayerAddress;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  gTP_TEID;
  LIBLTE_S1AP_NAS_PDU_STRUCT                                   nAS_PDU;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABTOBESETUPITEMBEARERSUREQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobesetupitembearersureq(
  LIBLTE_S1AP_E_RABTOBESETUPITEMBEARERSUREQ_STRUCT             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobesetupitembearersureq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABTOBESETUPITEMBEARERSUREQ_STRUCT             *ie);

/*******************************************************************************
/* ProtocolIE E_RABSetupItemBearerSURes SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     transportLayerAddress;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  gTP_TEID;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABSETUPITEMBEARERSURES_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabsetupitembearersures(
  LIBLTE_S1AP_E_RABSETUPITEMBEARERSURES_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabsetupitembearersures(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABSETUPITEMBEARERSURES_STRUCT                 *ie);

/*******************************************************************************
/* ProtocolIE E_RABToBeModifiedItemBearerModReq SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_E_RABLEVELQOSPARAMETERS_STRUCT                   e_RABLevelQoSParameters;
  LIBLTE_S1AP_NAS_PDU_STRUCT                                   nAS_PDU;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABTOBEMODIFIEDITEMBEARERMODREQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobemodifieditembearermodreq(
  LIBLTE_S1AP_E_RABTOBEMODIFIEDITEMBEARERMODREQ_STRUCT         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobemodifieditembearermodreq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABTOBEMODIFIEDITEMBEARERMODREQ_STRUCT         *ie);

/*******************************************************************************
/* ProtocolIE E_RABModifyItemBearerModRes SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABMODIFYITEMBEARERMODRES_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabmodifyitembearermodres(
  LIBLTE_S1AP_E_RABMODIFYITEMBEARERMODRES_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabmodifyitembearermodres(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABMODIFYITEMBEARERMODRES_STRUCT               *ie);

/*******************************************************************************
/* ProtocolIE E_RABReleaseItemBearerRelComp SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABRELEASEITEMBEARERRELCOMP_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabreleaseitembearerrelcomp(
  LIBLTE_S1AP_E_RABRELEASEITEMBEARERRELCOMP_STRUCT             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabreleaseitembearerrelcomp(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABRELEASEITEMBEARERRELCOMP_STRUCT             *ie);

/*******************************************************************************
/* ProtocolIE E_RABToBeSetupItemCtxtSUReq SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_E_RABLEVELQOSPARAMETERS_STRUCT                   e_RABlevelQoSParameters;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     transportLayerAddress;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  gTP_TEID;
  LIBLTE_S1AP_NAS_PDU_STRUCT                                   nAS_PDU;
  bool                                                         nAS_PDU_present;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABTOBESETUPITEMCTXTSUREQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobesetupitemctxtsureq(
  LIBLTE_S1AP_E_RABTOBESETUPITEMCTXTSUREQ_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobesetupitemctxtsureq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABTOBESETUPITEMCTXTSUREQ_STRUCT               *ie);

/*******************************************************************************
/* ProtocolIE E_RABSetupItemCtxtSURes SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RAB_ID_STRUCT                                  e_RAB_ID;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     transportLayerAddress;
  LIBLTE_S1AP_GTP_TEID_STRUCT                                  gTP_TEID;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_E_RABSETUPITEMCTXTSURES_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabsetupitemctxtsures(
  LIBLTE_S1AP_E_RABSETUPITEMCTXTSURES_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabsetupitemctxtsures(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABSETUPITEMCTXTSURES_STRUCT                   *ie);

/*******************************************************************************
/* ProtocolIE TAIItem SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TAI_STRUCT                                       tAI;
  LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT                iE_Extensions;
  bool                                                         iE_Extensions_present;
}LIBLTE_S1AP_TAIITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_taiitem(
  LIBLTE_S1AP_TAIITEM_STRUCT                                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_taiitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TAIITEM_STRUCT                                   *ie);

/*******************************************************************************
/* Protocol Container List UE_associatedLogicalS1_ConnectionListRes DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEM_STRUCT     buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONLISTRES_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ue_associatedlogicals1_connectionlistres(
  LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONLISTRES_STRUCT  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ue_associatedlogicals1_connectionlistres(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONLISTRES_STRUCT  *ie);

/*******************************************************************************
/* Protocol Container List UE_associatedLogicalS1_ConnectionListResAck DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEM_STRUCT     buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONLISTRESACK_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ue_associatedlogicals1_connectionlistresack(
  LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONLISTRESACK_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ue_associatedlogicals1_connectionlistresack(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONLISTRESACK_STRUCT *ie);

/*******************************************************************************
/* ProtocolIE PrivateMessage SEQUENCE
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_PRIVATEIE_CONTAINER_STRUCT                       privateIEs;
}LIBLTE_S1AP_PRIVATEMESSAGE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_privatemessage(
  LIBLTE_S1AP_PRIVATEMESSAGE_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_privatemessage(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_PRIVATEMESSAGE_STRUCT                            *ie);

/*******************************************************************************
/* ProtocolIE ResetType CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_RESETTYPE_CHOICE_S1_INTERFACE,
  LIBLTE_S1AP_RESETTYPE_CHOICE_PARTOFS1_INTERFACE,
  LIBLTE_S1AP_RESETTYPE_CHOICE_N_ITEMS,
}LIBLTE_S1AP_RESETTYPE_CHOICE_ENUM;
static const char liblte_s1ap_resettype_choice_text[LIBLTE_S1AP_RESETTYPE_CHOICE_N_ITEMS][50] = {
  "s1_Interface",
  "partOfS1_Interface",
};

typedef union{
  LIBLTE_S1AP_RESETALL_ENUM_EXT                                s1_Interface;
  LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONLISTRES_STRUCT  partOfS1_Interface;
}LIBLTE_S1AP_RESETTYPE_CHOICE_UNION;

typedef struct{
  bool                            ext;
  LIBLTE_S1AP_RESETTYPE_CHOICE_UNION choice;
  LIBLTE_S1AP_RESETTYPE_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_RESETTYPE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_resettype(
  LIBLTE_S1AP_RESETTYPE_STRUCT                                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_resettype(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_RESETTYPE_STRUCT                                 *ie);

/*******************************************************************************
/* Protocol Container List E_RABSubjecttoDataForwardingList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABDATAFORWARDINGITEM_STRUCT                   buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABSUBJECTTODATAFORWARDINGLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabsubjecttodataforwardinglist(
  LIBLTE_S1AP_E_RABSUBJECTTODATAFORWARDINGLIST_STRUCT          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabsubjecttodataforwardinglist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABSUBJECTTODATAFORWARDINGLIST_STRUCT          *ie);

/*******************************************************************************
/* Protocol Container List E_RABToBeSetupListHOReq DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABTOBESETUPITEMHOREQ_STRUCT                   buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABTOBESETUPLISTHOREQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobesetuplisthoreq(
  LIBLTE_S1AP_E_RABTOBESETUPLISTHOREQ_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobesetuplisthoreq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABTOBESETUPLISTHOREQ_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Container List E_RABAdmittedList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABADMITTEDITEM_STRUCT                         buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABADMITTEDLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabadmittedlist(
  LIBLTE_S1AP_E_RABADMITTEDLIST_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabadmittedlist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABADMITTEDLIST_STRUCT                         *ie);

/*******************************************************************************
/* Protocol Container List E_RABToBeSwitchedDLList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABTOBESWITCHEDDLITEM_STRUCT                   buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABTOBESWITCHEDDLLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobeswitcheddllist(
  LIBLTE_S1AP_E_RABTOBESWITCHEDDLLIST_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobeswitcheddllist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABTOBESWITCHEDDLLIST_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Container List E_RABToBeSwitchedULList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABTOBESWITCHEDULITEM_STRUCT                   buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABTOBESWITCHEDULLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobeswitchedullist(
  LIBLTE_S1AP_E_RABTOBESWITCHEDULLIST_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobeswitchedullist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABTOBESWITCHEDULLIST_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Container List E_RABToBeSetupListBearerSUReq DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABTOBESETUPITEMBEARERSUREQ_STRUCT             buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABTOBESETUPLISTBEARERSUREQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobesetuplistbearersureq(
  LIBLTE_S1AP_E_RABTOBESETUPLISTBEARERSUREQ_STRUCT             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobesetuplistbearersureq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABTOBESETUPLISTBEARERSUREQ_STRUCT             *ie);

/*******************************************************************************
/* Protocol Container List E_RABSetupListBearerSURes DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABSETUPITEMBEARERSURES_STRUCT                 buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABSETUPLISTBEARERSURES_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabsetuplistbearersures(
  LIBLTE_S1AP_E_RABSETUPLISTBEARERSURES_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabsetuplistbearersures(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABSETUPLISTBEARERSURES_STRUCT                 *ie);

/*******************************************************************************
/* Protocol Container List E_RABToBeModifiedListBearerModReq DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABTOBEMODIFIEDITEMBEARERMODREQ_STRUCT         buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABTOBEMODIFIEDLISTBEARERMODREQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobemodifiedlistbearermodreq(
  LIBLTE_S1AP_E_RABTOBEMODIFIEDLISTBEARERMODREQ_STRUCT         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobemodifiedlistbearermodreq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABTOBEMODIFIEDLISTBEARERMODREQ_STRUCT         *ie);

/*******************************************************************************
/* Protocol Container List E_RABModifyListBearerModRes DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABMODIFYITEMBEARERMODRES_STRUCT               buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABMODIFYLISTBEARERMODRES_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabmodifylistbearermodres(
  LIBLTE_S1AP_E_RABMODIFYLISTBEARERMODRES_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabmodifylistbearermodres(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABMODIFYLISTBEARERMODRES_STRUCT               *ie);

/*******************************************************************************
/* Protocol Container List E_RABReleaseListBearerRelComp DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABRELEASEITEMBEARERRELCOMP_STRUCT             buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABRELEASELISTBEARERRELCOMP_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabreleaselistbearerrelcomp(
  LIBLTE_S1AP_E_RABRELEASELISTBEARERRELCOMP_STRUCT             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabreleaselistbearerrelcomp(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABRELEASELISTBEARERRELCOMP_STRUCT             *ie);

/*******************************************************************************
/* Protocol Container List E_RABToBeSetupListCtxtSUReq DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABTOBESETUPITEMCTXTSUREQ_STRUCT               buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABTOBESETUPLISTCTXTSUREQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobesetuplistctxtsureq(
  LIBLTE_S1AP_E_RABTOBESETUPLISTCTXTSUREQ_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobesetuplistctxtsureq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABTOBESETUPLISTCTXTSUREQ_STRUCT               *ie);

/*******************************************************************************
/* Protocol Container List E_RABSetupListCtxtSURes DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABSETUPITEMCTXTSURES_STRUCT                   buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABSETUPLISTCTXTSURES_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabsetuplistctxtsures(
  LIBLTE_S1AP_E_RABSETUPLISTCTXTSURES_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabsetuplistctxtsures(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABSETUPLISTCTXTSURES_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Container List TAIList DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_TAIITEM_STRUCT                                   buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_TAILIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tailist(
  LIBLTE_S1AP_TAILIST_STRUCT                                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tailist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_TAILIST_STRUCT                                   *ie);

/*******************************************************************************
/* Protocol Container List E_RABFailedtoSetupListHOReqAck DYNAMIC SEQUENCE OF
********************************************************************************/
// lb:1, ub:256
typedef struct{
  uint32_t                                                     len;
  LIBLTE_S1AP_E_RABFAILEDTOSETUPITEMHOREQACK_STRUCT            buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABFAILEDTOSETUPLISTHOREQACK_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabfailedtosetuplisthoreqack(
  LIBLTE_S1AP_E_RABFAILEDTOSETUPLISTHOREQACK_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabfailedtosetuplisthoreqack(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_E_RABFAILEDTOSETUPLISTHOREQACK_STRUCT            *ie);

/*******************************************************************************
/* Protocol Message AllocationAndRetentionPriority_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_ALLOCATIONANDRETENTIONPRIORITY_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_allocationandretentionpriority_ext(
  LIBLTE_S1AP_MESSAGE_ALLOCATIONANDRETENTIONPRIORITY_EXT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_allocationandretentionpriority_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_ALLOCATIONANDRETENTIONPRIORITY_EXT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message CancelledCellinEAI_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_CANCELLEDCELLINEAI_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cancelledcellineai_item_ext(
  LIBLTE_S1AP_MESSAGE_CANCELLEDCELLINEAI_ITEM_EXT_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cancelledcellineai_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_CANCELLEDCELLINEAI_ITEM_EXT_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message CancelledCellinTAI_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_CANCELLEDCELLINTAI_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cancelledcellintai_item_ext(
  LIBLTE_S1AP_MESSAGE_CANCELLEDCELLINTAI_ITEM_EXT_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cancelledcellintai_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_CANCELLEDCELLINTAI_ITEM_EXT_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message CellID_Broadcast_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_CELLID_BROADCAST_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cellid_broadcast_item_ext(
  LIBLTE_S1AP_MESSAGE_CELLID_BROADCAST_ITEM_EXT_STRUCT         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cellid_broadcast_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_CELLID_BROADCAST_ITEM_EXT_STRUCT         *ie);

/*******************************************************************************
/* Protocol Message CellID_Cancelled_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_CELLID_CANCELLED_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cellid_cancelled_item_ext(
  LIBLTE_S1AP_MESSAGE_CELLID_CANCELLED_ITEM_EXT_STRUCT         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cellid_cancelled_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_CELLID_CANCELLED_ITEM_EXT_STRUCT         *ie);

/*******************************************************************************
/* Protocol Message CellBasedMDT_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_CELLBASEDMDT_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cellbasedmdt_ext(
  LIBLTE_S1AP_MESSAGE_CELLBASEDMDT_EXT_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cellbasedmdt_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_CELLBASEDMDT_EXT_STRUCT                  *ie);

/*******************************************************************************
/* Protocol Message Cdma2000OneXSRVCCInfo_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_CDMA2000ONEXSRVCCINFO_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cdma2000onexsrvccinfo_ext(
  LIBLTE_S1AP_MESSAGE_CDMA2000ONEXSRVCCINFO_EXT_STRUCT         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cdma2000onexsrvccinfo_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_CDMA2000ONEXSRVCCINFO_EXT_STRUCT         *ie);

/*******************************************************************************
/* Protocol Message CellType_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_CELLTYPE_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_celltype_ext(
  LIBLTE_S1AP_MESSAGE_CELLTYPE_EXT_STRUCT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_celltype_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_CELLTYPE_EXT_STRUCT                      *ie);

/*******************************************************************************
/* Protocol Message CGI_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_CGI_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_cgi_ext(
  LIBLTE_S1AP_MESSAGE_CGI_EXT_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_cgi_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_CGI_EXT_STRUCT                           *ie);

/*******************************************************************************
/* Protocol Message CSG_IdList_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_CSG_IDLIST_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_csg_idlist_item_ext(
  LIBLTE_S1AP_MESSAGE_CSG_IDLIST_ITEM_EXT_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_csg_idlist_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_CSG_IDLIST_ITEM_EXT_STRUCT               *ie);

/*******************************************************************************
/* Protocol Message COUNTvalue_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_COUNTVALUE_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_countvalue_ext(
  LIBLTE_S1AP_MESSAGE_COUNTVALUE_EXT_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_countvalue_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_COUNTVALUE_EXT_STRUCT                    *ie);

/*******************************************************************************
/* Protocol Message COUNTValueExtended_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_COUNTVALUEEXTENDED_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_countvalueextended_ext(
  LIBLTE_S1AP_MESSAGE_COUNTVALUEEXTENDED_EXT_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_countvalueextended_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_COUNTVALUEEXTENDED_EXT_STRUCT            *ie);

/*******************************************************************************
/* Protocol Message CriticalityDiagnostics_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_CRITICALITYDIAGNOSTICS_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_criticalitydiagnostics_ext(
  LIBLTE_S1AP_MESSAGE_CRITICALITYDIAGNOSTICS_EXT_STRUCT        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_criticalitydiagnostics_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_CRITICALITYDIAGNOSTICS_EXT_STRUCT        *ie);

/*******************************************************************************
/* Protocol Message CriticalityDiagnostics_IE_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_CRITICALITYDIAGNOSTICS_IE_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_criticalitydiagnostics_ie_item_ext(
  LIBLTE_S1AP_MESSAGE_CRITICALITYDIAGNOSTICS_IE_ITEM_EXT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_criticalitydiagnostics_ie_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_CRITICALITYDIAGNOSTICS_IE_ITEM_EXT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message EmergencyAreaID_Broadcast_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_EMERGENCYAREAID_BROADCAST_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_emergencyareaid_broadcast_item_ext(
  LIBLTE_S1AP_MESSAGE_EMERGENCYAREAID_BROADCAST_ITEM_EXT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_emergencyareaid_broadcast_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_EMERGENCYAREAID_BROADCAST_ITEM_EXT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message EmergencyAreaID_Cancelled_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_EMERGENCYAREAID_CANCELLED_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_emergencyareaid_cancelled_item_ext(
  LIBLTE_S1AP_MESSAGE_EMERGENCYAREAID_CANCELLED_ITEM_EXT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_emergencyareaid_cancelled_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_EMERGENCYAREAID_CANCELLED_ITEM_EXT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message CompletedCellinEAI_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_COMPLETEDCELLINEAI_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_completedcellineai_item_ext(
  LIBLTE_S1AP_MESSAGE_COMPLETEDCELLINEAI_ITEM_EXT_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_completedcellineai_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_COMPLETEDCELLINEAI_ITEM_EXT_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message GERAN_Cell_ID_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_GERAN_CELL_ID_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_geran_cell_id_ext(
  LIBLTE_S1AP_MESSAGE_GERAN_CELL_ID_EXT_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_geran_cell_id_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_GERAN_CELL_ID_EXT_STRUCT                 *ie);

/*******************************************************************************
/* Protocol Message GlobalENB_ID_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_GLOBALENB_ID_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_globalenb_id_ext(
  LIBLTE_S1AP_MESSAGE_GLOBALENB_ID_EXT_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_globalenb_id_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_GLOBALENB_ID_EXT_STRUCT                  *ie);

/*******************************************************************************
/* Protocol Message ENB_StatusTransfer_TransparentContainer_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_ENB_STATUSTRANSFER_TRANSPARENTCONTAINER_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enb_statustransfer_transparentcontainer_ext(
  LIBLTE_S1AP_MESSAGE_ENB_STATUSTRANSFER_TRANSPARENTCONTAINER_EXT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enb_statustransfer_transparentcontainer_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_ENB_STATUSTRANSFER_TRANSPARENTCONTAINER_EXT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message E_RABInformationListItem_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_E_RABINFORMATIONLISTITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabinformationlistitem_ext(
  LIBLTE_S1AP_MESSAGE_E_RABINFORMATIONLISTITEM_EXT_STRUCT      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabinformationlistitem_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABINFORMATIONLISTITEM_EXT_STRUCT      *ie);

/*******************************************************************************
/* Protocol Message E_RABItem_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_E_RABITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabitem_ext(
  LIBLTE_S1AP_MESSAGE_E_RABITEM_EXT_STRUCT                     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabitem_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABITEM_EXT_STRUCT                     *ie);

/*******************************************************************************
/* Protocol Message E_RABQoSParameters_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_E_RABQOSPARAMETERS_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabqosparameters_ext(
  LIBLTE_S1AP_MESSAGE_E_RABQOSPARAMETERS_EXT_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabqosparameters_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABQOSPARAMETERS_EXT_STRUCT            *ie);

/*******************************************************************************
/* Protocol Message EUTRAN_CGI_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_EUTRAN_CGI_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_eutran_cgi_ext(
  LIBLTE_S1AP_MESSAGE_EUTRAN_CGI_EXT_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_eutran_cgi_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_EUTRAN_CGI_EXT_STRUCT                    *ie);

/*******************************************************************************
/* Protocol Message ForbiddenTAs_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_FORBIDDENTAS_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_forbiddentas_item_ext(
  LIBLTE_S1AP_MESSAGE_FORBIDDENTAS_ITEM_EXT_STRUCT             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_forbiddentas_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_FORBIDDENTAS_ITEM_EXT_STRUCT             *ie);

/*******************************************************************************
/* Protocol Message ForbiddenLAs_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_FORBIDDENLAS_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_forbiddenlas_item_ext(
  LIBLTE_S1AP_MESSAGE_FORBIDDENLAS_ITEM_EXT_STRUCT             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_forbiddenlas_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_FORBIDDENLAS_ITEM_EXT_STRUCT             *ie);

/*******************************************************************************
/* Protocol Message GBR_QosInformation_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_GBR_QOSINFORMATION_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_gbr_qosinformation_ext(
  LIBLTE_S1AP_MESSAGE_GBR_QOSINFORMATION_EXT_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_gbr_qosinformation_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_GBR_QOSINFORMATION_EXT_STRUCT            *ie);

/*******************************************************************************
/* Protocol Message GUMMEI_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_GUMMEI_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_gummei_ext(
  LIBLTE_S1AP_MESSAGE_GUMMEI_EXT_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_gummei_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_GUMMEI_EXT_STRUCT                        *ie);

/*******************************************************************************
/* Protocol Message HandoverRestrictionList_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_HANDOVERRESTRICTIONLIST_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_handoverrestrictionlist_ext(
  LIBLTE_S1AP_MESSAGE_HANDOVERRESTRICTIONLIST_EXT_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_handoverrestrictionlist_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_HANDOVERRESTRICTIONLIST_EXT_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message LAI_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_LAI_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_lai_ext(
  LIBLTE_S1AP_MESSAGE_LAI_EXT_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_lai_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_LAI_EXT_STRUCT                           *ie);

/*******************************************************************************
/* Protocol Message LoggedMDT_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_LOGGEDMDT_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_loggedmdt_ext(
  LIBLTE_S1AP_MESSAGE_LOGGEDMDT_EXT_STRUCT                     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_loggedmdt_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_LOGGEDMDT_EXT_STRUCT                     *ie);

/*******************************************************************************
/* Protocol Message M3Configuration_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_M3CONFIGURATION_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m3configuration_ext(
  LIBLTE_S1AP_MESSAGE_M3CONFIGURATION_EXT_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m3configuration_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_M3CONFIGURATION_EXT_STRUCT               *ie);

/*******************************************************************************
/* Protocol Message M4Configuration_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_M4CONFIGURATION_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m4configuration_ext(
  LIBLTE_S1AP_MESSAGE_M4CONFIGURATION_EXT_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m4configuration_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_M4CONFIGURATION_EXT_STRUCT               *ie);

/*******************************************************************************
/* Protocol Message M5Configuration_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_M5CONFIGURATION_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m5configuration_ext(
  LIBLTE_S1AP_MESSAGE_M5CONFIGURATION_EXT_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m5configuration_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_M5CONFIGURATION_EXT_STRUCT               *ie);

/*******************************************************************************
/* Protocol Message M1PeriodicReporting_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_M1PERIODICREPORTING_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m1periodicreporting_ext(
  LIBLTE_S1AP_MESSAGE_M1PERIODICREPORTING_EXT_STRUCT           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m1periodicreporting_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_M1PERIODICREPORTING_EXT_STRUCT           *ie);

/*******************************************************************************
/* Protocol Message RequestType_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_REQUESTTYPE_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_requesttype_ext(
  LIBLTE_S1AP_MESSAGE_REQUESTTYPE_EXT_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_requesttype_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_REQUESTTYPE_EXT_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Message RIMTransfer_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_RIMTRANSFER_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_rimtransfer_ext(
  LIBLTE_S1AP_MESSAGE_RIMTRANSFER_EXT_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_rimtransfer_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_RIMTRANSFER_EXT_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Message SecurityContext_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_SECURITYCONTEXT_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_securitycontext_ext(
  LIBLTE_S1AP_MESSAGE_SECURITYCONTEXT_EXT_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_securitycontext_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_SECURITYCONTEXT_EXT_STRUCT               *ie);

/*******************************************************************************
/* Protocol Message SourceeNB_ID_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_SOURCEENB_ID_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_sourceenb_id_ext(
  LIBLTE_S1AP_MESSAGE_SOURCEENB_ID_EXT_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_sourceenb_id_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_SOURCEENB_ID_EXT_STRUCT                  *ie);

/*******************************************************************************
/* Protocol Message ServedGUMMEIsItem_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_SERVEDGUMMEISITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_servedgummeisitem_ext(
  LIBLTE_S1AP_MESSAGE_SERVEDGUMMEISITEM_EXT_STRUCT             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_servedgummeisitem_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_SERVEDGUMMEISITEM_EXT_STRUCT             *ie);

/*******************************************************************************
/* Protocol Message SupportedTAs_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_SUPPORTEDTAS_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_supportedtas_item_ext(
  LIBLTE_S1AP_MESSAGE_SUPPORTEDTAS_ITEM_EXT_STRUCT             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_supportedtas_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_SUPPORTEDTAS_ITEM_EXT_STRUCT             *ie);

/*******************************************************************************
/* Protocol Message TimeSynchronizationInfo_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_TIMESYNCHRONIZATIONINFO_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_timesynchronizationinfo_ext(
  LIBLTE_S1AP_MESSAGE_TIMESYNCHRONIZATIONINFO_EXT_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_timesynchronizationinfo_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TIMESYNCHRONIZATIONINFO_EXT_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message S_TMSI_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_S_TMSI_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_s_tmsi_ext(
  LIBLTE_S1AP_MESSAGE_S_TMSI_EXT_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_s_tmsi_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_S_TMSI_EXT_STRUCT                        *ie);

/*******************************************************************************
/* Protocol Message TAIBasedMDT_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_TAIBASEDMDT_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_taibasedmdt_ext(
  LIBLTE_S1AP_MESSAGE_TAIBASEDMDT_EXT_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_taibasedmdt_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TAIBASEDMDT_EXT_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Message TAI_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_TAI_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tai_ext(
  LIBLTE_S1AP_MESSAGE_TAI_EXT_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tai_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TAI_EXT_STRUCT                           *ie);

/*******************************************************************************
/* Protocol Message TAI_Broadcast_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_TAI_BROADCAST_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tai_broadcast_item_ext(
  LIBLTE_S1AP_MESSAGE_TAI_BROADCAST_ITEM_EXT_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tai_broadcast_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TAI_BROADCAST_ITEM_EXT_STRUCT            *ie);

/*******************************************************************************
/* Protocol Message TAI_Cancelled_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_TAI_CANCELLED_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tai_cancelled_item_ext(
  LIBLTE_S1AP_MESSAGE_TAI_CANCELLED_ITEM_EXT_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tai_cancelled_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TAI_CANCELLED_ITEM_EXT_STRUCT            *ie);

/*******************************************************************************
/* Protocol Message TABasedMDT_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_TABASEDMDT_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tabasedmdt_ext(
  LIBLTE_S1AP_MESSAGE_TABASEDMDT_EXT_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tabasedmdt_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TABASEDMDT_EXT_STRUCT                    *ie);

/*******************************************************************************
/* Protocol Message CompletedCellinTAI_Item_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_COMPLETEDCELLINTAI_ITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_completedcellintai_item_ext(
  LIBLTE_S1AP_MESSAGE_COMPLETEDCELLINTAI_ITEM_EXT_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_completedcellintai_item_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_COMPLETEDCELLINTAI_ITEM_EXT_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message TargeteNB_ID_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_TARGETENB_ID_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_targetenb_id_ext(
  LIBLTE_S1AP_MESSAGE_TARGETENB_ID_EXT_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_targetenb_id_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TARGETENB_ID_EXT_STRUCT                  *ie);

/*******************************************************************************
/* Protocol Message TargetRNC_ID_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_TARGETRNC_ID_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_targetrnc_id_ext(
  LIBLTE_S1AP_MESSAGE_TARGETRNC_ID_EXT_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_targetrnc_id_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TARGETRNC_ID_EXT_STRUCT                  *ie);

/*******************************************************************************
/* Protocol Message TargeteNB_ToSourceeNB_TransparentContainer_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_TARGETENB_TOSOURCEENB_TRANSPARENTCONTAINER_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_targetenb_tosourceenb_transparentcontainer_ext(
  LIBLTE_S1AP_MESSAGE_TARGETENB_TOSOURCEENB_TRANSPARENTCONTAINER_EXT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_targetenb_tosourceenb_transparentcontainer_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TARGETENB_TOSOURCEENB_TRANSPARENTCONTAINER_EXT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message M1ThresholdEventA2_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_M1THRESHOLDEVENTA2_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_m1thresholdeventa2_ext(
  LIBLTE_S1AP_MESSAGE_M1THRESHOLDEVENTA2_EXT_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_m1thresholdeventa2_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_M1THRESHOLDEVENTA2_EXT_STRUCT            *ie);

/*******************************************************************************
/* Protocol Message Tunnel_Information_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_TUNNEL_INFORMATION_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tunnel_information_ext(
  LIBLTE_S1AP_MESSAGE_TUNNEL_INFORMATION_EXT_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tunnel_information_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TUNNEL_INFORMATION_EXT_STRUCT            *ie);

/*******************************************************************************
/* Protocol Message UEAggregate_MaximumBitrates_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_UEAGGREGATE_MAXIMUMBITRATES_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ueaggregate_maximumbitrates_ext(
  LIBLTE_S1AP_MESSAGE_UEAGGREGATE_MAXIMUMBITRATES_EXT_STRUCT   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ueaggregate_maximumbitrates_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UEAGGREGATE_MAXIMUMBITRATES_EXT_STRUCT   *ie);

/*******************************************************************************
/* Protocol Message UE_S1AP_ID_pair_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_UE_S1AP_ID_PAIR_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ue_s1ap_id_pair_ext(
  LIBLTE_S1AP_MESSAGE_UE_S1AP_ID_PAIR_EXT_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ue_s1ap_id_pair_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UE_S1AP_ID_PAIR_EXT_STRUCT               *ie);

/*******************************************************************************
/* Protocol Message UE_associatedLogicalS1_ConnectionItemExt STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEMEXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ue_associatedlogicals1_connectionitemext(
  LIBLTE_S1AP_MESSAGE_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEMEXT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ue_associatedlogicals1_connectionitemext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEMEXT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message UESecurityCapabilities_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_UESECURITYCAPABILITIES_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uesecuritycapabilities_ext(
  LIBLTE_S1AP_MESSAGE_UESECURITYCAPABILITIES_EXT_STRUCT        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uesecuritycapabilities_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UESECURITYCAPABILITIES_EXT_STRUCT        *ie);

/*******************************************************************************
/* Protocol Message UserLocationInformation_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_USERLOCATIONINFORMATION_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_userlocationinformation_ext(
  LIBLTE_S1AP_MESSAGE_USERLOCATIONINFORMATION_EXT_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_userlocationinformation_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_USERLOCATIONINFORMATION_EXT_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message ENBX2ExtTLA_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_ENBX2EXTTLA_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enbx2exttla_ext(
  LIBLTE_S1AP_MESSAGE_ENBX2EXTTLA_EXT_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enbx2exttla_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_ENBX2EXTTLA_EXT_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Message SourceeNB_ToTargeteNB_TransparentContainer_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MOBILITYINFORMATION_STRUCT                       MobilityInformation;
  bool                                                         MobilityInformation_present;
}LIBLTE_S1AP_MESSAGE_SOURCEENB_TOTARGETENB_TRANSPARENTCONTAINER_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_sourceenb_totargetenb_transparentcontainer_ext(
  LIBLTE_S1AP_MESSAGE_SOURCEENB_TOTARGETENB_TRANSPARENTCONTAINER_EXT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_sourceenb_totargetenb_transparentcontainer_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_SOURCEENB_TOTARGETENB_TRANSPARENTCONTAINER_EXT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message E_RABInformationList STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABINFORMATIONLISTITEM_STRUCT                  E_RABInformationListItem;
}LIBLTE_S1AP_MESSAGE_E_RABINFORMATIONLIST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabinformationlist(
  LIBLTE_S1AP_MESSAGE_E_RABINFORMATIONLIST_STRUCT              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabinformationlist(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABINFORMATIONLIST_STRUCT              *ie);

/*******************************************************************************
/* Protocol Message LastVisitedEUTRANCellInformation_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TIME_UE_STAYEDINCELL_ENHANCEDGRANULARITY_STRUCT  Time_UE_StayedInCell_EnhancedGranularity;
  bool                                                         Time_UE_StayedInCell_EnhancedGranularity_present;
  LIBLTE_S1AP_CAUSE_STRUCT                                     HO_Cause;
  bool                                                         HO_Cause_present;
}LIBLTE_S1AP_MESSAGE_LASTVISITEDEUTRANCELLINFORMATION_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_lastvisitedeutrancellinformation_ext(
  LIBLTE_S1AP_MESSAGE_LASTVISITEDEUTRANCELLINFORMATION_EXT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_lastvisitedeutrancellinformation_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_LASTVISITEDEUTRANCELLINFORMATION_EXT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message SONInformationReply_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TIMESYNCHRONIZATIONINFO_STRUCT                   Time_Synchronization_Info;
  bool                                                         Time_Synchronization_Info_present;
}LIBLTE_S1AP_MESSAGE_SONINFORMATIONREPLY_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_soninformationreply_ext(
  LIBLTE_S1AP_MESSAGE_SONINFORMATIONREPLY_EXT_STRUCT           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_soninformationreply_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_SONINFORMATIONREPLY_EXT_STRUCT           *ie);

/*******************************************************************************
/* Protocol Message Bearers_SubjectToStatusTransfer_ItemExt STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_COUNTVALUEEXTENDED_STRUCT                        ULCOUNTValueExtended;
  bool                                                         ULCOUNTValueExtended_present;
  LIBLTE_S1AP_COUNTVALUEEXTENDED_STRUCT                        DLCOUNTValueExtended;
  bool                                                         DLCOUNTValueExtended_present;
  LIBLTE_S1AP_RECEIVESTATUSOFULPDCPSDUSEXTENDED_STRUCT         ReceiveStatusOfULPDCPSDUsExtended;
  bool                                                         ReceiveStatusOfULPDCPSDUsExtended_present;
}LIBLTE_S1AP_MESSAGE_BEARERS_SUBJECTTOSTATUSTRANSFER_ITEMEXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_bearers_subjecttostatustransfer_itemext(
  LIBLTE_S1AP_MESSAGE_BEARERS_SUBJECTTOSTATUSTRANSFER_ITEMEXT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_bearers_subjecttostatustransfer_itemext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_BEARERS_SUBJECTTOSTATUSTRANSFER_ITEMEXT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message E_RABItem STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABITEM_STRUCT                                 E_RABItem;
}LIBLTE_S1AP_MESSAGE_E_RABITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabitem(
  LIBLTE_S1AP_MESSAGE_E_RABITEM_STRUCT                         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABITEM_STRUCT                         *ie);

/*******************************************************************************
/* Protocol Message MDT_Configuration_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MDTPLMNLIST_STRUCT                               SignallingBasedMDTPLMNList;
  bool                                                         SignallingBasedMDTPLMNList_present;
}LIBLTE_S1AP_MESSAGE_MDT_CONFIGURATION_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mdt_configuration_ext(
  LIBLTE_S1AP_MESSAGE_MDT_CONFIGURATION_EXT_STRUCT             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mdt_configuration_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_MDT_CONFIGURATION_EXT_STRUCT             *ie);

/*******************************************************************************
/* Protocol Message X2TNLConfigurationInfo_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_ENBX2EXTTLAS_STRUCT                              eNBX2ExtendedTransportLayerAddresses;
  bool                                                         eNBX2ExtendedTransportLayerAddresses_present;
}LIBLTE_S1AP_MESSAGE_X2TNLCONFIGURATIONINFO_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_x2tnlconfigurationinfo_ext(
  LIBLTE_S1AP_MESSAGE_X2TNLCONFIGURATIONINFO_EXT_STRUCT        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_x2tnlconfigurationinfo_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_X2TNLCONFIGURATIONINFO_EXT_STRUCT        *ie);

/*******************************************************************************
/* Protocol Message Bearers_SubjectToStatusTransfer_Item STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_BEARERS_SUBJECTTOSTATUSTRANSFER_ITEM_STRUCT      Bearers_SubjectToStatusTransfer_Item;
}LIBLTE_S1AP_MESSAGE_BEARERS_SUBJECTTOSTATUSTRANSFER_ITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_bearers_subjecttostatustransfer_item(
  LIBLTE_S1AP_MESSAGE_BEARERS_SUBJECTTOSTATUSTRANSFER_ITEM_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_bearers_subjecttostatustransfer_item(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_BEARERS_SUBJECTTOSTATUSTRANSFER_ITEM_STRUCT *ie);

/*******************************************************************************
/* Protocol Message ImmediateMDT_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_M3CONFIGURATION_STRUCT                           M3Configuration;
  bool                                                         M3Configuration_present;
  LIBLTE_S1AP_M4CONFIGURATION_STRUCT                           M4Configuration;
  bool                                                         M4Configuration_present;
  LIBLTE_S1AP_M5CONFIGURATION_STRUCT                           M5Configuration;
  bool                                                         M5Configuration_present;
  LIBLTE_S1AP_MDT_LOCATION_INFO_STRUCT                         MDT_Location_Info;
  bool                                                         MDT_Location_Info_present;
}LIBLTE_S1AP_MESSAGE_IMMEDIATEMDT_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_immediatemdt_ext(
  LIBLTE_S1AP_MESSAGE_IMMEDIATEMDT_EXT_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_immediatemdt_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_IMMEDIATEMDT_EXT_STRUCT                  *ie);

/*******************************************************************************
/* Protocol Message SONConfigurationTransfer_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_X2TNLCONFIGURATIONINFO_STRUCT                    x2TNLConfigurationInfo;
  bool                                                         x2TNLConfigurationInfo_present;
}LIBLTE_S1AP_MESSAGE_SONCONFIGURATIONTRANSFER_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_sonconfigurationtransfer_ext(
  LIBLTE_S1AP_MESSAGE_SONCONFIGURATIONTRANSFER_EXT_STRUCT      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_sonconfigurationtransfer_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_SONCONFIGURATIONTRANSFER_EXT_STRUCT      *ie);

/*******************************************************************************
/* Protocol Message TraceActivation_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MDT_CONFIGURATION_STRUCT                         MDTConfiguration;
  bool                                                         MDTConfiguration_present;
}LIBLTE_S1AP_MESSAGE_TRACEACTIVATION_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_traceactivation_ext(
  LIBLTE_S1AP_MESSAGE_TRACEACTIVATION_EXT_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_traceactivation_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TRACEACTIVATION_EXT_STRUCT               *ie);

/*******************************************************************************
/* Protocol Message HandoverRequired STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_HANDOVERTYPE_ENUM_EXT                            HandoverType;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  LIBLTE_S1AP_TARGETID_STRUCT                                  TargetID;
  LIBLTE_S1AP_DIRECT_FORWARDING_PATH_AVAILABILITY_ENUM_EXT     Direct_Forwarding_Path_Availability;
  bool                                                         Direct_Forwarding_Path_Availability_present;
  LIBLTE_S1AP_SRVCCHOINDICATION_ENUM_EXT                       SRVCCHOIndication;
  bool                                                         SRVCCHOIndication_present;
  LIBLTE_S1AP_SOURCE_TOTARGET_TRANSPARENTCONTAINER_STRUCT      Source_ToTarget_TransparentContainer;
  LIBLTE_S1AP_SOURCE_TOTARGET_TRANSPARENTCONTAINER_STRUCT      Source_ToTarget_TransparentContainer_Secondary;
  bool                                                         Source_ToTarget_TransparentContainer_Secondary_present;
  LIBLTE_S1AP_MSCLASSMARK2_STRUCT                              MSClassmark2;
  bool                                                         MSClassmark2_present;
  LIBLTE_S1AP_MSCLASSMARK3_STRUCT                              MSClassmark3;
  bool                                                         MSClassmark3_present;
  LIBLTE_S1AP_CSG_ID_STRUCT                                    CSG_Id;
  bool                                                         CSG_Id_present;
  LIBLTE_S1AP_CELLACCESSMODE_ENUM_EXT                          CellAccessMode;
  bool                                                         CellAccessMode_present;
  LIBLTE_S1AP_PS_SERVICENOTAVAILABLE_ENUM_EXT                  PS_ServiceNotAvailable;
  bool                                                         PS_ServiceNotAvailable_present;
}LIBLTE_S1AP_MESSAGE_HANDOVERREQUIRED_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_handoverrequired(
  LIBLTE_S1AP_MESSAGE_HANDOVERREQUIRED_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_handoverrequired(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_HANDOVERREQUIRED_STRUCT                  *ie);

/*******************************************************************************
/* Protocol Message E_RABDataForwardingItem_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_E_RABDATAFORWARDINGITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabdataforwardingitem_ext(
  LIBLTE_S1AP_MESSAGE_E_RABDATAFORWARDINGITEM_EXT_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabdataforwardingitem_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABDATAFORWARDINGITEM_EXT_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message HandoverPreparationFailure STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_HANDOVERPREPARATIONFAILURE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_handoverpreparationfailure(
  LIBLTE_S1AP_MESSAGE_HANDOVERPREPARATIONFAILURE_STRUCT        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_handoverpreparationfailure(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_HANDOVERPREPARATIONFAILURE_STRUCT        *ie);

/*******************************************************************************
/* Protocol Message E_RABToBeSetupItemHOReq_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_DATA_FORWARDING_NOT_POSSIBLE_ENUM_EXT            Data_Forwarding_Not_Possible;
  bool                                                         Data_Forwarding_Not_Possible_present;
}LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMHOREQ_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobesetupitemhoreq_ext(
  LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMHOREQ_EXT_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobesetupitemhoreq_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMHOREQ_EXT_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message E_RABAdmittedItem_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_E_RABADMITTEDITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabadmitteditem_ext(
  LIBLTE_S1AP_MESSAGE_E_RABADMITTEDITEM_EXT_STRUCT             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabadmitteditem_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABADMITTEDITEM_EXT_STRUCT             *ie);

/*******************************************************************************
/* Protocol Message E_RABFailedToSetupItemHOReqAckExt STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_E_RABFAILEDTOSETUPITEMHOREQACKEXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabfailedtosetupitemhoreqackext(
  LIBLTE_S1AP_MESSAGE_E_RABFAILEDTOSETUPITEMHOREQACKEXT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabfailedtosetupitemhoreqackext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABFAILEDTOSETUPITEMHOREQACKEXT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message HandoverFailure STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_HANDOVERFAILURE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_handoverfailure(
  LIBLTE_S1AP_MESSAGE_HANDOVERFAILURE_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_handoverfailure(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_HANDOVERFAILURE_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Message HandoverNotify STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                EUTRAN_CGI;
  LIBLTE_S1AP_TAI_STRUCT                                       TAI;
  LIBLTE_S1AP_TUNNELINFORMATION_STRUCT                         Tunnel_Information_for_BBF;
  bool                                                         Tunnel_Information_for_BBF_present;
  LIBLTE_S1AP_LHN_ID_STRUCT                                    LHN_ID;
  bool                                                         LHN_ID_present;
}LIBLTE_S1AP_MESSAGE_HANDOVERNOTIFY_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_handovernotify(
  LIBLTE_S1AP_MESSAGE_HANDOVERNOTIFY_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_handovernotify(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_HANDOVERNOTIFY_STRUCT                    *ie);

/*******************************************************************************
/* Protocol Message E_RABToBeSwitchedDLItem_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_E_RABTOBESWITCHEDDLITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobeswitcheddlitem_ext(
  LIBLTE_S1AP_MESSAGE_E_RABTOBESWITCHEDDLITEM_EXT_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobeswitcheddlitem_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABTOBESWITCHEDDLITEM_EXT_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message E_RABToBeSwitchedULItem_Ext STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_E_RABTOBESWITCHEDULITEM_EXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobeswitchedulitem_ext(
  LIBLTE_S1AP_MESSAGE_E_RABTOBESWITCHEDULITEM_EXT_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobeswitchedulitem_ext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABTOBESWITCHEDULITEM_EXT_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message PathSwitchRequestFailure STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_PATHSWITCHREQUESTFAILURE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_pathswitchrequestfailure(
  LIBLTE_S1AP_MESSAGE_PATHSWITCHREQUESTFAILURE_STRUCT          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_pathswitchrequestfailure(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_PATHSWITCHREQUESTFAILURE_STRUCT          *ie);

/*******************************************************************************
/* Protocol Message HandoverCancel STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
}LIBLTE_S1AP_MESSAGE_HANDOVERCANCEL_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_handovercancel(
  LIBLTE_S1AP_MESSAGE_HANDOVERCANCEL_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_handovercancel(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_HANDOVERCANCEL_STRUCT                    *ie);

/*******************************************************************************
/* Protocol Message HandoverCancelAcknowledge STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_HANDOVERCANCELACKNOWLEDGE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_handovercancelacknowledge(
  LIBLTE_S1AP_MESSAGE_HANDOVERCANCELACKNOWLEDGE_STRUCT         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_handovercancelacknowledge(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_HANDOVERCANCELACKNOWLEDGE_STRUCT         *ie);

/*******************************************************************************
/* Protocol Message E_RABToBeSetupItemBearerSUReqExt STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CORRELATION_ID_STRUCT                            Correlation_ID;
  bool                                                         Correlation_ID_present;
  LIBLTE_S1AP_CORRELATION_ID_STRUCT                            SIPTO_Correlation_ID;
  bool                                                         SIPTO_Correlation_ID_present;
}LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMBEARERSUREQEXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobesetupitembearersureqext(
  LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMBEARERSUREQEXT_STRUCT  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobesetupitembearersureqext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMBEARERSUREQEXT_STRUCT  *ie);

/*******************************************************************************
/* Protocol Message E_RABSetupItemBearerSUResExt STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_E_RABSETUPITEMBEARERSURESEXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabsetupitembearersuresext(
  LIBLTE_S1AP_MESSAGE_E_RABSETUPITEMBEARERSURESEXT_STRUCT      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabsetupitembearersuresext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABSETUPITEMBEARERSURESEXT_STRUCT      *ie);

/*******************************************************************************
/* Protocol Message E_RABToBeModifyItemBearerModReqExt STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TRANSPORTINFORMATION_STRUCT                      TransportInformation;
  bool                                                         TransportInformation_present;
}LIBLTE_S1AP_MESSAGE_E_RABTOBEMODIFYITEMBEARERMODREQEXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobemodifyitembearermodreqext(
  LIBLTE_S1AP_MESSAGE_E_RABTOBEMODIFYITEMBEARERMODREQEXT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobemodifyitembearermodreqext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABTOBEMODIFYITEMBEARERMODREQEXT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message E_RABModifyItemBearerModResExt STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_E_RABMODIFYITEMBEARERMODRESEXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabmodifyitembearermodresext(
  LIBLTE_S1AP_MESSAGE_E_RABMODIFYITEMBEARERMODRESEXT_STRUCT    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabmodifyitembearermodresext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABMODIFYITEMBEARERMODRESEXT_STRUCT    *ie);

/*******************************************************************************
/* Protocol Message E_RABReleaseCommand STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_UEAGGREGATEMAXIMUMBITRATE_STRUCT                 uEaggregateMaximumBitrate;
  bool                                                         uEaggregateMaximumBitrate_present;
  LIBLTE_S1AP_E_RABLIST_STRUCT                                 E_RABToBeReleasedList;
  LIBLTE_S1AP_NAS_PDU_STRUCT                                   NAS_PDU;
  bool                                                         NAS_PDU_present;
}LIBLTE_S1AP_MESSAGE_E_RABRELEASECOMMAND_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabreleasecommand(
  LIBLTE_S1AP_MESSAGE_E_RABRELEASECOMMAND_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabreleasecommand(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABRELEASECOMMAND_STRUCT               *ie);

/*******************************************************************************
/* Protocol Message E_RABReleaseItemBearerRelCompExt STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_E_RABRELEASEITEMBEARERRELCOMPEXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabreleaseitembearerrelcompext(
  LIBLTE_S1AP_MESSAGE_E_RABRELEASEITEMBEARERRELCOMPEXT_STRUCT  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabreleaseitembearerrelcompext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABRELEASEITEMBEARERRELCOMPEXT_STRUCT  *ie);

/*******************************************************************************
/* Protocol Message E_RABReleaseIndication STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_E_RABLIST_STRUCT                                 E_RABReleasedList;
  LIBLTE_S1AP_USERLOCATIONINFORMATION_STRUCT                   UserLocationInformation;
  bool                                                         UserLocationInformation_present;
}LIBLTE_S1AP_MESSAGE_E_RABRELEASEINDICATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabreleaseindication(
  LIBLTE_S1AP_MESSAGE_E_RABRELEASEINDICATION_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabreleaseindication(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABRELEASEINDICATION_STRUCT            *ie);

/*******************************************************************************
/* Protocol Message E_RABToBeSetupItemCtxtSUReqExt STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CORRELATION_ID_STRUCT                            Correlation_ID;
  bool                                                         Correlation_ID_present;
  LIBLTE_S1AP_CORRELATION_ID_STRUCT                            SIPTO_Correlation_ID;
  bool                                                         SIPTO_Correlation_ID_present;
}LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMCTXTSUREQEXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobesetupitemctxtsureqext(
  LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMCTXTSUREQEXT_STRUCT    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobesetupitemctxtsureqext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMCTXTSUREQEXT_STRUCT    *ie);

/*******************************************************************************
/* Protocol Message E_RABSetupItemCtxtSUResExt STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_E_RABSETUPITEMCTXTSURESEXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabsetupitemctxtsuresext(
  LIBLTE_S1AP_MESSAGE_E_RABSETUPITEMCTXTSURESEXT_STRUCT        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabsetupitemctxtsuresext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABSETUPITEMCTXTSURESEXT_STRUCT        *ie);

/*******************************************************************************
/* Protocol Message InitialContextSetupFailure STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPFAILURE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_initialcontextsetupfailure(
  LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPFAILURE_STRUCT        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_initialcontextsetupfailure(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPFAILURE_STRUCT        *ie);

/*******************************************************************************
/* Protocol Message TAIItemExt STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_TAIITEMEXT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_taiitemext(
  LIBLTE_S1AP_MESSAGE_TAIITEMEXT_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_taiitemext(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TAIITEMEXT_STRUCT                        *ie);

/*******************************************************************************
/* Protocol Message UEContextReleaseRequest STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  LIBLTE_S1AP_GWCONTEXTRELEASEINDICATION_ENUM_EXT              GWContextReleaseIndication;
  bool                                                         GWContextReleaseIndication_present;
}LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASEREQUEST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uecontextreleaserequest(
  LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASEREQUEST_STRUCT           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uecontextreleaserequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASEREQUEST_STRUCT           *ie);

/*******************************************************************************
/* Protocol Message UEContextReleaseCommand STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_UE_S1AP_IDS_STRUCT                               UE_S1AP_IDs;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
}LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASECOMMAND_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uecontextreleasecommand(
  LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASECOMMAND_STRUCT           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uecontextreleasecommand(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASECOMMAND_STRUCT           *ie);

/*******************************************************************************
/* Protocol Message UEContextReleaseComplete STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
  LIBLTE_S1AP_USERLOCATIONINFORMATION_STRUCT                   UserLocationInformation;
  bool                                                         UserLocationInformation_present;
}LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASECOMPLETE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uecontextreleasecomplete(
  LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASECOMPLETE_STRUCT          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uecontextreleasecomplete(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASECOMPLETE_STRUCT          *ie);

/*******************************************************************************
/* Protocol Message UEContextModificationRequest STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_SECURITYKEY_STRUCT                               SecurityKey;
  bool                                                         SecurityKey_present;
  LIBLTE_S1AP_SUBSCRIBERPROFILEIDFORRFP_STRUCT                 SubscriberProfileIDforRFP;
  bool                                                         SubscriberProfileIDforRFP_present;
  LIBLTE_S1AP_UEAGGREGATEMAXIMUMBITRATE_STRUCT                 uEaggregateMaximumBitrate;
  bool                                                         uEaggregateMaximumBitrate_present;
  LIBLTE_S1AP_CSFALLBACKINDICATOR_ENUM_EXT                     CSFallbackIndicator;
  bool                                                         CSFallbackIndicator_present;
  LIBLTE_S1AP_UESECURITYCAPABILITIES_STRUCT                    UESecurityCapabilities;
  bool                                                         UESecurityCapabilities_present;
  LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_ENUM                         CSGMembershipStatus;
  bool                                                         CSGMembershipStatus_present;
  LIBLTE_S1AP_LAI_STRUCT                                       RegisteredLAI;
  bool                                                         RegisteredLAI_present;
  LIBLTE_S1AP_ADDITIONALCSFALLBACKINDICATOR_ENUM_EXT           AdditionalCSFallbackIndicator;
  bool                                                         AdditionalCSFallbackIndicator_present;
}LIBLTE_S1AP_MESSAGE_UECONTEXTMODIFICATIONREQUEST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uecontextmodificationrequest(
  LIBLTE_S1AP_MESSAGE_UECONTEXTMODIFICATIONREQUEST_STRUCT      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uecontextmodificationrequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UECONTEXTMODIFICATIONREQUEST_STRUCT      *ie);

/*******************************************************************************
/* Protocol Message UEContextModificationResponse STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_UECONTEXTMODIFICATIONRESPONSE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uecontextmodificationresponse(
  LIBLTE_S1AP_MESSAGE_UECONTEXTMODIFICATIONRESPONSE_STRUCT     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uecontextmodificationresponse(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UECONTEXTMODIFICATIONRESPONSE_STRUCT     *ie);

/*******************************************************************************
/* Protocol Message UEContextModificationFailure STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_UECONTEXTMODIFICATIONFAILURE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uecontextmodificationfailure(
  LIBLTE_S1AP_MESSAGE_UECONTEXTMODIFICATIONFAILURE_STRUCT      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uecontextmodificationfailure(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UECONTEXTMODIFICATIONFAILURE_STRUCT      *ie);

/*******************************************************************************
/* Protocol Message UERadioCapabilityMatchRequest STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_UERADIOCAPABILITY_STRUCT                         UERadioCapability;
  bool                                                         UERadioCapability_present;
}LIBLTE_S1AP_MESSAGE_UERADIOCAPABILITYMATCHREQUEST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ueradiocapabilitymatchrequest(
  LIBLTE_S1AP_MESSAGE_UERADIOCAPABILITYMATCHREQUEST_STRUCT     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ueradiocapabilitymatchrequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UERADIOCAPABILITYMATCHREQUEST_STRUCT     *ie);

/*******************************************************************************
/* Protocol Message UERadioCapabilityMatchResponse STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_VOICESUPPORTMATCHINDICATOR_ENUM_EXT              VoiceSupportMatchIndicator;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_UERADIOCAPABILITYMATCHRESPONSE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ueradiocapabilitymatchresponse(
  LIBLTE_S1AP_MESSAGE_UERADIOCAPABILITYMATCHRESPONSE_STRUCT    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ueradiocapabilitymatchresponse(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UERADIOCAPABILITYMATCHRESPONSE_STRUCT    *ie);

/*******************************************************************************
/* Protocol Message DownlinkNASTransport STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_NAS_PDU_STRUCT                                   NAS_PDU;
  LIBLTE_S1AP_HANDOVERRESTRICTIONLIST_STRUCT                   HandoverRestrictionList;
  bool                                                         HandoverRestrictionList_present;
  LIBLTE_S1AP_SUBSCRIBERPROFILEIDFORRFP_STRUCT                 SubscriberProfileIDforRFP;
  bool                                                         SubscriberProfileIDforRFP_present;
}LIBLTE_S1AP_MESSAGE_DOWNLINKNASTRANSPORT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_downlinknastransport(
  LIBLTE_S1AP_MESSAGE_DOWNLINKNASTRANSPORT_STRUCT              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_downlinknastransport(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_DOWNLINKNASTRANSPORT_STRUCT              *ie);

/*******************************************************************************
/* Protocol Message InitialUEMessage STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_NAS_PDU_STRUCT                                   NAS_PDU;
  LIBLTE_S1AP_TAI_STRUCT                                       TAI;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                EUTRAN_CGI;
  LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM_EXT                 RRC_Establishment_Cause;
  LIBLTE_S1AP_S_TMSI_STRUCT                                    S_TMSI;
  bool                                                         S_TMSI_present;
  LIBLTE_S1AP_CSG_ID_STRUCT                                    CSG_Id;
  bool                                                         CSG_Id_present;
  LIBLTE_S1AP_GUMMEI_STRUCT                                    GUMMEI_ID;
  bool                                                         GUMMEI_ID_present;
  LIBLTE_S1AP_CELLACCESSMODE_ENUM_EXT                          CellAccessMode;
  bool                                                         CellAccessMode_present;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     GW_TransportLayerAddress;
  bool                                                         GW_TransportLayerAddress_present;
  LIBLTE_S1AP_RELAYNODE_INDICATOR_ENUM_EXT                     RelayNode_Indicator;
  bool                                                         RelayNode_Indicator_present;
  LIBLTE_S1AP_GUMMEITYPE_ENUM_EXT                              GUMMEIType;
  bool                                                         GUMMEIType_present;
  LIBLTE_S1AP_TUNNELINFORMATION_STRUCT                         Tunnel_Information_for_BBF;
  bool                                                         Tunnel_Information_for_BBF_present;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     SIPTO_L_GW_TransportLayerAddress;
  bool                                                         SIPTO_L_GW_TransportLayerAddress_present;
  LIBLTE_S1AP_LHN_ID_STRUCT                                    LHN_ID;
  bool                                                         LHN_ID_present;
}LIBLTE_S1AP_MESSAGE_INITIALUEMESSAGE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_initialuemessage(
  LIBLTE_S1AP_MESSAGE_INITIALUEMESSAGE_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_initialuemessage(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_INITIALUEMESSAGE_STRUCT                  *ie);

/*******************************************************************************
/* Protocol Message UplinkNASTransport STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_NAS_PDU_STRUCT                                   NAS_PDU;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                EUTRAN_CGI;
  LIBLTE_S1AP_TAI_STRUCT                                       TAI;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     GW_TransportLayerAddress;
  bool                                                         GW_TransportLayerAddress_present;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     SIPTO_L_GW_TransportLayerAddress;
  bool                                                         SIPTO_L_GW_TransportLayerAddress_present;
  LIBLTE_S1AP_LHN_ID_STRUCT                                    LHN_ID;
  bool                                                         LHN_ID_present;
}LIBLTE_S1AP_MESSAGE_UPLINKNASTRANSPORT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uplinknastransport(
  LIBLTE_S1AP_MESSAGE_UPLINKNASTRANSPORT_STRUCT                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uplinknastransport(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UPLINKNASTRANSPORT_STRUCT                *ie);

/*******************************************************************************
/* Protocol Message NASNonDeliveryIndication STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_NAS_PDU_STRUCT                                   NAS_PDU;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
}LIBLTE_S1AP_MESSAGE_NASNONDELIVERYINDICATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_nasnondeliveryindication(
  LIBLTE_S1AP_MESSAGE_NASNONDELIVERYINDICATION_STRUCT          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_nasnondeliveryindication(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_NASNONDELIVERYINDICATION_STRUCT          *ie);

/*******************************************************************************
/* Protocol Message UE_associatedLogicalS1_ConnectionItem STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEM_STRUCT     UE_associatedLogicalS1_ConnectionItem;
}LIBLTE_S1AP_MESSAGE_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ue_associatedlogicals1_connectionitem(
  LIBLTE_S1AP_MESSAGE_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEM_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ue_associatedlogicals1_connectionitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEM_STRUCT *ie);

/*******************************************************************************
/* Protocol Message UE_associatedLogicalS1_ConnectionItemRes STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEM_STRUCT     UE_associatedLogicalS1_ConnectionItem;
}LIBLTE_S1AP_MESSAGE_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEMRES_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_ue_associatedlogicals1_connectionitemres(
  LIBLTE_S1AP_MESSAGE_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEMRES_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_ue_associatedlogicals1_connectionitemres(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UE_ASSOCIATEDLOGICALS1_CONNECTIONITEMRES_STRUCT *ie);

/*******************************************************************************
/* Protocol Message ErrorIndication STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  bool                                                         MME_UE_S1AP_ID_present;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  bool                                                         eNB_UE_S1AP_ID_present;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  bool                                                         Cause_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_ERRORINDICATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_errorindication(
  LIBLTE_S1AP_MESSAGE_ERRORINDICATION_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_errorindication(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_ERRORINDICATION_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Message S1SetupRequest STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_GLOBAL_ENB_ID_STRUCT                             Global_ENB_ID;
  LIBLTE_S1AP_ENBNAME_STRUCT                                   eNBname;
  bool                                                         eNBname_present;
  LIBLTE_S1AP_SUPPORTEDTAS_STRUCT                              SupportedTAs;
  LIBLTE_S1AP_PAGINGDRX_ENUM_EXT                               DefaultPagingDRX;
  LIBLTE_S1AP_CSG_IDLIST_STRUCT                                CSG_IdList;
  bool                                                         CSG_IdList_present;
}LIBLTE_S1AP_MESSAGE_S1SETUPREQUEST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_s1setuprequest(
  LIBLTE_S1AP_MESSAGE_S1SETUPREQUEST_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_s1setuprequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_S1SETUPREQUEST_STRUCT                    *ie);

/*******************************************************************************
/* Protocol Message S1SetupResponse STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MMENAME_STRUCT                                   MMEname;
  bool                                                         MMEname_present;
  LIBLTE_S1AP_SERVEDGUMMEIS_STRUCT                             ServedGUMMEIs;
  LIBLTE_S1AP_RELATIVEMMECAPACITY_STRUCT                       RelativeMMECapacity;
  LIBLTE_S1AP_MMERELAYSUPPORTINDICATOR_ENUM_EXT                MMERelaySupportIndicator;
  bool                                                         MMERelaySupportIndicator_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_S1SETUPRESPONSE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_s1setupresponse(
  LIBLTE_S1AP_MESSAGE_S1SETUPRESPONSE_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_s1setupresponse(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_S1SETUPRESPONSE_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Message S1SetupFailure STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  LIBLTE_S1AP_TIMETOWAIT_ENUM_EXT                              TimeToWait;
  bool                                                         TimeToWait_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_S1SETUPFAILURE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_s1setupfailure(
  LIBLTE_S1AP_MESSAGE_S1SETUPFAILURE_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_s1setupfailure(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_S1SETUPFAILURE_STRUCT                    *ie);

/*******************************************************************************
/* Protocol Message ENBConfigurationUpdate STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_ENBNAME_STRUCT                                   eNBname;
  bool                                                         eNBname_present;
  LIBLTE_S1AP_SUPPORTEDTAS_STRUCT                              SupportedTAs;
  bool                                                         SupportedTAs_present;
  LIBLTE_S1AP_CSG_IDLIST_STRUCT                                CSG_IdList;
  bool                                                         CSG_IdList_present;
  LIBLTE_S1AP_PAGINGDRX_ENUM_EXT                               DefaultPagingDRX;
  bool                                                         DefaultPagingDRX_present;
}LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONUPDATE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enbconfigurationupdate(
  LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONUPDATE_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enbconfigurationupdate(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONUPDATE_STRUCT            *ie);

/*******************************************************************************
/* Protocol Message ENBConfigurationUpdateAcknowledge STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONUPDATEACKNOWLEDGE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enbconfigurationupdateacknowledge(
  LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONUPDATEACKNOWLEDGE_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enbconfigurationupdateacknowledge(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONUPDATEACKNOWLEDGE_STRUCT *ie);

/*******************************************************************************
/* Protocol Message ENBConfigurationUpdateFailure STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  LIBLTE_S1AP_TIMETOWAIT_ENUM_EXT                              TimeToWait;
  bool                                                         TimeToWait_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONUPDATEFAILURE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enbconfigurationupdatefailure(
  LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONUPDATEFAILURE_STRUCT     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enbconfigurationupdatefailure(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONUPDATEFAILURE_STRUCT     *ie);

/*******************************************************************************
/* Protocol Message MMEConfigurationUpdate STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MMENAME_STRUCT                                   MMEname;
  bool                                                         MMEname_present;
  LIBLTE_S1AP_SERVEDGUMMEIS_STRUCT                             ServedGUMMEIs;
  bool                                                         ServedGUMMEIs_present;
  LIBLTE_S1AP_RELATIVEMMECAPACITY_STRUCT                       RelativeMMECapacity;
  bool                                                         RelativeMMECapacity_present;
}LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mmeconfigurationupdate(
  LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATE_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mmeconfigurationupdate(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATE_STRUCT            *ie);

/*******************************************************************************
/* Protocol Message MMEConfigurationUpdateAcknowledge STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATEACKNOWLEDGE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mmeconfigurationupdateacknowledge(
  LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATEACKNOWLEDGE_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mmeconfigurationupdateacknowledge(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATEACKNOWLEDGE_STRUCT *ie);

/*******************************************************************************
/* Protocol Message MMEConfigurationUpdateFailure STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  LIBLTE_S1AP_TIMETOWAIT_ENUM_EXT                              TimeToWait;
  bool                                                         TimeToWait_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATEFAILURE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mmeconfigurationupdatefailure(
  LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATEFAILURE_STRUCT     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mmeconfigurationupdatefailure(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATEFAILURE_STRUCT     *ie);

/*******************************************************************************
/* Protocol Message UplinkS1cdma2000tunneling STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_CDMA2000RATTYPE_ENUM_EXT                         cdma2000RATType;
  LIBLTE_S1AP_CDMA2000SECTORID_STRUCT                          cdma2000SectorID;
  LIBLTE_S1AP_CDMA2000HOREQUIREDINDICATION_ENUM_EXT            cdma2000HORequiredIndication;
  bool                                                         cdma2000HORequiredIndication_present;
  LIBLTE_S1AP_CDMA2000ONEXSRVCCINFO_STRUCT                     cdma2000OneXSRVCCInfo;
  bool                                                         cdma2000OneXSRVCCInfo_present;
  LIBLTE_S1AP_CDMA2000ONEXRAND_STRUCT                          cdma2000OneXRAND;
  bool                                                         cdma2000OneXRAND_present;
  LIBLTE_S1AP_CDMA2000PDU_STRUCT                               cdma2000PDU;
  LIBLTE_S1AP_EUTRANROUNDTRIPDELAYESTIMATIONINFO_STRUCT        EUTRANRoundTripDelayEstimationInfo;
  bool                                                         EUTRANRoundTripDelayEstimationInfo_present;
}LIBLTE_S1AP_MESSAGE_UPLINKS1CDMA2000TUNNELING_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uplinks1cdma2000tunneling(
  LIBLTE_S1AP_MESSAGE_UPLINKS1CDMA2000TUNNELING_STRUCT         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uplinks1cdma2000tunneling(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UPLINKS1CDMA2000TUNNELING_STRUCT         *ie);

/*******************************************************************************
/* Protocol Message UECapabilityInfoIndication STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_UERADIOCAPABILITY_STRUCT                         UERadioCapability;
}LIBLTE_S1AP_MESSAGE_UECAPABILITYINFOINDICATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uecapabilityinfoindication(
  LIBLTE_S1AP_MESSAGE_UECAPABILITYINFOINDICATION_STRUCT        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uecapabilityinfoindication(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UECAPABILITYINFOINDICATION_STRUCT        *ie);

/*******************************************************************************
/* Protocol Message ENBStatusTransfer STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_STATUSTRANSFER_TRANSPARENTCONTAINER_STRUCT   eNB_StatusTransfer_TransparentContainer;
}LIBLTE_S1AP_MESSAGE_ENBSTATUSTRANSFER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enbstatustransfer(
  LIBLTE_S1AP_MESSAGE_ENBSTATUSTRANSFER_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enbstatustransfer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_ENBSTATUSTRANSFER_STRUCT                 *ie);

/*******************************************************************************
/* Protocol Message MMEStatusTransfer STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_STATUSTRANSFER_TRANSPARENTCONTAINER_STRUCT   eNB_StatusTransfer_TransparentContainer;
}LIBLTE_S1AP_MESSAGE_MMESTATUSTRANSFER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mmestatustransfer(
  LIBLTE_S1AP_MESSAGE_MMESTATUSTRANSFER_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mmestatustransfer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_MMESTATUSTRANSFER_STRUCT                 *ie);

/*******************************************************************************
/* Protocol Message TraceStart STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_TRACEACTIVATION_STRUCT                           TraceActivation;
}LIBLTE_S1AP_MESSAGE_TRACESTART_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tracestart(
  LIBLTE_S1AP_MESSAGE_TRACESTART_STRUCT                        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tracestart(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TRACESTART_STRUCT                        *ie);

/*******************************************************************************
/* Protocol Message TraceFailureIndication STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_E_UTRAN_TRACE_ID_STRUCT                          E_UTRAN_Trace_ID;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
}LIBLTE_S1AP_MESSAGE_TRACEFAILUREINDICATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_tracefailureindication(
  LIBLTE_S1AP_MESSAGE_TRACEFAILUREINDICATION_STRUCT            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_tracefailureindication(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TRACEFAILUREINDICATION_STRUCT            *ie);

/*******************************************************************************
/* Protocol Message DeactivateTrace STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_E_UTRAN_TRACE_ID_STRUCT                          E_UTRAN_Trace_ID;
}LIBLTE_S1AP_MESSAGE_DEACTIVATETRACE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_deactivatetrace(
  LIBLTE_S1AP_MESSAGE_DEACTIVATETRACE_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_deactivatetrace(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_DEACTIVATETRACE_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Message CellTrafficTrace STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_E_UTRAN_TRACE_ID_STRUCT                          E_UTRAN_Trace_ID;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                EUTRAN_CGI;
  LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT                     TraceCollectionEntityIPAddress;
  LIBLTE_S1AP_PRIVACYINDICATOR_ENUM_EXT                        PrivacyIndicator;
  bool                                                         PrivacyIndicator_present;
}LIBLTE_S1AP_MESSAGE_CELLTRAFFICTRACE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_celltraffictrace(
  LIBLTE_S1AP_MESSAGE_CELLTRAFFICTRACE_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_celltraffictrace(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_CELLTRAFFICTRACE_STRUCT                  *ie);

/*******************************************************************************
/* Protocol Message LocationReportingControl STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_REQUESTTYPE_STRUCT                               RequestType;
}LIBLTE_S1AP_MESSAGE_LOCATIONREPORTINGCONTROL_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_locationreportingcontrol(
  LIBLTE_S1AP_MESSAGE_LOCATIONREPORTINGCONTROL_STRUCT          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_locationreportingcontrol(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_LOCATIONREPORTINGCONTROL_STRUCT          *ie);

/*******************************************************************************
/* Protocol Message LocationReportingFailureIndication STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
}LIBLTE_S1AP_MESSAGE_LOCATIONREPORTINGFAILUREINDICATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_locationreportingfailureindication(
  LIBLTE_S1AP_MESSAGE_LOCATIONREPORTINGFAILUREINDICATION_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_locationreportingfailureindication(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_LOCATIONREPORTINGFAILUREINDICATION_STRUCT *ie);

/*******************************************************************************
/* Protocol Message LocationReport STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                EUTRAN_CGI;
  LIBLTE_S1AP_TAI_STRUCT                                       TAI;
  LIBLTE_S1AP_REQUESTTYPE_STRUCT                               RequestType;
}LIBLTE_S1AP_MESSAGE_LOCATIONREPORT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_locationreport(
  LIBLTE_S1AP_MESSAGE_LOCATIONREPORT_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_locationreport(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_LOCATIONREPORT_STRUCT                    *ie);

/*******************************************************************************
/* Protocol Message OverloadStart STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_OVERLOADRESPONSE_STRUCT                          OverloadResponse;
  LIBLTE_S1AP_GUMMEILIST_STRUCT                                GUMMEIList;
  bool                                                         GUMMEIList_present;
  LIBLTE_S1AP_TRAFFICLOADREDUCTIONINDICATION_STRUCT            TrafficLoadReductionIndication;
  bool                                                         TrafficLoadReductionIndication_present;
}LIBLTE_S1AP_MESSAGE_OVERLOADSTART_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_overloadstart(
  LIBLTE_S1AP_MESSAGE_OVERLOADSTART_STRUCT                     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_overloadstart(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_OVERLOADSTART_STRUCT                     *ie);

/*******************************************************************************
/* Protocol Message OverloadStop STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_GUMMEILIST_STRUCT                                GUMMEIList;
  bool                                                         GUMMEIList_present;
}LIBLTE_S1AP_MESSAGE_OVERLOADSTOP_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_overloadstop(
  LIBLTE_S1AP_MESSAGE_OVERLOADSTOP_STRUCT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_overloadstop(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_OVERLOADSTOP_STRUCT                      *ie);

/*******************************************************************************
/* Protocol Message WriteReplaceWarningRequest STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MESSAGEIDENTIFIER_STRUCT                         MessageIdentifier;
  LIBLTE_S1AP_SERIALNUMBER_STRUCT                              SerialNumber;
  LIBLTE_S1AP_WARNINGAREALIST_STRUCT                           WarningAreaList;
  bool                                                         WarningAreaList_present;
  LIBLTE_S1AP_REPETITIONPERIOD_STRUCT                          RepetitionPeriod;
  LIBLTE_S1AP_EXTENDEDREPETITIONPERIOD_STRUCT                  ExtendedRepetitionPeriod;
  bool                                                         ExtendedRepetitionPeriod_present;
  LIBLTE_S1AP_NUMBEROFBROADCASTREQUEST_STRUCT                  NumberofBroadcastRequest;
  LIBLTE_S1AP_WARNINGTYPE_STRUCT                               WarningType;
  bool                                                         WarningType_present;
  LIBLTE_S1AP_WARNINGSECURITYINFO_STRUCT                       WarningSecurityInfo;
  bool                                                         WarningSecurityInfo_present;
  LIBLTE_S1AP_DATACODINGSCHEME_STRUCT                          DataCodingScheme;
  bool                                                         DataCodingScheme_present;
  LIBLTE_S1AP_WARNINGMESSAGECONTENTS_STRUCT                    WarningMessageContents;
  bool                                                         WarningMessageContents_present;
  LIBLTE_S1AP_CONCURRENTWARNINGMESSAGEINDICATOR_ENUM           ConcurrentWarningMessageIndicator;
  bool                                                         ConcurrentWarningMessageIndicator_present;
}LIBLTE_S1AP_MESSAGE_WRITEREPLACEWARNINGREQUEST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_writereplacewarningrequest(
  LIBLTE_S1AP_MESSAGE_WRITEREPLACEWARNINGREQUEST_STRUCT        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_writereplacewarningrequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_WRITEREPLACEWARNINGREQUEST_STRUCT        *ie);

/*******************************************************************************
/* Protocol Message WriteReplaceWarningResponse STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MESSAGEIDENTIFIER_STRUCT                         MessageIdentifier;
  LIBLTE_S1AP_SERIALNUMBER_STRUCT                              SerialNumber;
  LIBLTE_S1AP_BROADCASTCOMPLETEDAREALIST_STRUCT                BroadcastCompletedAreaList;
  bool                                                         BroadcastCompletedAreaList_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_WRITEREPLACEWARNINGRESPONSE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_writereplacewarningresponse(
  LIBLTE_S1AP_MESSAGE_WRITEREPLACEWARNINGRESPONSE_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_writereplacewarningresponse(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_WRITEREPLACEWARNINGRESPONSE_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message MMEDirectInformationTransfer STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_INTER_SYSTEMINFORMATIONTRANSFERTYPE_STRUCT       Inter_SystemInformationTransferTypeMDT;
}LIBLTE_S1AP_MESSAGE_MMEDIRECTINFORMATIONTRANSFER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mmedirectinformationtransfer(
  LIBLTE_S1AP_MESSAGE_MMEDIRECTINFORMATIONTRANSFER_STRUCT      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mmedirectinformationtransfer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_MMEDIRECTINFORMATIONTRANSFER_STRUCT      *ie);

/*******************************************************************************
/* Protocol Message ENBConfigurationTransfer STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_SONCONFIGURATIONTRANSFER_STRUCT                  SONConfigurationTransferECT;
  bool                                                         SONConfigurationTransferECT_present;
}LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONTRANSFER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enbconfigurationtransfer(
  LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONTRANSFER_STRUCT          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enbconfigurationtransfer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONTRANSFER_STRUCT          *ie);

/*******************************************************************************
/* Protocol Message MMEConfigurationTransfer STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_SONCONFIGURATIONTRANSFER_STRUCT                  SONConfigurationTransferMCT;
  bool                                                         SONConfigurationTransferMCT_present;
}LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONTRANSFER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_mmeconfigurationtransfer(
  LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONTRANSFER_STRUCT          *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_mmeconfigurationtransfer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONTRANSFER_STRUCT          *ie);

/*******************************************************************************
/* Protocol Message PrivateMessage STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
}LIBLTE_S1AP_MESSAGE_PRIVATEMESSAGE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_privatemessage(
  LIBLTE_S1AP_MESSAGE_PRIVATEMESSAGE_STRUCT                    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_privatemessage(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_PRIVATEMESSAGE_STRUCT                    *ie);

/*******************************************************************************
/* Protocol Message KillRequest STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MESSAGEIDENTIFIER_STRUCT                         MessageIdentifier;
  LIBLTE_S1AP_SERIALNUMBER_STRUCT                              SerialNumber;
  LIBLTE_S1AP_WARNINGAREALIST_STRUCT                           WarningAreaList;
  bool                                                         WarningAreaList_present;
  LIBLTE_S1AP_KILLALLWARNINGMESSAGES_ENUM                      KillAllWarningMessages;
  bool                                                         KillAllWarningMessages_present;
}LIBLTE_S1AP_MESSAGE_KILLREQUEST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_killrequest(
  LIBLTE_S1AP_MESSAGE_KILLREQUEST_STRUCT                       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_killrequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_KILLREQUEST_STRUCT                       *ie);

/*******************************************************************************
/* Protocol Message KillResponse STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MESSAGEIDENTIFIER_STRUCT                         MessageIdentifier;
  LIBLTE_S1AP_SERIALNUMBER_STRUCT                              SerialNumber;
  LIBLTE_S1AP_BROADCASTCANCELLEDAREALIST_STRUCT                BroadcastCancelledAreaList;
  bool                                                         BroadcastCancelledAreaList_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_KILLRESPONSE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_killresponse(
  LIBLTE_S1AP_MESSAGE_KILLRESPONSE_STRUCT                      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_killresponse(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_KILLRESPONSE_STRUCT                      *ie);

/*******************************************************************************
/* Protocol Message PWSRestartIndication STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_ECGILISTFORRESTART_STRUCT                        ECGIListForRestart;
  LIBLTE_S1AP_GLOBAL_ENB_ID_STRUCT                             Global_ENB_ID;
  LIBLTE_S1AP_TAILISTFORRESTART_STRUCT                         TAIListForRestart;
  LIBLTE_S1AP_EMERGENCYAREAIDLISTFORRESTART_STRUCT             EmergencyAreaIDListForRestart;
  bool                                                         EmergencyAreaIDListForRestart_present;
}LIBLTE_S1AP_MESSAGE_PWSRESTARTINDICATION_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_pwsrestartindication(
  LIBLTE_S1AP_MESSAGE_PWSRESTARTINDICATION_STRUCT              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_pwsrestartindication(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_PWSRESTARTINDICATION_STRUCT              *ie);

/*******************************************************************************
/* Protocol Message DownlinkUEAssociatedLPPaTransport STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_ROUTING_ID_STRUCT                                Routing_ID;
  LIBLTE_S1AP_LPPA_PDU_STRUCT                                  LPPa_PDU;
}LIBLTE_S1AP_MESSAGE_DOWNLINKUEASSOCIATEDLPPATRANSPORT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_downlinkueassociatedlppatransport(
  LIBLTE_S1AP_MESSAGE_DOWNLINKUEASSOCIATEDLPPATRANSPORT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_downlinkueassociatedlppatransport(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_DOWNLINKUEASSOCIATEDLPPATRANSPORT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message UplinkUEAssociatedLPPaTransport STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_ROUTING_ID_STRUCT                                Routing_ID;
  LIBLTE_S1AP_LPPA_PDU_STRUCT                                  LPPa_PDU;
}LIBLTE_S1AP_MESSAGE_UPLINKUEASSOCIATEDLPPATRANSPORT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uplinkueassociatedlppatransport(
  LIBLTE_S1AP_MESSAGE_UPLINKUEASSOCIATEDLPPATRANSPORT_STRUCT   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uplinkueassociatedlppatransport(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UPLINKUEASSOCIATEDLPPATRANSPORT_STRUCT   *ie);

/*******************************************************************************
/* Protocol Message DownlinkNonUEAssociatedLPPaTransport STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_ROUTING_ID_STRUCT                                Routing_ID;
  LIBLTE_S1AP_LPPA_PDU_STRUCT                                  LPPa_PDU;
}LIBLTE_S1AP_MESSAGE_DOWNLINKNONUEASSOCIATEDLPPATRANSPORT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_downlinknonueassociatedlppatransport(
  LIBLTE_S1AP_MESSAGE_DOWNLINKNONUEASSOCIATEDLPPATRANSPORT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_downlinknonueassociatedlppatransport(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_DOWNLINKNONUEASSOCIATEDLPPATRANSPORT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message UplinkNonUEAssociatedLPPaTransport STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_ROUTING_ID_STRUCT                                Routing_ID;
  LIBLTE_S1AP_LPPA_PDU_STRUCT                                  LPPa_PDU;
}LIBLTE_S1AP_MESSAGE_UPLINKNONUEASSOCIATEDLPPATRANSPORT_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_uplinknonueassociatedlppatransport(
  LIBLTE_S1AP_MESSAGE_UPLINKNONUEASSOCIATEDLPPATRANSPORT_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_uplinknonueassociatedlppatransport(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_UPLINKNONUEASSOCIATEDLPPATRANSPORT_STRUCT *ie);

/*******************************************************************************
/* Protocol Message ENBDirectInformationTransfer STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_INTER_SYSTEMINFORMATIONTRANSFERTYPE_STRUCT       Inter_SystemInformationTransferTypeEDT;
}LIBLTE_S1AP_MESSAGE_ENBDIRECTINFORMATIONTRANSFER_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_enbdirectinformationtransfer(
  LIBLTE_S1AP_MESSAGE_ENBDIRECTINFORMATIONTRANSFER_STRUCT      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_enbdirectinformationtransfer(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_ENBDIRECTINFORMATIONTRANSFER_STRUCT      *ie);

/*******************************************************************************
/* Protocol Message E_RABDataForwardingItem STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABDATAFORWARDINGITEM_STRUCT                   E_RABDataForwardingItem;
}LIBLTE_S1AP_MESSAGE_E_RABDATAFORWARDINGITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabdataforwardingitem(
  LIBLTE_S1AP_MESSAGE_E_RABDATAFORWARDINGITEM_STRUCT           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabdataforwardingitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABDATAFORWARDINGITEM_STRUCT           *ie);

/*******************************************************************************
/* Protocol Message E_RABToBeSetupItemHOReq STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABTOBESETUPITEMHOREQ_STRUCT                   E_RABToBeSetupItemHOReq;
}LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMHOREQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobesetupitemhoreq(
  LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMHOREQ_STRUCT           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobesetupitemhoreq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMHOREQ_STRUCT           *ie);

/*******************************************************************************
/* Protocol Message E_RABAdmittedItem STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABADMITTEDITEM_STRUCT                         E_RABAdmittedItem;
}LIBLTE_S1AP_MESSAGE_E_RABADMITTEDITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabadmitteditem(
  LIBLTE_S1AP_MESSAGE_E_RABADMITTEDITEM_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabadmitteditem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABADMITTEDITEM_STRUCT                 *ie);

/*******************************************************************************
/* Protocol Message E_RABFailedtoSetupItemHOReqAck STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABFAILEDTOSETUPITEMHOREQACK_STRUCT            E_RABFailedtoSetupItemHOReqAck;
}LIBLTE_S1AP_MESSAGE_E_RABFAILEDTOSETUPITEMHOREQACK_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabfailedtosetupitemhoreqack(
  LIBLTE_S1AP_MESSAGE_E_RABFAILEDTOSETUPITEMHOREQACK_STRUCT    *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabfailedtosetupitemhoreqack(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABFAILEDTOSETUPITEMHOREQACK_STRUCT    *ie);

/*******************************************************************************
/* Protocol Message E_RABToBeSwitchedDLItem STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABTOBESWITCHEDDLITEM_STRUCT                   E_RABToBeSwitchedDLItem;
}LIBLTE_S1AP_MESSAGE_E_RABTOBESWITCHEDDLITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobeswitcheddlitem(
  LIBLTE_S1AP_MESSAGE_E_RABTOBESWITCHEDDLITEM_STRUCT           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobeswitcheddlitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABTOBESWITCHEDDLITEM_STRUCT           *ie);

/*******************************************************************************
/* Protocol Message E_RABToBeSwitchedULItem STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABTOBESWITCHEDULITEM_STRUCT                   E_RABToBeSwitchedULItem;
}LIBLTE_S1AP_MESSAGE_E_RABTOBESWITCHEDULITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobeswitchedulitem(
  LIBLTE_S1AP_MESSAGE_E_RABTOBESWITCHEDULITEM_STRUCT           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobeswitchedulitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABTOBESWITCHEDULITEM_STRUCT           *ie);

/*******************************************************************************
/* Protocol Message E_RABToBeSetupItemBearerSUReq STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABTOBESETUPITEMBEARERSUREQ_STRUCT             E_RABToBeSetupItemBearerSUReq;
}LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMBEARERSUREQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobesetupitembearersureq(
  LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMBEARERSUREQ_STRUCT     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobesetupitembearersureq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMBEARERSUREQ_STRUCT     *ie);

/*******************************************************************************
/* Protocol Message E_RABSetupItemBearerSURes STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABSETUPITEMBEARERSURES_STRUCT                 E_RABSetupItemBearerSURes;
}LIBLTE_S1AP_MESSAGE_E_RABSETUPITEMBEARERSURES_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabsetupitembearersures(
  LIBLTE_S1AP_MESSAGE_E_RABSETUPITEMBEARERSURES_STRUCT         *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabsetupitembearersures(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABSETUPITEMBEARERSURES_STRUCT         *ie);

/*******************************************************************************
/* Protocol Message E_RABToBeModifiedItemBearerModReq STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABTOBEMODIFIEDITEMBEARERMODREQ_STRUCT         E_RABToBeModifiedItemBearerModReq;
}LIBLTE_S1AP_MESSAGE_E_RABTOBEMODIFIEDITEMBEARERMODREQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobemodifieditembearermodreq(
  LIBLTE_S1AP_MESSAGE_E_RABTOBEMODIFIEDITEMBEARERMODREQ_STRUCT *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobemodifieditembearermodreq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABTOBEMODIFIEDITEMBEARERMODREQ_STRUCT *ie);

/*******************************************************************************
/* Protocol Message E_RABModifyItemBearerModRes STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABMODIFYITEMBEARERMODRES_STRUCT               E_RABModifyItemBearerModRes;
}LIBLTE_S1AP_MESSAGE_E_RABMODIFYITEMBEARERMODRES_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabmodifyitembearermodres(
  LIBLTE_S1AP_MESSAGE_E_RABMODIFYITEMBEARERMODRES_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabmodifyitembearermodres(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABMODIFYITEMBEARERMODRES_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message E_RABReleaseItemBearerRelComp STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABRELEASEITEMBEARERRELCOMP_STRUCT             E_RABReleaseItemBearerRelComp;
}LIBLTE_S1AP_MESSAGE_E_RABRELEASEITEMBEARERRELCOMP_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabreleaseitembearerrelcomp(
  LIBLTE_S1AP_MESSAGE_E_RABRELEASEITEMBEARERRELCOMP_STRUCT     *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabreleaseitembearerrelcomp(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABRELEASEITEMBEARERRELCOMP_STRUCT     *ie);

/*******************************************************************************
/* Protocol Message E_RABToBeSetupItemCtxtSUReq STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABTOBESETUPITEMCTXTSUREQ_STRUCT               E_RABToBeSetupItemCtxtSUReq;
}LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMCTXTSUREQ_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabtobesetupitemctxtsureq(
  LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMCTXTSUREQ_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabtobesetupitemctxtsureq(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABTOBESETUPITEMCTXTSUREQ_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message E_RABSetupItemCtxtSURes STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_E_RABSETUPITEMCTXTSURES_STRUCT                   E_RABSetupItemCtxtSURes;
}LIBLTE_S1AP_MESSAGE_E_RABSETUPITEMCTXTSURES_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabsetupitemctxtsures(
  LIBLTE_S1AP_MESSAGE_E_RABSETUPITEMCTXTSURES_STRUCT           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabsetupitemctxtsures(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABSETUPITEMCTXTSURES_STRUCT           *ie);

/*******************************************************************************
/* Protocol Message TAIItem STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_TAIITEM_STRUCT                                   TAIItem;
}LIBLTE_S1AP_MESSAGE_TAIITEM_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_taiitem(
  LIBLTE_S1AP_MESSAGE_TAIITEM_STRUCT                           *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_taiitem(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_TAIITEM_STRUCT                           *ie);

/*******************************************************************************
/* Protocol Message ResetAcknowledge STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_UE_ASSOCIATEDLOGICALS1_CONNECTIONLISTRESACK_STRUCT UE_associatedLogicalS1_ConnectionListResAck;
  bool                                                         UE_associatedLogicalS1_ConnectionListResAck_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_RESETACKNOWLEDGE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_resetacknowledge(
  LIBLTE_S1AP_MESSAGE_RESETACKNOWLEDGE_STRUCT                  *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_resetacknowledge(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_RESETACKNOWLEDGE_STRUCT                  *ie);

/*******************************************************************************
/* Protocol Message Reset STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  LIBLTE_S1AP_RESETTYPE_STRUCT                                 ResetType;
}LIBLTE_S1AP_MESSAGE_RESET_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_reset(
  LIBLTE_S1AP_MESSAGE_RESET_STRUCT                             *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_reset(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_RESET_STRUCT                             *ie);

/*******************************************************************************
/* Protocol Message DownlinkS1cdma2000tunneling STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_E_RABSUBJECTTODATAFORWARDINGLIST_STRUCT          E_RABSubjecttoDataForwardingList;
  bool                                                         E_RABSubjecttoDataForwardingList_present;
  LIBLTE_S1AP_CDMA2000HOSTATUS_ENUM_EXT                        cdma2000HOStatus;
  bool                                                         cdma2000HOStatus_present;
  LIBLTE_S1AP_CDMA2000RATTYPE_ENUM_EXT                         cdma2000RATType;
  LIBLTE_S1AP_CDMA2000PDU_STRUCT                               cdma2000PDU;
}LIBLTE_S1AP_MESSAGE_DOWNLINKS1CDMA2000TUNNELING_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_downlinks1cdma2000tunneling(
  LIBLTE_S1AP_MESSAGE_DOWNLINKS1CDMA2000TUNNELING_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_downlinks1cdma2000tunneling(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_DOWNLINKS1CDMA2000TUNNELING_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message HandoverCommand STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_HANDOVERTYPE_ENUM_EXT                            HandoverType;
  LIBLTE_S1AP_NASSECURITYPARAMETERSFROME_UTRAN_STRUCT          NASSecurityParametersfromE_UTRAN;
  bool                                                         NASSecurityParametersfromE_UTRAN_present;
  LIBLTE_S1AP_E_RABSUBJECTTODATAFORWARDINGLIST_STRUCT          E_RABSubjecttoDataForwardingList;
  bool                                                         E_RABSubjecttoDataForwardingList_present;
  LIBLTE_S1AP_E_RABLIST_STRUCT                                 E_RABtoReleaseListHOCmd;
  bool                                                         E_RABtoReleaseListHOCmd_present;
  LIBLTE_S1AP_TARGET_TOSOURCE_TRANSPARENTCONTAINER_STRUCT      Target_ToSource_TransparentContainer;
  LIBLTE_S1AP_TARGET_TOSOURCE_TRANSPARENTCONTAINER_STRUCT      Target_ToSource_TransparentContainer_Secondary;
  bool                                                         Target_ToSource_TransparentContainer_Secondary_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_HANDOVERCOMMAND_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_handovercommand(
  LIBLTE_S1AP_MESSAGE_HANDOVERCOMMAND_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_handovercommand(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_HANDOVERCOMMAND_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Message HandoverRequest STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_HANDOVERTYPE_ENUM_EXT                            HandoverType;
  LIBLTE_S1AP_CAUSE_STRUCT                                     Cause;
  LIBLTE_S1AP_UEAGGREGATEMAXIMUMBITRATE_STRUCT                 uEaggregateMaximumBitrate;
  LIBLTE_S1AP_E_RABTOBESETUPLISTHOREQ_STRUCT                   E_RABToBeSetupListHOReq;
  LIBLTE_S1AP_SOURCE_TOTARGET_TRANSPARENTCONTAINER_STRUCT      Source_ToTarget_TransparentContainer;
  LIBLTE_S1AP_UESECURITYCAPABILITIES_STRUCT                    UESecurityCapabilities;
  LIBLTE_S1AP_HANDOVERRESTRICTIONLIST_STRUCT                   HandoverRestrictionList;
  bool                                                         HandoverRestrictionList_present;
  LIBLTE_S1AP_TRACEACTIVATION_STRUCT                           TraceActivation;
  bool                                                         TraceActivation_present;
  LIBLTE_S1AP_REQUESTTYPE_STRUCT                               RequestType;
  bool                                                         RequestType_present;
  LIBLTE_S1AP_SRVCCOPERATIONPOSSIBLE_ENUM_EXT                  SRVCCOperationPossible;
  bool                                                         SRVCCOperationPossible_present;
  LIBLTE_S1AP_SECURITYCONTEXT_STRUCT                           SecurityContext;
  LIBLTE_S1AP_NASSECURITYPARAMETERSTOE_UTRAN_STRUCT            NASSecurityParameterstoE_UTRAN;
  bool                                                         NASSecurityParameterstoE_UTRAN_present;
  LIBLTE_S1AP_CSG_ID_STRUCT                                    CSG_Id;
  bool                                                         CSG_Id_present;
  LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_ENUM                         CSGMembershipStatus;
  bool                                                         CSGMembershipStatus_present;
  LIBLTE_S1AP_GUMMEI_STRUCT                                    GUMMEI_ID;
  bool                                                         GUMMEI_ID_present;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID_2;
  bool                                                         MME_UE_S1AP_ID_2_present;
  LIBLTE_S1AP_MANAGEMENTBASEDMDTALLOWED_ENUM_EXT               ManagementBasedMDTAllowed;
  bool                                                         ManagementBasedMDTAllowed_present;
  LIBLTE_S1AP_MDTPLMNLIST_STRUCT                               ManagementBasedMDTPLMNList;
  bool                                                         ManagementBasedMDTPLMNList_present;
}LIBLTE_S1AP_MESSAGE_HANDOVERREQUEST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_handoverrequest(
  LIBLTE_S1AP_MESSAGE_HANDOVERREQUEST_STRUCT                   *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_handoverrequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_HANDOVERREQUEST_STRUCT                   *ie);

/*******************************************************************************
/* Protocol Message PathSwitchRequest STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_E_RABTOBESWITCHEDDLLIST_STRUCT                   E_RABToBeSwitchedDLList;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            SourceMME_UE_S1AP_ID;
  LIBLTE_S1AP_EUTRAN_CGI_STRUCT                                EUTRAN_CGI;
  LIBLTE_S1AP_TAI_STRUCT                                       TAI;
  LIBLTE_S1AP_UESECURITYCAPABILITIES_STRUCT                    UESecurityCapabilities;
  LIBLTE_S1AP_CSG_ID_STRUCT                                    CSG_Id;
  bool                                                         CSG_Id_present;
  LIBLTE_S1AP_CELLACCESSMODE_ENUM_EXT                          CellAccessMode;
  bool                                                         CellAccessMode_present;
  LIBLTE_S1AP_GUMMEI_STRUCT                                    SourceMME_GUMMEI;
  bool                                                         SourceMME_GUMMEI_present;
  LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_ENUM                         CSGMembershipStatus;
  bool                                                         CSGMembershipStatus_present;
  LIBLTE_S1AP_TUNNELINFORMATION_STRUCT                         Tunnel_Information_for_BBF;
  bool                                                         Tunnel_Information_for_BBF_present;
  LIBLTE_S1AP_LHN_ID_STRUCT                                    LHN_ID;
  bool                                                         LHN_ID_present;
}LIBLTE_S1AP_MESSAGE_PATHSWITCHREQUEST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_pathswitchrequest(
  LIBLTE_S1AP_MESSAGE_PATHSWITCHREQUEST_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_pathswitchrequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_PATHSWITCHREQUEST_STRUCT                 *ie);

/*******************************************************************************
/* Protocol Message PathSwitchRequestAcknowledge STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_UEAGGREGATEMAXIMUMBITRATE_STRUCT                 uEaggregateMaximumBitrate;
  bool                                                         uEaggregateMaximumBitrate_present;
  LIBLTE_S1AP_E_RABTOBESWITCHEDULLIST_STRUCT                   E_RABToBeSwitchedULList;
  bool                                                         E_RABToBeSwitchedULList_present;
  LIBLTE_S1AP_E_RABLIST_STRUCT                                 E_RABToBeReleasedList;
  bool                                                         E_RABToBeReleasedList_present;
  LIBLTE_S1AP_SECURITYCONTEXT_STRUCT                           SecurityContext;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID_2;
  bool                                                         MME_UE_S1AP_ID_2_present;
  LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_ENUM                         CSGMembershipStatus;
  bool                                                         CSGMembershipStatus_present;
}LIBLTE_S1AP_MESSAGE_PATHSWITCHREQUESTACKNOWLEDGE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_pathswitchrequestacknowledge(
  LIBLTE_S1AP_MESSAGE_PATHSWITCHREQUESTACKNOWLEDGE_STRUCT      *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_pathswitchrequestacknowledge(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_PATHSWITCHREQUESTACKNOWLEDGE_STRUCT      *ie);

/*******************************************************************************
/* Protocol Message E_RABSetupRequest STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_UEAGGREGATEMAXIMUMBITRATE_STRUCT                 uEaggregateMaximumBitrate;
  bool                                                         uEaggregateMaximumBitrate_present;
  LIBLTE_S1AP_E_RABTOBESETUPLISTBEARERSUREQ_STRUCT             E_RABToBeSetupListBearerSUReq;
}LIBLTE_S1AP_MESSAGE_E_RABSETUPREQUEST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabsetuprequest(
  LIBLTE_S1AP_MESSAGE_E_RABSETUPREQUEST_STRUCT                 *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabsetuprequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABSETUPREQUEST_STRUCT                 *ie);

/*******************************************************************************
/* Protocol Message E_RABSetupResponse STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_E_RABSETUPLISTBEARERSURES_STRUCT                 E_RABSetupListBearerSURes;
  bool                                                         E_RABSetupListBearerSURes_present;
  LIBLTE_S1AP_E_RABLIST_STRUCT                                 E_RABFailedToSetupListBearerSURes;
  bool                                                         E_RABFailedToSetupListBearerSURes_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_E_RABSETUPRESPONSE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabsetupresponse(
  LIBLTE_S1AP_MESSAGE_E_RABSETUPRESPONSE_STRUCT                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabsetupresponse(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABSETUPRESPONSE_STRUCT                *ie);

/*******************************************************************************
/* Protocol Message E_RABModifyRequest STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_UEAGGREGATEMAXIMUMBITRATE_STRUCT                 uEaggregateMaximumBitrate;
  bool                                                         uEaggregateMaximumBitrate_present;
  LIBLTE_S1AP_E_RABTOBEMODIFIEDLISTBEARERMODREQ_STRUCT         E_RABToBeModifiedListBearerModReq;
}LIBLTE_S1AP_MESSAGE_E_RABMODIFYREQUEST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabmodifyrequest(
  LIBLTE_S1AP_MESSAGE_E_RABMODIFYREQUEST_STRUCT                *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabmodifyrequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABMODIFYREQUEST_STRUCT                *ie);

/*******************************************************************************
/* Protocol Message E_RABModifyResponse STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_E_RABMODIFYLISTBEARERMODRES_STRUCT               E_RABModifyListBearerModRes;
  bool                                                         E_RABModifyListBearerModRes_present;
  LIBLTE_S1AP_E_RABLIST_STRUCT                                 E_RABFailedToModifyList;
  bool                                                         E_RABFailedToModifyList_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_E_RABMODIFYRESPONSE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabmodifyresponse(
  LIBLTE_S1AP_MESSAGE_E_RABMODIFYRESPONSE_STRUCT               *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabmodifyresponse(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABMODIFYRESPONSE_STRUCT               *ie);

/*******************************************************************************
/* Protocol Message E_RABReleaseResponse STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_E_RABRELEASELISTBEARERRELCOMP_STRUCT             E_RABReleaseListBearerRelComp;
  bool                                                         E_RABReleaseListBearerRelComp_present;
  LIBLTE_S1AP_E_RABLIST_STRUCT                                 E_RABFailedToReleaseList;
  bool                                                         E_RABFailedToReleaseList_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
  LIBLTE_S1AP_USERLOCATIONINFORMATION_STRUCT                   UserLocationInformation;
  bool                                                         UserLocationInformation_present;
}LIBLTE_S1AP_MESSAGE_E_RABRELEASERESPONSE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_e_rabreleaseresponse(
  LIBLTE_S1AP_MESSAGE_E_RABRELEASERESPONSE_STRUCT              *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_e_rabreleaseresponse(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_E_RABRELEASERESPONSE_STRUCT              *ie);

/*******************************************************************************
/* Protocol Message InitialContextSetupRequest STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_UEAGGREGATEMAXIMUMBITRATE_STRUCT                 uEaggregateMaximumBitrate;
  LIBLTE_S1AP_E_RABTOBESETUPLISTCTXTSUREQ_STRUCT               E_RABToBeSetupListCtxtSUReq;
  LIBLTE_S1AP_UESECURITYCAPABILITIES_STRUCT                    UESecurityCapabilities;
  LIBLTE_S1AP_SECURITYKEY_STRUCT                               SecurityKey;
  LIBLTE_S1AP_TRACEACTIVATION_STRUCT                           TraceActivation;
  bool                                                         TraceActivation_present;
  LIBLTE_S1AP_HANDOVERRESTRICTIONLIST_STRUCT                   HandoverRestrictionList;
  bool                                                         HandoverRestrictionList_present;
  LIBLTE_S1AP_UERADIOCAPABILITY_STRUCT                         UERadioCapability;
  bool                                                         UERadioCapability_present;
  LIBLTE_S1AP_SUBSCRIBERPROFILEIDFORRFP_STRUCT                 SubscriberProfileIDforRFP;
  bool                                                         SubscriberProfileIDforRFP_present;
  LIBLTE_S1AP_CSFALLBACKINDICATOR_ENUM_EXT                     CSFallbackIndicator;
  bool                                                         CSFallbackIndicator_present;
  LIBLTE_S1AP_SRVCCOPERATIONPOSSIBLE_ENUM_EXT                  SRVCCOperationPossible;
  bool                                                         SRVCCOperationPossible_present;
  LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_ENUM                         CSGMembershipStatus;
  bool                                                         CSGMembershipStatus_present;
  LIBLTE_S1AP_LAI_STRUCT                                       RegisteredLAI;
  bool                                                         RegisteredLAI_present;
  LIBLTE_S1AP_GUMMEI_STRUCT                                    GUMMEI_ID;
  bool                                                         GUMMEI_ID_present;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID_2;
  bool                                                         MME_UE_S1AP_ID_2_present;
  LIBLTE_S1AP_MANAGEMENTBASEDMDTALLOWED_ENUM_EXT               ManagementBasedMDTAllowed;
  bool                                                         ManagementBasedMDTAllowed_present;
  LIBLTE_S1AP_MDTPLMNLIST_STRUCT                               ManagementBasedMDTPLMNList;
  bool                                                         ManagementBasedMDTPLMNList_present;
  LIBLTE_S1AP_ADDITIONALCSFALLBACKINDICATOR_ENUM_EXT           AdditionalCSFallbackIndicator;
  bool                                                         AdditionalCSFallbackIndicator_present;
}LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPREQUEST_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_initialcontextsetuprequest(
  LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPREQUEST_STRUCT        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_initialcontextsetuprequest(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPREQUEST_STRUCT        *ie);

/*******************************************************************************
/* Protocol Message InitialContextSetupResponse STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_E_RABSETUPLISTCTXTSURES_STRUCT                   E_RABSetupListCtxtSURes;
  LIBLTE_S1AP_E_RABLIST_STRUCT                                 E_RABFailedToSetupListCtxtSURes;
  bool                                                         E_RABFailedToSetupListCtxtSURes_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
}LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPRESPONSE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_initialcontextsetupresponse(
  LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPRESPONSE_STRUCT       *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_initialcontextsetupresponse(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPRESPONSE_STRUCT       *ie);

/*******************************************************************************
/* Protocol Message Paging STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_UEIDENTITYINDEXVALUE_STRUCT                      UEIdentityIndexValue;
  LIBLTE_S1AP_UEPAGINGID_STRUCT                                UEPagingID;
  LIBLTE_S1AP_PAGINGDRX_ENUM_EXT                               pagingDRX;
  bool                                                         pagingDRX_present;
  LIBLTE_S1AP_CNDOMAIN_ENUM                                    CNDomain;
  LIBLTE_S1AP_TAILIST_STRUCT                                   TAIList;
  LIBLTE_S1AP_CSG_IDLIST_STRUCT                                CSG_IdList;
  bool                                                         CSG_IdList_present;
  LIBLTE_S1AP_PAGINGPRIORITY_ENUM_EXT                          PagingPriority;
  bool                                                         PagingPriority_present;
}LIBLTE_S1AP_MESSAGE_PAGING_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_paging(
  LIBLTE_S1AP_MESSAGE_PAGING_STRUCT                            *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_paging(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_PAGING_STRUCT                            *ie);

/*******************************************************************************
/* Protocol Message HandoverRequestAcknowledge STRUCT
********************************************************************************/
typedef struct{
  bool                                                         ext;
  LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT                            MME_UE_S1AP_ID;
  LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT                            eNB_UE_S1AP_ID;
  LIBLTE_S1AP_E_RABADMITTEDLIST_STRUCT                         E_RABAdmittedList;
  LIBLTE_S1AP_E_RABFAILEDTOSETUPLISTHOREQACK_STRUCT            E_RABFailedToSetupListHOReqAck;
  bool                                                         E_RABFailedToSetupListHOReqAck_present;
  LIBLTE_S1AP_TARGET_TOSOURCE_TRANSPARENTCONTAINER_STRUCT      Target_ToSource_TransparentContainer;
  LIBLTE_S1AP_CSG_ID_STRUCT                                    CSG_Id;
  bool                                                         CSG_Id_present;
  LIBLTE_S1AP_CRITICALITYDIAGNOSTICS_STRUCT                    CriticalityDiagnostics;
  bool                                                         CriticalityDiagnostics_present;
  LIBLTE_S1AP_CELLACCESSMODE_ENUM_EXT                          CellAccessMode;
  bool                                                         CellAccessMode_present;
}LIBLTE_S1AP_MESSAGE_HANDOVERREQUESTACKNOWLEDGE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_handoverrequestacknowledge(
  LIBLTE_S1AP_MESSAGE_HANDOVERREQUESTACKNOWLEDGE_STRUCT        *ie,
  uint8_t                                                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_handoverrequestacknowledge(
  uint8_t                                                     **ptr,
  LIBLTE_S1AP_MESSAGE_HANDOVERREQUESTACKNOWLEDGE_STRUCT        *ie);

/*******************************************************************************
/* Procedure code criticality lookups
********************************************************************************/
static const LIBLTE_S1AP_CRITICALITY_ENUM liblte_s1ap_procedure_criticality[50] = {
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
  LIBLTE_S1AP_CRITICALITY_REJECT,
  LIBLTE_S1AP_CRITICALITY_IGNORE,
};

/*******************************************************************************
/* ProtocolIE-Field
********************************************************************************/
LIBLTE_ERROR_ENUM liblte_s1ap_pack_protocolie_header(
  uint32_t                      len,
  uint32_t                      ie_id,
  LIBLTE_S1AP_CRITICALITY_ENUM  crit,
  uint8_t                     **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_protocolie_header(
  uint8_t                     **ptr,
  uint32_t                     *ie_id,
  LIBLTE_S1AP_CRITICALITY_ENUM *crit,
  uint32_t                     *len);

/*******************************************************************************
/* InitiatingMessage CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_LOCATIONREPORTINGCONTROL,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_DOWNLINKS1CDMA2000TUNNELING,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_S1SETUPREQUEST,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_UECAPABILITYINFOINDICATION,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_LOCATIONREPORT,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_UPLINKNONUEASSOCIATEDLPPATRANSPORT,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_UPLINKS1CDMA2000TUNNELING,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_MMECONFIGURATIONTRANSFER,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_TRACESTART,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_HANDOVERCANCEL,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_UERADIOCAPABILITYMATCHREQUEST,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_DOWNLINKNASTRANSPORT,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_INITIALCONTEXTSETUPREQUEST,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_HANDOVERREQUIRED,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_MMEDIRECTINFORMATIONTRANSFER,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_TRACEFAILUREINDICATION,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_MMECONFIGURATIONUPDATE,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_WRITEREPLACEWARNINGREQUEST,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_ENBDIRECTINFORMATIONTRANSFER,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_DOWNLINKUEASSOCIATEDLPPATRANSPORT,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_E_RABRELEASECOMMAND,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_NASNONDELIVERYINDICATION,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_ENBCONFIGURATIONUPDATE,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_UPLINKUEASSOCIATEDLPPATRANSPORT,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_INITIALUEMESSAGE,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_E_RABMODIFYREQUEST,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_UECONTEXTMODIFICATIONREQUEST,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_E_RABSETUPREQUEST,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_RESET,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_OVERLOADSTART,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_E_RABRELEASEINDICATION,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_LOCATIONREPORTINGFAILUREINDICATION,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_DEACTIVATETRACE,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_PATHSWITCHREQUEST,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_HANDOVERREQUEST,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_DOWNLINKNONUEASSOCIATEDLPPATRANSPORT,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_OVERLOADSTOP,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_PAGING,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_HANDOVERNOTIFY,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_PWSRESTARTINDICATION,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_UECONTEXTRELEASEREQUEST,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_UPLINKNASTRANSPORT,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_ENBCONFIGURATIONTRANSFER,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_MMESTATUSTRANSFER,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_CELLTRAFFICTRACE,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_UECONTEXTRELEASECOMMAND,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_KILLREQUEST,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_PRIVATEMESSAGE,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_ENBSTATUSTRANSFER,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_ERRORINDICATION,
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_N_ITEMS,
}LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_ENUM;
static const char liblte_s1ap_initiatingmessage_choice_text[LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_N_ITEMS][50] = {
  "LocationReportingControl",
  "DownlinkS1cdma2000tunneling",
  "S1SetupRequest",
  "UECapabilityInfoIndication",
  "LocationReport",
  "UplinkNonUEAssociatedLPPaTransport",
  "UplinkS1cdma2000tunneling",
  "MMEConfigurationTransfer",
  "TraceStart",
  "HandoverCancel",
  "UERadioCapabilityMatchRequest",
  "DownlinkNASTransport",
  "InitialContextSetupRequest",
  "HandoverRequired",
  "MMEDirectInformationTransfer",
  "TraceFailureIndication",
  "MMEConfigurationUpdate",
  "WriteReplaceWarningRequest",
  "ENBDirectInformationTransfer",
  "DownlinkUEAssociatedLPPaTransport",
  "E-RABReleaseCommand",
  "NASNonDeliveryIndication",
  "ENBConfigurationUpdate",
  "UplinkUEAssociatedLPPaTransport",
  "InitialUEMessage",
  "E-RABModifyRequest",
  "UEContextModificationRequest",
  "E-RABSetupRequest",
  "Reset",
  "OverloadStart",
  "E-RABReleaseIndication",
  "LocationReportingFailureIndication",
  "DeactivateTrace",
  "PathSwitchRequest",
  "HandoverRequest",
  "DownlinkNonUEAssociatedLPPaTransport",
  "OverloadStop",
  "Paging",
  "HandoverNotify",
  "PWSRestartIndication",
  "UEContextReleaseRequest",
  "UplinkNASTransport",
  "ENBConfigurationTransfer",
  "MMEStatusTransfer",
  "CellTrafficTrace",
  "UEContextReleaseCommand",
  "KillRequest",
  "PrivateMessage",
  "ENBStatusTransfer",
  "ErrorIndication",
};

typedef union{
  LIBLTE_S1AP_MESSAGE_LOCATIONREPORTINGCONTROL_STRUCT                 LocationReportingControl;
  LIBLTE_S1AP_MESSAGE_DOWNLINKS1CDMA2000TUNNELING_STRUCT              DownlinkS1cdma2000tunneling;
  LIBLTE_S1AP_MESSAGE_S1SETUPREQUEST_STRUCT                           S1SetupRequest;
  LIBLTE_S1AP_MESSAGE_UECAPABILITYINFOINDICATION_STRUCT               UECapabilityInfoIndication;
  LIBLTE_S1AP_MESSAGE_LOCATIONREPORT_STRUCT                           LocationReport;
  LIBLTE_S1AP_MESSAGE_UPLINKNONUEASSOCIATEDLPPATRANSPORT_STRUCT       UplinkNonUEAssociatedLPPaTransport;
  LIBLTE_S1AP_MESSAGE_UPLINKS1CDMA2000TUNNELING_STRUCT                UplinkS1cdma2000tunneling;
  LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONTRANSFER_STRUCT                 MMEConfigurationTransfer;
  LIBLTE_S1AP_MESSAGE_TRACESTART_STRUCT                               TraceStart;
  LIBLTE_S1AP_MESSAGE_HANDOVERCANCEL_STRUCT                           HandoverCancel;
  LIBLTE_S1AP_MESSAGE_UERADIOCAPABILITYMATCHREQUEST_STRUCT            UERadioCapabilityMatchRequest;
  LIBLTE_S1AP_MESSAGE_DOWNLINKNASTRANSPORT_STRUCT                     DownlinkNASTransport;
  LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPREQUEST_STRUCT               InitialContextSetupRequest;
  LIBLTE_S1AP_MESSAGE_HANDOVERREQUIRED_STRUCT                         HandoverRequired;
  LIBLTE_S1AP_MESSAGE_MMEDIRECTINFORMATIONTRANSFER_STRUCT             MMEDirectInformationTransfer;
  LIBLTE_S1AP_MESSAGE_TRACEFAILUREINDICATION_STRUCT                   TraceFailureIndication;
  LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATE_STRUCT                   MMEConfigurationUpdate;
  LIBLTE_S1AP_MESSAGE_WRITEREPLACEWARNINGREQUEST_STRUCT               WriteReplaceWarningRequest;
  LIBLTE_S1AP_MESSAGE_ENBDIRECTINFORMATIONTRANSFER_STRUCT             ENBDirectInformationTransfer;
  LIBLTE_S1AP_MESSAGE_DOWNLINKUEASSOCIATEDLPPATRANSPORT_STRUCT        DownlinkUEAssociatedLPPaTransport;
  LIBLTE_S1AP_MESSAGE_E_RABRELEASECOMMAND_STRUCT                      E_RABReleaseCommand;
  LIBLTE_S1AP_MESSAGE_NASNONDELIVERYINDICATION_STRUCT                 NASNonDeliveryIndication;
  LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONUPDATE_STRUCT                   ENBConfigurationUpdate;
  LIBLTE_S1AP_MESSAGE_UPLINKUEASSOCIATEDLPPATRANSPORT_STRUCT          UplinkUEAssociatedLPPaTransport;
  LIBLTE_S1AP_MESSAGE_INITIALUEMESSAGE_STRUCT                         InitialUEMessage;
  LIBLTE_S1AP_MESSAGE_E_RABMODIFYREQUEST_STRUCT                       E_RABModifyRequest;
  LIBLTE_S1AP_MESSAGE_UECONTEXTMODIFICATIONREQUEST_STRUCT             UEContextModificationRequest;
  LIBLTE_S1AP_MESSAGE_E_RABSETUPREQUEST_STRUCT                        E_RABSetupRequest;
  LIBLTE_S1AP_MESSAGE_RESET_STRUCT                                    Reset;
  LIBLTE_S1AP_MESSAGE_OVERLOADSTART_STRUCT                            OverloadStart;
  LIBLTE_S1AP_MESSAGE_E_RABRELEASEINDICATION_STRUCT                   E_RABReleaseIndication;
  LIBLTE_S1AP_MESSAGE_LOCATIONREPORTINGFAILUREINDICATION_STRUCT       LocationReportingFailureIndication;
  LIBLTE_S1AP_MESSAGE_DEACTIVATETRACE_STRUCT                          DeactivateTrace;
  LIBLTE_S1AP_MESSAGE_PATHSWITCHREQUEST_STRUCT                        PathSwitchRequest;
  LIBLTE_S1AP_MESSAGE_HANDOVERREQUEST_STRUCT                          HandoverRequest;
  LIBLTE_S1AP_MESSAGE_DOWNLINKNONUEASSOCIATEDLPPATRANSPORT_STRUCT     DownlinkNonUEAssociatedLPPaTransport;
  LIBLTE_S1AP_MESSAGE_OVERLOADSTOP_STRUCT                             OverloadStop;
  LIBLTE_S1AP_MESSAGE_PAGING_STRUCT                                   Paging;
  LIBLTE_S1AP_MESSAGE_HANDOVERNOTIFY_STRUCT                           HandoverNotify;
  LIBLTE_S1AP_MESSAGE_PWSRESTARTINDICATION_STRUCT                     PWSRestartIndication;
  LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASEREQUEST_STRUCT                  UEContextReleaseRequest;
  LIBLTE_S1AP_MESSAGE_UPLINKNASTRANSPORT_STRUCT                       UplinkNASTransport;
  LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONTRANSFER_STRUCT                 ENBConfigurationTransfer;
  LIBLTE_S1AP_MESSAGE_MMESTATUSTRANSFER_STRUCT                        MMEStatusTransfer;
  LIBLTE_S1AP_MESSAGE_CELLTRAFFICTRACE_STRUCT                         CellTrafficTrace;
  LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASECOMMAND_STRUCT                  UEContextReleaseCommand;
  LIBLTE_S1AP_MESSAGE_KILLREQUEST_STRUCT                              KillRequest;
  LIBLTE_S1AP_MESSAGE_PRIVATEMESSAGE_STRUCT                           PrivateMessage;
  LIBLTE_S1AP_MESSAGE_ENBSTATUSTRANSFER_STRUCT                        ENBStatusTransfer;
  LIBLTE_S1AP_MESSAGE_ERRORINDICATION_STRUCT                          ErrorIndication;
}LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_UNION;

typedef struct{
  uint8_t                                               procedureCode;
  LIBLTE_S1AP_CRITICALITY_ENUM                          criticality;
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_UNION            choice;
  LIBLTE_S1AP_INITIATINGMESSAGE_CHOICE_ENUM             choice_type;
}LIBLTE_S1AP_INITIATINGMESSAGE_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_initiatingmessage(
  LIBLTE_S1AP_INITIATINGMESSAGE_STRUCT *msg,
  uint8_t                             **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_initiatingmessage(
  uint8_t                             **ptr,
  LIBLTE_S1AP_INITIATINGMESSAGE_STRUCT *msg);

/*******************************************************************************
/* UnsuccessfulOutcome CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_S1SETUPFAILURE,
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_PATHSWITCHREQUESTFAILURE,
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_UECONTEXTMODIFICATIONFAILURE,
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_INITIALCONTEXTSETUPFAILURE,
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_ENBCONFIGURATIONUPDATEFAILURE,
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_HANDOVERPREPARATIONFAILURE,
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_HANDOVERFAILURE,
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_MMECONFIGURATIONUPDATEFAILURE,
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_N_ITEMS,
}LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_ENUM;
static const char liblte_s1ap_unsuccessfuloutcome_choice_text[LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_N_ITEMS][50] = {
  "S1SetupFailure",
  "PathSwitchRequestFailure",
  "UEContextModificationFailure",
  "InitialContextSetupFailure",
  "ENBConfigurationUpdateFailure",
  "HandoverPreparationFailure",
  "HandoverFailure",
  "MMEConfigurationUpdateFailure",
};

typedef union{
  LIBLTE_S1AP_MESSAGE_S1SETUPFAILURE_STRUCT                           S1SetupFailure;
  LIBLTE_S1AP_MESSAGE_PATHSWITCHREQUESTFAILURE_STRUCT                 PathSwitchRequestFailure;
  LIBLTE_S1AP_MESSAGE_UECONTEXTMODIFICATIONFAILURE_STRUCT             UEContextModificationFailure;
  LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPFAILURE_STRUCT               InitialContextSetupFailure;
  LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONUPDATEFAILURE_STRUCT            ENBConfigurationUpdateFailure;
  LIBLTE_S1AP_MESSAGE_HANDOVERPREPARATIONFAILURE_STRUCT               HandoverPreparationFailure;
  LIBLTE_S1AP_MESSAGE_HANDOVERFAILURE_STRUCT                          HandoverFailure;
  LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATEFAILURE_STRUCT            MMEConfigurationUpdateFailure;
}LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_UNION;

typedef struct{
  uint8_t                                                 procedureCode;
  LIBLTE_S1AP_CRITICALITY_ENUM                            criticality;
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_UNION            choice;
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_ENUM             choice_type;
}LIBLTE_S1AP_UNSUCCESSFULOUTCOME_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_unsuccessfuloutcome(
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_STRUCT *msg,
  uint8_t                               **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_unsuccessfuloutcome(
  uint8_t                               **ptr,
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_STRUCT *msg);

/*******************************************************************************
/* SuccessfulOutcome CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_HANDOVERREQUESTACKNOWLEDGE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_UECONTEXTRELEASECOMPLETE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_UERADIOCAPABILITYMATCHRESPONSE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_INITIALCONTEXTSETUPRESPONSE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_E_RABSETUPRESPONSE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_PATHSWITCHREQUESTACKNOWLEDGE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_MMECONFIGURATIONUPDATEACKNOWLEDGE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_RESETACKNOWLEDGE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_ENBCONFIGURATIONUPDATEACKNOWLEDGE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_E_RABMODIFYRESPONSE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_WRITEREPLACEWARNINGRESPONSE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_S1SETUPRESPONSE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_KILLRESPONSE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_UECONTEXTMODIFICATIONRESPONSE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_HANDOVERCOMMAND,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_HANDOVERCANCELACKNOWLEDGE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_E_RABRELEASERESPONSE,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_N_ITEMS,
}LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_ENUM;
static const char liblte_s1ap_successfuloutcome_choice_text[LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_N_ITEMS][50] = {
  "HandoverRequestAcknowledge",
  "UEContextReleaseComplete",
  "UERadioCapabilityMatchResponse",
  "InitialContextSetupResponse",
  "E-RABSetupResponse",
  "PathSwitchRequestAcknowledge",
  "MMEConfigurationUpdateAcknowledge",
  "ResetAcknowledge",
  "ENBConfigurationUpdateAcknowledge",
  "E-RABModifyResponse",
  "WriteReplaceWarningResponse",
  "S1SetupResponse",
  "KillResponse",
  "UEContextModificationResponse",
  "HandoverCommand",
  "HandoverCancelAcknowledge",
  "E-RABReleaseResponse",
};

typedef union{
  LIBLTE_S1AP_MESSAGE_HANDOVERREQUESTACKNOWLEDGE_STRUCT               HandoverRequestAcknowledge;
  LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASECOMPLETE_STRUCT                 UEContextReleaseComplete;
  LIBLTE_S1AP_MESSAGE_UERADIOCAPABILITYMATCHRESPONSE_STRUCT           UERadioCapabilityMatchResponse;
  LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPRESPONSE_STRUCT              InitialContextSetupResponse;
  LIBLTE_S1AP_MESSAGE_E_RABSETUPRESPONSE_STRUCT                       E_RABSetupResponse;
  LIBLTE_S1AP_MESSAGE_PATHSWITCHREQUESTACKNOWLEDGE_STRUCT             PathSwitchRequestAcknowledge;
  LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATEACKNOWLEDGE_STRUCT        MMEConfigurationUpdateAcknowledge;
  LIBLTE_S1AP_MESSAGE_RESETACKNOWLEDGE_STRUCT                         ResetAcknowledge;
  LIBLTE_S1AP_MESSAGE_ENBCONFIGURATIONUPDATEACKNOWLEDGE_STRUCT        ENBConfigurationUpdateAcknowledge;
  LIBLTE_S1AP_MESSAGE_E_RABMODIFYRESPONSE_STRUCT                      E_RABModifyResponse;
  LIBLTE_S1AP_MESSAGE_WRITEREPLACEWARNINGRESPONSE_STRUCT              WriteReplaceWarningResponse;
  LIBLTE_S1AP_MESSAGE_S1SETUPRESPONSE_STRUCT                          S1SetupResponse;
  LIBLTE_S1AP_MESSAGE_KILLRESPONSE_STRUCT                             KillResponse;
  LIBLTE_S1AP_MESSAGE_UECONTEXTMODIFICATIONRESPONSE_STRUCT            UEContextModificationResponse;
  LIBLTE_S1AP_MESSAGE_HANDOVERCOMMAND_STRUCT                          HandoverCommand;
  LIBLTE_S1AP_MESSAGE_HANDOVERCANCELACKNOWLEDGE_STRUCT                HandoverCancelAcknowledge;
  LIBLTE_S1AP_MESSAGE_E_RABRELEASERESPONSE_STRUCT                     E_RABReleaseResponse;
}LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_UNION;

typedef struct{
  uint8_t                                               procedureCode;
  LIBLTE_S1AP_CRITICALITY_ENUM                          criticality;
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_UNION            choice;
  LIBLTE_S1AP_SUCCESSFULOUTCOME_CHOICE_ENUM             choice_type;
}LIBLTE_S1AP_SUCCESSFULOUTCOME_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_successfuloutcome(
  LIBLTE_S1AP_SUCCESSFULOUTCOME_STRUCT *msg,
  uint8_t                             **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_successfuloutcome(
  uint8_t                             **ptr,
  LIBLTE_S1AP_SUCCESSFULOUTCOME_STRUCT *msg);

/*******************************************************************************
/* S1AP_PDU CHOICE
********************************************************************************/
typedef enum{
  LIBLTE_S1AP_S1AP_PDU_CHOICE_INITIATINGMESSAGE,
  LIBLTE_S1AP_S1AP_PDU_CHOICE_SUCCESSFULOUTCOME,
  LIBLTE_S1AP_S1AP_PDU_CHOICE_UNSUCCESSFULOUTCOME,
  LIBLTE_S1AP_S1AP_PDU_CHOICE_N_ITEMS,
}LIBLTE_S1AP_S1AP_PDU_CHOICE_ENUM;
static const char liblte_s1ap_s1ap_pdu_choice_text[LIBLTE_S1AP_S1AP_PDU_CHOICE_N_ITEMS][50] = {
  "initiatingMessage",
  "successfulOutcome",
  "unsuccessfulOutcome",
};

typedef union{
  LIBLTE_S1AP_INITIATINGMESSAGE_STRUCT                         initiatingMessage;
  LIBLTE_S1AP_SUCCESSFULOUTCOME_STRUCT                         successfulOutcome;
  LIBLTE_S1AP_UNSUCCESSFULOUTCOME_STRUCT                       unsuccessfulOutcome;
}LIBLTE_S1AP_S1AP_PDU_CHOICE_UNION;

typedef struct{
  bool ext;
  LIBLTE_S1AP_S1AP_PDU_CHOICE_UNION choice;
  LIBLTE_S1AP_S1AP_PDU_CHOICE_ENUM  choice_type;
}LIBLTE_S1AP_S1AP_PDU_STRUCT;

LIBLTE_ERROR_ENUM liblte_s1ap_pack_s1ap_pdu(
  LIBLTE_S1AP_S1AP_PDU_STRUCT *s1ap_pdu,
  LIBLTE_BYTE_MSG_STRUCT      *msg);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_s1ap_pdu(
  LIBLTE_BYTE_MSG_STRUCT      *msg,
  LIBLTE_S1AP_S1AP_PDU_STRUCT *s1ap_pdu);
#endif // SRSLTE_LIBLTE_S1AP_H
