Change in osmo-ttcn3-hacks[master]: Osmocom_Gb_Types: Fix tons of template restriction warnings

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

laforge gerrit-no-reply at lists.osmocom.org
Mon Feb 8 17:13:17 UTC 2021


laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22731 )

Change subject: Osmocom_Gb_Types: Fix tons of template restriction warnings
......................................................................

Osmocom_Gb_Types: Fix tons of template restriction warnings

Change-Id: I3da153ce5e83b231501e74b958fcac9f10c00849
---
M gbproxy/GBProxy_Tests.ttcn
M library/BSSGP_Emulation.ttcnpp
M library/Osmocom_Gb_Types.ttcn
M library/RAW_NS.ttcnpp
4 files changed, 275 insertions(+), 143 deletions(-)

Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved



diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn
index ad8874c..0f3b4cb 100644
--- a/gbproxy/GBProxy_Tests.ttcn
+++ b/gbproxy/GBProxy_Tests.ttcn
@@ -1105,7 +1105,7 @@
 			ts_BSSGP_DL_UD(g_pars.tlli, payload, omit, ts_BSSGP_IMSI(g_pars.imsi));
 		/* we cannot use pdu_tx as there are some subtle differences in the length field :/ */
 		var template (present) PDU_BSSGP pdu_rx :=
-			tr_BSSGP_DL_UD(g_pars.tlli, payload, tr_BSSGP_IMSI(g_pars.imsi));
+			tr_BSSGP_DL_UD(g_pars.tlli, payload, ts_BSSGP_IMSI(g_pars.imsi));
 
 		log("DL-UNITDATA(payload_size=", i);
 		f_sgsn2pcu(pdu_tx, pdu_rx);
@@ -2691,11 +2691,11 @@
 	f_init();
 	f_global_init_ptp();
 
-	var template (value) PDU_BSSGP pdu_tx := t_BVC_FC_BVC(10240, 2000, 1024, 1000, '01'O);
+	var template (value) PDU_BSSGP pdu_tx := ts_BVC_FC_BVC(10240, 2000, 1024, 1000, '01'O);
 	/* we cannot use pdu_tx as there are some subtle differences in the length field :/ */
 	var template (present) PDU_BSSGP pdu_rx := tr_BVC_FC_BVC(10240, 2000, 1024, 1000, '01'O);
-	var template (omit) PDU_BSSGP ack_tx :=
-		t_BVC_FC_BVC_ACK(pdu_tx.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value);
+	var template (value) PDU_BSSGP ack_tx :=
+		ts_BVC_FC_BVC_ACK(pdu_tx.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value);
 
 	/* Send a FC-BVC from BSS to gbproxy, expect an ACK in response */
 	G_PCU[0].send(pdu_tx);
@@ -3030,11 +3030,11 @@
 
 	cont_tx := ts_RAN_Information_Error_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC),
 							  ts_BSSGP_CAUSE(BSSGP_CAUSE_EQUIMENT_FAILURE),
-							  omit, valueof(t_BVC_UNBLOCK(23)));
+							  omit, valueof(ts_BVC_UNBLOCK(23)));
 
 	cont_rx := tr_RAN_Information_Error_RIM_Container(tr_RIM_Application_Identity(RIM_APP_ID_NACC),
-							  t_BSSGP_CAUSE(BSSGP_CAUSE_EQUIMENT_FAILURE),
-							  omit, enc_PDU_BSSGP(valueof(t_BVC_UNBLOCK(23))));
+							  ts_BSSGP_CAUSE(BSSGP_CAUSE_EQUIMENT_FAILURE),
+							  omit, enc_PDU_BSSGP(valueof(tr_BVC_UNBLOCK(23))));
 
 	f_rim_pcu2sgsn(ts_PDU_BSSGP_RAN_INFORMATION_ERROR(dst := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, ra_sgsn),
 							  src := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, ra_pcu),
diff --git a/library/BSSGP_Emulation.ttcnpp b/library/BSSGP_Emulation.ttcnpp
index 4b93a26..1f32cc2 100644
--- a/library/BSSGP_Emulation.ttcnpp
+++ b/library/BSSGP_Emulation.ttcnpp
@@ -439,16 +439,16 @@
 	}
 
 	/* any BLOCK or UNBLOCK for the SIGNALING BVCI are illegal */
-	[] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK(0, ?), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK(0, ?), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-BLOCK illegal for BVCI=0: ", udi);
 	}
-	[] BSCP.receive(f_BnsUdInd(t_BVC_UNBLOCK(0), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_UNBLOCK(0), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-UNBLOCK illegal for BVCI=0: ", udi);
 	}
-	[] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK_ACK(0), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK_ACK(0), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-BLOCK-ACK illegal for BVCI=0: ", udi);
 	}
-	[] BSCP.receive(f_BnsUdInd(t_BVC_UNBLOCK_ACK(0), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_UNBLOCK_ACK(0), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-UNBLOCK-ACK illegal for BVCI=0: ", udi);
 	}
 
@@ -495,21 +495,21 @@
 	}
 
 	/* any BLOCK or UNBLOCK for the SIGNALING BVCI are illegal */
-	[] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK(0, ?), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK(0, ?), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-BLOCK illegal for BVCI=0: ", udi);
 	}
-	[] BSCP.receive(f_BnsUdInd(t_BVC_UNBLOCK(0), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_UNBLOCK(0), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-UNBLOCK illegal for BVCI=0: ", udi);
 	}
-	[] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK_ACK(0), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK_ACK(0), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-BLOCK-ACK illegal for BVCI=0: ", udi);
 	}
-	[] BSCP.receive(f_BnsUdInd(t_BVC_UNBLOCK_ACK(0), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_UNBLOCK_ACK(0), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-UNBLOCK-ACK illegal for BVCI=0: ", udi);
 	}
 
 	/* Respond to BLOCK for wrong BVCI */
-	[] BSCP.receive(f_BnsUdInd(t_BVC_BLOCK(?, ?), 0)) -> value udi {
+	[] BSCP.receive(f_BnsUdInd(tr_BVC_BLOCK(?, ?), 0)) -> value udi {
 		setverdict(fail, "Rx BVC-BLOCK for unknown BVCI");
 		BSCP.send(f_BnsUdReq(ts_BSSGP_STATUS(0, BSSGP_CAUSE_BVCI_UNKNOWN, udi.bssgp), 0, 0));
 	}
@@ -1015,13 +1015,13 @@
 }
 
 private function f_ptp_sendUnblock() runs on BSSGP_BVC_CT {
-	BVC.send(ts_ptp_BnsUdReq(t_BVC_UNBLOCK(g_cfg.bvci), 0, g_bvc_lsp));
+	BVC.send(ts_ptp_BnsUdReq(ts_BVC_UNBLOCK(g_cfg.bvci), 0, g_bvc_lsp));
 	g_t1_waits_for_block_ack := false;
 	g_T1.start;
 }
 
 private function f_ptp_sendBlock(BssgpCause cause) runs on BSSGP_BVC_CT {
-	BVC.send(ts_ptp_BnsUdReq(t_BVC_BLOCK(g_cfg.bvci, cause), 0, g_bvc_lsp));
+	BVC.send(ts_ptp_BnsUdReq(ts_BVC_BLOCK(g_cfg.bvci, cause), 0, g_bvc_lsp));
 	g_t1_waits_for_block_ack := true;
 	g_T1.start;
 	g_last_block_cause := cause;
@@ -1055,14 +1055,14 @@
 private altstep as_ptp_blocked() runs on BSSGP_BVC_CT {
 	var NsUnitdataIndication udi;
 
-	[g_T1.running and not g_t1_waits_for_block_ack] BVC.receive(tr_ptp_BnsUdInd(t_BVC_UNBLOCK_ACK(g_cfg.bvci), 0)) {
+	[g_T1.running and not g_t1_waits_for_block_ack] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_UNBLOCK_ACK(g_cfg.bvci), 0)) {
 		g_T1.stop;
 		f_ptp_change_state(BVC_S_UNBLOCKED);
 	}
 
 	/* Inbound  BVC-UNBLOCK from peer */
-	[g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(t_BVC_UNBLOCK(g_cfg.bvci), 0)) {
-		BVC.send(ts_ptp_BnsUdReq(t_BVC_UNBLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));
+	[g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_UNBLOCK(g_cfg.bvci), 0)) {
+		BVC.send(ts_ptp_BnsUdReq(ts_BVC_UNBLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));
 		f_ptp_change_state(BVC_S_UNBLOCKED);
 	}
 
@@ -1104,17 +1104,17 @@
 #endif
 
 	/* bogus unblock, just respond with ACK */
-	[] BVC.receive(tr_ptp_BnsUdInd(t_BVC_UNBLOCK(g_cfg.bvci), 0)) -> value udi {
-		BVC.send(ts_ptp_BnsUdReq(t_BVC_UNBLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));
+	[] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_UNBLOCK(g_cfg.bvci), 0)) -> value udi {
+		BVC.send(ts_ptp_BnsUdReq(ts_BVC_UNBLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));
 	}
 	/* Respond to BLOCK with BLOCK-ACK + change state */
-	[] BVC.receive(tr_ptp_BnsUdInd(t_BVC_BLOCK(g_cfg.bvci, ?), 0)) -> value udi {
-		BVC.send(ts_ptp_BnsUdReq(t_BVC_BLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));
+	[] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_BLOCK(g_cfg.bvci, ?), 0)) -> value udi {
+		BVC.send(ts_ptp_BnsUdReq(ts_BVC_BLOCK_ACK(g_cfg.bvci), 0, g_bvc_lsp));
 		g_T1.stop;
 		f_ptp_change_state(BVC_S_BLOCKED);
 	}
 	/* BLOCK-ACK before T1 timeout: mark as blocked */
-	[g_T1.running and g_t1_waits_for_block_ack] BVC.receive(tr_ptp_BnsUdInd(t_BVC_BLOCK_ACK(g_cfg.bvci), 0)) -> value udi {
+	[g_T1.running and g_t1_waits_for_block_ack] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_BLOCK_ACK(g_cfg.bvci), 0)) -> value udi {
 		g_T1.stop;
 		f_ptp_change_state(BVC_S_BLOCKED);
 	}
@@ -1134,11 +1134,11 @@
 		} else {
 			/* simply acknowledge all per-BVC Flow Control Messages */
 			var OCT1 tag := udi.bssgp.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value;
-			BVC.send(ts_ptp_BnsUdReq(t_BVC_FC_BVC_ACK(tag), g_cfg.bvci, g_bvc_lsp));
+			BVC.send(ts_ptp_BnsUdReq(ts_BVC_FC_BVC_ACK(tag), g_cfg.bvci, g_bvc_lsp));
 		}
 	}
 
-	[not g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(t_BVC_FC_BVC_ACK(?), g_cfg.bvci)) -> value udi {
+	[not g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_FC_BVC_ACK(?), g_cfg.bvci)) -> value udi {
 		if (GLOBAL.checkstate("Connected")) {
 			GLOBAL.send(udi.bssgp);
 		} else {
diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn
index 82f2aca..687a073 100644
--- a/library/Osmocom_Gb_Types.ttcn
+++ b/library/Osmocom_Gb_Types.ttcn
@@ -816,7 +816,7 @@
 		BSSGP_CAUSE_NOT_ALL_REQUESTED_PFC_CREATED	('3c'H)
 	} with { variant "FIELDLENGTH(8)" };
 
-	private function t_FLUSH_ACTION(template OCT1 act)
+	private function tr_FLUSH_ACTION(template OCT1 act)
 	return template Flush_Action {
 		var template Flush_Action r;
 		if (istemplatekind(act, "omit")) {
@@ -835,7 +835,16 @@
 			return r;
 		}
 	}
-	private function t_NO_OCT_AFF(template integer oct_aff)
+	template (value) Flush_Action ts_FLUSH_ACTION(template (value) OCT1 act) := {
+		iEI := '0C'O,
+		ext := '1'B,
+		lengthIndicator := {
+			length1 := 1
+		},
+		actionValue := act
+	}
+
+	private function tr_NO_OCT_AFF(template integer oct_aff)
 	return template Number_of_octets_affected {
 		var template Number_of_octets_affected r;
 		if (istemplatekind(oct_aff, "omit")) {
@@ -854,8 +863,16 @@
 			return r;
 		}
 	}
+	template (value) Number_of_octets_affected ts_NO_OCT_AFF(template (value) integer oct_aff) := {
+		iEI := '25'O,
+		ext := '1'B,
+		lengthIndicator := {
+			length1 := 3
+		},
+		number_of_octets_transfered_or_deleted :=  int2oct(valueof(oct_aff), 3)
+	}
 
-	private function t_LLC_FRAMES_DISCARDED(template integer frames_discarded)
+	private function tr_LLC_FRAMES_DISCARDED(template integer frames_discarded)
 	return template LLC_Frames_Discarded {
 		var template LLC_Frames_Discarded r;
 		if (istemplatekind(frames_discarded, "omit")) {
@@ -874,8 +891,17 @@
 			return r;
 		}
 	}
+	template (value) LLC_Frames_Discarded ts_LLC_FRAMES_DISCARDED(template (value) integer frames_discarded) := {
+		iEI := '0F'O,
+		ext := '1'B,
+		lengthIndicator := {
+			length1 := 1
+		},
+		number_of_frames_discarded := int2hex(valueof(frames_discarded), 2)
+	}
 
-	private function t_BSSGP_BVCI(template BssgpBvci bvci)
+
+	private function tr_BSSGP_BVCI(template BssgpBvci bvci)
 	return template BVCI {
 		var template BVCI r;
 		if (istemplatekind(bvci, "omit")) {
@@ -894,7 +920,24 @@
 			return r;
 		}
 	}
-	private function  t_BSSGP_NSEI(template Nsei nsei)
+	template (value) BVCI ts_BSSGP_BVCI(template (value) BssgpBvci bvci) := {
+		iEI := '04'O,
+		ext := '1'B,
+		lengthIndicator := {
+			length1 := 2
+		},
+		unstructured_value := int2oct(valueof(bvci), 2)
+	}
+	private function f_ts_BSSGP_BVCI(template (omit) BssgpBvci bvci)
+	return template (omit) BVCI {
+		if (istemplatekind(bvci, "omit")) {
+			return omit;
+		} else {
+			return ts_BSSGP_BVCI(valueof(bvci));
+		}
+	}
+
+	private function t_BSSGP_NSEI(template Nsei nsei)
 	return template NSEI_BSSGP {
 		var template NSEI_BSSGP r;
 		if (istemplatekind(nsei, "omit")) {
@@ -913,6 +956,22 @@
 			return r;
 		}
 	}
+	template (value) NSEI_BSSGP ts_BSSGP_NSEI(template (value) Nsei nsei) := {
+		iEI:= '3E'O,
+		ext := '1'B,
+		lengthIndicator := {
+			length1 := 2
+		},
+		nSEI := int2oct(valueof(nsei), 2)
+	}
+	private function f_ts_BSSGP_NSEI(template (omit) Nsei nsei)
+	return template (omit) NSEI_BSSGP {
+		if (istemplatekind(nsei, "omit")) {
+			return omit;
+		} else {
+			return ts_BSSGP_NSEI(valueof(nsei));
+		}
+	}
 
 	template (value) TLLI_BSSGP ts_BSSGP_TLLI(template (value) GprsTlli tlli) := {
 		iEI := '1F'O,
@@ -922,7 +981,7 @@
 		},
 		tLLI_Value := tlli
 	}
-	template TLLI_BSSGP tr_BSSGP_TLLI(template GprsTlli tlli) := {
+	template (present) TLLI_BSSGP tr_BSSGP_TLLI(template (present) GprsTlli tlli) := {
 		iEI := '1F'O,
 		ext := '1'B,
 		lengthIndicator := {
@@ -964,7 +1023,7 @@
 		suspend_Reference_Number_value := susp_ref
 	}
 
-	template IMSI_BSSGP tr_BSSGP_IMSI(template hexstring imsi) := {
+	template (present) IMSI_BSSGP tr_BSSGP_IMSI(template (present) hexstring imsi) := {
 		iEI := '0D'O,
 		ext := '1'B,
 		lengthIndicator := ?,
@@ -973,7 +1032,7 @@
 		digits := imsi
 	}
 
-	template IMSI_BSSGP ts_BSSGP_IMSI(hexstring imsi) := {
+	template (value) IMSI_BSSGP ts_BSSGP_IMSI(hexstring imsi) := {
 		iEI := '0D'O,
 		ext := '1'B,
 		lengthIndicator := { length1 := 0 /* overwritten */ },
@@ -1066,7 +1125,7 @@
 		}
 		return ret;
 	}
-	function t_BSSGP_CAUSE(template BssgpCause cause) return template Cause_BSSGP {
+	function tr_BSSGP_CAUSE(template BssgpCause cause) return template Cause_BSSGP {
 		var template Cause_BSSGP ret;
 		ret.iEI := '07'O;
 		ret.ext := '1'B;
@@ -1079,7 +1138,7 @@
 		return ret;
 	}
 
-	function t_BSSGP_IE_CellId(template BssgpCellId cid) return template Cell_Identifier {
+	function tr_BSSGP_IE_CellId(template BssgpCellId cid) return template Cell_Identifier {
 		var template Cell_Identifier ret := {
 			iEI := '08'O,
 			ext := '1'B,
@@ -1122,6 +1181,27 @@
 		}
 		return ret;
 	}
+	template (value) Cell_Identifier ts_BSSGP_IE_CellId(template (value) BssgpCellId cid) := {
+		iEI := '08'O,
+		ext := '1'B,
+		lengthIndicator := { length1 := 8 },
+		mccDigit1 := cid.ra_id.lai.mcc_mnc[0],
+		mccDigit2 := cid.ra_id.lai.mcc_mnc[1],
+		mccDigit3 := cid.ra_id.lai.mcc_mnc[2],
+		mncDigit3 := cid.ra_id.lai.mcc_mnc[3],
+		mncDigit1 := cid.ra_id.lai.mcc_mnc[4],
+		mncDigit2 := cid.ra_id.lai.mcc_mnc[5],
+		lac := int2oct(valueof(cid.ra_id.lai.lac), 2),
+		rac := int2oct(valueof(cid.ra_id.rac), 1),
+		cI_value := int2oct(valueof(cid.cell_id), 2)
+	}
+	function f_ts_BSSGP_IE_CellId(template (omit) BssgpCellId cid) return template (omit) Cell_Identifier {
+		if (istemplatekind(cid, "omit")) {
+			return omit;
+		} else {
+			return ts_BSSGP_IE_CellId(valueof(cid));
+		}
+	}
 
 	template (value) Tag ts_BSSGP_IE_Tag(OCT1 tag) := {
 		iEI := '1E'O,
@@ -1161,12 +1241,12 @@
 
 	/* 10.4.12 */
 	template PDU_BSSGP ts_BVC_RESET(BssgpCause cause, BssgpBvci bvci,
-					template BssgpCellId cell_id) := {
+					template (omit) BssgpCellId cell_id) := {
 		pDU_BSSGP_BVC_RESET := {
 			bssgpPduType := '22'O,
-			bVCI := t_BSSGP_BVCI(bvci),
+			bVCI := ts_BSSGP_BVCI(bvci),
 			cause := ts_BSSGP_CAUSE(cause),
-			cell_Identifier := t_BSSGP_IE_CellId(cell_id),
+			cell_Identifier := f_ts_BSSGP_IE_CellId(cell_id),
 			feature_bitmap := omit,
 			extended_Feature_Bitmap := omit
 		}
@@ -1175,20 +1255,20 @@
 					template BssgpCellId cell_id) := {
 		pDU_BSSGP_BVC_RESET := {
 			bssgpPduType := '22'O,
-			bVCI := t_BSSGP_BVCI(bvci),
-			cause := t_BSSGP_CAUSE(cause),
-			cell_Identifier := t_BSSGP_IE_CellId(cell_id),
+			bVCI := tr_BSSGP_BVCI(bvci),
+			cause := tr_BSSGP_CAUSE(cause),
+			cell_Identifier := tr_BSSGP_IE_CellId(cell_id),
 			feature_bitmap := *,
 			extended_Feature_Bitmap := *
 		}
 	}
 
 	/* 10.4.13 */
-	template PDU_BSSGP ts_BVC_RESET_ACK(BssgpBvci bvci, template BssgpCellId cell_id) := {
+	template PDU_BSSGP ts_BVC_RESET_ACK(BssgpBvci bvci, template (omit) BssgpCellId cell_id) := {
 		pDU_BSSGP_BVC_RESET_ACK := {
 			bssgpPduType := '23'O,
-			bVCI := t_BSSGP_BVCI(bvci),
-			cell_Identifier := t_BSSGP_IE_CellId(cell_id),
+			bVCI := ts_BSSGP_BVCI(bvci),
+			cell_Identifier := f_ts_BSSGP_IE_CellId(cell_id),
 			feature_bitmap := omit,
 			extended_Feature_Bitmap := omit
 		}
@@ -1196,8 +1276,8 @@
 	template PDU_BSSGP tr_BVC_RESET_ACK(template BssgpBvci bvci, template BssgpCellId cell_id) := {
 		pDU_BSSGP_BVC_RESET_ACK := {
 			bssgpPduType := '23'O,
-			bVCI := t_BSSGP_BVCI(bvci),
-			cell_Identifier := t_BSSGP_IE_CellId(cell_id),
+			bVCI := tr_BSSGP_BVCI(bvci),
+			cell_Identifier := tr_BSSGP_IE_CellId(cell_id),
 			feature_bitmap := *,
 			extended_Feature_Bitmap := *
 		}
@@ -1205,40 +1285,67 @@
 
 
 	/* 10.4.10 */
-	template PDU_BSSGP t_BVC_UNBLOCK(template BssgpBvci bvci) := {
+	template (present) PDU_BSSGP tr_BVC_UNBLOCK(template (present) BssgpBvci bvci) := {
 		pDU_BSSGP_BVC_UNBLOCK := {
 			bssgpPduType := '24'O,
-			bVCI := t_BSSGP_BVCI(bvci)
+			bVCI := tr_BSSGP_BVCI(bvci)
+		}
+	}
+	template (value) PDU_BSSGP ts_BVC_UNBLOCK(template (value) BssgpBvci bvci) := {
+		pDU_BSSGP_BVC_UNBLOCK := {
+			bssgpPduType := '24'O,
+			bVCI := ts_BSSGP_BVCI(bvci)
 		}
 	}
 
 	/* 10.4.11 */
-	template PDU_BSSGP t_BVC_UNBLOCK_ACK(template BssgpBvci bvci) := {
+	template (present) PDU_BSSGP tr_BVC_UNBLOCK_ACK(template (present) BssgpBvci bvci) := {
 		pDU_BSSGP_BVC_UNBLOCK_ACK := {
 			bssgpPduType := '25'O,
-			bVCI := t_BSSGP_BVCI(bvci)
+			bVCI := tr_BSSGP_BVCI(bvci)
+		}
+	}
+	template (value) PDU_BSSGP ts_BVC_UNBLOCK_ACK(template (value) BssgpBvci bvci) := {
+		pDU_BSSGP_BVC_UNBLOCK_ACK := {
+			bssgpPduType := '25'O,
+			bVCI := ts_BSSGP_BVCI(bvci)
 		}
 	}
 
 	/* 10.4.8 */
-	template PDU_BSSGP t_BVC_BLOCK(template BssgpBvci bvci, template BssgpCause cause) := {
+	template (present) PDU_BSSGP tr_BVC_BLOCK(template (present) BssgpBvci bvci,
+						  template (present) BssgpCause cause) := {
 		pDU_BSSGP_BVC_BLOCK := {
 			bssgpPduType := '20'O,
-			bVCI := t_BSSGP_BVCI(bvci),
-			cause := t_BSSGP_CAUSE(cause)
+			bVCI := tr_BSSGP_BVCI(bvci),
+			cause := tr_BSSGP_CAUSE(cause)
+		}
+	}
+	template (value) PDU_BSSGP ts_BVC_BLOCK(template (value) BssgpBvci bvci,
+						template (value) BssgpCause cause) := {
+		pDU_BSSGP_BVC_BLOCK := {
+			bssgpPduType := '20'O,
+			bVCI := ts_BSSGP_BVCI(bvci),
+			cause := ts_BSSGP_CAUSE(cause)
 		}
 	}
 
 	/* 10.4.9 */
-	template PDU_BSSGP t_BVC_BLOCK_ACK(template BssgpBvci bvci) := {
+	template (present) PDU_BSSGP tr_BVC_BLOCK_ACK(template (present) BssgpBvci bvci) := {
 		pDU_BSSGP_BVC_BLOCK_ACK := {
 			bssgpPduType := '21'O,
-			bVCI := t_BSSGP_BVCI(bvci)
+			bVCI := tr_BSSGP_BVCI(bvci)
+		}
+	}
+	template (value) PDU_BSSGP ts_BVC_BLOCK_ACK(template (value) BssgpBvci bvci) := {
+		pDU_BSSGP_BVC_BLOCK_ACK := {
+			bssgpPduType := '21'O,
+			bVCI := ts_BSSGP_BVCI(bvci)
 		}
 	}
 
 	/* 10.4.4 */
-	template PDU_BSSGP t_BVC_FC_BVC(uint16_t bmax, uint16_t bucket_leak_rate,
+	template (value) PDU_BSSGP ts_BVC_FC_BVC(uint16_t bmax, uint16_t bucket_leak_rate,
 					uint16_t bmax_default_ms, uint16_t r_default_ms, OCT1 tag) := {
 		pDU_BSSGP_FLOW_CONTROL_BVC := {
 			bssgpPduType := '26'O,
@@ -1256,7 +1363,7 @@
 				lengthIndicator := {
 					length1 := 2
 				},
-				bmax := f_oct_or_wc(bmax, 2)
+				bmax := int2oct(bmax, 2)
 			},
 			bucket_Leak_Rate := {
 				iEI := '03'O,
@@ -1264,7 +1371,7 @@
 				lengthIndicator := {
 					length1 := 2
 				},
-				r_Value := f_oct_or_wc(bucket_leak_rate, 2)
+				r_Value := int2oct(bucket_leak_rate, 2)
 			},
 			bmax_default_MS := {
 				iEI := '01'O,
@@ -1272,7 +1379,7 @@
 				lengthIndicator := {
 					length1 := 2
 				},
-				bmax := f_oct_or_wc(bmax_default_ms, 2)
+				bmax := int2oct(bmax_default_ms, 2)
 			},
 			r_default_MS := {
 				iEI := '1C'O,
@@ -1280,7 +1387,7 @@
 				lengthIndicator := {
 					length1 := 2
 				},
-				r_default_MS_value := f_oct_or_wc(r_default_ms, 2)
+				r_default_MS_value := int2oct(r_default_ms, 2)
 			},
 			bucket_Full_Ratio := omit,
 			bVC_Measurement := omit,
@@ -1341,7 +1448,20 @@
 	}
 
 	/* 10.4.5 */
-	template PDU_BSSGP t_BVC_FC_BVC_ACK(template OCT1 tag) := {
+	template (present) PDU_BSSGP tr_BVC_FC_BVC_ACK(template (present) OCT1 tag) := {
+		pDU_BSSGP_FLOW_CONTROL_BVC_ACK := {
+			bssgpPduType := '27'O,
+			tag := {
+				iEI := '1E'O,
+				ext := '1'B,
+				lengthIndicator := {
+					length1 := 1
+				},
+				unstructured_Value := tag
+			}
+		}
+	}
+	template (value) PDU_BSSGP ts_BVC_FC_BVC_ACK(template (value) OCT1 tag) := {
 		pDU_BSSGP_FLOW_CONTROL_BVC_ACK := {
 			bssgpPduType := '27'O,
 			tag := {
@@ -1395,7 +1515,7 @@
 						  template (present) OCT1 tag := ?) := {
 		pDU_BSSGP_FLOW_CONTROL_MS := {
 			bssgpPduType := '28'O,
-			tLLI := ts_BSSGP_TLLI(tlli),
+			tLLI := tr_BSSGP_TLLI(tlli),
 			tag := {
 				iEI := '1E'O,
 				ext := '1'B,
@@ -1460,12 +1580,13 @@
 	}
 
 	/* 10.4.14 */
-	template PDU_BSSGP ts_BSSGP_STATUS(template (omit) BssgpBvci bvci, template BssgpCause cause,
-					   PDU_BSSGP pdu) := {
+	template (value) PDU_BSSGP ts_BSSGP_STATUS(template (omit) BssgpBvci bvci,
+						   template (value) BssgpCause cause,
+						   PDU_BSSGP pdu) := {
 		pDU_BSSGP_STATUS := {
 			bssgpPduType := '41'O,
-			cause := t_BSSGP_CAUSE(cause),
-			bVCI := t_BSSGP_BVCI(bvci),
+			cause := ts_BSSGP_CAUSE(cause),
+			bVCI := f_ts_BSSGP_BVCI(bvci),
 			pDU_in_Error := {
 				iEI := '15'O,
 				ext := '1'B,
@@ -1480,8 +1601,8 @@
 					   template octetstring pdu := ?) := {
 		pDU_BSSGP_STATUS := {
 			bssgpPduType := '41'O,
-			cause := t_BSSGP_CAUSE(cause),
-			bVCI := t_BSSGP_BVCI(bvci),
+			cause := tr_BSSGP_CAUSE(cause),
+			bVCI := tr_BSSGP_BVCI(bvci),
 			pDU_in_Error := {
 				iEI := '15'O,
 				ext := '1'B,
@@ -1596,7 +1717,7 @@
 		peakBitRateGranularity := '00'B
 	}
 
-	template QoS_Profile ts_QoS_TLV(template QoS_Profile_V qos) := {
+	template (value) QoS_Profile ts_QoS_TLV(template (value) QoS_Profile_V qos) := {
 		iEI := '18'O,
 		ext := '1'B,
 		lengthIndicator := { length1 := 3 },
@@ -1608,13 +1729,13 @@
 		peakBitRateGranularity := qos.peakBitRateGranularity
 	}
 
-	template PDU_Lifetime t_DefaultLifetime(uint16_t delay := 65535) := {
+	template (value) PDU_Lifetime t_DefaultLifetime(uint16_t delay := 65535) := {
 		iEI := '16'O,
 		ext := '1'B,
 		lengthIndicator := {
 			length1 := 2
 		},
-		delay_Value := f_oct_or_wc(delay, 2)
+		delay_Value := int2oct(delay, 2)
 	}
 
 	template DRX_Parameters t_defaultDRXparam := {
@@ -1662,7 +1783,7 @@
 	}
 
 	/* 10.2.1 */
-	template PDU_BSSGP ts_BSSGP_DL_UD(GprsTlli tlli, octetstring pdu,
+	template (value) PDU_BSSGP ts_BSSGP_DL_UD(GprsTlli tlli, octetstring pdu,
 					  template (omit) MSRadioAccessCapabilityV_BSSGP racap := omit,
 					  template (omit) IMSI_BSSGP imsi := omit) := {
 		pDU_BSSGP_DL_UNITDATA := {
@@ -1693,8 +1814,8 @@
 			initialLLC_PDU := omit
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_DL_UD(template (present) GprsTlli tlli, template (present) octetstring pdu,
-					  template IMSI_BSSGP imsi := omit) := {
+	template (present) PDU_BSSGP tr_BSSGP_DL_UD(template (present) GprsTlli tlli, template (present) octetstring pdu,
+					  template (omit) IMSI_BSSGP imsi := omit) := {
 		pDU_BSSGP_DL_UNITDATA := {
 			bssgpPduType := '00'O,
 			tLLI_current := tlli,
@@ -1725,12 +1846,12 @@
 	}
 
 	/* 10.2.2 */
-	template PDU_BSSGP ts_BSSGP_UL_UD(GprsTlli tlli, BssgpCellId cell_id, octetstring payload) := {
+	template (value) PDU_BSSGP ts_BSSGP_UL_UD(GprsTlli tlli, BssgpCellId cell_id, octetstring payload) := {
 		pDU_BSSGP_UL_UNITDATA := {
 			bssgpPduType := '01'O,
 			tLLI := tlli,
 			qoS_Profile := t_defaultQos,
-			cell_Identifier := t_BSSGP_IE_CellId(cell_id),
+			cell_Identifier := ts_BSSGP_IE_CellId(cell_id),
 			pFI := omit,
 			lSA_Identifier_List := omit,
 			redirect_Attempt_Flag := omit,
@@ -1749,7 +1870,7 @@
 			bssgpPduType := '01'O,
 			tLLI := tlli,
 			qoS_Profile := ?,
-			cell_Identifier := t_BSSGP_IE_CellId(cell_id),
+			cell_Identifier := tr_BSSGP_IE_CellId(cell_id),
 			pFI := *,
 			lSA_Identifier_List := *,
 			redirect_Attempt_Flag := *,
@@ -1770,7 +1891,7 @@
 			iMSI := ?,
 			dRX_Parameters := ?,
 			paging_Field4 := {
-				bVCI := t_BSSGP_BVCI(bvci)
+				bVCI := ts_BSSGP_BVCI(bvci)
 			},
 			tLLI := *,
 			channel_needed := *,
@@ -1779,13 +1900,13 @@
 			global_CN_Id := *
 		}
 	}
-	template PDU_BSSGP ts_BSSGP_CS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {
+	template (value) PDU_BSSGP ts_BSSGP_CS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {
 		pDU_BSSGP_PAGING_CS := {
 			bssgpPduType := '07'O,
 			iMSI := ts_BSSGP_IMSI(imsi),
 			dRX_Parameters := t_defaultDRXparam,
 			paging_Field4 := {
-				bVCI := t_BSSGP_BVCI(bvci)
+				bVCI := ts_BSSGP_BVCI(bvci)
 			},
 			tLLI := omit,
 			channel_needed := omit,
@@ -1794,13 +1915,13 @@
 			global_CN_Id := omit
 		}
 	}
-	template PDU_BSSGP ts_BSSGP_CS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {
+	template (value) PDU_BSSGP ts_BSSGP_CS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {
 		pDU_BSSGP_PAGING_CS := {
 			bssgpPduType := '07'O,
 			iMSI := ts_BSSGP_IMSI(imsi),
 			dRX_Parameters := t_defaultDRXparam,
 			paging_Field4 := {
-				bVCI := t_BSSGP_BVCI(bvci)
+				bVCI := ts_BSSGP_BVCI(bvci)
 			},
 			tLLI := omit,
 			channel_needed := omit,
@@ -1817,7 +1938,7 @@
 			iMSI := ?,
 			dRX_Parameters := *,
 			paging_Field4 := {
-				bVCI := t_BSSGP_BVCI(bvci)
+				bVCI := tr_BSSGP_BVCI(bvci)
 			},
 			pFI := *,
 			aBQP := *,
@@ -1826,13 +1947,13 @@
 			eDRX_Paremeters := *
 		}
 	}
-	template PDU_BSSGP ts_BSSGP_PS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {
+	template (value) PDU_BSSGP ts_BSSGP_PS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {
 		pDU_BSSGP_PAGING_PS := {
 			bssgpPduType := '06'O,
 			iMSI := ts_BSSGP_IMSI(imsi),
 			dRX_Parameters := omit,
 			paging_Field4 := {
-				bVCI := t_BSSGP_BVCI(bvci)
+				bVCI := ts_BSSGP_BVCI(bvci)
 			},
 			pFI := omit,
 			aBQP := omit,
@@ -1841,13 +1962,13 @@
 			eDRX_Paremeters := omit
 		}
 	}
-	template PDU_BSSGP ts_BSSGP_PS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {
+	template (value) PDU_BSSGP ts_BSSGP_PS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {
 		pDU_BSSGP_PAGING_PS := {
 			bssgpPduType := '06'O,
 			iMSI := ts_BSSGP_IMSI(imsi),
 			dRX_Parameters := omit,
 			paging_Field4 := {
-				bVCI := t_BSSGP_BVCI(bvci)
+				bVCI := ts_BSSGP_BVCI(bvci)
 			},
 			pFI := omit,
 			aBQP := omit,
@@ -1877,7 +1998,7 @@
 	}
 
 	template (value) Paging_Field4 ts_BssgpP4Bvci(BssgpBvci bvci) := {
-		bVCI := t_BSSGP_BVCI(bvci)
+		bVCI := ts_BSSGP_BVCI(bvci)
 	}
 
 	template (value) Location_Area ts_BSSGP_LA_ID(GSM_Types.LocationAreaIdentification input) := {
@@ -1941,7 +2062,7 @@
 			routeing_Area := ts_BSSGP_RA_ID(ra_id)
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_SUSPEND(template GprsTlli tlli, RoutingAreaIdentification ra_id) := {
+	template PDU_BSSGP tr_BSSGP_SUSPEND(template (present) GprsTlli tlli, RoutingAreaIdentification ra_id) := {
 		pDU_BSSGP_SUSPEND := {
 			bssgpPduType := '0B'O,
 			tLLI := tr_BSSGP_TLLI(tlli),
@@ -1985,7 +2106,7 @@
 			bssgpPduType := '0D'O,
 			tLLI := tr_BSSGP_TLLI(tlli),
 			routeing_Area := ts_BSSGP_RA_ID(ra_id),
-			cause := t_BSSGP_CAUSE(cause)
+			cause := tr_BSSGP_CAUSE(cause)
 		}
 	}
 
@@ -2000,7 +2121,7 @@
 			suspend_Reference_Number := ts_BSSGP_SUSP_REF(susp_ref)
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_RESUME(template GprsTlli tlli, RoutingAreaIdentification ra_id,
+	template PDU_BSSGP tr_BSSGP_RESUME(template (present) GprsTlli tlli, RoutingAreaIdentification ra_id,
 					   template OCT1 susp_ref) := {
 		pDU_BSSGP_RESUME := {
 			bssgpPduType := '0E'O,
@@ -2019,7 +2140,7 @@
 			routeing_Area := ts_BSSGP_RA_ID(ra_id)
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_RESUME_ACK(template GprsTlli tlli,
+	template PDU_BSSGP tr_BSSGP_RESUME_ACK(template (present) GprsTlli tlli,
 						RoutingAreaIdentification ra_id) := {
 		pDU_BSSGP_RESUME_ACK := {
 			bssgpPduType := '0F'O,
@@ -2038,14 +2159,14 @@
 			cause := ts_BSSGP_CAUSE(cause)
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_RESUME_NACK(template GprsTlli tlli,
+	template PDU_BSSGP tr_BSSGP_RESUME_NACK(template (present) GprsTlli tlli,
 						RoutingAreaIdentification ra_id,
 						template BssgpCause cause) := {
 		pDU_BSSGP_RESUME_NACK := {
 			bssgpPduType := '10'O,
 			tLLI := tr_BSSGP_TLLI(tlli),
 			routeing_Area := ts_BSSGP_RA_ID(ra_id),
-			cause := t_BSSGP_CAUSE(cause)
+			cause := tr_BSSGP_CAUSE(cause)
 		}
 	}
 
@@ -2181,7 +2302,7 @@
 		if (istemplatekind(mccmnc, "omit")) {
 			return omit;
 		} else {
-			return ts_BSSGP_PlmnId(mccmnc);
+			return ts_BSSGP_PlmnId(valueof(mccmnc));
 		}
 	}
 	private function f_tr_BSSGP_PlmnId(template BcdMccMnc mccmnc)
@@ -2193,7 +2314,7 @@
 		} else if (istemplatekind(mccmnc, "?")) {
 			return ?;
 		} else {
-			return ts_BSSGP_PlmnId(mccmnc);
+			return ts_BSSGP_PlmnId(valueof(mccmnc));
 		}
 	}
 
@@ -2220,20 +2341,20 @@
 		pDU_BSSGP_FLUSH_LL := {
 			bssgpPduType := '2A'O,
 			tLLI := ts_BSSGP_TLLI(tlli),
-			bVCI_old := t_BSSGP_BVCI(bvci_old),
-			bVCI_new := t_BSSGP_BVCI(bvci_new),
-			nSEI := t_BSSGP_NSEI(nsei)
+			bVCI_old := ts_BSSGP_BVCI(bvci_old),
+			bVCI_new := f_ts_BSSGP_BVCI(bvci_new),
+			nSEI := f_ts_BSSGP_NSEI(nsei)
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_FLUSH_LL(template GprsTlli tlli, template BssgpBvci bvci_old,
+	template PDU_BSSGP tr_BSSGP_FLUSH_LL(template (present) GprsTlli tlli, template BssgpBvci bvci_old,
 					     template (omit) BssgpBvci bvci_new := omit,
 					     template (omit) Nsei nsei := omit) := {
 		pDU_BSSGP_FLUSH_LL := {
 			bssgpPduType := '2A'O,
 			tLLI := tr_BSSGP_TLLI(tlli),
-			bVCI_old := t_BSSGP_BVCI(bvci_old),
-			bVCI_new := t_BSSGP_BVCI(bvci_new),
-			nSEI := t_BSSGP_NSEI(nsei)
+			bVCI_old := tr_BSSGP_BVCI(bvci_old),
+			bVCI_new := f_ts_BSSGP_BVCI(bvci_new),
+			nSEI := f_ts_BSSGP_NSEI(nsei)
 		}
 	}
 
@@ -2245,23 +2366,23 @@
 		pDU_BSSGP_FLUSH_LL_ACK := {
 			bssgpPduType := '2B'O,
 			tLLI := ts_BSSGP_TLLI(tlli),
-			flush_Action := t_FLUSH_ACTION(act),
-			bVCI_new := t_BSSGP_BVCI(bvci_new),
-			number_of_octets_affected := t_NO_OCT_AFF(oct_affected),
-			nSEI := t_BSSGP_NSEI(nsei)
+			flush_Action := ts_FLUSH_ACTION(act),
+			bVCI_new := f_ts_BSSGP_BVCI(bvci_new),
+			number_of_octets_affected := ts_NO_OCT_AFF(oct_affected),
+			nSEI := f_ts_BSSGP_NSEI(nsei)
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_FLUSH_LL_ACK(template GprsTlli tlli, template OCT1 act,
+	template PDU_BSSGP tr_BSSGP_FLUSH_LL_ACK(template (present) GprsTlli tlli, template OCT1 act,
 						 template integer oct_affected,
 						 template (omit) BssgpBvci bvci_new := omit,
 						 template (omit) Nsei nsei := omit) := {
 		pDU_BSSGP_FLUSH_LL_ACK := {
 			bssgpPduType := '2B'O,
-			tLLI := ts_BSSGP_TLLI(tlli),
-			flush_Action := t_FLUSH_ACTION(act),
-			bVCI_new := t_BSSGP_BVCI(bvci_new),
-			number_of_octets_affected := t_NO_OCT_AFF(oct_affected),
-			nSEI := t_BSSGP_NSEI(nsei)
+			tLLI := tr_BSSGP_TLLI(tlli),
+			flush_Action := tr_FLUSH_ACTION(act),
+			bVCI_new := f_ts_BSSGP_BVCI(bvci_new),
+			number_of_octets_affected := tr_NO_OCT_AFF(oct_affected),
+			nSEI := f_ts_BSSGP_NSEI(nsei)
 		}
 	}
 
@@ -2272,21 +2393,21 @@
 		pDU_BSSGP_LLC_DISCARDED := {
 			bssgpPduType := '2C'O,
 			tLLI := ts_BSSGP_TLLI(tlli),
-			lLC_Frames_Discarded := t_LLC_FRAMES_DISCARDED(frames_discarded),
-			bVCI := t_BSSGP_BVCI(bvci),
-			number_of_octets_deleted := t_NO_OCT_AFF(oct_deleted),
+			lLC_Frames_Discarded := ts_LLC_FRAMES_DISCARDED(frames_discarded),
+			bVCI := ts_BSSGP_BVCI(bvci),
+			number_of_octets_deleted := ts_NO_OCT_AFF(oct_deleted),
 			pFI := omit
 		}
 	}
-	template PDU_BSSGP tr_BSSGP_LLC_DISCARDED(template GprsTlli tlli, template integer frames_discarded,
+	template PDU_BSSGP tr_BSSGP_LLC_DISCARDED(template (present) GprsTlli tlli, template integer frames_discarded,
 						 template BssgpBvci bvci,
 						 template integer oct_deleted) := {
 		pDU_BSSGP_LLC_DISCARDED := {
 			bssgpPduType := '2C'O,
-			tLLI := ts_BSSGP_TLLI(tlli),
-			lLC_Frames_Discarded := t_LLC_FRAMES_DISCARDED(frames_discarded),
-			bVCI := t_BSSGP_BVCI(bvci),
-			number_of_octets_deleted := t_NO_OCT_AFF(oct_deleted),
+			tLLI := tr_BSSGP_TLLI(tlli),
+			lLC_Frames_Discarded := tr_LLC_FRAMES_DISCARDED(frames_discarded),
+			bVCI := tr_BSSGP_BVCI(bvci),
+			number_of_octets_deleted := tr_NO_OCT_AFF(oct_deleted),
 			pFI := *
 		}
 	}
@@ -2304,7 +2425,7 @@
 						     template MSRadioAccessCapabilityV_BSSGP racap) := {
 		pDU_BSSGP_RA_CAPABILITY := {
 			bssgpPduType := '02'O,
-			tLLI := ts_BSSGP_TLLI(tlli),
+			tLLI := tr_BSSGP_TLLI(tlli),
 			mS_Radio_Access_Capability := tr_BSSGP_IE_MSRAcap(racap)
 		}
 	}
@@ -2319,10 +2440,10 @@
 		}
 	}
 	template (present) PDU_BSSGP tr_BSSGP_RA_CAP_UPD(template (present) GprsTlli tlli,
-						     template OCT1 tag) := {
+						     template (present) OCT1 tag) := {
 		pDU_BSSGP_RA_CAPABILITY_UPDATE := {
 			bssgpPduType := '08'O,
-			tLLI := ts_BSSGP_TLLI(tlli),
+			tLLI := tr_BSSGP_TLLI(tlli),
 			tag := tr_BSSGP_IE_Tag(tag)
 		}
 	}
@@ -2342,11 +2463,11 @@
 		}
 	}
 	template (present) PDU_BSSGP
-	tr_BSSGP_RA_CAP_UPD_ACK(template (present) GprsTlli tlli, template OCT1 tag, template (present) OCT1 cause,
+	tr_BSSGP_RA_CAP_UPD_ACK(template (present) GprsTlli tlli, template (present) OCT1 tag, template (present) OCT1 cause,
 			        template MSRadioAccessCapabilityV_BSSGP racap := omit) := {
 		pDU_BSSGP_RA_CAPABILITY_UPDATE_ACK := {
 			bssgpPduType := '09'O,
-			tLLI := ts_BSSGP_TLLI(tlli),
+			tLLI := tr_BSSGP_TLLI(tlli),
 			tag := tr_BSSGP_IE_Tag(tag),
 			iMSI := omit,
 			rA_Cap_UPDATE_CAUSE := tr_BSSGP_IE_RACU_Cause(cause),
@@ -2375,7 +2496,7 @@
 		return ret;
 	}
 	function tr_BSSGP_RADIO_CAUSE(template BssgpRadioCause cause) return template (present) Radio_Cause {
-		var template Radio_Cause ret;
+		var template (present) Radio_Cause ret;
 		ret.iEI := '19'O;
 		ret.ext := '1'B;
 		ret.lengthIndicator := { length1 := 1 };
@@ -2832,7 +2953,7 @@
 		 lengthIndicator := {
 			length1 := 0 /* overwritten */
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid)
+		 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid)
 	}
 	template RAN_Information_Request_Application_Container_NACC
 	tr_RAN_Information_Request_Application_Container_NACC(template BssgpCellId cid := ?) := {
@@ -2841,7 +2962,7 @@
 		 lengthIndicator := {
 			length1 := ?
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid)
+		 reporting_Cell_Identifier := tr_Cell_Identifier_V(cid)
 	}
 
 	/* 3GPP TS 48.018 11.3.63.1.2 */
@@ -2852,7 +2973,7 @@
 		 lengthIndicator := {
 			length1 := 0 /* overwritten */
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid)
+		 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid)
 	}
 
 	/* 3GPP TS 48.018 11.3.63.1.3 */
@@ -2863,7 +2984,7 @@
 		 lengthIndicator := {
 			length1 := 0 /* overwritten */
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid)
+		 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid)
 	}
 
 	/* 3GPP TS 48.018 11.3.63.2.1 */
@@ -2874,7 +2995,7 @@
 		 lengthIndicator := {
 			length1 := 0 /* overwritten */
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid),
+		 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid),
 		 typeBit := bool2bit(psi_type),
 		 number_of_SI_PSI := int2bit(si_psi_num, 7),
 		 sI_PSI := si_psi
@@ -2886,7 +3007,7 @@
 		 ret.iEI := '4E'O;
 		 ret.ext := '1'B;
 		 ret.lengthIndicator := { length1 := ? };
-		 ret.reporting_Cell_Identifier := t_Cell_Identifier_V(cid);
+		 ret.reporting_Cell_Identifier := tr_Cell_Identifier_V(cid);
 		 if (istemplatekind(psi_type, "*")) {
 			ret.typeBit := *;
 		 } else if (istemplatekind(psi_type, "?")) {
@@ -2913,7 +3034,7 @@
 		 lengthIndicator := {
 			length1 := 0 /* overwritten */
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid),
+		 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid),
 		 sI3 := si3
 	}
 
@@ -2925,7 +3046,7 @@
 		 lengthIndicator := {
 			length1 := 0 /* overwritten */
 		 },
-		 reporting_Cell_Identifier := t_Cell_Identifier_V(cid),
+		 reporting_Cell_Identifier := ts_Cell_Identifier_V(cid),
 		 mBMS_data_channel_report := data_ch_report
 	}
 
@@ -3244,7 +3365,7 @@
 	}
 
 	template RIM_Routing_Address t_RIM_Routing_Address_cid(template BssgpCellId cid := ?) := {
-		 cell_Identifier := t_Cell_Identifier_V(cid)
+		 cell_Identifier := tr_Cell_Identifier_V(cid)
 	}
 	template RIM_Routing_Address t_RIM_Routing_Address_rncid(template BssgpCellId cid := ?, template integer rnc_id := ?) := {
 		 globalRNCID := t_GlobalRNC_ID_BSSGP(cid, rnc_id)
@@ -3256,7 +3377,7 @@
 		 eHRPD_SectorID := sector
 	}
 
-	function t_Cell_Identifier_V(template BssgpCellId cid) return template Cell_Identifier_V {
+	function tr_Cell_Identifier_V(template BssgpCellId cid) return template Cell_Identifier_V {
 		var template Cell_Identifier_V ret := {
 			mccDigit1 := ?,
 			mccDigit2 := ?,
@@ -3296,6 +3417,17 @@
 		}
 		return ret;
 	}
+	template (value) Cell_Identifier_V ts_Cell_Identifier_V(template (value) BssgpCellId cid) := {
+		mccDigit1 := cid.ra_id.lai.mcc_mnc[0],
+		mccDigit2 := cid.ra_id.lai.mcc_mnc[1],
+		mccDigit3 := cid.ra_id.lai.mcc_mnc[2],
+		mncDigit3 := cid.ra_id.lai.mcc_mnc[3],
+		mncDigit1 := cid.ra_id.lai.mcc_mnc[4],
+		mncDigit2 := cid.ra_id.lai.mcc_mnc[5],
+		lac := int2oct(valueof(cid.ra_id.lai.lac), 2),
+		rac := int2oct(valueof(cid.ra_id.rac), 1),
+		cI_value := int2oct(valueof(cid.cell_id), 2)
+	}
 
 	function t_GlobalRNC_ID_BSSGP(template BssgpCellId cid, template integer rnc_id) return template GlobalRNC_ID_BSSGP {
 		var template GlobalRNC_ID_BSSGP ret := {
diff --git a/library/RAW_NS.ttcnpp b/library/RAW_NS.ttcnpp
index 81836c7..2aaa770 100644
--- a/library/RAW_NS.ttcnpp
+++ b/library/RAW_NS.ttcnpp
@@ -213,9 +213,9 @@
 /* Receive a BSSGP UNBLOCK for given BVCI and ACK it */
 altstep as_rx_bvc_unblock_tx_ack(BssgpBvci bvci, boolean oneshot := false, integer idx := 0) runs on RAW_NS_CT {
 	var PDU_NS ns_rf;
-	[] NSCP[idx].receive(tr_NS_UNITDATA(t_SduCtrlB, 0, decmatch t_BVC_UNBLOCK(bvci))) -> value ns_rf {
+	[] NSCP[idx].receive(tr_NS_UNITDATA(t_SduCtrlB, 0, decmatch tr_BVC_UNBLOCK(bvci))) -> value ns_rf {
 		var PDU_BSSGP bssgp_rx := dec_PDU_BSSGP(ns_rf.pDU_NS_Unitdata.nS_SDU);
-		var PDU_BSSGP bssgp_tx := valueof(t_BVC_UNBLOCK_ACK(bvci));
+		var PDU_BSSGP bssgp_tx := valueof(ts_BVC_UNBLOCK_ACK(bvci));
 		NSCP[idx].send(ts_NS_UNITDATA(t_SduCtrlB, 0, enc_PDU_BSSGP(bssgp_tx)));
 		if (not oneshot) { repeat; }
 		}
@@ -229,7 +229,7 @@
 								-> value ns_rf {
 		var PDU_BSSGP bssgp_rx := dec_PDU_BSSGP(ns_rf.pDU_NS_Unitdata.nS_SDU);
 		var OCT1 tag := bssgp_rx.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value;
-		var PDU_BSSGP bssgp_tx := valueof(t_BVC_FC_BVC_ACK(tag));
+		var PDU_BSSGP bssgp_tx := valueof(ts_BVC_FC_BVC_ACK(tag));
 		NSCP[idx].send(ts_NS_UNITDATA(t_SduCtrlB, bvci, enc_PDU_BSSGP(bssgp_tx)));
 		if (not oneshot) { repeat; }
 		}

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22731
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I3da153ce5e83b231501e74b958fcac9f10c00849
Gerrit-Change-Number: 22731
Gerrit-PatchSet: 6
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210208/9c2f8526/attachment.htm>


More information about the gerrit-log mailing list