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

#ifndef	_RANAP_SourceRNC_ToTargetRNC_TransparentContainer_H_
#define	_RANAP_SourceRNC_ToTargetRNC_TransparentContainer_H_


#include <asn_application.h>

/* Including external dependencies */
#include <osmocom/ranap/RANAP_RRC-Container.h>
#include <osmocom/ranap/RANAP_NumberOfIuInstances.h>
#include <osmocom/ranap/RANAP_RelocationType.h>
#include <osmocom/ranap/RANAP_ChosenIntegrityProtectionAlgorithm.h>
#include <osmocom/ranap/RANAP_IntegrityProtectionKey.h>
#include <osmocom/ranap/RANAP_ChosenEncryptionAlgorithm.h>
#include <osmocom/ranap/RANAP_EncryptionKey.h>
#include <osmocom/ranap/RANAP_D-RNTI.h>
#include <osmocom/ranap/RANAP_TargetCellId.h>
#include <osmocom/ranap/RANAP_RAB-TrCH-Mapping.h>
#include <osmocom/ranap/RANAP_IE-Extensions.h>
#include <constr_SEQUENCE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* RANAP_SourceRNC-ToTargetRNC-TransparentContainer */
typedef struct RANAP_SourceRNC_ToTargetRNC_TransparentContainer {
	RANAP_RRC_Container_t	 rRC_Container;
	RANAP_NumberOfIuInstances_t	 numberOfIuInstances;
	RANAP_RelocationType_t	 relocationType;
	RANAP_ChosenIntegrityProtectionAlgorithm_t	*chosenIntegrityProtectionAlgorithm	/* OPTIONAL */;
	RANAP_IntegrityProtectionKey_t	*integrityProtectionKey	/* OPTIONAL */;
	RANAP_ChosenEncryptionAlgorithm_t	*chosenEncryptionAlgorithForSignalling	/* OPTIONAL */;
	RANAP_EncryptionKey_t	*cipheringKey	/* OPTIONAL */;
	RANAP_ChosenEncryptionAlgorithm_t	*chosenEncryptionAlgorithForCS	/* OPTIONAL */;
	RANAP_ChosenEncryptionAlgorithm_t	*chosenEncryptionAlgorithForPS	/* OPTIONAL */;
	RANAP_D_RNTI_t	*d_RNTI	/* OPTIONAL */;
	RANAP_TargetCellId_t	*targetCellId	/* OPTIONAL */;
	RANAP_RAB_TrCH_Mapping_t	*rAB_TrCH_Mapping	/* OPTIONAL */;
	RANAP_IE_Extensions_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_SourceRNC_ToTargetRNC_TransparentContainer_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANAP_SourceRNC_ToTargetRNC_TransparentContainer;

#ifdef __cplusplus
}
#endif

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