/*
 * 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_SDU_FormatInformationParameters_H_
#define	_RANAP_SDU_FormatInformationParameters_H_


#include <asn_application.h>

/* Including external dependencies */
#include <asn_SEQUENCE_OF.h>
#include "RANAP_SubflowSDU-Size.h"
#include "RANAP_RAB-SubflowCombinationBitRate.h"
#include "RANAP_IE-Extensions.h"
#include <constr_SEQUENCE.h>
#include <constr_SEQUENCE_OF.h>

#ifdef __cplusplus
extern "C" {
#endif

/* RANAP_SDU-FormatInformationParameters */
typedef struct RANAP_SDU_FormatInformationParameters {
	A_SEQUENCE_OF(struct Member {
		RANAP_SubflowSDU_Size_t	*subflowSDU_Size	/* OPTIONAL */;
		RANAP_RAB_SubflowCombinationBitRate_t	*rAB_SubflowCombinationBitRate	/* 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;
	} ) list;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} RANAP_SDU_FormatInformationParameters_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANAP_SDU_FormatInformationParameters;

#ifdef __cplusplus
}
#endif

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