/*
 * 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_ToBeReleased_SgNBRelConf_Item_H_
#define	_E_RABs_ToBeReleased_SgNBRelConf_Item_H_


#include <asn_application.h>

/* Including external dependencies */
#include "E-RAB-ID.h"
#include "EN-DC-ResourceConfiguration.h"
#include <constr_CHOICE.h>
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR {
	E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR_NOTHING,	/* No components present */
	E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR_sgNBPDCPpresent,
	E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR_sgNBPDCPnotpresent
	/* Extensions may appear below */
	
} E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR;

/* Forward declarations */
struct ProtocolExtensionContainer;
struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent;
struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent;

/* E-RABs-ToBeReleased-SgNBRelConf-Item */
typedef struct E_RABs_ToBeReleased_SgNBRelConf_Item {
	E_RAB_ID_t	 e_RAB_ID;
	EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
	struct E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration {
		E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_PR present;
		union E_RABs_ToBeReleased_SgNBRelConf_Item__resource_configuration_u {
			struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
			struct E_RABs_ToBeReleased_SgNBRelConf_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
			/*
			 * This type is extensible,
			 * possible extensions are below.
			 */
		} choice;
		
		/* Context for parsing across buffer boundaries */
		asn_struct_ctx_t _asn_ctx;
	} resource_configuration;
	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_ToBeReleased_SgNBRelConf_Item_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeReleased_SgNBRelConf_Item;

#ifdef __cplusplus
}
#endif

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