Implement SystemInformation13 Rest Octets types

Related: SYS#5358
Change-Id: Id8845ebe28a9a6ed79d2d408dc7c1ad8a275b809
diff --git a/library/GSM_RestOctets.ttcn b/library/GSM_RestOctets.ttcn
index d47e510..9aa1217 100644
--- a/library/GSM_RestOctets.ttcn
+++ b/library/GSM_RestOctets.ttcn
@@ -15,6 +15,7 @@
 
 import from General_Types all;
 import from Osmocom_Types all;
+import from RLCMAC_CSN1_Types all;
 
 /* 10.5.2.33b SI 2quater Rest Octets */
 type record SI2quaterRestOctets {
@@ -692,6 +693,34 @@
 	variant "PADDING(yes), PADDING_PATTERN('00101011'B)"
 };
 
+/* 10.5.2.37b SI 13 Rest Octets (O & S) */
+type record SI13RestOctets {
+	BIT1			presence, // L/H
+	uint3_t			bcch_change_mark,
+	BIT4			si_change_field,
+	BIT1			presence2,
+	BIT2			si13_change_mark optional,
+	GprsMobileAllocation	gprs_ma optional,
+	BIT1			zero ('0'B), /* PBCCH not present in cell */
+	uint8_t			rac,
+	BIT1			spgc_ccch_sup,
+	BIT3			priority_access_thr,
+	BIT2			network_control_order,
+	GprsCellOptions		gprs_cell_opts,
+	GprsPowerControlParameters gprs_pwr_ctrl_params
+	/* TODO: Additions in release 99 */
+} with {
+
+	variant (presence) "CSN.1 L/H"
+	/* TODO: for all fields after presencte: variant (<field>) "PRESENCE(presence = '1'B)" */
+	variant (si13_change_mark) "PRESENCE(presence2 = '1'B)"
+	variant (gprs_ma) "PRESENCE(presence2 = '1'B)"
+
+	/* The TITAN's RAW encoder generates an octet-aligned octetstring,
+	 * so we should make sure that unused bits contain proper padding. */
+	variant "PADDING(yes), PADDING_PATTERN('00101011'B)"
+};
+
 /* Selection Parameters */
 type record SelectionParams {
 	boolean			cbq,
@@ -777,6 +806,11 @@
 external function dec_SI4RestOctets(in octetstring stream) return SI4RestOctets
 	with { extension "prototype(convert) decode(RAW)" };
 
+external function enc_SI13RestOctets(in SI13RestOctets ro) return octetstring
+	with { extension "prototype(convert) encode(RAW)" };
+external function dec_SI13RestOctets(in octetstring stream) return SI13RestOctets
+	with { extension "prototype(convert) decode(RAW)" };
+
 
 /* Basic templates to be extended in place */
 template (value) SI3RestOctets ts_SI3RestOctets := {