/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "X2AP-IEs"
 * 	found in "Spec/e2_and_x2-combined-and-minimized.asn1"
 * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
 */

#ifndef	_EUTRA_Mode_Info_H_
#define	_EUTRA_Mode_Info_H_


#include "asn_application.h"

/* Including external dependencies */
#include "FDD-Info.h"
#include "TDD-Info.h"
#include "constr_CHOICE.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum EUTRA_Mode_Info_PR {
	EUTRA_Mode_Info_PR_NOTHING,	/* No components present */
	EUTRA_Mode_Info_PR_fDD,
	EUTRA_Mode_Info_PR_tDD
	/* Extensions may appear below */
	
} EUTRA_Mode_Info_PR;

/* EUTRA-Mode-Info */
typedef struct EUTRA_Mode_Info {
	EUTRA_Mode_Info_PR present;
	union EUTRA_Mode_Info_u {
		FDD_Info_t	 fDD;
		TDD_Info_t	 tDD;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} EUTRA_Mode_Info_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_EUTRA_Mode_Info;
extern asn_CHOICE_specifics_t asn_SPC_EUTRA_Mode_Info_specs_1;
extern asn_TYPE_member_t asn_MBR_EUTRA_Mode_Info_1[2];
extern asn_per_constraints_t asn_PER_type_EUTRA_Mode_Info_constr_1;

#ifdef __cplusplus
}
#endif

#endif	/* _EUTRA_Mode_Info_H_ */
#include "asn_internal.h"
