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


#include <asn_application.h>

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

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RANAP_RAB_AsymmetryIndicator {
	RANAP_RAB_AsymmetryIndicator_symmetric_bidirectional	= 0,
	RANAP_RAB_AsymmetryIndicator_asymmetric_unidirectional_downlink	= 1,
	RANAP_RAB_AsymmetryIndicator_asymmetric_unidirectional_uplink	= 2,
	RANAP_RAB_AsymmetryIndicator_asymmetric_bidirectional	= 3
	/*
	 * Enumeration is extensible
	 */
} e_RANAP_RAB_AsymmetryIndicator;

/* RANAP_RAB-AsymmetryIndicator */
typedef long	 RANAP_RAB_AsymmetryIndicator_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_AsymmetryIndicator;
asn_struct_free_f RANAP_RAB_AsymmetryIndicator_free;
asn_struct_print_f RANAP_RAB_AsymmetryIndicator_print;
asn_constr_check_f RANAP_RAB_AsymmetryIndicator_constraint;
ber_type_decoder_f RANAP_RAB_AsymmetryIndicator_decode_ber;
der_type_encoder_f RANAP_RAB_AsymmetryIndicator_encode_der;
xer_type_decoder_f RANAP_RAB_AsymmetryIndicator_decode_xer;
xer_type_encoder_f RANAP_RAB_AsymmetryIndicator_encode_xer;
per_type_decoder_f RANAP_RAB_AsymmetryIndicator_decode_uper;
per_type_encoder_f RANAP_RAB_AsymmetryIndicator_encode_uper;
per_type_decoder_f RANAP_RAB_AsymmetryIndicator_decode_aper;
per_type_encoder_f RANAP_RAB_AsymmetryIndicator_encode_aper;

#ifdef __cplusplus
}
#endif

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