bts: Test forwarding PCUIF<->IPA/OSMO/PCU

Change-Id: I78880098a55d1cb456011746efa0a47832a86ca8
diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn
index 6cfe410..1e57fb2 100644
--- a/library/PCUIF_Types.ttcn
+++ b/library/PCUIF_Types.ttcn
@@ -37,7 +37,8 @@
 	PCU_IF_MSG_TIME_IND		('52'O),
 	PCU_IF_MSG_INTERF_IND		('53'O),
 	PCU_IF_MSG_PAG_REQ		('60'O),
-	PCU_IF_MSG_TXT_IND		('70'O)
+	PCU_IF_MSG_TXT_IND		('70'O),
+	PCU_IF_MSG_CONTAINER		('80'O)
 } with { variant "FIELDLENGTH(8)" };
 
 type enumerated PCUIF_Sapi {
@@ -253,6 +254,26 @@
 	variant (tlli) "BYTEORDER(last)"
 };
 
+type union PCUIF_ContainerMsgUnion {
+	 /* This field can be removed once first container message is added, see
+	  * https://bugs.eclipse.org/bugs/show_bug.cgi?id=574469 */
+	octetstring tmp_fixme,
+	octetstring	other
+} with { variant "" };
+
+type record PCUIF_container {
+	uint8_t		msg_type,
+	OCT1		spare,
+	uint16_t	len, /* network byte order */
+	PCUIF_ContainerMsgUnion	u
+} with {
+	variant (len) "BYTEORDER(last)"
+	variant (len) "LENGTHTO(u)"
+	variant (u) "CROSSTAG(
+			tmp_fixme, 	msg_type = 255;
+			other,		OTHERWISE)"
+};
+
 
 type union PCUIF_MsgUnion {
 	PCUIF_data		data_req,
@@ -268,7 +289,8 @@
 	PCUIF_time_ind		time_ind,
 	PCUIF_interf_ind	interf_ind,
 	PCUIF_pag_req		pag_req,
-	PCUIF_app_info_req	app_info_req
+	PCUIF_app_info_req	app_info_req,
+	PCUIF_container		container
 } with { variant "" };
 
 type record PCUIF_Message {
@@ -290,7 +312,8 @@
 				time_ind,	msg_type = PCU_IF_MSG_TIME_IND;
 				interf_ind,	msg_type = PCU_IF_MSG_INTERF_IND;
 				pag_req,	msg_type = PCU_IF_MSG_PAG_REQ;
-				app_info_req,	msg_type = PCU_IF_MSG_APP_INFO_REQ)"
+				app_info_req,	msg_type = PCU_IF_MSG_APP_INFO_REQ;
+				container,	msg_type = PCU_IF_MSG_CONTAINER)"
 	/* PCUIFv10: 1006 * 8 = 8048 bits */
 	variant "PADDING(8048)"
 };
@@ -984,6 +1007,43 @@
 }
 
 
+template (value) PCUIF_Message ts_PCUIF_CONTAINER(template (value) uint8_t bts_nr,
+						       template (value) PCUIF_container container) := {
+	msg_type := PCU_IF_MSG_CONTAINER,
+	bts_nr := bts_nr,
+	spare := '0000'O,
+	u := {
+		container := container
+	}
+}
+template (present) PCUIF_Message tr_PCUIF_CONTAINER(template (present) uint8_t bts_nr,
+						       template (present) PCUIF_container container) := {
+	msg_type := PCU_IF_MSG_CONTAINER,
+	bts_nr := bts_nr,
+	spare := '0000'O,
+	u := {
+		container := container
+	}
+}
+
+template (value) PCUIF_container ts_PCUIF_CONT_OTHER(uint8_t msg_type, template (value) octetstring payload) := {
+	msg_type := msg_type,
+	spare := '00'O,
+	len := lengthof(payload),
+	u := {
+		other := payload
+	}
+}
+template (present) PCUIF_container tr_PCUIF_CONT_OTHER(template (present) uint8_t msg_type,
+						       template (present) octetstring payload) := {
+	msg_type := msg_type,
+	spare := '00'O,
+	len := ?,
+	u := {
+		other := payload
+	}
+}
+
 function f_PCUIF_PDCHMask_set(inout PCUIF_info_ind info, BIT8 pdch_mask,
 			      template (present) uint8_t trx_nr := ?)
 {