/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "HNBAP-IEs"
 * 	found in "../../asn1/hnbap/HNBAP-IEs.asn"
 * 	`asn1c -gen-PER`
 */

#ifndef	_UE_Identity_H_
#define	_UE_Identity_H_


#include <asn_application.h>

/* Including external dependencies */
#include <osmocom/osmo-iuh/hnbap/IMSI.h>
#include <osmocom/osmo-iuh/hnbap/TMSILAI.h>
#include <osmocom/osmo-iuh/hnbap/PTMSIRAI.h>
#include <osmocom/osmo-iuh/hnbap/IMEI.h>
#include <osmocom/osmo-iuh/hnbap/ESN.h>
#include <osmocom/osmo-iuh/hnbap/IMSIDS41.h>
#include <osmocom/osmo-iuh/hnbap/IMSIESN.h>
#include <osmocom/osmo-iuh/hnbap/TMSIDS41.h>
#include <constr_CHOICE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum UE_Identity_PR {
	UE_Identity_PR_NOTHING,	/* No components present */
	UE_Identity_PR_iMSI,
	UE_Identity_PR_tMSILAI,
	UE_Identity_PR_pTMSIRAI,
	UE_Identity_PR_iMEI,
	UE_Identity_PR_eSN,
	UE_Identity_PR_iMSIDS41,
	UE_Identity_PR_iMSIESN,
	UE_Identity_PR_tMSIDS41,
	/* Extensions may appear below */
	
} UE_Identity_PR;

/* UE-Identity */
typedef struct UE_Identity {
	UE_Identity_PR present;
	union UE_Identity_u {
		IMSI_t	 iMSI;
		TMSILAI_t	 tMSILAI;
		PTMSIRAI_t	 pTMSIRAI;
		IMEI_t	 iMEI;
		ESN_t	 eSN;
		IMSIDS41_t	 iMSIDS41;
		IMSIESN_t	 iMSIESN;
		TMSIDS41_t	 tMSIDS41;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} UE_Identity_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_UE_Identity;

#ifdef __cplusplus
}
#endif

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