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

#ifndef	_HNBConfigTransferRequest_H_
#define	_HNBConfigTransferRequest_H_


#include <asn_application.h>

/* Including external dependencies */
#include <asn_SEQUENCE_OF.h>
#include <constr_SEQUENCE_OF.h>
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Forward declarations */
struct IE;

/* HNBConfigTransferRequest */
typedef struct HNBConfigTransferRequest {
	struct hnbConfigTransferRequest_ies {
		A_SEQUENCE_OF(struct IE) list;
		
		/* Context for parsing across buffer boundaries */
		asn_struct_ctx_t _asn_ctx;
	} hnbConfigTransferRequest_ies;
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} HNBConfigTransferRequest_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_HNBConfigTransferRequest;

#ifdef __cplusplus
}
#endif

/* Referred external types */
#include <osmocom/hnbap/IE.h>

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