|
|
|
/*
|
|
|
|
* Copyright 2013-2020 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
|