/*
 * 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 <osmocom/ranap/RANAP_GTP-TEI.h>
#include <osmocom/ranap/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>
