/*
 * 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 "RANAP_IMEIList.h"
#include "RANAP_IMEISVList.h"
#include "RANAP_IMEIGroup.h"
#include "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>
