/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "RANAP-PDU"
 * 	found in "../../asn1/ranap/RANAP-PDU.asn"
 */

#ifndef	_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_H_
#define	_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_H_


#include <asn_application.h>

/* Including external dependencies */
#include "RANAP_RAB-ID.h"
#include "RANAP_TransportLayerAddress.h"
#include "RANAP_IuTransportAssociation.h"
#include "RANAP_Ass-RAB-Parameters.h"
#include "RANAP_ProtocolExtensionContainer.h"
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* RANAP_RAB-SetupItem-EnhancedRelocCompleteReq */
typedef struct RANAP_RAB_SetupItem_EnhancedRelocCompleteReq {
	RANAP_RAB_ID_t	 rAB_ID;
	RANAP_TransportLayerAddress_t	*transportLayerAddressReq1	/* OPTIONAL */;
	RANAP_IuTransportAssociation_t	*iuTransportAssociationReq1	/* OPTIONAL */;
	RANAP_Ass_RAB_Parameters_t	*ass_RAB_Parameters	/* OPTIONAL */;
	RANAP_ProtocolExtensionContainer_t	*iE_Extensions	/* OPTIONAL */;
	/*
	 * This type is extensible,
	 * possible extensions are below.
	 */
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq;

#ifdef __cplusplus
}
#endif

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