/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "RANAP-IEs"
 * 	found in "../../asn1/ranap/RANAP-IEs.asn"
 */

#ifndef	_RANAP_IuTransportAssociation_H_
#define	_RANAP_IuTransportAssociation_H_


#include <asn_application.h>

/* Including external dependencies */
#include "RANAP_GTP-TEI.h"
#include "RANAP_BindingID.h"
#include <constr_CHOICE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RANAP_IuTransportAssociation_PR {
	RANAP_IuTransportAssociation_PR_NOTHING,	/* No components present */
	RANAP_IuTransportAssociation_PR_gTP_TEI,
	RANAP_IuTransportAssociation_PR_bindingID,
	/* Extensions may appear below */
	
} RANAP_IuTransportAssociation_PR;

/* RANAP_IuTransportAssociation */
typedef struct RANAP_IuTransportAssociation {
	RANAP_IuTransportAssociation_PR present;
	union RANAP_IuTransportAssociation_u {
		RANAP_GTP_TEI_t	 gTP_TEI;
		RANAP_BindingID_t	 bindingID;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RANAP_IuTransportAssociation_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANAP_IuTransportAssociation;

#ifdef __cplusplus
}
#endif

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