/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "X2AP-PDU-Contents"
 * 	found in "Spec/e2ap-v031ex.asn"
 * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER`
 */

#ifndef	_E_RABs_ToBeAdded_SgNBModReq_Item_H_
#define	_E_RABs_ToBeAdded_SgNBModReq_Item_H_


#include <asn_application.h>

/* Including external dependencies */
#include "E-RAB-ID.h"
#include "DRB-ID.h"
#include "EN-DC-ResourceConfiguration.h"
#include <constr_CHOICE.h>
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR {
	E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR_NOTHING,	/* No components present */
	E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPpresent,
	E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR_sgNBPDCPnotpresent
	/* Extensions may appear below */
	
} E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR;

/* Forward declarations */
struct ProtocolExtensionContainer;
struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent;
struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent;

/* E-RABs-ToBeAdded-SgNBModReq-Item */
typedef struct E_RABs_ToBeAdded_SgNBModReq_Item {
	E_RAB_ID_t	 e_RAB_ID;
	DRB_ID_t	 drb_ID;
	EN_DC_ResourceConfiguration_t	 en_DC_ResourceConfiguration;
	struct E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration {
		E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_PR present;
		union E_RABs_ToBeAdded_SgNBModReq_Item__resource_configuration_u {
			struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPpresent	*sgNBPDCPpresent;
			struct E_RABs_ToBeAdded_SgNBModReq_Item_SgNBPDCPnotpresent	*sgNBPDCPnotpresent;
			/*
			 * This type is extensible,
			 * possible extensions are below.
			 */
		} choice;
		
		/* Context for parsing across buffer boundaries */
		asn_struct_ctx_t _asn_ctx;
	} resource_configuration;
	struct ProtocolExtensionContainer	*iE_Extensions;	/* OPTIONAL */
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} E_RABs_ToBeAdded_SgNBModReq_Item_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_E_RABs_ToBeAdded_SgNBModReq_Item;

#ifdef __cplusplus
}
#endif

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