/*
 * 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 -fnative-types`
 */

#ifndef	_RABListItem_H_
#define	_RABListItem_H_


#include <asn_application.h>

/* Including external dependencies */
#include "RAB-ID.h"
#include "TransportInfo.h"
#include "CN-DomainIndicator.h"
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Forward declarations */
struct IE_Extensions;

/* RABListItem */
typedef struct RABListItem {
	RAB_ID_t	 rAB_ID;
	TransportInfo_t	 old_transport_Info;
	TransportInfo_t	 new_transport_Info;
	CN_DomainIndicator_t	 cn_domain_indicator;
	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;
} RABListItem_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RABListItem;

#ifdef __cplusplus
}
#endif

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

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