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


#include <asn_application.h>

/* Including external dependencies */
#include <NativeEnumerated.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum CauseRadioNetwork {
	CauseRadioNetwork_overload	= 0,
	CauseRadioNetwork_unauthorised_Location	= 1,
	CauseRadioNetwork_unauthorised_HNB	= 2,
	CauseRadioNetwork_hNB_parameter_mismatch	= 3,
	CauseRadioNetwork_invalid_UE_identity	= 4,
	CauseRadioNetwork_uE_not_allowed_on_this_HNB	= 5,
	CauseRadioNetwork_uE_unauthorised	= 6,
	CauseRadioNetwork_connection_with_UE_lost	= 7,
	CauseRadioNetwork_ue_RRC_release	= 8,
	CauseRadioNetwork_hNB_not_registered	= 9,
	CauseRadioNetwork_unspecified	= 10,
	CauseRadioNetwork_normal	= 11,
	CauseRadioNetwork_uE_relocated	= 12,
	CauseRadioNetwork_ue_registered_in_another_HNB	= 13,
	/*
	 * Enumeration is extensible
	 */
	CauseRadioNetwork_no_neighbour_information_available	= 14,
	CauseRadioNetwork_iurh_connection_to_that_neighbour_not_Allowed	= 15
} e_CauseRadioNetwork;

/* CauseRadioNetwork */
typedef long	 CauseRadioNetwork_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_CauseRadioNetwork;
asn_struct_free_f CauseRadioNetwork_free;
asn_struct_print_f CauseRadioNetwork_print;
asn_constr_check_f CauseRadioNetwork_constraint;
ber_type_decoder_f CauseRadioNetwork_decode_ber;
der_type_encoder_f CauseRadioNetwork_encode_der;
xer_type_decoder_f CauseRadioNetwork_decode_xer;
xer_type_encoder_f CauseRadioNetwork_encode_xer;
per_type_decoder_f CauseRadioNetwork_decode_uper;
per_type_encoder_f CauseRadioNetwork_encode_uper;
per_type_decoder_f CauseRadioNetwork_decode_aper;
per_type_encoder_f CauseRadioNetwork_encode_aper;

#ifdef __cplusplus
}
#endif

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