/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "X2AP-PDU-Contents"
 * 	found in "X2AP-15-4-0.asn1"
 * 	`asn1c -D ./asn1_n1 -pdu=auto -fno-include-deps -fcompound-names -findirect-choice -gen-PER -gen-OER -no-gen-example`
 */

#ifndef	_E_RABs_ToBeAdded_Item_Split_Bearer_H_
#define	_E_RABs_ToBeAdded_Item_Split_Bearer_H_


#include <asn_application.h>

/* Including external dependencies */
#include "E-RAB-ID.h"
#include "E-RAB-Level-QoS-Parameters.h"
#include "GTPtunnelEndpoint.h"
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Forward declarations */
struct ProtocolExtensionContainer;

/* E-RABs-ToBeAdded-Item-Split-Bearer */
typedef struct E_RABs_ToBeAdded_Item_Split_Bearer {
	E_RAB_ID_t	 e_RAB_ID;
	E_RAB_Level_QoS_Parameters_t	 e_RAB_Level_QoS_Parameters;
	GTPtunnelEndpoint_t	 meNB_GTPtunnelEndpoint;
	struct ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} E_RABs_ToBeAdded_Item_Split_Bearer_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_Item_Split_Bearer;
extern asn_SEQUENCE_specifics_t asn_SPC_E_RABs_ToBeAdded_Item_Split_Bearer_specs_1;
extern asn_TYPE_member_t asn_MBR_E_RABs_ToBeAdded_Item_Split_Bearer_1[4];

#ifdef __cplusplus
}
#endif

#endif	/* _E_RABs_ToBeAdded_Item_Split_Bearer_H_ */
#include <asn_internal.h>
