HNBAP, RUA and RANAP protocol codecs

This patch introduces protocol codecs for the HNBAP, RUA and RANAP
protocols, which is mandatory for testing IuCS, IuPS or Iuh in
the future.

As Eclipse TITAN ASN.1 only supports the BER codec and the above
protocols all use APER, we need to use an external transcoder from
APER to BER and vice-versa.  This was implemented using a proprietary
ASN.1 compiler / trnaslator which sysmocom is packaging as
libfftranscode, which is made available as binary package
for Debian 9 at https://ftp.osmocom.org/binaries/libfftranscode/

Related: OS#2856, OS#2857, OS#2858
Change-Id: If4a72de9bc54d6e6a7daaca78a4d4aa5684203a5
diff --git a/library/hnbap/HNBAP_PDU_Descriptions.asn b/library/hnbap/HNBAP_PDU_Descriptions.asn
new file mode 100644
index 0000000..514d451
--- /dev/null
+++ b/library/hnbap/HNBAP_PDU_Descriptions.asn
@@ -0,0 +1,231 @@
+-- HNBAP-PDU-Descriptions.asn
+--
+-- 3GPP TS 25.469 V10.1.0 (2011-06)
+-- http://www.3gpp.org/ftp/Specs/html-info/25469.htm
+--
+-- 9.3.2	Elementary Procedure definitions
+--
+
+-- **************************************************************
+--
+-- Elementary Procedure definitions
+--
+-- **************************************************************
+-- **************************************************************
+-- **************************************************************
+--
+-- Elementary Procedure definitions
+--
+-- **************************************************************
+HNBAP-PDU-Descriptions  { 
+itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) 
+umts-Access (20) modules (3) hnbap(6) version1 (1) hnbap-PDU-Descriptions (0)}
+
+DEFINITIONS AUTOMATIC TAGS ::= 
+
+BEGIN
+
+-- **************************************************************
+--
+-- IE parameter types from other modules.
+--
+-- **************************************************************
+
+IMPORTS
+	Criticality,
+	ProcedureCode
+FROM HNBAP-CommonDataTypes
+
+	HNBRegisterRequest,
+	HNBRegisterAccept,
+	HNBRegisterReject,
+	HNBDe-Register,
+	UERegisterRequest,
+	UERegisterAccept,
+	UERegisterReject,
+	UEDe-Register,
+	ErrorIndication,
+	PrivateMessage,
+	CSGMembershipUpdate,
+	TNLUpdateRequest,
+	TNLUpdateResponse,
+	TNLUpdateFailure,
+	HNBConfigTransferRequest,
+	HNBConfigTransferResponse,
+	RelocationComplete
+
+
+FROM HNBAP-PDU-Contents
+	id-HNBRegister,
+	id-UERegister,
+	id-UEDe-Register,
+	id-HNBDe-Register,
+	id-ErrorIndication,
+	id-privateMessage,
+	id-CSGMembershipUpdate,
+	id-TNLUpdate,
+	id-HNBConfigTransfer,
+	id-RelocationComplete
+
+FROM HNBAP-Constants;
+
+-- **************************************************************
+--
+-- Interface Elementary Procedure Class
+--
+-- **************************************************************
+
+HNBAP-ELEMENTARY-PROCEDURE ::= CLASS {
+	&InitiatingMessage			,
+	&SuccessfulOutcome			OPTIONAL,
+	&UnsuccessfulOutcome		OPTIONAL,
+	&procedureCode				ProcedureCode 	UNIQUE,
+	&criticality				Criticality 	DEFAULT ignore
+}
+
+WITH SYNTAX {
+	INITIATING MESSAGE			&InitiatingMessage
+	[SUCCESSFUL OUTCOME			&SuccessfulOutcome]
+	[UNSUCCESSFUL OUTCOME		&UnsuccessfulOutcome]
+	PROCEDURE CODE				&procedureCode
+	[CRITICALITY				&criticality]
+}
+
+-- **************************************************************
+--
+-- Interface PDU definitions
+--
+-- **************************************************************
+
+HNBAP-PDU ::= CHOICE {
+	initiatingMessage		InitiatingMessage,
+	successfulOutcome		SuccessfulOutcome,
+	unsuccessfulOutcome		UnsuccessfulOutcome,
+	...
+}
+
+
+InitiatingMessage ::= SEQUENCE {
+	procedureCode	HNBAP-ELEMENTARY-PROCEDURE.&procedureCode		({HNBAP-ELEMENTARY-PROCEDURES}),
+	criticality		HNBAP-ELEMENTARY-PROCEDURE.&criticality			({HNBAP-ELEMENTARY-PROCEDURES}{@procedureCode}),
+	value			HNBAP-ELEMENTARY-PROCEDURE.&InitiatingMessage	({HNBAP-ELEMENTARY-PROCEDURES}{@procedureCode})
+}
+
+SuccessfulOutcome ::= SEQUENCE {
+	procedureCode	HNBAP-ELEMENTARY-PROCEDURE.&procedureCode		({HNBAP-ELEMENTARY-PROCEDURES}),
+	criticality		HNBAP-ELEMENTARY-PROCEDURE.&criticality			({HNBAP-ELEMENTARY-PROCEDURES}{@procedureCode}),
+	value			HNBAP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome	({HNBAP-ELEMENTARY-PROCEDURES}{@procedureCode})
+}
+
+UnsuccessfulOutcome ::= SEQUENCE {
+	procedureCode	HNBAP-ELEMENTARY-PROCEDURE.&procedureCode		({HNBAP-ELEMENTARY-PROCEDURES}),
+	criticality		HNBAP-ELEMENTARY-PROCEDURE.&criticality			({HNBAP-ELEMENTARY-PROCEDURES}{@procedureCode}),
+	value			HNBAP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome	({HNBAP-ELEMENTARY-PROCEDURES}{@procedureCode})
+}
+
+-- **************************************************************
+--
+-- Interface Elementary Procedure List
+--
+-- **************************************************************
+
+HNBAP-ELEMENTARY-PROCEDURES HNBAP-ELEMENTARY-PROCEDURE ::= {
+	HNBAP-ELEMENTARY-PROCEDURES-CLASS-1	|
+	HNBAP-ELEMENTARY-PROCEDURES-CLASS-2	,
+	...
+}
+
+HNBAP-ELEMENTARY-PROCEDURES-CLASS-1 HNBAP-ELEMENTARY-PROCEDURE ::= {
+	hNBRegister|
+	uERegister,
+	...,
+	tnlUpdate			|
+	hNBConfigTransfer
+}
+
+
+HNBAP-ELEMENTARY-PROCEDURES-CLASS-2 HNBAP-ELEMENTARY-PROCEDURE ::= {
+	uEDe-Register |
+	hNBDe-Register |
+	errorIndication	|
+	privateMessage,
+	...,
+	csg-membership-update|
+	relocationComplete
+}
+
+-- **************************************************************
+--
+-- Interface Elementary Procedures
+--
+-- **************************************************************
+
+
+hNBRegister HNBAP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		HNBRegisterRequest
+	SUCCESSFUL OUTCOME		HNBRegisterAccept
+	UNSUCCESSFUL OUTCOME	HNBRegisterReject
+	PROCEDURE CODE			id-HNBRegister
+	CRITICALITY				reject
+}
+
+uERegister HNBAP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UERegisterRequest
+	SUCCESSFUL OUTCOME		UERegisterAccept
+	UNSUCCESSFUL OUTCOME	UERegisterReject
+	PROCEDURE CODE			id-UERegister
+	CRITICALITY				reject
+}
+
+uEDe-Register HNBAP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		UEDe-Register
+	PROCEDURE CODE			id-UEDe-Register
+	CRITICALITY				ignore
+}
+
+hNBDe-Register HNBAP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		HNBDe-Register
+	PROCEDURE CODE			id-HNBDe-Register
+	CRITICALITY				ignore
+}
+
+errorIndication HNBAP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		ErrorIndication
+	PROCEDURE CODE			id-ErrorIndication
+	CRITICALITY				ignore
+}
+
+csg-membership-update HNBAP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		CSGMembershipUpdate
+	PROCEDURE CODE			id-CSGMembershipUpdate
+	CRITICALITY				ignore
+}
+
+tnlUpdate HNBAP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		TNLUpdateRequest
+	SUCCESSFUL OUTCOME		TNLUpdateResponse
+	UNSUCCESSFUL OUTCOME	TNLUpdateFailure
+	PROCEDURE CODE			id-TNLUpdate
+	CRITICALITY				reject
+}
+
+hNBConfigTransfer HNBAP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		HNBConfigTransferRequest
+	SUCCESSFUL OUTCOME		HNBConfigTransferResponse
+	PROCEDURE CODE			id-HNBConfigTransfer
+	CRITICALITY				reject
+}
+
+relocationComplete HNBAP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		RelocationComplete
+	PROCEDURE CODE			id-RelocationComplete
+	CRITICALITY				ignore
+}
+
+privateMessage HNBAP-ELEMENTARY-PROCEDURE ::= {
+	INITIATING MESSAGE		PrivateMessage
+	PROCEDURE CODE			id-privateMessage
+	CRITICALITY				ignore
+}
+
+END