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

#ifndef	_ULConfiguration_H_
#define	_ULConfiguration_H_


#include <asn_application.h>

/* Including external dependencies */
#include "UL-UE-Configuration.h"
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Forward declarations */
struct ProtocolExtensionContainer;

/* ULConfiguration */
typedef struct ULConfiguration {
	UL_UE_Configuration_t	 uL_PDCP;
	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;
} ULConfiguration_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_ULConfiguration;
extern asn_SEQUENCE_specifics_t asn_SPC_ULConfiguration_specs_1;
extern asn_TYPE_member_t asn_MBR_ULConfiguration_1[2];

#ifdef __cplusplus
}
#endif

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