diff --git a/asn1/ranap/RANAP-PDU.asn b/asn1/ranap/RANAP-PDU.asn
index cde8d25..e1066d2 100644
--- a/asn1/ranap/RANAP-PDU.asn
+++ b/asn1/ranap/RANAP-PDU.asn
@@ -13,7 +13,42 @@
 
 FROM RANAP-CommonDataTypes
 
-    maxProtocolIEs
+    Alt-RAB-Parameters,
+    Ass-RAB-Parameters,
+    Cause,
+    CN-DomainIndicator,
+    DataVolumeReference,
+    DataVolumeReportingIndication,
+    DL-GTP-PDU-SequenceNumber,
+    DL-N-PDU-SequenceNumber,
+    GERAN-Classmark,
+    GTP-TEI,
+    IPMulticastAddress,
+    IuSignallingConnectionIdentifier,
+    IuTransportAssociation,
+    MBMSHCIndicator,
+    NAS-PDU,
+    NAS-SynchronisationIndicator,
+    PDP-TypeInformation,
+    RAB-ID,
+    RAB-Parameters,
+    Requested-RAB-Parameter-Values,
+    SAPI,
+    Service-Handover,
+    TMGI,
+    TransportLayerAddress,
+    UL-GTP-PDU-SequenceNumber,
+    UL-N-PDU-SequenceNumber,
+    UnsuccessfullyTransmittedDataVolume,
+    UP-ModeVersions,
+    UserPlaneMode
+
+FROM RANAP-IEs
+
+    maxnoofMulticastServicesPerUE,
+    maxNrOfVol,
+    maxProtocolIEs,
+    maxProtocolExtensions
 
 FROM RANAP-Constants;
 
@@ -460,6 +495,13 @@
     ...
 }
 
+ProtocolExtensionContainer ::= SEQUENCE (SIZE (1..maxProtocolExtensions)) OF ProtocolExtensionField
+
+ProtocolExtensionField ::= SEQUENCE {
+    id ProtocolIE-ID,
+    criticality Criticality,
+    value ANY
+}
 
 IE ::= SEQUENCE {
     id ProtocolIE-ID,
@@ -587,5 +629,325 @@
 	...
 }
 
+RAB-DataVolumeReportList ::= SEQUENCE {
+	rabDataVolumeReportList-ies SEQUENCE (SIZE(0..maxProtocolIEs))
+OF IE,
+	...
+}
+
+RAB-DataVolumeReportItem ::= SEQUENCE {
+	rAB-ID					RAB-ID,
+	dl-UnsuccessfullyTransmittedDataVolume	DataVolumeList		OPTIONAL
+	-- This IE shall always be present although its presence is optional --,
+	iE-Extensions ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-ReleasedItem-IuRelComp	::= SEQUENCE {
+		rAB-ID				RAB-ID,
+		dL-GTP-PDU-SequenceNumber	DL-GTP-PDU-SequenceNumber 	OPTIONAL,
+		uL-GTP-PDU-SequenceNumber	UL-GTP-PDU-SequenceNumber 	OPTIONAL,
+		iE-Extensions			ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-RelocationReleaseItem ::= SEQUENCE {
+	rAB-ID						RAB-ID,
+	iE-Extensions					ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-DataForwardingItem ::= SEQUENCE {
+	rAB-ID						RAB-ID,
+	transportLayerAddress				TransportLayerAddress,
+	iuTransportAssociation				IuTransportAssociation,
+	iE-Extensions					ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-SetupItem-RelocReq ::= SEQUENCE {
+	rAB-ID				RAB-ID,
+	nAS-SynchronisationIndicator	NAS-SynchronisationIndicator	OPTIONAL,
+	rAB-Parameters			RAB-Parameters,
+	dataVolumeReportingIndication	DataVolumeReportingIndication 	OPTIONAL
+	-- This IE shall be present if the CN domain indicator IE is set to "PS domain" --,
+	pDP-TypeInformation		PDP-TypeInformation		OPTIONAL
+	-- This IE shall be present if the CN domain indicator IE is set to "PS domain" --,
+	userPlaneInformation		UserPlaneInformation,
+	transportLayerAddress		TransportLayerAddress,
+	iuTransportAssociation		IuTransportAssociation,
+	service-Handover		Service-Handover		OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+UserPlaneInformation ::= SEQUENCE {
+	userPlaneMode		UserPlaneMode,
+	uP-ModeVersions		UP-ModeVersions,
+	iE-Extensions		ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-SetupItem-RelocReqAck ::= SEQUENCE {
+	rAB-ID			RAB-ID,
+	transportLayerAddress	TransportLayerAddress	OPTIONAL,
+	iuTransportAssociation	IuTransportAssociation	OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-FailedItem ::= SEQUENCE {
+	rAB-ID		RAB-ID,
+	cause		Cause,
+	iE-Extensions	ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-ContextItem ::= SEQUENCE {
+	rAB-ID				RAB-ID,
+	dl-GTP-PDU-SequenceNumber	DL-GTP-PDU-SequenceNumber 	OPTIONAL,
+	ul-GTP-PDU-SequenceNumber	UL-GTP-PDU-SequenceNumber 	OPTIONAL,
+	dl-N-PDU-SequenceNumber		DL-N-PDU-SequenceNumber 	OPTIONAL,
+	ul-N-PDU-SequenceNumber		UL-N-PDU-SequenceNumber 	OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer	OPTIONAL,
+	...
+}
+
+RABs-ContextFailedtoTransferItem::= SEQUENCE {
+	rAB-ID		RAB-ID,
+	cause		Cause,
+	iE-Extensions	ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RABs-failed-to-reportItem::= SEQUENCE {
+	rAB-ID		RAB-ID,
+	cause		Cause,
+	iE-Extensions	ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+ResetResourceItem ::= SEQUENCE {
+	iuSigConId		IuSignallingConnectionIdentifier,
+	iE-Extensions		ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+ResetResourceAckItem ::= SEQUENCE {
+	iuSigConId		IuSignallingConnectionIdentifier,
+	iE-Extensions		ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-ReleaseItem ::= SEQUENCE {
+	rAB-ID		RAB-ID,
+	cause		Cause,
+	iE-Extensions	ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-SetupItem-EnhancedRelocCompleteReq ::= SEQUENCE {
+	rAB-ID				RAB-ID,
+	transportLayerAddressReq1	TransportLayerAddress	OPTIONAL,
+	iuTransportAssociationReq1	IuTransportAssociation	OPTIONAL,
+	ass-RAB-Parameters		Ass-RAB-Parameters OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-SetupItem-EnhancedRelocCompleteRes ::= SEQUENCE {
+	rAB-ID				RAB-ID,
+	rAB-Parameters			RAB-Parameters	OPTIONAL,
+	userPlaneInformation		UserPlaneInformation,
+	transportLayerAddressRes1	TransportLayerAddress	OPTIONAL,
+	iuTransportAssociationRes1	IuTransportAssociation	OPTIONAL,
+	rab2beReleasedList		RAB-ToBeReleasedList-EnhancedRelocCompleteRes OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-ToBeReleasedItem-EnhancedRelocCompleteRes ::= SEQUENCE {
+	rAB-ID		RAB-ID,
+	cause		Cause,
+	iE-Extensions	ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-SetupOrModifyItemFirst ::= SEQUENCE {
+	rAB-ID				RAB-ID,
+	nAS-SynchronisationIndicator	NAS-SynchronisationIndicator	OPTIONAL,
+	rAB-Parameters			RAB-Parameters			OPTIONAL,
+	userPlaneInformation		UserPlaneInformation		OPTIONAL,
+	transportLayerInformation	TransportLayerInformation	OPTIONAL,
+	service-Handover		Service-Handover		OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer	OPTIONAL,
+	...
+}
+
+TransportLayerInformation ::= SEQUENCE {
+	transportLayerAddress	TransportLayerAddress,
+	iuTransportAssociation	IuTransportAssociation,
+	iE-Extensions		ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-SetupOrModifyItemSecond ::= SEQUENCE {
+	pDP-TypeInformation				PDP-TypeInformation 		OPTIONAL,
+	dataVolumeReportingIndication			DataVolumeReportingIndication 	OPTIONAL,
+	dl-GTP-PDU-SequenceNumber			DL-GTP-PDU-SequenceNumber 	OPTIONAL,
+	ul-GTP-PDU-SequenceNumber			UL-GTP-PDU-SequenceNumber 	OPTIONAL,
+	dl-N-PDU-SequenceNumber				DL-N-PDU-SequenceNumber 	OPTIONAL,
+	ul-N-PDU-SequenceNumber				UL-N-PDU-SequenceNumber		OPTIONAL,
+	iE-Extensions					ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-SetupOrModifiedItem ::= SEQUENCE {
+	rAB-ID			RAB-ID,
+	transportLayerAddress	TransportLayerAddress	OPTIONAL,
+	iuTransportAssociation	IuTransportAssociation	OPTIONAL,
+	dl-dataVolumes		DataVolumeList		OPTIONAL,
+	iE-Extensions		ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-ReleasedItem ::= SEQUENCE {
+	rAB-ID				RAB-ID,
+	dl-dataVolumes			DataVolumeList		OPTIONAL,
+	dL-GTP-PDU-SequenceNumber	DL-GTP-PDU-SequenceNumber			OPTIONAL,
+	uL-GTP-PDU-SequenceNumber	UL-GTP-PDU-SequenceNumber			OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+DataVolumeList ::= SEQUENCE (SIZE (1..maxNrOfVol)) OF
+	SEQUENCE {
+		dl-UnsuccessfullyTransmittedDataVolume	UnsuccessfullyTransmittedDataVolume,
+		dataVolumeReference			DataVolumeReference	OPTIONAL,
+		iE-Extensions				ProtocolExtensionContainer OPTIONAL,
+		...
+	}
+
+RAB-QueuedItem ::= SEQUENCE {
+	rAB-ID		RAB-ID,
+	iE-Extensions	ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-ReleaseFailedList ::= RAB-FailedList
+
+GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item ::= SEQUENCE {
+	rAB-ID		RAB-ID,
+	cause		Cause,
+	gERAN-Classmark	GERAN-Classmark		OPTIONAL,
+	iE-Extensions	ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+DirectTransferInformationItem-RANAP-RelocInf ::= SEQUENCE {
+	nAS-PDU			NAS-PDU,
+	sAPI			SAPI,
+	cN-DomainIndicator	CN-DomainIndicator,
+	iE-Extensions		ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+RAB-ContextItem-RANAP-RelocInf ::= SEQUENCE {
+	rAB-ID				RAB-ID,
+	dl-GTP-PDU-SequenceNumber	DL-GTP-PDU-SequenceNumber 	OPTIONAL,
+	ul-GTP-PDU-SequenceNumber	UL-GTP-PDU-SequenceNumber 	OPTIONAL,
+	dl-N-PDU-SequenceNumber		DL-N-PDU-SequenceNumber		OPTIONAL,
+	ul-N-PDU-SequenceNumber		UL-N-PDU-SequenceNumber		OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer	OPTIONAL,
+	...
+}
+
+RAB-SetupItem-EnhRelocInfoReq ::= SEQUENCE {
+	rAB-ID				RAB-ID,
+	cN-DomainIndicator		CN-DomainIndicator,
+	rAB-Parameters			RAB-Parameters,
+	dataVolumeReportingIndication	DataVolumeReportingIndication 	OPTIONAL
+	-- This IE shall be present if the CN domain indicator IE is set to "PS domain" --,
+	pDP-TypeInformation		PDP-TypeInformation		OPTIONAL
+	-- This IE shall be present if the CN domain indicator IE is set to "PS domain" --,
+	userPlaneInformation		UserPlaneInformation,
+	dataForwardingInformation	TNLInformationEnhRelInfoReq	OPTIONAL,
+	sourceSideIuULTNLInfo		TNLInformationEnhRelInfoReq	OPTIONAL,
+	
+	service-Handover		Service-Handover		OPTIONAL,
+	alt-RAB-Parameters		Alt-RAB-Parameters		OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer	OPTIONAL,
+	...
+}
+
+TNLInformationEnhRelInfoReq ::=SEQUENCE{
+	transportLayerAddress	TransportLayerAddress,
+	iuTransportAssociation	IuTransportAssociation,
+	iE-Extensions		ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+
+RAB-SetupItem-EnhRelocInfoRes ::= SEQUENCE {
+	cN-DomainIndicator		CN-DomainIndicator,
+	rAB-ID				RAB-ID,
+	dataForwardingInformation	TNLInformationEnhRelInfoRes	OPTIONAL,
+	ass-RAB-Parameters		Ass-RAB-Parameters		OPTIONAL,
+	iE-Extensions			ProtocolExtensionContainer	OPTIONAL,
+	...
+}
+
+RAB-FailedItem-EnhRelocInfoRes ::= SEQUENCE {
+	cN-DomainIndicator	CN-DomainIndicator,
+	rAB-ID			RAB-ID,
+	cause			Cause,
+	iE-Extensions		ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+TNLInformationEnhRelInfoRes ::=SEQUENCE{
+	dl-forwardingTransportLayerAddress	TransportLayerAddress,
+	dl-forwardingTransportAssociation	IuTransportAssociation,
+	iE-Extensions 				ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+
+-- **************************************************************
+--
+-- RAB MODIFICATION REQUEST ELEMENTARY PROCEDURE
+--
+-- **************************************************************
+
+RAB-ModifyItem ::= SEQUENCE {
+	rAB-ID				RAB-ID,
+	requested-RAB-Parameter-Values	Requested-RAB-Parameter-Values,
+	iE-Extensions			ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+MBMSSynchronisationInformation ::= SEQUENCE {
+	mBMSHCIndicator		MBMSHCIndicator,
+	iPMulticastAddress	IPMulticastAddress,
+	gTPDLTEID		GTP-TEI,
+	iE-Extensions		ProtocolExtensionContainer OPTIONAL,
+	...
+}
+
+LeftMBMSBearerService-IEs ::= SEQUENCE (SIZE (1.. maxnoofMulticastServicesPerUE)) OF
+	SEQUENCE {
+		tMGI		TMGI,
+		iE-Extensions	ProtocolExtensionContainer OPTIONAL,
+		...
+	}
+
+UnsuccessfulLinking-IEs ::= SEQUENCE (SIZE (1.. maxnoofMulticastServicesPerUE)) OF
+	SEQUENCE {
+		tMGI		TMGI,
+		cause		Cause,
+		iE-Extensions	ProtocolExtensionContainer OPTIONAL,
+		...
+	}
+
 
 END
diff --git a/src/ranap/Makefile.am b/src/ranap/Makefile.am
index ad86020..92ec147 100644
--- a/src/ranap/Makefile.am
+++ b/src/ranap/Makefile.am
@@ -494,6 +494,8 @@
 	RANAP_SRVCC-CSKeysResponse.c	\
 	RANAP_UeRadioCapabilityMatchRequest.c	\
 	RANAP_UeRadioCapabilityMatchResponse.c	\
+	RANAP_ProtocolExtensionContainer.c	\
+	RANAP_ProtocolExtensionField.c	\
 	RANAP_IE.c	\
 	RANAP_DataVolumeReportList.c	\
 	RANAP_RAB-ReleasedList-IuRelComp.c	\
@@ -514,7 +516,49 @@
 	RANAP_RAB-ReleasedList.c	\
 	RANAP_RAB-QueuedList.c	\
 	RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse.c	\
-	RANAP_RAB-ContextList-RANAP-RelocInf.c
+	RANAP_RAB-ContextList-RANAP-RelocInf.c	\
+	RANAP_RAB-SetupList-EnhRelocInfoReq.c	\
+	RANAP_RAB-SetupList-EnhRelocInfoRes.c	\
+	RANAP_RAB-FailedList-EnhRelocInfoRes.c	\
+	RANAP_RAB-ModifyList.c	\
+	RANAP_RAB-DataVolumeReportList.c	\
+	RANAP_RAB-DataVolumeReportItem.c	\
+	RANAP_RAB-ReleasedItem-IuRelComp.c	\
+	RANAP_RAB-RelocationReleaseItem.c	\
+	RANAP_RAB-DataForwardingItem.c	\
+	RANAP_RAB-SetupItem-RelocReq.c	\
+	RANAP_UserPlaneInformation.c	\
+	RANAP_RAB-SetupItem-RelocReqAck.c	\
+	RANAP_RAB-FailedItem.c	\
+	RANAP_RAB-ContextItem.c	\
+	RANAP_RABs-ContextFailedtoTransferItem.c	\
+	RANAP_RABs-failed-to-reportItem.c	\
+	RANAP_ResetResourceItem.c	\
+	RANAP_ResetResourceAckItem.c	\
+	RANAP_RAB-ReleaseItem.c	\
+	RANAP_RAB-SetupItem-EnhancedRelocCompleteReq.c	\
+	RANAP_RAB-SetupItem-EnhancedRelocCompleteRes.c	\
+	RANAP_RAB-ToBeReleasedItem-EnhancedRelocCompleteRes.c	\
+	RANAP_RAB-SetupOrModifyItemFirst.c	\
+	RANAP_TransportLayerInformation.c	\
+	RANAP_RAB-SetupOrModifyItemSecond.c	\
+	RANAP_RAB-SetupOrModifiedItem.c	\
+	RANAP_RAB-ReleasedItem.c	\
+	RANAP_DataVolumeList.c	\
+	RANAP_RAB-QueuedItem.c	\
+	RANAP_RAB-ReleaseFailedList.c	\
+	RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item.c	\
+	RANAP_DirectTransferInformationItem-RANAP-RelocInf.c	\
+	RANAP_RAB-ContextItem-RANAP-RelocInf.c	\
+	RANAP_RAB-SetupItem-EnhRelocInfoReq.c	\
+	RANAP_TNLInformationEnhRelInfoReq.c	\
+	RANAP_RAB-SetupItem-EnhRelocInfoRes.c	\
+	RANAP_RAB-FailedItem-EnhRelocInfoRes.c	\
+	RANAP_TNLInformationEnhRelInfoRes.c	\
+	RANAP_RAB-ModifyItem.c	\
+	RANAP_MBMSSynchronisationInformation.c	\
+	RANAP_LeftMBMSBearerService-IEs.c	\
+	RANAP_UnsuccessfulLinking-IEs.c
 
 ASN_MODULE_INC=	\
 	RANAP_Criticality.h	\
@@ -1012,6 +1056,8 @@
 	RANAP_SRVCC-CSKeysResponse.h	\
 	RANAP_UeRadioCapabilityMatchRequest.h	\
 	RANAP_UeRadioCapabilityMatchResponse.h	\
+	RANAP_ProtocolExtensionContainer.h	\
+	RANAP_ProtocolExtensionField.h	\
 	RANAP_IE.h	\
 	RANAP_DataVolumeReportList.h	\
 	RANAP_RAB-ReleasedList-IuRelComp.h	\
@@ -1036,7 +1082,45 @@
 	RANAP_RAB-SetupList-EnhRelocInfoReq.h	\
 	RANAP_RAB-SetupList-EnhRelocInfoRes.h	\
 	RANAP_RAB-FailedList-EnhRelocInfoRes.h	\
-	RANAP_RAB-ModifyList.h
+	RANAP_RAB-ModifyList.h	\
+	RANAP_RAB-DataVolumeReportList.h	\
+	RANAP_RAB-DataVolumeReportItem.h	\
+	RANAP_RAB-ReleasedItem-IuRelComp.h	\
+	RANAP_RAB-RelocationReleaseItem.h	\
+	RANAP_RAB-DataForwardingItem.h	\
+	RANAP_RAB-SetupItem-RelocReq.h	\
+	RANAP_UserPlaneInformation.h	\
+	RANAP_RAB-SetupItem-RelocReqAck.h	\
+	RANAP_RAB-FailedItem.h	\
+	RANAP_RAB-ContextItem.h	\
+	RANAP_RABs-ContextFailedtoTransferItem.h	\
+	RANAP_RABs-failed-to-reportItem.h	\
+	RANAP_ResetResourceItem.h	\
+	RANAP_ResetResourceAckItem.h	\
+	RANAP_RAB-ReleaseItem.h	\
+	RANAP_RAB-SetupItem-EnhancedRelocCompleteReq.h	\
+	RANAP_RAB-SetupItem-EnhancedRelocCompleteRes.h	\
+	RANAP_RAB-ToBeReleasedItem-EnhancedRelocCompleteRes.h	\
+	RANAP_RAB-SetupOrModifyItemFirst.h	\
+	RANAP_TransportLayerInformation.h	\
+	RANAP_RAB-SetupOrModifyItemSecond.h	\
+	RANAP_RAB-SetupOrModifiedItem.h	\
+	RANAP_RAB-ReleasedItem.h	\
+	RANAP_DataVolumeList.h	\
+	RANAP_RAB-QueuedItem.h	\
+	RANAP_RAB-ReleaseFailedList.h	\
+	RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item.h	\
+	RANAP_DirectTransferInformationItem-RANAP-RelocInf.h	\
+	RANAP_RAB-ContextItem-RANAP-RelocInf.h	\
+	RANAP_RAB-SetupItem-EnhRelocInfoReq.h	\
+	RANAP_TNLInformationEnhRelInfoReq.h	\
+	RANAP_RAB-SetupItem-EnhRelocInfoRes.h	\
+	RANAP_RAB-FailedItem-EnhRelocInfoRes.h	\
+	RANAP_TNLInformationEnhRelInfoRes.h	\
+	RANAP_RAB-ModifyItem.h	\
+	RANAP_MBMSSynchronisationInformation.h	\
+	RANAP_LeftMBMSBearerService-IEs.h	\
+	RANAP_UnsuccessfulLinking-IEs.h
 
 AM_CFLAGS = $(ASN1C_CFLAGS) -I.
 
diff --git a/src/ranap/RANAP_AuthorisedPLMNs.c b/src/ranap/RANAP_AuthorisedPLMNs.c
index 784177c..0c9db50 100644
--- a/src/ranap/RANAP_AuthorisedPLMNs.c
+++ b/src/ranap/RANAP_AuthorisedPLMNs.c
@@ -11,8 +11,8 @@
 	{ APC_CONSTRAINED,	 5,  5,  1l,  32l }	/* (SIZE(1..32)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_Member_2[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct Member, pLMNidentity),
+static asn_TYPE_member_t asn_MBR_MemberA_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberA, pLMNidentity),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_PLMNidentity,
@@ -21,7 +21,7 @@
 		0,
 		"pLMNidentity"
 		},
-	{ ATF_POINTER, 2, offsetof(struct Member, authorisedSNAsList),
+	{ ATF_POINTER, 2, offsetof(struct MemberA, authorisedSNAsList),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_AuthorisedSNAs,
@@ -30,7 +30,7 @@
 		0,
 		"authorisedSNAsList"
 		},
-	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberA, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_IE_Extensions,
@@ -40,27 +40,27 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_Member_oms_2[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+static const int asn_MAP_MemberA_oms_2[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_MemberA_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberA_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNidentity */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* authorisedSNAsList */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
-	sizeof(struct Member),
-	offsetof(struct Member, _asn_ctx),
-	asn_MAP_Member_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberA_specs_2 = {
+	sizeof(struct MemberA),
+	offsetof(struct MemberA, _asn_ctx),
+	asn_MAP_MemberA_tag2el_2,
 	3,	/* Count of tags in the map */
-	asn_MAP_Member_oms_2,	/* Optional members */
+	asn_MAP_MemberA_oms_2,	/* Optional members */
 	2, 0,	/* Root/Additions */
 	2,	/* Start extensions */
 	4	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberA_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -75,23 +75,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_Member_tags_2,
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
-	asn_DEF_Member_tags_2,	/* Same as above */
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_MemberA_tags_2,
+	sizeof(asn_DEF_MemberA_tags_2)
+		/sizeof(asn_DEF_MemberA_tags_2[0]), /* 1 */
+	asn_DEF_MemberA_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberA_tags_2)
+		/sizeof(asn_DEF_MemberA_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_Member_2,
+	asn_MBR_MemberA_2,
 	3,	/* Elements count */
-	&asn_SPC_Member_specs_2	/* Additional specs */
+	&asn_SPC_MemberA_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_AuthorisedPLMNs_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_Member_2,
+		&asn_DEF_MemberA_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_AuthorisedPLMNs.h b/src/ranap/RANAP_AuthorisedPLMNs.h
index 16fe12c..6bd1dff 100644
--- a/src/ranap/RANAP_AuthorisedPLMNs.h
+++ b/src/ranap/RANAP_AuthorisedPLMNs.h
@@ -24,7 +24,7 @@
 
 /* RANAP_AuthorisedPLMNs */
 typedef struct RANAP_AuthorisedPLMNs {
-	A_SEQUENCE_OF(struct Member {
+	A_SEQUENCE_OF(struct MemberA {
 		RANAP_PLMNidentity_t	 pLMNidentity;
 		RANAP_AuthorisedSNAs_t	*authorisedSNAsList	/* OPTIONAL */;
 		RANAP_IE_Extensions_t	*iE_Extensions	/* OPTIONAL */;
diff --git a/src/ranap/RANAP_DataVolumeList.c b/src/ranap/RANAP_DataVolumeList.c
new file mode 100644
index 0000000..1d14cf1
--- /dev/null
+++ b/src/ranap/RANAP_DataVolumeList.c
@@ -0,0 +1,135 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_DataVolumeList.h"
+
+static asn_per_constraints_t asn_PER_type_RANAP_DataVolumeList_constr_1 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 1,  1,  1l,  2l }	/* (SIZE(1..2)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct Member, dl_UnsuccessfullyTransmittedDataVolume),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UnsuccessfullyTransmittedDataVolume,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dl-UnsuccessfullyTransmittedDataVolume"
+		},
+	{ ATF_POINTER, 2, offsetof(struct Member, dataVolumeReference),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DataVolumeReference,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dataVolumeReference"
+		},
+	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_Member_oms_2[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dl-UnsuccessfullyTransmittedDataVolume */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dataVolumeReference */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
+	sizeof(struct Member),
+	offsetof(struct Member, _asn_ctx),
+	asn_MAP_Member_tag2el_2,
+	3,	/* Count of tags in the map */
+	asn_MAP_Member_oms_2,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_Member_tags_2,
+	sizeof(asn_DEF_Member_tags_2)
+		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_Member_tags_2)
+		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_Member_2,
+	3,	/* Elements count */
+	&asn_SPC_Member_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_DataVolumeList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_Member_2,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_DataVolumeList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_RANAP_DataVolumeList_specs_1 = {
+	sizeof(struct RANAP_DataVolumeList),
+	offsetof(struct RANAP_DataVolumeList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_DataVolumeList = {
+	"RANAP_DataVolumeList",
+	"RANAP_DataVolumeList",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_DataVolumeList_tags_1,
+	sizeof(asn_DEF_RANAP_DataVolumeList_tags_1)
+		/sizeof(asn_DEF_RANAP_DataVolumeList_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_DataVolumeList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_DataVolumeList_tags_1)
+		/sizeof(asn_DEF_RANAP_DataVolumeList_tags_1[0]), /* 1 */
+	&asn_PER_type_RANAP_DataVolumeList_constr_1,
+	asn_MBR_RANAP_DataVolumeList_1,
+	1,	/* Single element */
+	&asn_SPC_RANAP_DataVolumeList_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_DataVolumeList.h b/src/ranap/RANAP_DataVolumeList.h
new file mode 100644
index 0000000..be86aaa
--- /dev/null
+++ b/src/ranap/RANAP_DataVolumeList.h
@@ -0,0 +1,52 @@
+/*
+ * 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_DataVolumeList_H_
+#define	_RANAP_DataVolumeList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "RANAP_UnsuccessfullyTransmittedDataVolume.h"
+#include "RANAP_DataVolumeReference.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_DataVolumeList */
+typedef struct RANAP_DataVolumeList {
+	A_SEQUENCE_OF(struct Member {
+		RANAP_UnsuccessfullyTransmittedDataVolume_t	 dl_UnsuccessfullyTransmittedDataVolume;
+		RANAP_DataVolumeReference_t	*dataVolumeReference	/* 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;
+	} ) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_DataVolumeList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_DataVolumeList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_DataVolumeList_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_DirectTransferInformationItem-RANAP-RelocInf.c b/src/ranap/RANAP_DirectTransferInformationItem-RANAP-RelocInf.c
new file mode 100644
index 0000000..f67f534
--- /dev/null
+++ b/src/ranap/RANAP_DirectTransferInformationItem-RANAP-RelocInf.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_DirectTransferInformationItem-RANAP-RelocInf.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_DirectTransferInformationItem_RANAP_RelocInf_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_DirectTransferInformationItem_RANAP_RelocInf, nAS_PDU),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_NAS_PDU,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"nAS-PDU"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_DirectTransferInformationItem_RANAP_RelocInf, sAPI),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_SAPI,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"sAPI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_DirectTransferInformationItem_RANAP_RelocInf, cN_DomainIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_CN_DomainIndicator,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"cN-DomainIndicator"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_DirectTransferInformationItem_RANAP_RelocInf, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_DirectTransferInformationItem_RANAP_RelocInf_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_RANAP_DirectTransferInformationItem_RANAP_RelocInf_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_DirectTransferInformationItem_RANAP_RelocInf_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nAS-PDU */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sAPI */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cN-DomainIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_DirectTransferInformationItem_RANAP_RelocInf_specs_1 = {
+	sizeof(struct RANAP_DirectTransferInformationItem_RANAP_RelocInf),
+	offsetof(struct RANAP_DirectTransferInformationItem_RANAP_RelocInf, _asn_ctx),
+	asn_MAP_RANAP_DirectTransferInformationItem_RANAP_RelocInf_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_RANAP_DirectTransferInformationItem_RANAP_RelocInf_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* Start extensions */
+	5	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_DirectTransferInformationItem_RANAP_RelocInf = {
+	"RANAP_DirectTransferInformationItem-RANAP-RelocInf",
+	"RANAP_DirectTransferInformationItem-RANAP-RelocInf",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_DirectTransferInformationItem_RANAP_RelocInf_tags_1,
+	sizeof(asn_DEF_RANAP_DirectTransferInformationItem_RANAP_RelocInf_tags_1)
+		/sizeof(asn_DEF_RANAP_DirectTransferInformationItem_RANAP_RelocInf_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_DirectTransferInformationItem_RANAP_RelocInf_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_DirectTransferInformationItem_RANAP_RelocInf_tags_1)
+		/sizeof(asn_DEF_RANAP_DirectTransferInformationItem_RANAP_RelocInf_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_DirectTransferInformationItem_RANAP_RelocInf_1,
+	4,	/* Elements count */
+	&asn_SPC_RANAP_DirectTransferInformationItem_RANAP_RelocInf_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_DirectTransferInformationItem-RANAP-RelocInf.h b/src/ranap/RANAP_DirectTransferInformationItem-RANAP-RelocInf.h
new file mode 100644
index 0000000..191bf04
--- /dev/null
+++ b/src/ranap/RANAP_DirectTransferInformationItem-RANAP-RelocInf.h
@@ -0,0 +1,47 @@
+/*
+ * 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_DirectTransferInformationItem_RANAP_RelocInf_H_
+#define	_RANAP_DirectTransferInformationItem_RANAP_RelocInf_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_NAS-PDU.h"
+#include "RANAP_SAPI.h"
+#include "RANAP_CN-DomainIndicator.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_DirectTransferInformationItem-RANAP-RelocInf */
+typedef struct RANAP_DirectTransferInformationItem_RANAP_RelocInf {
+	RANAP_NAS_PDU_t	 nAS_PDU;
+	RANAP_SAPI_t	 sAPI;
+	RANAP_CN_DomainIndicator_t	 cN_DomainIndicator;
+	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_DirectTransferInformationItem_RANAP_RelocInf_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_DirectTransferInformationItem_RANAP_RelocInf;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_DirectTransferInformationItem_RANAP_RelocInf_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item.c b/src/ranap/RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item.c
new file mode 100644
index 0000000..85028c4
--- /dev/null
+++ b/src/ranap/RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item, cause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_Cause,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"cause"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item, gERAN_Classmark),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_GERAN_Classmark,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"gERAN-Classmark"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_oms_1[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* gERAN-Classmark */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_specs_1 = {
+	sizeof(struct RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item),
+	offsetof(struct RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item, _asn_ctx),
+	asn_MAP_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	3,	/* Start extensions */
+	5	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item = {
+	"RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item",
+	"RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_tags_1,
+	sizeof(asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_tags_1)
+		/sizeof(asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_tags_1)
+		/sizeof(asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_1,
+	4,	/* Elements count */
+	&asn_SPC_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item.h b/src/ranap/RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item.h
new file mode 100644
index 0000000..f299ceb
--- /dev/null
+++ b/src/ranap/RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item.h
@@ -0,0 +1,47 @@
+/*
+ * 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_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_H_
+#define	_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_Cause.h"
+#include "RANAP_GERAN-Classmark.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item */
+typedef struct RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_Cause_t	 cause;
+	RANAP_GERAN_Classmark_t	*gERAN_Classmark	/* 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_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_Item_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_LeftMBMSBearerService-IEs.c b/src/ranap/RANAP_LeftMBMSBearerService-IEs.c
new file mode 100644
index 0000000..a82558f
--- /dev/null
+++ b/src/ranap/RANAP_LeftMBMSBearerService-IEs.c
@@ -0,0 +1,125 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_LeftMBMSBearerService-IEs.h"
+
+static asn_per_constraints_t asn_PER_type_RANAP_LeftMBMSBearerService_IEs_constr_1 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 7,  7,  1l,  128l }	/* (SIZE(1..128)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct Member, tMGI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TMGI,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"tMGI"
+		},
+	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_Member_oms_2[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tMGI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
+	sizeof(struct Member),
+	offsetof(struct Member, _asn_ctx),
+	asn_MAP_Member_tag2el_2,
+	2,	/* Count of tags in the map */
+	asn_MAP_Member_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* Start extensions */
+	3	/* Stop extensions */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_Member_tags_2,
+	sizeof(asn_DEF_Member_tags_2)
+		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_Member_tags_2)
+		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_Member_2,
+	2,	/* Elements count */
+	&asn_SPC_Member_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_LeftMBMSBearerService_IEs_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_Member_2,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_LeftMBMSBearerService_IEs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_RANAP_LeftMBMSBearerService_IEs_specs_1 = {
+	sizeof(struct RANAP_LeftMBMSBearerService_IEs),
+	offsetof(struct RANAP_LeftMBMSBearerService_IEs, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_LeftMBMSBearerService_IEs = {
+	"RANAP_LeftMBMSBearerService-IEs",
+	"RANAP_LeftMBMSBearerService-IEs",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_LeftMBMSBearerService_IEs_tags_1,
+	sizeof(asn_DEF_RANAP_LeftMBMSBearerService_IEs_tags_1)
+		/sizeof(asn_DEF_RANAP_LeftMBMSBearerService_IEs_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_LeftMBMSBearerService_IEs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_LeftMBMSBearerService_IEs_tags_1)
+		/sizeof(asn_DEF_RANAP_LeftMBMSBearerService_IEs_tags_1[0]), /* 1 */
+	&asn_PER_type_RANAP_LeftMBMSBearerService_IEs_constr_1,
+	asn_MBR_RANAP_LeftMBMSBearerService_IEs_1,
+	1,	/* Single element */
+	&asn_SPC_RANAP_LeftMBMSBearerService_IEs_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_LeftMBMSBearerService-IEs.h b/src/ranap/RANAP_LeftMBMSBearerService-IEs.h
new file mode 100644
index 0000000..1f2bbf2
--- /dev/null
+++ b/src/ranap/RANAP_LeftMBMSBearerService-IEs.h
@@ -0,0 +1,50 @@
+/*
+ * 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_LeftMBMSBearerService_IEs_H_
+#define	_RANAP_LeftMBMSBearerService_IEs_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "RANAP_TMGI.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_LeftMBMSBearerService-IEs */
+typedef struct RANAP_LeftMBMSBearerService_IEs {
+	A_SEQUENCE_OF(struct Member {
+		RANAP_TMGI_t	 tMGI;
+		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;
+	} ) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_LeftMBMSBearerService_IEs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_LeftMBMSBearerService_IEs;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_LeftMBMSBearerService_IEs_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_MBMSSynchronisationInformation.c b/src/ranap/RANAP_MBMSSynchronisationInformation.c
new file mode 100644
index 0000000..325e2ff
--- /dev/null
+++ b/src/ranap/RANAP_MBMSSynchronisationInformation.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_MBMSSynchronisationInformation.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_MBMSSynchronisationInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSynchronisationInformation, mBMSHCIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_MBMSHCIndicator,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"mBMSHCIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSynchronisationInformation, iPMulticastAddress),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_IPMulticastAddress,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iPMulticastAddress"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSynchronisationInformation, gTPDLTEID),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_GTP_TEI,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"gTPDLTEID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_MBMSSynchronisationInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_MBMSSynchronisationInformation_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_RANAP_MBMSSynchronisationInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSSynchronisationInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mBMSHCIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iPMulticastAddress */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* gTPDLTEID */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSSynchronisationInformation_specs_1 = {
+	sizeof(struct RANAP_MBMSSynchronisationInformation),
+	offsetof(struct RANAP_MBMSSynchronisationInformation, _asn_ctx),
+	asn_MAP_RANAP_MBMSSynchronisationInformation_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_RANAP_MBMSSynchronisationInformation_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* Start extensions */
+	5	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_MBMSSynchronisationInformation = {
+	"RANAP_MBMSSynchronisationInformation",
+	"RANAP_MBMSSynchronisationInformation",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_MBMSSynchronisationInformation_tags_1,
+	sizeof(asn_DEF_RANAP_MBMSSynchronisationInformation_tags_1)
+		/sizeof(asn_DEF_RANAP_MBMSSynchronisationInformation_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_MBMSSynchronisationInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_MBMSSynchronisationInformation_tags_1)
+		/sizeof(asn_DEF_RANAP_MBMSSynchronisationInformation_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_MBMSSynchronisationInformation_1,
+	4,	/* Elements count */
+	&asn_SPC_RANAP_MBMSSynchronisationInformation_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_MBMSSynchronisationInformation.h b/src/ranap/RANAP_MBMSSynchronisationInformation.h
new file mode 100644
index 0000000..e277e27
--- /dev/null
+++ b/src/ranap/RANAP_MBMSSynchronisationInformation.h
@@ -0,0 +1,47 @@
+/*
+ * 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_MBMSSynchronisationInformation_H_
+#define	_RANAP_MBMSSynchronisationInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_MBMSHCIndicator.h"
+#include "RANAP_IPMulticastAddress.h"
+#include "RANAP_GTP-TEI.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_MBMSSynchronisationInformation */
+typedef struct RANAP_MBMSSynchronisationInformation {
+	RANAP_MBMSHCIndicator_t	 mBMSHCIndicator;
+	RANAP_IPMulticastAddress_t	 iPMulticastAddress;
+	RANAP_GTP_TEI_t	 gTPDLTEID;
+	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_MBMSSynchronisationInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_MBMSSynchronisationInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_MBMSSynchronisationInformation_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_ProtocolExtensionContainer.c b/src/ranap/RANAP_ProtocolExtensionContainer.c
new file mode 100644
index 0000000..d51e0a8
--- /dev/null
+++ b/src/ranap/RANAP_ProtocolExtensionContainer.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_ProtocolExtensionContainer.h"
+
+static asn_per_constraints_t asn_PER_type_RANAP_ProtocolExtensionContainer_constr_1 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  1l,  65535l }	/* (SIZE(1..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_RANAP_ProtocolExtensionContainer_1[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_ProtocolExtensionField,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_ProtocolExtensionContainer_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_RANAP_ProtocolExtensionContainer_specs_1 = {
+	sizeof(struct RANAP_ProtocolExtensionContainer),
+	offsetof(struct RANAP_ProtocolExtensionContainer, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_ProtocolExtensionContainer = {
+	"RANAP_ProtocolExtensionContainer",
+	"RANAP_ProtocolExtensionContainer",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_ProtocolExtensionContainer_tags_1,
+	sizeof(asn_DEF_RANAP_ProtocolExtensionContainer_tags_1)
+		/sizeof(asn_DEF_RANAP_ProtocolExtensionContainer_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_ProtocolExtensionContainer_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_ProtocolExtensionContainer_tags_1)
+		/sizeof(asn_DEF_RANAP_ProtocolExtensionContainer_tags_1[0]), /* 1 */
+	&asn_PER_type_RANAP_ProtocolExtensionContainer_constr_1,
+	asn_MBR_RANAP_ProtocolExtensionContainer_1,
+	1,	/* Single element */
+	&asn_SPC_RANAP_ProtocolExtensionContainer_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_ProtocolExtensionContainer.h b/src/ranap/RANAP_ProtocolExtensionContainer.h
new file mode 100644
index 0000000..c7870e0
--- /dev/null
+++ b/src/ranap/RANAP_ProtocolExtensionContainer.h
@@ -0,0 +1,38 @@
+/*
+ * 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_ProtocolExtensionContainer_H_
+#define	_RANAP_ProtocolExtensionContainer_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_ProtocolExtensionField.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_ProtocolExtensionContainer */
+typedef struct RANAP_ProtocolExtensionContainer {
+	A_SEQUENCE_OF(RANAP_ProtocolExtensionField_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_ProtocolExtensionContainer_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_ProtocolExtensionContainer;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_ProtocolExtensionContainer_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_ProtocolExtensionField.c b/src/ranap/RANAP_ProtocolExtensionField.c
new file mode 100644
index 0000000..1bb5f4b
--- /dev/null
+++ b/src/ranap/RANAP_ProtocolExtensionField.c
@@ -0,0 +1,81 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_ProtocolExtensionField.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_ProtocolExtensionField_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_ProtocolExtensionField, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolIE_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_ProtocolExtensionField, criticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_Criticality,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"criticality"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_ProtocolExtensionField, value),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ANY,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"value"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_ProtocolExtensionField_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_ProtocolExtensionField_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* criticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* value */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_ProtocolExtensionField_specs_1 = {
+	sizeof(struct RANAP_ProtocolExtensionField),
+	offsetof(struct RANAP_ProtocolExtensionField, _asn_ctx),
+	asn_MAP_RANAP_ProtocolExtensionField_tag2el_1,
+	3,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_ProtocolExtensionField = {
+	"RANAP_ProtocolExtensionField",
+	"RANAP_ProtocolExtensionField",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_ProtocolExtensionField_tags_1,
+	sizeof(asn_DEF_RANAP_ProtocolExtensionField_tags_1)
+		/sizeof(asn_DEF_RANAP_ProtocolExtensionField_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_ProtocolExtensionField_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_ProtocolExtensionField_tags_1)
+		/sizeof(asn_DEF_RANAP_ProtocolExtensionField_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_ProtocolExtensionField_1,
+	3,	/* Elements count */
+	&asn_SPC_RANAP_ProtocolExtensionField_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_ProtocolExtensionField.h b/src/ranap/RANAP_ProtocolExtensionField.h
new file mode 100644
index 0000000..2a3b119
--- /dev/null
+++ b/src/ranap/RANAP_ProtocolExtensionField.h
@@ -0,0 +1,41 @@
+/*
+ * 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_ProtocolExtensionField_H_
+#define	_RANAP_ProtocolExtensionField_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_ProtocolIE-ID.h"
+#include "RANAP_Criticality.h"
+#include <ANY.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_ProtocolExtensionField */
+typedef struct RANAP_ProtocolExtensionField {
+	RANAP_ProtocolIE_ID_t	 id;
+	RANAP_Criticality_t	 criticality;
+	ANY_t	 value;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_ProtocolExtensionField_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_ProtocolExtensionField;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_ProtocolExtensionField_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-ContextItem-RANAP-RelocInf.c b/src/ranap/RANAP_RAB-ContextItem-RANAP-RelocInf.c
new file mode 100644
index 0000000..3a12e37
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ContextItem-RANAP-RelocInf.c
@@ -0,0 +1,113 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-ContextItem-RANAP-RelocInf.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_ContextItem_RANAP_RelocInf_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ContextItem_RANAP_RelocInf, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 5, offsetof(struct RANAP_RAB_ContextItem_RANAP_RelocInf, dl_GTP_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DL_GTP_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dl-GTP-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 4, offsetof(struct RANAP_RAB_ContextItem_RANAP_RelocInf, ul_GTP_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UL_GTP_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"ul-GTP-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANAP_RAB_ContextItem_RANAP_RelocInf, dl_N_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DL_N_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dl-N-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_ContextItem_RANAP_RelocInf, ul_N_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UL_N_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"ul-N-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_ContextItem_RANAP_RelocInf, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_ContextItem_RANAP_RelocInf_oms_1[] = { 1, 2, 3, 4, 5 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ContextItem_RANAP_RelocInf_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ContextItem_RANAP_RelocInf_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-GTP-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ul-GTP-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dl-N-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ul-N-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ContextItem_RANAP_RelocInf_specs_1 = {
+	sizeof(struct RANAP_RAB_ContextItem_RANAP_RelocInf),
+	offsetof(struct RANAP_RAB_ContextItem_RANAP_RelocInf, _asn_ctx),
+	asn_MAP_RANAP_RAB_ContextItem_RANAP_RelocInf_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_ContextItem_RANAP_RelocInf_oms_1,	/* Optional members */
+	5, 0,	/* Root/Additions */
+	5,	/* Start extensions */
+	7	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ContextItem_RANAP_RelocInf = {
+	"RANAP_RAB-ContextItem-RANAP-RelocInf",
+	"RANAP_RAB-ContextItem-RANAP-RelocInf",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_ContextItem_RANAP_RelocInf_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_ContextItem_RANAP_RelocInf_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ContextItem_RANAP_RelocInf_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_ContextItem_RANAP_RelocInf_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_ContextItem_RANAP_RelocInf_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ContextItem_RANAP_RelocInf_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_ContextItem_RANAP_RelocInf_1,
+	6,	/* Elements count */
+	&asn_SPC_RANAP_RAB_ContextItem_RANAP_RelocInf_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-ContextItem-RANAP-RelocInf.h b/src/ranap/RANAP_RAB-ContextItem-RANAP-RelocInf.h
new file mode 100644
index 0000000..6a3baf5
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ContextItem-RANAP-RelocInf.h
@@ -0,0 +1,51 @@
+/*
+ * 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_ContextItem_RANAP_RelocInf_H_
+#define	_RANAP_RAB_ContextItem_RANAP_RelocInf_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_DL-GTP-PDU-SequenceNumber.h"
+#include "RANAP_UL-GTP-PDU-SequenceNumber.h"
+#include "RANAP_DL-N-PDU-SequenceNumber.h"
+#include "RANAP_UL-N-PDU-SequenceNumber.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-ContextItem-RANAP-RelocInf */
+typedef struct RANAP_RAB_ContextItem_RANAP_RelocInf {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_DL_GTP_PDU_SequenceNumber_t	*dl_GTP_PDU_SequenceNumber	/* OPTIONAL */;
+	RANAP_UL_GTP_PDU_SequenceNumber_t	*ul_GTP_PDU_SequenceNumber	/* OPTIONAL */;
+	RANAP_DL_N_PDU_SequenceNumber_t	*dl_N_PDU_SequenceNumber	/* OPTIONAL */;
+	RANAP_UL_N_PDU_SequenceNumber_t	*ul_N_PDU_SequenceNumber	/* 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_ContextItem_RANAP_RelocInf_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ContextItem_RANAP_RelocInf;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_ContextItem_RANAP_RelocInf_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-ContextItem.c b/src/ranap/RANAP_RAB-ContextItem.c
new file mode 100644
index 0000000..ac6a933
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ContextItem.c
@@ -0,0 +1,113 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-ContextItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_ContextItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ContextItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 5, offsetof(struct RANAP_RAB_ContextItem, dl_GTP_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DL_GTP_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dl-GTP-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 4, offsetof(struct RANAP_RAB_ContextItem, ul_GTP_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UL_GTP_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"ul-GTP-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANAP_RAB_ContextItem, dl_N_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DL_N_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dl-N-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_ContextItem, ul_N_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UL_N_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"ul-N-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_ContextItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_ContextItem_oms_1[] = { 1, 2, 3, 4, 5 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ContextItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ContextItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-GTP-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ul-GTP-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dl-N-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ul-N-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ContextItem_specs_1 = {
+	sizeof(struct RANAP_RAB_ContextItem),
+	offsetof(struct RANAP_RAB_ContextItem, _asn_ctx),
+	asn_MAP_RANAP_RAB_ContextItem_tag2el_1,
+	6,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_ContextItem_oms_1,	/* Optional members */
+	5, 0,	/* Root/Additions */
+	5,	/* Start extensions */
+	7	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ContextItem = {
+	"RANAP_RAB-ContextItem",
+	"RANAP_RAB-ContextItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_ContextItem_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_ContextItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ContextItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_ContextItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_ContextItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ContextItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_ContextItem_1,
+	6,	/* Elements count */
+	&asn_SPC_RANAP_RAB_ContextItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-ContextItem.h b/src/ranap/RANAP_RAB-ContextItem.h
new file mode 100644
index 0000000..b47e65a
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ContextItem.h
@@ -0,0 +1,51 @@
+/*
+ * 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_ContextItem_H_
+#define	_RANAP_RAB_ContextItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_DL-GTP-PDU-SequenceNumber.h"
+#include "RANAP_UL-GTP-PDU-SequenceNumber.h"
+#include "RANAP_DL-N-PDU-SequenceNumber.h"
+#include "RANAP_UL-N-PDU-SequenceNumber.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-ContextItem */
+typedef struct RANAP_RAB_ContextItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_DL_GTP_PDU_SequenceNumber_t	*dl_GTP_PDU_SequenceNumber	/* OPTIONAL */;
+	RANAP_UL_GTP_PDU_SequenceNumber_t	*ul_GTP_PDU_SequenceNumber	/* OPTIONAL */;
+	RANAP_DL_N_PDU_SequenceNumber_t	*dl_N_PDU_SequenceNumber	/* OPTIONAL */;
+	RANAP_UL_N_PDU_SequenceNumber_t	*ul_N_PDU_SequenceNumber	/* 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_ContextItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ContextItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_ContextItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-DataForwardingItem.c b/src/ranap/RANAP_RAB-DataForwardingItem.c
new file mode 100644
index 0000000..9cab43c
--- /dev/null
+++ b/src/ranap/RANAP_RAB-DataForwardingItem.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-DataForwardingItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_DataForwardingItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataForwardingItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataForwardingItem, transportLayerAddress),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TransportLayerAddress,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"transportLayerAddress"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataForwardingItem, iuTransportAssociation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_IuTransportAssociation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iuTransportAssociation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_DataForwardingItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_DataForwardingItem_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_DataForwardingItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_DataForwardingItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transportLayerAddress */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* iuTransportAssociation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_DataForwardingItem_specs_1 = {
+	sizeof(struct RANAP_RAB_DataForwardingItem),
+	offsetof(struct RANAP_RAB_DataForwardingItem, _asn_ctx),
+	asn_MAP_RANAP_RAB_DataForwardingItem_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_DataForwardingItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* Start extensions */
+	5	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_DataForwardingItem = {
+	"RANAP_RAB-DataForwardingItem",
+	"RANAP_RAB-DataForwardingItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_DataForwardingItem_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_DataForwardingItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_DataForwardingItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_DataForwardingItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_DataForwardingItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_DataForwardingItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_DataForwardingItem_1,
+	4,	/* Elements count */
+	&asn_SPC_RANAP_RAB_DataForwardingItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-DataForwardingItem.h b/src/ranap/RANAP_RAB-DataForwardingItem.h
new file mode 100644
index 0000000..21356e3
--- /dev/null
+++ b/src/ranap/RANAP_RAB-DataForwardingItem.h
@@ -0,0 +1,47 @@
+/*
+ * 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_DataForwardingItem_H_
+#define	_RANAP_RAB_DataForwardingItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_TransportLayerAddress.h"
+#include "RANAP_IuTransportAssociation.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-DataForwardingItem */
+typedef struct RANAP_RAB_DataForwardingItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_TransportLayerAddress_t	 transportLayerAddress;
+	RANAP_IuTransportAssociation_t	 iuTransportAssociation;
+	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_DataForwardingItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_DataForwardingItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_DataForwardingItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-DataVolumeReportItem.c b/src/ranap/RANAP_RAB-DataVolumeReportItem.c
new file mode 100644
index 0000000..e130544
--- /dev/null
+++ b/src/ranap/RANAP_RAB-DataVolumeReportItem.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-DataVolumeReportItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_DataVolumeReportItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataVolumeReportItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_DataVolumeReportItem, dl_UnsuccessfullyTransmittedDataVolume),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DataVolumeList,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dl-UnsuccessfullyTransmittedDataVolume"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_DataVolumeReportItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_DataVolumeReportItem_oms_1[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_DataVolumeReportItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_DataVolumeReportItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-UnsuccessfullyTransmittedDataVolume */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_DataVolumeReportItem_specs_1 = {
+	sizeof(struct RANAP_RAB_DataVolumeReportItem),
+	offsetof(struct RANAP_RAB_DataVolumeReportItem, _asn_ctx),
+	asn_MAP_RANAP_RAB_DataVolumeReportItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_DataVolumeReportItem_oms_1,	/* Optional members */
+	2, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_DataVolumeReportItem = {
+	"RANAP_RAB-DataVolumeReportItem",
+	"RANAP_RAB-DataVolumeReportItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_DataVolumeReportItem_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_DataVolumeReportItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_DataVolumeReportItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_DataVolumeReportItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_DataVolumeReportItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_DataVolumeReportItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_DataVolumeReportItem_1,
+	3,	/* Elements count */
+	&asn_SPC_RANAP_RAB_DataVolumeReportItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-DataVolumeReportItem.h b/src/ranap/RANAP_RAB-DataVolumeReportItem.h
new file mode 100644
index 0000000..54f815a
--- /dev/null
+++ b/src/ranap/RANAP_RAB-DataVolumeReportItem.h
@@ -0,0 +1,45 @@
+/*
+ * 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_DataVolumeReportItem_H_
+#define	_RANAP_RAB_DataVolumeReportItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_DataVolumeList.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-DataVolumeReportItem */
+typedef struct RANAP_RAB_DataVolumeReportItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_DataVolumeList_t	*dl_UnsuccessfullyTransmittedDataVolume	/* 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_DataVolumeReportItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_DataVolumeReportItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_DataVolumeReportItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-DataVolumeReportList.c b/src/ranap/RANAP_RAB-DataVolumeReportList.c
new file mode 100644
index 0000000..ccfeda6
--- /dev/null
+++ b/src/ranap/RANAP_RAB-DataVolumeReportList.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-DataVolumeReportList.h"
+
+static int
+memb_rabDataVolumeReportList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_rabDataVolumeReportList_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_rabDataVolumeReportList_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_rabDataVolumeReportList_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_rabDataVolumeReportList_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_rabDataVolumeReportList_ies_specs_2 = {
+	sizeof(struct rabDataVolumeReportList_ies),
+	offsetof(struct rabDataVolumeReportList_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_rabDataVolumeReportList_ies_2 = {
+	"rabDataVolumeReportList-ies",
+	"rabDataVolumeReportList-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_rabDataVolumeReportList_ies_tags_2,
+	sizeof(asn_DEF_rabDataVolumeReportList_ies_tags_2)
+		/sizeof(asn_DEF_rabDataVolumeReportList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_rabDataVolumeReportList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_rabDataVolumeReportList_ies_tags_2)
+		/sizeof(asn_DEF_rabDataVolumeReportList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_rabDataVolumeReportList_ies_constr_2,
+	asn_MBR_rabDataVolumeReportList_ies_2,
+	1,	/* Single element */
+	&asn_SPC_rabDataVolumeReportList_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_DataVolumeReportList_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataVolumeReportList, rabDataVolumeReportList_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_rabDataVolumeReportList_ies_2,
+		memb_rabDataVolumeReportList_ies_constraint_1,
+		&asn_PER_memb_rabDataVolumeReportList_ies_constr_2,
+		0,
+		"rabDataVolumeReportList-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_DataVolumeReportList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_DataVolumeReportList_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabDataVolumeReportList-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_DataVolumeReportList_specs_1 = {
+	sizeof(struct RANAP_RAB_DataVolumeReportList),
+	offsetof(struct RANAP_RAB_DataVolumeReportList, _asn_ctx),
+	asn_MAP_RANAP_RAB_DataVolumeReportList_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_DataVolumeReportList = {
+	"RANAP_RAB-DataVolumeReportList",
+	"RANAP_RAB-DataVolumeReportList",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_DataVolumeReportList_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_DataVolumeReportList_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_DataVolumeReportList_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_DataVolumeReportList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_DataVolumeReportList_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_DataVolumeReportList_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_DataVolumeReportList_1,
+	1,	/* Elements count */
+	&asn_SPC_RANAP_RAB_DataVolumeReportList_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-DataVolumeReportList.h b/src/ranap/RANAP_RAB-DataVolumeReportList.h
new file mode 100644
index 0000000..1876054
--- /dev/null
+++ b/src/ranap/RANAP_RAB-DataVolumeReportList.h
@@ -0,0 +1,48 @@
+/*
+ * 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_DataVolumeReportList_H_
+#define	_RANAP_RAB_DataVolumeReportList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_IE.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-DataVolumeReportList */
+typedef struct RANAP_RAB_DataVolumeReportList {
+	struct rabDataVolumeReportList_ies {
+		A_SEQUENCE_OF(RANAP_IE_t) list;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} rabDataVolumeReportList_ies;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_RAB_DataVolumeReportList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_DataVolumeReportList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_DataVolumeReportList_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-FailedItem-EnhRelocInfoRes.c b/src/ranap/RANAP_RAB-FailedItem-EnhRelocInfoRes.c
new file mode 100644
index 0000000..ab8491e
--- /dev/null
+++ b/src/ranap/RANAP_RAB-FailedItem-EnhRelocInfoRes.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-FailedItem-EnhRelocInfoRes.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_FailedItem_EnhRelocInfoRes_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_FailedItem_EnhRelocInfoRes, cN_DomainIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_CN_DomainIndicator,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"cN-DomainIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_FailedItem_EnhRelocInfoRes, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_FailedItem_EnhRelocInfoRes, cause),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_Cause,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"cause"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_FailedItem_EnhRelocInfoRes, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_FailedItem_EnhRelocInfoRes_oms_1[] = { 3 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_FailedItem_EnhRelocInfoRes_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_FailedItem_EnhRelocInfoRes_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cN-DomainIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_FailedItem_EnhRelocInfoRes_specs_1 = {
+	sizeof(struct RANAP_RAB_FailedItem_EnhRelocInfoRes),
+	offsetof(struct RANAP_RAB_FailedItem_EnhRelocInfoRes, _asn_ctx),
+	asn_MAP_RANAP_RAB_FailedItem_EnhRelocInfoRes_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_FailedItem_EnhRelocInfoRes_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	3,	/* Start extensions */
+	5	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_FailedItem_EnhRelocInfoRes = {
+	"RANAP_RAB-FailedItem-EnhRelocInfoRes",
+	"RANAP_RAB-FailedItem-EnhRelocInfoRes",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_FailedItem_EnhRelocInfoRes_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_FailedItem_EnhRelocInfoRes_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_FailedItem_EnhRelocInfoRes_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_FailedItem_EnhRelocInfoRes_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_FailedItem_EnhRelocInfoRes_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_FailedItem_EnhRelocInfoRes_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_FailedItem_EnhRelocInfoRes_1,
+	4,	/* Elements count */
+	&asn_SPC_RANAP_RAB_FailedItem_EnhRelocInfoRes_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-FailedItem-EnhRelocInfoRes.h b/src/ranap/RANAP_RAB-FailedItem-EnhRelocInfoRes.h
new file mode 100644
index 0000000..a2aa5f5
--- /dev/null
+++ b/src/ranap/RANAP_RAB-FailedItem-EnhRelocInfoRes.h
@@ -0,0 +1,47 @@
+/*
+ * 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_FailedItem_EnhRelocInfoRes_H_
+#define	_RANAP_RAB_FailedItem_EnhRelocInfoRes_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_CN-DomainIndicator.h"
+#include "RANAP_RAB-ID.h"
+#include "RANAP_Cause.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-FailedItem-EnhRelocInfoRes */
+typedef struct RANAP_RAB_FailedItem_EnhRelocInfoRes {
+	RANAP_CN_DomainIndicator_t	 cN_DomainIndicator;
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_Cause_t	 cause;
+	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_FailedItem_EnhRelocInfoRes_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_FailedItem_EnhRelocInfoRes;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_FailedItem_EnhRelocInfoRes_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-FailedItem.c b/src/ranap/RANAP_RAB-FailedItem.c
new file mode 100644
index 0000000..95f8b5a
--- /dev/null
+++ b/src/ranap/RANAP_RAB-FailedItem.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-FailedItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_FailedItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_FailedItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_FailedItem, cause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_Cause,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"cause"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_FailedItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_FailedItem_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_FailedItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_FailedItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_FailedItem_specs_1 = {
+	sizeof(struct RANAP_RAB_FailedItem),
+	offsetof(struct RANAP_RAB_FailedItem, _asn_ctx),
+	asn_MAP_RANAP_RAB_FailedItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_FailedItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_FailedItem = {
+	"RANAP_RAB-FailedItem",
+	"RANAP_RAB-FailedItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_FailedItem_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_FailedItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_FailedItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_FailedItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_FailedItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_FailedItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_FailedItem_1,
+	3,	/* Elements count */
+	&asn_SPC_RANAP_RAB_FailedItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-FailedItem.h b/src/ranap/RANAP_RAB-FailedItem.h
new file mode 100644
index 0000000..07ef044
--- /dev/null
+++ b/src/ranap/RANAP_RAB-FailedItem.h
@@ -0,0 +1,45 @@
+/*
+ * 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_FailedItem_H_
+#define	_RANAP_RAB_FailedItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_Cause.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-FailedItem */
+typedef struct RANAP_RAB_FailedItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_Cause_t	 cause;
+	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_FailedItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_FailedItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_FailedItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-ModifyItem.c b/src/ranap/RANAP_RAB-ModifyItem.c
new file mode 100644
index 0000000..f254689
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ModifyItem.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-ModifyItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_ModifyItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ModifyItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ModifyItem, requested_RAB_Parameter_Values),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_Requested_RAB_Parameter_Values,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"requested-RAB-Parameter-Values"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_ModifyItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_ModifyItem_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ModifyItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ModifyItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* requested-RAB-Parameter-Values */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ModifyItem_specs_1 = {
+	sizeof(struct RANAP_RAB_ModifyItem),
+	offsetof(struct RANAP_RAB_ModifyItem, _asn_ctx),
+	asn_MAP_RANAP_RAB_ModifyItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_ModifyItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ModifyItem = {
+	"RANAP_RAB-ModifyItem",
+	"RANAP_RAB-ModifyItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_ModifyItem_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_ModifyItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ModifyItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_ModifyItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_ModifyItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ModifyItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_ModifyItem_1,
+	3,	/* Elements count */
+	&asn_SPC_RANAP_RAB_ModifyItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-ModifyItem.h b/src/ranap/RANAP_RAB-ModifyItem.h
new file mode 100644
index 0000000..7963cfa
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ModifyItem.h
@@ -0,0 +1,45 @@
+/*
+ * 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_ModifyItem_H_
+#define	_RANAP_RAB_ModifyItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_Requested-RAB-Parameter-Values.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-ModifyItem */
+typedef struct RANAP_RAB_ModifyItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_Requested_RAB_Parameter_Values_t	 requested_RAB_Parameter_Values;
+	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_ModifyItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ModifyItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_ModifyItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-QueuedItem.c b/src/ranap/RANAP_RAB-QueuedItem.c
new file mode 100644
index 0000000..8777f40
--- /dev/null
+++ b/src/ranap/RANAP_RAB-QueuedItem.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-QueuedItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_QueuedItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_QueuedItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_QueuedItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_QueuedItem_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_QueuedItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_QueuedItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_QueuedItem_specs_1 = {
+	sizeof(struct RANAP_RAB_QueuedItem),
+	offsetof(struct RANAP_RAB_QueuedItem, _asn_ctx),
+	asn_MAP_RANAP_RAB_QueuedItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_QueuedItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* Start extensions */
+	3	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_QueuedItem = {
+	"RANAP_RAB-QueuedItem",
+	"RANAP_RAB-QueuedItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_QueuedItem_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_QueuedItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_QueuedItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_QueuedItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_QueuedItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_QueuedItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_QueuedItem_1,
+	2,	/* Elements count */
+	&asn_SPC_RANAP_RAB_QueuedItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-QueuedItem.h b/src/ranap/RANAP_RAB-QueuedItem.h
new file mode 100644
index 0000000..beed3c1
--- /dev/null
+++ b/src/ranap/RANAP_RAB-QueuedItem.h
@@ -0,0 +1,43 @@
+/*
+ * 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_QueuedItem_H_
+#define	_RANAP_RAB_QueuedItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-QueuedItem */
+typedef struct RANAP_RAB_QueuedItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	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_QueuedItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_QueuedItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_QueuedItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-ReleaseFailedList.c b/src/ranap/RANAP_RAB-ReleaseFailedList.c
new file mode 100644
index 0000000..1b05839
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ReleaseFailedList.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+#include <constr_CHOICE.h>
+
+#include "RANAP_RAB-ReleaseFailedList.h"
+
+int
+RANAP_RAB_ReleaseFailedList_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	/* Replace with underlying type checker */
+	td->check_constraints = asn_DEF_RANAP_RAB_FailedList.check_constraints;
+	return td->check_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using RANAP_RAB_FailedList,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+RANAP_RAB_ReleaseFailedList_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+	td->free_struct    = asn_DEF_RANAP_RAB_FailedList.free_struct;
+	td->print_struct   = asn_DEF_RANAP_RAB_FailedList.print_struct;
+	td->check_constraints = asn_DEF_RANAP_RAB_FailedList.check_constraints;
+	td->ber_decoder    = asn_DEF_RANAP_RAB_FailedList.ber_decoder;
+	td->der_encoder    = asn_DEF_RANAP_RAB_FailedList.der_encoder;
+	td->xer_decoder    = asn_DEF_RANAP_RAB_FailedList.xer_decoder;
+	td->xer_encoder    = asn_DEF_RANAP_RAB_FailedList.xer_encoder;
+	td->uper_decoder   = asn_DEF_RANAP_RAB_FailedList.uper_decoder;
+	td->uper_encoder   = asn_DEF_RANAP_RAB_FailedList.uper_encoder;
+	td->aper_decoder   = asn_DEF_RANAP_RAB_FailedList.aper_decoder;
+	td->aper_encoder   = asn_DEF_RANAP_RAB_FailedList.aper_encoder;
+	/* The next four lines are here because of -fknown-extern-type */
+	td->tags           = asn_DEF_RANAP_RAB_FailedList.tags;
+	td->tags_count     = asn_DEF_RANAP_RAB_FailedList.tags_count;
+	td->all_tags       = asn_DEF_RANAP_RAB_FailedList.all_tags;
+	td->all_tags_count = asn_DEF_RANAP_RAB_FailedList.all_tags_count;
+	/* End of these lines */
+	if(!td->per_constraints)
+		td->per_constraints = asn_DEF_RANAP_RAB_FailedList.per_constraints;
+	td->elements       = asn_DEF_RANAP_RAB_FailedList.elements;
+	td->elements_count = asn_DEF_RANAP_RAB_FailedList.elements_count;
+	td->specifics      = asn_DEF_RANAP_RAB_FailedList.specifics;
+}
+
+void
+RANAP_RAB_ReleaseFailedList_free(asn_TYPE_descriptor_t *td,
+		void *struct_ptr, int contents_only) {
+	RANAP_RAB_ReleaseFailedList_1_inherit_TYPE_descriptor(td);
+	td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+RANAP_RAB_ReleaseFailedList_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+	RANAP_RAB_ReleaseFailedList_1_inherit_TYPE_descriptor(td);
+	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+RANAP_RAB_ReleaseFailedList_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const void *bufptr, size_t size, int tag_mode) {
+	RANAP_RAB_ReleaseFailedList_1_inherit_TYPE_descriptor(td);
+	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+RANAP_RAB_ReleaseFailedList_encode_der(asn_TYPE_descriptor_t *td,
+		void *structure, int tag_mode, ber_tlv_tag_t tag,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	RANAP_RAB_ReleaseFailedList_1_inherit_TYPE_descriptor(td);
+	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+RANAP_RAB_ReleaseFailedList_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+	RANAP_RAB_ReleaseFailedList_1_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+RANAP_RAB_ReleaseFailedList_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+		int ilevel, enum xer_encoder_flags_e flags,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	RANAP_RAB_ReleaseFailedList_1_inherit_TYPE_descriptor(td);
+	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+asn_dec_rval_t
+RANAP_RAB_ReleaseFailedList_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) {
+	RANAP_RAB_ReleaseFailedList_1_inherit_TYPE_descriptor(td);
+	return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data);
+}
+
+asn_enc_rval_t
+RANAP_RAB_ReleaseFailedList_encode_uper(asn_TYPE_descriptor_t *td,
+		asn_per_constraints_t *constraints,
+		void *structure, asn_per_outp_t *per_out) {
+	RANAP_RAB_ReleaseFailedList_1_inherit_TYPE_descriptor(td);
+	return td->uper_encoder(td, constraints, structure, per_out);
+}
+
+asn_enc_rval_t
+RANAP_RAB_ReleaseFailedList_encode_aper(asn_TYPE_descriptor_t *td,
+		asn_per_constraints_t *constraints,
+		void *structure, asn_per_outp_t *per_out) {
+	RANAP_RAB_ReleaseFailedList_1_inherit_TYPE_descriptor(td);
+	return td->aper_encoder(td, constraints, structure, per_out);
+}
+
+asn_dec_rval_t
+RANAP_RAB_ReleaseFailedList_decode_aper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) {
+	RANAP_RAB_ReleaseFailedList_1_inherit_TYPE_descriptor(td);
+	return td->aper_decoder(opt_codec_ctx, td, constraints, structure, per_data);
+}
+
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ReleaseFailedList = {
+	"RANAP_RAB-ReleaseFailedList",
+	"RANAP_RAB-ReleaseFailedList",
+	RANAP_RAB_ReleaseFailedList_free,
+	RANAP_RAB_ReleaseFailedList_print,
+	RANAP_RAB_ReleaseFailedList_constraint,
+	RANAP_RAB_ReleaseFailedList_decode_ber,
+	RANAP_RAB_ReleaseFailedList_encode_der,
+	RANAP_RAB_ReleaseFailedList_decode_xer,
+	RANAP_RAB_ReleaseFailedList_encode_xer,
+	RANAP_RAB_ReleaseFailedList_decode_uper,
+	RANAP_RAB_ReleaseFailedList_encode_uper,
+	RANAP_RAB_ReleaseFailedList_decode_aper,
+	RANAP_RAB_ReleaseFailedList_encode_aper,
+	CHOICE_outmost_tag,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	0,	/* No PER visible constraints */
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/src/ranap/RANAP_RAB-ReleaseFailedList.h b/src/ranap/RANAP_RAB-ReleaseFailedList.h
new file mode 100644
index 0000000..489720a
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ReleaseFailedList.h
@@ -0,0 +1,42 @@
+/*
+ * 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_ReleaseFailedList_H_
+#define	_RANAP_RAB_ReleaseFailedList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-FailedList.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-ReleaseFailedList */
+typedef RANAP_RAB_FailedList_t	 RANAP_RAB_ReleaseFailedList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ReleaseFailedList;
+asn_struct_free_f RANAP_RAB_ReleaseFailedList_free;
+asn_struct_print_f RANAP_RAB_ReleaseFailedList_print;
+asn_constr_check_f RANAP_RAB_ReleaseFailedList_constraint;
+ber_type_decoder_f RANAP_RAB_ReleaseFailedList_decode_ber;
+der_type_encoder_f RANAP_RAB_ReleaseFailedList_encode_der;
+xer_type_decoder_f RANAP_RAB_ReleaseFailedList_decode_xer;
+xer_type_encoder_f RANAP_RAB_ReleaseFailedList_encode_xer;
+per_type_decoder_f RANAP_RAB_ReleaseFailedList_decode_uper;
+per_type_encoder_f RANAP_RAB_ReleaseFailedList_encode_uper;
+per_type_decoder_f RANAP_RAB_ReleaseFailedList_decode_aper;
+per_type_encoder_f RANAP_RAB_ReleaseFailedList_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_ReleaseFailedList_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-ReleaseItem.c b/src/ranap/RANAP_RAB-ReleaseItem.c
new file mode 100644
index 0000000..da16d72
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ReleaseItem.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-ReleaseItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_ReleaseItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ReleaseItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ReleaseItem, cause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_Cause,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"cause"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_ReleaseItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_ReleaseItem_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ReleaseItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ReleaseItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ReleaseItem_specs_1 = {
+	sizeof(struct RANAP_RAB_ReleaseItem),
+	offsetof(struct RANAP_RAB_ReleaseItem, _asn_ctx),
+	asn_MAP_RANAP_RAB_ReleaseItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_ReleaseItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ReleaseItem = {
+	"RANAP_RAB-ReleaseItem",
+	"RANAP_RAB-ReleaseItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_ReleaseItem_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_ReleaseItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ReleaseItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_ReleaseItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_ReleaseItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ReleaseItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_ReleaseItem_1,
+	3,	/* Elements count */
+	&asn_SPC_RANAP_RAB_ReleaseItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-ReleaseItem.h b/src/ranap/RANAP_RAB-ReleaseItem.h
new file mode 100644
index 0000000..b0bc3b6
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ReleaseItem.h
@@ -0,0 +1,45 @@
+/*
+ * 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_ReleaseItem_H_
+#define	_RANAP_RAB_ReleaseItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_Cause.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-ReleaseItem */
+typedef struct RANAP_RAB_ReleaseItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_Cause_t	 cause;
+	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_ReleaseItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ReleaseItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_ReleaseItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-ReleasedItem-IuRelComp.c b/src/ranap/RANAP_RAB-ReleasedItem-IuRelComp.c
new file mode 100644
index 0000000..99d3e9e
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ReleasedItem-IuRelComp.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-ReleasedItem-IuRelComp.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_ReleasedItem_IuRelComp_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ReleasedItem_IuRelComp, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANAP_RAB_ReleasedItem_IuRelComp, dL_GTP_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DL_GTP_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dL-GTP-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_ReleasedItem_IuRelComp, uL_GTP_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UL_GTP_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"uL-GTP-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_ReleasedItem_IuRelComp, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_ReleasedItem_IuRelComp_oms_1[] = { 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ReleasedItem_IuRelComp_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ReleasedItem_IuRelComp_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dL-GTP-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* uL-GTP-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ReleasedItem_IuRelComp_specs_1 = {
+	sizeof(struct RANAP_RAB_ReleasedItem_IuRelComp),
+	offsetof(struct RANAP_RAB_ReleasedItem_IuRelComp, _asn_ctx),
+	asn_MAP_RANAP_RAB_ReleasedItem_IuRelComp_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_ReleasedItem_IuRelComp_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	3,	/* Start extensions */
+	5	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ReleasedItem_IuRelComp = {
+	"RANAP_RAB-ReleasedItem-IuRelComp",
+	"RANAP_RAB-ReleasedItem-IuRelComp",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_ReleasedItem_IuRelComp_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_ReleasedItem_IuRelComp_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ReleasedItem_IuRelComp_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_ReleasedItem_IuRelComp_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_ReleasedItem_IuRelComp_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ReleasedItem_IuRelComp_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_ReleasedItem_IuRelComp_1,
+	4,	/* Elements count */
+	&asn_SPC_RANAP_RAB_ReleasedItem_IuRelComp_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-ReleasedItem-IuRelComp.h b/src/ranap/RANAP_RAB-ReleasedItem-IuRelComp.h
new file mode 100644
index 0000000..d5da048
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ReleasedItem-IuRelComp.h
@@ -0,0 +1,47 @@
+/*
+ * 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_ReleasedItem_IuRelComp_H_
+#define	_RANAP_RAB_ReleasedItem_IuRelComp_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_DL-GTP-PDU-SequenceNumber.h"
+#include "RANAP_UL-GTP-PDU-SequenceNumber.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-ReleasedItem-IuRelComp */
+typedef struct RANAP_RAB_ReleasedItem_IuRelComp {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_DL_GTP_PDU_SequenceNumber_t	*dL_GTP_PDU_SequenceNumber	/* OPTIONAL */;
+	RANAP_UL_GTP_PDU_SequenceNumber_t	*uL_GTP_PDU_SequenceNumber	/* 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_ReleasedItem_IuRelComp_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ReleasedItem_IuRelComp;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_ReleasedItem_IuRelComp_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-ReleasedItem.c b/src/ranap/RANAP_RAB-ReleasedItem.c
new file mode 100644
index 0000000..54c1a60
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ReleasedItem.c
@@ -0,0 +1,103 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-ReleasedItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_ReleasedItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ReleasedItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 4, offsetof(struct RANAP_RAB_ReleasedItem, dl_dataVolumes),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DataVolumeList,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dl-dataVolumes"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANAP_RAB_ReleasedItem, dL_GTP_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DL_GTP_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dL-GTP-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_ReleasedItem, uL_GTP_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UL_GTP_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"uL-GTP-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_ReleasedItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_ReleasedItem_oms_1[] = { 1, 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ReleasedItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ReleasedItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-dataVolumes */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dL-GTP-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uL-GTP-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ReleasedItem_specs_1 = {
+	sizeof(struct RANAP_RAB_ReleasedItem),
+	offsetof(struct RANAP_RAB_ReleasedItem, _asn_ctx),
+	asn_MAP_RANAP_RAB_ReleasedItem_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_ReleasedItem_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	4,	/* Start extensions */
+	6	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ReleasedItem = {
+	"RANAP_RAB-ReleasedItem",
+	"RANAP_RAB-ReleasedItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_ReleasedItem_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_ReleasedItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ReleasedItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_ReleasedItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_ReleasedItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ReleasedItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_ReleasedItem_1,
+	5,	/* Elements count */
+	&asn_SPC_RANAP_RAB_ReleasedItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-ReleasedItem.h b/src/ranap/RANAP_RAB-ReleasedItem.h
new file mode 100644
index 0000000..0c3db59
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ReleasedItem.h
@@ -0,0 +1,49 @@
+/*
+ * 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_ReleasedItem_H_
+#define	_RANAP_RAB_ReleasedItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_DataVolumeList.h"
+#include "RANAP_DL-GTP-PDU-SequenceNumber.h"
+#include "RANAP_UL-GTP-PDU-SequenceNumber.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-ReleasedItem */
+typedef struct RANAP_RAB_ReleasedItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_DataVolumeList_t	*dl_dataVolumes	/* OPTIONAL */;
+	RANAP_DL_GTP_PDU_SequenceNumber_t	*dL_GTP_PDU_SequenceNumber	/* OPTIONAL */;
+	RANAP_UL_GTP_PDU_SequenceNumber_t	*uL_GTP_PDU_SequenceNumber	/* 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_ReleasedItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ReleasedItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_ReleasedItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-RelocationReleaseItem.c b/src/ranap/RANAP_RAB-RelocationReleaseItem.c
new file mode 100644
index 0000000..02590d2
--- /dev/null
+++ b/src/ranap/RANAP_RAB-RelocationReleaseItem.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-RelocationReleaseItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_RelocationReleaseItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_RelocationReleaseItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_RelocationReleaseItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_RelocationReleaseItem_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_RelocationReleaseItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_RelocationReleaseItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_RelocationReleaseItem_specs_1 = {
+	sizeof(struct RANAP_RAB_RelocationReleaseItem),
+	offsetof(struct RANAP_RAB_RelocationReleaseItem, _asn_ctx),
+	asn_MAP_RANAP_RAB_RelocationReleaseItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_RelocationReleaseItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* Start extensions */
+	3	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_RelocationReleaseItem = {
+	"RANAP_RAB-RelocationReleaseItem",
+	"RANAP_RAB-RelocationReleaseItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_RelocationReleaseItem_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_RelocationReleaseItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_RelocationReleaseItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_RelocationReleaseItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_RelocationReleaseItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_RelocationReleaseItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_RelocationReleaseItem_1,
+	2,	/* Elements count */
+	&asn_SPC_RANAP_RAB_RelocationReleaseItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-RelocationReleaseItem.h b/src/ranap/RANAP_RAB-RelocationReleaseItem.h
new file mode 100644
index 0000000..c429332
--- /dev/null
+++ b/src/ranap/RANAP_RAB-RelocationReleaseItem.h
@@ -0,0 +1,43 @@
+/*
+ * 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_RelocationReleaseItem_H_
+#define	_RANAP_RAB_RelocationReleaseItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-RelocationReleaseItem */
+typedef struct RANAP_RAB_RelocationReleaseItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	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_RelocationReleaseItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_RelocationReleaseItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_RelocationReleaseItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-SetupItem-EnhRelocInfoReq.c b/src/ranap/RANAP_RAB-SetupItem-EnhRelocInfoReq.c
new file mode 100644
index 0000000..9bafc6f
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupItem-EnhRelocInfoReq.c
@@ -0,0 +1,163 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-SetupItem-EnhRelocInfoReq.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupItem_EnhRelocInfoReq_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq, cN_DomainIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_CN_DomainIndicator,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"cN-DomainIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq, rAB_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_Parameters,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-Parameters"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq, dataVolumeReportingIndication),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DataVolumeReportingIndication,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dataVolumeReportingIndication"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq, pDP_TypeInformation),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_PDP_TypeInformation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"pDP-TypeInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq, userPlaneInformation),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UserPlaneInformation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"userPlaneInformation"
+		},
+	{ ATF_POINTER, 5, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq, dataForwardingInformation),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TNLInformationEnhRelInfoReq,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dataForwardingInformation"
+		},
+	{ ATF_POINTER, 4, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq, sourceSideIuULTNLInfo),
+		(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TNLInformationEnhRelInfoReq,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"sourceSideIuULTNLInfo"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq, service_Handover),
+		(ASN_TAG_CLASS_CONTEXT | (8 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_Service_Handover,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"service-Handover"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq, alt_RAB_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (9 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_Alt_RAB_Parameters,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"alt-RAB-Parameters"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (10 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_SetupItem_EnhRelocInfoReq_oms_1[] = { 3, 4, 6, 7, 8, 9, 10 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupItem_EnhRelocInfoReq_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cN-DomainIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rAB-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dataVolumeReportingIndication */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* pDP-TypeInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* userPlaneInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* dataForwardingInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* sourceSideIuULTNLInfo */
+    { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* service-Handover */
+    { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* alt-RAB-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupItem_EnhRelocInfoReq_specs_1 = {
+	sizeof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq),
+	offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoReq, _asn_ctx),
+	asn_MAP_RANAP_RAB_SetupItem_EnhRelocInfoReq_tag2el_1,
+	11,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_SetupItem_EnhRelocInfoReq_oms_1,	/* Optional members */
+	7, 0,	/* Root/Additions */
+	10,	/* Start extensions */
+	12	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoReq = {
+	"RANAP_RAB-SetupItem-EnhRelocInfoReq",
+	"RANAP_RAB-SetupItem-EnhRelocInfoReq",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoReq_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoReq_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoReq_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoReq_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoReq_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_SetupItem_EnhRelocInfoReq_1,
+	11,	/* Elements count */
+	&asn_SPC_RANAP_RAB_SetupItem_EnhRelocInfoReq_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-SetupItem-EnhRelocInfoReq.h b/src/ranap/RANAP_RAB-SetupItem-EnhRelocInfoReq.h
new file mode 100644
index 0000000..6082fa7
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupItem-EnhRelocInfoReq.h
@@ -0,0 +1,60 @@
+/*
+ * 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_EnhRelocInfoReq_H_
+#define	_RANAP_RAB_SetupItem_EnhRelocInfoReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_CN-DomainIndicator.h"
+#include "RANAP_RAB-Parameters.h"
+#include "RANAP_DataVolumeReportingIndication.h"
+#include "RANAP_PDP-TypeInformation.h"
+#include "RANAP_UserPlaneInformation.h"
+#include "RANAP_TNLInformationEnhRelInfoReq.h"
+#include "RANAP_Service-Handover.h"
+#include "RANAP_Alt-RAB-Parameters.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-SetupItem-EnhRelocInfoReq */
+typedef struct RANAP_RAB_SetupItem_EnhRelocInfoReq {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_CN_DomainIndicator_t	 cN_DomainIndicator;
+	RANAP_RAB_Parameters_t	 rAB_Parameters;
+	RANAP_DataVolumeReportingIndication_t	*dataVolumeReportingIndication	/* OPTIONAL */;
+	RANAP_PDP_TypeInformation_t	*pDP_TypeInformation	/* OPTIONAL */;
+	RANAP_UserPlaneInformation_t	 userPlaneInformation;
+	RANAP_TNLInformationEnhRelInfoReq_t	*dataForwardingInformation	/* OPTIONAL */;
+	RANAP_TNLInformationEnhRelInfoReq_t	*sourceSideIuULTNLInfo	/* OPTIONAL */;
+	RANAP_Service_Handover_t	*service_Handover	/* OPTIONAL */;
+	RANAP_Alt_RAB_Parameters_t	*alt_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_EnhRelocInfoReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_SetupItem_EnhRelocInfoReq_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-SetupItem-EnhRelocInfoRes.c b/src/ranap/RANAP_RAB-SetupItem-EnhRelocInfoRes.c
new file mode 100644
index 0000000..2534392
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupItem-EnhRelocInfoRes.c
@@ -0,0 +1,103 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-SetupItem-EnhRelocInfoRes.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupItem_EnhRelocInfoRes_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoRes, cN_DomainIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_CN_DomainIndicator,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"cN-DomainIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoRes, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoRes, dataForwardingInformation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TNLInformationEnhRelInfoRes,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dataForwardingInformation"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoRes, ass_RAB_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_Ass_RAB_Parameters,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"ass-RAB-Parameters"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoRes, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_SetupItem_EnhRelocInfoRes_oms_1[] = { 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoRes_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupItem_EnhRelocInfoRes_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cN-DomainIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dataForwardingInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ass-RAB-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupItem_EnhRelocInfoRes_specs_1 = {
+	sizeof(struct RANAP_RAB_SetupItem_EnhRelocInfoRes),
+	offsetof(struct RANAP_RAB_SetupItem_EnhRelocInfoRes, _asn_ctx),
+	asn_MAP_RANAP_RAB_SetupItem_EnhRelocInfoRes_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_SetupItem_EnhRelocInfoRes_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	4,	/* Start extensions */
+	6	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoRes = {
+	"RANAP_RAB-SetupItem-EnhRelocInfoRes",
+	"RANAP_RAB-SetupItem-EnhRelocInfoRes",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoRes_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoRes_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoRes_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoRes_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoRes_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoRes_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_SetupItem_EnhRelocInfoRes_1,
+	5,	/* Elements count */
+	&asn_SPC_RANAP_RAB_SetupItem_EnhRelocInfoRes_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-SetupItem-EnhRelocInfoRes.h b/src/ranap/RANAP_RAB-SetupItem-EnhRelocInfoRes.h
new file mode 100644
index 0000000..64d5e7a
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupItem-EnhRelocInfoRes.h
@@ -0,0 +1,49 @@
+/*
+ * 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_EnhRelocInfoRes_H_
+#define	_RANAP_RAB_SetupItem_EnhRelocInfoRes_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_CN-DomainIndicator.h"
+#include "RANAP_RAB-ID.h"
+#include "RANAP_TNLInformationEnhRelInfoRes.h"
+#include "RANAP_Ass-RAB-Parameters.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-SetupItem-EnhRelocInfoRes */
+typedef struct RANAP_RAB_SetupItem_EnhRelocInfoRes {
+	RANAP_CN_DomainIndicator_t	 cN_DomainIndicator;
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_TNLInformationEnhRelInfoRes_t	*dataForwardingInformation	/* 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_EnhRelocInfoRes_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupItem_EnhRelocInfoRes;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_SetupItem_EnhRelocInfoRes_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-SetupItem-EnhancedRelocCompleteReq.c b/src/ranap/RANAP_RAB-SetupItem-EnhancedRelocCompleteReq.c
new file mode 100644
index 0000000..bae9322
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupItem-EnhancedRelocCompleteReq.c
@@ -0,0 +1,103 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-SetupItem-EnhancedRelocCompleteReq.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteReq, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 4, offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteReq, transportLayerAddressReq1),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TransportLayerAddress,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"transportLayerAddressReq1"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteReq, iuTransportAssociationReq1),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_IuTransportAssociation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iuTransportAssociationReq1"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteReq, ass_RAB_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_Ass_RAB_Parameters,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"ass-RAB-Parameters"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteReq, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_oms_1[] = { 1, 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transportLayerAddressReq1 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* iuTransportAssociationReq1 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ass-RAB-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_specs_1 = {
+	sizeof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteReq),
+	offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteReq, _asn_ctx),
+	asn_MAP_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	4,	/* Start extensions */
+	6	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq = {
+	"RANAP_RAB-SetupItem-EnhancedRelocCompleteReq",
+	"RANAP_RAB-SetupItem-EnhancedRelocCompleteReq",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_1,
+	5,	/* Elements count */
+	&asn_SPC_RANAP_RAB_SetupItem_EnhancedRelocCompleteReq_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-SetupItem-EnhancedRelocCompleteReq.h b/src/ranap/RANAP_RAB-SetupItem-EnhancedRelocCompleteReq.h
new file mode 100644
index 0000000..dc36157
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupItem-EnhancedRelocCompleteReq.h
@@ -0,0 +1,49 @@
+/*
+ * 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>
diff --git a/src/ranap/RANAP_RAB-SetupItem-EnhancedRelocCompleteRes.c b/src/ranap/RANAP_RAB-SetupItem-EnhancedRelocCompleteRes.c
new file mode 100644
index 0000000..28ddc9a
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupItem-EnhancedRelocCompleteRes.c
@@ -0,0 +1,123 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-SetupItem-EnhancedRelocCompleteRes.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteRes, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteRes, rAB_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_Parameters,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-Parameters"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteRes, userPlaneInformation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UserPlaneInformation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"userPlaneInformation"
+		},
+	{ ATF_POINTER, 4, offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteRes, transportLayerAddressRes1),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TransportLayerAddress,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"transportLayerAddressRes1"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteRes, iuTransportAssociationRes1),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_IuTransportAssociation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iuTransportAssociationRes1"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteRes, rab2beReleasedList),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ToBeReleasedList_EnhancedRelocCompleteRes,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rab2beReleasedList"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteRes, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_oms_1[] = { 1, 3, 4, 5, 6 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rAB-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* userPlaneInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* transportLayerAddressRes1 */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* iuTransportAssociationRes1 */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* rab2beReleasedList */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_specs_1 = {
+	sizeof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteRes),
+	offsetof(struct RANAP_RAB_SetupItem_EnhancedRelocCompleteRes, _asn_ctx),
+	asn_MAP_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_tag2el_1,
+	7,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_oms_1,	/* Optional members */
+	5, 0,	/* Root/Additions */
+	6,	/* Start extensions */
+	8	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes = {
+	"RANAP_RAB-SetupItem-EnhancedRelocCompleteRes",
+	"RANAP_RAB-SetupItem-EnhancedRelocCompleteRes",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_1,
+	7,	/* Elements count */
+	&asn_SPC_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-SetupItem-EnhancedRelocCompleteRes.h b/src/ranap/RANAP_RAB-SetupItem-EnhancedRelocCompleteRes.h
new file mode 100644
index 0000000..1da1d54
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupItem-EnhancedRelocCompleteRes.h
@@ -0,0 +1,53 @@
+/*
+ * 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_EnhancedRelocCompleteRes_H_
+#define	_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_RAB-Parameters.h"
+#include "RANAP_UserPlaneInformation.h"
+#include "RANAP_TransportLayerAddress.h"
+#include "RANAP_IuTransportAssociation.h"
+#include "RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-SetupItem-EnhancedRelocCompleteRes */
+typedef struct RANAP_RAB_SetupItem_EnhancedRelocCompleteRes {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_RAB_Parameters_t	*rAB_Parameters	/* OPTIONAL */;
+	RANAP_UserPlaneInformation_t	 userPlaneInformation;
+	RANAP_TransportLayerAddress_t	*transportLayerAddressRes1	/* OPTIONAL */;
+	RANAP_IuTransportAssociation_t	*iuTransportAssociationRes1	/* OPTIONAL */;
+	RANAP_RAB_ToBeReleasedList_EnhancedRelocCompleteRes_t	*rab2beReleasedList	/* 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_EnhancedRelocCompleteRes_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupItem_EnhancedRelocCompleteRes;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_SetupItem_EnhancedRelocCompleteRes_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-SetupItem-RelocReq.c b/src/ranap/RANAP_RAB-SetupItem-RelocReq.c
new file mode 100644
index 0000000..d6d576b
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupItem-RelocReq.c
@@ -0,0 +1,153 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-SetupItem-RelocReq.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupItem_RelocReq_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_RelocReq, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupItem_RelocReq, nAS_SynchronisationIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_NAS_SynchronisationIndicator,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"nAS-SynchronisationIndicator"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_RelocReq, rAB_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_Parameters,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-Parameters"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_SetupItem_RelocReq, dataVolumeReportingIndication),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DataVolumeReportingIndication,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dataVolumeReportingIndication"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupItem_RelocReq, pDP_TypeInformation),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_PDP_TypeInformation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"pDP-TypeInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_RelocReq, userPlaneInformation),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UserPlaneInformation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"userPlaneInformation"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_RelocReq, transportLayerAddress),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TransportLayerAddress,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"transportLayerAddress"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_RelocReq, iuTransportAssociation),
+		(ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_IuTransportAssociation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iuTransportAssociation"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_SetupItem_RelocReq, service_Handover),
+		(ASN_TAG_CLASS_CONTEXT | (8 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_Service_Handover,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"service-Handover"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupItem_RelocReq, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (9 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_SetupItem_RelocReq_oms_1[] = { 1, 3, 4, 8, 9 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupItem_RelocReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupItem_RelocReq_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nAS-SynchronisationIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rAB-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dataVolumeReportingIndication */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* pDP-TypeInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* userPlaneInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* transportLayerAddress */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* iuTransportAssociation */
+    { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* service-Handover */
+    { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupItem_RelocReq_specs_1 = {
+	sizeof(struct RANAP_RAB_SetupItem_RelocReq),
+	offsetof(struct RANAP_RAB_SetupItem_RelocReq, _asn_ctx),
+	asn_MAP_RANAP_RAB_SetupItem_RelocReq_tag2el_1,
+	10,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_SetupItem_RelocReq_oms_1,	/* Optional members */
+	5, 0,	/* Root/Additions */
+	9,	/* Start extensions */
+	11	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupItem_RelocReq = {
+	"RANAP_RAB-SetupItem-RelocReq",
+	"RANAP_RAB-SetupItem-RelocReq",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_SetupItem_RelocReq_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_SetupItem_RelocReq_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupItem_RelocReq_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_SetupItem_RelocReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_SetupItem_RelocReq_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupItem_RelocReq_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_SetupItem_RelocReq_1,
+	10,	/* Elements count */
+	&asn_SPC_RANAP_RAB_SetupItem_RelocReq_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-SetupItem-RelocReq.h b/src/ranap/RANAP_RAB-SetupItem-RelocReq.h
new file mode 100644
index 0000000..0f6e5d5
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupItem-RelocReq.h
@@ -0,0 +1,59 @@
+/*
+ * 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_RelocReq_H_
+#define	_RANAP_RAB_SetupItem_RelocReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_NAS-SynchronisationIndicator.h"
+#include "RANAP_RAB-Parameters.h"
+#include "RANAP_DataVolumeReportingIndication.h"
+#include "RANAP_PDP-TypeInformation.h"
+#include "RANAP_UserPlaneInformation.h"
+#include "RANAP_TransportLayerAddress.h"
+#include "RANAP_IuTransportAssociation.h"
+#include "RANAP_Service-Handover.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-SetupItem-RelocReq */
+typedef struct RANAP_RAB_SetupItem_RelocReq {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_NAS_SynchronisationIndicator_t	*nAS_SynchronisationIndicator	/* OPTIONAL */;
+	RANAP_RAB_Parameters_t	 rAB_Parameters;
+	RANAP_DataVolumeReportingIndication_t	*dataVolumeReportingIndication	/* OPTIONAL */;
+	RANAP_PDP_TypeInformation_t	*pDP_TypeInformation	/* OPTIONAL */;
+	RANAP_UserPlaneInformation_t	 userPlaneInformation;
+	RANAP_TransportLayerAddress_t	 transportLayerAddress;
+	RANAP_IuTransportAssociation_t	 iuTransportAssociation;
+	RANAP_Service_Handover_t	*service_Handover	/* 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_RelocReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupItem_RelocReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_SetupItem_RelocReq_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-SetupItem-RelocReqAck.c b/src/ranap/RANAP_RAB-SetupItem-RelocReqAck.c
new file mode 100644
index 0000000..5f9a01a
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupItem-RelocReqAck.c
@@ -0,0 +1,93 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-SetupItem-RelocReqAck.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupItem_RelocReqAck_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupItem_RelocReqAck, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANAP_RAB_SetupItem_RelocReqAck, transportLayerAddress),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TransportLayerAddress,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"transportLayerAddress"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_SetupItem_RelocReqAck, iuTransportAssociation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_IuTransportAssociation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iuTransportAssociation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupItem_RelocReqAck, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_SetupItem_RelocReqAck_oms_1[] = { 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupItem_RelocReqAck_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupItem_RelocReqAck_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transportLayerAddress */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* iuTransportAssociation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupItem_RelocReqAck_specs_1 = {
+	sizeof(struct RANAP_RAB_SetupItem_RelocReqAck),
+	offsetof(struct RANAP_RAB_SetupItem_RelocReqAck, _asn_ctx),
+	asn_MAP_RANAP_RAB_SetupItem_RelocReqAck_tag2el_1,
+	4,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_SetupItem_RelocReqAck_oms_1,	/* Optional members */
+	3, 0,	/* Root/Additions */
+	3,	/* Start extensions */
+	5	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupItem_RelocReqAck = {
+	"RANAP_RAB-SetupItem-RelocReqAck",
+	"RANAP_RAB-SetupItem-RelocReqAck",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_SetupItem_RelocReqAck_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_SetupItem_RelocReqAck_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupItem_RelocReqAck_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_SetupItem_RelocReqAck_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_SetupItem_RelocReqAck_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupItem_RelocReqAck_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_SetupItem_RelocReqAck_1,
+	4,	/* Elements count */
+	&asn_SPC_RANAP_RAB_SetupItem_RelocReqAck_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-SetupItem-RelocReqAck.h b/src/ranap/RANAP_RAB-SetupItem-RelocReqAck.h
new file mode 100644
index 0000000..650bf72
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupItem-RelocReqAck.h
@@ -0,0 +1,47 @@
+/*
+ * 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_RelocReqAck_H_
+#define	_RANAP_RAB_SetupItem_RelocReqAck_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_TransportLayerAddress.h"
+#include "RANAP_IuTransportAssociation.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-SetupItem-RelocReqAck */
+typedef struct RANAP_RAB_SetupItem_RelocReqAck {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_TransportLayerAddress_t	*transportLayerAddress	/* OPTIONAL */;
+	RANAP_IuTransportAssociation_t	*iuTransportAssociation	/* 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_RelocReqAck_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupItem_RelocReqAck;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_SetupItem_RelocReqAck_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-SetupOrModifiedItem.c b/src/ranap/RANAP_RAB-SetupOrModifiedItem.c
new file mode 100644
index 0000000..8904ab9
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupOrModifiedItem.c
@@ -0,0 +1,103 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-SetupOrModifiedItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupOrModifiedItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupOrModifiedItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 4, offsetof(struct RANAP_RAB_SetupOrModifiedItem, transportLayerAddress),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TransportLayerAddress,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"transportLayerAddress"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANAP_RAB_SetupOrModifiedItem, iuTransportAssociation),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_IuTransportAssociation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iuTransportAssociation"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_SetupOrModifiedItem, dl_dataVolumes),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DataVolumeList,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dl-dataVolumes"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupOrModifiedItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_SetupOrModifiedItem_oms_1[] = { 1, 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupOrModifiedItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupOrModifiedItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* transportLayerAddress */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* iuTransportAssociation */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* dl-dataVolumes */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupOrModifiedItem_specs_1 = {
+	sizeof(struct RANAP_RAB_SetupOrModifiedItem),
+	offsetof(struct RANAP_RAB_SetupOrModifiedItem, _asn_ctx),
+	asn_MAP_RANAP_RAB_SetupOrModifiedItem_tag2el_1,
+	5,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_SetupOrModifiedItem_oms_1,	/* Optional members */
+	4, 0,	/* Root/Additions */
+	4,	/* Start extensions */
+	6	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupOrModifiedItem = {
+	"RANAP_RAB-SetupOrModifiedItem",
+	"RANAP_RAB-SetupOrModifiedItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_SetupOrModifiedItem_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_SetupOrModifiedItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupOrModifiedItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_SetupOrModifiedItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_SetupOrModifiedItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupOrModifiedItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_SetupOrModifiedItem_1,
+	5,	/* Elements count */
+	&asn_SPC_RANAP_RAB_SetupOrModifiedItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-SetupOrModifiedItem.h b/src/ranap/RANAP_RAB-SetupOrModifiedItem.h
new file mode 100644
index 0000000..faf2b17
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupOrModifiedItem.h
@@ -0,0 +1,49 @@
+/*
+ * 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_SetupOrModifiedItem_H_
+#define	_RANAP_RAB_SetupOrModifiedItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_TransportLayerAddress.h"
+#include "RANAP_IuTransportAssociation.h"
+#include "RANAP_DataVolumeList.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-SetupOrModifiedItem */
+typedef struct RANAP_RAB_SetupOrModifiedItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_TransportLayerAddress_t	*transportLayerAddress	/* OPTIONAL */;
+	RANAP_IuTransportAssociation_t	*iuTransportAssociation	/* OPTIONAL */;
+	RANAP_DataVolumeList_t	*dl_dataVolumes	/* 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_SetupOrModifiedItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupOrModifiedItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_SetupOrModifiedItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-SetupOrModifyItemFirst.c b/src/ranap/RANAP_RAB-SetupOrModifyItemFirst.c
new file mode 100644
index 0000000..86d142f
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupOrModifyItemFirst.c
@@ -0,0 +1,123 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-SetupOrModifyItemFirst.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupOrModifyItemFirst_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupOrModifyItemFirst, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 6, offsetof(struct RANAP_RAB_SetupOrModifyItemFirst, nAS_SynchronisationIndicator),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_NAS_SynchronisationIndicator,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"nAS-SynchronisationIndicator"
+		},
+	{ ATF_POINTER, 5, offsetof(struct RANAP_RAB_SetupOrModifyItemFirst, rAB_Parameters),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_Parameters,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-Parameters"
+		},
+	{ ATF_POINTER, 4, offsetof(struct RANAP_RAB_SetupOrModifyItemFirst, userPlaneInformation),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UserPlaneInformation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"userPlaneInformation"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANAP_RAB_SetupOrModifyItemFirst, transportLayerInformation),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TransportLayerInformation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"transportLayerInformation"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_SetupOrModifyItemFirst, service_Handover),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_Service_Handover,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"service-Handover"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupOrModifyItemFirst, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_SetupOrModifyItemFirst_oms_1[] = { 1, 2, 3, 4, 5, 6 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupOrModifyItemFirst_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupOrModifyItemFirst_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nAS-SynchronisationIndicator */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rAB-Parameters */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* userPlaneInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* transportLayerInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* service-Handover */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupOrModifyItemFirst_specs_1 = {
+	sizeof(struct RANAP_RAB_SetupOrModifyItemFirst),
+	offsetof(struct RANAP_RAB_SetupOrModifyItemFirst, _asn_ctx),
+	asn_MAP_RANAP_RAB_SetupOrModifyItemFirst_tag2el_1,
+	7,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_SetupOrModifyItemFirst_oms_1,	/* Optional members */
+	6, 0,	/* Root/Additions */
+	6,	/* Start extensions */
+	8	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupOrModifyItemFirst = {
+	"RANAP_RAB-SetupOrModifyItemFirst",
+	"RANAP_RAB-SetupOrModifyItemFirst",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_SetupOrModifyItemFirst_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_SetupOrModifyItemFirst_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupOrModifyItemFirst_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_SetupOrModifyItemFirst_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_SetupOrModifyItemFirst_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupOrModifyItemFirst_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_SetupOrModifyItemFirst_1,
+	7,	/* Elements count */
+	&asn_SPC_RANAP_RAB_SetupOrModifyItemFirst_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-SetupOrModifyItemFirst.h b/src/ranap/RANAP_RAB-SetupOrModifyItemFirst.h
new file mode 100644
index 0000000..10b63ef
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupOrModifyItemFirst.h
@@ -0,0 +1,53 @@
+/*
+ * 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_SetupOrModifyItemFirst_H_
+#define	_RANAP_RAB_SetupOrModifyItemFirst_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_NAS-SynchronisationIndicator.h"
+#include "RANAP_RAB-Parameters.h"
+#include "RANAP_UserPlaneInformation.h"
+#include "RANAP_TransportLayerInformation.h"
+#include "RANAP_Service-Handover.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-SetupOrModifyItemFirst */
+typedef struct RANAP_RAB_SetupOrModifyItemFirst {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_NAS_SynchronisationIndicator_t	*nAS_SynchronisationIndicator	/* OPTIONAL */;
+	RANAP_RAB_Parameters_t	*rAB_Parameters	/* OPTIONAL */;
+	RANAP_UserPlaneInformation_t	*userPlaneInformation	/* OPTIONAL */;
+	RANAP_TransportLayerInformation_t	*transportLayerInformation	/* OPTIONAL */;
+	RANAP_Service_Handover_t	*service_Handover	/* 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_SetupOrModifyItemFirst_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupOrModifyItemFirst;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_SetupOrModifyItemFirst_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-SetupOrModifyItemSecond.c b/src/ranap/RANAP_RAB-SetupOrModifyItemSecond.c
new file mode 100644
index 0000000..a85346e
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupOrModifyItemSecond.c
@@ -0,0 +1,123 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-SetupOrModifyItemSecond.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupOrModifyItemSecond_1[] = {
+	{ ATF_POINTER, 7, offsetof(struct RANAP_RAB_SetupOrModifyItemSecond, pDP_TypeInformation),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_PDP_TypeInformation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"pDP-TypeInformation"
+		},
+	{ ATF_POINTER, 6, offsetof(struct RANAP_RAB_SetupOrModifyItemSecond, dataVolumeReportingIndication),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DataVolumeReportingIndication,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dataVolumeReportingIndication"
+		},
+	{ ATF_POINTER, 5, offsetof(struct RANAP_RAB_SetupOrModifyItemSecond, dl_GTP_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DL_GTP_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dl-GTP-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 4, offsetof(struct RANAP_RAB_SetupOrModifyItemSecond, ul_GTP_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UL_GTP_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"ul-GTP-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 3, offsetof(struct RANAP_RAB_SetupOrModifyItemSecond, dl_N_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_DL_N_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dl-N-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 2, offsetof(struct RANAP_RAB_SetupOrModifyItemSecond, ul_N_PDU_SequenceNumber),
+		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UL_N_PDU_SequenceNumber,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"ul-N-PDU-SequenceNumber"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_SetupOrModifyItemSecond, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_SetupOrModifyItemSecond_oms_1[] = { 0, 1, 2, 3, 4, 5, 6 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupOrModifyItemSecond_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupOrModifyItemSecond_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pDP-TypeInformation */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dataVolumeReportingIndication */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dl-GTP-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ul-GTP-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* dl-N-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* ul-N-PDU-SequenceNumber */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupOrModifyItemSecond_specs_1 = {
+	sizeof(struct RANAP_RAB_SetupOrModifyItemSecond),
+	offsetof(struct RANAP_RAB_SetupOrModifyItemSecond, _asn_ctx),
+	asn_MAP_RANAP_RAB_SetupOrModifyItemSecond_tag2el_1,
+	7,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_SetupOrModifyItemSecond_oms_1,	/* Optional members */
+	7, 0,	/* Root/Additions */
+	6,	/* Start extensions */
+	8	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupOrModifyItemSecond = {
+	"RANAP_RAB-SetupOrModifyItemSecond",
+	"RANAP_RAB-SetupOrModifyItemSecond",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_SetupOrModifyItemSecond_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_SetupOrModifyItemSecond_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupOrModifyItemSecond_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_SetupOrModifyItemSecond_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_SetupOrModifyItemSecond_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_SetupOrModifyItemSecond_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_SetupOrModifyItemSecond_1,
+	7,	/* Elements count */
+	&asn_SPC_RANAP_RAB_SetupOrModifyItemSecond_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-SetupOrModifyItemSecond.h b/src/ranap/RANAP_RAB-SetupOrModifyItemSecond.h
new file mode 100644
index 0000000..a156092
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupOrModifyItemSecond.h
@@ -0,0 +1,53 @@
+/*
+ * 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_SetupOrModifyItemSecond_H_
+#define	_RANAP_RAB_SetupOrModifyItemSecond_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_PDP-TypeInformation.h"
+#include "RANAP_DataVolumeReportingIndication.h"
+#include "RANAP_DL-GTP-PDU-SequenceNumber.h"
+#include "RANAP_UL-GTP-PDU-SequenceNumber.h"
+#include "RANAP_DL-N-PDU-SequenceNumber.h"
+#include "RANAP_UL-N-PDU-SequenceNumber.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-SetupOrModifyItemSecond */
+typedef struct RANAP_RAB_SetupOrModifyItemSecond {
+	RANAP_PDP_TypeInformation_t	*pDP_TypeInformation	/* OPTIONAL */;
+	RANAP_DataVolumeReportingIndication_t	*dataVolumeReportingIndication	/* OPTIONAL */;
+	RANAP_DL_GTP_PDU_SequenceNumber_t	*dl_GTP_PDU_SequenceNumber	/* OPTIONAL */;
+	RANAP_UL_GTP_PDU_SequenceNumber_t	*ul_GTP_PDU_SequenceNumber	/* OPTIONAL */;
+	RANAP_DL_N_PDU_SequenceNumber_t	*dl_N_PDU_SequenceNumber	/* OPTIONAL */;
+	RANAP_UL_N_PDU_SequenceNumber_t	*ul_N_PDU_SequenceNumber	/* 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_SetupOrModifyItemSecond_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupOrModifyItemSecond;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_SetupOrModifyItemSecond_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-ToBeReleasedItem-EnhancedRelocCompleteRes.c b/src/ranap/RANAP_RAB-ToBeReleasedItem-EnhancedRelocCompleteRes.c
new file mode 100644
index 0000000..c09f6c0
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ToBeReleasedItem-EnhancedRelocCompleteRes.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-ToBeReleasedItem-EnhancedRelocCompleteRes.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes, cause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_Cause,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"cause"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_specs_1 = {
+	sizeof(struct RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes),
+	offsetof(struct RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes, _asn_ctx),
+	asn_MAP_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes = {
+	"RANAP_RAB-ToBeReleasedItem-EnhancedRelocCompleteRes",
+	"RANAP_RAB-ToBeReleasedItem-EnhancedRelocCompleteRes",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_1,
+	3,	/* Elements count */
+	&asn_SPC_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-ToBeReleasedItem-EnhancedRelocCompleteRes.h b/src/ranap/RANAP_RAB-ToBeReleasedItem-EnhancedRelocCompleteRes.h
new file mode 100644
index 0000000..fa15532
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ToBeReleasedItem-EnhancedRelocCompleteRes.h
@@ -0,0 +1,45 @@
+/*
+ * 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_ToBeReleasedItem_EnhancedRelocCompleteRes_H_
+#define	_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_Cause.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-ToBeReleasedItem-EnhancedRelocCompleteRes */
+typedef struct RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_Cause_t	 cause;
+	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_ToBeReleasedItem_EnhancedRelocCompleteRes_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_ToBeReleasedItem_EnhancedRelocCompleteRes_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RABs-ContextFailedtoTransferItem.c b/src/ranap/RANAP_RABs-ContextFailedtoTransferItem.c
new file mode 100644
index 0000000..c2fdac2
--- /dev/null
+++ b/src/ranap/RANAP_RABs-ContextFailedtoTransferItem.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RABs-ContextFailedtoTransferItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RABs_ContextFailedtoTransferItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RABs_ContextFailedtoTransferItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RABs_ContextFailedtoTransferItem, cause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_Cause,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"cause"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RABs_ContextFailedtoTransferItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RABs_ContextFailedtoTransferItem_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RABs_ContextFailedtoTransferItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RABs_ContextFailedtoTransferItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RABs_ContextFailedtoTransferItem_specs_1 = {
+	sizeof(struct RANAP_RABs_ContextFailedtoTransferItem),
+	offsetof(struct RANAP_RABs_ContextFailedtoTransferItem, _asn_ctx),
+	asn_MAP_RANAP_RABs_ContextFailedtoTransferItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANAP_RABs_ContextFailedtoTransferItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RABs_ContextFailedtoTransferItem = {
+	"RANAP_RABs-ContextFailedtoTransferItem",
+	"RANAP_RABs-ContextFailedtoTransferItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RABs_ContextFailedtoTransferItem_tags_1,
+	sizeof(asn_DEF_RANAP_RABs_ContextFailedtoTransferItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RABs_ContextFailedtoTransferItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RABs_ContextFailedtoTransferItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RABs_ContextFailedtoTransferItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RABs_ContextFailedtoTransferItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RABs_ContextFailedtoTransferItem_1,
+	3,	/* Elements count */
+	&asn_SPC_RANAP_RABs_ContextFailedtoTransferItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RABs-ContextFailedtoTransferItem.h b/src/ranap/RANAP_RABs-ContextFailedtoTransferItem.h
new file mode 100644
index 0000000..509385b
--- /dev/null
+++ b/src/ranap/RANAP_RABs-ContextFailedtoTransferItem.h
@@ -0,0 +1,45 @@
+/*
+ * 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_RABs_ContextFailedtoTransferItem_H_
+#define	_RANAP_RABs_ContextFailedtoTransferItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_Cause.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RABs-ContextFailedtoTransferItem */
+typedef struct RANAP_RABs_ContextFailedtoTransferItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_Cause_t	 cause;
+	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_RABs_ContextFailedtoTransferItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RABs_ContextFailedtoTransferItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RABs_ContextFailedtoTransferItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RABs-failed-to-reportItem.c b/src/ranap/RANAP_RABs-failed-to-reportItem.c
new file mode 100644
index 0000000..3e949d4
--- /dev/null
+++ b/src/ranap/RANAP_RABs-failed-to-reportItem.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RABs-failed-to-reportItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RABs_failed_to_reportItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RABs_failed_to_reportItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RABs_failed_to_reportItem, cause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_Cause,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"cause"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RABs_failed_to_reportItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RABs_failed_to_reportItem_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RABs_failed_to_reportItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RABs_failed_to_reportItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RABs_failed_to_reportItem_specs_1 = {
+	sizeof(struct RANAP_RABs_failed_to_reportItem),
+	offsetof(struct RANAP_RABs_failed_to_reportItem, _asn_ctx),
+	asn_MAP_RANAP_RABs_failed_to_reportItem_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANAP_RABs_failed_to_reportItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RABs_failed_to_reportItem = {
+	"RANAP_RABs-failed-to-reportItem",
+	"RANAP_RABs-failed-to-reportItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RABs_failed_to_reportItem_tags_1,
+	sizeof(asn_DEF_RANAP_RABs_failed_to_reportItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RABs_failed_to_reportItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RABs_failed_to_reportItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RABs_failed_to_reportItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RABs_failed_to_reportItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RABs_failed_to_reportItem_1,
+	3,	/* Elements count */
+	&asn_SPC_RANAP_RABs_failed_to_reportItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RABs-failed-to-reportItem.h b/src/ranap/RANAP_RABs-failed-to-reportItem.h
new file mode 100644
index 0000000..cedd2fb
--- /dev/null
+++ b/src/ranap/RANAP_RABs-failed-to-reportItem.h
@@ -0,0 +1,45 @@
+/*
+ * 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_RABs_failed_to_reportItem_H_
+#define	_RANAP_RABs_failed_to_reportItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_Cause.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RABs-failed-to-reportItem */
+typedef struct RANAP_RABs_failed_to_reportItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_Cause_t	 cause;
+	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_RABs_failed_to_reportItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RABs_failed_to_reportItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RABs_failed_to_reportItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_ResetResourceAckItem.c b/src/ranap/RANAP_ResetResourceAckItem.c
new file mode 100644
index 0000000..978b7bf
--- /dev/null
+++ b/src/ranap/RANAP_ResetResourceAckItem.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_ResetResourceAckItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_ResetResourceAckItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_ResetResourceAckItem, iuSigConId),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_IuSignallingConnectionIdentifier,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iuSigConId"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_ResetResourceAckItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_ResetResourceAckItem_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_RANAP_ResetResourceAckItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_ResetResourceAckItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iuSigConId */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_ResetResourceAckItem_specs_1 = {
+	sizeof(struct RANAP_ResetResourceAckItem),
+	offsetof(struct RANAP_ResetResourceAckItem, _asn_ctx),
+	asn_MAP_RANAP_ResetResourceAckItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_RANAP_ResetResourceAckItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* Start extensions */
+	3	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_ResetResourceAckItem = {
+	"RANAP_ResetResourceAckItem",
+	"RANAP_ResetResourceAckItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_ResetResourceAckItem_tags_1,
+	sizeof(asn_DEF_RANAP_ResetResourceAckItem_tags_1)
+		/sizeof(asn_DEF_RANAP_ResetResourceAckItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_ResetResourceAckItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_ResetResourceAckItem_tags_1)
+		/sizeof(asn_DEF_RANAP_ResetResourceAckItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_ResetResourceAckItem_1,
+	2,	/* Elements count */
+	&asn_SPC_RANAP_ResetResourceAckItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_ResetResourceAckItem.h b/src/ranap/RANAP_ResetResourceAckItem.h
new file mode 100644
index 0000000..4e3b83d
--- /dev/null
+++ b/src/ranap/RANAP_ResetResourceAckItem.h
@@ -0,0 +1,43 @@
+/*
+ * 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_ResetResourceAckItem_H_
+#define	_RANAP_ResetResourceAckItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_IuSignallingConnectionIdentifier.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_ResetResourceAckItem */
+typedef struct RANAP_ResetResourceAckItem {
+	RANAP_IuSignallingConnectionIdentifier_t	 iuSigConId;
+	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_ResetResourceAckItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_ResetResourceAckItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_ResetResourceAckItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_ResetResourceItem.c b/src/ranap/RANAP_ResetResourceItem.c
new file mode 100644
index 0000000..f4036c9
--- /dev/null
+++ b/src/ranap/RANAP_ResetResourceItem.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_ResetResourceItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_ResetResourceItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_ResetResourceItem, iuSigConId),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_IuSignallingConnectionIdentifier,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iuSigConId"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_ResetResourceItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_ResetResourceItem_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_RANAP_ResetResourceItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_ResetResourceItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iuSigConId */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_ResetResourceItem_specs_1 = {
+	sizeof(struct RANAP_ResetResourceItem),
+	offsetof(struct RANAP_ResetResourceItem, _asn_ctx),
+	asn_MAP_RANAP_ResetResourceItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_RANAP_ResetResourceItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* Start extensions */
+	3	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_ResetResourceItem = {
+	"RANAP_ResetResourceItem",
+	"RANAP_ResetResourceItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_ResetResourceItem_tags_1,
+	sizeof(asn_DEF_RANAP_ResetResourceItem_tags_1)
+		/sizeof(asn_DEF_RANAP_ResetResourceItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_ResetResourceItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_ResetResourceItem_tags_1)
+		/sizeof(asn_DEF_RANAP_ResetResourceItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_ResetResourceItem_1,
+	2,	/* Elements count */
+	&asn_SPC_RANAP_ResetResourceItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_ResetResourceItem.h b/src/ranap/RANAP_ResetResourceItem.h
new file mode 100644
index 0000000..a1f44a5
--- /dev/null
+++ b/src/ranap/RANAP_ResetResourceItem.h
@@ -0,0 +1,43 @@
+/*
+ * 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_ResetResourceItem_H_
+#define	_RANAP_ResetResourceItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_IuSignallingConnectionIdentifier.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_ResetResourceItem */
+typedef struct RANAP_ResetResourceItem {
+	RANAP_IuSignallingConnectionIdentifier_t	 iuSigConId;
+	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_ResetResourceItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_ResetResourceItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_ResetResourceItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_TNLInformationEnhRelInfoReq.c b/src/ranap/RANAP_TNLInformationEnhRelInfoReq.c
new file mode 100644
index 0000000..cd1d6d3
--- /dev/null
+++ b/src/ranap/RANAP_TNLInformationEnhRelInfoReq.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_TNLInformationEnhRelInfoReq.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_TNLInformationEnhRelInfoReq_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_TNLInformationEnhRelInfoReq, transportLayerAddress),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TransportLayerAddress,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"transportLayerAddress"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_TNLInformationEnhRelInfoReq, iuTransportAssociation),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_IuTransportAssociation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iuTransportAssociation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_TNLInformationEnhRelInfoReq, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_TNLInformationEnhRelInfoReq_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANAP_TNLInformationEnhRelInfoReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_TNLInformationEnhRelInfoReq_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* transportLayerAddress */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iuTransportAssociation */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_TNLInformationEnhRelInfoReq_specs_1 = {
+	sizeof(struct RANAP_TNLInformationEnhRelInfoReq),
+	offsetof(struct RANAP_TNLInformationEnhRelInfoReq, _asn_ctx),
+	asn_MAP_RANAP_TNLInformationEnhRelInfoReq_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANAP_TNLInformationEnhRelInfoReq_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_TNLInformationEnhRelInfoReq = {
+	"RANAP_TNLInformationEnhRelInfoReq",
+	"RANAP_TNLInformationEnhRelInfoReq",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_TNLInformationEnhRelInfoReq_tags_1,
+	sizeof(asn_DEF_RANAP_TNLInformationEnhRelInfoReq_tags_1)
+		/sizeof(asn_DEF_RANAP_TNLInformationEnhRelInfoReq_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_TNLInformationEnhRelInfoReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_TNLInformationEnhRelInfoReq_tags_1)
+		/sizeof(asn_DEF_RANAP_TNLInformationEnhRelInfoReq_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_TNLInformationEnhRelInfoReq_1,
+	3,	/* Elements count */
+	&asn_SPC_RANAP_TNLInformationEnhRelInfoReq_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_TNLInformationEnhRelInfoReq.h b/src/ranap/RANAP_TNLInformationEnhRelInfoReq.h
new file mode 100644
index 0000000..6ba405c
--- /dev/null
+++ b/src/ranap/RANAP_TNLInformationEnhRelInfoReq.h
@@ -0,0 +1,45 @@
+/*
+ * 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_TNLInformationEnhRelInfoReq_H_
+#define	_RANAP_TNLInformationEnhRelInfoReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_TransportLayerAddress.h"
+#include "RANAP_IuTransportAssociation.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_TNLInformationEnhRelInfoReq */
+typedef struct RANAP_TNLInformationEnhRelInfoReq {
+	RANAP_TransportLayerAddress_t	 transportLayerAddress;
+	RANAP_IuTransportAssociation_t	 iuTransportAssociation;
+	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_TNLInformationEnhRelInfoReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_TNLInformationEnhRelInfoReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_TNLInformationEnhRelInfoReq_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_TNLInformationEnhRelInfoRes.c b/src/ranap/RANAP_TNLInformationEnhRelInfoRes.c
new file mode 100644
index 0000000..43ac268
--- /dev/null
+++ b/src/ranap/RANAP_TNLInformationEnhRelInfoRes.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_TNLInformationEnhRelInfoRes.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_TNLInformationEnhRelInfoRes_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_TNLInformationEnhRelInfoRes, dl_forwardingTransportLayerAddress),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TransportLayerAddress,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dl-forwardingTransportLayerAddress"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_TNLInformationEnhRelInfoRes, dl_forwardingTransportAssociation),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_IuTransportAssociation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"dl-forwardingTransportAssociation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_TNLInformationEnhRelInfoRes, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_TNLInformationEnhRelInfoRes_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANAP_TNLInformationEnhRelInfoRes_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_TNLInformationEnhRelInfoRes_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dl-forwardingTransportLayerAddress */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dl-forwardingTransportAssociation */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_TNLInformationEnhRelInfoRes_specs_1 = {
+	sizeof(struct RANAP_TNLInformationEnhRelInfoRes),
+	offsetof(struct RANAP_TNLInformationEnhRelInfoRes, _asn_ctx),
+	asn_MAP_RANAP_TNLInformationEnhRelInfoRes_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANAP_TNLInformationEnhRelInfoRes_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_TNLInformationEnhRelInfoRes = {
+	"RANAP_TNLInformationEnhRelInfoRes",
+	"RANAP_TNLInformationEnhRelInfoRes",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_TNLInformationEnhRelInfoRes_tags_1,
+	sizeof(asn_DEF_RANAP_TNLInformationEnhRelInfoRes_tags_1)
+		/sizeof(asn_DEF_RANAP_TNLInformationEnhRelInfoRes_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_TNLInformationEnhRelInfoRes_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_TNLInformationEnhRelInfoRes_tags_1)
+		/sizeof(asn_DEF_RANAP_TNLInformationEnhRelInfoRes_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_TNLInformationEnhRelInfoRes_1,
+	3,	/* Elements count */
+	&asn_SPC_RANAP_TNLInformationEnhRelInfoRes_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_TNLInformationEnhRelInfoRes.h b/src/ranap/RANAP_TNLInformationEnhRelInfoRes.h
new file mode 100644
index 0000000..bef5bdd
--- /dev/null
+++ b/src/ranap/RANAP_TNLInformationEnhRelInfoRes.h
@@ -0,0 +1,45 @@
+/*
+ * 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_TNLInformationEnhRelInfoRes_H_
+#define	_RANAP_TNLInformationEnhRelInfoRes_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_TransportLayerAddress.h"
+#include "RANAP_IuTransportAssociation.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_TNLInformationEnhRelInfoRes */
+typedef struct RANAP_TNLInformationEnhRelInfoRes {
+	RANAP_TransportLayerAddress_t	 dl_forwardingTransportLayerAddress;
+	RANAP_IuTransportAssociation_t	 dl_forwardingTransportAssociation;
+	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_TNLInformationEnhRelInfoRes_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_TNLInformationEnhRelInfoRes;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_TNLInformationEnhRelInfoRes_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_TransportLayerInformation.c b/src/ranap/RANAP_TransportLayerInformation.c
new file mode 100644
index 0000000..76ce3ee
--- /dev/null
+++ b/src/ranap/RANAP_TransportLayerInformation.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_TransportLayerInformation.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_TransportLayerInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_TransportLayerInformation, transportLayerAddress),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TransportLayerAddress,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"transportLayerAddress"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_TransportLayerInformation, iuTransportAssociation),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_IuTransportAssociation,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iuTransportAssociation"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_TransportLayerInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_TransportLayerInformation_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANAP_TransportLayerInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_TransportLayerInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* transportLayerAddress */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iuTransportAssociation */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_TransportLayerInformation_specs_1 = {
+	sizeof(struct RANAP_TransportLayerInformation),
+	offsetof(struct RANAP_TransportLayerInformation, _asn_ctx),
+	asn_MAP_RANAP_TransportLayerInformation_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANAP_TransportLayerInformation_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_TransportLayerInformation = {
+	"RANAP_TransportLayerInformation",
+	"RANAP_TransportLayerInformation",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_TransportLayerInformation_tags_1,
+	sizeof(asn_DEF_RANAP_TransportLayerInformation_tags_1)
+		/sizeof(asn_DEF_RANAP_TransportLayerInformation_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_TransportLayerInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_TransportLayerInformation_tags_1)
+		/sizeof(asn_DEF_RANAP_TransportLayerInformation_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_TransportLayerInformation_1,
+	3,	/* Elements count */
+	&asn_SPC_RANAP_TransportLayerInformation_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_TransportLayerInformation.h b/src/ranap/RANAP_TransportLayerInformation.h
new file mode 100644
index 0000000..ba50e2c
--- /dev/null
+++ b/src/ranap/RANAP_TransportLayerInformation.h
@@ -0,0 +1,45 @@
+/*
+ * 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_TransportLayerInformation_H_
+#define	_RANAP_TransportLayerInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_TransportLayerAddress.h"
+#include "RANAP_IuTransportAssociation.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_TransportLayerInformation */
+typedef struct RANAP_TransportLayerInformation {
+	RANAP_TransportLayerAddress_t	 transportLayerAddress;
+	RANAP_IuTransportAssociation_t	 iuTransportAssociation;
+	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_TransportLayerInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_TransportLayerInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_TransportLayerInformation_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_UnsuccessfulLinking-IEs.c b/src/ranap/RANAP_UnsuccessfulLinking-IEs.c
new file mode 100644
index 0000000..673b33c
--- /dev/null
+++ b/src/ranap/RANAP_UnsuccessfulLinking-IEs.c
@@ -0,0 +1,135 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_UnsuccessfulLinking-IEs.h"
+
+static asn_per_constraints_t asn_PER_type_RANAP_UnsuccessfulLinking_IEs_constr_1 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 7,  7,  1l,  128l }	/* (SIZE(1..128)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_Member_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct Member, tMGI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TMGI,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"tMGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct Member, cause),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_RANAP_Cause,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"cause"
+		},
+	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_Member_oms_2[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tMGI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
+	sizeof(struct Member),
+	offsetof(struct Member, _asn_ctx),
+	asn_MAP_Member_tag2el_2,
+	3,	/* Count of tags in the map */
+	asn_MAP_Member_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_Member_tags_2,
+	sizeof(asn_DEF_Member_tags_2)
+		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_Member_tags_2,	/* Same as above */
+	sizeof(asn_DEF_Member_tags_2)
+		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_Member_2,
+	3,	/* Elements count */
+	&asn_SPC_Member_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_UnsuccessfulLinking_IEs_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_Member_2,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_UnsuccessfulLinking_IEs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_RANAP_UnsuccessfulLinking_IEs_specs_1 = {
+	sizeof(struct RANAP_UnsuccessfulLinking_IEs),
+	offsetof(struct RANAP_UnsuccessfulLinking_IEs, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_UnsuccessfulLinking_IEs = {
+	"RANAP_UnsuccessfulLinking-IEs",
+	"RANAP_UnsuccessfulLinking-IEs",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_UnsuccessfulLinking_IEs_tags_1,
+	sizeof(asn_DEF_RANAP_UnsuccessfulLinking_IEs_tags_1)
+		/sizeof(asn_DEF_RANAP_UnsuccessfulLinking_IEs_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_UnsuccessfulLinking_IEs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_UnsuccessfulLinking_IEs_tags_1)
+		/sizeof(asn_DEF_RANAP_UnsuccessfulLinking_IEs_tags_1[0]), /* 1 */
+	&asn_PER_type_RANAP_UnsuccessfulLinking_IEs_constr_1,
+	asn_MBR_RANAP_UnsuccessfulLinking_IEs_1,
+	1,	/* Single element */
+	&asn_SPC_RANAP_UnsuccessfulLinking_IEs_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_UnsuccessfulLinking-IEs.h b/src/ranap/RANAP_UnsuccessfulLinking-IEs.h
new file mode 100644
index 0000000..cd54d67
--- /dev/null
+++ b/src/ranap/RANAP_UnsuccessfulLinking-IEs.h
@@ -0,0 +1,52 @@
+/*
+ * 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_UnsuccessfulLinking_IEs_H_
+#define	_RANAP_UnsuccessfulLinking_IEs_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "RANAP_TMGI.h"
+#include "RANAP_Cause.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_UnsuccessfulLinking-IEs */
+typedef struct RANAP_UnsuccessfulLinking_IEs {
+	A_SEQUENCE_OF(struct Member {
+		RANAP_TMGI_t	 tMGI;
+		RANAP_Cause_t	 cause;
+		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;
+	} ) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_UnsuccessfulLinking_IEs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_UnsuccessfulLinking_IEs;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_UnsuccessfulLinking_IEs_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_UserPlaneInformation.c b/src/ranap/RANAP_UserPlaneInformation.c
new file mode 100644
index 0000000..aed30a7
--- /dev/null
+++ b/src/ranap/RANAP_UserPlaneInformation.c
@@ -0,0 +1,83 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_UserPlaneInformation.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_UserPlaneInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_UserPlaneInformation, userPlaneMode),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UserPlaneMode,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"userPlaneMode"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_UserPlaneInformation, uP_ModeVersions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_UP_ModeVersions,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"uP-ModeVersions"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_UserPlaneInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_UserPlaneInformation_oms_1[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_RANAP_UserPlaneInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_UserPlaneInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* userPlaneMode */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* uP-ModeVersions */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_UserPlaneInformation_specs_1 = {
+	sizeof(struct RANAP_UserPlaneInformation),
+	offsetof(struct RANAP_UserPlaneInformation, _asn_ctx),
+	asn_MAP_RANAP_UserPlaneInformation_tag2el_1,
+	3,	/* Count of tags in the map */
+	asn_MAP_RANAP_UserPlaneInformation_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_UserPlaneInformation = {
+	"RANAP_UserPlaneInformation",
+	"RANAP_UserPlaneInformation",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_UserPlaneInformation_tags_1,
+	sizeof(asn_DEF_RANAP_UserPlaneInformation_tags_1)
+		/sizeof(asn_DEF_RANAP_UserPlaneInformation_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_UserPlaneInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_UserPlaneInformation_tags_1)
+		/sizeof(asn_DEF_RANAP_UserPlaneInformation_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_UserPlaneInformation_1,
+	3,	/* Elements count */
+	&asn_SPC_RANAP_UserPlaneInformation_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_UserPlaneInformation.h b/src/ranap/RANAP_UserPlaneInformation.h
new file mode 100644
index 0000000..3ecafd5
--- /dev/null
+++ b/src/ranap/RANAP_UserPlaneInformation.h
@@ -0,0 +1,45 @@
+/*
+ * 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_UserPlaneInformation_H_
+#define	_RANAP_UserPlaneInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_UserPlaneMode.h"
+#include "RANAP_UP-ModeVersions.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_UserPlaneInformation */
+typedef struct RANAP_UserPlaneInformation {
+	RANAP_UserPlaneMode_t	 userPlaneMode;
+	RANAP_UP_ModeVersions_t	 uP_ModeVersions;
+	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_UserPlaneInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_UserPlaneInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_UserPlaneInformation_H_ */
+#include <asn_internal.h>
