/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "HNBAP-IEs"
 * 	found in "../../asn1/hnbap/HNBAP-IEs.asn"
 * 	`asn1c -gen-PER`
 */

#ifndef	_MacroCoverageInformation_H_
#define	_MacroCoverageInformation_H_


#include <asn_application.h>

/* Including external dependencies */
#include "MacroCellID.h"
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Forward declarations */
struct IE_Extensions;

/* MacroCoverageInformation */
typedef struct MacroCoverageInformation {
	MacroCellID_t	 cellIdentity;
	struct IE_Extensions	*iE_Extensions	/* OPTIONAL */;
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} MacroCoverageInformation_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_MacroCoverageInformation;

#ifdef __cplusplus
}
#endif

/* Referred external types */
#include "IE-Extensions.h"

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