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


#include <asn_application.h>

/* Including external dependencies */
#include "RANAP_RequestedMBMSIPMulticastAddressandAPNRequest.h"
#include "RANAP_RequestedMulticastServiceList.h"
#include <constr_CHOICE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RANAP_InformationRequested_PR {
	RANAP_InformationRequested_PR_NOTHING,	/* No components present */
	RANAP_InformationRequested_PR_requestedMBMSIPMulticastAddressandAPNRequest,
	RANAP_InformationRequested_PR_requestedMulticastServiceList,
	/* Extensions may appear below */
	
} RANAP_InformationRequested_PR;

/* RANAP_InformationRequested */
typedef struct RANAP_InformationRequested {
	RANAP_InformationRequested_PR present;
	union RANAP_InformationRequested_u {
		RANAP_RequestedMBMSIPMulticastAddressandAPNRequest_t	 requestedMBMSIPMulticastAddressandAPNRequest;
		RANAP_RequestedMulticastServiceList_t	 requestedMulticastServiceList;
		/*
		 * This type is extensible,
		 * possible extensions are below.
		 */
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RANAP_InformationRequested_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANAP_InformationRequested;

#ifdef __cplusplus
}
#endif

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