/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "E2AP-PDU-Descriptions"
 * 	found in "Spec/e2_and_x2-combined-and-minimized.asn1"
 * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
 */

#ifndef	_RICInitiatingMessage_H_
#define	_RICInitiatingMessage_H_


#include "asn_application.h"

/* Including external dependencies */
#include "ProcedureCode.h"
#include "Criticality.h"
#include "ANY.h"
#include "asn_ioc.h"
#include "RICsubscriptionRequest.h"
#include "RICsubscriptionResponse.h"
#include "RICsubscriptionFailure.h"
#include "RICsubscriptionDeleteRequest.h"
#include "RICsubscriptionDeleteResponse.h"
#include "RICsubscriptionDeleteFailure.h"
#include "RICserviceUpdate.h"
#include "RICserviceUpdateAcknowledge.h"
#include "RICserviceUpdateFailure.h"
#include "RICcontrolRequest.h"
#include "RICcontrolAcknowledge.h"
#include "RICcontrolFailure.h"
#include "X2SetupRequest.h"
#include "X2SetupResponse.h"
#include "X2SetupFailure.h"
#include "ENDCX2SetupRequest.h"
#include "ENDCX2SetupResponse.h"
#include "ENDCX2SetupFailure.h"
#include "ResourceStatusRequest.h"
#include "ResourceStatusResponse.h"
#include "ResourceStatusFailure.h"
#include "ENBConfigurationUpdate.h"
#include "ENBConfigurationUpdateAcknowledge.h"
#include "ENBConfigurationUpdateFailure.h"
#include "ENDCConfigurationUpdate.h"
#include "ENDCConfigurationUpdateAcknowledge.h"
#include "ENDCConfigurationUpdateFailure.h"
#include "ResetRequest.h"
#include "ResetResponse.h"
#include "RICindication.h"
#include "RICserviceQuery.h"
#include "LoadInformation.h"
#include "GNBStatusIndication.h"
#include "ResourceStatusUpdate.h"
#include "ErrorIndication.h"
#include "OPEN_TYPE.h"
#include "constr_CHOICE.h"
#include "constr_SEQUENCE.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RICInitiatingMessage__value_PR {
	RICInitiatingMessage__value_PR_NOTHING,	/* No components present */
	RICInitiatingMessage__value_PR_RICsubscriptionRequest,
	RICInitiatingMessage__value_PR_RICsubscriptionDeleteRequest,
	RICInitiatingMessage__value_PR_RICserviceUpdate,
	RICInitiatingMessage__value_PR_RICcontrolRequest,
	RICInitiatingMessage__value_PR_X2SetupRequest,
	RICInitiatingMessage__value_PR_ENDCX2SetupRequest,
	RICInitiatingMessage__value_PR_ResourceStatusRequest,
	RICInitiatingMessage__value_PR_ENBConfigurationUpdate,
	RICInitiatingMessage__value_PR_ENDCConfigurationUpdate,
	RICInitiatingMessage__value_PR_ResetRequest,
	RICInitiatingMessage__value_PR_RICindication,
	RICInitiatingMessage__value_PR_RICserviceQuery,
	RICInitiatingMessage__value_PR_LoadInformation,
	RICInitiatingMessage__value_PR_GNBStatusIndication,
	RICInitiatingMessage__value_PR_ResourceStatusUpdate,
	RICInitiatingMessage__value_PR_ErrorIndication
} RICInitiatingMessage__value_PR;

/* RICInitiatingMessage */
typedef struct RICInitiatingMessage {
	ProcedureCode_t	 procedureCode;
	Criticality_t	 criticality;
	struct RICInitiatingMessage__value {
		RICInitiatingMessage__value_PR present;
		union RICInitiatingMessage__value_u {
			RICsubscriptionRequest_t	 RICsubscriptionRequest;
			RICsubscriptionDeleteRequest_t	 RICsubscriptionDeleteRequest;
			RICserviceUpdate_t	 RICserviceUpdate;
			RICcontrolRequest_t	 RICcontrolRequest;
			X2SetupRequest_t	 X2SetupRequest;
			ENDCX2SetupRequest_t	 ENDCX2SetupRequest;
			ResourceStatusRequest_t	 ResourceStatusRequest;
			ENBConfigurationUpdate_t	 ENBConfigurationUpdate;
			ENDCConfigurationUpdate_t	 ENDCConfigurationUpdate;
			ResetRequest_t	 ResetRequest;
			RICindication_t	 RICindication;
			RICserviceQuery_t	 RICserviceQuery;
			LoadInformation_t	 LoadInformation;
			GNBStatusIndication_t	 GNBStatusIndication;
			ResourceStatusUpdate_t	 ResourceStatusUpdate;
			ErrorIndication_t	 ErrorIndication;
		} choice;
		
		/* Context for parsing across buffer boundaries */
		asn_struct_ctx_t _asn_ctx;
	} value;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RICInitiatingMessage_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RICInitiatingMessage;
extern asn_SEQUENCE_specifics_t asn_SPC_RICInitiatingMessage_specs_1;
extern asn_TYPE_member_t asn_MBR_RICInitiatingMessage_1[3];

#ifdef __cplusplus
}
#endif

#endif	/* _RICInitiatingMessage_H_ */
#include "asn_internal.h"
