/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "S1AP-IEs"
 * 	found in "./asn1c/S1AP-IEs.asn"
 * 	`asn1c -fcompound-names -fno-include-deps -gen-PER -findirect-choice -pdu=S1AP-PDU`
 */

#ifndef	_RIMRoutingAddress_H_
#define	_RIMRoutingAddress_H_


#include <asn_application.h>

/* Including external dependencies */
#include <OCTET_STRING.h>
#include <constr_CHOICE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RIMRoutingAddress_PR {
	RIMRoutingAddress_PR_NOTHING,	/* No components present */
	RIMRoutingAddress_PR_gERAN_Cell_ID,
	/* Extensions may appear below */
	RIMRoutingAddress_PR_targetRNC_ID,
	RIMRoutingAddress_PR_eHRPD_Sector_ID
} RIMRoutingAddress_PR;

/* Forward declarations */
struct GERAN_Cell_ID;
struct TargetRNC_ID;

/* RIMRoutingAddress */
typedef struct RIMRoutingAddress {
	RIMRoutingAddress_PR present;
	union RIMRoutingAddress_u {
		struct GERAN_Cell_ID	*gERAN_Cell_ID;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
		struct TargetRNC_ID	*targetRNC_ID;
		OCTET_STRING_t	 eHRPD_Sector_ID;
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RIMRoutingAddress_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RIMRoutingAddress;
extern asn_CHOICE_specifics_t asn_SPC_RIMRoutingAddress_specs_1;
extern asn_TYPE_member_t asn_MBR_RIMRoutingAddress_1[3];
extern asn_per_constraints_t asn_PER_type_RIMRoutingAddress_constr_1;

#ifdef __cplusplus
}
#endif

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