srsLTE/lib/include/srslte/asn1/liblte_m2ap.h

1756 lines
84 KiB
C

/*
* 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_M2AP_H
#define SRSLTE_LIBLTE_M2AP_H
/*******************************************************************************
* Warnings/Todos
*******************************************************************************/
// Extensions are not yet handled correctly
/*******************************************************************************
* INCLUDES
*******************************************************************************/
#include <srslte/asn1/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_M2AP_MAXPRIVATEIES 256
#define LIBLTE_M2AP_MAXNOOFMBSFNAREAS 8
#define LIBLTE_M2AP_MAXNOOFMBSFN_ALLOCATIONS 15
#define LIBLTE_M2AP_MAXNOOFPMCHSPERMBSFNAREA 256
#define LIBLTE_M2AP_MAXNOOFCELLS 256
#define LIBLTE_M2AP_MAXNOOFMBMSSERVICEAREASPERCELL 256
#define LIBLTE_M2AP_MAXNOOFSESSIONSPERPMCH 29
#define LIBLTE_M2AP_MAXNOOFERRORS 256
#define LIBLTE_M2AP_MAXNROFINDIVIDUALM2CONNECTIONSTORESET 256
#define LIBLTE_M2AP_MAXNOOFCOUNTINGSERVICE 16
/*******************************************************************************
* Elementary Procedures
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_PROC_ID_SESSIONSTART = 0,
LIBLTE_M2AP_PROC_ID_SESSIONSTOP = 1,
LIBLTE_M2AP_PROC_ID_MBMSSCHEDULINGINFORMATION = 2,
LIBLTE_M2AP_PROC_ID_ERRORINDICATION = 3,
LIBLTE_M2AP_PROC_ID_RESET = 4,
LIBLTE_M2AP_PROC_ID_M2SETUP = 5,
LIBLTE_M2AP_PROC_ID_ENBCONFIGURATIONUPDATE = 6,
LIBLTE_M2AP_PROC_ID_MCECONFIGURATIONUPDATE = 7,
LIBLTE_M2AP_PROC_ID_PRIVATEMESSAGE = 8,
LIBLTE_M2AP_PROC_ID_SESSIONUPDATE = 9,
LIBLTE_M2AP_PROC_ID_MBMSSERVICECOUNTING = 10,
LIBLTE_M2AP_PROC_ID_MBMSSERVICECOUNTINGRESULTSREPORT = 11,
LIBLTE_M2AP_PROC_N_ITEMS,
}LIBLTE_M2AP_PROC_ENUM;
static const char liblte_m2ap_proc_text[LIBLTE_M2AP_PROC_N_ITEMS][64] = {
"id-sessionStart",
"id-sessionStop",
"id-mbmsSchedulingInformation",
"id-errorIndication",
"id-reset",
"id-m2Setup",
"id-eNBConfigurationUpdate",
"id-mCEConfigurationUpdate",
"id-privateMessage",
"id-sessionUpdate",
"id-mbmsServiceCounting",
"id-mbmsServiceCountingResultsReport"
};
/*******************************************************************************
* ProtocolIE Ids
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_IE_ID_MCE_MBMS_M2AP_ID = 0,
LIBLTE_M2AP_IE_ID_ENB_MBMS_M2AP_ID = 1,
LIBLTE_M2AP_IE_ID_TMGI = 2,
LIBLTE_M2AP_IE_ID_MBMS_SESSION_ID = 3,
LIBLTE_M2AP_IE_ID_MBMS_SERVICE_AREA = 6,
LIBLTE_M2AP_IE_ID_TNL_INFORMATION = 7,
LIBLTE_M2AP_IE_ID_CRITICALITYDIAGNOSTICS = 8,
LIBLTE_M2AP_IE_ID_CAUSE = 9,
LIBLTE_M2AP_IE_ID_MBSFN_AREA_CONFIGURATION_LIST = 10,
LIBLTE_M2AP_IE_ID_PMCH_CONFIGURATION_LIST = 11,
LIBLTE_M2AP_IE_ID_PMCH_CONFIGURATION_ITEM = 12,
LIBLTE_M2AP_IE_ID_GLOBALENB_ID = 13,
LIBLTE_M2AP_IE_ID_ENBNAME = 14,
LIBLTE_M2AP_IE_ID_ENB_MBMS_CONFIGURATION_DATA_LIST = 15,
LIBLTE_M2AP_IE_ID_ENB_MBMS_CONFIGURATION_DATA_ITEM = 16,
LIBLTE_M2AP_IE_ID_GLOBALMCE_ID = 17,
LIBLTE_M2AP_IE_ID_MCENAME = 18,
LIBLTE_M2AP_IE_ID_MCCHRELATEDBCCH_CONFIGPERMBSFNAREA = 19,
LIBLTE_M2AP_IE_ID_MCCHRELATEDBCCH_CONFIGPERMBSFNAREA_ITEM = 20,
LIBLTE_M2AP_IE_ID_TIMETOWAIT = 21,
LIBLTE_M2AP_IE_ID_MBSFN_SUBFRAME_CONFIGURATION_LIST = 22,
LIBLTE_M2AP_IE_ID_MBSFN_SUBFRAME_CONFIGURATION_ITEM = 23,
LIBLTE_M2AP_IE_ID_COMMON_SUBFRAME_ALLOCATION_PERIOD = 24,
LIBLTE_M2AP_IE_ID_MCCH_UPDATE_TIME = 25,
LIBLTE_M2AP_IE_ID_ENB_MBMS_CONFIGURATION_DATA_LIST_CONFIGUPDATE = 26,
LIBLTE_M2AP_IE_ID_ENB_MBMS_CONFIGURATION_DATA_CONFIGUPDATE_ITEM = 27,
LIBLTE_M2AP_IE_ID_MBMS_SERVICE_ASSOCIATEDLOGICALM2_CONNECTIONITEM = 28,
LIBLTE_M2AP_IE_ID_MBSFN_AREA_ID = 29,
LIBLTE_M2AP_IE_ID_RESETTYPE = 30,
LIBLTE_M2AP_IE_ID_MBMS_SERVICE_ASSOCIATEDLOGICALM2_CONNECTIONLISTRESACK = 31,
LIBLTE_M2AP_IE_ID_MBMS_COUNTING_REQUEST_SESSION = 32,
LIBLTE_M2AP_IE_ID_MBMS_COUNTING_REQUEST_SESSION_ITEM = 33,
LIBLTE_M2AP_IE_ID_MBMS_COUNTING_RESULT_LIST = 34,
LIBLTE_M2AP_IE_ID_MBMS_COUNTING_RESULT_ITEM = 35,
LIBLTE_M2AP_IE_N_ITEMS
}LIBLTE_M2AP_IE_ENUM;
static const char liblte_m2ap_ie_text[LIBLTE_M2AP_IE_N_ITEMS][64] = {
"id-MCE-MBMS-M2AP-ID",
"id-ENB-MBMS-M2AP-ID",
"id-TMGI",
"id-MBMS-Session-ID",
"id-MBMS-Service-Area",
"id-TNL-Information",
"id-CriticalityDiagnostics",
"id-Cause",
"id-MBSFN-Area-Configuration-List",
"id-PMCH-Configuration-List",
"id-PMCH-Configuration-Item",
"id-GlobalENB-ID",
"id-ENBname",
"id-ENB-MBMS-Configuration-data-List",
"id-ENB-MBMS-Configuration-data-Item",
"id-GlobalMCE-ID",
"id-MCEname",
"id-MCCHrelatedBCCH-ConfigPerMBSFNArea",
"id-MCCHrelatedBCCH-ConfigPerMBSFNArea-Item",
"id-TimeToWait",
"id-MBSFN-Subframe-Configuration-List",
"id-MBSFN-Subframe-Configuration-Item",
"id-Common-Subframe-Allocation-Period",
"id-MCCH-Update-Time",
"id-ENB-MBMS-Configuration-data-List-ConfigUpdate",
"id-ENB-MBMS-Configuration-data-ConfigUpdate-Item",
"id-MBMS-Service-associatedLogicalM2-ConnectionItem",
"id-MBSFN-Area-ID",
"id-ResetType",
"id-MBMS-Service-associatedLogicalM2-ConnectionListResAck",
"id-MBMS-Counting-Request-Session",
"id-MBMS-Counting-Request-Session-Item",
"id-MBMS-Counting-Result-List",
"id-MBMS-Counting-Result-Item"
};
/*******************************************************************************
* ProtocolIE AllocatedSubFramesEnd INTEGER
*******************************************************************************/
//lb:0;ub:1535
typedef struct{
uint16_t allocated_subframes_end;
}LIBLTE_M2AP_ALLOCATED_SUBFRAMES_END_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_allocatedsubframesend(
LIBLTE_M2AP_ALLOCATED_SUBFRAMES_END_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_allocatedsubframesend(
uint8_t **ptr,
LIBLTE_M2AP_ALLOCATED_SUBFRAMES_END_STRUCT *ie);
/*******************************************************************************
* ProtocolIE CauseMisc CHOICE
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_CAUSE_MISC_CONTROL_PROCESSING_OVERLOAD,
LIBLTE_M2AP_CAUSE_MISC_HARDWARE_FAILURE,
LIBLTE_M2AP_CAUSE_MISC_OM_INTERVENTION,
LIBLTE_M2AP_CAUSE_MISC_UNSPECIFIED,
LIBLTE_M2AP_CAUSE_MISC_N_ITEMS
}LIBLTE_M2AP_CAUSE_CHOICE_MISC_ENUM;
static const char liblte_s1ap_cause_misc_text[LIBLTE_M2AP_CAUSE_MISC_N_ITEMS][80] = {
"control-processing-overload",
"hardware-failure",
"om-intervention",
"unspecified",
};
typedef struct{
bool ext;
LIBLTE_M2AP_CAUSE_CHOICE_MISC_ENUM cause;
}LIBLTE_M2AP_CAUSE_MISC_STRUCT;
/*******************************************************************************
* ProtocolIE CauseNas CHOICE
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_CAUSE_NAS_UNSPECIFIED,
LIBLTE_M2AP_CAUSE_NAS_N_ITEMS
}LIBLTE_M2AP_CAUSE_CHOICE_NAS_ENUM;
static const char liblte_s1ap_cause_nas_text[LIBLTE_M2AP_CAUSE_NAS_N_ITEMS][80] = {
"unspecified",
};
typedef struct{
bool ext;
LIBLTE_M2AP_CAUSE_CHOICE_NAS_ENUM cause;
}LIBLTE_M2AP_CAUSE_NAS_STRUCT;
/*******************************************************************************
* ProtocolIE CauseProtocol CHOICE
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_CAUSE_PROTOCOL_TRANSFER_SYNTAX_ERROR,
LIBLTE_M2AP_CAUSE_PROTOCOL_ABSTRACT_SYNTAX_ERROR_REJECT,
LIBLTE_M2AP_CAUSE_PROTOCOL_ABSTRACT_SYNTAX_ERROR_IGNORE_AND_NOTIFY,
LIBLTE_M2AP_CAUSE_PROTOCOL_MESSAGE_NOT_COMPATIBLE_WITH_RECEIVER_STATE,
LIBLTE_M2AP_CAUSE_PROTOCOL_SEMANTIC_ERROR,
LIBLTE_M2AP_CAUSE_PROTOCOL_ABSTRACT_SYNTAX_ERROR_FALSELY_CONSTRUCTED_MESSAGE,
LIBLTE_M2AP_CAUSE_PROTOCOL_UNSPECIFIED,
LIBLTE_M2AP_CAUSE_PROTOCOL_N_ITEMS
}LIBLTE_M2AP_CAUSE_CHOICE_PROTOCOL_ENUM;
static const char liblte_m2ap_cause_protocol_text[LIBLTE_M2AP_CAUSE_PROTOCOL_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_M2AP_CAUSE_CHOICE_PROTOCOL_ENUM cause;
}LIBLTE_M2AP_CAUSE_PROTOCOL_STRUCT;
/*******************************************************************************
* ProtocolIE CauseRadioNetwork CHOICE
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_CAUSE_RADIONETWORK_UNKNOWN_OR_ALREADY_ALLOCATED_MCE_MBMS_M2AP_ID,
LIBLTE_M2AP_CAUSE_RADIONETWORK_UNKNOWN_OR_ALREADY_ALLOCATED_ENB_MBMS_M2AP_ID,
LIBLTE_M2AP_CAUSE_RADIONETWORK_UNKNOWN_OR_INCONSISTENT_PAIR_OF_MBMS_M2AP_IDS,
LIBLTE_M2AP_CAUSE_RADIONETWORK_RADIO_RESOURCES_NOT_AVAILABLE,
LIBLTE_M2AP_CAUSE_RADIONETWORK_INTERACTION_WITH_OTHER_PROCEDURE,
LIBLTE_M2AP_CAUSE_RADIONETWORK_UNSPECIFIED,
LIBLTE_M2AP_CAUSE_RADIONETWORK_N_ITEMS
}LIBLTE_M2AP_CAUSE_CHOICE_RADIONETWORK_ENUM;
static const char liblte_m2ap_cause_radionetwork_text[LIBLTE_M2AP_CAUSE_RADIONETWORK_N_ITEMS][80] = {
"unknown-or-already-allocated-MCE-MBMS-M2AP-ID",
"unknown-or-already-allocated-eNB-MBMS-M2AP-ID",
"unknown-or-inconsistent-pair-of-MBMS-M2AP-IDs",
"radio-resources-not-available",
"interaction-with-other-procedure",
"unspecified",
};
typedef struct{
bool ext;
LIBLTE_M2AP_CAUSE_CHOICE_RADIONETWORK_ENUM cause;
}LIBLTE_M2AP_CAUSE_RADIONETWORK_STRUCT;
/*******************************************************************************
* ProtocolIE CauseTransport CHOICE
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_CAUSE_TRANSPORT_TRANSPORT_RESOURCE_UNAVAILABLE,
LIBLTE_M2AP_CAUSE_TRANSPORT_UNSPECIFIED,
LIBLTE_M2AP_CAUSE_TRANSPORT_N_ITEMS
}LIBLTE_M2AP_CAUSE_CHOICE_TRANSPORT_ENUM;
static const char liblte_m2ap_cause_transport_text[LIBLTE_M2AP_CAUSE_TRANSPORT_N_ITEMS][80] = {
"transport-resource-unavailable",
"unspecified",
};
typedef struct{
bool ext;
LIBLTE_M2AP_CAUSE_CHOICE_TRANSPORT_ENUM cause;
}LIBLTE_M2AP_CAUSE_TRANSPORT_STRUCT;
/*******************************************************************************
* ProtocolIE Cause CHOICE
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_CAUSE_CHOICE_RADIONETWORK,
LIBLTE_M2AP_CAUSE_CHOICE_TRANSPORT,
LIBLTE_M2AP_CAUSE_CHOICE_NAS,
LIBLTE_M2AP_CAUSE_CHOICE_PROTOCOL,
LIBLTE_M2AP_CAUSE_CHOICE_MISC,
LIBLTE_M2AP_CAUSE_CHOICE_N_ITEMS,
}LIBLTE_M2AP_CAUSE_CHOICE_ENUM;
static const char liblte_m2ap_cause_choice_text[LIBLTE_M2AP_CAUSE_CHOICE_N_ITEMS][50] = {
"radioNetwork",
"transport",
"nas",
"protocol",
"misc",
};
typedef union{
LIBLTE_M2AP_CAUSE_RADIONETWORK_STRUCT radioNetwork;
LIBLTE_M2AP_CAUSE_TRANSPORT_STRUCT transport;
LIBLTE_M2AP_CAUSE_NAS_STRUCT nas;
LIBLTE_M2AP_CAUSE_PROTOCOL_STRUCT protocol;
LIBLTE_M2AP_CAUSE_MISC_STRUCT misc;
}LIBLTE_M2AP_CAUSE_CHOICE_UNION;
typedef struct{
bool ext;
LIBLTE_M2AP_CAUSE_CHOICE_UNION choice;
LIBLTE_M2AP_CAUSE_CHOICE_ENUM choice_type;
}LIBLTE_M2AP_CAUSE_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_cause(
LIBLTE_M2AP_CAUSE_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_cause(
uint8_t **ptr,
LIBLTE_M2AP_CAUSE_STRUCT *ie);
/*******************************************************************************
* ProtocolIE Criticality ENUMERATED
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_CRITICALITY_REJECT,
LIBLTE_M2AP_CRITICALITY_IGNORE,
LIBLTE_M2AP_CRITICALITY_NOTIFY,
LIBLTE_M2AP_CRITICALITY_N_ITEMS,
}LIBLTE_M2AP_CRITICALITY_ENUM;
static const char liblte_m2ap_criticality_text[LIBLTE_M2AP_CRITICALITY_N_ITEMS][80] = {
"reject",
"ignore",
"notify",
};
LIBLTE_ERROR_ENUM liblte_m2ap_pack_criticality(
LIBLTE_M2AP_CRITICALITY_ENUM *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_criticality(
uint8_t **ptr,
LIBLTE_M2AP_CRITICALITY_ENUM *ie);
/*******************************************************************************
* ProtocolIE ProtocolIE_ID INTEGER
*******************************************************************************/
typedef struct{
uint16_t ProtocolIE_ID;
}LIBLTE_M2AP_PROTOCOLIE_ID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_protocolie_id(
LIBLTE_M2AP_PROTOCOLIE_ID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_protocolie_id(
uint8_t **ptr,
LIBLTE_M2AP_PROTOCOLIE_ID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE ProtocolExtensionID INTEGER
*******************************************************************************/
typedef struct{
uint16_t ProtocolExtensionID;
}LIBLTE_M2AP_PROTOCOLEXTENSIONID_STRUCT;
LIBLTE_ERROR_ENUM liblte_s1ap_pack_protocolextensionid(
LIBLTE_M2AP_PROTOCOLEXTENSIONID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_protocolextensionid(
uint8_t **ptr,
LIBLTE_M2AP_PROTOCOLEXTENSIONID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE ProtocolExtensionField SEQUENCE
********************************************************************************/
typedef struct{
LIBLTE_M2AP_PROTOCOLEXTENSIONID_STRUCT id;
LIBLTE_M2AP_CRITICALITY_ENUM criticality;
LIBLTE_ASN1_OPEN_TYPE_STRUCT extensionValue;
}LIBLTE_M2AP_PROTOCOLEXTENSIONFIELD_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_protocolextensionfield(
LIBLTE_M2AP_PROTOCOLEXTENSIONFIELD_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_protocolextensionfield(
uint8_t **ptr,
LIBLTE_M2AP_PROTOCOLEXTENSIONFIELD_STRUCT *ie);
/*******************************************************************************
* ProtocolIE ProtocolIE_SingleContainer SEQUENCE
*******************************************************************************/
typedef struct{
LIBLTE_M2AP_PROTOCOLIE_ID_STRUCT id;
LIBLTE_M2AP_CRITICALITY_ENUM criticality;
LIBLTE_ASN1_OPEN_TYPE_STRUCT value;
}LIBLTE_M2AP_PROTOCOLIE_SINGLECONTAINER_STRUCT;
LIBLTE_ERROR_ENUM liblte_s1ap_pack_protocolie_singlecontainer(
LIBLTE_M2AP_PROTOCOLIE_SINGLECONTAINER_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_s1ap_unpack_protocolie_singlecontainer(
uint8_t **ptr,
LIBLTE_M2AP_PROTOCOLIE_SINGLECONTAINER_STRUCT *ie);
/*******************************************************************************
* ProtocolIE ProtocolExtensionContainer DYNAMIC SEQUENCE OF
*******************************************************************************/
// lb:1, ub:65535
typedef struct{
uint32_t len;
LIBLTE_M2AP_PROTOCOLEXTENSIONFIELD_STRUCT buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_protocolextensioncontainer(
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_protocolextensioncontainer(
uint8_t **ptr,
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT *ie);
/*******************************************************************************
* ProtocolIE PLMNidentity STATIC OCTET STRING
*******************************************************************************/
#define LIBLTE_M2AP_PLMN_IDENTITY_OCTET_STRING_LEN 3
typedef struct{
uint8_t buffer[LIBLTE_M2AP_PLMN_IDENTITY_OCTET_STRING_LEN];
}LIBLTE_M2AP_PLMN_IDENTITY_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_plmnidentity(
LIBLTE_M2AP_PLMN_IDENTITY_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_plmnidentity(
uint8_t **ptr,
LIBLTE_M2AP_PLMN_IDENTITY_STRUCT *ie);
/*******************************************************************************
* ProtocolIE EUTRANCellIdentifier STATIC BIT STRING
*******************************************************************************/
#define LIBLTE_M2AP_EUTRAN_CELL_IDENTIFIER_BIT_STRING_LEN 28
typedef struct{
uint32_t eUTRANCellIdentifier;
}LIBLTE_M2AP_EUTRAN_CELL_IDENTIFIER_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_eutrancellidentifier(
LIBLTE_M2AP_EUTRAN_CELL_IDENTIFIER_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_eutrancellidentifier(
uint8_t **ptr,
LIBLTE_M2AP_EUTRAN_CELL_IDENTIFIER_STRUCT *ie);
/*******************************************************************************
* ProtocolIE ECGI SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_PLMN_IDENTITY_STRUCT pLMN_Identity;
LIBLTE_M2AP_EUTRAN_CELL_IDENTIFIER_STRUCT EUTRANCellIdentifier;
bool iE_Extensions_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
}LIBLTE_M2AP_ECGI_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_ecgi(
LIBLTE_M2AP_ECGI_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_ecgi(
uint8_t **ptr,
LIBLTE_M2AP_ECGI_STRUCT *ie);
/*******************************************************************************
* ProtocolIE CellReservationInfo ENUMERATED
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_CELL_RESERVATION_INFO_RESERVED_CELL,
LIBLTE_M2AP_CELL_RESERVATION_INFO_NON_RESERVED_CELL,
}LIBLTE_M2AP_CELL_RESERVATION_INFO_ENUM;
typedef struct{
bool ext;
LIBLTE_M2AP_CELL_RESERVATION_INFO_ENUM e;
}LIBLTE_M2AP_CELL_RESERVATION_INFO_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_cellreservationinfo(
LIBLTE_M2AP_CELL_RESERVATION_INFO_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_cellreservationinfo(
uint8_t **ptr,
LIBLTE_M2AP_CELL_RESERVATION_INFO_STRUCT *ie);
/*******************************************************************************
* ProtocolIE CellInformation SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_ECGI_STRUCT eCGI;
LIBLTE_M2AP_CELL_RESERVATION_INFO_STRUCT cellReservationInfo;
bool ie_extensions_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT ie_extensions;
}LIBLTE_M2AP_CELL_INFORMATION_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_cellinformation(
LIBLTE_M2AP_CELL_INFORMATION_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_cellinformation(
uint8_t **ptr,
LIBLTE_M2AP_CELL_INFORMATION_STRUCT *ie);
/*******************************************************************************
* ProtocolIE CellInformationList SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
uint16_t len;
LIBLTE_M2AP_CELL_INFORMATION_STRUCT buffer[32]; //artificial limit to 32
}LIBLTE_M2AP_CELL_INFORMATION_LIST_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_cellinformationlist(
LIBLTE_M2AP_CELL_INFORMATION_LIST_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_cellinformationlist(
uint8_t **ptr,
LIBLTE_M2AP_CELL_INFORMATION_LIST_STRUCT *ie);
/*******************************************************************************
* ProtocolIE ProcedureCode INTEGER
*******************************************************************************/
typedef struct{
uint8_t ProcedureCode;
}LIBLTE_M2AP_PROCEDURECODE_STRUCT;
/*******************************************************************************
* ProtocolIE TriggeringMessage ENUMERATED
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_TRIGGERINGMESSAGE_INITIATING_MESSAGE,
LIBLTE_M2AP_TRIGGERINGMESSAGE_SUCCESSFUL_OUTCOME,
LIBLTE_M2AP_TRIGGERINGMESSAGE_UNSUCCESSFULL_OUTCOME,
LIBLTE_M2AP_TRIGGERINGMESSAGE_N_ITEMS,
}LIBLTE_M2AP_TRIGGERINGMESSAGE_ENUM;
static const char liblte_m2ap_triggeringmessage_text[LIBLTE_M2AP_TRIGGERINGMESSAGE_N_ITEMS][80] = {
"initiating-message",
"successful-outcome",
"unsuccessfull-outcome",
};
LIBLTE_ERROR_ENUM liblte_m2ap_pack_triggeringmessage(
LIBLTE_M2AP_TRIGGERINGMESSAGE_ENUM *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_triggeringmessage(
uint8_t **ptr,
LIBLTE_M2AP_TRIGGERINGMESSAGE_ENUM *ie);
/*******************************************************************************
* ProtocolIE TypeOfError ENUMERATED
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_TYPEOFERROR_NOT_UNDERSTOOD,
LIBLTE_M2AP_TYPEOFERROR_MISSING,
LIBLTE_M2AP_TYPEOFERROR_N_ITEMS,
}LIBLTE_M2AP_TYPEOFERROR_ENUM;
static const char liblte_M2ap_typeoferror_text[LIBLTE_M2AP_TYPEOFERROR_N_ITEMS][80] = {
"not-understood",
"missing",
};
typedef struct{
bool ext;
LIBLTE_M2AP_TYPEOFERROR_ENUM e;
}LIBLTE_M2AP_TYPEOFERROR_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_typeoferror(
LIBLTE_M2AP_TYPEOFERROR_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_typeoferror(
uint8_t **ptr,
LIBLTE_M2AP_TYPEOFERROR_STRUCT *ie);
/*******************************************************************************
* ProtocolIE CriticalityDiagnostics_IE_Item SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_CRITICALITY_ENUM iECriticality;
LIBLTE_M2AP_PROTOCOLIE_ID_STRUCT iE_ID;
LIBLTE_M2AP_TYPEOFERROR_STRUCT typeOfError;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
bool iE_Extensions_present;
}LIBLTE_M2AP_CRITICALITYDIAGNOSTICS_IE_ITEM_STRUCT;
/*******************************************************************************
* ProtocolIE CriticalityDiagnostics_IE_List DYNAMIC SEQUENCE OF
*******************************************************************************/
// lb:1, ub:256
typedef struct{
uint32_t len;
LIBLTE_M2AP_CRITICALITYDIAGNOSTICS_IE_ITEM_STRUCT buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_M2AP_CRITICALITYDIAGNOSTICS_IE_LIST_STRUCT;
/*******************************************************************************
* ProtocolIE CriticalityDiagnostics SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_PROCEDURECODE_STRUCT procedureCode;
bool procedureCode_present;
LIBLTE_M2AP_TRIGGERINGMESSAGE_ENUM triggeringMessage;
bool triggeringMessage_present;
LIBLTE_M2AP_CRITICALITY_ENUM procedureCriticality;
bool procedureCriticality_present;
LIBLTE_M2AP_CRITICALITYDIAGNOSTICS_IE_LIST_STRUCT iEsCriticalityDiagnostics;
bool iEsCriticalityDiagnostics_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
bool iE_Extensions_present;
}LIBLTE_M2AP_CRITICALITYDIAGNOSTICS_STRUCT;
/*******************************************************************************
* ProtocolIE ENB-ID STATIC BIT STRING
*******************************************************************************/
#define LIBLTE_M2AP_ENBID_BIT_STRING_LEN 20
typedef struct{
bool ext;
uint8_t buffer[20];
}LIBLTE_M2AP_ENB_ID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_enbid(
LIBLTE_M2AP_ENB_ID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_enbid(
uint8_t **ptr,
LIBLTE_M2AP_ENB_ID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MCE-ID STATIC OCTET STRING
*******************************************************************************/
#define LIBLTE_M2AP_MCEID_OCTET_STRING_LEN 2
typedef struct{
bool ext;
uint8_t buffer[2];
}LIBLTE_M2AP_MCE_ID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mceid(
LIBLTE_M2AP_MCE_ID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mceid(
uint8_t **ptr,
LIBLTE_M2AP_MCE_ID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MCE-Name PRINTABLE STRING
*******************************************************************************/
typedef struct{
bool ext;
uint32_t n_octets;
uint8_t buffer[150];
}LIBLTE_M2AP_MCE_NAME_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mcename(
LIBLTE_M2AP_MCE_NAME_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mceid(
uint8_t **ptr,
LIBLTE_M2AP_MCE_NAME_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MCE-MBMS-M2AP-ID INTEGER
*******************************************************************************/
//lb:0;ub:16777215
typedef struct{
uint32_t mce_mbms_m2ap_id;
}LIBLTE_M2AP_MCE_MBMS_M2AP_ID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mcembmsm2apid(
LIBLTE_M2AP_MCE_MBMS_M2AP_ID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mcembmsm2apid(
uint8_t **ptr,
LIBLTE_M2AP_MCE_MBMS_M2AP_ID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MBSFN-Synchronization-Area-Id INTEGER
*******************************************************************************/
typedef struct{
uint32_t mbsfn_synchronisation_area_id;
}LIBLTE_M2AP_MBSFN_SYNCHRONISATION_AREA_ID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbsfnsynchronisationareaid(
LIBLTE_M2AP_MBSFN_SYNCHRONISATION_AREA_ID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbsfnsynchronisationareaid(
uint8_t **ptr,
LIBLTE_M2AP_MBSFN_SYNCHRONISATION_AREA_ID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MBMS-Service-Area DYNAMIC OCTET STRING
*******************************************************************************/
// lb:0, ub:512
typedef struct{
uint32_t n_octets;
uint8_t buffer[512];
}LIBLTE_M2AP_MBMS_SERVICE_AREA_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbmsservicearea(
LIBLTE_M2AP_MBMS_SERVICE_AREA_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbmsservicearea(
uint8_t **ptr,
LIBLTE_M2AP_MBMS_SERVICE_AREA_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MBMS-Service-Area-Id-List SEQUENCE
*******************************************************************************/
typedef struct{
uint8_t len;
LIBLTE_M2AP_MBMS_SERVICE_AREA_STRUCT buffer[32]; //Waring: Artificial limit to reduce memory footprint
}LIBLTE_M2AP_MBMS_SERVICE_AREA_ID_LIST_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbmsserviceareaidlist(
LIBLTE_M2AP_MBMS_SERVICE_AREA_ID_LIST_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbmsserviceareaidlist(
uint8_t **ptr,
LIBLTE_M2AP_MBMS_SERVICE_AREA_ID_LIST_STRUCT *ie);
/*******************************************************************************
* ProtocolIE ENB-MBMS-ConfigurationDataItem SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_ECGI_STRUCT eCGI;
LIBLTE_M2AP_MBSFN_SYNCHRONISATION_AREA_ID_STRUCT mbsfnSynchronisationArea;
LIBLTE_M2AP_MBMS_SERVICE_AREA_ID_LIST_STRUCT mbmsServiceAreaList;
bool iE_Extensions_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
}LIBLTE_M2AP_ENB_MBMS_CONFIGURATION_DATA_ITEM_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_enbmbmsconfigurationdataitem(
LIBLTE_M2AP_ENB_MBMS_CONFIGURATION_DATA_ITEM_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_enbmbmsconfigurationdataitem(
uint8_t **ptr,
LIBLTE_M2AP_ENB_MBMS_CONFIGURATION_DATA_ITEM_STRUCT *ie);
/*******************************************************************************
* ProtocolIE ENB-MBMS-ConfigurationDataConfigUpdateItem SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_ENB_MBMS_CONFIGURATION_DATA_ITEM_STRUCT mBMSConfigData;
LIBLTE_M2AP_ECGI_STRUCT eCGI;
}LIBLTE_M2AP_ENB_MBMS_CONFIGURATION_DATA_CONFIGUPDATE_ITEM_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_enbmbmsconfigurationdataconfigupdateitem(
LIBLTE_M2AP_ENB_MBMS_CONFIGURATION_DATA_CONFIGUPDATE_ITEM_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_enbmbmsconfigurationdataconfigupdateitem(
uint8_t **ptr,
LIBLTE_M2AP_ENB_MBMS_CONFIGURATION_DATA_CONFIGUPDATE_ITEM_STRUCT *ie);
/*******************************************************************************
* ProtocolIE ENB-MBMS-M2AP-ID INTEGER
*******************************************************************************/
//lb:0;ub:65535
typedef struct{
uint16_t enb_mbms_m2ap_id;
}LIBLTE_M2AP_ENB_MBMS_M2AP_ID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_enbmbmsm2apid(
LIBLTE_M2AP_ENB_MBMS_M2AP_ID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_enbmbmsm2apid(
uint8_t **ptr,
LIBLTE_M2AP_ENB_MBMS_M2AP_ID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE ENB-NAME PRINTABLE STRING
*******************************************************************************/
typedef struct{
bool ext;
uint32_t n_octets;
uint8_t buffer[150];
}LIBLTE_M2AP_ENBNAME_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_enbname(
LIBLTE_M2AP_ENBNAME_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_enbname(
uint8_t **ptr,
LIBLTE_M2AP_ENBNAME_STRUCT *ie);
/*******************************************************************************
* ProtocolIE Global-ENB-Id SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_PLMN_IDENTITY_STRUCT pLMNidentity;
LIBLTE_M2AP_ENB_ID_STRUCT eNB_ID;
bool iE_Extensions_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
}LIBLTE_M2AP_GLOBAL_ENB_ID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_globalenbid(
LIBLTE_M2AP_GLOBAL_ENB_ID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_globalenbid(
uint8_t **ptr,
LIBLTE_M2AP_GLOBAL_ENB_ID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE Global-MCE-Id SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_PLMN_IDENTITY_STRUCT pLMN_Identity;
LIBLTE_M2AP_MCE_ID_STRUCT mCE_ID;
bool iE_Extensions_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_extensions;
}LIBLTE_M2AP_GLOBAL_MCE_ID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_globalmceid(
LIBLTE_M2AP_GLOBAL_MCE_ID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_globalmceid(
uint8_t **ptr,
LIBLTE_M2AP_GLOBAL_MCE_ID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE GTP-TEID STATIC OCTET STRING
*******************************************************************************/
typedef struct{
uint8_t buffer[4];
}LIBLTE_M2AP_GTP_TEID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_gtpteid(
LIBLTE_M2AP_GTP_TEID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_gtpteid(
uint8_t **ptr,
LIBLTE_M2AP_GTP_TEID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE IPAddress DYNAMIC OCTET STRING
*******************************************************************************/
typedef struct{
uint8_t len;
uint8_t buffer[16];
}LIBLTE_M2AP_IP_ADDRESS_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_ipaddress(
LIBLTE_M2AP_IP_ADDRESS_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_ipaddress(
uint8_t **ptr,
LIBLTE_M2AP_IP_ADDRESS_STRUCT *ie);
/*******************************************************************************
* ProtocolIE LCID INTEGER
*******************************************************************************/
typedef struct{
uint8_t lcid;
}LIBLTE_M2AP_LCID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_lcid(
LIBLTE_M2AP_LCID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_lcid(
uint8_t **ptr,
LIBLTE_M2AP_LCID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MBMS-Service-associatedLogicalM2-ConnectionItem SEQUENCE
*******************************************************************************/
typedef struct{
bool eNB_MBMS_M2AP_ID_present;
LIBLTE_M2AP_ENB_MBMS_M2AP_ID_STRUCT eNB_MBMS_M2AP_ID;
bool mCE_MBMS_M2AP_ID_present;
LIBLTE_M2AP_ENB_MBMS_M2AP_ID_STRUCT mCE_MBMS_M2AP_ID;
}LIBLTE_M2AP_MBMS_SERVICE_ASSOCIATEDLOGICALM2_CONNECTIONITEM_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbmsserviceassociatedlogicalm2connectionitem(
LIBLTE_M2AP_MBMS_SERVICE_ASSOCIATEDLOGICALM2_CONNECTIONITEM_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbmsserviceassociatedlogicalm2connectionitem(
uint8_t **ptr,
LIBLTE_M2AP_MBMS_SERVICE_ASSOCIATEDLOGICALM2_CONNECTIONITEM_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MBMS-Session-Id STATIC OCTET STRING
*******************************************************************************/
typedef struct{
uint8_t buffer[1];
}LIBLTE_M2AP_MBMS_SESSION_ID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbmssessionid(
LIBLTE_M2AP_MBMS_SESSION_ID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbmssessionid(
uint8_t **ptr,
LIBLTE_M2AP_MBMS_SESSION_ID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MBSFN-Area-ID INTEGER
*******************************************************************************/
typedef struct{
uint8_t mbsfn_area_id;
}LIBLTE_M2AP_MBSFN_AREA_ID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbsfnareaid(
LIBLTE_M2AP_MBSFN_AREA_ID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbsfnareaid(
uint8_t **ptr,
LIBLTE_M2AP_MBSFN_AREA_ID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MBSFN-SynchronizationArea-ID INTEGER
*******************************************************************************/
typedef struct{
uint32_t mbsfn_synchronization_area_id;
}LIBLTE_M2AP_MBSFN_SYNCHRONIZATION_AREA_ID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbsfnsynchronizationareaid(
LIBLTE_M2AP_MBSFN_SYNCHRONIZATION_AREA_ID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbsfnsynchronizationareaid(
uint8_t **ptr,
LIBLTE_M2AP_MBSFN_SYNCHRONIZATION_AREA_ID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE RadioframeAllocationPeriod ENUMERATED
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_PERIOD_N1,
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_PERIOD_N2,
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_PERIOD_N4,
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_PERIOD_N8,
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_PERIOD_N16,
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_PERIOD_N32
}LIBLTE_M2AP_RADIOFRAME_ALLOCATION_PERIOD_ENUM;
typedef struct{
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_PERIOD_ENUM e;
}LIBLTE_M2AP_RADIOFRAME_ALLOCATION_PERIOD_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_radioframeallocationperiod(
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_PERIOD_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_radioframeallocationperiod(
uint8_t **ptr,
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_PERIOD_STRUCT *ie);
/*******************************************************************************
* ProtocolIE RadioframeAllocationOffset INTEGER
*******************************************************************************/
typedef struct{
uint8_t radioframeAllocationOffset;
}LIBLTE_M2AP_RADIOFRAME_ALLOCATION_OFFSET_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_radioframeallocationoffset(
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_OFFSET_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_radioframeallocationoffset(
uint8_t **ptr,
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_OFFSET_STRUCT *ie);
/*******************************************************************************
* ProtocolIE SubframeAllocation CHOICE
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_SUBFRAME_ALLOCATION_ONE_FRAME,
LIBLTE_M2AP_SUBFRAME_ALLOCATION_FOUR_FRAMES
}LIBLTE_M2AP_SUBFRAME_ALLOCATION_ENUM;
typedef struct{
LIBLTE_M2AP_SUBFRAME_ALLOCATION_ENUM choice_type;
union {
uint8_t oneFrame[6]; //BIT STRING
uint8_t fourFrames[24]; //BIT STRING
} choice;
}LIBLTE_M2AP_SUBFRAME_ALLOCATION_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_subframeallocation(
LIBLTE_M2AP_SUBFRAME_ALLOCATION_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_subframeallocation(
uint8_t **ptr,
LIBLTE_M2AP_SUBFRAME_ALLOCATION_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MBSFN-Subframe-Configuration SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_PERIOD_STRUCT radioFrameAllocationPeriod;
LIBLTE_M2AP_RADIOFRAME_ALLOCATION_OFFSET_STRUCT radioFrameAllocationOffset;
LIBLTE_M2AP_SUBFRAME_ALLOCATION_STRUCT subframeAllocation;
bool iE_Extensions_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
}LIBLTE_M2AP_MBSFN_SUBFRAME_CONFIGURATION_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbsfnsubframeconfiguration(
LIBLTE_M2AP_MBSFN_SUBFRAME_CONFIGURATION_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbsfnsubframeconfiguration(
uint8_t **ptr,
LIBLTE_M2AP_MBSFN_SUBFRAME_CONFIGURATION_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MBSFN-Subframe-Configuration-List SEQUENCE
*******************************************************************************/
typedef struct{
uint32_t len;
LIBLTE_M2AP_MBSFN_SUBFRAME_CONFIGURATION_STRUCT buffer[32];
}LIBLTE_M2AP_MBSFN_SUBFRAME_CONFIGURATION_LIST_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbsfnsubframeconfigurationlist(
LIBLTE_M2AP_MBSFN_SUBFRAME_CONFIGURATION_LIST_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbsfnsubframeconfigurationlist(
uint8_t **ptr,
LIBLTE_M2AP_MBSFN_SUBFRAME_CONFIGURATION_LIST_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MCCH-Upadte-Time INTEGER
*******************************************************************************/
//lb:0;ub:255
typedef struct{
uint8_t mcchUpdateTime;
}LIBLTE_M2AP_MCCH_UPDATE_TIME_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mcchupdatetime(
LIBLTE_M2AP_MCCH_UPDATE_TIME_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mcchupdatetime(
uint8_t **ptr,
LIBLTE_M2AP_MCCH_UPDATE_TIME_STRUCT *ie);
/*******************************************************************************
* ProtocolIE PDCCH-Length ENUM
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_PDCCH_LENGTH_S1,
LIBLTE_M2AP_PDCCH_LENGTH_S2,
}LIBLTE_M2AP_PDCCH_LENGTH_ENUM;
typedef struct{
bool ext;
LIBLTE_M2AP_PDCCH_LENGTH_ENUM pdcchLength;
}LIBLTE_M2AP_PDCCH_LENGTH_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_pdcchlength(
LIBLTE_M2AP_PDCCH_LENGTH_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_pdcchlength(
uint8_t **ptr,
LIBLTE_M2AP_PDCCH_LENGTH_STRUCT *ie);
/*******************************************************************************
* ProtocolIE Repetition Period ENUM
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_REPETITION_PERIOD_RF32,
LIBLTE_M2AP_REPETITION_PERIOD_RF64,
LIBLTE_M2AP_REPETITION_PERIOD_RF128,
LIBLTE_M2AP_REPETITION_PERIOD_RF256,
}LIBLTE_M2AP_REPETITION_PERIOD_ENUM;
typedef struct{
LIBLTE_M2AP_REPETITION_PERIOD_ENUM repetitionPeriod;
}LIBLTE_M2AP_REPETITION_PERIOD_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_repetiotionperiod(
LIBLTE_M2AP_REPETITION_PERIOD_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_repetiotionperiod(
uint8_t **ptr,
LIBLTE_M2AP_REPETITION_PERIOD_STRUCT *ie);
/*******************************************************************************
* ProtocolIE OFFSET INTEGER
*******************************************************************************/
typedef struct{
uint8_t offset;
}LIBLTE_M2AP_OFFSET_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_offset(
LIBLTE_M2AP_OFFSET_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_offset(
uint8_t **ptr,
LIBLTE_M2AP_OFFSET_STRUCT *ie);
/*******************************************************************************
* ProtocolIE Modification Period ENUM
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_MODIFICATION_PERIOD_RF512,
LIBLTE_M2AP_MODIFICATION_PERIOD_RF1024,
}LIBLTE_M2AP_MODIFICATION_PERIOD_ENUM;
typedef struct{
LIBLTE_M2AP_MODIFICATION_PERIOD_ENUM modificationPeriod;
}LIBLTE_M2AP_MODIFICATION_PERIOD_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_modificationperiod(
LIBLTE_M2AP_MODIFICATION_PERIOD_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_modificationperiod(
uint8_t **ptr,
LIBLTE_M2AP_MODIFICATION_PERIOD_STRUCT *ie);
/*******************************************************************************
* ProtocolIE Subframe-Allocation-Info STATIC BIT STRING
*******************************************************************************/
#define LIBLTE_M2AP_SUBFRAME_ALLOCATION_INFO_BIT_STRING_LEN 6
typedef struct{
uint8_t buffer[6];
}LIBLTE_M2AP_SUBFRAME_ALLOCATION_INFO_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_subframeallocationinfo(
LIBLTE_M2AP_SUBFRAME_ALLOCATION_INFO_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_subframeallocationinfo(
uint8_t **ptr,
LIBLTE_M2AP_SUBFRAME_ALLOCATION_INFO_STRUCT *ie);
/*******************************************************************************
* ProtocolIE Modulation-and-Coding-Scheme ENUM
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_MODULATION_AND_CODING_SCHEME_N2,
LIBLTE_M2AP_MODULATION_AND_CODING_SCHEME_N7,
LIBLTE_M2AP_MODULATION_AND_CODING_SCHEME_N13,
LIBLTE_M2AP_MODULATION_AND_CODING_SCHEME_N19
}LIBLTE_M2AP_MODULATION_AND_CODING_SCHEME_ENUM;
typedef struct{
LIBLTE_M2AP_MODULATION_AND_CODING_SCHEME_ENUM mcs;
}LIBLTE_M2AP_MODULATION_AND_CODING_SCHEME_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_modulationandcodingscheme(
LIBLTE_M2AP_MODULATION_AND_CODING_SCHEME_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_modulationandcodingscheme(
uint8_t **ptr,
LIBLTE_M2AP_MODULATION_AND_CODING_SCHEME_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MCCHrelatedBCCH-ConfigPerMBSFNArea-Item SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_MBSFN_AREA_ID_STRUCT mbsfnArea;
LIBLTE_M2AP_PDCCH_LENGTH_STRUCT pdcchLength;
LIBLTE_M2AP_REPETITION_PERIOD_STRUCT repetitionPeriod;
LIBLTE_M2AP_OFFSET_STRUCT offset;
LIBLTE_M2AP_MODIFICATION_PERIOD_STRUCT modificationPeriod;
LIBLTE_M2AP_SUBFRAME_ALLOCATION_INFO_STRUCT subframeAllocationInfo;
LIBLTE_M2AP_MODULATION_AND_CODING_SCHEME_STRUCT modulationAndCodingScheme;
bool cellInformationList_present;
LIBLTE_M2AP_CELL_INFORMATION_LIST_STRUCT cellInformationList;
bool iE_Extensions_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
}LIBLTE_M2AP_MCCH_RELATED_BCCH_CONFIG_PER_MBSFN_AREA_ITEM_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mcchrelatedbcchconfigpermbsfnareaitem(
LIBLTE_M2AP_MCCH_RELATED_BCCH_CONFIG_PER_MBSFN_AREA_ITEM_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mcchrelatedbcchconfigpermbsfnareaitem(
uint8_t **ptr,
LIBLTE_M2AP_MCCH_RELATED_BCCH_CONFIG_PER_MBSFN_AREA_ITEM_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MCCHrelatedBCCH-ConfigPerMBSFNArea DYNAMIC SEQUENCE
*******************************************************************************/
typedef struct{
uint16_t len;
LIBLTE_M2AP_MCCH_RELATED_BCCH_CONFIG_PER_MBSFN_AREA_ITEM_STRUCT buffer[8];
}LIBLTE_M2AP_MCCH_RELATED_BCCH_CONFIG_PER_MBSFN_AREA_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mcchrelatedbcchconfigpermbsfnarea(
LIBLTE_M2AP_MCCH_RELATED_BCCH_CONFIG_PER_MBSFN_AREA_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mcchrelatedbcchconfigpermbsfnarea(
uint8_t **ptr,
LIBLTE_M2AP_MCCH_RELATED_BCCH_CONFIG_PER_MBSFN_AREA_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MCH-Scheduling-Period ENUM
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_RF8,
LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_RF16,
LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_RF32,
LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_RF64,
LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_RF128,
LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_RF256,
LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_RF512,
LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_RF1024
}LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_ENUM;
typedef struct{
LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_ENUM e;
}LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mchschedulingperiod(
LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mchschedulingperiod(
uint8_t **ptr,
LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_STRUCT *ie);
/*******************************************************************************
* ProtocolIE OFFSET INTEGER
*******************************************************************************/
typedef struct{
uint8_t dataMCS;
}LIBLTE_M2AP_DATA_MCS_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_datamcs(
LIBLTE_M2AP_DATA_MCS_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_datamcs(
uint8_t **ptr,
LIBLTE_M2AP_DATA_MCS_STRUCT *ie);
/*******************************************************************************
* ProtocolIE Service Id STATIC OCTET STRING
*******************************************************************************/
#define LIBLTE_M2AP_SERVICE_ID_OCTET_STRING_LEN 3
typedef struct{
uint8_t buffer[3];
}LIBLTE_M2AP_SERVICE_ID_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_serviceid(
LIBLTE_M2AP_SERVICE_ID_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_serviceid(
uint8_t **ptr,
LIBLTE_M2AP_SERVICE_ID_STRUCT *ie);
/*******************************************************************************
* ProtocolIE TMGI SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_PLMN_IDENTITY_STRUCT pLMN_Identity;
LIBLTE_M2AP_SERVICE_ID_STRUCT serviceID;
bool iE_Extensions_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
}LIBLTE_M2AP_TMGI_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_tmgi(
LIBLTE_M2AP_TMGI_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_tmgi(
uint8_t **ptr,
LIBLTE_M2AP_TMGI_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MBMSSessionListPerPMCH-Item SEQUENCE (SIZE(1..maxnoofSessionsPerPMCH)) OF SEQUENCE
*******************************************************************************/
typedef struct{
uint16_t len;
struct {
bool ext;
LIBLTE_M2AP_TMGI_STRUCT Tmgi;
LIBLTE_M2AP_LCID_STRUCT Lcid;
bool iE_Extensions_present;
} buffer[8];
}LIBLTE_M2AP_MBMS_SESSION_LIST_PER_PMCH_ITEM_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbmssessionlistperpmchitem(
LIBLTE_M2AP_MBMS_SESSION_LIST_PER_PMCH_ITEM_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbmssessionlistperpmchitem(
uint8_t **ptr,
LIBLTE_M2AP_MBMS_SESSION_LIST_PER_PMCH_ITEM_STRUCT *ie);
/*******************************************************************************
* ProtocolIE PMCH-Configuration SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_ALLOCATED_SUBFRAMES_END_STRUCT allocatedSubframesEnd;
LIBLTE_M2AP_DATA_MCS_STRUCT dataMCS;
LIBLTE_M2AP_MCH_SCHEDULING_PERIOD_STRUCT mchSchedulingPeriod;
bool iE_Extensions_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
}LIBLTE_M2AP_PMCH_CONFIGURATION_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_pmchconfiguration(
LIBLTE_M2AP_PMCH_CONFIGURATION_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_pmchconfiguration(
uint8_t **ptr,
LIBLTE_M2AP_PMCH_CONFIGURATION_STRUCT *ie);
/*******************************************************************************
* ProtocolIE PMCH-Configuration-Item SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_PMCH_CONFIGURATION_STRUCT PMCHConfiguration;
LIBLTE_M2AP_MBMS_SESSION_LIST_PER_PMCH_ITEM_STRUCT MBMSSessionListPerPMCHItem;
bool iE_Extensions_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
}LIBLTE_M2AP_PMCH_CONFIGURATION_ITEM_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_pmchconfigurationitem(
LIBLTE_M2AP_PMCH_CONFIGURATION_ITEM_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_pmchconfigurationitem(
uint8_t **ptr,
LIBLTE_M2AP_PMCH_CONFIGURATION_ITEM_STRUCT *ie);
/*******************************************************************************
* ProtocolIE PMCH-Configuration-List SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
uint16_t len;
LIBLTE_M2AP_PMCH_CONFIGURATION_ITEM_STRUCT buffer[32];
bool iE_Extensions_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
}LIBLTE_M2AP_PMCH_CONFIGURATION_LIST_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_pmchconfigurationlist(
LIBLTE_M2AP_PMCH_CONFIGURATION_LIST_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_pmchconfigurationlist(
uint8_t **ptr,
LIBLTE_M2AP_PMCH_CONFIGURATION_LIST_STRUCT *ie);
/*******************************************************************************
* ProtocolIE Common-Subframe-Scheduling-Period ENUM
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_RF4,
LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_RF8,
LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_RF16,
LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_RF32,
LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_RF64,
LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_RF128,
LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_RF256,
}LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_ENUM;
typedef struct{
LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_ENUM e;
}LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_commonsubframeallocationperiod(
LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_commonsubframeallocationperiod(
uint8_t **ptr,
LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_STRUCT *ie);
/*******************************************************************************
* ProtocolIE Time-to-Wait ENUM
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_TIME_TO_WAIT_V1S,
LIBLTE_M2AP_TIME_TO_WAIT_V2S,
LIBLTE_M2AP_TIME_TO_WAIT_V5S,
LIBLTE_M2AP_TIME_TO_WAIT_V10S,
LIBLTE_M2AP_TIME_TO_WAIT_V20S,
LIBLTE_M2AP_TIME_TO_WAIT_V60S,
}LIBLTE_M2AP_TIME_TO_WAIT_ENUM;
typedef struct{
LIBLTE_M2AP_TIME_TO_WAIT_ENUM e;
}LIBLTE_M2AP_TIME_TO_WAIT_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_timetowait(
LIBLTE_M2AP_TIME_TO_WAIT_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_timetowait(
uint8_t **ptr,
LIBLTE_M2AP_TIME_TO_WAIT_STRUCT *ie);
/*******************************************************************************
* ProtocolIE TNL-Information SEQUENCE
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_IP_ADDRESS_STRUCT iPMCAddress;
LIBLTE_M2AP_IP_ADDRESS_STRUCT iPSourceAddress;
LIBLTE_M2AP_GTP_TEID_STRUCT gtpTeid;
bool iE_Extensions_present;
LIBLTE_M2AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
}LIBLTE_M2AP_TNL_INFORMATION_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_tnlinformation(
LIBLTE_M2AP_TNL_INFORMATION_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_tnlinformation(
uint8_t **ptr,
LIBLTE_M2AP_TNL_INFORMATION_STRUCT *ie);
/*******************************************************************************
* ProtocolIE ENB-MBMS-Configuration-data-List SEQUENCE OF ProtocolIE-Single-Container
*******************************************************************************/
//lb:1;ub:maxnofCells (256)
typedef struct{
uint8_t len;
LIBLTE_M2AP_ENB_MBMS_CONFIGURATION_DATA_ITEM_STRUCT buffer[32]; //Waring: Artificial limit to reduce memory footprint
} LIBLTE_M2AP_ENB_MBMS_CONFIGURATION_DATA_LIST_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_enbmbmsconfigurationdatalist(
LIBLTE_M2AP_ENB_MBMS_CONFIGURATION_DATA_LIST_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_enbmbmsconfigurationdatalist(
uint8_t **ptr,
LIBLTE_M2AP_ENB_MBMS_CONFIGURATION_DATA_LIST_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MBSFN-AreaConfiguration-Item ProtocolIE-Container
*******************************************************************************/
typedef struct{
LIBLTE_M2AP_PMCH_CONFIGURATION_LIST_STRUCT PMCHConfigurationList;
LIBLTE_M2AP_MBSFN_SUBFRAME_CONFIGURATION_LIST_STRUCT MBSFNSubframeConfigurationList;
LIBLTE_M2AP_COMMON_SUBFRAME_ALLOCATION_PERIOD_STRUCT CommonSubframeAllocationPeriod;
LIBLTE_M2AP_MBSFN_AREA_ID_STRUCT MBSFNAreaId;
} LIBLTE_M2AP_MBSFN_AREA_CONFIGURATION_ITEM_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbsfnareaconfigurationitem(
LIBLTE_M2AP_MBSFN_AREA_CONFIGURATION_ITEM_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbsfnareaconfigurationitem(
uint8_t **ptr,
LIBLTE_M2AP_MBSFN_AREA_CONFIGURATION_ITEM_STRUCT *ie);
/*******************************************************************************
* ProtocolIE MBSFN-AreaConfiguration-List SEQUENCE OF ProtocolIE-Single-Container
*******************************************************************************/
//lb:1;ub:maxnofCells (256)
typedef struct{
uint8_t len;
LIBLTE_M2AP_MBSFN_AREA_CONFIGURATION_ITEM_STRUCT buffer[32]; //Waring: Artificial limit to reduce memory footprint
} LIBLTE_M2AP_MBSFN_AREA_CONFIGURATION_LIST_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbsfnareaconfigurationlist(
LIBLTE_M2AP_MBSFN_AREA_CONFIGURATION_LIST_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbsfnareaconfigurationlist(
uint8_t **ptr,
LIBLTE_M2AP_MBSFN_AREA_CONFIGURATION_LIST_STRUCT *ie);
/*******************************************************************************
* Protocol Message M2SetupRequest STRUCT
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_GLOBAL_ENB_ID_STRUCT Global_ENB_ID;
bool eNBname_present;
LIBLTE_M2AP_ENBNAME_STRUCT eNBname;
LIBLTE_M2AP_ENB_MBMS_CONFIGURATION_DATA_LIST_STRUCT configurationDataList;
}LIBLTE_M2AP_MESSAGE_M2SETUPREQUEST_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_m2setuprequest(
LIBLTE_M2AP_MESSAGE_M2SETUPREQUEST_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_m2setuprequest(
uint8_t **ptr,
LIBLTE_M2AP_MESSAGE_M2SETUPREQUEST_STRUCT *ie);
/*******************************************************************************
* Protocol Message M2SetupResponse STRUCT
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_GLOBAL_MCE_ID_STRUCT Global_MCE_ID;
bool MCEname_present;
LIBLTE_M2AP_MCE_NAME_STRUCT MCEname;
LIBLTE_M2AP_MCCH_RELATED_BCCH_CONFIG_PER_MBSFN_AREA_STRUCT MCCHrelatedBCCHConfigPerMBSFNArea;
bool criticalityDiagnosis_present;
LIBLTE_M2AP_CRITICALITYDIAGNOSTICS_STRUCT criticalityDiagnosis;
}LIBLTE_M2AP_MESSAGE_M2SETUPRESPONSE_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_m2setupresponse(
LIBLTE_M2AP_MESSAGE_M2SETUPRESPONSE_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_m2setupresponse(
uint8_t **ptr,
LIBLTE_M2AP_MESSAGE_M2SETUPRESPONSE_STRUCT *ie);
/*******************************************************************************
* Protocol Message MBMSSessionStartRequest STRUCT
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_MCE_MBMS_M2AP_ID_STRUCT MceMbmsM2apId;
LIBLTE_M2AP_TMGI_STRUCT Tmgi;
bool MbmsSessionId_present;
LIBLTE_M2AP_MBMS_SESSION_ID_STRUCT MbmsSessionId;
LIBLTE_M2AP_MBMS_SERVICE_AREA_STRUCT MbmsServiceArea;
LIBLTE_M2AP_TNL_INFORMATION_STRUCT TnlInformation;
}LIBLTE_M2AP_MESSAGE_MBMSSESSIONSTARTREQUEST_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbmssessionstartrequest(
LIBLTE_M2AP_MESSAGE_MBMSSESSIONSTARTREQUEST_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbmssessionstartrequest(
uint8_t **ptr,
LIBLTE_M2AP_MESSAGE_MBMSSESSIONSTARTREQUEST_STRUCT *ie);
/*******************************************************************************
* Protocol Message MBMSSessionStartResponse STRUCT
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_MCE_MBMS_M2AP_ID_STRUCT MceMbmsM2apId;
LIBLTE_M2AP_ENB_MBMS_M2AP_ID_STRUCT EnbMbmsM2apId;
bool CriticalityDiagnostics_present;
LIBLTE_M2AP_CRITICALITYDIAGNOSTICS_STRUCT CriticalityDiagnostics;
}LIBLTE_M2AP_MESSAGE_MBMSSESSIONSTARTRESPONSE_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbmssessionstartresponse(
LIBLTE_M2AP_MESSAGE_MBMSSESSIONSTARTRESPONSE_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbmssessionstartresponse(
uint8_t **ptr,
LIBLTE_M2AP_MESSAGE_MBMSSESSIONSTARTRESPONSE_STRUCT *ie);
/*******************************************************************************
* Protocol Message MBMSSchedulingInformation STRUCT
*******************************************************************************/
typedef struct{
bool ext;
LIBLTE_M2AP_MCCH_UPDATE_TIME_STRUCT MCCHUpdateTime;
LIBLTE_M2AP_MBSFN_AREA_CONFIGURATION_LIST_STRUCT MbsfnAreaConfigurationList;
}LIBLTE_M2AP_MESSAGE_MBMSSCHEDULINGINFORMATION_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbmsschedulinginformation(
LIBLTE_M2AP_MESSAGE_MBMSSCHEDULINGINFORMATION_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbmsschedulinginformation(
uint8_t **ptr,
LIBLTE_M2AP_MESSAGE_MBMSSCHEDULINGINFORMATION_STRUCT *ie);
/*******************************************************************************
* Protocol Message MBMSSchedulingInformationResponse STRUCT
*******************************************************************************/
typedef struct{
bool ext;
bool CriticalityDiagnostics_present;
LIBLTE_M2AP_CRITICALITYDIAGNOSTICS_STRUCT CriticalityDiagnostics;
}LIBLTE_M2AP_MESSAGE_MBMSSCHEDULINGINFORMATIONRESPONSE_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_mbmsschedulinginformation(
LIBLTE_M2AP_MESSAGE_MBMSSCHEDULINGINFORMATION_STRUCT *ie,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_mbmsschedulinginformation(
uint8_t **ptr,
LIBLTE_M2AP_MESSAGE_MBMSSCHEDULINGINFORMATION_STRUCT *ie);
/*******************************************************************************
* ProtocolIE-Field
*******************************************************************************/
LIBLTE_ERROR_ENUM liblte_m2ap_pack_protocolie_header(
uint32_t len,
uint32_t ie_id,
LIBLTE_M2AP_CRITICALITY_ENUM crit,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_protocolie_header(
uint8_t **ptr,
uint32_t *ie_id,
LIBLTE_M2AP_CRITICALITY_ENUM *crit,
uint32_t *len);
/*******************************************************************************
* Procedure code criticality lookups
*******************************************************************************/
LIBLTE_M2AP_CRITICALITY_ENUM liblte_m2ap_procedure_criticality(uint8_t procedureCode);
/*******************************************************************************
* InitiatingMessage CHOICE
********************************************************************************/
typedef enum{
LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_MBMSSESSIONSTARTREQUEST,
LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_MBMSSESSIONSTOPREQUEST,
LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_MBMSSESSION_UPDATEREQUEST,
LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_MBMSSCHEDULINGINFORMATION,
LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_RESET,
LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_M2SETUPREQUEST,
LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_ENBCONFIGURATIONUPDATE,
LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_MCECONFIGURATIONUPDATE,
LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_MBMSSERVICECOUNTINGREQUEST,
LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_N_ITEMS,
}LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_ENUM;
static const char liblte_m2ap_initiatingmessage_choice_text[LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_N_ITEMS][50] = {
"MbmsSessionStartRequest",
"MbmsSessionStopRequest",
"MbmsSessionUpdateRequest",
"MbmsSchedulingInformation",
"Reset",
"M2SetupRequest",
"EnbConfigurationUpdate",
"MceConfigurationUpdate",
"MbmsServiceCountingRequest"
};
typedef union{
LIBLTE_M2AP_MESSAGE_MBMSSESSIONSTARTREQUEST_STRUCT MbmsSessionStartRequest;
//LIBLTE_M2AP_MBMS_SESSION_STOP_REQUEST MbmsSessionStopRequest;
//LIBLTE_M2AP_MBMS_SESSION_UPDATE_REQUEST MbmsSessionUpdateRequest;
LIBLTE_M2AP_MESSAGE_MBMSSCHEDULINGINFORMATION_STRUCT MbmsSchedulingInformation;
//LIBLTE_M2AP_RESET Reset;
LIBLTE_M2AP_MESSAGE_M2SETUPREQUEST_STRUCT M2SetupRequest;
//LIBLTE_M2AP_ENB_CONFIGURATION_UPDATE EnbConfigurationUpdate;
//LIBLTE_M2AP_MCE_CONFIGURATION_UPDATE MceConfigurationUpdate;
//LIBLTE_M2AP_MBMS_SERVICE_COUNTING_REQUEST MbmsServiceCountingRequest
}LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_UNION;
typedef struct{
uint8_t procedureCode;
LIBLTE_M2AP_CRITICALITY_ENUM criticality;
LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_UNION choice;
LIBLTE_M2AP_INITIATINGMESSAGE_CHOICE_ENUM choice_type;
}LIBLTE_M2AP_INITIATINGMESSAGE_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_initiatingmessage(
LIBLTE_M2AP_INITIATINGMESSAGE_STRUCT *msg,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_initiatingmessage(
uint8_t **ptr,
LIBLTE_M2AP_INITIATINGMESSAGE_STRUCT *msg);
/*******************************************************************************
* UnsuccessfulOutcome CHOICE
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_UNSUCCESSFULOUTCOME_CHOICE_MBMSSESSIONSTARTFAILURE,
LIBLTE_M2AP_UNSUCCESSFULOUTCOME_CHOICE_MBMSSESSIONUPDATEFAILURE,
LIBLTE_M2AP_UNSUCCESSFULOUTCOME_CHOICE_M2SETUPFAILURE,
LIBLTE_M2AP_UNSUCCESSFULOUTCOME_CHOICE_ENBCONFIGURATIONUPDATEFAILURE,
LIBLTE_M2AP_UNSUCCESSFULOUTCOME_CHOICE_MCECONFIGURATIONUPDATEFAILURE,
LIBLTE_M2AP_UNSUCCESSFULOUTCOME_CHOICE_MBMSSERVICECOUNTINGFAILURE,
LIBLTE_M2AP_UNSUCCESSFULOUTCOME_CHOICE_N_ITEMS,
}LIBLTE_M2AP_UNSUCCESSFULOUTCOME_CHOICE_ENUM;
static const char liblte_m2ap_unsuccessfuloutcome_choice_text[LIBLTE_M2AP_UNSUCCESSFULOUTCOME_CHOICE_N_ITEMS][50] = {
"MbmsSessionStartFailure",
"Mbmssessionupdatefailure",
"M2SetupFailure",
"EnbConfigurationUpdateFailure",
"MceConfigurationUpdateFailure",
};
typedef union{
//LIBLTE_S1AP_MESSAGE_S1SETUPFAILURE_STRUCT S1SetupFailure;
//LIBLTE_S1AP_MESSAGE_HANDOVERFAILURE_STRUCT HandoverFailure;
//LIBLTE_S1AP_MESSAGE_MMECONFIGURATIONUPDATEFAILURE_STRUCT MMEConfigurationUpdateFailure;
}LIBLTE_M2AP_UNSUCCESSFULOUTCOME_CHOICE_UNION;
typedef struct{
uint8_t procedureCode;
LIBLTE_M2AP_CRITICALITY_ENUM criticality;
LIBLTE_M2AP_UNSUCCESSFULOUTCOME_CHOICE_UNION choice;
LIBLTE_M2AP_UNSUCCESSFULOUTCOME_CHOICE_ENUM choice_type;
}LIBLTE_M2AP_UNSUCCESSFULOUTCOME_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_unsuccessfuloutcome(
LIBLTE_M2AP_UNSUCCESSFULOUTCOME_STRUCT *msg,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_unsuccessfuloutcome(
uint8_t **ptr,
LIBLTE_M2AP_UNSUCCESSFULOUTCOME_STRUCT *msg);
/*******************************************************************************
* SuccessfulOutcome CHOICE
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_MBMSSESSIONSTARTRESPONSE,
LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_MBMSSESSIONSTOPRESPONSE,
LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_MBMSSESSIONUPDATERESPONSE,
LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_MBMSSCHEDULINGINFORMATIONRESPONSE,
LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_RESETACKNOWLEDGE,
LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_M2SETUPRESPONSE,
LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_ENBCONFIGURATIONUPDATEACKNOWLEDGE,
LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_MCECONFIGURATIONUPDATEACKNOWLEDGE,
LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_MBMSSERVICECOUNTINGRESPONSE,
LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_N_ITEMS,
}LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_ENUM;
static const char liblte_m2ap_successfuloutcome_choice_text[LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_N_ITEMS][50] = {
"MbmsSessionStartResponse",
"MbmsSessionStopResponse",
"MbmsSessionUpdateResponse",
"MbmsSchedulingInformationResponse",
"ResetAcknowledge",
"M2SetupResponse",
"EnbConfigurationUpdateAcknowledge",
"MceConfigurationUpdateAcknowledge",
"MbmsServiceCountingResponse",
};
typedef union {
LIBLTE_M2AP_MESSAGE_M2SETUPRESPONSE_STRUCT M2SetupResponse;
LIBLTE_M2AP_MESSAGE_MBMSSESSIONSTARTRESPONSE_STRUCT MbmsSessionStartResponse;
LIBLTE_M2AP_MESSAGE_MBMSSCHEDULINGINFORMATIONRESPONSE_STRUCT MbmsSchedulingInformationResponse;
} LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_UNION;
typedef struct{
uint8_t procedureCode;
LIBLTE_M2AP_CRITICALITY_ENUM criticality;
LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_UNION choice;
LIBLTE_M2AP_SUCCESSFULOUTCOME_CHOICE_ENUM choice_type;
}LIBLTE_M2AP_SUCCESSFULOUTCOME_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_successfuloutcome(
LIBLTE_M2AP_SUCCESSFULOUTCOME_STRUCT *msg,
uint8_t **ptr);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_successfuloutcome(
uint8_t **ptr,
LIBLTE_M2AP_SUCCESSFULOUTCOME_STRUCT *msg);
/*******************************************************************************
* M2AP_PDU CHOICE
*******************************************************************************/
typedef enum{
LIBLTE_M2AP_M2AP_PDU_CHOICE_INITIATINGMESSAGE,
LIBLTE_M2AP_M2AP_PDU_CHOICE_SUCCESSFULOUTCOME,
LIBLTE_M2AP_M2AP_PDU_CHOICE_UNSUCCESSFULOUTCOME,
LIBLTE_M2AP_M2AP_PDU_CHOICE_N_ITEMS,
}LIBLTE_M2AP_M2AP_PDU_CHOICE_ENUM;
static const char liblte_m2ap_m2ap_pdu_choice_text[LIBLTE_M2AP_M2AP_PDU_CHOICE_N_ITEMS][50] = {
"initiatingMessage",
"successfulOutcome",
"unsuccessfulOutcome",
};
typedef union{
LIBLTE_M2AP_INITIATINGMESSAGE_STRUCT initiatingMessage;
LIBLTE_M2AP_SUCCESSFULOUTCOME_STRUCT successfulOutcome;
LIBLTE_M2AP_UNSUCCESSFULOUTCOME_STRUCT unsuccessfulOutcome;
}LIBLTE_M2AP_M2AP_PDU_CHOICE_UNION;
typedef struct{
bool ext;
LIBLTE_M2AP_M2AP_PDU_CHOICE_UNION choice;
LIBLTE_M2AP_M2AP_PDU_CHOICE_ENUM choice_type;
}LIBLTE_M2AP_M2AP_PDU_STRUCT;
LIBLTE_ERROR_ENUM liblte_m2ap_pack_m2ap_pdu(
LIBLTE_M2AP_M2AP_PDU_STRUCT *m2ap_pdu,
LIBLTE_BYTE_MSG_STRUCT *msg);
LIBLTE_ERROR_ENUM liblte_m2ap_unpack_m2ap_pdu(
LIBLTE_BYTE_MSG_STRUCT *msg,
LIBLTE_M2AP_M2AP_PDU_STRUCT *m2ap_pdu);
#endif // SRSLTE_LIBLTE_M2AP_H