/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "X2AP-IEs"
 * 	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	_NRFreqInfo_H_
#define	_NRFreqInfo_H_


#include "asn_application.h"

/* Including external dependencies */
#include "NativeInteger.h"
#include "asn_SEQUENCE_OF.h"
#include "constr_SEQUENCE_OF.h"
#include "constr_SEQUENCE.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Forward declarations */
struct SULInformation;
struct ProtocolExtensionContainer;
struct FreqBandNrItem;

/* NRFreqInfo */
typedef struct NRFreqInfo {
	long	 nRARFCN;
	struct NRFreqInfo__freqBandListNr {
		A_SEQUENCE_OF(struct FreqBandNrItem) list;
		
		/* Context for parsing across buffer boundaries */
		asn_struct_ctx_t _asn_ctx;
	} freqBandListNr;
	struct SULInformation	*sULInformation;	/* OPTIONAL */
	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;
} NRFreqInfo_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_NRFreqInfo;
extern asn_SEQUENCE_specifics_t asn_SPC_NRFreqInfo_specs_1;
extern asn_TYPE_member_t asn_MBR_NRFreqInfo_1[4];

#ifdef __cplusplus
}
#endif

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