/*
 * 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_EquipmentsToBeTraced_H_
#define	_RANAP_EquipmentsToBeTraced_H_


#include <asn_application.h>

/* Including external dependencies */
#include <osmocom/ranap/RANAP_IMEIList.h>
#include <osmocom/ranap/RANAP_IMEISVList.h>
#include <osmocom/ranap/RANAP_IMEIGroup.h>
#include <osmocom/ranap/RANAP_IMEISVGroup.h>
#include <constr_CHOICE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RANAP_EquipmentsToBeTraced_PR {
	RANAP_EquipmentsToBeTraced_PR_NOTHING,	/* No components present */
	RANAP_EquipmentsToBeTraced_PR_iMEIlist,
	RANAP_EquipmentsToBeTraced_PR_iMEISVlist,
	RANAP_EquipmentsToBeTraced_PR_iMEIgroup,
	RANAP_EquipmentsToBeTraced_PR_iMEISVgroup,
	/* Extensions may appear below */
	
} RANAP_EquipmentsToBeTraced_PR;

/* RANAP_EquipmentsToBeTraced */
typedef struct RANAP_EquipmentsToBeTraced {
	RANAP_EquipmentsToBeTraced_PR present;
	union RANAP_EquipmentsToBeTraced_u {
		RANAP_IMEIList_t	 iMEIlist;
		RANAP_IMEISVList_t	 iMEISVlist;
		RANAP_IMEIGroup_t	 iMEIgroup;
		RANAP_IMEISVGroup_t	 iMEISVgroup;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RANAP_EquipmentsToBeTraced_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANAP_EquipmentsToBeTraced;

#ifdef __cplusplus
}
#endif

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